Version Description
(31 Aug 2020 ) = * Fixed some errors cause by the last version
Download this release
Release Info
Developer | johndarrel |
Plugin | Hide My WP Ghost – Security Plugin |
Version | 4.0.10 |
Comparing to | |
See all releases |
Version 4.0.10
- classes/Action.php +116 -0
- classes/DisplayController.php +98 -0
- classes/Error.php +95 -0
- classes/FrontController.php +124 -0
- classes/HookController.php +92 -0
- classes/ObjController.php +159 -0
- classes/Tools.php +1243 -0
- config.json +82 -0
- config/config.php +38 -0
- config/paths.php +24 -0
- controllers/Brute.php +281 -0
- controllers/Menu.php +248 -0
- controllers/Notice.php +174 -0
- controllers/Plugins.php +83 -0
- controllers/Rewrite.php +318 -0
- controllers/SecurityCheck.php +1446 -0
- controllers/Settings.php +603 -0
- controllers/Widget.php +43 -0
- debug/index.php +238 -0
- index.php +83 -0
- languages/hide-my-wp-en_US.mo +0 -0
- languages/hide-my-wp-en_US.po +2846 -0
- languages/hide-my-wp-es_ES.mo +0 -0
- languages/hide-my-wp-es_ES.po +3580 -0
- languages/hide-my-wp-ro_RO.mo +0 -0
- languages/hide-my-wp-ro_RO.po +3416 -0
- models/Brute.php +477 -0
- models/Compatibility.php +470 -0
- models/Cookies.php +185 -0
- models/Files.php +400 -0
- models/Menu.php +130 -0
- models/Rewrite.php +2070 -0
- models/Rules.php +263 -0
- models/Settings.php +347 -0
- models/Woocommerce.php +20 -0
- readme.txt +745 -0
- uninstall.php +15 -0
- view/Advanced.php +245 -0
- view/Backup.php +65 -0
- view/Brute.php +160 -0
- view/Connect.php +91 -0
- view/Dashboard.php +133 -0
- view/FrontendCheck.php +63 -0
- view/Log.php +93 -0
- view/Mapping.php +257 -0
- view/Notices.php +2 -0
- view/Permalinks.php +611 -0
- view/Plugins.php +44 -0
- view/SecurityCheck.php +142 -0
- view/Support.php +14 -0
- view/Tweaks.php +213 -0
- view/css/alert.css +72 -0
- view/css/bootstrap.min.css +1 -0
classes/Action.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Set the ajax action and call for wordpress
|
6 |
+
*/
|
7 |
+
class HMW_Classes_Action extends HMW_Classes_FrontController {
|
8 |
+
|
9 |
+
/** @var array with all form and ajax actions */
|
10 |
+
var $actions = array();
|
11 |
+
|
12 |
+
/** @var array from core config */
|
13 |
+
private static $config;
|
14 |
+
|
15 |
+
|
16 |
+
/**
|
17 |
+
* The hookAjax is loaded as custom hook in hookController class
|
18 |
+
*
|
19 |
+
* @return void
|
20 |
+
*/
|
21 |
+
public function hookInit() {
|
22 |
+
if (HMW_Classes_Tools::isAjax()) {
|
23 |
+
$this->getActions(true);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
function hookFrontinit() {
|
28 |
+
/* Only if post */
|
29 |
+
if (HMW_Classes_Tools::isAjax()) {
|
30 |
+
$this->getActions();
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The hookSubmit is loaded when action si posted
|
36 |
+
*
|
37 |
+
* @return void
|
38 |
+
*/
|
39 |
+
function hookMenu() {
|
40 |
+
/* Only if post */
|
41 |
+
if (!HMW_Classes_Tools::isAjax()) {
|
42 |
+
$this->getActions();
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
function hookMultisiteMenu() {
|
47 |
+
/* Only if post */
|
48 |
+
if (!HMW_Classes_Tools::isAjax()) {
|
49 |
+
$this->getActions();
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Get all actions from config.json in core directory and add them in the WP
|
56 |
+
*
|
57 |
+
* @param boolean $ajax
|
58 |
+
* @return void
|
59 |
+
*/
|
60 |
+
public function getActions($ajax = false) {
|
61 |
+
$this->actions = array();
|
62 |
+
$action = HMW_Classes_Tools::getValue('action');
|
63 |
+
$nonce = HMW_Classes_Tools::getValue('hmw_nonce');
|
64 |
+
|
65 |
+
if ($action == '' || $nonce == '') {
|
66 |
+
return;
|
67 |
+
}
|
68 |
+
|
69 |
+
/* if config allready in cache */
|
70 |
+
if (!isset(self::$config)) {
|
71 |
+
$config_file = _HMW_ROOT_DIR_ . '/config.json';
|
72 |
+
if (!file_exists($config_file))
|
73 |
+
return;
|
74 |
+
|
75 |
+
/* load configuration blocks data from core config files */
|
76 |
+
self::$config = json_decode(file_get_contents($config_file), 1);
|
77 |
+
}
|
78 |
+
|
79 |
+
if (is_array(self::$config))
|
80 |
+
foreach (self::$config['blocks']['block'] as $block) {
|
81 |
+
if (isset($block['active']) && $block['active'] == 1)
|
82 |
+
if (isset($block['admin']) &&
|
83 |
+
(($block['admin'] == 1 && (is_admin() || is_network_admin())) ||
|
84 |
+
$block['admin'] == 0)
|
85 |
+
) {
|
86 |
+
/* if there is a single action */
|
87 |
+
if (isset($block['actions']['action']))
|
88 |
+
|
89 |
+
/* if there are more actions for the current block */
|
90 |
+
if (!is_array($block['actions']['action'])) {
|
91 |
+
/* add the action in the actions array */
|
92 |
+
if ($block['actions']['action'] == $action)
|
93 |
+
$this->actions[] = array('class' => $block['name']);
|
94 |
+
} else {
|
95 |
+
/* if there are more actions for the current block */
|
96 |
+
foreach ($block['actions']['action'] as $value) {
|
97 |
+
/* add the actions in the actions array */
|
98 |
+
if ($value == $action)
|
99 |
+
$this->actions[] = array('class' => $block['name']);
|
100 |
+
}
|
101 |
+
}
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
if ($ajax) {
|
106 |
+
check_ajax_referer(_HMW_NONCE_ID_, 'hmw_nonce');
|
107 |
+
} else {
|
108 |
+
check_admin_referer($action, 'hmw_nonce');
|
109 |
+
}
|
110 |
+
/* add the actions in WP */
|
111 |
+
foreach ($this->actions as $actions) {
|
112 |
+
HMW_Classes_ObjController::getClass($actions['class'])->action();
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
}
|
classes/DisplayController.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
/**
|
5 |
+
* The class handles the theme part in WP
|
6 |
+
*/
|
7 |
+
class HMW_Classes_DisplayController {
|
8 |
+
|
9 |
+
private static $cache;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* echo the css link from theme css directory
|
13 |
+
*
|
14 |
+
* @param string $uri The name of the css file or the entire uri path of the css file
|
15 |
+
* @param string $media
|
16 |
+
*
|
17 |
+
* @return void
|
18 |
+
*/
|
19 |
+
public static function loadMedia($uri = '', $media = 'all') {
|
20 |
+
$css_uri = '';
|
21 |
+
$js_uri = '';
|
22 |
+
|
23 |
+
if (HMW_Classes_Tools::isAjax()) {
|
24 |
+
return;
|
25 |
+
}
|
26 |
+
|
27 |
+
if (isset(self::$cache[$uri]))
|
28 |
+
return;
|
29 |
+
|
30 |
+
self::$cache[$uri] = true;
|
31 |
+
|
32 |
+
/* if is a custom css file */
|
33 |
+
if (strpos($uri, '//') === false) {
|
34 |
+
$name = strtolower($uri);
|
35 |
+
if (file_exists(_HMW_THEME_DIR_ . 'css/' . $name . '.css')) {
|
36 |
+
$css_uri = _HMW_THEME_URL_ . 'css/' . $name . '.css?ver=' . HMW_VERSION_ID;
|
37 |
+
}
|
38 |
+
if (file_exists(_HMW_THEME_DIR_ . 'css/' . $name . '.scss')) {
|
39 |
+
$css_uri = _HMW_THEME_URL_ . 'css/' . $name . '.scss?ver=' . HMW_VERSION_ID;
|
40 |
+
}
|
41 |
+
if (file_exists(_HMW_THEME_DIR_ . 'js/' . $name . '.js')) {
|
42 |
+
$js_uri = _HMW_THEME_URL_ . 'js/' . $name . '.js?ver=' . HMW_VERSION_ID;
|
43 |
+
}
|
44 |
+
} else {
|
45 |
+
$name = strtolower(basename($uri));
|
46 |
+
if (strpos($uri, '.css') !== FALSE) {
|
47 |
+
$css_uri = $uri;
|
48 |
+
} elseif (strpos($uri, '.scss') !== FALSE) {
|
49 |
+
$css_uri = $uri;
|
50 |
+
} elseif (strpos($uri, '.js') !== FALSE) {
|
51 |
+
$js_uri = $uri;
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
if ($css_uri <> '') {
|
56 |
+
if (!wp_style_is($name)) {
|
57 |
+
if (did_action('wp_print_styles')) {
|
58 |
+
echo "<link rel='stylesheet' id='$name-css' href='$css_uri' type='text/css' media='all' />";
|
59 |
+
} elseif (is_admin()) { //load CSS for admin or on triggered
|
60 |
+
wp_enqueue_style($name, $css_uri, null, HMW_VERSION_ID, $media);
|
61 |
+
wp_print_styles(array($name));
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
if ($js_uri <> '') {
|
67 |
+
if (!wp_script_is($name)) {
|
68 |
+
if (did_action('wp_print_scripts')) {
|
69 |
+
echo "<script type='text/javascript' src='$js_uri'></script>";
|
70 |
+
} elseif (is_admin()) {
|
71 |
+
wp_enqueue_script($name, $js_uri, null, HMW_VERSION_ID, true);
|
72 |
+
wp_print_scripts(array($name));
|
73 |
+
}
|
74 |
+
}
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
*
|
80 |
+
* return the block content from theme directory
|
81 |
+
*
|
82 |
+
* @param $block
|
83 |
+
* @param HMW_Classes_FrontController $view
|
84 |
+
* @return null|string
|
85 |
+
*/
|
86 |
+
public function getView($block, $view) {
|
87 |
+
$output = null;
|
88 |
+
|
89 |
+
if (file_exists(_HMW_THEME_DIR_ . $block . '.php')) {
|
90 |
+
ob_start();
|
91 |
+
include(_HMW_THEME_DIR_ . $block . '.php');
|
92 |
+
$output .= ob_get_clean();
|
93 |
+
}
|
94 |
+
|
95 |
+
return $output;
|
96 |
+
}
|
97 |
+
|
98 |
+
}
|
classes/Error.php
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Classes_Error extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
/** @var array */
|
7 |
+
private static $errors = array();
|
8 |
+
|
9 |
+
/**
|
10 |
+
* The error controller for StarBox
|
11 |
+
*/
|
12 |
+
function __construct() {
|
13 |
+
parent::__construct();
|
14 |
+
|
15 |
+
/* Verify dependences */
|
16 |
+
if (!function_exists('get_class')) {
|
17 |
+
self::setError(__('Function get_class does not exist! It\'s required for Hide My WP to work properly.', _HMW_PLUGIN_NAME_));
|
18 |
+
}
|
19 |
+
if (!function_exists('file_exists')) {
|
20 |
+
self::setError(__('Function file_exists does not exist! It\'s required for Hide My WP to work properly.', _HMW_PLUGIN_NAME_));
|
21 |
+
}
|
22 |
+
|
23 |
+
if (!defined('ABSPATH'))
|
24 |
+
self::setError(__('The home directory is not set!', _HMW_PLUGIN_NAME_), 'fatal');
|
25 |
+
|
26 |
+
/* Check the PHP version */
|
27 |
+
if (PHP_VERSION_ID < 5100) {
|
28 |
+
self::setError(__('The PHP version has to be greater than 5.1', _HMW_PLUGIN_NAME_), 'fatal');
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Show version error
|
34 |
+
*/
|
35 |
+
public function phpVersionError() {
|
36 |
+
echo '<div class="update-nag"><span style="color:red; font-weight:bold;">' . __('For Hide My WP to work, the PHP version has to be equal or greater than 5.1', _HMW_PLUGIN_NAME_) . '</span></div>';
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Show the error in wrodpress
|
41 |
+
*
|
42 |
+
* @param string $error
|
43 |
+
* @param string $type
|
44 |
+
* @param null $index
|
45 |
+
*/
|
46 |
+
public static function setError($error = '', $type = 'notice', $index = null) {
|
47 |
+
if (!isset($index)) {
|
48 |
+
$index = count(self::$errors);
|
49 |
+
}
|
50 |
+
|
51 |
+
self::$errors[$index] = array(
|
52 |
+
'type' => $type,
|
53 |
+
'text' => $error);
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* This hook will show the error in WP header
|
58 |
+
*/
|
59 |
+
public function hookNotices() {
|
60 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_DisplayController')->loadMedia('alert');
|
61 |
+
|
62 |
+
if (is_array(self::$errors) &&
|
63 |
+
((is_string(HMW_Classes_Tools::getValue('page', '')) && stripos(HMW_Classes_Tools::getValue('page', ''), _HMW_NAMESPACE_) !== false) ||
|
64 |
+
(is_string(HMW_Classes_Tools::getValue('plugin', '')) && stripos(HMW_Classes_Tools::getValue('plugin', ''), _HMW_PLUGIN_NAME_) !== false))
|
65 |
+
) {
|
66 |
+
foreach (self::$errors as $error) {
|
67 |
+
|
68 |
+
switch ($error['type']) {
|
69 |
+
case 'fatal':
|
70 |
+
self::showError(ucfirst(_HMW_PLUGIN_NAME_ . " " . $error['type']) . ': ' . $error['text'], $error['type']);
|
71 |
+
die();
|
72 |
+
break;
|
73 |
+
default:
|
74 |
+
self::showError($error['text'], $error['type']);
|
75 |
+
}
|
76 |
+
}
|
77 |
+
}
|
78 |
+
self::$errors = array();
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Show the notices to WP
|
83 |
+
*
|
84 |
+
* @param $message
|
85 |
+
* @param string $type
|
86 |
+
*/
|
87 |
+
public static function showError($message, $type = '') {
|
88 |
+
if (file_exists(_HMW_THEME_DIR_ . 'Notices.php')) {
|
89 |
+
include(_HMW_THEME_DIR_ . 'Notices.php');
|
90 |
+
} else {
|
91 |
+
echo $message;
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
}
|
classes/FrontController.php
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
/**
|
5 |
+
* The main class for controllers
|
6 |
+
*
|
7 |
+
*/
|
8 |
+
class HMW_Classes_FrontController {
|
9 |
+
|
10 |
+
/** @var object of the model class */
|
11 |
+
public $model;
|
12 |
+
|
13 |
+
/** @var object of the view class */
|
14 |
+
public $view;
|
15 |
+
|
16 |
+
/** @var string name of theclass */
|
17 |
+
protected $name;
|
18 |
+
|
19 |
+
public function __construct() {
|
20 |
+
|
21 |
+
/* Load error class */
|
22 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_Error');
|
23 |
+
|
24 |
+
/* Load Tools */
|
25 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_Tools');
|
26 |
+
|
27 |
+
/* get the name of the current class */
|
28 |
+
$this->name = get_class($this);
|
29 |
+
|
30 |
+
/* load the model and hooks here for wordpress actions to take efect */
|
31 |
+
/* create the model and view instances */
|
32 |
+
$model_classname = str_replace('Controllers', 'Models', $this->name);
|
33 |
+
if(HMW_Classes_ObjController::getClassPath($model_classname)) {
|
34 |
+
$this->model = HMW_Classes_ObjController::getClass($model_classname);
|
35 |
+
}
|
36 |
+
|
37 |
+
//IMPORTANT TO LOAD HOOKS HERE
|
38 |
+
/* check if there is a hook defined in the controller clients class */
|
39 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_HookController')->setHooks($this);
|
40 |
+
|
41 |
+
/* Load the rewrite */
|
42 |
+
HMW_Classes_ObjController::getClass('HMW_Controllers_Rewrite');
|
43 |
+
|
44 |
+
/* Load the Main classes Actions Handler */
|
45 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_Action');
|
46 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_DisplayController');
|
47 |
+
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* load sequence of classes
|
52 |
+
* Function called usualy when the controller is loaded in WP
|
53 |
+
*
|
54 |
+
* @return HMW_Classes_FrontController
|
55 |
+
*/
|
56 |
+
public function init() {
|
57 |
+
return $this;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Get the block view
|
62 |
+
*
|
63 |
+
* @param mixed $view
|
64 |
+
* @param mixed $obj
|
65 |
+
* @return string HTML
|
66 |
+
*/
|
67 |
+
public function getView($view = null, $obj = null) {
|
68 |
+
if(!isset($obj)){
|
69 |
+
$obj = $this;
|
70 |
+
}
|
71 |
+
if (!isset($view)) {
|
72 |
+
if ($class = HMW_Classes_ObjController::getClassPath($this->name)) {
|
73 |
+
$view = $class['name'];
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
if (isset($view)) {
|
78 |
+
$this->view = HMW_Classes_ObjController::getClass('HMW_Classes_DisplayController');
|
79 |
+
return $this->view->getView($view, $obj);
|
80 |
+
}
|
81 |
+
|
82 |
+
return '';
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Called as menu callback to show the block
|
87 |
+
*
|
88 |
+
*/
|
89 |
+
public function show() {
|
90 |
+
echo $this->init()->getView();
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* first function call for any class
|
95 |
+
*
|
96 |
+
*/
|
97 |
+
protected function action() {
|
98 |
+
// generated nonce we created
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* initialize settings
|
104 |
+
* Called from index
|
105 |
+
*
|
106 |
+
* @return void
|
107 |
+
*/
|
108 |
+
public function hookInit() { }
|
109 |
+
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Called on frontend. For disconnected users
|
113 |
+
*/
|
114 |
+
public function hookFrontinit() { }
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Hook the admin head
|
118 |
+
* This function will load the media in the header for each class
|
119 |
+
*
|
120 |
+
* @return void
|
121 |
+
*/
|
122 |
+
public function hookHead() { }
|
123 |
+
|
124 |
+
}
|
classes/HookController.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
/**
|
5 |
+
* The class handles the actions in WP
|
6 |
+
*/
|
7 |
+
class HMW_Classes_HookController {
|
8 |
+
|
9 |
+
/** @var array the WP actions list from admin */
|
10 |
+
private $admin_hooks = array();
|
11 |
+
private $front_hooks = array();
|
12 |
+
|
13 |
+
public function __construct() {
|
14 |
+
//called in admin
|
15 |
+
$this->admin_hooks = array(
|
16 |
+
'init' => 'init',
|
17 |
+
'menu' => 'admin_menu',
|
18 |
+
'multisiteMenu' => 'network_admin_menu',
|
19 |
+
'notices' => 'admin_notices',
|
20 |
+
'footer' => 'admin_footer',
|
21 |
+
);
|
22 |
+
|
23 |
+
//called in frontend
|
24 |
+
$this->front_hooks = array(
|
25 |
+
// --
|
26 |
+
'frontinit' => 'init',
|
27 |
+
);
|
28 |
+
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Calls the specified action in WP
|
33 |
+
* @param object $instance The parent class instance
|
34 |
+
*
|
35 |
+
* @return void
|
36 |
+
*/
|
37 |
+
public function setHooks($instance) {
|
38 |
+
if (is_admin() || is_network_admin()) {
|
39 |
+
$this->setAdminHooks($instance);
|
40 |
+
} else {
|
41 |
+
$this->setFrontHooks($instance);
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Calls the specified action in WP
|
47 |
+
* @param object $instance The parent class instance
|
48 |
+
*
|
49 |
+
* @return void
|
50 |
+
*/
|
51 |
+
public function setAdminHooks($instance) {
|
52 |
+
/* for each admin action check if is defined in class and call it */
|
53 |
+
foreach ($this->admin_hooks as $hook => $value) {
|
54 |
+
|
55 |
+
if (is_callable(array($instance, 'hook' . ucfirst($hook)))) {
|
56 |
+
//call the WP add_action function
|
57 |
+
add_action($value, array($instance, 'hook' . ucfirst($hook)));
|
58 |
+
}
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Calls the specified action in WP
|
64 |
+
* @param object $instance The parent class instance
|
65 |
+
*
|
66 |
+
* @return void
|
67 |
+
*/
|
68 |
+
public function setFrontHooks($instance) {
|
69 |
+
/* for each admin action check if is defined in class and call it */
|
70 |
+
foreach ($this->front_hooks as $hook => $value) {
|
71 |
+
if (is_callable(array($instance, 'hook' . ucfirst($hook)))) {
|
72 |
+
//call the WP add_action function
|
73 |
+
add_action($value, array($instance, 'hook' . ucfirst($hook)), 11111);
|
74 |
+
}
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Calls the specified action in WP
|
80 |
+
* @param string $action
|
81 |
+
* @param HMW_Classes_FrontController $obj
|
82 |
+
* @param array $callback Contains the class name or object and the callback function
|
83 |
+
*
|
84 |
+
* @return void
|
85 |
+
*/
|
86 |
+
public function setAction($action, $obj, $callback) {
|
87 |
+
|
88 |
+
/* calls the custom action function from WP */
|
89 |
+
add_action($action, array($obj, $callback), 10);
|
90 |
+
}
|
91 |
+
|
92 |
+
}
|
classes/ObjController.php
ADDED
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
/**
|
5 |
+
* The class creates object for plugin classes
|
6 |
+
*/
|
7 |
+
class HMW_Classes_ObjController {
|
8 |
+
|
9 |
+
/** @var array of instances */
|
10 |
+
public static $instances;
|
11 |
+
|
12 |
+
/** @var array from core config */
|
13 |
+
public static $config;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @param $className
|
17 |
+
* @param array $args
|
18 |
+
* @return bool|mixed
|
19 |
+
*/
|
20 |
+
public static function getClass($className, $args = array()) {
|
21 |
+
|
22 |
+
if ($class = self::getClassPath($className)) {
|
23 |
+
if (!isset(self::$instances[$className])) {
|
24 |
+
/* check if class is already defined */
|
25 |
+
if (!class_exists($className) || $className == get_class()) {
|
26 |
+
try {
|
27 |
+
self::includeClass($class['dir'], $class['name']);
|
28 |
+
|
29 |
+
//check if abstract
|
30 |
+
$check = new ReflectionClass($className);
|
31 |
+
$abstract = $check->isAbstract();
|
32 |
+
if (!$abstract) {
|
33 |
+
self::$instances[$className] = new $className();
|
34 |
+
if (!empty($args)) {
|
35 |
+
call_user_func_array(array(self::$instances[$className], '__construct'), $args);
|
36 |
+
}
|
37 |
+
return self::$instances[$className];
|
38 |
+
} else {
|
39 |
+
self::$instances[$className] = true;
|
40 |
+
}
|
41 |
+
} catch (Exception $e) {
|
42 |
+
}
|
43 |
+
}
|
44 |
+
} else
|
45 |
+
return self::$instances[$className];
|
46 |
+
}
|
47 |
+
return false;
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Clear the class instance
|
52 |
+
*
|
53 |
+
* @param string $className
|
54 |
+
* @param array $args
|
55 |
+
*
|
56 |
+
* @return mixed
|
57 |
+
* @throws Exception
|
58 |
+
*/
|
59 |
+
public static function newInstance( $className, $args = array() ) {
|
60 |
+
if ( $class = self::getClassPath( $className ) ) {
|
61 |
+
/* check if class is already defined */
|
62 |
+
if ( class_exists( $className ) ) {
|
63 |
+
//check if abstract
|
64 |
+
self::$instances[ $className ] = new $className();
|
65 |
+
if ( ! empty( $args ) ) {
|
66 |
+
call_user_func_array( array( self::$instances[ $className ], '__construct' ), $args );
|
67 |
+
}
|
68 |
+
|
69 |
+
return self::$instances[ $className ];
|
70 |
+
} else {
|
71 |
+
return self::getClass( $className, $args );
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
return false;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Include Class if exists
|
80 |
+
* @param $classDir
|
81 |
+
* @param $className
|
82 |
+
* @throws Exception
|
83 |
+
*/
|
84 |
+
private static function includeClass($classDir, $className) {
|
85 |
+
try {
|
86 |
+
if (file_exists($classDir . $className . '.php')) {
|
87 |
+
include_once($classDir . $className . '.php');
|
88 |
+
}
|
89 |
+
} catch (Exception $e) {
|
90 |
+
throw new Exception('Controller Error: ' . $e->getMessage());
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Get the class domain
|
96 |
+
* @param $className
|
97 |
+
* @param array $args
|
98 |
+
* @return mixed
|
99 |
+
* @throws Exception
|
100 |
+
*/
|
101 |
+
public static function getDomain($className, $args = array()) {
|
102 |
+
if ($class = self::getClassPath($className)) {
|
103 |
+
|
104 |
+
/* check if class is already defined */
|
105 |
+
|
106 |
+
self::includeClass($class['dir'], $class['name']);
|
107 |
+
return new $className($args);
|
108 |
+
}
|
109 |
+
|
110 |
+
throw new Exception('Could not create domain: ' . $className);
|
111 |
+
}
|
112 |
+
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Check if the class is correctly set
|
116 |
+
*
|
117 |
+
* @param string $className
|
118 |
+
* @return boolean
|
119 |
+
*/
|
120 |
+
private static function checkClassPath($className) {
|
121 |
+
$path = preg_split('/[_]+/', $className);
|
122 |
+
if (is_array($path) && count($path) > 1) {
|
123 |
+
if (in_array(_HMW_NAMESPACE_, $path)) {
|
124 |
+
return true;
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
return false;
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Get the path of the class and name of the class
|
133 |
+
*
|
134 |
+
* @param string $className
|
135 |
+
* @return array | boolean
|
136 |
+
* array(
|
137 |
+
* dir - absolute path of the class
|
138 |
+
* name - the name of the file
|
139 |
+
* }
|
140 |
+
*/
|
141 |
+
public static function getClassPath($className) {
|
142 |
+
$dir = '';
|
143 |
+
|
144 |
+
if (self::checkClassPath($className)) {
|
145 |
+
$path = preg_split('/[_]+/', $className);
|
146 |
+
for ($i = 1; $i < sizeof($path) - 1; $i++)
|
147 |
+
$dir .= strtolower($path[$i]) . '/';
|
148 |
+
|
149 |
+
$class = array('dir' => _HMW_ROOT_DIR_ . '/' . $dir,
|
150 |
+
'name' => $path[sizeof($path) - 1]);
|
151 |
+
|
152 |
+
if (file_exists($class['dir'] . $class['name'] . '.php')) {
|
153 |
+
return $class;
|
154 |
+
}
|
155 |
+
}
|
156 |
+
return false;
|
157 |
+
}
|
158 |
+
|
159 |
+
}
|
classes/Tools.php
ADDED
@@ -0,0 +1,1243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Handles the parameters and url
|
6 |
+
*
|
7 |
+
* @author StarBox
|
8 |
+
*/
|
9 |
+
class HMW_Classes_Tools extends HMW_Classes_FrontController {
|
10 |
+
|
11 |
+
/** @var array Saved options in database */
|
12 |
+
public static $init = array(), $default = array(), $lite = array(), $ninja = array();
|
13 |
+
public static $options = array();
|
14 |
+
public static $debug = array();
|
15 |
+
public static $is_multisite;
|
16 |
+
public static $active_plugins;
|
17 |
+
|
18 |
+
/** @var integer Count the errors in site */
|
19 |
+
static $errors_count = 0;
|
20 |
+
|
21 |
+
public function __construct() {
|
22 |
+
//Check the max memory usage
|
23 |
+
$maxmemory = self::getMaxMemory();
|
24 |
+
if ( $maxmemory && $maxmemory < 60 ) {
|
25 |
+
if ( defined( 'WP_MAX_MEMORY_LIMIT' ) && (int) WP_MAX_MEMORY_LIMIT > 60 ) {
|
26 |
+
@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
|
27 |
+
$maxmemory = self::getMaxMemory();
|
28 |
+
if ( $maxmemory && $maxmemory < 60 ) {
|
29 |
+
define( 'HMW_DISABLE', true );
|
30 |
+
HMW_Classes_Error::setError( sprintf( __( 'Your memory limit is %sM. You need at least %sM to prevent loading errors in frontend. See: %sIncreasing memory allocated to PHP%s', _HMW_PLUGIN_NAME_ ), $maxmemory, 64, '<a href="https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP" target="_blank">', '</a>' ) );
|
31 |
+
}
|
32 |
+
} else {
|
33 |
+
define( 'HMW_DISABLE', true );
|
34 |
+
HMW_Classes_Error::setError( sprintf( __( 'Your memory limit is %sM. You need at least %sM to prevent loading errors in frontend. See: %sIncreasing memory allocated to PHP%s', _HMW_PLUGIN_NAME_ ), $maxmemory, 64, '<a href="https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP" target="_blank">', '</a>' ) );
|
35 |
+
}
|
36 |
+
}
|
37 |
+
//Get the plugin options from database
|
38 |
+
self::$options = self::getOptions();
|
39 |
+
|
40 |
+
//Load multilanguage
|
41 |
+
add_filter( "init", array( $this, 'loadMultilanguage' ) );
|
42 |
+
|
43 |
+
//add review link in plugin list
|
44 |
+
add_filter( "plugin_row_meta", array( $this, 'hookExtraLinks' ), 10, 4 );
|
45 |
+
|
46 |
+
//add setting link in plugin
|
47 |
+
add_filter( 'plugin_action_links', array( $this, 'hookActionlink' ), 5, 2 );
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Check the memory and make sure it's enough
|
52 |
+
* @return bool|string
|
53 |
+
*/
|
54 |
+
public static function getMaxMemory() {
|
55 |
+
try {
|
56 |
+
$memory_limit = @ini_get( 'memory_limit' );
|
57 |
+
if ( (int) $memory_limit > 0 ) {
|
58 |
+
if ( preg_match( '/^(\d+)(.)$/', $memory_limit, $matches ) ) {
|
59 |
+
if ( $matches[2] == 'G' ) {
|
60 |
+
$memory_limit = $matches[1] * 1024 * 1024 * 1024; // nnnM -> nnn MB
|
61 |
+
} elseif ( $matches[2] == 'M' ) {
|
62 |
+
$memory_limit = $matches[1] * 1024 * 1024; // nnnM -> nnn MB
|
63 |
+
} elseif ( $matches[2] == 'K' ) {
|
64 |
+
$memory_limit = $matches[1] * 1024; // nnnK -> nnn KB
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
if ( (int) $memory_limit > 0 ) {
|
69 |
+
return number_format( (int) $memory_limit / 1024 / 1024, 0, '', '' );
|
70 |
+
}
|
71 |
+
}
|
72 |
+
} catch ( Exception $e ) {
|
73 |
+
}
|
74 |
+
|
75 |
+
return false;
|
76 |
+
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Load the Options from user option table in DB
|
81 |
+
*
|
82 |
+
* @param bool|false $safe
|
83 |
+
*
|
84 |
+
* @return array|mixed|object
|
85 |
+
*/
|
86 |
+
public static function getOptions( $safe = false ) {
|
87 |
+
$keymeta = HMW_OPTION;
|
88 |
+
$homepath = ltrim( parse_url( site_url(), PHP_URL_PATH ), '/' );
|
89 |
+
$pluginurl = ltrim( parse_url( plugins_url(), PHP_URL_PATH ), '/' );
|
90 |
+
$contenturl = ltrim( parse_url( content_url(), PHP_URL_PATH ), '/' );
|
91 |
+
|
92 |
+
if ( $safe ) {
|
93 |
+
$keymeta = HMW_OPTION_SAFE;
|
94 |
+
}
|
95 |
+
|
96 |
+
self::$init = array(
|
97 |
+
'hmw_ver' => 0,
|
98 |
+
'api_token' => false,
|
99 |
+
'hmw_token' => 0,
|
100 |
+
'hmw_disable' => mt_rand( 111111, 999999 ),
|
101 |
+
'hmw_disable_name' => 'hmw_disable',
|
102 |
+
'logout' => false,
|
103 |
+
'error' => false,
|
104 |
+
'rewrites' => 0,
|
105 |
+
'test_frontend' => false,
|
106 |
+
'changes' => false,
|
107 |
+
'admin_notice' => array(),
|
108 |
+
//--
|
109 |
+
'hmw_laterload' => 0,
|
110 |
+
'hmw_fix_relative' => 1,
|
111 |
+
'hmw_shutdown_load' => 0, //check Hide My WP on shutdown
|
112 |
+
//--
|
113 |
+
'hmw_url_redirect' => '.',
|
114 |
+
'hmw_remove_third_hooks' => 0,
|
115 |
+
'hmw_send_email' => 1,
|
116 |
+
'hmw_activity_log' => 1,
|
117 |
+
'hmw_activity_log_roles' => array(),
|
118 |
+
'hmw_email_address' => '',
|
119 |
+
|
120 |
+
//-- Brute Force
|
121 |
+
'hmw_bruteforce' => 0,
|
122 |
+
'hmw_bruteforce_log' => 1,
|
123 |
+
'hmw_brute_message' => __( 'Your IP has been flagged for potential security violations. Please try again in a little while...', _HMW_PLUGIN_NAME_ ),
|
124 |
+
'whitelist_ip' => array(),
|
125 |
+
'banlist_ip' => array(),
|
126 |
+
'hmw_hide_classes' => json_encode( array() ),
|
127 |
+
'trusted_ip_header' => '',
|
128 |
+
//
|
129 |
+
'brute_use_math' => 0,
|
130 |
+
'brute_max_attempts' => 5,
|
131 |
+
'brute_max_timeout' => 3600,
|
132 |
+
//captcha
|
133 |
+
'brute_use_captcha' => 1,
|
134 |
+
'brute_captcha_site_key' => '',
|
135 |
+
'brute_captcha_secret_key' => '',
|
136 |
+
'brute_captcha_theme' => 'light',
|
137 |
+
'brute_captcha_language' => '',
|
138 |
+
//
|
139 |
+
'hmw_new_plugins' => array(),
|
140 |
+
'hmw_new_themes' => array(),
|
141 |
+
//
|
142 |
+
'hmw_in_dashboard' => 0,
|
143 |
+
'hmw_hide_loggedusers' => 1,
|
144 |
+
'hmw_hide_version' => 1,
|
145 |
+
'hmw_hide_header' => 1,
|
146 |
+
'hmw_hide_comments' => 1,
|
147 |
+
'hmw_disable_emojicons' => 0,
|
148 |
+
'hmw_disable_xmlrpc' => 0,
|
149 |
+
'hmw_disable_manifest' => 1,
|
150 |
+
'hmw_disable_embeds' => 0,
|
151 |
+
'hmw_disable_debug' => 1,
|
152 |
+
'hmw_file_cache' => 0,
|
153 |
+
'hmw_security_alert' => 1,
|
154 |
+
'html_cdn_urls' => array(),
|
155 |
+
|
156 |
+
//
|
157 |
+
'hmw_robots' => 0,
|
158 |
+
'hmw_mapping_classes' => 1,
|
159 |
+
'hmw_text_mapping' => json_encode(
|
160 |
+
array(
|
161 |
+
'from' => array( 'wp-custom' ),
|
162 |
+
'to' => array( 'custom' ),
|
163 |
+
)
|
164 |
+
),
|
165 |
+
);
|
166 |
+
self::$default = array(
|
167 |
+
'hmw_mode' => 'default',
|
168 |
+
'hmw_admin_url' => 'wp-admin',
|
169 |
+
'hmw_login_url' => 'wp-login.php',
|
170 |
+
'hmw_activate_url' => 'wp-activate.php',
|
171 |
+
'hmw_lostpassword_url' => '',
|
172 |
+
'hmw_register_url' => '',
|
173 |
+
'hmw_logout_url' => '',
|
174 |
+
'hmw_logout_redirect' => '',
|
175 |
+
'hmw_plugin_url' => trim( preg_replace( '/' . str_replace( '/', '\/', $homepath ) . '/', '', $pluginurl, 1 ), '/' ),
|
176 |
+
'hmw_plugins' => array(),
|
177 |
+
'hmw_themes_url' => 'themes',
|
178 |
+
'hmw_themes' => array(),
|
179 |
+
'hmw_upload_url' => 'uploads',
|
180 |
+
'hmw_admin-ajax_url' => 'admin-ajax.php',
|
181 |
+
'hmw_hideajax_admin' => 0,
|
182 |
+
'hmw_hideajax_paths' => 0,
|
183 |
+
'hmw_tags_url' => 'tag',
|
184 |
+
'hmw_wp-content_url' => trim( preg_replace( '/' . str_replace( '/', '\/', $homepath ) . '/', '', $contenturl, 1 ), '/' ),
|
185 |
+
'hmw_wp-includes_url' => 'wp-includes',
|
186 |
+
'hmw_author_url' => 'author',
|
187 |
+
'hmw_hide_authors' => 0,
|
188 |
+
'hmw_wp-comments-post' => 'wp-comments-post.php',
|
189 |
+
'hmw_themes_style' => 'style.css',
|
190 |
+
'hmw_hide_img_classes' => 0,
|
191 |
+
'hmw_hide_styleids' => 0,
|
192 |
+
'hmw_wp-json' => 'wp-json',
|
193 |
+
'hmw_disable_rest_api' => 0,
|
194 |
+
'hmw_hide_admin' => 0,
|
195 |
+
'hmw_hide_newadmin' => 0,
|
196 |
+
'hmw_hide_login' => 0,
|
197 |
+
'hmw_hide_wplogin' => 0,
|
198 |
+
'hmw_hide_plugins' => 0,
|
199 |
+
'hmw_hide_themes' => 0,
|
200 |
+
|
201 |
+
//
|
202 |
+
'hmw_sqlinjection' => 0,
|
203 |
+
'hmw_hide_commonfiles' => 0,
|
204 |
+
'hmw_hide_oldpaths' => 0,
|
205 |
+
'hmw_disable_browsing' => 0,
|
206 |
+
|
207 |
+
'hmw_category_base' => '',
|
208 |
+
'hmw_tag_base' => '',
|
209 |
+
);
|
210 |
+
self::$lite = array(
|
211 |
+
'hmw_mode' => 'lite',
|
212 |
+
'hmw_login_url' => 'newlogin',
|
213 |
+
'hmw_activate_url' => 'activate',
|
214 |
+
'hmw_lostpassword_url' => 'lostpass',
|
215 |
+
'hmw_register_url' => 'signup',
|
216 |
+
'hmw_logout_url' => '',
|
217 |
+
'hmw_logout_redirect' => '',
|
218 |
+
'hmw_admin-ajax_url' => 'admin-ajax.php',
|
219 |
+
'hmw_hideajax_admin' => 0,
|
220 |
+
'hmw_hideajax_paths' => 1,
|
221 |
+
'hmw_plugin_url' => 'core/modules',
|
222 |
+
'hmw_themes_url' => 'core/assets',
|
223 |
+
'hmw_upload_url' => 'storage',
|
224 |
+
'hmw_wp-content_url' => 'core',
|
225 |
+
'hmw_wp-includes_url' => 'lib',
|
226 |
+
'hmw_author_url' => 'writer',
|
227 |
+
'hmw_hide_authors' => 0,
|
228 |
+
'hmw_wp-comments-post' => 'comments',
|
229 |
+
'hmw_themes_style' => 'style.css',
|
230 |
+
'hmw_hide_admin' => 1,
|
231 |
+
'hmw_hide_newadmin' => 0,
|
232 |
+
'hmw_hide_login' => 1,
|
233 |
+
'hmw_hide_wplogin' => 1,
|
234 |
+
'hmw_hide_plugins' => 1,
|
235 |
+
'hmw_hide_themes' => 1,
|
236 |
+
'hmw_disable_rest_api' => 0,
|
237 |
+
'hmw_hide_styleids' => 0,
|
238 |
+
//
|
239 |
+
'hmw_sqlinjection' => 0,
|
240 |
+
'hmw_hide_commonfiles' => 0,
|
241 |
+
'hmw_hide_oldpaths' => 0,
|
242 |
+
'hmw_disable_browsing' => 0
|
243 |
+
);
|
244 |
+
self::$ninja = array();
|
245 |
+
|
246 |
+
if ( is_multisite() && defined( 'BLOG_ID_CURRENT_SITE' ) ) {
|
247 |
+
$options = json_decode( get_blog_option( BLOG_ID_CURRENT_SITE, $keymeta ), true );
|
248 |
+
} else {
|
249 |
+
$options = json_decode( get_option( $keymeta ), true );
|
250 |
+
}
|
251 |
+
|
252 |
+
//Set default hmw_hide_wplogin
|
253 |
+
if ( !isset( $options['hmw_hide_wplogin'] ) && $options['hmw_hide_login'] ) {
|
254 |
+
$options['hmw_hide_wplogin'] = $options['hmw_hide_login'];
|
255 |
+
}
|
256 |
+
|
257 |
+
if ( is_array( $options ) ) {
|
258 |
+
$options = @array_merge( self::$init, self::$default, $options );
|
259 |
+
} else {
|
260 |
+
$options = @array_merge( self::$init, self::$default );
|
261 |
+
}
|
262 |
+
|
263 |
+
$category_base = get_option( 'category_base' );
|
264 |
+
$tag_base = get_option( 'tag_base' );
|
265 |
+
|
266 |
+
if ( is_multisite() && ! is_subdomain_install() && is_main_site() && 0 === strpos( get_option( 'permalink_structure' ), '/blog/' ) ) {
|
267 |
+
$category_base = preg_replace( '|^/?blog|', '', $category_base );
|
268 |
+
$tag_base = preg_replace( '|^/?blog|', '', $tag_base );
|
269 |
+
}
|
270 |
+
|
271 |
+
$options['hmw_category_base'] = $category_base;
|
272 |
+
$options['hmw_tag_base'] = $tag_base;
|
273 |
+
|
274 |
+
|
275 |
+
return $options;
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Get the option from database
|
280 |
+
*
|
281 |
+
* @param $key
|
282 |
+
*
|
283 |
+
* @return mixed
|
284 |
+
*/
|
285 |
+
public static function getOption( $key ) {
|
286 |
+
if ( ! isset( self::$options[ $key ] ) ) {
|
287 |
+
self::$options = self::getOptions();
|
288 |
+
|
289 |
+
if ( ! isset( self::$options[ $key ] ) ) {
|
290 |
+
self::$options[ $key ] = 0;
|
291 |
+
}
|
292 |
+
}
|
293 |
+
|
294 |
+
return self::$options[ $key ];
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Save the Options in user option table in DB
|
299 |
+
*
|
300 |
+
* @param string $key
|
301 |
+
* @param string $value
|
302 |
+
* @param bool|false $safe
|
303 |
+
*
|
304 |
+
*/
|
305 |
+
public static function saveOptions( $key = null, $value = '', $safe = false ) {
|
306 |
+
$keymeta = HMW_OPTION;
|
307 |
+
|
308 |
+
if ( $safe ) {
|
309 |
+
$keymeta = HMW_OPTION_SAFE;
|
310 |
+
}
|
311 |
+
|
312 |
+
if ( isset( $key ) ) {
|
313 |
+
self::$options[ $key ] = $value;
|
314 |
+
}
|
315 |
+
|
316 |
+
if ( is_multisite() && defined( 'BLOG_ID_CURRENT_SITE' ) ) {
|
317 |
+
update_blog_option( BLOG_ID_CURRENT_SITE, $keymeta, json_encode( self::$options ) );
|
318 |
+
} else {
|
319 |
+
update_option( $keymeta, json_encode( self::$options ) );
|
320 |
+
}
|
321 |
+
}
|
322 |
+
|
323 |
+
|
324 |
+
/**
|
325 |
+
* Adds extra links to plugin page
|
326 |
+
*
|
327 |
+
* @param $meta
|
328 |
+
* @param $file
|
329 |
+
* @param $data
|
330 |
+
* @param $status
|
331 |
+
*
|
332 |
+
* @return array
|
333 |
+
*/
|
334 |
+
public function hookExtraLinks( $meta, $file, $data = null, $status = null ) {
|
335 |
+
if ( $file == _HMW_PLUGIN_NAME_ . '/index.php' ) {
|
336 |
+
echo '<style>
|
337 |
+
.ml-stars{display:inline-block;color:#ffb900;position:relative;top:3px}
|
338 |
+
.ml-stars svg{fill:#ffb900}
|
339 |
+
.ml-stars svg:hover{fill:#ffb900}
|
340 |
+
.ml-stars svg:hover ~ svg{fill:none}
|
341 |
+
</style>';
|
342 |
+
|
343 |
+
$meta[] = "<a href='https://hidemywpghost.com/knowledge-base/' target='_blank'>" . __( 'Documentation', _HMW_PLUGIN_NAME_ ) . "</a>";
|
344 |
+
$meta[] = "<a href='https://wordpress.org/support/plugin/hide-my-wp/reviews/#new-post' target='_blank' title='" . __( 'Leave a review', _HMW_PLUGIN_NAME_ ) . "'><i class='ml-stars'><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg><svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-star'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg></i></a>";
|
345 |
+
}
|
346 |
+
|
347 |
+
return $meta;
|
348 |
+
}
|
349 |
+
|
350 |
+
|
351 |
+
/**
|
352 |
+
* Add a link to settings in the plugin list
|
353 |
+
*
|
354 |
+
* @param array $links
|
355 |
+
* @param string $file
|
356 |
+
*
|
357 |
+
* @return array
|
358 |
+
*/
|
359 |
+
public function hookActionlink( $links, $file ) {
|
360 |
+
if ( $file == _HMW_PLUGIN_NAME_ . '/index.php' ) {
|
361 |
+
$link = '<a href="https://hidemywpghost.com/wordpress_update" title="Hide My WP Ghost" target="_blank" style="color:#11967A; font-weight: bold">' . __( 'Upgrade to Premium', _HMW_PLUGIN_NAME_ ) . '</a>';
|
362 |
+
$link .= ' | ';
|
363 |
+
$link .= '<a href="' . self::getSettingsUrl() . '" title="Hide My Wp Settings">' . __( 'Settings', _HMW_PLUGIN_NAME_ ) . '</a>';
|
364 |
+
array_unshift( $links, $link );
|
365 |
+
}
|
366 |
+
|
367 |
+
return $links;
|
368 |
+
}
|
369 |
+
|
370 |
+
/**
|
371 |
+
* Load the multilanguage support from .mo
|
372 |
+
*/
|
373 |
+
public static function loadMultilanguage() {
|
374 |
+
if ( ! defined( 'WP_PLUGIN_DIR' ) ) {
|
375 |
+
load_plugin_textdomain( _HMW_PLUGIN_NAME_, _HMW_PLUGIN_NAME_ . '/languages/' );
|
376 |
+
} else {
|
377 |
+
load_plugin_textdomain( _HMW_PLUGIN_NAME_, null, _HMW_PLUGIN_NAME_ . '/languages/' );
|
378 |
+
}
|
379 |
+
}
|
380 |
+
|
381 |
+
/**
|
382 |
+
* Check if it's Ajax call
|
383 |
+
* @return bool
|
384 |
+
*/
|
385 |
+
public static function isAjax() {
|
386 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
387 |
+
return true;
|
388 |
+
}
|
389 |
+
|
390 |
+
return false;
|
391 |
+
}
|
392 |
+
|
393 |
+
/**
|
394 |
+
* Change the paths in admin and for logged users
|
395 |
+
* @return bool
|
396 |
+
*/
|
397 |
+
public static function doChangesAdmin() {
|
398 |
+
if ( function_exists( 'is_user_logged_in' ) && function_exists( 'current_user_can' ) ) {
|
399 |
+
if ( ! is_admin() && ! is_network_admin() ) {
|
400 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_loggedusers' ) || ! is_user_logged_in() ) {
|
401 |
+
return true;
|
402 |
+
}
|
403 |
+
}
|
404 |
+
}
|
405 |
+
|
406 |
+
return false;
|
407 |
+
}
|
408 |
+
|
409 |
+
/**
|
410 |
+
* Get the plugin settings URL
|
411 |
+
*
|
412 |
+
* @param string $page
|
413 |
+
*
|
414 |
+
* @return string
|
415 |
+
*/
|
416 |
+
public static function getSettingsUrl( $page = 'hmw_settings' ) {
|
417 |
+
if ( ! is_multisite() ) {
|
418 |
+
return admin_url( 'admin.php?page=' . $page );
|
419 |
+
} else {
|
420 |
+
return network_admin_url( 'admin.php?page=' . $page );
|
421 |
+
}
|
422 |
+
}
|
423 |
+
|
424 |
+
/**
|
425 |
+
* Set the header type
|
426 |
+
*
|
427 |
+
* @param string $type
|
428 |
+
*/
|
429 |
+
public static function setHeader( $type ) {
|
430 |
+
switch ( $type ) {
|
431 |
+
case 'json':
|
432 |
+
header( 'Content-Type: application/json' );
|
433 |
+
break;
|
434 |
+
case 'text':
|
435 |
+
header( "Content-type: text/plain" );
|
436 |
+
break;
|
437 |
+
}
|
438 |
+
}
|
439 |
+
|
440 |
+
/**
|
441 |
+
* Get a value from $_POST / $_GET
|
442 |
+
* if unavailable, take a default value
|
443 |
+
*
|
444 |
+
* @param string $key Value key
|
445 |
+
* @param boolean $keep_newlines Keep the new lines in variable in case of texareas
|
446 |
+
* @param mixed $defaultValue (optional)
|
447 |
+
*
|
448 |
+
* @return mixed Value
|
449 |
+
*/
|
450 |
+
public static function getValue( $key = null, $defaultValue = false, $keep_newlines = false ) {
|
451 |
+
if ( ! isset( $key ) || $key == '' ) {
|
452 |
+
return false;
|
453 |
+
}
|
454 |
+
|
455 |
+
$ret = ( isset( $_POST[ $key ] ) ? $_POST[ $key ] : ( isset( $_GET[ $key ] ) ? $_GET[ $key ] : $defaultValue ) );
|
456 |
+
|
457 |
+
if ( is_string( $ret ) === true ) {
|
458 |
+
if ( $keep_newlines === false ) {
|
459 |
+
if ( in_array( $key, array( 'hmw_email_address', 'hmw_email' ) ) ) { //validate email address
|
460 |
+
$ret = preg_replace( '/[^A-Za-z0-9-_\.\#\/\*\@]/', '', $ret );
|
461 |
+
} elseif ( in_array( $key, array( 'hmw_disable_name' ) ) ) { //validate url parameter
|
462 |
+
$ret = preg_replace( '/[^A-Za-z0-9-_]/', '', $ret );
|
463 |
+
} else {
|
464 |
+
$ret = preg_replace( '/[^A-Za-z0-9-_\/\.]/', '', $ret ); //validate fields
|
465 |
+
}
|
466 |
+
$ret = sanitize_text_field( $ret );
|
467 |
+
} else {
|
468 |
+
$ret = preg_replace( '/[^A-Za-z0-9-_.\#\n\r\s\/\* ]\@/', '', $ret );
|
469 |
+
if ( function_exists( 'sanitize_textarea_field' ) ) {
|
470 |
+
$ret = sanitize_textarea_field( $ret );
|
471 |
+
}
|
472 |
+
}
|
473 |
+
}
|
474 |
+
|
475 |
+
return wp_unslash( $ret );
|
476 |
+
}
|
477 |
+
|
478 |
+
/**
|
479 |
+
* Check if the parameter is set
|
480 |
+
*
|
481 |
+
* @param string $key
|
482 |
+
*
|
483 |
+
* @return boolean
|
484 |
+
*/
|
485 |
+
public static function getIsset( $key = null ) {
|
486 |
+
if ( ! isset( $key ) || $key == '' ) {
|
487 |
+
return false;
|
488 |
+
}
|
489 |
+
|
490 |
+
return isset( $_POST[ $key ] ) ? true : ( isset( $_GET[ $key ] ) ? true : false );
|
491 |
+
}
|
492 |
+
|
493 |
+
/**
|
494 |
+
* Show the notices to WP
|
495 |
+
*
|
496 |
+
* @param $message
|
497 |
+
* @param string $type
|
498 |
+
*
|
499 |
+
* @return string
|
500 |
+
*/
|
501 |
+
public static function showNotices( $message, $type = '' ) {
|
502 |
+
if ( file_exists( _HMW_THEME_DIR_ . 'Notices.php' ) ) {
|
503 |
+
ob_start();
|
504 |
+
include( _HMW_THEME_DIR_ . 'Notices.php' );
|
505 |
+
$message = ob_get_contents();
|
506 |
+
ob_end_clean();
|
507 |
+
}
|
508 |
+
|
509 |
+
return $message;
|
510 |
+
}
|
511 |
+
|
512 |
+
/**
|
513 |
+
* Connect remote with wp_remote_get
|
514 |
+
*
|
515 |
+
* @param $url
|
516 |
+
* @param array $params
|
517 |
+
* @param array $options
|
518 |
+
*
|
519 |
+
* @return bool|string
|
520 |
+
*/
|
521 |
+
public static function hmw_remote_get( $url, $params = array(), $options = array() ) {
|
522 |
+
$options['method'] = 'GET';
|
523 |
+
|
524 |
+
$parameters = '';
|
525 |
+
if ( ! empty( $params ) ) {
|
526 |
+
foreach ( $params as $key => $value ) {
|
527 |
+
if ( $key <> '' ) {
|
528 |
+
$parameters .= ( $parameters == "" ? "" : "&" ) . $key . "=" . $value;
|
529 |
+
}
|
530 |
+
}
|
531 |
+
|
532 |
+
if ( $parameters <> '' ) {
|
533 |
+
$url .= ( ( strpos( $url, "?" ) === false ) ? "?" : "&" ) . $parameters;
|
534 |
+
}
|
535 |
+
}
|
536 |
+
//echo $url; exit();
|
537 |
+
if ( ! $response = self::hmw_wpcall( $url, $params, $options ) ) {
|
538 |
+
return false;
|
539 |
+
}
|
540 |
+
|
541 |
+
return $response;
|
542 |
+
}
|
543 |
+
|
544 |
+
/**
|
545 |
+
* Connect remote with wp_remote_get
|
546 |
+
*
|
547 |
+
* @param $url
|
548 |
+
* @param array $params
|
549 |
+
* @param array $options
|
550 |
+
*
|
551 |
+
* @return bool|string
|
552 |
+
*/
|
553 |
+
public static function hmw_remote_post( $url, $params = array(), $options = array() ) {
|
554 |
+
$options['method'] = 'POST';
|
555 |
+
if ( ! $response = self::hmw_wpcall( $url, $params, $options ) ) {
|
556 |
+
return false;
|
557 |
+
}
|
558 |
+
|
559 |
+
return $response;
|
560 |
+
}
|
561 |
+
|
562 |
+
/**
|
563 |
+
* Use the WP remote call
|
564 |
+
*
|
565 |
+
* @param string $url
|
566 |
+
* @param array $params
|
567 |
+
* @param array $options
|
568 |
+
*
|
569 |
+
* @return string
|
570 |
+
*/
|
571 |
+
private static function hmw_wpcall( $url, $params, $options ) {
|
572 |
+
$options['timeout'] = ( isset( $options['timeout'] ) ) ? $options['timeout'] : 30;
|
573 |
+
$options['sslverify'] = false;
|
574 |
+
$options['httpversion'] = '1.0';
|
575 |
+
|
576 |
+
if ( $options['method'] == 'POST' ) {
|
577 |
+
$options['body'] = $params;
|
578 |
+
unset( $options['method'] );
|
579 |
+
$response = wp_remote_post( $url, $options );
|
580 |
+
} else {
|
581 |
+
unset( $options['method'] );
|
582 |
+
$response = wp_remote_get( $url, $options );
|
583 |
+
}
|
584 |
+
if ( is_wp_error( $response ) ) {
|
585 |
+
HMW_Debug::dump( $response );
|
586 |
+
|
587 |
+
return false;
|
588 |
+
}
|
589 |
+
|
590 |
+
$response = self::cleanResponce( wp_remote_retrieve_body( $response ) ); //clear and get the body
|
591 |
+
HMW_Debug::dump( 'hmw_wpcall', $url, $options, $response ); //output debug
|
592 |
+
|
593 |
+
return $response;
|
594 |
+
}
|
595 |
+
|
596 |
+
/**
|
597 |
+
* Get the Json from responce if any
|
598 |
+
*
|
599 |
+
* @param string $response
|
600 |
+
*
|
601 |
+
* @return string
|
602 |
+
*/
|
603 |
+
private static function cleanResponce( $response ) {
|
604 |
+
$response = trim( $response, '()' );
|
605 |
+
|
606 |
+
return $response;
|
607 |
+
}
|
608 |
+
|
609 |
+
/**
|
610 |
+
* Returns true if permalink structure
|
611 |
+
*
|
612 |
+
* @return boolean
|
613 |
+
*/
|
614 |
+
public static function isPermalinkStructure() {
|
615 |
+
return get_option( 'permalink_structure' );
|
616 |
+
}
|
617 |
+
|
618 |
+
|
619 |
+
/**
|
620 |
+
* Check if HTML Headers to prevent chenging the code for other file extension
|
621 |
+
*
|
622 |
+
* @param array $types
|
623 |
+
*
|
624 |
+
* @return bool
|
625 |
+
*/
|
626 |
+
public static function isContentHeader( $types = array( 'text/html', 'text/xml' ) ) {
|
627 |
+
$headers = headers_list();
|
628 |
+
foreach ( $headers as $index => $value ) {
|
629 |
+
if ( strpos( $value, ':' ) !== false ) {
|
630 |
+
$exploded = @explode( ': ', $value );
|
631 |
+
if ( count( $exploded ) > 1 ) {
|
632 |
+
$headers[ $exploded[0] ] = $exploded[1];
|
633 |
+
}
|
634 |
+
}
|
635 |
+
}
|
636 |
+
|
637 |
+
|
638 |
+
if ( ! empty( $types ) && isset( $headers['Content-Type'] ) ) {
|
639 |
+
foreach ( $types as $type ) {
|
640 |
+
if ( strpos( $headers['Content-Type'], $type ) !== false ) {
|
641 |
+
return true;
|
642 |
+
}
|
643 |
+
}
|
644 |
+
|
645 |
+
} else {
|
646 |
+
return false;
|
647 |
+
}
|
648 |
+
|
649 |
+
return false;
|
650 |
+
}
|
651 |
+
|
652 |
+
/**
|
653 |
+
* Returns true if server is Apache
|
654 |
+
*
|
655 |
+
* @return boolean
|
656 |
+
*/
|
657 |
+
public static function isApache() {
|
658 |
+
global $is_apache;
|
659 |
+
|
660 |
+
if ( self::isFlywheel() ) { //force Nginx on Flywheel server
|
661 |
+
return false;
|
662 |
+
}
|
663 |
+
|
664 |
+
return $is_apache;
|
665 |
+
}
|
666 |
+
|
667 |
+
/**
|
668 |
+
* Check if mode rewrite is on
|
669 |
+
* @return bool
|
670 |
+
*/
|
671 |
+
public static function isModeRewrite() {
|
672 |
+
if ( function_exists( 'apache_get_modules' ) ) {
|
673 |
+
$modules = apache_get_modules();
|
674 |
+
if ( ! empty( $modules ) ) {
|
675 |
+
return in_array( 'mod_rewrite', $modules );
|
676 |
+
}
|
677 |
+
}
|
678 |
+
|
679 |
+
return true;
|
680 |
+
}
|
681 |
+
|
682 |
+
/**
|
683 |
+
* Check whether server is LiteSpeed
|
684 |
+
*
|
685 |
+
* @return bool
|
686 |
+
*/
|
687 |
+
public static function isLitespeed() {
|
688 |
+
$litespeed = false;
|
689 |
+
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'LiteSpeed' ) !== false ) {
|
690 |
+
$litespeed = true;
|
691 |
+
} elseif ( isset( $_SERVER['SERVER_NAME'] ) && stristr( $_SERVER['SERVER_NAME'], 'LiteSpeed' ) !== false ) {
|
692 |
+
$litespeed = true;
|
693 |
+
} elseif ( isset( $_SERVER['X-Litespeed-Cache-Control'] ) ) {
|
694 |
+
$litespeed = true;
|
695 |
+
}
|
696 |
+
|
697 |
+
if ( self::isFlywheel() ) {
|
698 |
+
return false;
|
699 |
+
}
|
700 |
+
|
701 |
+
return $litespeed;
|
702 |
+
}
|
703 |
+
|
704 |
+
/**
|
705 |
+
* Check whether server is Lighthttp
|
706 |
+
*
|
707 |
+
* @return bool
|
708 |
+
*/
|
709 |
+
public static function isLighthttp() {
|
710 |
+
return ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'lighttpd' ) !== false );
|
711 |
+
}
|
712 |
+
|
713 |
+
/**
|
714 |
+
* Check if multisites with path
|
715 |
+
*
|
716 |
+
* @return bool
|
717 |
+
*/
|
718 |
+
public static function isMultisites() {
|
719 |
+
if ( ! isset( self::$is_multisite ) ) {
|
720 |
+
self::$is_multisite = ( is_multisite() && ( ( defined( 'SUBDOMAIN_INSTALL' ) && ! SUBDOMAIN_INSTALL ) || ( defined( 'VHOST' ) && VHOST == 'no' ) ) );
|
721 |
+
}
|
722 |
+
|
723 |
+
return self::$is_multisite;
|
724 |
+
}
|
725 |
+
|
726 |
+
|
727 |
+
/**
|
728 |
+
* Returns true if server is nginx
|
729 |
+
*
|
730 |
+
* @return boolean
|
731 |
+
*/
|
732 |
+
public static function isNginx() {
|
733 |
+
global $is_nginx;
|
734 |
+
|
735 |
+
if ( self::isFlywheel() ) {
|
736 |
+
return true;
|
737 |
+
}
|
738 |
+
|
739 |
+
return ( $is_nginx || ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'nginx' ) !== false ) );
|
740 |
+
}
|
741 |
+
|
742 |
+
/**
|
743 |
+
* Returns true if server is Wpengine
|
744 |
+
*
|
745 |
+
* @return boolean
|
746 |
+
*/
|
747 |
+
public static function isWpengine() {
|
748 |
+
return ( isset( $_SERVER['WPENGINE_PHPSESSIONS'] ) );
|
749 |
+
}
|
750 |
+
|
751 |
+
/**
|
752 |
+
* Returns true if server is Inmotion
|
753 |
+
*
|
754 |
+
* @return boolean
|
755 |
+
*/
|
756 |
+
public static function isInmotion() {
|
757 |
+
return ( isset( $_SERVER['SERVER_ADDR'] ) && strpos( @gethostbyaddr( $_SERVER['SERVER_ADDR'] ), 'inmotionhosting.com' ) !== false );
|
758 |
+
}
|
759 |
+
|
760 |
+
/**
|
761 |
+
* Returns true if server is Godaddy
|
762 |
+
*
|
763 |
+
* @return boolean
|
764 |
+
*/
|
765 |
+
public static function isGodaddy() {
|
766 |
+
return ( file_exists( ABSPATH . 'gd-config.php' ) );
|
767 |
+
}
|
768 |
+
|
769 |
+
/**
|
770 |
+
* Returns true if server is Wpengine
|
771 |
+
*
|
772 |
+
* @return boolean
|
773 |
+
*/
|
774 |
+
public static function isFlywheel() {
|
775 |
+
return (isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'Flywheel' ) !== false);
|
776 |
+
}
|
777 |
+
|
778 |
+
|
779 |
+
/**
|
780 |
+
* Returns true if server is IIS
|
781 |
+
*
|
782 |
+
* @return boolean
|
783 |
+
*/
|
784 |
+
public static function isIIS() {
|
785 |
+
global $is_IIS, $is_iis7;
|
786 |
+
|
787 |
+
return ( $is_iis7 || $is_IIS || ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'microsoft-iis' ) !== false ) );
|
788 |
+
}
|
789 |
+
|
790 |
+
/**
|
791 |
+
* Returns true if windows
|
792 |
+
* @return bool
|
793 |
+
*/
|
794 |
+
public static function isWindows() {
|
795 |
+
return ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' );
|
796 |
+
}
|
797 |
+
|
798 |
+
/**
|
799 |
+
* Check if IIS has rewrite 2 structure enabled
|
800 |
+
* @return bool
|
801 |
+
*/
|
802 |
+
public static function isPHPPermalink() {
|
803 |
+
if ( get_option( 'permalink_structure' ) ) {
|
804 |
+
if ( strpos( get_option( 'permalink_structure' ), 'index.php' ) !== false || strpos( get_option( 'permalink_structure' ), 'index.html' ) !== false || strpos( get_option( 'permalink_structure' ), 'index.htm' ) !== false ) {
|
805 |
+
return true;
|
806 |
+
}
|
807 |
+
}
|
808 |
+
|
809 |
+
return false;
|
810 |
+
}
|
811 |
+
|
812 |
+
/**
|
813 |
+
* Check whether the plugin is active by checking the active_plugins list.
|
814 |
+
*
|
815 |
+
* @source wp-admin/includes/plugin.php
|
816 |
+
*
|
817 |
+
* @param string $plugin Plugin folder/main file.
|
818 |
+
*
|
819 |
+
* @return boolean
|
820 |
+
*/
|
821 |
+
public static function isPluginActive( $plugin ) {
|
822 |
+
if ( empty( self::$active_plugins ) ) {
|
823 |
+
self::$active_plugins = (array) get_option( 'active_plugins', array() );
|
824 |
+
|
825 |
+
if ( is_multisite() ) {
|
826 |
+
self::$active_plugins = array_merge( array_values( self::$active_plugins ), array_keys( get_site_option( 'active_sitewide_plugins' ) ) );
|
827 |
+
}
|
828 |
+
|
829 |
+
HMW_Debug::dump( self::$active_plugins );
|
830 |
+
|
831 |
+
}
|
832 |
+
|
833 |
+
return in_array( $plugin, self::$active_plugins, true );
|
834 |
+
}
|
835 |
+
|
836 |
+
/**
|
837 |
+
* Check whether the theme is active.
|
838 |
+
*
|
839 |
+
* @param string $theme Theme folder/main file.
|
840 |
+
*
|
841 |
+
* @return boolean
|
842 |
+
*/
|
843 |
+
public static function isThemeActive( $theme ) {
|
844 |
+
if ( function_exists( 'wp_get_theme' ) ) {
|
845 |
+
$themes = wp_get_theme();
|
846 |
+
if ( isset( $themes->name ) && ( strtolower( $themes->name ) == strtolower( $theme ) || strtolower( $themes->name ) == strtolower( $theme ) . ' child' ) ) {
|
847 |
+
return true;
|
848 |
+
}
|
849 |
+
}
|
850 |
+
|
851 |
+
return false;
|
852 |
+
}
|
853 |
+
|
854 |
+
/**
|
855 |
+
* Get all the plugin names
|
856 |
+
*
|
857 |
+
* @return array
|
858 |
+
*/
|
859 |
+
public static function getAllPlugins() {
|
860 |
+
$all_plugins = (array) get_option( 'active_plugins', array() );;
|
861 |
+
|
862 |
+
if ( is_multisite() ) {
|
863 |
+
$all_plugins = array_merge( array_values( $all_plugins ), array_keys( get_site_option( 'active_sitewide_plugins' ) ) );
|
864 |
+
}
|
865 |
+
|
866 |
+
return $all_plugins;
|
867 |
+
}
|
868 |
+
|
869 |
+
/**
|
870 |
+
* Get all the themes names
|
871 |
+
*
|
872 |
+
* @return array
|
873 |
+
*/
|
874 |
+
public static function getAllThemes() {
|
875 |
+
return search_theme_directories();
|
876 |
+
}
|
877 |
+
|
878 |
+
/**
|
879 |
+
* Get the absolute filesystem path to the root of the WordPress installation
|
880 |
+
*
|
881 |
+
* @return string Full filesystem path to the root of the WordPress installation
|
882 |
+
*/
|
883 |
+
public static function getRootPath() {
|
884 |
+
return ABSPATH;
|
885 |
+
}
|
886 |
+
|
887 |
+
/**
|
888 |
+
* Get Relative path for the current blog in case of WP Multisite
|
889 |
+
*
|
890 |
+
* @param $url
|
891 |
+
*
|
892 |
+
* @return mixed|string
|
893 |
+
*/
|
894 |
+
public static function getRelativePath( $url ) {
|
895 |
+
$url = wp_make_link_relative( $url );
|
896 |
+
|
897 |
+
if ( $url <> '' ) {
|
898 |
+
$url = str_replace( wp_make_link_relative( get_bloginfo( 'url' ) ), '', $url );
|
899 |
+
|
900 |
+
if ( HMW_Classes_Tools::isMultisites() && defined( 'PATH_CURRENT_SITE' ) ) {
|
901 |
+
$url = str_replace( rtrim( PATH_CURRENT_SITE, '/' ), '', $url );
|
902 |
+
$url = trim( $url, '/' );
|
903 |
+
$url = $url . '/';
|
904 |
+
} else {
|
905 |
+
$url = trim( $url, '/' );
|
906 |
+
}
|
907 |
+
}
|
908 |
+
|
909 |
+
HMW_Debug::dump( $url );
|
910 |
+
|
911 |
+
return $url;
|
912 |
+
}
|
913 |
+
|
914 |
+
/**
|
915 |
+
* Empty the cache from other cache plugins when save the settings
|
916 |
+
*/
|
917 |
+
public static function emptyCache() {
|
918 |
+
//Empty WordPress rewrites count for 404 error.
|
919 |
+
//This happens when the rules are not saved through config file
|
920 |
+
HMW_Classes_Tools::saveOptions( 'rewrites', 0 );
|
921 |
+
|
922 |
+
if ( function_exists( 'w3tc_pgcache_flush' ) ) {
|
923 |
+
w3tc_pgcache_flush();
|
924 |
+
}
|
925 |
+
|
926 |
+
if ( function_exists( 'w3tc_minify_flush' ) ) {
|
927 |
+
w3tc_minify_flush();
|
928 |
+
}
|
929 |
+
if ( function_exists( 'w3tc_dbcache_flush' ) ) {
|
930 |
+
w3tc_dbcache_flush();
|
931 |
+
}
|
932 |
+
if ( function_exists( 'w3tc_objectcache_flush' ) ) {
|
933 |
+
w3tc_objectcache_flush();
|
934 |
+
}
|
935 |
+
|
936 |
+
if ( function_exists( 'wp_cache_clear_cache' ) ) {
|
937 |
+
wp_cache_clear_cache();
|
938 |
+
}
|
939 |
+
|
940 |
+
if ( function_exists( 'rocket_clean_domain' ) && function_exists( 'rocket_clean_minify' ) && function_exists( 'rocket_clean_cache_busting' ) ) {
|
941 |
+
// Remove all cache files
|
942 |
+
rocket_clean_domain();
|
943 |
+
rocket_clean_minify();
|
944 |
+
rocket_clean_cache_busting();
|
945 |
+
}
|
946 |
+
|
947 |
+
if ( function_exists( 'opcache_reset' ) ) {
|
948 |
+
// Remove all opcache if enabled
|
949 |
+
opcache_reset();
|
950 |
+
}
|
951 |
+
|
952 |
+
if ( function_exists( 'apc_clear_cache' ) ) {
|
953 |
+
// Remove all apc if enabled
|
954 |
+
apc_clear_cache();
|
955 |
+
}
|
956 |
+
|
957 |
+
if ( class_exists( 'Cache_Enabler_Disk' ) && method_exists( 'Cache_Enabler_Disk', 'clear_cache' ) ) {
|
958 |
+
// clear disk cache
|
959 |
+
Cache_Enabler_Disk::clear_cache();
|
960 |
+
}
|
961 |
+
|
962 |
+
if ( class_exists( 'LiteSpeed_Cache' ) ) {
|
963 |
+
LiteSpeed_Cache::get_instance()->purge_all();
|
964 |
+
}
|
965 |
+
|
966 |
+
if ( class_exists( 'WpeCommon' ) ) {
|
967 |
+
if ( method_exists( 'WpeCommon', 'purge_memcached' ) ) {
|
968 |
+
WpeCommon::purge_memcached();
|
969 |
+
}
|
970 |
+
if ( method_exists( 'WpeCommon', 'clear_maxcdn_cache' ) ) {
|
971 |
+
WpeCommon::clear_maxcdn_cache();
|
972 |
+
}
|
973 |
+
if ( method_exists( 'WpeCommon', 'purge_varnish_cache' ) ) {
|
974 |
+
WpeCommon::purge_varnish_cache();
|
975 |
+
}
|
976 |
+
}
|
977 |
+
|
978 |
+
//Clear the fastest cache
|
979 |
+
global $wp_fastest_cache;
|
980 |
+
if ( isset( $wp_fastest_cache ) && method_exists( $wp_fastest_cache, 'deleteCache' ) ) {
|
981 |
+
$wp_fastest_cache->deleteCache();
|
982 |
+
}
|
983 |
+
|
984 |
+
}
|
985 |
+
|
986 |
+
/**
|
987 |
+
* Flush the WordPress rewrites
|
988 |
+
*/
|
989 |
+
public static function flushWPRewrites() {
|
990 |
+
if ( HMW_Classes_Tools::isPluginActive( 'woocommerce/woocommerce.php' ) ) {
|
991 |
+
update_option( 'woocommerce_queue_flush_rewrite_rules', 'yes' );
|
992 |
+
}
|
993 |
+
|
994 |
+
flush_rewrite_rules();
|
995 |
+
}
|
996 |
+
|
997 |
+
/**
|
998 |
+
* Called on plugin activation
|
999 |
+
*/
|
1000 |
+
public function hmw_activate() {
|
1001 |
+
set_transient( 'hmw_activate', true );
|
1002 |
+
|
1003 |
+
$lastsafeoptions = self::getOptions( true );
|
1004 |
+
if ( isset( $lastsafeoptions['hmw_mode'] ) && ( $lastsafeoptions['hmw_mode'] == 'ninja' || $lastsafeoptions['hmw_mode'] == 'lite' ) ) {
|
1005 |
+
set_transient( 'hmw_restore', true );
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
self::$options = @array_merge( self::$init, self::$default );
|
1009 |
+
self::$options['hmw_ver'] = HMW_VERSION_ID;
|
1010 |
+
self::saveOptions();
|
1011 |
+
}
|
1012 |
+
|
1013 |
+
/**
|
1014 |
+
* Called on plugin deactivation
|
1015 |
+
*/
|
1016 |
+
public function hmw_deactivate() {
|
1017 |
+
$options = self::$default;
|
1018 |
+
//Prevent duplicates
|
1019 |
+
foreach ( $options as $key => $value ) {
|
1020 |
+
//set the default params from tools
|
1021 |
+
HMW_Classes_Tools::saveOptions( $key, $value );
|
1022 |
+
}
|
1023 |
+
|
1024 |
+
//clear the locked ips
|
1025 |
+
HMW_Classes_ObjController::getClass( 'HMW_Controllers_Brute' )->clearBlockedIPs();
|
1026 |
+
|
1027 |
+
//remove the custom rules
|
1028 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeToFile( '', 'HMWP_RULES' );
|
1029 |
+
|
1030 |
+
//Flush the changes
|
1031 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->flushChanges();
|
1032 |
+
}
|
1033 |
+
|
1034 |
+
/**
|
1035 |
+
* Call this function on rewrite update from other plugins
|
1036 |
+
*
|
1037 |
+
* @param $wp_rules
|
1038 |
+
*
|
1039 |
+
* @return mixed
|
1040 |
+
* @throws Exception
|
1041 |
+
*/
|
1042 |
+
public function checkRewriteUpdate( $wp_rules ) {
|
1043 |
+
try {
|
1044 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) && ! HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1045 |
+
//Build the redirect table
|
1046 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->clearRedirect()->buildRedirect()->setRewriteRules()->flushRewrites();
|
1047 |
+
|
1048 |
+
}
|
1049 |
+
|
1050 |
+
} catch ( Exception $e ) {
|
1051 |
+
|
1052 |
+
}
|
1053 |
+
|
1054 |
+
return $wp_rules;
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
/**
|
1058 |
+
* Check for updates
|
1059 |
+
* Called on activation
|
1060 |
+
*/
|
1061 |
+
public static function checkUpgrade() {
|
1062 |
+
self::$options = self::getOptions();
|
1063 |
+
|
1064 |
+
if ( (int) self::$options['hmw_ver'] == 0 ) {
|
1065 |
+
$homepath = ltrim( parse_url( site_url(), PHP_URL_PATH ), '/' );
|
1066 |
+
$pluginurl = ltrim( parse_url( plugins_url(), PHP_URL_PATH ), '/' );
|
1067 |
+
$contenturl = ltrim( parse_url( content_url(), PHP_URL_PATH ), '/' );
|
1068 |
+
|
1069 |
+
if ( self::$options['hmw_mode'] == 'custom' ) {
|
1070 |
+
self::$options['hmw_mode'] = 'lite';
|
1071 |
+
}
|
1072 |
+
self::$options['hmw_plugin_url'] = trim( str_replace( $homepath, '', $pluginurl ), '/' );
|
1073 |
+
self::$options['hmw_wp-content_url'] = trim( str_replace( $homepath, '', $contenturl ), '/' );
|
1074 |
+
self::$options['hmw_themes_url'] = 'themes';
|
1075 |
+
self::$options['hmw_activate_url'] = 'wp-activate.php';
|
1076 |
+
|
1077 |
+
}
|
1078 |
+
|
1079 |
+
self::$options['hmw_ver'] = HMW_VERSION_ID;
|
1080 |
+
self::saveOptions();
|
1081 |
+
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
/**
|
1085 |
+
* Check if new themes or plugins are added
|
1086 |
+
*/
|
1087 |
+
public function checkWpUpdates() {
|
1088 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_plugins' ) ) {
|
1089 |
+
$all_plugins = HMW_Classes_Tools::getAllPlugins();
|
1090 |
+
$dbplugins = HMW_Classes_Tools::getOption( 'hmw_plugins' );
|
1091 |
+
foreach ( $all_plugins as $plugin ) {
|
1092 |
+
if ( is_plugin_active( $plugin ) && isset( $dbplugins['from'] ) && ! empty( $dbplugins['from'] ) ) {
|
1093 |
+
if ( ! in_array( plugin_dir_path( $plugin ), $dbplugins['from'] ) ) {
|
1094 |
+
self::saveOptions( 'changes', true );
|
1095 |
+
}
|
1096 |
+
}
|
1097 |
+
}
|
1098 |
+
}
|
1099 |
+
|
1100 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_themes' ) ) {
|
1101 |
+
$all_themes = HMW_Classes_Tools::getAllThemes();
|
1102 |
+
$dbthemes = HMW_Classes_Tools::getOption( 'hmw_themes' );
|
1103 |
+
foreach ( $all_themes as $theme => $value ) {
|
1104 |
+
if ( is_dir( $value['theme_root'] ) && isset( $dbthemes['from'] ) && ! empty( $dbthemes['from'] ) ) {
|
1105 |
+
if ( ! in_array( $theme . '/', $dbthemes['from'] ) ) {
|
1106 |
+
self::saveOptions( 'changes', true );
|
1107 |
+
}
|
1108 |
+
}
|
1109 |
+
}
|
1110 |
+
}
|
1111 |
+
|
1112 |
+
}
|
1113 |
+
|
1114 |
+
/**
|
1115 |
+
* Call API Server
|
1116 |
+
*
|
1117 |
+
* @param null $email
|
1118 |
+
* @param string $redirect_to
|
1119 |
+
*
|
1120 |
+
* @return array|bool|mixed|object
|
1121 |
+
*/
|
1122 |
+
public static function checkApi( $email = null, $redirect_to = '' ) {
|
1123 |
+
$check = array();
|
1124 |
+
$howtolessons = HMW_Classes_Tools::getValue( 'hmw_howtolessons', 0 );
|
1125 |
+
$monitor = HMW_Classes_Tools::getValue( 'hmw_monitor', 0 );
|
1126 |
+
if ( isset( $email ) && $email <> '' ) {
|
1127 |
+
$args = array(
|
1128 |
+
'email' => $email,
|
1129 |
+
'url' => home_url(),
|
1130 |
+
'howtolessons' => (int) $howtolessons,
|
1131 |
+
'monitor' => (int) $monitor,
|
1132 |
+
'source' => _HMW_PLUGIN_NAME_
|
1133 |
+
);
|
1134 |
+
$response = self::hmw_remote_get( _HMW_API_SITE_ . '/api/free/token', $args, array( 'timeout' => 10 ) );
|
1135 |
+
} elseif ( self::getOption( 'hmw_token' ) ) {
|
1136 |
+
$args = array(
|
1137 |
+
'token' => self::getOption( 'hmw_token' ),
|
1138 |
+
'url' => home_url(),
|
1139 |
+
'howtolessons' => (int) $howtolessons,
|
1140 |
+
'monitor' => (int) $monitor,
|
1141 |
+
'source' => _HMW_PLUGIN_NAME_
|
1142 |
+
);
|
1143 |
+
$response = self::hmw_remote_get( _HMW_API_SITE_ . '/api/free/token', $args, array( 'timeout' => 10 ) );
|
1144 |
+
} else {
|
1145 |
+
return $check;
|
1146 |
+
}
|
1147 |
+
if ( $response && json_decode( $response ) ) {
|
1148 |
+
$check = json_decode( $response, true );
|
1149 |
+
|
1150 |
+
HMW_Classes_Tools::saveOptions( 'hmw_token', ( isset( $check['token'] ) ? $check['token'] : 0 ) );
|
1151 |
+
HMW_Classes_Tools::saveOptions( 'api_token', ( isset( $check['api_token'] ) ? $check['api_token'] : false ) );
|
1152 |
+
HMW_Classes_Tools::saveOptions( 'error', isset( $check['error'] ) );
|
1153 |
+
|
1154 |
+
if ( ! isset( $check['error'] ) ) {
|
1155 |
+
if ( $redirect_to <> '' ) {
|
1156 |
+
wp_redirect( $redirect_to );
|
1157 |
+
exit();
|
1158 |
+
}
|
1159 |
+
} elseif ( isset( $check['message'] ) ) {
|
1160 |
+
HMW_Classes_Error::setError( $check['message'] );
|
1161 |
+
}
|
1162 |
+
} else {
|
1163 |
+
//HMW_Classes_Tools::saveOptions('error', true);
|
1164 |
+
HMW_Classes_Error::setError( sprintf( __( 'CONNECTION ERROR! Make sure your website can access: %s', _HMW_PLUGIN_NAME_ ), '<a href="' . _HMW_SUPPORT_SITE_ . '" target="_blank">' . _HMW_SUPPORT_SITE_ . '</a>' ) . " <br /> " );
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
return $check;
|
1168 |
+
}
|
1169 |
+
|
1170 |
+
/**
|
1171 |
+
* Send the email is case there are major changes
|
1172 |
+
* @return bool
|
1173 |
+
*/
|
1174 |
+
public static function sendEmail() {
|
1175 |
+
$email = self::getOption( 'hmw_email_address' );
|
1176 |
+
if ( $email == '' ) {
|
1177 |
+
global $current_user;
|
1178 |
+
$email = $current_user->user_email;
|
1179 |
+
}
|
1180 |
+
|
1181 |
+
$line = "\n" . "________________________________________" . "\n\n";
|
1182 |
+
$to = $email;
|
1183 |
+
$from = 'no-reply@wpplugins.tips';
|
1184 |
+
$subject = get_bloginfo( 'name' ) . ' - ' . __( 'New Login Information', _HMW_PLUGIN_NAME_ );
|
1185 |
+
$message = "Thank you for using Hide My WordPress!" . "\n\n";
|
1186 |
+
$message .= $line;
|
1187 |
+
$message .= "SPECIAL OFFER: Get Hide My WP Ghost with just $10/website if you buy a 5 Websites License pack." . "\n";
|
1188 |
+
$message .= "https://hidemywpghost.com/buy/special_5_websites_plugin" . "\n";
|
1189 |
+
$message .= $line . "\n";
|
1190 |
+
$message .= "Your new website URLs are:" . "\n";
|
1191 |
+
$message .= "Admin URL: " . admin_url() . "\n";
|
1192 |
+
$message .= "Login URL: " . site_url( self::$options['hmw_login_url'] ) . "\n";
|
1193 |
+
$message .= $line . "\n";
|
1194 |
+
$message .= "Note: If you can't login to your site, just access this URL: \n";
|
1195 |
+
$message .= site_url() . "/wp-login.php?" . self::getOption( 'hmw_disable_name' ) . "=" . self::$options['hmw_disable'] . "\n\n\n";
|
1196 |
+
|
1197 |
+
$message .= "Best regards," . "\n";
|
1198 |
+
$message .= "Wpplugins.tips Team" . "\n";
|
1199 |
+
|
1200 |
+
$headers = array();
|
1201 |
+
$headers[] = 'From: Hide My WP <' . $from . '>';
|
1202 |
+
$headers[] = 'Content-type: text/plain';
|
1203 |
+
|
1204 |
+
add_filter( 'wp_mail_content_type', array( 'HMW_Classes_Tools', 'setContentType' ) );
|
1205 |
+
|
1206 |
+
if ( @wp_mail( $to, $subject, $message, $headers ) ) {
|
1207 |
+
return true;
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
return false;
|
1211 |
+
}
|
1212 |
+
|
1213 |
+
/**
|
1214 |
+
* Set the content type to text/plain
|
1215 |
+
* @return string
|
1216 |
+
*/
|
1217 |
+
public static function setContentType() {
|
1218 |
+
return "text/plain";
|
1219 |
+
}
|
1220 |
+
|
1221 |
+
/**
|
1222 |
+
* Return false on hooks
|
1223 |
+
*
|
1224 |
+
* @param string $param
|
1225 |
+
*
|
1226 |
+
* @return bool
|
1227 |
+
*/
|
1228 |
+
public static function returnFalse( $param = null ) {
|
1229 |
+
return false;
|
1230 |
+
}
|
1231 |
+
|
1232 |
+
/**
|
1233 |
+
* Return true on hooks
|
1234 |
+
*
|
1235 |
+
* @param string $param
|
1236 |
+
*
|
1237 |
+
* @return bool
|
1238 |
+
*/
|
1239 |
+
public static function returnTrue( $param = null ) {
|
1240 |
+
return true;
|
1241 |
+
}
|
1242 |
+
|
1243 |
+
}
|
config.json
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"blocks": {
|
3 |
+
"block": [
|
4 |
+
{
|
5 |
+
"name": "HMW_Controllers_Settings",
|
6 |
+
"actions": {
|
7 |
+
"action": [
|
8 |
+
"hmw_settings",
|
9 |
+
"hmw_tweakssettings",
|
10 |
+
"hmw_confirm",
|
11 |
+
"hmw_mappsettings",
|
12 |
+
"hmw_logout",
|
13 |
+
"hmw_abort",
|
14 |
+
"hmw_manualrewrite",
|
15 |
+
"hmw_advsettings",
|
16 |
+
"hmw_backup",
|
17 |
+
"hmw_restore",
|
18 |
+
"hmw_support",
|
19 |
+
"hmw_connect",
|
20 |
+
"hmw_dont_connect"
|
21 |
+
]
|
22 |
+
},
|
23 |
+
"admin": "1",
|
24 |
+
"active": "1"
|
25 |
+
},
|
26 |
+
{
|
27 |
+
"name": "HMW_Controllers_Plugins",
|
28 |
+
"actions": {
|
29 |
+
"action": [
|
30 |
+
"hmw_plugin_install"
|
31 |
+
]
|
32 |
+
},
|
33 |
+
"admin": "1",
|
34 |
+
"active": "1"
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"name": "HMW_Controllers_SecurityCheck",
|
38 |
+
"actions": {
|
39 |
+
"action": [
|
40 |
+
"hmw_securitycheck",
|
41 |
+
"hmw_securityexclude",
|
42 |
+
"hmw_resetexclude"
|
43 |
+
]
|
44 |
+
},
|
45 |
+
"admin": "1",
|
46 |
+
"active": "1"
|
47 |
+
},
|
48 |
+
{
|
49 |
+
"name": "HMW_Controllers_Brute",
|
50 |
+
"actions": {
|
51 |
+
"action": [
|
52 |
+
"hmw_brutesettings",
|
53 |
+
"hmw_blockedips",
|
54 |
+
"hmw_deleteip",
|
55 |
+
"hmw_deleteallips"
|
56 |
+
]
|
57 |
+
},
|
58 |
+
"admin": "1",
|
59 |
+
"active": "1"
|
60 |
+
},
|
61 |
+
{
|
62 |
+
"name": "HMW_Controllers_Widget",
|
63 |
+
"actions": {
|
64 |
+
"action": "hmw_widget_securitycheck"
|
65 |
+
},
|
66 |
+
"admin": "1",
|
67 |
+
"active": "1"
|
68 |
+
},
|
69 |
+
{
|
70 |
+
"name": "HMW_Controllers_Notice",
|
71 |
+
"actions": {
|
72 |
+
"action": [
|
73 |
+
"hmw_disable_notice",
|
74 |
+
"hmw_ignore_notice"
|
75 |
+
]
|
76 |
+
},
|
77 |
+
"admin": "1",
|
78 |
+
"active": "1"
|
79 |
+
}
|
80 |
+
]
|
81 |
+
}
|
82 |
+
}
|
config/config.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
/**
|
5 |
+
* The configuration file
|
6 |
+
*/
|
7 |
+
defined('HMW_REQUEST_TIME') || define('HMW_REQUEST_TIME', microtime(true));
|
8 |
+
defined('_HMW_NONCE_ID_') || define('_HMW_NONCE_ID_', NONCE_KEY);
|
9 |
+
|
10 |
+
//force Hide My Wp to load right after initialization
|
11 |
+
defined('HMW_PRIORITY') || define('HMW_PRIORITY', false);
|
12 |
+
//Force not to write the rules in config file
|
13 |
+
defined('HMW_RULES_IN_CONFIG') || define('HMW_RULES_IN_CONFIG', true);
|
14 |
+
//add HMW Rules in WordPress rewrite definition in htaccess
|
15 |
+
defined('HMW_RULES_IN_WP_RULES') || define('HMW_RULES_IN_WP_RULES', true);
|
16 |
+
|
17 |
+
if (!defined('PHP_VERSION_ID')) {
|
18 |
+
$version = explode('.', PHP_VERSION);
|
19 |
+
define('PHP_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
|
20 |
+
}
|
21 |
+
if (!defined('WP_VERSION_ID') && isset($wp_version)) {
|
22 |
+
$version = explode('.', $wp_version);
|
23 |
+
define('WP_VERSION_ID', ((int) @$version[0] * 1000 + (int) @$version[1] * 100 + ((isset($version[2])) ? ((int) $version[2] * 10) : 0)));
|
24 |
+
}else{
|
25 |
+
!defined('WP_VERSION_ID') && define('WP_VERSION_ID', '3000');
|
26 |
+
}
|
27 |
+
|
28 |
+
if (!defined('HMW_VERSION_ID')) {
|
29 |
+
$version = explode('.', HMW_VERSION);
|
30 |
+
define('HMW_VERSION_ID', ((int) @$version[0] * 10000 + (int) @$version[1] * 1000 + ((isset($version[2])) ? ((int) $version[2] * 1) : 0)));
|
31 |
+
}
|
32 |
+
|
33 |
+
/* No path file? error ... */
|
34 |
+
require_once(dirname(__FILE__) . '/paths.php');
|
35 |
+
|
36 |
+
/* Define the record name in the Option and UserMeta tables */
|
37 |
+
define('HMW_OPTION', 'hmw_options');
|
38 |
+
define('HMW_OPTION_SAFE', 'hmw_options_safe');
|
config/paths.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
$currentDir = dirname(__FILE__);
|
5 |
+
|
6 |
+
define('_HMW_NAMESPACE_', 'HMW');
|
7 |
+
define('_HMW_VER_NAME_', 'Lite');
|
8 |
+
define('_HMW_PLUGIN_NAME_', 'hide-my-wp');
|
9 |
+
defined('_HMW_SUPPORT_SITE_') || define('_HMW_SUPPORT_SITE_', 'https://wpplugins.tips');
|
10 |
+
defined('_HMW_ACCOUNT_SITE_') || define('_HMW_ACCOUNT_SITE_', 'https://account.wpplugins.tips');
|
11 |
+
defined('_HMW_API_SITE_') || define('_HMW_API_SITE_', _HMW_ACCOUNT_SITE_);
|
12 |
+
define('_HMW_SUPPORT_EMAIL_', 'contact@wpplugins.tips');
|
13 |
+
|
14 |
+
/* Directories */
|
15 |
+
define('_HMW_ROOT_DIR_', realpath($currentDir . '/..'));
|
16 |
+
define('_HMW_CLASSES_DIR_', _HMW_ROOT_DIR_ . '/classes/');
|
17 |
+
define('_HMW_CONTROLLER_DIR_', _HMW_ROOT_DIR_ . '/controllers/');
|
18 |
+
define('_HMW_MODEL_DIR_', _HMW_ROOT_DIR_ . '/models/');
|
19 |
+
define('_HMW_TRANSLATIONS_DIR_', _HMW_ROOT_DIR_ . '/languages/');
|
20 |
+
define('_HMW_THEME_DIR_', _HMW_ROOT_DIR_ . '/view/');
|
21 |
+
|
22 |
+
/* URLS */
|
23 |
+
define('_HMW_URL_', plugins_url() . '/' . _HMW_PLUGIN_NAME_);
|
24 |
+
define('_HMW_THEME_URL_', _HMW_URL_ . '/view/');
|
controllers/Brute.php
ADDED
@@ -0,0 +1,281 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Controllers_Brute extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
public function __construct() {
|
7 |
+
parent::__construct();
|
8 |
+
|
9 |
+
add_action('admin_init', array($this, 'hmw_update_trusted_headers'), 99);
|
10 |
+
add_filter('authenticate', array($this, 'hmw_check_preauth'), 99, 1);
|
11 |
+
|
12 |
+
if (HMW_Classes_Tools::getOption('brute_use_math')) {
|
13 |
+
add_action('wp_login_failed', array($this, 'hmw_failed_attempt'), 99);
|
14 |
+
add_action('login_form', array($this->model, 'brute_math_form'), 99);
|
15 |
+
add_filter('woocommerce_login_form', array($this->model, 'brute_math_form'), 99);
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
public function hookFrontinit() {
|
20 |
+
if (!is_user_logged_in()) {
|
21 |
+
//Load the Multilanguage
|
22 |
+
HMW_Classes_Tools::loadMultilanguage();
|
23 |
+
|
24 |
+
$this->bruteBlockCheck();
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
public function bruteBlockCheck() {
|
29 |
+
$response = $this->model->brute_call('check_ip');
|
30 |
+
if ($response['status'] == 'blocked') {
|
31 |
+
if (!$this->model->check_whitelisted_ip($this->model->brute_get_ip())) {
|
32 |
+
wp_ob_end_flush_all();
|
33 |
+
wp_die(HMW_Classes_Tools::getOption('hmw_brute_message'),
|
34 |
+
__('IP Blocked by Hide My WordPress Brute Force Protection', _HMW_PLUGIN_NAME_),
|
35 |
+
array('response' => 403)
|
36 |
+
);
|
37 |
+
}
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Called when an action is triggered
|
43 |
+
*
|
44 |
+
* @return void
|
45 |
+
*/
|
46 |
+
public function action() {
|
47 |
+
parent::action();
|
48 |
+
|
49 |
+
switch (HMW_Classes_Tools::getValue('action')) {
|
50 |
+
|
51 |
+
case 'hmw_brutesettings':
|
52 |
+
HMW_Classes_Tools::saveOptions('hmw_bruteforce', HMW_Classes_Tools::getValue('hmw_bruteforce'));
|
53 |
+
|
54 |
+
//whitelist_ip
|
55 |
+
$whitelist = HMW_Classes_Tools::getValue('whitelist_ip', '', true);
|
56 |
+
$ips = explode(PHP_EOL, $whitelist);
|
57 |
+
foreach ($ips as &$ip) {
|
58 |
+
$ip = $this->model->clean_ip($ip);
|
59 |
+
|
60 |
+
// If the IP is in a private or reserved range, keep looking
|
61 |
+
if ($ip == '127.0.0.1' || $ip == '::1') {
|
62 |
+
HMW_Classes_Error::setError(__("Add only real IPs. No local ips needed.", _HMW_PLUGIN_NAME_));
|
63 |
+
}
|
64 |
+
}
|
65 |
+
if (!empty($ips)) {
|
66 |
+
$ips = array_unique($ips);
|
67 |
+
HMW_Classes_Tools::saveOptions('whitelist_ip', json_encode($ips));
|
68 |
+
}
|
69 |
+
|
70 |
+
//banlist_ip
|
71 |
+
$banlist = HMW_Classes_Tools::getValue('banlist_ip', '', true);
|
72 |
+
$ips = explode(PHP_EOL, $banlist);
|
73 |
+
foreach ($ips as &$ip) {
|
74 |
+
$ip = $this->model->clean_ip($ip);
|
75 |
+
|
76 |
+
// If the IP is in a private or reserved range, keep looking
|
77 |
+
if ($ip == '127.0.0.1' || $ip == '::1') {
|
78 |
+
HMW_Classes_Error::setError(__("Add only real IPs. No local ips allowed.", _HMW_PLUGIN_NAME_));
|
79 |
+
}
|
80 |
+
}
|
81 |
+
if (!empty($ips)) {
|
82 |
+
$ips = array_unique($ips);
|
83 |
+
HMW_Classes_Tools::saveOptions('banlist_ip', json_encode($ips));
|
84 |
+
}
|
85 |
+
|
86 |
+
//Brute force math option
|
87 |
+
HMW_Classes_Tools::saveOptions('brute_use_math', HMW_Classes_Tools::getValue('brute_use_math', 0));
|
88 |
+
if (HMW_Classes_Tools::getValue('brute_use_math', 0)) {
|
89 |
+
$attempts = HMW_Classes_Tools::getValue('brute_max_attempts');
|
90 |
+
if ((int)$attempts <= 0) {
|
91 |
+
$attempts = 3;
|
92 |
+
HMW_Classes_Error::setError(__('You need to set a positive number of attempts ', _HMW_PLUGIN_NAME_));
|
93 |
+
|
94 |
+
}
|
95 |
+
HMW_Classes_Tools::saveOptions('brute_max_attempts', (int)$attempts);
|
96 |
+
|
97 |
+
$timeout = HMW_Classes_Tools::getValue('brute_max_timeout');
|
98 |
+
if ((int)$timeout <= 0) {
|
99 |
+
$timeout = 3600;
|
100 |
+
HMW_Classes_Error::setError(__('You need to set a positive waiting time', _HMW_PLUGIN_NAME_));
|
101 |
+
|
102 |
+
}
|
103 |
+
HMW_Classes_Tools::saveOptions('hmw_brute_message', HMW_Classes_Tools::getValue('hmw_brute_message', '', true));
|
104 |
+
HMW_Classes_Tools::saveOptions('brute_max_timeout', $timeout);
|
105 |
+
}
|
106 |
+
|
107 |
+
HMW_Classes_Error::setError(__('Saved'), 'success');
|
108 |
+
|
109 |
+
HMW_Classes_Tools::emptyCache();
|
110 |
+
break;
|
111 |
+
case 'hmw_deleteip':
|
112 |
+
$transient = HMW_Classes_Tools::getValue('transient', null);
|
113 |
+
if (isset($transient)) {
|
114 |
+
$this->model->delete_ip($transient);
|
115 |
+
}
|
116 |
+
|
117 |
+
break;
|
118 |
+
case 'hmw_deleteallips':
|
119 |
+
$this->clearBlockedIPs();
|
120 |
+
break;
|
121 |
+
|
122 |
+
case 'hmw_blockedips':
|
123 |
+
HMW_Classes_Tools::setHeader('json');
|
124 |
+
$data = $this->getBlockedIps();
|
125 |
+
echo json_encode(array('data' => $data));
|
126 |
+
exit();
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
public function getBlockedIps() {
|
131 |
+
$data = '<table class="table table-striped" >';
|
132 |
+
$ips = $this->model->get_blocked_ips();
|
133 |
+
$data .= "<tr>
|
134 |
+
<th>" . __('Cnt', _HMW_PLUGIN_NAME_) . "</th>
|
135 |
+
<th>" . __('IP', _HMW_PLUGIN_NAME_) . "</th>
|
136 |
+
<th>" . __('Fail Attempts', _HMW_PLUGIN_NAME_) . "</th>
|
137 |
+
<th>" . __('Hostname', _HMW_PLUGIN_NAME_) . "</th>
|
138 |
+
<th>" . __('Options', _HMW_PLUGIN_NAME_) . "</th>
|
139 |
+
</tr>";
|
140 |
+
if (!empty($ips)) {
|
141 |
+
$cnt = 1;
|
142 |
+
foreach ($ips as $transient => $ip) {
|
143 |
+
$data .= "<tr>
|
144 |
+
<td>" . $cnt . "</td>
|
145 |
+
<td>{$ip['ip']}</td>
|
146 |
+
<td>{$ip['attempts']}</td>
|
147 |
+
<td>{$ip['host']}</td>
|
148 |
+
<td class=\"col-md-2 \"> <form method=\"POST\">
|
149 |
+
" . wp_nonce_field('hmw_deleteip', 'hmw_nonce', true, false) . "
|
150 |
+
<input type=\"hidden\" name=\"action\" value=\"hmw_deleteip\" />
|
151 |
+
<input type=\"hidden\" name=\"transient\" value=\"" . $transient . "\" />
|
152 |
+
<input type=\"submit\" class=\"btn rounded-0 btn-default save no-p-v\" value=\"Unlock\" />
|
153 |
+
</form>
|
154 |
+
</td>
|
155 |
+
</tr>";
|
156 |
+
$cnt++;
|
157 |
+
}
|
158 |
+
} else {
|
159 |
+
$data .= "<tr>
|
160 |
+
<td colspan='5'>" . _('No blacklisted ips') . "</td>
|
161 |
+
</tr>";
|
162 |
+
}
|
163 |
+
$data .= '</table>';
|
164 |
+
|
165 |
+
return $data;
|
166 |
+
}
|
167 |
+
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Checks for loginability BEFORE authentication so that bots don't get to go around the log in form.
|
171 |
+
*
|
172 |
+
* If we are using our math fallback, authenticate via math-fallback.php
|
173 |
+
*
|
174 |
+
* @param string $user Passed via WordPress action. Not used.
|
175 |
+
*
|
176 |
+
* @return bool True, if WP_Error. False, if not WP_Error., $user Containing the auth results
|
177 |
+
*/
|
178 |
+
function hmw_check_preauth($user = '') {
|
179 |
+
if (is_wp_error($user)) {
|
180 |
+
if (method_exists($user, 'get_error_codes')) {
|
181 |
+
$errors = $user->get_error_codes();
|
182 |
+
|
183 |
+
if (!empty($errors)) {
|
184 |
+
foreach ($errors as $error) {
|
185 |
+
if ($error == 'empty_username' || $error == 'empty_password') {
|
186 |
+
return $user;
|
187 |
+
}
|
188 |
+
}
|
189 |
+
}
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
+
$response = $this->model->brute_check_loginability();
|
194 |
+
|
195 |
+
if (!HMW_Classes_Tools::getOption('brute_use_math')) {
|
196 |
+
if (is_wp_error($user)) {
|
197 |
+
if (!isset($response['attempts'])) {
|
198 |
+
$response['attempts'] = 0;
|
199 |
+
}
|
200 |
+
$left = max(((int)HMW_Classes_Tools::getOption('brute_max_attempts') - (int)$response['attempts']), 0);
|
201 |
+
$user = new WP_Error('authentication_failed',
|
202 |
+
sprintf(__('<strong>ERROR:</strong> Email or Password is incorrect. <br /> %d attempts left before lockout', _HMW_PLUGIN_NAME_), $left)
|
203 |
+
);
|
204 |
+
}
|
205 |
+
} elseif (HMW_Classes_Tools::getOption('brute_use_math')) {
|
206 |
+
$user = $this->model->brute_math_authenticate($user, $response);
|
207 |
+
}
|
208 |
+
|
209 |
+
if (!is_wp_error($user)) {
|
210 |
+
$this->model->brute_call('clear_ip');
|
211 |
+
}
|
212 |
+
|
213 |
+
return $user;
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Called via WP action wp_login_failed to log failed attempt in db
|
218 |
+
*
|
219 |
+
* @return void
|
220 |
+
*/
|
221 |
+
function hmw_failed_attempt() {
|
222 |
+
$this->model->brute_call('failed_attempt');
|
223 |
+
}
|
224 |
+
|
225 |
+
public function hmw_update_trusted_headers() {
|
226 |
+
$updated_recently = $this->model->get_transient('brute_headers_updated_recently');
|
227 |
+
|
228 |
+
// check that current user is admin so we prevent a lower level user from adding
|
229 |
+
// a trusted header, allowing them to brute force an admin account
|
230 |
+
if (!$updated_recently && current_user_can('update_plugins')) {
|
231 |
+
|
232 |
+
$this->model->set_transient('brute_headers_updated_recently', 1, DAY_IN_SECONDS);
|
233 |
+
|
234 |
+
$headers = $this->model->brute_get_headers();
|
235 |
+
$trusted_header = 'REMOTE_ADDR';
|
236 |
+
|
237 |
+
if (count($headers) == 1) {
|
238 |
+
$trusted_header = key($headers);
|
239 |
+
} elseif (count($headers) > 1) {
|
240 |
+
foreach ($headers as $header => $ips) {
|
241 |
+
//explode string into array
|
242 |
+
$ips = explode(', ', $ips);
|
243 |
+
|
244 |
+
$ip_list_has_nonprivate_ip = false;
|
245 |
+
foreach ($ips as $ip) {
|
246 |
+
//clean the ips
|
247 |
+
$ip = $this->model->clean_ip($ip);
|
248 |
+
|
249 |
+
// If the IP is in a private or reserved range, return REMOTE_ADDR to help prevent spoofing
|
250 |
+
if ($ip == '127.0.0.1' || $ip == '::1' || $this->model->ip_is_private($ip)) {
|
251 |
+
continue;
|
252 |
+
} else {
|
253 |
+
$ip_list_has_nonprivate_ip = true;
|
254 |
+
break;
|
255 |
+
}
|
256 |
+
}
|
257 |
+
|
258 |
+
if (!$ip_list_has_nonprivate_ip) {
|
259 |
+
continue;
|
260 |
+
}
|
261 |
+
|
262 |
+
// IP is not local, we'll trust this header
|
263 |
+
$trusted_header = $header;
|
264 |
+
break;
|
265 |
+
}
|
266 |
+
}
|
267 |
+
HMW_Classes_Tools::saveOptions('trusted_ip_header', $trusted_header);
|
268 |
+
}
|
269 |
+
}
|
270 |
+
|
271 |
+
public function clearBlockedIPs() {
|
272 |
+
$ips = $this->model->get_blocked_ips();
|
273 |
+
if (!empty($ips)) {
|
274 |
+
foreach ($ips as $transient => $ip) {
|
275 |
+
$this->model->delete_ip($transient);
|
276 |
+
}
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
|
281 |
+
}
|
controllers/Menu.php
ADDED
@@ -0,0 +1,248 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Controllers_Menu extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
public $alert = '';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Hook the Admin load
|
10 |
+
*/
|
11 |
+
public function hookInit() {
|
12 |
+
/* add the plugin menu in admin */
|
13 |
+
if (current_user_can('manage_options')) {
|
14 |
+
//check if activated
|
15 |
+
if (get_transient('hmw_activate') == 1) {
|
16 |
+
// Delete the redirect transient
|
17 |
+
delete_transient('hmw_activate');
|
18 |
+
|
19 |
+
//Make sure the plugin is loaded first
|
20 |
+
$plugin = _HMW_PLUGIN_NAME_ . '/index.php';
|
21 |
+
$active_plugins = get_option('active_plugins');
|
22 |
+
if(!empty($active_plugins)) {
|
23 |
+
$this_plugin_key = array_search($plugin, $active_plugins);
|
24 |
+
if($this_plugin_key <> '') {
|
25 |
+
array_splice($active_plugins, $this_plugin_key, 1);
|
26 |
+
array_unshift($active_plugins, $plugin);
|
27 |
+
update_option('active_plugins', $active_plugins);
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
//Check if there are expected upgrades
|
32 |
+
HMW_Classes_Tools::checkUpgrade();
|
33 |
+
}
|
34 |
+
|
35 |
+
|
36 |
+
|
37 |
+
//Load notice class in admin
|
38 |
+
HMW_Classes_ObjController::getClass('HMW_Controllers_Notice');
|
39 |
+
|
40 |
+
//Show Dashboard Box
|
41 |
+
add_action('wp_dashboard_setup', array($this, 'hookDashboardSetup'));
|
42 |
+
|
43 |
+
|
44 |
+
if (HMW_Classes_Tools::getValue('page', false) == 'hmw_settings') {
|
45 |
+
add_action('admin_enqueue_scripts', array($this->model, 'fixEnqueueErrors'), PHP_INT_MAX);
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Creates the Setting menu in WordPress
|
53 |
+
*/
|
54 |
+
public function hookMenu() {
|
55 |
+
if (!is_multisite() && current_user_can('manage_options')) {
|
56 |
+
$this->model->addMenu(array(ucfirst(_HMW_PLUGIN_NAME_),
|
57 |
+
'Hide My WP' . $this->alert,
|
58 |
+
'manage_options',
|
59 |
+
'hmw_settings',
|
60 |
+
null,
|
61 |
+
_HMW_THEME_URL_ . 'img/logo_16.png'
|
62 |
+
));
|
63 |
+
|
64 |
+
/* add the Hide My WP admin menu */
|
65 |
+
$this->model->addSubmenu(array('hmw_settings',
|
66 |
+
__('Hide My WP - Customize Permalinks', _HMW_PLUGIN_NAME_),
|
67 |
+
__('Change Paths', _HMW_PLUGIN_NAME_),
|
68 |
+
'manage_options',
|
69 |
+
'hmw_settings',
|
70 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
71 |
+
));
|
72 |
+
|
73 |
+
$this->model->addSubmenu(array('hmw_settings',
|
74 |
+
__('Hide My WP - Mapping', _HMW_PLUGIN_NAME_),
|
75 |
+
__('Mapping', _HMW_PLUGIN_NAME_),
|
76 |
+
'manage_options',
|
77 |
+
'hmw_settings-hmw_mapping',
|
78 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
79 |
+
));
|
80 |
+
|
81 |
+
$this->model->addSubmenu(array('hmw_settings',
|
82 |
+
__('Hide My WP - Tweaks', _HMW_PLUGIN_NAME_),
|
83 |
+
__('Tweaks', _HMW_PLUGIN_NAME_),
|
84 |
+
'manage_options',
|
85 |
+
'hmw_settings-hmw_tweaks',
|
86 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
87 |
+
));
|
88 |
+
|
89 |
+
|
90 |
+
$this->model->addSubmenu(array('hmw_settings',
|
91 |
+
__('Hide My WP - Brute Force Protection', _HMW_PLUGIN_NAME_),
|
92 |
+
__('Brute Force Protection', _HMW_PLUGIN_NAME_),
|
93 |
+
'manage_options',
|
94 |
+
'hmw_settings-hmw_brute',
|
95 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
96 |
+
));
|
97 |
+
|
98 |
+
|
99 |
+
$this->model->addSubmenu(array('hmw_settings',
|
100 |
+
__('Hide My WP - Log Events', _HMW_PLUGIN_NAME_),
|
101 |
+
__('Log Events', _HMW_PLUGIN_NAME_),
|
102 |
+
'manage_options',
|
103 |
+
'hmw_settings-hmw_log',
|
104 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
105 |
+
));
|
106 |
+
|
107 |
+
/* add the security check in menu */
|
108 |
+
$this->model->addSubmenu(array('hmw_settings',
|
109 |
+
__('Hide My WP - Security Check', _HMW_PLUGIN_NAME_),
|
110 |
+
__('Security Check', _HMW_PLUGIN_NAME_) . $this->alert,
|
111 |
+
'manage_options',
|
112 |
+
'hmw_securitycheck',
|
113 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_SecurityCheck'), 'show')
|
114 |
+
));
|
115 |
+
|
116 |
+
$this->model->addSubmenu(array('hmw_settings',
|
117 |
+
__('Hide My WP - Recommended Plugins', _HMW_PLUGIN_NAME_),
|
118 |
+
__('Install Plugins', _HMW_PLUGIN_NAME_),
|
119 |
+
'manage_options',
|
120 |
+
'hmw_settings-hmw_plugins',
|
121 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
122 |
+
));
|
123 |
+
|
124 |
+
$this->model->addSubmenu(array('hmw_settings',
|
125 |
+
__('Hide My WP - Backup & Restore', _HMW_PLUGIN_NAME_),
|
126 |
+
__('Backup/Restore', _HMW_PLUGIN_NAME_),
|
127 |
+
'manage_options',
|
128 |
+
'hmw_settings-hmw_backup',
|
129 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
130 |
+
));
|
131 |
+
|
132 |
+
$this->model->addSubmenu(array('hmw_settings',
|
133 |
+
__('Hide My WP - Advanced Settings', _HMW_PLUGIN_NAME_),
|
134 |
+
__('Advanced', _HMW_PLUGIN_NAME_),
|
135 |
+
'manage_options',
|
136 |
+
'hmw_settings-hmw_advanced',
|
137 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
138 |
+
));
|
139 |
+
|
140 |
+
|
141 |
+
}
|
142 |
+
}
|
143 |
+
|
144 |
+
public function hookDashboardSetup(){
|
145 |
+
wp_add_dashboard_widget(
|
146 |
+
'hmw_dashboard_widget',
|
147 |
+
__('Hide My WP',_HMW_PLUGIN_NAME_),
|
148 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Widget'), 'dashboard')
|
149 |
+
);
|
150 |
+
|
151 |
+
// Move our widget to top.
|
152 |
+
global $wp_meta_boxes;
|
153 |
+
|
154 |
+
$dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
|
155 |
+
$ours = array( 'hmw_dashboard_widget' => $dashboard['hmw_dashboard_widget'] );
|
156 |
+
$wp_meta_boxes['dashboard']['normal']['core'] = array_merge( $ours, $dashboard );
|
157 |
+
}
|
158 |
+
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Creates the Setting menu in Multisite WordPress
|
162 |
+
*/
|
163 |
+
public function hookMultisiteMenu() {
|
164 |
+
|
165 |
+
$this->model->addMenu(array(ucfirst(_HMW_PLUGIN_NAME_),
|
166 |
+
'Hide My WP' . $this->alert,
|
167 |
+
'manage_options',
|
168 |
+
'hmw_settings',
|
169 |
+
null,
|
170 |
+
_HMW_THEME_URL_ . 'img/logo_16.png'
|
171 |
+
));
|
172 |
+
|
173 |
+
/* add the Hide My WP admin menu */
|
174 |
+
$this->model->addSubmenu(array('hmw_settings',
|
175 |
+
__('Hide My WP - Customize Permalinks', _HMW_PLUGIN_NAME_),
|
176 |
+
__('Change Paths', _HMW_PLUGIN_NAME_),
|
177 |
+
'manage_options',
|
178 |
+
'hmw_settings',
|
179 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
180 |
+
));
|
181 |
+
|
182 |
+
$this->model->addSubmenu(array('hmw_settings',
|
183 |
+
__('Hide My WP - Mapping', _HMW_PLUGIN_NAME_),
|
184 |
+
__('Mapping', _HMW_PLUGIN_NAME_),
|
185 |
+
'manage_options',
|
186 |
+
'hmw_settings-hmw_mapping',
|
187 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
188 |
+
));
|
189 |
+
|
190 |
+
$this->model->addSubmenu(array('hmw_settings',
|
191 |
+
__('Hide My WP - Tweaks', _HMW_PLUGIN_NAME_),
|
192 |
+
__('Tweaks', _HMW_PLUGIN_NAME_),
|
193 |
+
'manage_options',
|
194 |
+
'hmw_settings-hmw_tweaks',
|
195 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
196 |
+
));
|
197 |
+
|
198 |
+
|
199 |
+
$this->model->addSubmenu(array('hmw_settings',
|
200 |
+
__('Hide My WP - Brute Force Protection', _HMW_PLUGIN_NAME_),
|
201 |
+
__('Brute Force Protection', _HMW_PLUGIN_NAME_),
|
202 |
+
'manage_options',
|
203 |
+
'hmw_settings-hmw_brute',
|
204 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
205 |
+
));
|
206 |
+
|
207 |
+
$this->model->addSubmenu(array('hmw_settings',
|
208 |
+
__('Hide My WP - Log Events', _HMW_PLUGIN_NAME_),
|
209 |
+
__('Log Events', _HMW_PLUGIN_NAME_),
|
210 |
+
'manage_options',
|
211 |
+
'hmw_settings-hmw_log',
|
212 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
213 |
+
));
|
214 |
+
|
215 |
+
/* add the security check in menu */
|
216 |
+
$this->model->addSubmenu(array('hmw_settings',
|
217 |
+
__('Hide My WP - Security Check', _HMW_PLUGIN_NAME_),
|
218 |
+
__('Security Check', _HMW_PLUGIN_NAME_) . $this->alert,
|
219 |
+
'manage_options',
|
220 |
+
'hmw_securitycheck',
|
221 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_SecurityCheck'), 'show')
|
222 |
+
));
|
223 |
+
|
224 |
+
$this->model->addSubmenu(array('hmw_settings',
|
225 |
+
__('Hide My WP - Recommended Plugins', _HMW_PLUGIN_NAME_),
|
226 |
+
__('Install Plugins', _HMW_PLUGIN_NAME_),
|
227 |
+
'manage_options',
|
228 |
+
'hmw_settings-hmw_plugins',
|
229 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
230 |
+
));
|
231 |
+
|
232 |
+
$this->model->addSubmenu(array('hmw_settings',
|
233 |
+
__('Hide My WP - Backup & Restore', _HMW_PLUGIN_NAME_),
|
234 |
+
__('Backup/Restore', _HMW_PLUGIN_NAME_),
|
235 |
+
'manage_options',
|
236 |
+
'hmw_settings-hmw_backup',
|
237 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
238 |
+
));
|
239 |
+
|
240 |
+
$this->model->addSubmenu(array('hmw_settings',
|
241 |
+
__('Hide My WP - Advanced Settings', _HMW_PLUGIN_NAME_),
|
242 |
+
__('Advanced', _HMW_PLUGIN_NAME_),
|
243 |
+
'manage_options',
|
244 |
+
'hmw_settings-hmw_advanced',
|
245 |
+
array(HMW_Classes_ObjController::getClass('HMW_Controllers_Settings'), 'init')
|
246 |
+
));
|
247 |
+
}
|
248 |
+
}
|
controllers/Notice.php
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Controllers_Notice extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
protected $notice_spam = 0;
|
7 |
+
|
8 |
+
public function __construct() {
|
9 |
+
parent::__construct();
|
10 |
+
add_action('admin_notices', array($this, 'hmw_admin_notices'));
|
11 |
+
|
12 |
+
//check if notice is disabled
|
13 |
+
$this->action();
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Show the notifications for review
|
19 |
+
* @param $notices
|
20 |
+
*/
|
21 |
+
public function hmw_admin_notices($notices) {
|
22 |
+
global $wp;
|
23 |
+
|
24 |
+
if (!isset($notices) || !is_array($notices)) {
|
25 |
+
$notices = array();
|
26 |
+
}
|
27 |
+
$disable = '<form id="hmw_notice_form" method="POST">
|
28 |
+
' . wp_nonce_field('hmw_disable_notice', 'hmw_nonce', true, false) . '
|
29 |
+
<input type="hidden" name="action" value="hmw_disable_notice" />
|
30 |
+
<input type="hidden" name="hmw_admin_notice" value="two_week_review">
|
31 |
+
<i type="submit" class="dashicons dashicons-no" style="cursor: pointer" title="'.__('Close notification', _HMW_PLUGIN_NAME_).'" onclick="jQuery(\'#hmw_notice_form\').submit();"></i>
|
32 |
+
</form>';
|
33 |
+
if (is_string($disable) && $disable <> '') {
|
34 |
+
$notices['two_week_review'] = array(
|
35 |
+
'title' => __('Thank you for using Hide My WP?', _HMW_PLUGIN_NAME_),
|
36 |
+
'msg' => sprintf(__("Add %sXML-RPC attack protection, SQL/Script firewall, reCaptcha login%s and more with Hide My WP Ghost premium features.", _HMW_PLUGIN_NAME_), '<strong style="color: red">', '</strong>', '<strong style="color: red">', '</strong>'),
|
37 |
+
'link' => '<li><i class="dashicons dashicons-external" style="line-height: 25px;"></i><a href="https://hidemywpghost.com/hide-my-wp/" target="_blank" style="font-weight: normal">' . __("See all premium features", _HMW_PLUGIN_NAME_) . '</a></li>',
|
38 |
+
|
39 |
+
'later_link' => $disable,
|
40 |
+
'int' => 14
|
41 |
+
);
|
42 |
+
}
|
43 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_Error')->hookNotices();
|
44 |
+
$this->showMessage($notices);
|
45 |
+
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Primary notice function that can be called from an outside function sending necessary variables
|
50 |
+
*
|
51 |
+
* @param $notices
|
52 |
+
* @return bool|void
|
53 |
+
*/
|
54 |
+
public function showMessage($notices) {
|
55 |
+
foreach ($notices as $slug => $notice) {
|
56 |
+
// Check for required fields
|
57 |
+
if (!$this->required_fields($notice)) {
|
58 |
+
// Call for spam protection
|
59 |
+
if ($this->anti_notice_spam()) {
|
60 |
+
return;
|
61 |
+
}
|
62 |
+
|
63 |
+
// Get the current date then set start date to either passed value or current date value and add interval
|
64 |
+
$current_date = current_time("n/j/Y");
|
65 |
+
$start = (isset($notice['start']) ? $notice['start'] : $current_date);
|
66 |
+
$interval = (isset($notice['int']) ? $notice['int'] : 0);
|
67 |
+
$start = date("n/j/Y", strtotime("+$interval DAY", strtotime($start)));
|
68 |
+
|
69 |
+
// This is the main notices storage option
|
70 |
+
$notices_option = HMW_Classes_Tools::getOption('admin_notice');
|
71 |
+
|
72 |
+
// Check if the message is already stored and if so just grab the key otherwise store the message and its associated date information
|
73 |
+
if (!is_array($notices_option)) {
|
74 |
+
$notices_option = array();
|
75 |
+
}
|
76 |
+
if (!array_key_exists($slug, $notices_option)) {
|
77 |
+
|
78 |
+
$notices_option[$slug]['start'] = $start;
|
79 |
+
$notices_option[$slug]['int'] = $interval;
|
80 |
+
HMW_Classes_Tools::saveOptions('admin_notice', $notices_option);
|
81 |
+
}
|
82 |
+
|
83 |
+
|
84 |
+
// Sanity check to ensure we have accurate information
|
85 |
+
// New date information will not overwrite old date information
|
86 |
+
$admin_display_check = (isset($notices_option[$slug]['dismissed']) ? $notices_option[$slug]['dismissed'] : 0);
|
87 |
+
$admin_display_start = (isset($notices_option[$slug]['start']) ? $notices_option[$slug]['start'] : $start);
|
88 |
+
$admin_display_msg = (isset($notice['msg']) ? $notice['msg'] : '');
|
89 |
+
$admin_display_link = (isset($notice['link']) ? $notice['link'] : '');
|
90 |
+
$output_css = false;
|
91 |
+
|
92 |
+
|
93 |
+
// Ensure the notice hasn't been hidden and that the current date is after the start date
|
94 |
+
if ($admin_display_check == 0 && strtotime($admin_display_start) <= strtotime($current_date)) {
|
95 |
+
|
96 |
+
// Get remaining query string
|
97 |
+
$query_str = (isset($notice['later_link']) ? $notice['later_link'] : '<a href="' . esc_url(add_query_arg('hmw_admin_notice', $slug)) . '" class="dashicons dashicons-dismiss"></a>');
|
98 |
+
// Admin notice display output
|
99 |
+
echo '<div class="update-nag hmw-admin-notice">
|
100 |
+
<div style="float: right; margin: 10px;">'.$query_str.'</div>
|
101 |
+
<div class="' . 'hmw-notice-logo"></div>
|
102 |
+
<p class="hmw-notice-body">' . $admin_display_msg . '</p>
|
103 |
+
<ul class="hmw-notice-body hmw-blue">' . $admin_display_link . '</ul>
|
104 |
+
|
105 |
+
</div>';
|
106 |
+
|
107 |
+
$this->notice_spam += 1;
|
108 |
+
$output_css = true;
|
109 |
+
}
|
110 |
+
|
111 |
+
if ($output_css) {
|
112 |
+
HMW_Classes_ObjController::getClass('HMW_Classes_DisplayController')->loadMedia('notice');
|
113 |
+
}
|
114 |
+
}
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Called when an action is triggered
|
120 |
+
*
|
121 |
+
* @return void
|
122 |
+
*/
|
123 |
+
public function action() {
|
124 |
+
parent::action();
|
125 |
+
|
126 |
+
|
127 |
+
switch (HMW_Classes_Tools::getValue('action')) {
|
128 |
+
|
129 |
+
case 'hmw_disable_notice':
|
130 |
+
$notices_option = HMW_Classes_Tools::getOption('admin_notice');
|
131 |
+
if (is_array($notices_option)) {
|
132 |
+
$notices_option[HMW_Classes_Tools::getValue('hmw_admin_notice')]['dismissed'] = 1;
|
133 |
+
HMW_Classes_Tools::saveOptions('admin_notice', $notices_option);
|
134 |
+
}
|
135 |
+
break;
|
136 |
+
case 'hmw_ignore_notice':
|
137 |
+
$notices_option = HMW_Classes_Tools::getOption('admin_notice');
|
138 |
+
$new_start = date("n/j/Y", strtotime("+90 DAY"));
|
139 |
+
|
140 |
+
$notices_option[HMW_Classes_Tools::getValue('hmw_admin_notice')]['start'] = $new_start;
|
141 |
+
$notices_option[HMW_Classes_Tools::getValue('hmw_admin_notice')]['dismissed'] = 0;
|
142 |
+
HMW_Classes_Tools::saveOptions('admin_notice', $notices_option);
|
143 |
+
break;
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Spam protection check
|
150 |
+
* @return bool
|
151 |
+
*/
|
152 |
+
public function anti_notice_spam() {
|
153 |
+
if ($this->notice_spam >= 1) {
|
154 |
+
return true;
|
155 |
+
}
|
156 |
+
return false;
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Required fields check
|
161 |
+
* @param $fields
|
162 |
+
* @return bool
|
163 |
+
*/
|
164 |
+
public function required_fields($fields) {
|
165 |
+
if (!isset($fields['msg']) || (isset($fields['msg']) && empty($fields['msg']))) {
|
166 |
+
return true;
|
167 |
+
}
|
168 |
+
if (!isset($fields['title']) || (isset($fields['title']) && empty($fields['title']))) {
|
169 |
+
return true;
|
170 |
+
}
|
171 |
+
return false;
|
172 |
+
}
|
173 |
+
|
174 |
+
}
|
controllers/Plugins.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
|
5 |
+
|
6 |
+
class QuietSkin extends \WP_Upgrader_Skin {
|
7 |
+
public function feedback($string) { /* no output */ }
|
8 |
+
}
|
9 |
+
|
10 |
+
class HMW_Controllers_Plugins extends HMW_Classes_FrontController {
|
11 |
+
|
12 |
+
public function action() {
|
13 |
+
parent::action();
|
14 |
+
|
15 |
+
if (!current_user_can('manage_options')) {
|
16 |
+
return;
|
17 |
+
}
|
18 |
+
|
19 |
+
switch (HMW_Classes_Tools::getValue('action')) {
|
20 |
+
case 'hmw_plugin_install':
|
21 |
+
HMW_Classes_Tools::setHeader('json');
|
22 |
+
|
23 |
+
if (HMW_Classes_Tools::getValue('plugin', '') <> '') {
|
24 |
+
$plugins = HMW_Classes_ObjController::getClass('HMW_Models_Settings')->getPlugins();
|
25 |
+
$pluginPath = false;
|
26 |
+
|
27 |
+
foreach ($plugins as $plugin => $details) {
|
28 |
+
if ($plugin == HMW_Classes_Tools::getValue('plugin')) {
|
29 |
+
$pluginPath = WP_PLUGIN_DIR . '/' . $details['path'];
|
30 |
+
break;
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
if (!empty($plugin) && $pluginPath) {
|
35 |
+
if (!file_exists($pluginPath)) {
|
36 |
+
|
37 |
+
//includes necessary for Plugin_Upgrader and Plugin_Installer_Skin
|
38 |
+
require_once(ABSPATH . 'wp-admin/includes/plugin-install.php');
|
39 |
+
include_once(ABSPATH . 'wp-admin/includes/file.php');
|
40 |
+
include_once(ABSPATH . 'wp-admin/includes/misc.php');
|
41 |
+
include_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
|
42 |
+
|
43 |
+
remove_all_actions('upgrader_process_complete');
|
44 |
+
|
45 |
+
|
46 |
+
$api = plugins_api('plugin_information', array(
|
47 |
+
'slug' => $plugin,
|
48 |
+
'fields' => array(
|
49 |
+
'short_description' => false,
|
50 |
+
'sections' => false,
|
51 |
+
'requires' => false,
|
52 |
+
'rating' => false,
|
53 |
+
'ratings' => false,
|
54 |
+
'downloaded' => false,
|
55 |
+
'last_updated' => false,
|
56 |
+
'added' => false,
|
57 |
+
'tags' => false,
|
58 |
+
'compatibility' => false,
|
59 |
+
'homepage' => false,
|
60 |
+
'donate_link' => false,
|
61 |
+
),
|
62 |
+
));
|
63 |
+
|
64 |
+
ob_start();
|
65 |
+
// Replace with new QuietSkin for no output
|
66 |
+
$upgrader = new Plugin_Upgrader(new QuietSkin(array('api' => $api)));
|
67 |
+
$upgrader->install($api->download_link);
|
68 |
+
ob_get_clean();
|
69 |
+
}
|
70 |
+
|
71 |
+
if (file_exists($pluginPath)) {
|
72 |
+
activate_plugin($pluginPath);
|
73 |
+
echo json_encode(array('success' => true));
|
74 |
+
} else {
|
75 |
+
echo json_encode(array('success' => false));
|
76 |
+
}
|
77 |
+
}
|
78 |
+
|
79 |
+
}
|
80 |
+
exit();
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
controllers/Rewrite.php
ADDED
@@ -0,0 +1,318 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Controllers_Rewrite extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
public function __construct() {
|
7 |
+
parent::__construct();
|
8 |
+
|
9 |
+
if ( defined( 'HMW_DISABLE' ) && HMW_DISABLE ) {
|
10 |
+
return;
|
11 |
+
}
|
12 |
+
|
13 |
+
//Start the buffer only if priority is set
|
14 |
+
if ( HMW_PRIORITY ) {
|
15 |
+
$this->model->startBuffer();
|
16 |
+
}
|
17 |
+
|
18 |
+
//Init the main hooks
|
19 |
+
$this->initHooks();
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Init the hooks for hide my wp
|
24 |
+
*/
|
25 |
+
public function initHooks() {
|
26 |
+
if ( HMW_Classes_Tools::isPermalinkStructure() ) {
|
27 |
+
if ( HMW_Classes_Tools::isApache() && ! HMW_Classes_Tools::isModeRewrite() ) {
|
28 |
+
return;
|
29 |
+
}
|
30 |
+
|
31 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) && ! HMW_Classes_Tools::getOption( 'logout' ) ) {
|
32 |
+
//rename the author if set so
|
33 |
+
add_filter( 'author_rewrite_rules', array( $this->model, 'author_url' ), 99, 1 );
|
34 |
+
}
|
35 |
+
|
36 |
+
add_filter( 'query_vars', array( $this->model, 'addParams' ), 1, 1 );
|
37 |
+
add_action( 'login_init', array( $this->model, 'login_init' ), 1 );
|
38 |
+
add_filter( 'login_redirect', array( $this->model, 'sanitize_login_redirect' ), 9, 3 );
|
39 |
+
add_filter( 'wp_redirect', array( $this->model, 'sanitize_redirect' ), PHP_INT_MAX, 2 );
|
40 |
+
|
41 |
+
if ( HMW_Classes_Tools::isWpengine() ) {
|
42 |
+
add_filter( 'wp_redirect', array( $this->model, 'loopCheck' ), PHP_INT_MAX, 1 );
|
43 |
+
}
|
44 |
+
|
45 |
+
add_action( 'login_head', array( $this->model, 'login_head' ), PHP_INT_MAX );
|
46 |
+
add_action( 'wp_logout', array( $this->model, 'wp_logout' ), PHP_INT_MAX );
|
47 |
+
|
48 |
+
//change the admin url
|
49 |
+
add_filter( 'lostpassword_url', array( $this->model, 'lostpassword_url' ), PHP_INT_MAX, 1 );
|
50 |
+
add_filter( 'register', array( $this->model, 'register_url' ), PHP_INT_MAX, 1 );
|
51 |
+
add_filter( 'login_url', array( $this->model, 'login_url' ), PHP_INT_MAX, 1 );
|
52 |
+
add_filter( 'logout_url', array( $this->model, 'logout_url' ), PHP_INT_MAX, 2 );
|
53 |
+
add_filter( 'admin_url', array( $this->model, 'admin_url' ), PHP_INT_MAX, 3 );
|
54 |
+
add_filter( 'network_admin_url', array( $this->model, 'network_admin_url' ), PHP_INT_MAX, 3 );
|
55 |
+
add_filter( 'site_url', array( $this->model, 'site_url' ), PHP_INT_MAX, 2 );
|
56 |
+
add_filter( 'network_site_url', array( $this->model, 'site_url' ), PHP_INT_MAX, 3 );
|
57 |
+
add_filter( 'wp_php_error_message', array( $this->model, 'replace_error_message' ), PHP_INT_MAX, 2 );
|
58 |
+
|
59 |
+
//check and set the cookied for the modified urls
|
60 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Cookies' );
|
61 |
+
//load the compatibility class
|
62 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Compatibility' );
|
63 |
+
}
|
64 |
+
|
65 |
+
//Load the PluginLoaded Hook
|
66 |
+
add_action( 'plugins_loaded', array( $this, 'hookPreload' ), 1 );
|
67 |
+
//just to make sure it called in case plugins_loaded is not triggered
|
68 |
+
add_action( 'template_redirect', array( $this, 'hookPreload' ), 1 );
|
69 |
+
|
70 |
+
//in case of broken URL, try to load it
|
71 |
+
add_action( 'template_redirect', array(
|
72 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Files' ),
|
73 |
+
'checkBrokenFile'
|
74 |
+
), PHP_INT_MAX );
|
75 |
+
|
76 |
+
}
|
77 |
+
|
78 |
+
|
79 |
+
public function hookPreload() {
|
80 |
+
//if plugin_loaded then remove template_redirect
|
81 |
+
if ( ! did_action( 'template_redirect' ) ) {
|
82 |
+
remove_action( 'template_redirect', array( $this, 'hookPreload' ), 1 );
|
83 |
+
}
|
84 |
+
|
85 |
+
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
86 |
+
|
87 |
+
//Make sure is permalink set up
|
88 |
+
if ( HMW_Classes_Tools::isPermalinkStructure() ) {
|
89 |
+
if ( HMW_Classes_Tools::isApache() && ! HMW_Classes_Tools::isModeRewrite() ) {
|
90 |
+
return;
|
91 |
+
}
|
92 |
+
|
93 |
+
//Don't go further if the safe parameter is set
|
94 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
95 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
96 |
+
return;
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
//Build the find_replace list
|
101 |
+
$this->model->buildRedirect();
|
102 |
+
|
103 |
+
//don't let to rename and hide the current paths if logout is required
|
104 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
105 |
+
return;
|
106 |
+
}
|
107 |
+
|
108 |
+
//stop here is the option is default.
|
109 |
+
//the prvious code is needed for settings change and validation
|
110 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) {
|
111 |
+
return;
|
112 |
+
}
|
113 |
+
|
114 |
+
//Hide the paths in ajax
|
115 |
+
if ( HMW_Classes_Tools::isAjax() ) {
|
116 |
+
$this->model->startBuffer();
|
117 |
+
|
118 |
+
//hide the URLs from admin and login
|
119 |
+
add_action( 'init', array( $this->model, 'hideUrls' ), 99 );
|
120 |
+
|
121 |
+
return;
|
122 |
+
}
|
123 |
+
|
124 |
+
//Check Compatibilities with ther plugins
|
125 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Compatibility' )->checkCompatibility();
|
126 |
+
|
127 |
+
//Start the Buffer if not late loading
|
128 |
+
$hmw_laterload = apply_filters( 'hmw_laterload', HMW_Classes_Tools::getOption( 'hmw_laterload' ) );
|
129 |
+
|
130 |
+
//check lateload
|
131 |
+
if ( $hmw_laterload && ! did_action( 'template_redirect' ) ) {
|
132 |
+
add_action( 'template_redirect', array( $this->model, 'startBuffer' ), PHP_INT_MAX );
|
133 |
+
} else {
|
134 |
+
//start the buffer now
|
135 |
+
$this->model->startBuffer();
|
136 |
+
}
|
137 |
+
|
138 |
+
//Check the buffer on shutdown
|
139 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_shutdown_load' ) ) {
|
140 |
+
add_action( 'shutdown', array( $this->model, 'shutDownBuffer' ), 0 );
|
141 |
+
}
|
142 |
+
|
143 |
+
//hide the URLs from admin and login
|
144 |
+
add_action( 'init', array( $this->model, 'hideUrls' ), 99 );
|
145 |
+
|
146 |
+
//hide headers added by plugins
|
147 |
+
add_action( 'template_redirect', array( $this->model, 'hideHeaders' ), PHP_INT_MAX );
|
148 |
+
|
149 |
+
if ( ! is_admin() ) {
|
150 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_version' ) ) {
|
151 |
+
add_filter( 'the_generator', array( 'HMW_Classes_Tools', 'returnFalse' ), 99, 1 );
|
152 |
+
remove_action( 'wp_head', 'wp_generator' );
|
153 |
+
remove_action( 'wp_head', 'wp_resource_hints', 2 );
|
154 |
+
}
|
155 |
+
|
156 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_disable_emojicons' ) ) {
|
157 |
+
//disable the emoji icons
|
158 |
+
$this->disable_emojicons();
|
159 |
+
}
|
160 |
+
|
161 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_disable_rest_api' ) ) {
|
162 |
+
//disable the rest_api
|
163 |
+
if ( ! HMW_Classes_Tools::isPluginActive( 'contact-form-7/wp-contact-form-7.php' ) ) {
|
164 |
+
if ( ! function_exists( 'is_user_logged_in' ) || ( function_exists( 'is_user_logged_in' ) && ! is_user_logged_in() ) ) {
|
165 |
+
$this->disable_rest_api();
|
166 |
+
}
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_disable_xmlrpc' ) ) {
|
171 |
+
add_filter( 'xmlrpc_enabled', array( 'HMW_Classes_Tools', 'returnFalse' ));
|
172 |
+
}
|
173 |
+
|
174 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_disable_embeds' ) ) {
|
175 |
+
//disable the embeds
|
176 |
+
$this->disable_embeds();
|
177 |
+
}
|
178 |
+
|
179 |
+
//Windows Live Write
|
180 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_disable_manifest' ) ) {
|
181 |
+
//disable the embeds
|
182 |
+
$this->disable_manifest();
|
183 |
+
}
|
184 |
+
|
185 |
+
//Really Simple Discovery
|
186 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_header' ) ) {
|
187 |
+
$this->disable_rds();
|
188 |
+
}
|
189 |
+
|
190 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_comments' ) ) {
|
191 |
+
$this->disable_comments();
|
192 |
+
}
|
193 |
+
|
194 |
+
//Disable Database Debug
|
195 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_disable_debug' ) ) {
|
196 |
+
global $wpdb;
|
197 |
+
$wpdb->hide_errors();
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
}
|
202 |
+
|
203 |
+
|
204 |
+
}
|
205 |
+
|
206 |
+
|
207 |
+
/**
|
208 |
+
* On admin init
|
209 |
+
* Load the Menu
|
210 |
+
* If the user changes the Permalink to default ... prevent errors
|
211 |
+
*/
|
212 |
+
public function hookInit() {
|
213 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
214 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
215 |
+
return;
|
216 |
+
}
|
217 |
+
}
|
218 |
+
|
219 |
+
//If the user changes the Permalink to default ... prevent errors
|
220 |
+
if ( ! HMW_Classes_Tools::isPermalinkStructure() ) {
|
221 |
+
if ( current_user_can( 'manage_options' ) ) {
|
222 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
223 |
+
$this->model->flushChanges();
|
224 |
+
}
|
225 |
+
}
|
226 |
+
}
|
227 |
+
|
228 |
+
//Show the menu for admins only
|
229 |
+
if ( current_user_can( 'manage_options' ) ) {
|
230 |
+
HMW_Classes_ObjController::getClass( 'HMW_Controllers_Menu' )->hookInit();
|
231 |
+
}
|
232 |
+
|
233 |
+
|
234 |
+
}
|
235 |
+
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Disable the emoji icons
|
239 |
+
*/
|
240 |
+
public function disable_emojicons() {
|
241 |
+
|
242 |
+
// all actions related to emojis
|
243 |
+
remove_action( 'admin_print_styles', 'print_emoji_styles' );
|
244 |
+
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
|
245 |
+
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
246 |
+
remove_action( 'wp_print_styles', 'print_emoji_styles' );
|
247 |
+
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
|
248 |
+
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
|
249 |
+
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
|
250 |
+
add_filter( 'emoji_svg_url', array( 'HMW_Classes_Tools', 'returnFalse' ));
|
251 |
+
|
252 |
+
// filter to remove TinyMCE emojis
|
253 |
+
add_filter( 'tiny_mce_plugins', array( $this, 'disable_emojicons_tinymce' ) );
|
254 |
+
}
|
255 |
+
|
256 |
+
function disable_emojicons_tinymce( $plugins ) {
|
257 |
+
if ( is_array( $plugins ) ) {
|
258 |
+
return array_diff( $plugins, array( 'wpemoji' ) );
|
259 |
+
} else {
|
260 |
+
return array();
|
261 |
+
}
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Disable the Rest Api access
|
266 |
+
*/
|
267 |
+
public function disable_rest_api() {
|
268 |
+
remove_action( 'init', 'rest_api_init' );
|
269 |
+
remove_action( 'rest_api_init', 'rest_api_default_filters', 10 );
|
270 |
+
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
|
271 |
+
remove_action( 'parse_request', 'rest_api_loaded' );
|
272 |
+
remove_action('template_redirect', 'rest_output_link_header', 11);
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Disable the embeds
|
277 |
+
*/
|
278 |
+
public function disable_embeds() {
|
279 |
+
// Remove the REST API endpoint.
|
280 |
+
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
|
281 |
+
|
282 |
+
// Turn off oEmbed auto discovery.
|
283 |
+
// Don't filter oEmbed results.
|
284 |
+
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
|
285 |
+
|
286 |
+
// Remove oEmbed discovery links.
|
287 |
+
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
|
288 |
+
|
289 |
+
// Remove oEmbed-specific JavaScript from the front-end and back-end.
|
290 |
+
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* Disable Windows Live Write
|
295 |
+
*/
|
296 |
+
public function disable_manifest() {
|
297 |
+
remove_action( 'wp_head', 'wlwmanifest_link' );
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Disable Really Simple Discovery
|
302 |
+
*/
|
303 |
+
public function disable_rds() {
|
304 |
+
remove_action( 'wp_head', 'rsd_link' );
|
305 |
+
remove_action( 'wp_head', 'wp_shortlink_wp_head' );
|
306 |
+
}
|
307 |
+
|
308 |
+
|
309 |
+
/**
|
310 |
+
* Disable the commend from W3 Total Cache
|
311 |
+
*/
|
312 |
+
public function disable_comments() {
|
313 |
+
global $wp_super_cache_comments;
|
314 |
+
remove_all_filters( 'w3tc_footer_comment' );
|
315 |
+
$wp_super_cache_comments = false;
|
316 |
+
}
|
317 |
+
|
318 |
+
}
|
controllers/SecurityCheck.php
ADDED
@@ -0,0 +1,1446 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Controllers_SecurityCheck extends HMW_Classes_FrontController {
|
5 |
+
/** @var bool Security check time */
|
6 |
+
public $securitycheck_time = false;
|
7 |
+
/** @var array Security Report */
|
8 |
+
public $report = array();
|
9 |
+
public $risktasks = array();
|
10 |
+
public $riskreport = array();
|
11 |
+
|
12 |
+
public function init() {
|
13 |
+
//Initiate security
|
14 |
+
$this->initSecurity();
|
15 |
+
|
16 |
+
//Add the Menu Tabs in variable
|
17 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'popper.min' );
|
18 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'bootstrap.min' );
|
19 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'font-awesome.min' );
|
20 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'settings' );
|
21 |
+
|
22 |
+
if ( $this->securitycheck_time = get_option( 'hmw_securitycheck_time' ) ) {
|
23 |
+
if ( time() - $this->securitycheck_time['timestamp'] > ( 3600 * 24 * 7 ) ) {
|
24 |
+
HMW_Classes_Error::setError( __( 'You should check your website every week to see if there are any security changes.', _HMW_PLUGIN_NAME_ ) );
|
25 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Error' )->hookNotices();
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
$this->risktasks = $this->getRiskTasks();
|
30 |
+
$this->riskreport = $this->getRiskReport();
|
31 |
+
|
32 |
+
return parent::init();
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Initiate Security List
|
37 |
+
* @return array|mixed
|
38 |
+
*/
|
39 |
+
public function initSecurity() {
|
40 |
+
$this->report = get_option( 'hmw_securitycheck' );
|
41 |
+
|
42 |
+
if ( ! empty( $this->report ) ) {
|
43 |
+
if ( ! $tasks_ignored = get_option( 'hmw_securitycheck_ignore' ) ) {
|
44 |
+
$tasks_ignored = array();
|
45 |
+
}
|
46 |
+
$tasks = $this->getTasks();
|
47 |
+
foreach ( $this->report as $function => &$row ) {
|
48 |
+
if ( ! in_array( $function, $tasks_ignored ) ) {
|
49 |
+
if ( isset( $tasks[ $function ] ) ) {
|
50 |
+
if ( isset( $row['version'] ) && $function == 'checkWP' ) {
|
51 |
+
$tasks[ $function ]['solution'] = str_replace( '{version}', $row['version'], $tasks[ $function ]['solution'] );
|
52 |
+
}
|
53 |
+
$row = array_merge( $tasks[ $function ], $row );
|
54 |
+
|
55 |
+
if ( ! HMW_Classes_Tools::getOption( 'hmw_token' ) ) {
|
56 |
+
if ( isset( $row['javascript'] ) && $row['javascript'] <> '' ) {
|
57 |
+
$row['javascript'] = 'alert(\'' . __( 'First, you need to connect Hide My Wp with WPPlugins and switch from Default mode to Lite Mode.', _HMW_PLUGIN_NAME_ ) . '\')';
|
58 |
+
}
|
59 |
+
} elseif ( $function <> 'checkVersionDisplayed' ) {
|
60 |
+
if ( isset( $row['javascript'] ) && $row['javascript'] <> '' ) {
|
61 |
+
$row['pro'] = '<div class="btn btn-warning text-white" data-toggle="popover" data-html="true" data-placement="top" data-content="' . sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) . '">' . __( 'PRO', _HMW_PLUGIN_NAME_ ) . '</div>';
|
62 |
+
}
|
63 |
+
} elseif ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) {
|
64 |
+
if ( isset( $row['javascript'] ) && $row['javascript'] <> '' ) {
|
65 |
+
$row['javascript'] = 'alert(\'' . __( 'First, you need to switch Hide My Wp from Default mode to Lite Mode.', _HMW_PLUGIN_NAME_ ) . '\')';
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
69 |
+
} else {
|
70 |
+
unset( $this->report[ $function ] );
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
return $this->report;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Process the security check
|
80 |
+
*/
|
81 |
+
public function doSecurityCheck() {
|
82 |
+
if ( ! $tasks_ignored = get_option( 'hmw_securitycheck_ignore' ) ) {
|
83 |
+
$tasks_ignored = array();
|
84 |
+
}
|
85 |
+
$tasks = $this->getTasks();
|
86 |
+
foreach ( $tasks as $function => $task ) {
|
87 |
+
if ( ! in_array( $function, $tasks_ignored ) ) {
|
88 |
+
if ( $result = @call_user_func( array( $this, $function ) ) ) {
|
89 |
+
$this->report[ $function ] = $result;
|
90 |
+
}
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
|
95 |
+
update_option( 'hmw_securitycheck', $this->report );
|
96 |
+
update_option( 'hmw_securitycheck_time', array( 'timestamp' => current_time( 'timestamp', 1 ) ) );
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Get all the security tasks
|
101 |
+
* @return array
|
102 |
+
*/
|
103 |
+
public function getTasks() {
|
104 |
+
return array(
|
105 |
+
'checkPHP' => array(
|
106 |
+
'name' => __( 'PHP Version', _HMW_PLUGIN_NAME_ ),
|
107 |
+
'value' => false,
|
108 |
+
'valid' => false,
|
109 |
+
'warning' => false,
|
110 |
+
'message' => __( "Using an old version of PHP makes your site slow and prone to hacker attacks due to known vulnerabilities that exist in versions of PHP that are no longer maintained. <br /><br />You need <strong>PHP 7.0</strong> or higher for your website.", _HMW_PLUGIN_NAME_ ),
|
111 |
+
'solution' => __( "Email your hosting company and tell them you'd like to switch to a newer version of PHP or move your site to a better hosting company.", _HMW_PLUGIN_NAME_ ),
|
112 |
+
),
|
113 |
+
'checkMysql' => array(
|
114 |
+
'name' => __( 'Mysql Version', _HMW_PLUGIN_NAME_ ),
|
115 |
+
'value' => false,
|
116 |
+
'valid' => false,
|
117 |
+
'warning' => false,
|
118 |
+
'message' => __( "Using an old version of MySQL makes your site slow and prone to hacker attacks due to known vulnerabilities that exist in versions of MySQL that are no longer maintained. <br /><br />You need <strong>Mysql 5.4</strong> or higher", _HMW_PLUGIN_NAME_ ),
|
119 |
+
'solution' => __( "Email your hosting company and tell them you'd like to switch to a newer version of MySQL or move your site to a better hosting company", _HMW_PLUGIN_NAME_ ),
|
120 |
+
),
|
121 |
+
'checkWP' => array(
|
122 |
+
'name' => __( 'WordPress Version', _HMW_PLUGIN_NAME_ ),
|
123 |
+
'value' => false,
|
124 |
+
'valid' => false,
|
125 |
+
'warning' => false,
|
126 |
+
'message' => sprintf( __( "You should always update WordPress to the %slatest versions%s. These usually include the latest security fixes, and don't alter WP in any significant way. These should be applied as soon as WP releases them. <br /><br />When a new version of WordPress is available, you will receive an update message on your WordPress Admin screens. To update WordPress, click the link in this message.", _HMW_PLUGIN_NAME_ ), '<a href="https://wordpress.org/download/" target="_blank">', '</a>' ),
|
127 |
+
'solution' => __( "There is a newer version of WordPress available ({version}).", _HMW_PLUGIN_NAME_ ),
|
128 |
+
),
|
129 |
+
'checkWPDebug' => array(
|
130 |
+
'name' => __( 'WP Debug Mode', _HMW_PLUGIN_NAME_ ),
|
131 |
+
'value' => false,
|
132 |
+
'valid' => false,
|
133 |
+
'warning' => false,
|
134 |
+
'message' => __( "Every good developer should turn on debugging before getting started on a new plugin or theme. In fact, the WordPress Codex 'highly recommends' that developers use WP_DEBUG. <br /><br />Unfortunately, many developers forget the debug mode, even when the website is live. Showing debug logs in the frontend will let hackers know a lot about your WordPress website.", _HMW_PLUGIN_NAME_ ),
|
135 |
+
'solution' => __( "Disable WP_DEBUG for live websites in wp_config.php <code>define('WP_DEBUG', false);</code>", _HMW_PLUGIN_NAME_ ),
|
136 |
+
'javascript' => "javascript::void(0);",
|
137 |
+
),
|
138 |
+
'checkDBDebug' => array(
|
139 |
+
'name' => __( 'DB Debug Mode', _HMW_PLUGIN_NAME_ ),
|
140 |
+
'value' => false,
|
141 |
+
'valid' => false,
|
142 |
+
'warning' => false,
|
143 |
+
'message' => __( "It's not safe to have Database Debug turned on. Make sure you don't use Database debug on live websites.", _HMW_PLUGIN_NAME_ ),
|
144 |
+
'solution' => sprintf( __( "Turn off the debug plugins if your website is live. You can also switch on %sHide My Wp > Tweaks > Disable DB Debug in Frontent%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
145 |
+
'javascript' => "javascript::void(0);",
|
146 |
+
),
|
147 |
+
'checkScriptDebug' => array(
|
148 |
+
'name' => __( 'Script Debug Mode', _HMW_PLUGIN_NAME_ ),
|
149 |
+
'value' => false,
|
150 |
+
'valid' => false,
|
151 |
+
'warning' => false,
|
152 |
+
'message' => __( "Every good developer should turn on debugging before getting started on a new plugin or theme. In fact, the WordPress Codex 'highly recommends' that developers use SCRIPT_DEBUG. Unfortunately, many developers forget the debug mode even when the website is live. Showing debug logs in the frontend will let hackers know a lot about your WordPress website.", _HMW_PLUGIN_NAME_ ),
|
153 |
+
'solution' => __( "Disable SCRIPT_DEBUG for live websites in wp_config.php <code>define('SCRIPT_DEBUG', false);</code>", _HMW_PLUGIN_NAME_ ),
|
154 |
+
'javascript' => "javascript::void(0);",
|
155 |
+
),
|
156 |
+
'checkDisplayErrors' => array(
|
157 |
+
'name' => __( 'display_errors PHP directive', _HMW_PLUGIN_NAME_ ),
|
158 |
+
'value' => false,
|
159 |
+
'valid' => false,
|
160 |
+
'warning' => false,
|
161 |
+
'message' => __( "Displaying any kind of debug info in the frontend is extremely bad. If any PHP errors happen on your site they should be logged in a safe place and not displayed to visitors or potential attackers.", _HMW_PLUGIN_NAME_ ),
|
162 |
+
'solution' => __( "Edit wp_config.php and add <code>ini_set('display_errors', 0);</code>", _HMW_PLUGIN_NAME_ ),
|
163 |
+
),
|
164 |
+
'checkSSL' => array(
|
165 |
+
'name' => __( 'Backend under SSL', _HMW_PLUGIN_NAME_ ),
|
166 |
+
'value' => false,
|
167 |
+
'valid' => false,
|
168 |
+
'warning' => false,
|
169 |
+
'message' => __( "SSL is an abbreviation used for Secure Sockets Layers, which are encryption protocols used on the internet to secure information exchange and provide certificate information.<br /><br />These certificates provide an assurance to the user about the identity of the website they are communicating with. SSL may also be called TLS or Transport Layer Security protocol. <br /><br />It's important to have a secure connection for the Admin Dashboard in WordPress.", _HMW_PLUGIN_NAME_ ),
|
170 |
+
'solution' => sprintf( __( "Learn how to set your website as %s. %sClick Here%s", _HMW_PLUGIN_NAME_ ), '<strong>' . str_replace( 'http:', 'https:', site_url() ) . '</strong>', '<a href="https://hidemywpghost.com/how-to-move-wordpress-from-http-to-https/" target="_blank">', '</a>' ),
|
171 |
+
),
|
172 |
+
'checkAdminUsers' => array(
|
173 |
+
'name' => __( "User 'admin' as Administrator", _HMW_PLUGIN_NAME_ ),
|
174 |
+
'value' => false,
|
175 |
+
'valid' => false,
|
176 |
+
'warning' => false,
|
177 |
+
'message' => __( "In the old days, the default WordPress admin username was 'admin'. Since usernames make up half of the login credentials, this made it easier for hackers to launch brute-force attacks. <br /><br />Thankfully, WordPress has since changed this and now requires you to select a custom username at the time of installing WordPress.", _HMW_PLUGIN_NAME_ ),
|
178 |
+
'solution' => __( "Change the user 'admin' with another name to improve security.", _HMW_PLUGIN_NAME_ ),
|
179 |
+
),
|
180 |
+
'checkUserRegistration' => array(
|
181 |
+
'name' => __( "Spammers can easily signup", _HMW_PLUGIN_NAME_ ),
|
182 |
+
'value' => false,
|
183 |
+
'valid' => false,
|
184 |
+
'warning' => false,
|
185 |
+
'message' => __( "If you do not have an e-commerce, membership or guest posting website, you shouldn't let users subscribe to your blog. You will end up with spam registrations and your website will be filled with spammy content and comments.", _HMW_PLUGIN_NAME_ ),
|
186 |
+
'solution' => sprintf( __( "Change the signup path from %sHide My Wp > Custom Register URL%s or uncheck the option %s > %s > %s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>', '<strong>' . __( 'Settings' ), __( 'General' ), __( 'Membership' ) . '</strong>' )
|
187 |
+
),
|
188 |
+
'checkPluginsUpdates' => array(
|
189 |
+
'name' => __( "Outdated Plugins", _HMW_PLUGIN_NAME_ ),
|
190 |
+
'value' => false,
|
191 |
+
'valid' => false,
|
192 |
+
'warning' => false,
|
193 |
+
'message' => __( "WordPress and its plugins and themes are like any other software installed on your computer, and like any other application on your devices. Periodically, developers release updates which provide new features, or fix known bugs. <br /><br />These new features may not necessarily be something that you want. In fact, you may be perfectly satisfied with the functionality you currently have. Nevertheless, you are still likely to be concerned about bugs.<br /><br />Software bugs can come in many shapes and sizes. A bug could be very serious, such as preventing users from using a plugin, or it could be minor and only affect a certain part of a theme, for example. In some cases, bugs can cause serious security holes. <br /><br />Keeping plugins up to date is one of the most important and easiest ways to keep your site secure.", _HMW_PLUGIN_NAME_ ),
|
194 |
+
'solution' => __( "Go to the Updates page and update all the plugins to the last version.", _HMW_PLUGIN_NAME_ ),
|
195 |
+
),
|
196 |
+
'checkOldPlugins' => array(
|
197 |
+
'name' => __( "Not Updated Plugins", _HMW_PLUGIN_NAME_ ),
|
198 |
+
'value' => false,
|
199 |
+
'valid' => false,
|
200 |
+
'warning' => false,
|
201 |
+
'message' => __( "Plugins that have not been updated in the last 12 months can have real security problems. Make sure you use updated plugins from WordPress Directory.", _HMW_PLUGIN_NAME_ ),
|
202 |
+
'solution' => __( "Go to the Updates page and update all the plugins to the last version.", _HMW_PLUGIN_NAME_ ),
|
203 |
+
),
|
204 |
+
'checkIncompatiblePlugins' => array(
|
205 |
+
'name' => __( "Version Incompatible Plugins", _HMW_PLUGIN_NAME_ ),
|
206 |
+
'value' => false,
|
207 |
+
'valid' => false,
|
208 |
+
'warning' => false,
|
209 |
+
'message' => __( "Plugins that are incompatible with your version of WordPress can have real security problems. Make sure you use tested plugins from WordPress Directory.", _HMW_PLUGIN_NAME_ ),
|
210 |
+
'solution' => __( "Make sure you use tested plugins from WordPress Directory.", _HMW_PLUGIN_NAME_ ),
|
211 |
+
),
|
212 |
+
'checkThemesUpdates' => array(
|
213 |
+
'name' => __( "Outdated Themes", _HMW_PLUGIN_NAME_ ),
|
214 |
+
'value' => false,
|
215 |
+
'valid' => false,
|
216 |
+
'warning' => false,
|
217 |
+
'message' => __( "WordPress and its plugins and themes are like any other software installed on your computer, and like any other application on your devices. Periodically developers release updates which provide new features or fix known bugs. <br /><br />New features may be something that you do not necessarily want. In fact, you may be perfectly satisfied with the functionality you currently have. Nevertheless, you may still be concerned about bugs.<br /><br />Software bugs can come in many shapes and sizes. A bug could be very serious, such as preventing users from using a plugin, or it could be a minor bug that only affects a certain part of a theme, for example. In some cases, bugs can even cause serious security holes.<br /><br />Keeping themes up to date is one of the most important and easiest ways to keep your site secure.", _HMW_PLUGIN_NAME_ ),
|
218 |
+
'solution' => __( "Go to the Updates page and update all the themes to the last version.", _HMW_PLUGIN_NAME_ ),
|
219 |
+
),
|
220 |
+
'checkDBPrefix' => array(
|
221 |
+
'name' => __( "Database Prefix", _HMW_PLUGIN_NAME_ ),
|
222 |
+
'value' => false,
|
223 |
+
'valid' => false,
|
224 |
+
'warning' => false,
|
225 |
+
'message' => __( "The WordPress database is like a brain for your entire WordPress site, because every single bit of information about your site is stored there, thus making it a hacker’s favorite target. <br /><br />Spammers and hackers run automated code for SQL injections.<br />Unfortunately, many people forget to change the database prefix when they install WordPress. <br />This makes it easier for hackers to plan a mass attack by targeting the default prefix <strong>wp_</strong>.", _HMW_PLUGIN_NAME_ ),
|
226 |
+
'solution' => sprintf( __( "Hide My WP protects your website from most SQL injections but, if possible, use a custom prefix for database tables to avoid SQL injections. %sRead more%s", _HMW_PLUGIN_NAME_ ), '<a href="https://firstsiteguide.com/change-database-prefix/" target="_blank">', '</a>' ),
|
227 |
+
),
|
228 |
+
'checkVersionDisplayed' => array(
|
229 |
+
'name' => __( "Versions in Source Code", _HMW_PLUGIN_NAME_ ),
|
230 |
+
'value' => false,
|
231 |
+
'valid' => false,
|
232 |
+
'warning' => false,
|
233 |
+
'message' => __( "WordPress, plugins and themes add their version info to the source code, so anyone can see it. <br /><br />Hackers can easily find a website with vulnerable version plugins or themes, and target these with Zero-Day Exploits.", _HMW_PLUGIN_NAME_ ),
|
234 |
+
'solution' => sprintf( __( "Switch on %sHide My WP > Tweaks > %s %s", _HMW_PLUGIN_NAME_ ), '<strong>', __( 'Hide Versions and WordPress Tags', _HMW_PLUGIN_NAME_ ), '</strong>' ),
|
235 |
+
'javascript' => "javascript::void(0);",
|
236 |
+
),
|
237 |
+
'checkSaltKeys' => array(
|
238 |
+
'name' => __( "Salts and Security Keys valid", _HMW_PLUGIN_NAME_ ),
|
239 |
+
'value' => false,
|
240 |
+
'valid' => false,
|
241 |
+
'warning' => false,
|
242 |
+
'message' => __( "Security keys are used to ensure better encryption of information stored in the user's cookies and hashed passwords. <br /><br />These make your site more difficult to hack, access and crack by adding random elements to the password. You don't have to remember these keys. In fact, once you set them you'll never see them again. Therefore there's no excuse for not setting them properly.", _HMW_PLUGIN_NAME_ ),
|
243 |
+
'solution' => __( "Security keys are defined in wp-config.php as constants on lines. They should be as unique and as long as possible. <code>AUTH_KEY,SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,NONCE_SALT</code>", _HMW_PLUGIN_NAME_ ),
|
244 |
+
),
|
245 |
+
'checkSaltKeysAge' => array(
|
246 |
+
'name' => __( "Security Keys Updated", _HMW_PLUGIN_NAME_ ),
|
247 |
+
'value' => false,
|
248 |
+
'valid' => false,
|
249 |
+
'warning' => false,
|
250 |
+
'message' => __( "The security keys in wp-config.php should be renewed as often as possible.", _HMW_PLUGIN_NAME_ ),
|
251 |
+
'solution' => sprintf( __( "You can generate %snew Keys from here%s <code>AUTH_KEY,SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,NONCE_SALT</code>", _HMW_PLUGIN_NAME_ ), '<a href="https://api.wordpress.org/secret-key/1.1/salt/" target="_blank">', '</a>' ),
|
252 |
+
),
|
253 |
+
'checkDbPassword' => array(
|
254 |
+
'name' => __( "WordPress dDatabase Password", _HMW_PLUGIN_NAME_ ),
|
255 |
+
'value' => false,
|
256 |
+
'valid' => false,
|
257 |
+
'warning' => false,
|
258 |
+
'message' => __( "There is no such thing as an \"unimportant password\"! The same goes for your WordPress database password. <br />Although most servers are configured so that the database can't be accessed from other hosts (or from outside of the local network), that doesn't mean your database password should be \"12345\" or no password at all.", _HMW_PLUGIN_NAME_ ),
|
259 |
+
'solution' => __( "Choose a proper database password, at least 8 characters long with a combination of letters, numbers and special characters. After you change it, set the new password in the wp_config.php file <code>define('DB_PASSWORD', 'NEW_DB_PASSWORD_GOES_HERE');</code>", _HMW_PLUGIN_NAME_ ),
|
260 |
+
),
|
261 |
+
// 'checkBlogSiteURL' => array(
|
262 |
+
// 'name' => __("Same Backend and Frontend URLs", _HMW_PLUGIN_NAME_),
|
263 |
+
// 'value' => false,
|
264 |
+
// 'valid' => false,
|
265 |
+
// 'warning' => false,
|
266 |
+
// 'message' => __("Moving WP core files to any non-standard folder will make your site less vulnerable to automated attacks. This is ", _HMW_PLUGIN_NAME_),
|
267 |
+
// 'solution' => __("(Optional) If your blog is setup on www.site.com you can put WP files in ie: /site.com/www/my-app/ instead of the obvious /site.com/www/.", _HMW_PLUGIN_NAME_),
|
268 |
+
// ),
|
269 |
+
'checkCommonPaths' => array(
|
270 |
+
'name' => __( "/wp-content is visible in source code", _HMW_PLUGIN_NAME_ ),
|
271 |
+
'value' => false,
|
272 |
+
'valid' => false,
|
273 |
+
'warning' => false,
|
274 |
+
'message' => __( "It's important to rename common WordPress paths, such as wp-content and wp-includes to prevent hackers from knowing that you have a WordPress website.", _HMW_PLUGIN_NAME_ ),
|
275 |
+
'solution' => sprintf( __( "Change the wp-content, wp-includes and other common paths with %sHide My Wp > Permalinks%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
276 |
+
),
|
277 |
+
'checkOldPaths' => array(
|
278 |
+
'name' => __( "/wp-content path is accessible", _HMW_PLUGIN_NAME_ ),
|
279 |
+
'value' => false,
|
280 |
+
'valid' => false,
|
281 |
+
'warning' => false,
|
282 |
+
'message' => __( "It's important to hide the common WordPress paths to prevent attacks on vulnerable plugins and themes. <br /> Also, it's important to hide the names of plugins and themes to make it impossible for bots to detect them.", _HMW_PLUGIN_NAME_ ),
|
283 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Hide WordPress Common Paths%s to hide the old paths", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
284 |
+
'javascript' => "javascript::void(0);",
|
285 |
+
),
|
286 |
+
'checkAdminPath' => array(
|
287 |
+
'name' => sprintf( __( "%s is visible in source code", _HMW_PLUGIN_NAME_ ), '/' . HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ),
|
288 |
+
'value' => false,
|
289 |
+
'valid' => false,
|
290 |
+
'warning' => false,
|
291 |
+
'message' => sprintf( __( "Having the admin URL visible in the source code it's really bad because hackers will immediately know your secret admin path and start a Brute Force attack. The custom admin path should not appear in the ajax URL. <br /><br />Find solutions for %show to hide the path from source code%s.", _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/how-to-hide-wp-admin-and-wp-login-php-from-source-code/" target="_blank">', '</a>' ),
|
292 |
+
'solution' => sprintf( __( "Switch on %sHide My WP > Permalinks > Hide wp-admin from ajax URL%s. Hide any reference to admin path from the installed plugins.", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>', '<strong>', '</strong>' ),
|
293 |
+
),
|
294 |
+
'checkLoginPath' => array(
|
295 |
+
'name' => sprintf( __( "%s is visible in source code", _HMW_PLUGIN_NAME_ ), '/' . HMW_Classes_Tools::getOption( 'hmw_login_url' ) ),
|
296 |
+
'value' => false,
|
297 |
+
'valid' => false,
|
298 |
+
'warning' => false,
|
299 |
+
'message' => sprintf( __( "Having the login URL visible in the source code it's really bad because hackers will immediately know your secret login path and start a Brute Force attack. <br /><br />The custom login path should be kept secret and with the Brute Force Protection activated for it. <br ><br />Find solutions for %show to hide the path from source code%s.", _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/how-to-hide-wp-admin-and-wp-login-php-from-source-code/" target="_blank">', '</a>' ),
|
300 |
+
'solution' => sprintf( __( "%sHide the login path%s from theme menu or widget.", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
301 |
+
),
|
302 |
+
'checkOldLogin' => array(
|
303 |
+
'name' => __( "/wp-login path is accessible", _HMW_PLUGIN_NAME_ ),
|
304 |
+
'value' => false,
|
305 |
+
'valid' => false,
|
306 |
+
'warning' => false,
|
307 |
+
'message' => __( "If your site allows user logins, you need your login page to be easy to find for your users. You also need to do other things to protect against malicious login attempts. <br /><br />However, obscurity is a valid security layer when used as part of a comprehensive security strategy, and if you want to cut down on the number of malicious login attempts. Making your login page difficult to find is one way to do that.", _HMW_PLUGIN_NAME_ ),
|
308 |
+
'solution' => sprintf( __( "Change the wp-login from %sHide My Wp > Custom login URL%s and Switch on %sHide My Wp > Brute Force Protection%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>', '<strong>', '</strong>' ),
|
309 |
+
),
|
310 |
+
'checkConfigChmod' => array(
|
311 |
+
'name' => __( "/wp_config.php file is writable", _HMW_PLUGIN_NAME_ ),
|
312 |
+
'value' => false,
|
313 |
+
'valid' => false,
|
314 |
+
'warning' => false,
|
315 |
+
'message' => __( "One of the most important files in your WordPress installation is the wp-config.php file. <br />This file is located in the root directory of your WordPress installation, and contains your website's base configuration details, such as database connection information.", _HMW_PLUGIN_NAME_ ),
|
316 |
+
'solution' => sprintf( __( "Try setting chmod to %s0400%s or %s0440%s and if the website works normally that's the best one to use.", _HMW_PLUGIN_NAME_ ), '<a href="http://www.filepermissions.com/directory-permission/0400" target="_blank">', '</a>', '<a href="http://www.filepermissions.com/directory-permission/0440" target="_blank">', '</a>' ),
|
317 |
+
),
|
318 |
+
'checkConfig' => array(
|
319 |
+
'name' => __( "wp-config.php & wp-config-sample.php files are accessible ", _HMW_PLUGIN_NAME_ ),
|
320 |
+
'value' => false,
|
321 |
+
'valid' => false,
|
322 |
+
'warning' => false,
|
323 |
+
'message' => __( "One of the most important files in your WordPress installation is the wp-config.php file. <br />This file is located in the root directory of your WordPress installation and contains your website's base configuration details, such as database connection information.", _HMW_PLUGIN_NAME_ ),
|
324 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-config.php & wp-config-sample.php files", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
325 |
+
'javascript' => "javascript::void(0);",
|
326 |
+
),
|
327 |
+
'checkReadme' => array(
|
328 |
+
'name' => __( "readme.html file is accessible ", _HMW_PLUGIN_NAME_ ),
|
329 |
+
'value' => false,
|
330 |
+
'valid' => false,
|
331 |
+
'warning' => false,
|
332 |
+
'message' => __( "It's important to hide or remove the readme.html file because it contains WP version details.", _HMW_PLUGIN_NAME_ ),
|
333 |
+
'solution' => sprintf( __( "Rename readme.html file or switch on %sHide My Wp > Hide WordPress Common Files%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
334 |
+
'javascript' => "javascript::void(0);",
|
335 |
+
),
|
336 |
+
'checkInstall' => array(
|
337 |
+
'name' => __( "install.php & upgrade.php files are accessible ", _HMW_PLUGIN_NAME_ ),
|
338 |
+
'value' => false,
|
339 |
+
'valid' => false,
|
340 |
+
'warning' => false,
|
341 |
+
'message' => __( "WordPress is well-known for its ease of installation. <br/>It's important to hide the wp-admin/install.php and wp-admin/upgrade.php files because there have already been a couple of security issues regarding these files.", _HMW_PLUGIN_NAME_ ),
|
342 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-admin/install.php & wp-admin/upgrade.php files", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
343 |
+
'javascript' => "javascript::void(0);",
|
344 |
+
),
|
345 |
+
'checkRegisterGlobals' => array(
|
346 |
+
'name' => __( "PHP register_globals is on", _HMW_PLUGIN_NAME_ ),
|
347 |
+
'value' => false,
|
348 |
+
'valid' => false,
|
349 |
+
'warning' => false,
|
350 |
+
'message' => __( "This is one of the biggest security issues you can have on your site! If your hosting company has this directive enabled by default, switch to another company immediately!", _HMW_PLUGIN_NAME_ ),
|
351 |
+
'solution' => __( "If you have access to php.ini file, set <code>register_globals = off</code> or contact the hosting company to set it off", _HMW_PLUGIN_NAME_ ),
|
352 |
+
),
|
353 |
+
'checkExposedPHP' => array(
|
354 |
+
'name' => __( "PHP expose_php is on", _HMW_PLUGIN_NAME_ ),
|
355 |
+
'value' => false,
|
356 |
+
'valid' => false,
|
357 |
+
'warning' => false,
|
358 |
+
'message' => __( "Exposing the PHP version will make the job of attacking your site much easier.", _HMW_PLUGIN_NAME_ ),
|
359 |
+
'solution' => __( "If you have access to php.ini file, set <code>expose_php = off</code> or contact the hosting company to set it off", _HMW_PLUGIN_NAME_ ),
|
360 |
+
),
|
361 |
+
'checkPHPSafe' => array(
|
362 |
+
'name' => __( "PHP safe_mode is on", _HMW_PLUGIN_NAME_ ),
|
363 |
+
'value' => false,
|
364 |
+
'valid' => false,
|
365 |
+
'warning' => false,
|
366 |
+
'message' => __( "PHP safe mode was one of the attempts to solve security problems of shared web hosting servers. <br /><br />It is still being used by some web hosting providers, however, nowadays this is regarded as improper. A systematic approach proves that it’s architecturally incorrect to try solving complex security issues at the PHP level, rather than at the web server and OS levels.<br /><br />Technically, safe mode is a PHP directive that restricts the way some built-in PHP functions operate. The main problem here is inconsistency. When turned on, PHP safe mode may prevent many legitimate PHP functions from working correctly. At the same time there exists a variety of methods to override safe mode limitations using PHP functions that aren’t restricted, so if a hacker has already got in – safe mode is useless.", _HMW_PLUGIN_NAME_ ),
|
367 |
+
'solution' => __( "If you have access to php.ini file, set <code>safe_mode = off</code> or contact the hosting company to set it off", _HMW_PLUGIN_NAME_ ),
|
368 |
+
),
|
369 |
+
'checkAllowUrlInclude' => array(
|
370 |
+
'name' => __( "PHP allow_url_include is on", _HMW_PLUGIN_NAME_ ),
|
371 |
+
'value' => false,
|
372 |
+
'valid' => false,
|
373 |
+
'warning' => false,
|
374 |
+
'message' => __( "Having this PHP directive enabled will leave your site exposed to cross-site attacks (XSS). <br /><br />There's absolutely no valid reason to enable this directive, and using any PHP code that requires it is very risky.", _HMW_PLUGIN_NAME_ ),
|
375 |
+
'solution' => __( "If you have access to php.ini file, set <code>allow_url_include = off</code> or contact the hosting company to set it off", _HMW_PLUGIN_NAME_ ),
|
376 |
+
),
|
377 |
+
'checkAdminEditor' => array(
|
378 |
+
'name' => __( "Plugins/Themes editor disables", _HMW_PLUGIN_NAME_ ),
|
379 |
+
'value' => false,
|
380 |
+
'valid' => false,
|
381 |
+
'warning' => false,
|
382 |
+
'message' => __( "The plugins and themes file editor is a very convenient tool because it enables you to make quick changes without the need to use FTP. <br /><br />Unfortunately, it's also a security issue because it not only shows the PHP source code, it also enables attackers to inject malicious code into your site if they manage to gain access to admin.", _HMW_PLUGIN_NAME_ ),
|
383 |
+
'solution' => __( "Disable DISALLOW_FILE_EDIT for live websites in wp_config.php <code>define('DISALLOW_FILE_EDIT', true);</code>", _HMW_PLUGIN_NAME_ ),
|
384 |
+
'javascript' => "javascript::void(0);",
|
385 |
+
),
|
386 |
+
'checkUploadsBrowsable' => array(
|
387 |
+
'name' => sprintf( __( "Folder %s is browsable ", _HMW_PLUGIN_NAME_ ), HMW_Classes_Tools::$default['hmw_upload_url'] ),
|
388 |
+
'value' => false,
|
389 |
+
'valid' => false,
|
390 |
+
'warning' => false,
|
391 |
+
'message' => __( "Allowing anyone to view all files in the Uploads folder with a browser will allow them to easily download all your uploaded files. It's a security and a copyright issue.", _HMW_PLUGIN_NAME_ ),
|
392 |
+
'solution' => sprintf( __( "Learn how to disable %sDirectory Browsing%s", _HMW_PLUGIN_NAME_ ), '<a href="https://www.netsparker.com/blog/web-security/disable-directory-listing-web-servers/">', '</a>' ),
|
393 |
+
'javascript' => "javascript::void(0);",
|
394 |
+
),
|
395 |
+
'checkWLW' => array(
|
396 |
+
'name' => __( "Windows Live Writer is on ", _HMW_PLUGIN_NAME_ ),
|
397 |
+
'value' => false,
|
398 |
+
'valid' => false,
|
399 |
+
'warning' => false,
|
400 |
+
'message' => __( "If you're not using Windows Live Writer there's really no valid reason to have its link in the page header, because this tells the whole world you're using WordPress.", _HMW_PLUGIN_NAME_ ),
|
401 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Tweaks > Disable WLW Manifest scripts%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
402 |
+
'javascript' => "javascript::void(0);",
|
403 |
+
),
|
404 |
+
'checkXmlrpc' => array(
|
405 |
+
'name' => __( "XML-RPC access is on", _HMW_PLUGIN_NAME_ ),
|
406 |
+
'value' => false,
|
407 |
+
'valid' => false,
|
408 |
+
'warning' => false,
|
409 |
+
'message' => __( "WordPress XML-RPC is a specification that aims to standardize communications between different systems. It uses HTTP as the transport mechanism and XML as encoding mechanism to enable a wide range of data to be transmitted. <br /><br />The two biggest assets of the API are its extendibility and its security. XML-RPC authenticates using basic authentication. It sends the username and password with each request, which is a big no-no in security circles.", _HMW_PLUGIN_NAME_ ),
|
410 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Tweaks > Disable XML-RPC access%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
411 |
+
'javascript' => "javascript::void(0);",
|
412 |
+
),
|
413 |
+
'checkRDS' => array(
|
414 |
+
'name' => __( "RDS is visible", _HMW_PLUGIN_NAME_ ),
|
415 |
+
'value' => false,
|
416 |
+
'valid' => false,
|
417 |
+
'warning' => false,
|
418 |
+
'message' => __( "If you're not using any Really Simple Discovery services such as pingbacks, there's no need to advertise that endpoint (link) in the header. Please note that for most sites this is not a security issue because they \"want to be discovered\", but if you want to hide the fact that you're using WP, this is the way to go.", _HMW_PLUGIN_NAME_ ),
|
419 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Tweaks > Hide RSD header%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
420 |
+
'javascript' => "javascript::void(0);",
|
421 |
+
),
|
422 |
+
'checkMysqlPermissions' => array(
|
423 |
+
'name' => __( "MySql Grant All Permissions", _HMW_PLUGIN_NAME_ ),
|
424 |
+
'value' => false,
|
425 |
+
'valid' => false,
|
426 |
+
'warning' => false,
|
427 |
+
'message' => __( "If an attacker gains access to your wp-config.php file and gets the MySQL username and password, he'll be able to login to that database and do whatever that account allows. <br /><br />That's why it's important to keep the account's privileges to a bare minimum.<br /><br />For instance, if you're not installing any new plugins or updating WP, that account doesn't need the CREATE or DROP table privileges.<br /><br />For regular, day-to-day usage these are the recommended privileges: SELECT, INSERT, UPDATE and DELETE.", _HMW_PLUGIN_NAME_ ),
|
428 |
+
'solution' => sprintf( __( "To learn how to revoke permissions from PhpMyAdmin %sClick here%s", _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/article/how-to-grant-and-revoke-permissions-to-database-using-phpmyadmin/" target="_blank">', '</a>' ),
|
429 |
+
),
|
430 |
+
'checkUsersById' => array(
|
431 |
+
'name' => __( "Author URL by ID access", _HMW_PLUGIN_NAME_ ),
|
432 |
+
'value' => false,
|
433 |
+
'valid' => false,
|
434 |
+
'warning' => false,
|
435 |
+
'message' => __( "Usernames (unlike passwords) are not secret. By knowing someone's username, you can't log in to their account. You also need the password. <br /><br />However, by knowing the username, you are one step closer to logging in using the username to brute-force the password, or to gain access in a similar way. <br /><br />That's why it's advisable to keep the list of usernames private, at least to some degree. By default, by accessing siteurl.com/?author={id} and looping through IDs from 1 you can get a list of usernames, because WP will redirect you to siteurl.com/author/user/ if the ID exists in the system.", _HMW_PLUGIN_NAME_ ),
|
436 |
+
'solution' => sprintf( __( "Switch on %sHide My Wp > Hide Author ID URL%s", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ),
|
437 |
+
'javascript' => "javascript::void(0);",
|
438 |
+
),
|
439 |
+
'checkBlogDescription' => array(
|
440 |
+
'name' => __( "Default WordPress Tagline", _HMW_PLUGIN_NAME_ ),
|
441 |
+
'value' => false,
|
442 |
+
'valid' => false,
|
443 |
+
'warning' => false,
|
444 |
+
'message' => __( "The WordPress site tagline is a short phrase located under the site title, similar to a subtitle or advertising slogan. The goal of a tagline is to convey the essence of your site to visitors. <br /><br />If you don't change the default tagline it will be very easy to detect that your website was actually built with WordPress", _HMW_PLUGIN_NAME_ ),
|
445 |
+
'solution' => sprintf( __( "Change the Tagline in %s > %s", _HMW_PLUGIN_NAME_ ), '<strong>' . __( 'General' ), __( 'Tagline' ) . '</strong>' ),
|
446 |
+
),
|
447 |
+
|
448 |
+
|
449 |
+
);
|
450 |
+
}
|
451 |
+
|
452 |
+
/**
|
453 |
+
* Get the Risk Tasks for speedometer
|
454 |
+
* @return array
|
455 |
+
*/
|
456 |
+
public function getRiskTasks() {
|
457 |
+
return array(
|
458 |
+
'checkPHP',
|
459 |
+
'checkXmlrpc',
|
460 |
+
'checkUsersById',
|
461 |
+
'checkRDS',
|
462 |
+
'checkUploadsBrowsable',
|
463 |
+
'checkConfig',
|
464 |
+
'checkOldLogin',
|
465 |
+
'checkLoginPath',
|
466 |
+
'checkOldPaths',
|
467 |
+
'checkCommonPaths',
|
468 |
+
'checkVersionDisplayed',
|
469 |
+
'checkSSL',
|
470 |
+
'checkDBDebug',
|
471 |
+
'checkLoginPath',
|
472 |
+
);
|
473 |
+
}
|
474 |
+
|
475 |
+
/**
|
476 |
+
* Get the Risk Report for Daskboard Widget and speedometer
|
477 |
+
* @return mixed
|
478 |
+
*/
|
479 |
+
public function getRiskReport() {
|
480 |
+
$riskreport = array();
|
481 |
+
//get all the risk tasks
|
482 |
+
$risktasks = $this->getRiskTasks();
|
483 |
+
//initiate the security report
|
484 |
+
$report = $this->initSecurity();
|
485 |
+
|
486 |
+
if ( ! empty( $report ) ) {
|
487 |
+
foreach ( $report as $function => $row ) {
|
488 |
+
if ( in_array( $function, $risktasks ) ) {
|
489 |
+
if ( ! $row['valid'] ) {
|
490 |
+
//add the invalid tasks into risk report
|
491 |
+
$riskreport[ $function ] = $row;
|
492 |
+
}
|
493 |
+
}
|
494 |
+
}
|
495 |
+
}
|
496 |
+
|
497 |
+
//return the risk report
|
498 |
+
return $riskreport;
|
499 |
+
}
|
500 |
+
|
501 |
+
public function action() {
|
502 |
+
parent::action();
|
503 |
+
|
504 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
505 |
+
return;
|
506 |
+
}
|
507 |
+
|
508 |
+
switch ( HMW_Classes_Tools::getValue( 'action' ) ) {
|
509 |
+
case 'hmw_securitycheck':
|
510 |
+
$this->doSecurityCheck();
|
511 |
+
|
512 |
+
break;
|
513 |
+
|
514 |
+
case 'hmw_securityexclude':
|
515 |
+
$name = HMW_Classes_Tools::getValue( 'name', false );
|
516 |
+
if ( $name ) {
|
517 |
+
if ( ! $tasks_ignored = get_option( 'hmw_securitycheck_ignore' ) ) {
|
518 |
+
$tasks_ignored = array();
|
519 |
+
}
|
520 |
+
|
521 |
+
array_push( $tasks_ignored, $name );
|
522 |
+
$tasks_ignored = array_unique( $tasks_ignored );
|
523 |
+
update_option( 'hmw_securitycheck_ignore', $tasks_ignored );
|
524 |
+
}
|
525 |
+
HMW_Classes_Tools::setHeader( 'json' );
|
526 |
+
echo json_encode( array(
|
527 |
+
'success' => true,
|
528 |
+
'message' => __( 'Saved! This task will be ignored on future tests.', _HMW_PLUGIN_NAME_ )
|
529 |
+
) );
|
530 |
+
|
531 |
+
exit();
|
532 |
+
|
533 |
+
case 'hmw_resetexclude':
|
534 |
+
update_option( 'hmw_securitycheck_ignore', array() );
|
535 |
+
HMW_Classes_Tools::setHeader( 'json' );
|
536 |
+
echo json_encode( array(
|
537 |
+
'success' => true,
|
538 |
+
'message' => __( 'Saved! You can run the test again.', _HMW_PLUGIN_NAME_ )
|
539 |
+
) );
|
540 |
+
|
541 |
+
exit();
|
542 |
+
|
543 |
+
}
|
544 |
+
|
545 |
+
|
546 |
+
}
|
547 |
+
|
548 |
+
/**
|
549 |
+
* Check PHP version
|
550 |
+
* @return array
|
551 |
+
*/
|
552 |
+
public function checkPHP() {
|
553 |
+
$phpversion = phpversion();
|
554 |
+
if ( strpos( $phpversion, '-' ) !== false ) {
|
555 |
+
$phpversion = substr( $phpversion, 0, strpos( $phpversion, '-' ) );
|
556 |
+
}
|
557 |
+
|
558 |
+
return array(
|
559 |
+
'value' => $phpversion,
|
560 |
+
'valid' => ( version_compare( $phpversion, '7.0', '>=' ) ),
|
561 |
+
);
|
562 |
+
}
|
563 |
+
|
564 |
+
/**
|
565 |
+
* Check if mysql is up-to-date
|
566 |
+
* @return array
|
567 |
+
*/
|
568 |
+
public function checkMysql() {
|
569 |
+
global $wpdb;
|
570 |
+
|
571 |
+
$mysql_version = $wpdb->db_version();
|
572 |
+
|
573 |
+
return array(
|
574 |
+
'value' => $mysql_version,
|
575 |
+
'valid' => ( version_compare( $mysql_version, '5.0', '>' ) ),
|
576 |
+
);
|
577 |
+
|
578 |
+
}
|
579 |
+
|
580 |
+
/**
|
581 |
+
* Check is WP_DEBUG is true
|
582 |
+
* @return array|bool
|
583 |
+
*/
|
584 |
+
public function checkWPDebug() {
|
585 |
+
if ( defined( 'WP_DEBUG' ) ) {
|
586 |
+
return array(
|
587 |
+
'value' => ( WP_DEBUG ? __( 'Yes' ) : __( 'No' ) ),
|
588 |
+
'valid' => ! WP_DEBUG,
|
589 |
+
);
|
590 |
+
}
|
591 |
+
|
592 |
+
return false;
|
593 |
+
}
|
594 |
+
|
595 |
+
/**
|
596 |
+
* Check if DB debugging is enabled
|
597 |
+
*
|
598 |
+
* @return array
|
599 |
+
*/
|
600 |
+
static function checkDbDebug() {
|
601 |
+
global $wpdb;
|
602 |
+
$show_errors = ( $wpdb->show_errors && ! HMW_Classes_Tools::getOption( 'hmw_disable_debug' ) );
|
603 |
+
|
604 |
+
return array(
|
605 |
+
'value' => ( $show_errors ? __( 'Yes' ) : __( 'No' ) ),
|
606 |
+
'valid' => ! $show_errors,
|
607 |
+
);
|
608 |
+
|
609 |
+
}
|
610 |
+
|
611 |
+
/**
|
612 |
+
* Check if global WP JS debugging is enabled
|
613 |
+
*
|
614 |
+
* @return array|bool
|
615 |
+
*/
|
616 |
+
static function checkScriptDebug() {
|
617 |
+
if ( defined( 'SCRIPT_DEBUG' ) ) {
|
618 |
+
return array(
|
619 |
+
'value' => ( SCRIPT_DEBUG ? __( 'Yes' ) : __( 'No' ) ),
|
620 |
+
'valid' => ! SCRIPT_DEBUG,
|
621 |
+
);
|
622 |
+
}
|
623 |
+
|
624 |
+
return false;
|
625 |
+
}
|
626 |
+
|
627 |
+
/**
|
628 |
+
* Check if the backend is SSL or not
|
629 |
+
* @return array
|
630 |
+
*/
|
631 |
+
public function checkSSL() {
|
632 |
+
return array(
|
633 |
+
'value' => ( is_ssl() ? __( 'Yes' ) : __( 'No' ) ),
|
634 |
+
'valid' => ( is_ssl() ),
|
635 |
+
);
|
636 |
+
}
|
637 |
+
|
638 |
+
/**
|
639 |
+
* Check Admin User declared
|
640 |
+
* @return array
|
641 |
+
*/
|
642 |
+
public function checkAdminUsers() {
|
643 |
+
$users = get_users( array( 'role' => 'administrator', 'login' => 'admin' ) );
|
644 |
+
|
645 |
+
return array(
|
646 |
+
'value' => ( ! empty( $users ) ? __( 'Yes' ) : __( 'No' ) ),
|
647 |
+
'valid' => ( empty( $users ) ),
|
648 |
+
);
|
649 |
+
}
|
650 |
+
|
651 |
+
/**
|
652 |
+
* Check WordPress version
|
653 |
+
* @return array|bool
|
654 |
+
*/
|
655 |
+
public function checkWP() {
|
656 |
+
global $wp_version;
|
657 |
+
$wp_lastversion = $wpversion = false;
|
658 |
+
if ( isset( $wp_version ) ) {
|
659 |
+
|
660 |
+
$url = 'https://api.wordpress.org/core/version-check/1.7/';
|
661 |
+
$response = wp_remote_get( $url );
|
662 |
+
$obj = json_decode( $response['body'] );
|
663 |
+
if ( isset( $obj->offers[0] ) ) {
|
664 |
+
$upgrade = $obj->offers[0];
|
665 |
+
if ( isset( $upgrade->version ) ) {
|
666 |
+
$wp_lastversion = $upgrade->version;
|
667 |
+
}
|
668 |
+
}
|
669 |
+
|
670 |
+
if ( $wp_lastversion ) {
|
671 |
+
return array(
|
672 |
+
'value' => $wp_version,
|
673 |
+
'valid' => version_compare( $wp_version, $wp_lastversion, '==' ),
|
674 |
+
'version' => $wp_lastversion,
|
675 |
+
);
|
676 |
+
}
|
677 |
+
}
|
678 |
+
|
679 |
+
return false;
|
680 |
+
}
|
681 |
+
|
682 |
+
/**
|
683 |
+
* Check if plugins are up to date
|
684 |
+
* @return array
|
685 |
+
*/
|
686 |
+
public function checkPluginsUpdates() {
|
687 |
+
//Get the current update info
|
688 |
+
$current = get_site_transient( 'update_plugins' );
|
689 |
+
|
690 |
+
if ( ! is_object( $current ) ) {
|
691 |
+
$current = new stdClass;
|
692 |
+
}
|
693 |
+
|
694 |
+
set_site_transient( 'update_plugins', $current );
|
695 |
+
|
696 |
+
// run the internal plugin update check
|
697 |
+
wp_update_plugins();
|
698 |
+
|
699 |
+
$current = get_site_transient( 'update_plugins' );
|
700 |
+
|
701 |
+
if ( isset( $current->response ) && is_array( $current->response ) ) {
|
702 |
+
$plugin_update_cnt = count( $current->response );
|
703 |
+
} else {
|
704 |
+
$plugin_update_cnt = 0;
|
705 |
+
}
|
706 |
+
|
707 |
+
$plugins = array();
|
708 |
+
foreach ( $current->response as $plugin_path => $tmp ) {
|
709 |
+
if ( isset( $tmp->slug ) ) {
|
710 |
+
$plugins[] = $tmp->slug;
|
711 |
+
}
|
712 |
+
}
|
713 |
+
|
714 |
+
return array(
|
715 |
+
'value' => ( $plugin_update_cnt > 0 ? sprintf( __( '%s plugin are outdated: %s', _HMW_PLUGIN_NAME_ ), $plugin_update_cnt, join( '<br />', $plugins ) ) : __( 'All plugins are up to date', _HMW_PLUGIN_NAME_ ) ),
|
716 |
+
'valid' => ( ! $plugin_update_cnt ),
|
717 |
+
);
|
718 |
+
|
719 |
+
}
|
720 |
+
|
721 |
+
/**
|
722 |
+
* Check if themes are up to date
|
723 |
+
* @return array
|
724 |
+
*/
|
725 |
+
public function checkThemesUpdates() {
|
726 |
+
$current = get_site_transient( 'update_themes' );
|
727 |
+
|
728 |
+
if ( ! is_object( $current ) ) {
|
729 |
+
$current = new stdClass;
|
730 |
+
}
|
731 |
+
|
732 |
+
set_site_transient( 'update_themes', $current );
|
733 |
+
wp_update_themes();
|
734 |
+
|
735 |
+
$current = get_site_transient( 'update_themes' );
|
736 |
+
|
737 |
+
if ( isset( $current->response ) && is_array( $current->response ) ) {
|
738 |
+
$theme_update_cnt = count( $current->response );
|
739 |
+
} else {
|
740 |
+
$theme_update_cnt = 0;
|
741 |
+
}
|
742 |
+
|
743 |
+
foreach ( $current->response as $theme_name => $tmp ) {
|
744 |
+
$themes[] = $theme_name;
|
745 |
+
}
|
746 |
+
|
747 |
+
return array(
|
748 |
+
'value' => ( $theme_update_cnt > 0 ? sprintf( __( '%s theme(s) are outdated: %s', _HMW_PLUGIN_NAME_ ), $theme_update_cnt, '<br />' . join( "<br />", $themes ) ) : __( 'Themes are up to date', _HMW_PLUGIN_NAME_ ) ),
|
749 |
+
'valid' => ( ! $theme_update_cnt ),
|
750 |
+
);
|
751 |
+
|
752 |
+
}
|
753 |
+
|
754 |
+
public function checkOldPlugins() {
|
755 |
+
//return false;
|
756 |
+
global $hmw_plugin_details;
|
757 |
+
|
758 |
+
$hmw_plugin_details = $return = array();
|
759 |
+
$bad = array();
|
760 |
+
$active_plugins = get_option( 'active_plugins', array() );
|
761 |
+
|
762 |
+
foreach ( $active_plugins as $plugin_path ) {
|
763 |
+
$plugin = explode( '/', $plugin_path );
|
764 |
+
$plugin = @$plugin[0];
|
765 |
+
if ( empty( $plugin ) || empty( $plugin_path ) ) {
|
766 |
+
continue;
|
767 |
+
}
|
768 |
+
$response = wp_remote_get( 'https://api.wordpress.org/plugins/info/1.1/?action=plugin_information&request%5Bslug%5D=' . $plugin, array( 'timeout' => 5 ) );
|
769 |
+
if ( ! is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) == 200 && wp_remote_retrieve_body( $response ) ) {
|
770 |
+
$details = wp_remote_retrieve_body( $response );
|
771 |
+
$details = json_decode( $details, true );
|
772 |
+
if ( empty( $details ) ) {
|
773 |
+
continue;
|
774 |
+
}
|
775 |
+
$hmw_plugin_details[ $plugin_path ] = $details;
|
776 |
+
$updated = strtotime( $details['last_updated'] );
|
777 |
+
if ( $updated + 365 * DAY_IN_SECONDS < time() ) {
|
778 |
+
$bad[ $plugin_path ] = true;
|
779 |
+
}
|
780 |
+
}
|
781 |
+
} // foreach active plugin
|
782 |
+
|
783 |
+
if ( ! empty( $bad ) ) {
|
784 |
+
$plugins = get_plugins();
|
785 |
+
foreach ( $bad as $plugin_path => $tmp ) {
|
786 |
+
$bad[ $plugin_path ] = $plugins[ $plugin_path ]['Name'];
|
787 |
+
}
|
788 |
+
}
|
789 |
+
|
790 |
+
return array(
|
791 |
+
'value' => ( empty( $bad ) ? __( 'All plugins are up to date', _HMW_PLUGIN_NAME_ ) : implode( '<br />', $bad ) ),
|
792 |
+
'valid' => empty( $bad ),
|
793 |
+
);
|
794 |
+
|
795 |
+
}
|
796 |
+
|
797 |
+
/**
|
798 |
+
* Check incompatible plugins
|
799 |
+
* @return array
|
800 |
+
*/
|
801 |
+
public function checkIncompatiblePlugins() {
|
802 |
+
//return false;
|
803 |
+
global $hmw_plugin_details, $wp_version;
|
804 |
+
|
805 |
+
$good = $bad = array();
|
806 |
+
|
807 |
+
if ( empty( $hmw_plugin_details ) ) {
|
808 |
+
$this->checkOldPlugins();
|
809 |
+
}
|
810 |
+
|
811 |
+
foreach ( $hmw_plugin_details as $plugin_path => $plugin ) {
|
812 |
+
if ( version_compare( $wp_version, $plugin['tested'], '>' ) ) {
|
813 |
+
$bad[ $plugin_path ] = $plugin;
|
814 |
+
} else {
|
815 |
+
$good[ $plugin_path ] = $plugin;
|
816 |
+
}
|
817 |
+
} // foreach active plugins we have details on
|
818 |
+
|
819 |
+
HMW_Debug::dump( $bad );
|
820 |
+
if ( ! empty( $bad ) ) {
|
821 |
+
$plugins = get_plugins();
|
822 |
+
foreach ( $bad as $plugin_path => $tmp ) {
|
823 |
+
$bad[ $plugin_path ] = $plugins[ $plugin_path ]['Name'];
|
824 |
+
}
|
825 |
+
}
|
826 |
+
|
827 |
+
return array(
|
828 |
+
'value' => ( empty( $bad ) ? __( 'All plugins are compatible', _HMW_PLUGIN_NAME_ ) : implode( '<br />', $bad ) ),
|
829 |
+
'valid' => empty( $bad ),
|
830 |
+
);
|
831 |
+
|
832 |
+
}
|
833 |
+
|
834 |
+
/**
|
835 |
+
* Check if version is displayed in source code
|
836 |
+
* @return array
|
837 |
+
*/
|
838 |
+
public function checkVersionDisplayed() {
|
839 |
+
$version = HMW_Classes_Tools::getOption( 'hmw_hide_version' );
|
840 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) {
|
841 |
+
$version = false;
|
842 |
+
}
|
843 |
+
|
844 |
+
return array(
|
845 |
+
'value' => ( $version ? 'Removed' : 'Visible' ),
|
846 |
+
'valid' => ( $version ),
|
847 |
+
);
|
848 |
+
}
|
849 |
+
|
850 |
+
/**
|
851 |
+
* Check if PHP is exposed
|
852 |
+
* @return array
|
853 |
+
*/
|
854 |
+
public function checkExposedPHP() {
|
855 |
+
$check = (bool) ini_get( 'expose_php' );
|
856 |
+
|
857 |
+
return array(
|
858 |
+
'value' => ( $check ? 'Yes' : 'No' ),
|
859 |
+
'valid' => ( ! $check ),
|
860 |
+
);
|
861 |
+
|
862 |
+
}
|
863 |
+
|
864 |
+
/**
|
865 |
+
* Check Database Prefix
|
866 |
+
* @return array
|
867 |
+
*/
|
868 |
+
public function checkDBPrefix() {
|
869 |
+
global $wpdb;
|
870 |
+
|
871 |
+
return array(
|
872 |
+
'value' => $wpdb->prefix,
|
873 |
+
'valid' => ! ( $wpdb->prefix == 'wp_' && $wpdb->prefix == 'wordpress_' && $wpdb->prefix == 'wp3_' ),
|
874 |
+
);
|
875 |
+
}
|
876 |
+
|
877 |
+
/**
|
878 |
+
* Check Salt Keys
|
879 |
+
* @return array
|
880 |
+
*/
|
881 |
+
public function checkSaltKeys() {
|
882 |
+
$keys = array(
|
883 |
+
'AUTH_KEY',
|
884 |
+
'SECURE_AUTH_KEY',
|
885 |
+
'LOGGED_IN_KEY',
|
886 |
+
'NONCE_KEY',
|
887 |
+
'AUTH_SALT',
|
888 |
+
'SECURE_AUTH_SALT',
|
889 |
+
'LOGGED_IN_SALT',
|
890 |
+
'NONCE_SALT'
|
891 |
+
);
|
892 |
+
|
893 |
+
foreach ( $keys as $key ) {
|
894 |
+
$constant = @constant( $key );
|
895 |
+
if ( empty( $constant ) || trim( $constant ) == 'put your unique phrase here' || strlen( $constant ) < 50 ) {
|
896 |
+
$bad_keys[] = $key;
|
897 |
+
}
|
898 |
+
} // foreach
|
899 |
+
|
900 |
+
return array(
|
901 |
+
'value' => ( ! empty( $bad_keys ) ? implode( ', ', $bad_keys ) : __( 'Yes', _HMW_PLUGIN_NAME_ ) ),
|
902 |
+
'valid' => empty( $bad_keys ),
|
903 |
+
);
|
904 |
+
|
905 |
+
}
|
906 |
+
|
907 |
+
/**
|
908 |
+
* Check if wp-config.php has the right chmod
|
909 |
+
*
|
910 |
+
* @return array|false
|
911 |
+
*/
|
912 |
+
public function checkSaltKeysAge() {
|
913 |
+
$old = 95;
|
914 |
+
|
915 |
+
if ( file_exists( HMW_Classes_Tools::getRootPath() . 'wp-config.php' ) ) {
|
916 |
+
$age = @filemtime( HMW_Classes_Tools::getRootPath() . 'wp-config.php' );
|
917 |
+
|
918 |
+
if ( ! empty( $age ) ) {
|
919 |
+
$diff = time() - $age;
|
920 |
+
|
921 |
+
return array(
|
922 |
+
'value' => ( ( $diff > ( DAY_IN_SECONDS * $old ) ) ? sprintf( __( '%s days since last update', _HMW_PLUGIN_NAME_ ), $diff ) : __( 'Updated', _HMW_PLUGIN_NAME_ ) ),
|
923 |
+
'valid' => ( $diff <= ( DAY_IN_SECONDS * $old ) ),
|
924 |
+
);
|
925 |
+
}
|
926 |
+
}
|
927 |
+
|
928 |
+
return false;
|
929 |
+
}
|
930 |
+
|
931 |
+
/**
|
932 |
+
* Check Database Password
|
933 |
+
* @return array
|
934 |
+
*/
|
935 |
+
public function checkDbPassword() {
|
936 |
+
$password = DB_PASSWORD;
|
937 |
+
|
938 |
+
if ( empty( $password ) ) {
|
939 |
+
return array(
|
940 |
+
'value' => __( 'Empty', _HMW_PLUGIN_NAME_ ),
|
941 |
+
'valid' => false,
|
942 |
+
);
|
943 |
+
} elseif ( strlen( $password ) < 6 ) {
|
944 |
+
return array(
|
945 |
+
'value' => __( 'only ' . strlen( $password ) . ' chars', _HMW_PLUGIN_NAME_ ),
|
946 |
+
'valid' => false,
|
947 |
+
);
|
948 |
+
} elseif ( sizeof( count_chars( $password, 1 ) ) < 5 ) {
|
949 |
+
return array(
|
950 |
+
'value' => __( 'too simple', _HMW_PLUGIN_NAME_ ),
|
951 |
+
'valid' => false,
|
952 |
+
);
|
953 |
+
} else {
|
954 |
+
return array(
|
955 |
+
'value' => __( 'Good', _HMW_PLUGIN_NAME_ ),
|
956 |
+
'valid' => true,
|
957 |
+
);
|
958 |
+
}
|
959 |
+
}
|
960 |
+
|
961 |
+
/**
|
962 |
+
* Check if display_errors is off
|
963 |
+
* @return array
|
964 |
+
*/
|
965 |
+
public function checkDisplayErrors() {
|
966 |
+
$check = ini_get( 'display_errors' );
|
967 |
+
|
968 |
+
return array(
|
969 |
+
'value' => $check,
|
970 |
+
'valid' => ! (bool) $check,
|
971 |
+
);
|
972 |
+
}
|
973 |
+
|
974 |
+
/**
|
975 |
+
* Compare WP Blog Url with WP Site Url
|
976 |
+
*
|
977 |
+
* @return array
|
978 |
+
*/
|
979 |
+
public function checkBlogSiteURL() {
|
980 |
+
$siteurl = home_url();
|
981 |
+
$wpurl = site_url();
|
982 |
+
|
983 |
+
return array(
|
984 |
+
'value' => ( ( $siteurl == $wpurl ) ? __( 'Yes' ) : __( 'No' ) ),
|
985 |
+
'valid' => ( $siteurl <> $wpurl ),
|
986 |
+
);
|
987 |
+
|
988 |
+
}
|
989 |
+
|
990 |
+
/**
|
991 |
+
* Check if wp-config.php has the right chmod
|
992 |
+
* @return array|bool
|
993 |
+
*/
|
994 |
+
public function checkConfigChmod() {
|
995 |
+
$wp_config = HMW_Classes_Tools::getRootPath() . 'wp-config.php';
|
996 |
+
|
997 |
+
if ( file_exists( $wp_config ) ) {
|
998 |
+
if ( HMW_Classes_Tools::isWindows() ) {
|
999 |
+
return array(
|
1000 |
+
'value' => ( ( is_writeable( $wp_config ) ) ? __( 'Yes' ) : __( 'No' ) ),
|
1001 |
+
'valid' => ( ! is_writeable( $wp_config ) ),
|
1002 |
+
'solution' => sprintf( __( "Change the wp-config.php file permission to Read-Only using File Manager.", _HMW_PLUGIN_NAME_ ), '<a href="http://www.filepermissions.com/directory-permission/0400" target="_blank">', '</a>', '<a href="http://www.filepermissions.com/directory-permission/0440" target="_blank">', '</a>' ),
|
1003 |
+
);
|
1004 |
+
} else {
|
1005 |
+
$mode = substr( sprintf( '%o', @fileperms( $wp_config ) ), - 4 );
|
1006 |
+
|
1007 |
+
return array(
|
1008 |
+
'value' => ( ( substr( $mode, - 1 ) != 0 ) ? __( 'Yes' ) : __( 'No' ) ),
|
1009 |
+
'valid' => ( substr( $mode, - 1 ) == 0 ),
|
1010 |
+
);
|
1011 |
+
}
|
1012 |
+
}
|
1013 |
+
|
1014 |
+
return false;
|
1015 |
+
}
|
1016 |
+
|
1017 |
+
/**
|
1018 |
+
* Check wp-config.php file
|
1019 |
+
* @return array
|
1020 |
+
*/
|
1021 |
+
public function checkConfig() {
|
1022 |
+
$url = home_url( 'wp-config.php?rnd=' . rand() );
|
1023 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1024 |
+
|
1025 |
+
$visible = false;
|
1026 |
+
if ( ! is_wp_error( $response ) ) {
|
1027 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1028 |
+
$visible = true;
|
1029 |
+
}
|
1030 |
+
}
|
1031 |
+
|
1032 |
+
$url = home_url( 'wp-config-sample.php?rnd=' . rand() );
|
1033 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1034 |
+
|
1035 |
+
if ( ! is_wp_error( $response ) ) {
|
1036 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1037 |
+
$visible = true;
|
1038 |
+
}
|
1039 |
+
}
|
1040 |
+
|
1041 |
+
return array(
|
1042 |
+
'value' => ( $visible ? 'Yes' : 'No' ),
|
1043 |
+
'valid' => ( ! $visible ),
|
1044 |
+
);
|
1045 |
+
}
|
1046 |
+
|
1047 |
+
/**
|
1048 |
+
* Check readme.html file
|
1049 |
+
* @return array
|
1050 |
+
*/
|
1051 |
+
public function checkReadme() {
|
1052 |
+
$url = home_url( 'readme.html?rnd=' . rand() );
|
1053 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1054 |
+
|
1055 |
+
$visible = false;
|
1056 |
+
if ( ! is_wp_error( $response ) ) {
|
1057 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1058 |
+
$visible = true;
|
1059 |
+
}
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
return array(
|
1063 |
+
'value' => ( $visible ? 'Yes' : 'No' ),
|
1064 |
+
'valid' => ( ! $visible ),
|
1065 |
+
);
|
1066 |
+
}
|
1067 |
+
|
1068 |
+
|
1069 |
+
/**
|
1070 |
+
* Does WP install.php file exist?
|
1071 |
+
* @return array
|
1072 |
+
*/
|
1073 |
+
public function checkInstall() {
|
1074 |
+
$url = site_url() . '/wp-admin/install.php?rnd=' . rand();
|
1075 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1076 |
+
|
1077 |
+
$visible = false;
|
1078 |
+
if ( ! is_wp_error( $response ) ) {
|
1079 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1080 |
+
$visible = true;
|
1081 |
+
}
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
return array(
|
1085 |
+
'value' => ( $visible ? __( 'Yes' ) : __( 'No' ) ),
|
1086 |
+
'valid' => ( ! $visible ),
|
1087 |
+
);
|
1088 |
+
}
|
1089 |
+
|
1090 |
+
/**
|
1091 |
+
* Check if register_globals is off
|
1092 |
+
*
|
1093 |
+
* @return array
|
1094 |
+
*/
|
1095 |
+
public function checkRegisterGlobals() {
|
1096 |
+
$check = (bool) ini_get( 'register' . '_globals' );
|
1097 |
+
|
1098 |
+
return array(
|
1099 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1100 |
+
'valid' => ( ! $check ),
|
1101 |
+
);
|
1102 |
+
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
/**
|
1106 |
+
* Check if safe mode is off
|
1107 |
+
*
|
1108 |
+
* @return array
|
1109 |
+
*/
|
1110 |
+
public function checkPHPSafe() {
|
1111 |
+
$check = (bool) ini_get( 'safe' . '_mode' );
|
1112 |
+
|
1113 |
+
return array(
|
1114 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1115 |
+
'valid' => ( ! $check ),
|
1116 |
+
);
|
1117 |
+
|
1118 |
+
}
|
1119 |
+
|
1120 |
+
/**
|
1121 |
+
* Check if allow_url_include is off
|
1122 |
+
* @return array
|
1123 |
+
*/
|
1124 |
+
public function checkAllowUrlInclude() {
|
1125 |
+
$check = (bool) ini_get( 'allow_url_include' );
|
1126 |
+
|
1127 |
+
return array(
|
1128 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1129 |
+
'valid' => ( ! $check ),
|
1130 |
+
);
|
1131 |
+
}
|
1132 |
+
|
1133 |
+
/**
|
1134 |
+
* Is theme/plugin editor disabled?
|
1135 |
+
* @return array
|
1136 |
+
*/
|
1137 |
+
public function checkAdminEditor() {
|
1138 |
+
if ( defined( 'DISALLOW_FILE_EDIT' ) ) {
|
1139 |
+
return array(
|
1140 |
+
'value' => ( DISALLOW_FILE_EDIT ? __( 'Yes' ) : __( 'No' ) ),
|
1141 |
+
'valid' => DISALLOW_FILE_EDIT,
|
1142 |
+
);
|
1143 |
+
} else {
|
1144 |
+
return array(
|
1145 |
+
'value' => __( 'Yes' ),
|
1146 |
+
'valid' => false,
|
1147 |
+
);
|
1148 |
+
}
|
1149 |
+
}
|
1150 |
+
|
1151 |
+
|
1152 |
+
/**
|
1153 |
+
* Check if Upload Folder is browsable
|
1154 |
+
* @return array|bool
|
1155 |
+
*/
|
1156 |
+
public function checkUploadsBrowsable() {
|
1157 |
+
$upload_dir = wp_upload_dir();
|
1158 |
+
|
1159 |
+
$args = array(
|
1160 |
+
'method' => 'GET',
|
1161 |
+
'timeout' => 5,
|
1162 |
+
'redirection' => 0,
|
1163 |
+
'sslverify' => false,
|
1164 |
+
'httpversion' => 1.0,
|
1165 |
+
'blocking' => true,
|
1166 |
+
'headers' => array(),
|
1167 |
+
'body' => null,
|
1168 |
+
'cookies' => array()
|
1169 |
+
);
|
1170 |
+
$response = wp_remote_get( rtrim( $upload_dir['baseurl'], '/' ) . '/?nocache=' . rand(), $args );
|
1171 |
+
|
1172 |
+
if ( is_wp_error( $response ) ) {
|
1173 |
+
$return = array(
|
1174 |
+
'value' => __( 'No' ),
|
1175 |
+
'valid' => true,
|
1176 |
+
);
|
1177 |
+
} elseif ( wp_remote_retrieve_response_code( $response ) == 200 && stripos( $response['body'], 'index' ) !== false ) {
|
1178 |
+
$return = array(
|
1179 |
+
'value' => __( 'Yes' ),
|
1180 |
+
'valid' => false,
|
1181 |
+
);
|
1182 |
+
} else {
|
1183 |
+
$return = array(
|
1184 |
+
'value' => __( 'No' ),
|
1185 |
+
'valid' => true,
|
1186 |
+
);
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
if ( ! HMW_Classes_Tools::isApache() && ! HMW_Classes_Tools::isNginx() && ! HMW_Classes_Tools::isLitespeed() ) {
|
1190 |
+
$return['javascript'] = '';
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
return $return;
|
1194 |
+
}
|
1195 |
+
|
1196 |
+
/**
|
1197 |
+
* Check if Wondows Live Writer is not disabled
|
1198 |
+
*
|
1199 |
+
* @return array
|
1200 |
+
*/
|
1201 |
+
public function checkWLW() {
|
1202 |
+
$check = ( ! HMW_Classes_Tools::getOption( 'hmw_disable_manifest' ) );
|
1203 |
+
|
1204 |
+
return array(
|
1205 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1206 |
+
'valid' => ( ! $check ),
|
1207 |
+
);
|
1208 |
+
|
1209 |
+
}
|
1210 |
+
|
1211 |
+
/**
|
1212 |
+
* Check if XML PRC
|
1213 |
+
*
|
1214 |
+
* @return array
|
1215 |
+
*/
|
1216 |
+
public function checkXmlrpc() {
|
1217 |
+
$check = ( ! HMW_Classes_Tools::getOption( 'hmw_disable_xmlrpc' ) );
|
1218 |
+
|
1219 |
+
return array(
|
1220 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1221 |
+
'valid' => ( ! $check ),
|
1222 |
+
);
|
1223 |
+
|
1224 |
+
}
|
1225 |
+
|
1226 |
+
/**
|
1227 |
+
* Check if XML PRC
|
1228 |
+
*
|
1229 |
+
* @return array
|
1230 |
+
*/
|
1231 |
+
public function checkRDS() {
|
1232 |
+
$check = ( ! HMW_Classes_Tools::getOption( 'hmw_hide_header' ) );
|
1233 |
+
|
1234 |
+
return array(
|
1235 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1236 |
+
'valid' => ( ! $check ),
|
1237 |
+
);
|
1238 |
+
|
1239 |
+
}
|
1240 |
+
|
1241 |
+
/**
|
1242 |
+
* Check if the WP MySQL user has too many permissions granted
|
1243 |
+
* @return array
|
1244 |
+
*/
|
1245 |
+
static function checkMysqlPermissions() {
|
1246 |
+
global $wpdb;
|
1247 |
+
|
1248 |
+
$grants = $wpdb->get_results( 'SHOW GRANTS', ARRAY_N );
|
1249 |
+
foreach ( $grants as $grant ) {
|
1250 |
+
if ( stripos( $grant[0], 'GRANT ALL PRIVILEGES' ) !== false ) {
|
1251 |
+
return array(
|
1252 |
+
'value' => __( 'Yes' ),
|
1253 |
+
'valid' => false,
|
1254 |
+
);
|
1255 |
+
break;
|
1256 |
+
}
|
1257 |
+
}
|
1258 |
+
|
1259 |
+
return array(
|
1260 |
+
'value' => __( 'no' ),
|
1261 |
+
'valid' => true,
|
1262 |
+
);
|
1263 |
+
}
|
1264 |
+
|
1265 |
+
/**
|
1266 |
+
* Check if an user can be found by its ID
|
1267 |
+
* @return mixed
|
1268 |
+
*/
|
1269 |
+
static function checkUsersById() {
|
1270 |
+
$users = get_users( 'number=5' );
|
1271 |
+
$success = false;
|
1272 |
+
$url = home_url() . '/?author=';
|
1273 |
+
|
1274 |
+
foreach ( $users as $user ) {
|
1275 |
+
$response = wp_remote_get( $url . $user->ID, array( 'redirection' => 0 ) );
|
1276 |
+
$response_code = wp_remote_retrieve_response_code( $response );
|
1277 |
+
if ( $response_code == 301 ) {
|
1278 |
+
$success = true;
|
1279 |
+
break;
|
1280 |
+
}
|
1281 |
+
} // foreach
|
1282 |
+
|
1283 |
+
return array(
|
1284 |
+
'value' => ( $success ? __( 'Yes' ) : __( 'No' ) ),
|
1285 |
+
'valid' => ( ! $success ),
|
1286 |
+
);
|
1287 |
+
}
|
1288 |
+
|
1289 |
+
/**
|
1290 |
+
* Check if XML PRC
|
1291 |
+
*
|
1292 |
+
* @return array|bool
|
1293 |
+
*/
|
1294 |
+
public function checkOldPaths() {
|
1295 |
+
$url = site_url() . '/' . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/';
|
1296 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1297 |
+
|
1298 |
+
$visible = false;
|
1299 |
+
if ( ! is_wp_error( $response ) ) {
|
1300 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1301 |
+
$visible = true;
|
1302 |
+
}
|
1303 |
+
}
|
1304 |
+
|
1305 |
+
return array(
|
1306 |
+
'value' => ( $visible ? __( 'Yes' ) : __( 'No' ) ),
|
1307 |
+
'valid' => ( ! $visible ),
|
1308 |
+
);
|
1309 |
+
|
1310 |
+
}
|
1311 |
+
|
1312 |
+
/**
|
1313 |
+
* Check the Old paths in source code
|
1314 |
+
* @return array|bool
|
1315 |
+
*/
|
1316 |
+
public function checkCommonPaths() {
|
1317 |
+
if ( ! isset( $this->html ) ) {
|
1318 |
+
if ( ! $this->getSourceCode() ) {
|
1319 |
+
return false;
|
1320 |
+
}
|
1321 |
+
}
|
1322 |
+
|
1323 |
+
if ( ! $found = strpos( $this->html, content_url() ) ) {
|
1324 |
+
$found = strpos( $this->html, plugins_url() );
|
1325 |
+
}
|
1326 |
+
|
1327 |
+
return array(
|
1328 |
+
'value' => ( $found ? __( 'Yes' ) : __( 'No' ) ),
|
1329 |
+
'valid' => ( ! $found ),
|
1330 |
+
);
|
1331 |
+
|
1332 |
+
}
|
1333 |
+
|
1334 |
+
/**
|
1335 |
+
* Check the Login path in source code
|
1336 |
+
* @return array|bool
|
1337 |
+
*/
|
1338 |
+
public function checkLoginPath() {
|
1339 |
+
if ( ! isset( $this->html ) ) {
|
1340 |
+
if ( ! $this->getSourceCode() ) {
|
1341 |
+
return false;
|
1342 |
+
}
|
1343 |
+
}
|
1344 |
+
|
1345 |
+
if ( ! $found = strpos( $this->html, home_url( 'wp-login.php' ) ) ) {
|
1346 |
+
$found = strpos( $this->html, home_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) );
|
1347 |
+
}
|
1348 |
+
|
1349 |
+
return array(
|
1350 |
+
'value' => ( $found ? __( 'Yes' ) : __( 'No' ) ),
|
1351 |
+
'valid' => ( ! $found ),
|
1352 |
+
);
|
1353 |
+
|
1354 |
+
}
|
1355 |
+
|
1356 |
+
/**
|
1357 |
+
* Check the Admin path in source code
|
1358 |
+
* @return array|bool
|
1359 |
+
*/
|
1360 |
+
public function checkAdminPath() {
|
1361 |
+
if ( ! isset( $this->html ) ) {
|
1362 |
+
if ( ! $this->getSourceCode() ) {
|
1363 |
+
return false;
|
1364 |
+
}
|
1365 |
+
}
|
1366 |
+
|
1367 |
+
$found = strpos( $this->html, home_url( HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) );
|
1368 |
+
|
1369 |
+
return array(
|
1370 |
+
'value' => ( $found ? __( 'Yes' ) : __( 'No' ) ),
|
1371 |
+
'valid' => ( ! $found ),
|
1372 |
+
);
|
1373 |
+
|
1374 |
+
}
|
1375 |
+
|
1376 |
+
/**
|
1377 |
+
* Check if wp-admin is accessible for visitors
|
1378 |
+
* @return array
|
1379 |
+
*/
|
1380 |
+
public function checkOldLogin() {
|
1381 |
+
$url = site_url() . '/wp-login.php';
|
1382 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1383 |
+
|
1384 |
+
$visible = false;
|
1385 |
+
if ( ! is_wp_error( $response ) ) {
|
1386 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1387 |
+
$visible = true;
|
1388 |
+
}
|
1389 |
+
}
|
1390 |
+
|
1391 |
+
return array(
|
1392 |
+
'value' => ( $visible ? __( 'Yes' ) : __( 'No' ) ),
|
1393 |
+
'valid' => ( ! $visible ),
|
1394 |
+
);
|
1395 |
+
}
|
1396 |
+
|
1397 |
+
/**
|
1398 |
+
* Check if anyone can register easily
|
1399 |
+
* @return array
|
1400 |
+
*/
|
1401 |
+
public function checkUserRegistration() {
|
1402 |
+
$check = ( get_option( 'users_can_register' ) );
|
1403 |
+
if ( $check ) {
|
1404 |
+
$check = ( HMW_Classes_Tools::getOption( 'hmw_register_url' ) == '' );
|
1405 |
+
}
|
1406 |
+
|
1407 |
+
return array(
|
1408 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1409 |
+
'valid' => ( ! $check ),
|
1410 |
+
);
|
1411 |
+
}
|
1412 |
+
|
1413 |
+
public function checkBlogDescription() {
|
1414 |
+
$check = ( get_option( 'blogdescription' ) == __( 'Just another WordPress site' ) );
|
1415 |
+
|
1416 |
+
return array(
|
1417 |
+
'value' => ( $check ? __( 'Yes' ) : __( 'No' ) ),
|
1418 |
+
'valid' => ( ! $check ),
|
1419 |
+
);
|
1420 |
+
}
|
1421 |
+
|
1422 |
+
/**
|
1423 |
+
* Get the homepage source code
|
1424 |
+
* @return string
|
1425 |
+
*/
|
1426 |
+
public function getSourceCode() {
|
1427 |
+
if ( ! isset( $this->html ) && ! isset( $this->htmlerror ) ) {
|
1428 |
+
$url = home_url( '?rnd=' . rand() );
|
1429 |
+
$response = wp_remote_get( $url, array( 'redirection' => 0 ) );
|
1430 |
+
|
1431 |
+
if ( ! is_wp_error( $response ) ) {
|
1432 |
+
if ( wp_remote_retrieve_response_code( $response ) == 200 ) {
|
1433 |
+
$this->html = wp_remote_retrieve_body( $response );
|
1434 |
+
} else {
|
1435 |
+
$this->htmlerror = true;
|
1436 |
+
$this->html = false;
|
1437 |
+
}
|
1438 |
+
} else {
|
1439 |
+
$this->htmlerror = true;
|
1440 |
+
$this->html = false;
|
1441 |
+
}
|
1442 |
+
}
|
1443 |
+
|
1444 |
+
return $this->html;
|
1445 |
+
}
|
1446 |
+
}
|
controllers/Settings.php
ADDED
@@ -0,0 +1,603 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Controllers_Settings extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
public $tabs;
|
7 |
+
public $logout = false;
|
8 |
+
public $show_token = false;
|
9 |
+
public $plugins;
|
10 |
+
|
11 |
+
public function __construct() {
|
12 |
+
parent::__construct();
|
13 |
+
|
14 |
+
//Show the errors when not on Hide My WP Settings
|
15 |
+
if ( HMW_Classes_Tools::getOption( 'logout' ) && ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
16 |
+
if ( HMW_Classes_Tools::getValue( 'action' ) == '' && HMW_Classes_Tools::getValue( 'page' ) <> 'hmw_settings' ) {
|
17 |
+
add_action( 'admin_notices', array( $this, 'showReconnectError' ) );
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
//If save settings is required, show the alert
|
22 |
+
if ( HMW_Classes_Tools::getOption( 'changes' ) ) {
|
23 |
+
if ( HMW_Classes_Tools::getValue( 'page' ) <> 'hmw_settings' ) {
|
24 |
+
add_action( 'admin_notices', array( $this, 'showSaveRequires' ) );
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
public function init() {
|
31 |
+
//We need that function so make sure is loaded
|
32 |
+
if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
|
33 |
+
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
|
34 |
+
}
|
35 |
+
|
36 |
+
//Add the Plugin Paths in variable
|
37 |
+
$this->plugins = $this->model->getPlugins();
|
38 |
+
|
39 |
+
if ( HMW_Classes_Tools::getOption( 'changes' ) ) {
|
40 |
+
add_action( 'hmw_form_notices', array( $this, 'showSaveButton' ) );
|
41 |
+
}
|
42 |
+
|
43 |
+
if ( HMW_Classes_Tools::isNginx() && HMW_Classes_Tools::getOption( 'test_frontend' ) && HMW_Classes_Tools::getOption( 'hmw_mode' ) <> 'default' ) {
|
44 |
+
$config_file = HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->getConfFile();
|
45 |
+
HMW_Classes_Error::setError( sprintf( __( "NGINX detected. In case you didn't add the code in the NGINX config already, please add the following line. %s", _HMW_PLUGIN_NAME_ ), '<strong><a href="https://hidemywpghost.com/how-to-setup-hide-my-wp-on-nginx-server/" target="_blank" style="color: red">' . __( "Learn How To Add the Code", _HMW_PLUGIN_NAME_ ) . '</a></strong> <br /><br /><code><strong>include ' . $config_file . ';</strong></code> <br /><br /><h4>' . __( "Don't forget to reload the Nginx service.", _HMW_PLUGIN_NAME_ ) . ' ' . '<strong><a href="http://hidemywp.co/article/how-to-setup-hide-my-wp-on-nginx-server/" target="_blank" style="color: red">' . __( "Learn How", _HMW_PLUGIN_NAME_ ) . '</a></strong>' ) );
|
46 |
+
}
|
47 |
+
|
48 |
+
//Settings Alerts based on Logout and Error statements
|
49 |
+
if ( get_transient( 'hmw_restore' ) == 1 ) {
|
50 |
+
$restoreForm = '
|
51 |
+
<form method="POST">
|
52 |
+
' . wp_nonce_field( 'hmw_abort', 'hmw_nonce', true, false ) . '
|
53 |
+
<input type="hidden" name="action" value="hmw_abort" />
|
54 |
+
<input type="submit" class="hmw_btn hmw_btn-warning" value="' . __( "Restore Settings", _HMW_PLUGIN_NAME_ ) . '" />
|
55 |
+
</form>
|
56 |
+
';
|
57 |
+
HMW_Classes_Error::setError( __( 'You want to restore the last saved settings? ', _HMW_PLUGIN_NAME_ ) . '<div class="hmw_abort" style="display: inline-block;">' . $restoreForm . '</div>' );
|
58 |
+
// Delete the redirect transient
|
59 |
+
delete_transient( 'hmw_restore' );
|
60 |
+
|
61 |
+
}
|
62 |
+
|
63 |
+
//Check compatibilities with other plugins
|
64 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Compatibility' )->getAlerts();
|
65 |
+
|
66 |
+
//Load the css for Settings
|
67 |
+
if(is_rtl()) {
|
68 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'popper.min' );
|
69 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'bootstrap.rtl.min' );
|
70 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'rtl' );
|
71 |
+
}else{
|
72 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'popper.min' );
|
73 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'bootstrap.min' );
|
74 |
+
}
|
75 |
+
|
76 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'font-awesome.min' );
|
77 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'switchery.min' );
|
78 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'settings' );
|
79 |
+
|
80 |
+
//Show Hide My WP Offer
|
81 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'lite' && date('d') >= 15 && date('d') <= 31) {
|
82 |
+
HMW_Classes_Error::setError( sprintf( __( '%sLimited Time Offer%s: Get %s65%% OFF%s today on Hide My WP Ghost 5 Websites License. %sHurry Up!%s', _HMW_PLUGIN_NAME_ ), '<a href="https://wpplugins.tips/buy/5_websites_special" target="_blank" style="font-weight: bold"><strong style="color: red">', '</strong></a>', '<a href="https://wpplugins.tips/buy/5_websites_special" target="_blank" style="font-weight: bold"><strong style="color: red">', '</strong></a>', '<a href="https://wpplugins.tips/buy/5_websites_special" target="_blank" style="font-weight: bold">', '</a>' ) );
|
83 |
+
}
|
84 |
+
|
85 |
+
//Show errors on top
|
86 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Error' )->hookNotices();
|
87 |
+
|
88 |
+
|
89 |
+
//Show connect for activation
|
90 |
+
if ( ! HMW_Classes_Tools::getOption( 'hmw_token' ) ) {
|
91 |
+
echo $this->getView( 'Connect' );
|
92 |
+
|
93 |
+
return;
|
94 |
+
}
|
95 |
+
|
96 |
+
//Add the Menu Tabs in variable
|
97 |
+
$this->tabs = $this->model->getTabs();
|
98 |
+
|
99 |
+
//Check if it's a subpage
|
100 |
+
$page = HMW_Classes_Tools::getValue( 'page', 'hmw_settings' );
|
101 |
+
if ( strpos( $page, '-' ) !== false ) {
|
102 |
+
$_GET['tab'] = substr( $page, ( strpos( $page, '-' ) + 1 ) );
|
103 |
+
}
|
104 |
+
|
105 |
+
//Show the Tab Content
|
106 |
+
foreach ( $this->tabs as $slug => $value ) {
|
107 |
+
if ( HMW_Classes_Tools::getValue( 'tab', 'hmw_permalinks' ) == $slug ) {
|
108 |
+
if ( isset( $value['class'] ) && $value['class'] <> '' ) {
|
109 |
+
echo HMW_Classes_ObjController::getClass( $value['class'] )->init()->getView();
|
110 |
+
} else {
|
111 |
+
echo $this->getView( ucfirst( str_replace( 'hmw_', '', $slug ) ) );
|
112 |
+
}
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Show this message to notify the user when to update th esettings
|
121 |
+
*/
|
122 |
+
public function showSaveRequires() {
|
123 |
+
global $pagenow;
|
124 |
+
if ( $pagenow == 'plugins.php' ) {
|
125 |
+
?>
|
126 |
+
<div class="hmw_notice error notice" style="margin-left: 0;">
|
127 |
+
<div style="display: inline-block;">
|
128 |
+
<p>
|
129 |
+
<?php echo sprintf( __( "New Plugin/Theme detected! You need to save the Hide My WP Setting again to include them all! %sClick here%s", _HMW_PLUGIN_NAME_ ), '<a href="' . HMW_Classes_Tools::getSettingsUrl() . '" >', '</a>' ); ?>
|
130 |
+
</p>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
+
<?php
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
public function showSaveButton() {
|
138 |
+
?>
|
139 |
+
<div class="col-sm-12 mx-0 hmw_notice error notice">
|
140 |
+
<div style="display: inline-block;">
|
141 |
+
<p>
|
142 |
+
<?php echo sprintf( __( "New Plugin/Theme detected! You need to save the Hide My WP Setting again to include them all! %sSave Settings%s", _HMW_PLUGIN_NAME_ ), '<button type="submit" class="btn btn-success btn-sm mx-2">', '</button>' ); ?>
|
143 |
+
</p>
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
<?php
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Show the reconnect alert on all pages
|
151 |
+
*/
|
152 |
+
public function showReconnectError() {
|
153 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_DisplayController' )->loadMedia( 'alert' );
|
154 |
+
?>
|
155 |
+
<div class="hmw_notice error notice" style="margin-left: 0; padding: 5px;">
|
156 |
+
<div style="display: inline-block;">
|
157 |
+
<p>
|
158 |
+
<?php echo sprintf( __( "To activate the new %sHide My WP %s %s settings you need to confirm and re-login!", _HMW_PLUGIN_NAME_ ), '<strong>', _HMW_VER_NAME_, '</strong>' ); ?>
|
159 |
+
</p>
|
160 |
+
</div>
|
161 |
+
|
162 |
+
<div class="hmw_logout">
|
163 |
+
<form method="POST" action="<?php echo HMW_Classes_Tools::getSettingsUrl() ?>">
|
164 |
+
<?php wp_nonce_field( 'hmw_logout', 'hmw_nonce' ) ?>
|
165 |
+
<input type="hidden" name="action" value="hmw_logout"/>
|
166 |
+
<input type="submit" class="hmw_btn hmw_btn-success" value="<?php echo __( "Yes, I'm ready to re-login", _HMW_PLUGIN_NAME_ ) ?>"/>
|
167 |
+
</form>
|
168 |
+
</div>
|
169 |
+
<div class="hmw_abort" style="display: inline-block;">
|
170 |
+
<form method="POST" action="<?php echo HMW_Classes_Tools::getSettingsUrl() ?>">
|
171 |
+
<?php wp_nonce_field( 'hmw_abort', 'hmw_nonce' ) ?>
|
172 |
+
<input type="hidden" name="action" value="hmw_abort"/>
|
173 |
+
<input type="submit" class="hmw_btn hmw_btn-warning" value="<?php echo __( "No, abort", _HMW_PLUGIN_NAME_ ) ?>"/>
|
174 |
+
</form>
|
175 |
+
</div>
|
176 |
+
|
177 |
+
</div>
|
178 |
+
<?php
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Get the Admin Toolbar
|
184 |
+
*
|
185 |
+
* @param null $current
|
186 |
+
*
|
187 |
+
* @return string
|
188 |
+
*/
|
189 |
+
public function getAdminTabs( $current = null ) {
|
190 |
+
//Add the Menu Tabs in variable if not set before
|
191 |
+
if ( ! isset( $this->tabs ) ) {
|
192 |
+
$this->tabs = $this->model->getTabs();
|
193 |
+
}
|
194 |
+
|
195 |
+
$content = '';
|
196 |
+
$content .= '<div class="hmw_nav d-flex flex-column bd-highlight mb-3">';
|
197 |
+
$content .= '<div class="m-0 p-4 font-dark text-logo"><a href="https://hidemywpghost.com/" target="_blank"><img src="' . _HMW_THEME_URL_ . 'img/logo.png" class="ml-0 mr-2" style="width:30px;"></a>' . __( 'Hide My WP', _HMW_PLUGIN_NAME_ ) . ' <span style="color: #d6cdd1">' . _HMW_VER_NAME_ . '</span></div>';
|
198 |
+
foreach ( $this->tabs as $location => $tab ) {
|
199 |
+
if ( $current == $location ) {
|
200 |
+
$class = 'active';
|
201 |
+
} else {
|
202 |
+
$class = '';
|
203 |
+
}
|
204 |
+
if ( $location == 'hmw_securitycheck' ) {
|
205 |
+
$content .= '<a class="m-0 p-4 font-dark hmw_nav_item ' . $class . ' fa fa-' . $tab['icon'] . '" href="' . HMW_Classes_Tools::getSettingsUrl( $location ) . '">';
|
206 |
+
} else {
|
207 |
+
$content .= '<a class="m-0 p-4 font-dark hmw_nav_item ' . $class . ' fa fa-' . $tab['icon'] . '" href="' . HMW_Classes_Tools::getSettingsUrl() . ( $location <> 'hmw_permalinks' ? '-' . $location : '' ) . '">';
|
208 |
+
}
|
209 |
+
$content .= '<span>' . $tab['title'] . '</span>';
|
210 |
+
$content .= '<span class="hmw_nav_item_description">' . $tab['description'] . '</span>';
|
211 |
+
$content .= '</a>';
|
212 |
+
}
|
213 |
+
if ( HMW_Classes_Tools::getOption( 'api_token' ) <> '' ) {
|
214 |
+
$content .= '<div class="m-2 p-4 hmw_nav_button"><a href="' . _HMW_ACCOUNT_SITE_ . '/api/auth/' . HMW_Classes_Tools::getOption( 'api_token' ) . '" class="btn btn-warning btn-lg rounded-0 text-white" target="_blank">' . __( 'My Account', _HMW_PLUGIN_NAME_ ) . '</a></div>';
|
215 |
+
}
|
216 |
+
$content .= '</div>';
|
217 |
+
|
218 |
+
return $content;
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Called when an action is triggered
|
223 |
+
*
|
224 |
+
* @return void
|
225 |
+
*/
|
226 |
+
public function action() {
|
227 |
+
parent::action();
|
228 |
+
|
229 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
230 |
+
return;
|
231 |
+
}
|
232 |
+
|
233 |
+
switch ( HMW_Classes_Tools::getValue( 'action' ) ) {
|
234 |
+
case 'hmw_settings':
|
235 |
+
|
236 |
+
//Save the settings
|
237 |
+
if ( ! empty( $_POST ) ) {
|
238 |
+
$this->model->savePermalinks( $_POST );
|
239 |
+
}
|
240 |
+
|
241 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
242 |
+
//Force the rechck security notification
|
243 |
+
delete_option( 'hmw_securitycheck_time' );
|
244 |
+
//Clear the cache if there are no errors
|
245 |
+
HMW_Classes_Tools::emptyCache();
|
246 |
+
//Flush the WordPress rewrites
|
247 |
+
HMW_Classes_Tools::flushWPRewrites();
|
248 |
+
}
|
249 |
+
|
250 |
+
//If no errors and no reconnect required
|
251 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
252 |
+
|
253 |
+
if ( ! HMW_Classes_Tools::getOption( 'logout' ) || HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) {
|
254 |
+
//Save the working options into backup
|
255 |
+
$options = HMW_Classes_Tools::getOptions();
|
256 |
+
foreach ( $options as $key => $value ) {
|
257 |
+
HMW_Classes_Tools::saveOptions( $key, $value, true );
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
|
262 |
+
//Send email notification about the path changed
|
263 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->sendEmail();
|
264 |
+
|
265 |
+
//Flush the changes
|
266 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->flushChanges();
|
267 |
+
|
268 |
+
HMW_Classes_Error::setError( __( 'Saved' ), 'success' );
|
269 |
+
|
270 |
+
//Redirect to the new admin URL
|
271 |
+
if ( HMW_Classes_Tools::getOption( 'logout' ) ) {
|
272 |
+
|
273 |
+
//Set the cookies for the current path
|
274 |
+
$cookies = HMW_Classes_ObjController::newInstance( 'HMW_Models_Cookies' );
|
275 |
+
|
276 |
+
if ( $cookies->setCookiesCurrentPath() ) {
|
277 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
278 |
+
//activate frontend test
|
279 |
+
HMW_Classes_Tools::saveOptions( 'test_frontend', true );
|
280 |
+
|
281 |
+
remove_all_filters( 'wp_redirect' );
|
282 |
+
remove_all_filters( 'admin_url' );
|
283 |
+
wp_safe_redirect( HMW_Classes_Tools::getSettingsUrl() );
|
284 |
+
exit();
|
285 |
+
}
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
break;
|
290 |
+
case 'hmw_tweakssettings':
|
291 |
+
//Save the settings
|
292 |
+
if ( ! empty( $_POST ) ) {
|
293 |
+
$this->model->saveValues( $_POST );
|
294 |
+
}
|
295 |
+
|
296 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
297 |
+
//Clear the cache if there are no errors
|
298 |
+
HMW_Classes_Tools::emptyCache();
|
299 |
+
HMW_Classes_Error::setError( __( 'Saved' ), 'success' );
|
300 |
+
}
|
301 |
+
|
302 |
+
break;
|
303 |
+
case 'hmw_mappsettings':
|
304 |
+
|
305 |
+
HMW_Classes_Tools::saveOptions( 'hmw_mapping_classes', HMW_Classes_Tools::getValue( 'hmw_mapping_classes' ) );
|
306 |
+
|
307 |
+
//Save the patterns as array
|
308 |
+
if ( $hmw_text_mapping_from = HMW_Classes_Tools::getValue( 'hmw_text_mapping_from', false ) ) {
|
309 |
+
if ( $hmw_text_mapping_to = HMW_Classes_Tools::getValue( 'hmw_text_mapping_to', false ) ) {
|
310 |
+
$hmw_text_mapping = array();
|
311 |
+
|
312 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_classes' ) ) {
|
313 |
+
$custom_classes = json_decode( HMW_Classes_Tools::getOption( 'hmw_hide_classes' ), true );
|
314 |
+
if ( ! empty( $custom_classes ) ) {
|
315 |
+
foreach ( $custom_classes as $custom_classe ) {
|
316 |
+
if ( ! in_array( $custom_classe, array( 'wp-image', 'wp-post', 'wp-caption' ) ) ) {
|
317 |
+
$hmw_text_mapping['from'][] = $custom_classe;
|
318 |
+
$hmw_text_mapping['to'][] = '';
|
319 |
+
}
|
320 |
+
}
|
321 |
+
HMW_Classes_Tools::saveOptions( 'hmw_hide_classes', json_encode( array() ) );
|
322 |
+
}
|
323 |
+
}
|
324 |
+
foreach ( $hmw_text_mapping_from as $index => $from ) {
|
325 |
+
if ( $hmw_text_mapping_from[ $index ] <> '' && $hmw_text_mapping_to[ $index ] <> '' ) {
|
326 |
+
$hmw_text_mapping_from[ $index ] = preg_replace( '/[^A-Za-z0-9-_\/\.]/', '', $hmw_text_mapping_from[ $index ] );
|
327 |
+
$hmw_text_mapping_to[ $index ] = preg_replace( '/[^A-Za-z0-9-_\/\.]/', '', $hmw_text_mapping_to[ $index ] );
|
328 |
+
|
329 |
+
if ( ! isset( $hmw_text_mapping['from'] ) || ! in_array( $hmw_text_mapping_from[ $index ], (array) $hmw_text_mapping['from'] ) ) {
|
330 |
+
//Don't save the wp-posts for Woodmart theme
|
331 |
+
if ( HMW_Classes_Tools::isPluginActive( 'woocommerce/woocommerce.php' ) ) {
|
332 |
+
if ( $hmw_text_mapping_from[ $index ] == 'wp-post' || $hmw_text_mapping_from[ $index ] == 'wp-post-image' ) {
|
333 |
+
continue;
|
334 |
+
}
|
335 |
+
}
|
336 |
+
|
337 |
+
if ( $hmw_text_mapping_from[ $index ] <> $hmw_text_mapping_to[ $index ] ) {
|
338 |
+
$hmw_text_mapping['from'][] = $hmw_text_mapping_from[ $index ];
|
339 |
+
$hmw_text_mapping['to'][] = $hmw_text_mapping_to[ $index ];
|
340 |
+
}
|
341 |
+
} else {
|
342 |
+
HMW_Classes_Error::setError( __( 'Error: You entered the same text twice in the Text Mapping. We removed the duplicates to prevent any redirect errors.' ) );
|
343 |
+
}
|
344 |
+
}
|
345 |
+
}
|
346 |
+
HMW_Classes_Tools::saveOptions( 'hmw_text_mapping', json_encode( $hmw_text_mapping ) );
|
347 |
+
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
//Clear the cache if there are no errors
|
352 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
353 |
+
//Clear the cache if there are no errors
|
354 |
+
HMW_Classes_Tools::emptyCache();
|
355 |
+
HMW_Classes_Error::setError( __( 'Saved' ), 'success' );
|
356 |
+
}
|
357 |
+
break;
|
358 |
+
case 'hmw_advsettings':
|
359 |
+
|
360 |
+
if ( ! empty( $_POST ) ) {
|
361 |
+
$this->model->saveValues( $_POST );
|
362 |
+
|
363 |
+
//Clear the cache if there are no errors
|
364 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
365 |
+
//Clear the cache if there are no errors
|
366 |
+
HMW_Classes_Tools::emptyCache();
|
367 |
+
HMW_Classes_Error::setError( __( 'Saved' ), 'success' );
|
368 |
+
}
|
369 |
+
}
|
370 |
+
|
371 |
+
break;
|
372 |
+
case 'hmw_abort':
|
373 |
+
//get the safe options from database
|
374 |
+
HMW_Classes_Tools::$options = HMW_Classes_Tools::getOptions( true );
|
375 |
+
//set th eprevious admin path
|
376 |
+
HMW_Classes_Tools::saveOptions( 'hmw_admin_url', HMW_Classes_Tools::getOption( 'hmw_admin_url' ) );
|
377 |
+
HMW_Classes_Tools::saveOptions( 'error', false );
|
378 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
379 |
+
|
380 |
+
//Clear the cache if there are no errors
|
381 |
+
HMW_Classes_Tools::emptyCache();
|
382 |
+
//Flush the WordPress rewrites
|
383 |
+
HMW_Classes_Tools::flushWPRewrites();
|
384 |
+
|
385 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->clearRedirect();
|
386 |
+
|
387 |
+
//Flush config to remove the rules
|
388 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->flushChanges();
|
389 |
+
|
390 |
+
//Set the cookies for the current path
|
391 |
+
$cookies = HMW_Classes_ObjController::newInstance( 'HMW_Models_Cookies' );
|
392 |
+
if ( $cookies->setCookiesCurrentPath() ) {
|
393 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
394 |
+
HMW_Classes_Tools::saveOptions( 'test_frontend', false );
|
395 |
+
|
396 |
+
remove_all_filters( 'wp_redirect' );
|
397 |
+
remove_all_filters( 'admin_url' );
|
398 |
+
wp_safe_redirect( HMW_Classes_Tools::getSettingsUrl() );
|
399 |
+
exit();
|
400 |
+
}
|
401 |
+
|
402 |
+
break;
|
403 |
+
case 'hmw_savedefault':
|
404 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
405 |
+
|
406 |
+
$options = HMW_Classes_Tools::getOptions();
|
407 |
+
foreach ( $options as $key => $value ) {
|
408 |
+
HMW_Classes_Tools::saveOptions( $key, $value, true );
|
409 |
+
}
|
410 |
+
break;
|
411 |
+
case 'hmw_confirm':
|
412 |
+
HMW_Classes_Tools::saveOptions( 'error', false );
|
413 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
414 |
+
HMW_Classes_Tools::saveOptions( 'test_frontend', false );
|
415 |
+
|
416 |
+
//save to safe mode in case of db
|
417 |
+
foreach ( HMW_Classes_Tools::$options as $key => $value ) {
|
418 |
+
HMW_Classes_Tools::saveOptions( $key, $value, true );
|
419 |
+
}
|
420 |
+
|
421 |
+
//Send email notification about the path changed
|
422 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->sendEmail();
|
423 |
+
|
424 |
+
//Force the rechck security notification
|
425 |
+
delete_option( 'hmw_securitycheck_time' );
|
426 |
+
|
427 |
+
break;
|
428 |
+
case 'hmw_logout':
|
429 |
+
HMW_Classes_Tools::saveOptions( 'error', false );
|
430 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
431 |
+
HMW_Classes_Tools::saveOptions( 'test_frontend', false );
|
432 |
+
|
433 |
+
//Send email notification about the path changed
|
434 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->sendEmail();
|
435 |
+
|
436 |
+
//save to safe mode in case of db
|
437 |
+
foreach ( HMW_Classes_Tools::$options as $key => $value ) {
|
438 |
+
HMW_Classes_Tools::saveOptions( $key, $value, true );
|
439 |
+
}
|
440 |
+
|
441 |
+
//Force the rechck security notification
|
442 |
+
delete_option( 'hmw_securitycheck_time' );
|
443 |
+
//Clear the cache if there are no errors
|
444 |
+
HMW_Classes_Tools::emptyCache();
|
445 |
+
//Flush the WordPress rewrites
|
446 |
+
HMW_Classes_Tools::flushWPRewrites();
|
447 |
+
|
448 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->flushChanges();
|
449 |
+
|
450 |
+
wp_logout();
|
451 |
+
wp_redirect( site_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) );
|
452 |
+
die();
|
453 |
+
break;
|
454 |
+
case 'hmw_manualrewrite':
|
455 |
+
HMW_Classes_Tools::saveOptions( 'error', false );
|
456 |
+
HMW_Classes_Tools::saveOptions( 'logout', false );
|
457 |
+
HMW_Classes_Tools::saveOptions( 'test_frontend', true );
|
458 |
+
|
459 |
+
//Clear the cache if there are no errors
|
460 |
+
HMW_Classes_Tools::emptyCache();
|
461 |
+
|
462 |
+
//Clear the cache if there are no errors
|
463 |
+
HMW_Classes_Tools::emptyCache();
|
464 |
+
if ( HMW_Classes_Tools::isNginx() || HMW_Classes_Tools::isWpengine() ) {
|
465 |
+
@shell_exec( 'nginx -s reload' );
|
466 |
+
}
|
467 |
+
break;
|
468 |
+
case 'hmw_connect':
|
469 |
+
//Connect to API with the Email
|
470 |
+
$email = sanitize_email( HMW_Classes_Tools::getValue( 'hmw_email', '' ) );
|
471 |
+
$token = HMW_Classes_Tools::getValue( 'hmw_token', '' );
|
472 |
+
|
473 |
+
$redirect_to = HMW_Classes_Tools::getSettingsUrl();
|
474 |
+
if ( $token <> '' ) {
|
475 |
+
if ( preg_match( '/^[a-z0-9\-]{32}$/i', $token ) ) {
|
476 |
+
HMW_Classes_Tools::saveOptions( 'hmw_token', $token );
|
477 |
+
HMW_Classes_Tools::saveOptions( 'error', false );
|
478 |
+
HMW_Classes_Tools::checkApi();
|
479 |
+
|
480 |
+
//Save the last safe data
|
481 |
+
foreach ( HMW_Classes_Tools::$options as $key => $value ) {
|
482 |
+
HMW_Classes_Tools::saveOptions( $key, $value, true );
|
483 |
+
}
|
484 |
+
|
485 |
+
} else {
|
486 |
+
HMW_Classes_Error::setError( __( 'ERROR! Please make sure you use a valid token to connect the plugin with WPPlugins', _HMW_PLUGIN_NAME_ ) . " <br /> " );
|
487 |
+
}
|
488 |
+
} elseif ( $email <> '' ) {
|
489 |
+
HMW_Classes_Tools::checkApi( $email, $redirect_to );
|
490 |
+
} else {
|
491 |
+
HMW_Classes_Error::setError( __( 'ERROR! Please make sure you use an email address to connect the plugin with WPPlugins', _HMW_PLUGIN_NAME_ ) . " <br /> " );
|
492 |
+
}
|
493 |
+
break;
|
494 |
+
case 'hmw_dont_connect':
|
495 |
+
$redirect_to = HMW_Classes_Tools::getSettingsUrl();
|
496 |
+
|
497 |
+
HMW_Classes_Tools::saveOptions( 'hmw_token', md5( home_url() ) );
|
498 |
+
HMW_Classes_Tools::saveOptions( 'error', false );
|
499 |
+
|
500 |
+
//Save the last safe data
|
501 |
+
foreach ( HMW_Classes_Tools::$options as $key => $value ) {
|
502 |
+
HMW_Classes_Tools::saveOptions( $key, $value, true );
|
503 |
+
}
|
504 |
+
|
505 |
+
wp_redirect( $redirect_to );
|
506 |
+
exit();
|
507 |
+
case 'hmw_backup':
|
508 |
+
//Save the Settings into backup
|
509 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
510 |
+
return;
|
511 |
+
}
|
512 |
+
HMW_Classes_Tools::getOptions();
|
513 |
+
HMW_Classes_Tools::setHeader( 'text' );
|
514 |
+
header( "Content-Disposition: attachment; filename=hidemywp_backup.txt" );
|
515 |
+
|
516 |
+
if ( function_exists( 'base64_encode' ) ) {
|
517 |
+
echo base64_encode( json_encode( HMW_Classes_Tools::$options ) );
|
518 |
+
} else {
|
519 |
+
echo json_encode( HMW_Classes_Tools::$options );
|
520 |
+
}
|
521 |
+
exit();
|
522 |
+
break;
|
523 |
+
case 'hmw_restore':
|
524 |
+
//Restore the backup
|
525 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
526 |
+
return;
|
527 |
+
}
|
528 |
+
|
529 |
+
if ( ! empty( $_FILES['hmw_options'] ) && $_FILES['hmw_options']['tmp_name'] <> '' ) {
|
530 |
+
$options = file_get_contents( $_FILES['hmw_options']['tmp_name'] );
|
531 |
+
try {
|
532 |
+
if ( function_exists( 'base64_encode' ) && base64_decode( $options ) <> '' ) {
|
533 |
+
$options = base64_decode( $options );
|
534 |
+
}
|
535 |
+
$options = json_decode( $options, true );
|
536 |
+
if ( is_array( $options ) && isset( $options['hmw_ver'] ) ) {
|
537 |
+
HMW_Classes_Tools::$options = $options;
|
538 |
+
HMW_Classes_Tools::saveOptions();
|
539 |
+
HMW_Classes_Error::setError( __( 'Great! The backup is restored.', _HMW_PLUGIN_NAME_ ) . " <br /> ", 'success' );
|
540 |
+
|
541 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) ) {
|
542 |
+
//Clear the cache if there are no errors
|
543 |
+
HMW_Classes_Tools::emptyCache();
|
544 |
+
//Flush the WordPress rewrites
|
545 |
+
HMW_Classes_Tools::flushWPRewrites();
|
546 |
+
}
|
547 |
+
|
548 |
+
if ( ! HMW_Classes_Tools::getOption( 'error' ) && ! HMW_Classes_Tools::getOption( 'logout' ) ) {
|
549 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->flushChanges();
|
550 |
+
}
|
551 |
+
|
552 |
+
} else {
|
553 |
+
HMW_Classes_Error::setError( __( 'Error! The backup is not valid.', _HMW_PLUGIN_NAME_ ) . " <br /> " );
|
554 |
+
}
|
555 |
+
} catch ( Exception $e ) {
|
556 |
+
HMW_Classes_Error::setError( __( 'Error! The backup is not valid.', _HMW_PLUGIN_NAME_ ) . " <br /> " );
|
557 |
+
}
|
558 |
+
} else {
|
559 |
+
HMW_Classes_Error::setError( __( 'Error! You have to enter a previous saved backup file.', _HMW_PLUGIN_NAME_ ) . " <br /> " );
|
560 |
+
}
|
561 |
+
|
562 |
+
break;
|
563 |
+
case 'hmw_support':
|
564 |
+
global $current_user, $wp_version;
|
565 |
+
$return = array();
|
566 |
+
|
567 |
+
|
568 |
+
$line = "\n\n" . "______________________________________________________________________" . "\n";
|
569 |
+
$versions = 'URL:' . get_bloginfo( 'wpurl' ) . ", " . 'PV: ' . HMW_VERSION . ", " . 'WPV: ' . $wp_version;
|
570 |
+
$from = HMW_Classes_Tools::getValue( 'hmw_email' );
|
571 |
+
$subject = __( 'Hide My Wp > Question', _HMW_PLUGIN_NAME_ );
|
572 |
+
$message = HMW_Classes_Tools::getValue( 'hmw_message', '', true );
|
573 |
+
|
574 |
+
if ( $message <> '' ) {
|
575 |
+
$message .= $line;
|
576 |
+
$message .= $versions;
|
577 |
+
|
578 |
+
$headers[] = 'From: ' . $current_user->display_name . ' <' . $from . '>';
|
579 |
+
if ( $response = wp_mail( _HMW_SUPPORT_EMAIL_, $subject, $message, $headers ) ) {
|
580 |
+
$return['success'] = true;
|
581 |
+
} else {
|
582 |
+
$return['error'] = true;
|
583 |
+
}
|
584 |
+
} else {
|
585 |
+
$return['error'] = true;
|
586 |
+
}
|
587 |
+
|
588 |
+
HMW_Classes_Tools::setHeader( 'json' );
|
589 |
+
echo json_encode( $return );
|
590 |
+
exit();
|
591 |
+
}
|
592 |
+
}
|
593 |
+
|
594 |
+
|
595 |
+
/**
|
596 |
+
* Add Javascript in the page footer
|
597 |
+
*/
|
598 |
+
public function hookFooter() {
|
599 |
+
HMW_Classes_Tools::saveOptions();
|
600 |
+
echo '<script>var hmwQuery = {"ajaxurl": "' . admin_url( 'admin-ajax.php' ) . '","nonce": "' . wp_create_nonce( _HMW_NONCE_ID_ ) . '"}</script>';
|
601 |
+
}
|
602 |
+
|
603 |
+
}
|
controllers/Widget.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Controllers_Widget extends HMW_Classes_FrontController {
|
5 |
+
|
6 |
+
public $riskreport = array();
|
7 |
+
public $risktasks;
|
8 |
+
|
9 |
+
public function dashboard() {
|
10 |
+
$this->risktasks = HMW_Classes_ObjController::getClass('HMW_Controllers_SecurityCheck')->getRiskTasks();
|
11 |
+
$this->riskreport =HMW_Classes_ObjController::getClass('HMW_Controllers_SecurityCheck')->getRiskReport();
|
12 |
+
|
13 |
+
//Show Hide My WP Offer
|
14 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'lite' && date('d') >= 15 && date('d') <= 31) {
|
15 |
+
echo HMW_Classes_Error::showError( sprintf( __( '%sLimited Time Offer%s: Get %s65%% OFF%s today on Hide My WP Ghost 5 Websites License. %sHurry Up!%s', _HMW_PLUGIN_NAME_ ), '<a href="https://wpplugins.tips/buy/5_websites_special" target="_blank" style="font-weight: bold"><strong style="color: red">', '</strong></a>', '<a href="https://wpplugins.tips/buy/5_websites_special" target="_blank" style="font-weight: bold"><strong style="color: red">', '</strong></a>', '<a href="https://wpplugins.tips/buy/5_websites_special" target="_blank" style="font-weight: bold">', '</a>' ) );
|
16 |
+
}
|
17 |
+
|
18 |
+
echo '<script>var hmwQuery = {"ajaxurl": "' . admin_url( 'admin-ajax.php' ) . '","nonce": "' . wp_create_nonce( _HMW_NONCE_ID_ ) . '"}</script>';
|
19 |
+
echo $this->getView('Dashboard');
|
20 |
+
}
|
21 |
+
|
22 |
+
public function action() {
|
23 |
+
parent::action();
|
24 |
+
|
25 |
+
if (!current_user_can('manage_options')) {
|
26 |
+
return;
|
27 |
+
}
|
28 |
+
|
29 |
+
switch (HMW_Classes_Tools::getValue('action')) {
|
30 |
+
case 'hmw_widget_securitycheck':
|
31 |
+
HMW_Classes_ObjController::getClass('HMW_Controllers_SecurityCheck')->doSecurityCheck();
|
32 |
+
|
33 |
+
ob_start();
|
34 |
+
$this->dashboard();
|
35 |
+
$output = ob_get_clean();
|
36 |
+
|
37 |
+
HMW_Classes_Tools::setHeader('json');
|
38 |
+
echo json_encode(array('data' => $output));
|
39 |
+
exit;
|
40 |
+
|
41 |
+
}
|
42 |
+
}
|
43 |
+
}
|
debug/index.php
ADDED
@@ -0,0 +1,238 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Debug {
|
5 |
+
|
6 |
+
/** @var array */
|
7 |
+
private static $debug;
|
8 |
+
|
9 |
+
public function __construct() {
|
10 |
+
}
|
11 |
+
|
12 |
+
public function logQueries($query) {
|
13 |
+
self::dump($query);
|
14 |
+
return $query;
|
15 |
+
}
|
16 |
+
|
17 |
+
public function _isAjax() {
|
18 |
+
if (defined('DOING_AJAX') && DOING_AJAX) {
|
19 |
+
return true;
|
20 |
+
}
|
21 |
+
return false;
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Get a value from $_POST / $_GET
|
26 |
+
* if unavailable, take a default value
|
27 |
+
*
|
28 |
+
* @param string $key Value key
|
29 |
+
* @param mixed $defaultValue (optional)
|
30 |
+
* @return mixed Value
|
31 |
+
*/
|
32 |
+
public static function getValue($key, $defaultValue = false) {
|
33 |
+
if (!isset($key) OR empty($key) OR !is_string($key))
|
34 |
+
return false;
|
35 |
+
$ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $defaultValue));
|
36 |
+
|
37 |
+
if (is_string($ret) === true)
|
38 |
+
$ret = urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret)));
|
39 |
+
return !is_string($ret) ? $ret : stripslashes($ret);
|
40 |
+
}
|
41 |
+
|
42 |
+
public static function setValue($key, $value) {
|
43 |
+
$_POST[$key] = $value;
|
44 |
+
$_GET[$key] = $value;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Check if the parameter is set
|
49 |
+
*
|
50 |
+
* @param string $key
|
51 |
+
* @return boolean
|
52 |
+
*/
|
53 |
+
public static function getIsset($key) {
|
54 |
+
if (!isset($key) OR empty($key) OR !is_string($key))
|
55 |
+
return false;
|
56 |
+
return isset($_POST[$key]) ? true : (isset($_GET[$key]) ? true : false);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Check if debug is called
|
61 |
+
*/
|
62 |
+
public static function checkDebug() {
|
63 |
+
//if debug is called
|
64 |
+
if (self::getIsset('debug')) {
|
65 |
+
if (self::getValue('debug') === 'on' && HMW_DEBUG) {
|
66 |
+
error_reporting(E_ALL);
|
67 |
+
@ini_set('display_errors', true);
|
68 |
+
if (function_exists('register_shutdown_function')) {
|
69 |
+
register_shutdown_function(array(new HMW_Debug(), 'showDebug'));
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
73 |
+
// elseif (HMW_DEBUG) {
|
74 |
+
// register_shutdown_function(array(new HMW_Debug(), 'showLoadingTime'));
|
75 |
+
// }
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Get the debug buffer
|
80 |
+
* @param $buffer
|
81 |
+
* @return mixed
|
82 |
+
*/
|
83 |
+
public function getBuffer($buffer) {
|
84 |
+
if (!$this->_isAjax()) {
|
85 |
+
return $buffer;
|
86 |
+
}
|
87 |
+
if (!$this->getIsset('debug')) {
|
88 |
+
return $buffer;
|
89 |
+
}
|
90 |
+
|
91 |
+
return false;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Store the debug for a later view
|
96 |
+
*
|
97 |
+
* @return bool|void
|
98 |
+
*/
|
99 |
+
public static function dump() {
|
100 |
+
if (HMW_DEBUG) {
|
101 |
+
if (self::getValue('debug') !== 'on') {
|
102 |
+
return;
|
103 |
+
}
|
104 |
+
|
105 |
+
$output = '';
|
106 |
+
$total_arguments = 0;
|
107 |
+
$callee = array('file' => '', 'line' => '');
|
108 |
+
$run_time = number_format(microtime(true) - HMW_REQUEST_TIME, 3);
|
109 |
+
|
110 |
+
if (function_exists('func_get_args')) {
|
111 |
+
$arguments = func_get_args();
|
112 |
+
$total_arguments = count($arguments);
|
113 |
+
} else
|
114 |
+
$arguments = array();
|
115 |
+
|
116 |
+
|
117 |
+
if (function_exists('debug_backtrace'))
|
118 |
+
list($callee) = debug_backtrace();
|
119 |
+
|
120 |
+
$output .= '<fieldset style="background: #FFFFFF; border: 1px #CCCCCC solid; padding: 5px; font-size: 9pt; margin: 0;">';
|
121 |
+
$output .= '<legend style="background: #EEEEEE; padding: 2px; font-size: 8pt;">' . $callee['file'] . ' Time: ' . $run_time . ' @ line: ' . $callee['line']
|
122 |
+
. '</legend><pre style="margin: 0; font-size: 8pt; text-align: left;">';
|
123 |
+
|
124 |
+
$i = 0;
|
125 |
+
foreach ($arguments as $argument) {
|
126 |
+
if (count($arguments) > 1)
|
127 |
+
$output .= "\n" . '<strong>#' . (++$i) . ' of ' . $total_arguments . '</strong>: ';
|
128 |
+
|
129 |
+
// if argument is boolean, false value does not display, so ...
|
130 |
+
if (is_bool($argument))
|
131 |
+
$argument = ($argument) ? 'TRUE' : 'FALSE';
|
132 |
+
else
|
133 |
+
if (is_object($argument) && function_exists('array_reverse') && function_exists('class_parents'))
|
134 |
+
$output .= implode("\n" . '|' . "\n", array_reverse(class_parents($argument))) . "\n" . '|' . "\n";
|
135 |
+
|
136 |
+
$output .= htmlspecialchars(json_encode($argument))
|
137 |
+
. ((is_object($argument) && function_exists('spl_object_hash')) ? spl_object_hash($argument) : '');
|
138 |
+
}
|
139 |
+
$output .= "</pre>";
|
140 |
+
$output .= "</fieldset>";
|
141 |
+
|
142 |
+
self::$debug[] = $output;
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Show the debug dump
|
148 |
+
*/
|
149 |
+
public static function showDebug() {
|
150 |
+
HMW_Classes_Tools::setHeader('html');
|
151 |
+
$errors = error_get_last();
|
152 |
+
HMW_Debug::dump($errors);
|
153 |
+
echo "Debug result: <br />" . '<div id="wpcontent">' . '<br />' . @implode('<br />', self::$debug) . '<div>';
|
154 |
+
|
155 |
+
$run_time = number_format(microtime(true) - HMW_REQUEST_TIME, 3);
|
156 |
+
$pps = number_format(1 / $run_time, 0);
|
157 |
+
$memory_avail = ini_get('memory_limit');
|
158 |
+
$memory_used = number_format(memory_get_usage(true) / (1024 * 1024), 2);
|
159 |
+
$memory_peak = number_format(memory_get_peak_usage(true) / (1024 * 1024), 2);
|
160 |
+
|
161 |
+
if (PHP_SAPI == 'cli') {
|
162 |
+
// if run for command line, display some info
|
163 |
+
$debug = PHP_EOL
|
164 |
+
. "======================================================================================"
|
165 |
+
. PHP_EOL
|
166 |
+
. " Config: php " . phpversion() . " " . php_sapi_name() . " / zend engine " . zend_version()
|
167 |
+
. PHP_EOL
|
168 |
+
. " Load: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)"
|
169 |
+
. " | Time: {$run_time}s | {$pps} req/sec"
|
170 |
+
. PHP_EOL
|
171 |
+
. " | Server Timezone: " . date_default_timezone_get()
|
172 |
+
. " | Agent: CLI"
|
173 |
+
. PHP_EOL
|
174 |
+
. "======================================================================================"
|
175 |
+
. PHP_EOL;
|
176 |
+
} else {
|
177 |
+
// if not run from command line, only display if debug is enabled
|
178 |
+
$debug = "" //<hr />"
|
179 |
+
. "<div style=\"text-align: left;\">"
|
180 |
+
. "<small><hr />"
|
181 |
+
. " Config: "
|
182 |
+
. "<br />"
|
183 |
+
. " | php " . phpversion() . " " . php_sapi_name() . " / zend engine " . zend_version()
|
184 |
+
. "<br />"
|
185 |
+
. " | Server Timezone: " . date_default_timezone_get()
|
186 |
+
. "<br />"
|
187 |
+
. " Load: "
|
188 |
+
. "<br />"
|
189 |
+
. " | Memory: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)"
|
190 |
+
. "<br />"
|
191 |
+
. " | Time: {$run_time}s | {$pps} req/sec"
|
192 |
+
. "<br />"
|
193 |
+
. "Url: "
|
194 |
+
. "<br />"
|
195 |
+
. " |"
|
196 |
+
. "<br />"
|
197 |
+
. " | Agent: " . (@$_SERVER["HTTP_USER_AGENT"])
|
198 |
+
. "<br />"
|
199 |
+
. "Version Control: "
|
200 |
+
. "<br />"
|
201 |
+
. "</small>"
|
202 |
+
. "</div>"
|
203 |
+
. "<br />";
|
204 |
+
}
|
205 |
+
|
206 |
+
|
207 |
+
echo '<pre><div id="wpcontent">' . $debug . '</div></pre>';
|
208 |
+
}
|
209 |
+
|
210 |
+
public static function showLoadingTime() {
|
211 |
+
$run_time = number_format(microtime(true) - HMW_REQUEST_TIME, 3);
|
212 |
+
$pps = number_format(1 / $run_time, 0);
|
213 |
+
$memory_avail = ini_get('memory_limit');
|
214 |
+
$memory_used = number_format(memory_get_usage(true) / (1024 * 1024), 2);
|
215 |
+
$memory_peak = number_format(memory_get_peak_usage(true) / (1024 * 1024), 2);
|
216 |
+
|
217 |
+
$debug = PHP_EOL
|
218 |
+
. "======================================================================================"
|
219 |
+
. PHP_EOL
|
220 |
+
. " Config: php " . phpversion() . " " . php_sapi_name() . " / zend engine " . zend_version()
|
221 |
+
. PHP_EOL
|
222 |
+
. " Load: {$memory_avail} (avail) / {$memory_used}M (used) / {$memory_peak}M (peak)"
|
223 |
+
. " | Time: {$run_time}s | {$pps} req/sec"
|
224 |
+
. PHP_EOL
|
225 |
+
. " | Server Timezone: " . date_default_timezone_get()
|
226 |
+
. " | Agent: CLI"
|
227 |
+
. PHP_EOL
|
228 |
+
. "======================================================================================"
|
229 |
+
. PHP_EOL;
|
230 |
+
|
231 |
+
|
232 |
+
echo '<pre><div id="wpcontent">' . $debug . '</div></pre>';
|
233 |
+
}
|
234 |
+
|
235 |
+
}
|
236 |
+
|
237 |
+
defined('HMW_DEBUG') || define('HMW_DEBUG', false);
|
238 |
+
HMW_Debug::checkDebug();
|
index.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Copyright (c) 2016 - 2020, WPPlugins.
|
4 |
+
The copyrights to the software code in this file are licensed under the (revised) BSD open source license.
|
5 |
+
|
6 |
+
Plugin Name: Hide My WP Ghost Lite
|
7 |
+
Plugin URI: https://wordpress.org/plugins/hide-my-wp/
|
8 |
+
Description: The best solution for WordPress Security. Hide wp-admin, wp-login, wp-content, plugins, themes etc. Add Firewall, Brute Force protection & more. <br /> <a href="https://hidemywpghost.com/wordpress" target="_blank"><strong>Unlock all features</strong></a>
|
9 |
+
Version: 4.0.10
|
10 |
+
Author: WPPlugins - WordPress Security Plugins
|
11 |
+
Author URI: https://wpplugins.tips
|
12 |
+
License: GPLv2 or later
|
13 |
+
License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
14 |
+
Text Domain: hide-my-wp
|
15 |
+
Domain Path: /languages
|
16 |
+
*/
|
17 |
+
|
18 |
+
if (defined( 'NONCE_KEY' ) && defined( 'ABSPATH' ) && ! defined( 'HMW_VERSION' ) ) {
|
19 |
+
define( 'HMW_VERSION', '4.0.10' );
|
20 |
+
/* Call config files */
|
21 |
+
require( dirname( __FILE__ ) . '/debug/index.php' );
|
22 |
+
require( dirname( __FILE__ ) . '/config/config.php' );
|
23 |
+
|
24 |
+
/* important to check the PHP version */
|
25 |
+
try {
|
26 |
+
/* inport main classes */
|
27 |
+
require_once( _HMW_CLASSES_DIR_ . 'ObjController.php' );
|
28 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_FrontController' );
|
29 |
+
|
30 |
+
if ( defined( 'HMW_DISABLE' ) && HMW_DISABLE ) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
|
34 |
+
//don't run cron hooks and update if there are installs
|
35 |
+
if ( ! is_multisite() && defined( 'WP_INSTALLING' ) && WP_INSTALLING ) {
|
36 |
+
return;
|
37 |
+
} elseif ( is_multisite() && defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) {
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
//If Brute Force is activated
|
42 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_bruteforce' ) ) {
|
43 |
+
HMW_Classes_ObjController::getClass( 'HMW_Controllers_Brute' );
|
44 |
+
}
|
45 |
+
|
46 |
+
//For auto updates
|
47 |
+
add_action( 'upgrader_process_complete', array(
|
48 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Tools' ),
|
49 |
+
'checkWpUpdates'
|
50 |
+
), 1 );
|
51 |
+
|
52 |
+
//Make sure to write the rewrites with other plugins
|
53 |
+
add_action( 'rewrite_rules_array', array(
|
54 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Tools' ),
|
55 |
+
'checkRewriteUpdate'
|
56 |
+
) );
|
57 |
+
|
58 |
+
if ( is_admin() || is_network_admin() ) {
|
59 |
+
register_activation_hook( __FILE__, array(
|
60 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Tools' ),
|
61 |
+
'hmw_activate'
|
62 |
+
) );
|
63 |
+
register_deactivation_hook( __FILE__, array(
|
64 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Tools' ),
|
65 |
+
'hmw_deactivate'
|
66 |
+
) );
|
67 |
+
|
68 |
+
//verify if there are updated and all plugins and themes are in the right list
|
69 |
+
add_action( 'activated_plugin', array(
|
70 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Tools' ),
|
71 |
+
'checkWpUpdates'
|
72 |
+
) );
|
73 |
+
//When a theme is changed
|
74 |
+
add_action( 'after_switch_theme', array(
|
75 |
+
HMW_Classes_ObjController::getClass( 'HMW_Classes_Tools' ),
|
76 |
+
'checkWpUpdates'
|
77 |
+
) );
|
78 |
+
|
79 |
+
}
|
80 |
+
} catch(Exception $e) {
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
languages/hide-my-wp-en_US.mo
ADDED
Binary file
|
languages/hide-my-wp-en_US.po
ADDED
@@ -0,0 +1,2846 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Hide My WP Ghost\n"
|
4 |
+
"POT-Creation-Date: 2020-05-14 18:29+0300\n"
|
5 |
+
"PO-Revision-Date: 2020-05-14 18:30+0300\n"
|
6 |
+
"Last-Translator: John Darrel <john@wpplugins.tips>\n"
|
7 |
+
"Language-Team: WpPluginsTips <john@wpplugins.tips>\n"
|
8 |
+
"Language: en_US\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.3.1\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"X-Poedit-WPHeader: index.php\n"
|
15 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
17 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
18 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
21 |
+
|
22 |
+
#: classes/Error.php:17
|
23 |
+
msgid ""
|
24 |
+
"Function get_class does not exist! It's required for Hide My WP to work "
|
25 |
+
"properly."
|
26 |
+
msgstr ""
|
27 |
+
|
28 |
+
#: classes/Error.php:20
|
29 |
+
msgid ""
|
30 |
+
"Function file_exists does not exist! It's required for Hide My WP to work "
|
31 |
+
"properly."
|
32 |
+
msgstr ""
|
33 |
+
|
34 |
+
#: classes/Error.php:24
|
35 |
+
msgid "The home directory is not set!"
|
36 |
+
msgstr ""
|
37 |
+
|
38 |
+
#: classes/Error.php:28
|
39 |
+
msgid "The PHP version has to be greater than 5.1"
|
40 |
+
msgstr ""
|
41 |
+
|
42 |
+
#: classes/Error.php:36
|
43 |
+
msgid ""
|
44 |
+
"For Hide My WP to work, the PHP version has to be equal or greater than 5.1"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: classes/Tools.php:30 classes/Tools.php:34
|
48 |
+
#, php-format
|
49 |
+
msgid ""
|
50 |
+
"Your memory limit is %sM. You need at least %sM to prevent loading errors in "
|
51 |
+
"frontend. See: %sIncreasing memory allocated to PHP%s"
|
52 |
+
msgstr ""
|
53 |
+
|
54 |
+
#: classes/Tools.php:122
|
55 |
+
msgid ""
|
56 |
+
"Your IP has been flagged for potential security violations. Please try again "
|
57 |
+
"in a little while..."
|
58 |
+
msgstr ""
|
59 |
+
|
60 |
+
#: classes/Tools.php:333
|
61 |
+
msgid "Documentation"
|
62 |
+
msgstr ""
|
63 |
+
|
64 |
+
#: classes/Tools.php:334
|
65 |
+
msgid "Leave a review"
|
66 |
+
msgstr ""
|
67 |
+
|
68 |
+
#: classes/Tools.php:351
|
69 |
+
msgid "Upgrade to Premium"
|
70 |
+
msgstr ""
|
71 |
+
|
72 |
+
#: classes/Tools.php:353 controllers/SecurityCheck.php:185
|
73 |
+
msgid "Settings"
|
74 |
+
msgstr ""
|
75 |
+
|
76 |
+
#: classes/Tools.php:1129
|
77 |
+
#, php-format
|
78 |
+
msgid "CONNECTION ERROR! Make sure your website can access: %s"
|
79 |
+
msgstr ""
|
80 |
+
|
81 |
+
#: classes/Tools.php:1149
|
82 |
+
msgid "New Login Information"
|
83 |
+
msgstr ""
|
84 |
+
|
85 |
+
#: controllers/Brute.php:34
|
86 |
+
msgid "IP Blocked by Hide My WordPress Brute Force Protection"
|
87 |
+
msgstr ""
|
88 |
+
|
89 |
+
#: controllers/Brute.php:62
|
90 |
+
msgid "Add only real IPs. No local ips needed."
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: controllers/Brute.php:78
|
94 |
+
msgid "Add only real IPs. No local ips allowed."
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: controllers/Brute.php:92
|
98 |
+
msgid "You need to set a positive number of attempts "
|
99 |
+
msgstr ""
|
100 |
+
|
101 |
+
#: controllers/Brute.php:100
|
102 |
+
msgid "You need to set a positive waiting time"
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: controllers/Brute.php:107 controllers/Settings.php:261
|
106 |
+
#: controllers/Settings.php:292 controllers/Settings.php:349
|
107 |
+
#: controllers/Settings.php:362
|
108 |
+
msgid "Saved"
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: controllers/Brute.php:134
|
112 |
+
msgid "Cnt"
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: controllers/Brute.php:135
|
116 |
+
msgid "IP"
|
117 |
+
msgstr ""
|
118 |
+
|
119 |
+
#: controllers/Brute.php:136
|
120 |
+
msgid "Fail Attempts"
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: controllers/Brute.php:137
|
124 |
+
msgid "Hostname"
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: controllers/Brute.php:138
|
128 |
+
msgid "Options"
|
129 |
+
msgstr ""
|
130 |
+
|
131 |
+
#: controllers/Brute.php:160
|
132 |
+
msgid "No blacklisted ips"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: controllers/Brute.php:202
|
136 |
+
#, php-format
|
137 |
+
msgid ""
|
138 |
+
"<strong>ERROR:</strong> Email or Password is incorrect. <br /> %d attempts "
|
139 |
+
"left before lockout"
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: controllers/Menu.php:66 controllers/Menu.php:175
|
143 |
+
msgid "Hide My WP - Customize Permalinks"
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: controllers/Menu.php:67 controllers/Menu.php:176
|
147 |
+
msgid "Change Paths"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: controllers/Menu.php:74 controllers/Menu.php:183
|
151 |
+
msgid "Hide My WP - Mapping"
|
152 |
+
msgstr ""
|
153 |
+
|
154 |
+
#: controllers/Menu.php:75 controllers/Menu.php:184 models/Settings.php:17
|
155 |
+
msgid "Mapping"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: controllers/Menu.php:82 controllers/Menu.php:191
|
159 |
+
msgid "Hide My WP - Tweaks"
|
160 |
+
msgstr ""
|
161 |
+
|
162 |
+
#: controllers/Menu.php:83 controllers/Menu.php:192 models/Settings.php:22
|
163 |
+
msgid "Tweaks"
|
164 |
+
msgstr ""
|
165 |
+
|
166 |
+
#: controllers/Menu.php:91 controllers/Menu.php:200
|
167 |
+
msgid "Hide My WP - Brute Force Protection"
|
168 |
+
msgstr ""
|
169 |
+
|
170 |
+
#: controllers/Menu.php:92 controllers/Menu.php:201
|
171 |
+
msgid "Brute Force Protection"
|
172 |
+
msgstr ""
|
173 |
+
|
174 |
+
#: controllers/Menu.php:100 controllers/Menu.php:208
|
175 |
+
msgid "Hide My WP - Log Events"
|
176 |
+
msgstr ""
|
177 |
+
|
178 |
+
#: controllers/Menu.php:101 controllers/Menu.php:209 models/Settings.php:32
|
179 |
+
#: view/Log.php:70
|
180 |
+
msgid "Log Events"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: controllers/Menu.php:109 controllers/Menu.php:217
|
184 |
+
msgid "Hide My WP - Security Check"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: controllers/Menu.php:110 controllers/Menu.php:218 models/Settings.php:37
|
188 |
+
#: view/Advanced.php:226 view/Mapping.php:229 view/Permalinks.php:549
|
189 |
+
#: view/Tweaks.php:178
|
190 |
+
msgid "Security Check"
|
191 |
+
msgstr ""
|
192 |
+
|
193 |
+
#: controllers/Menu.php:117 controllers/Menu.php:225
|
194 |
+
msgid "Hide My WP - Recommended Plugins"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: controllers/Menu.php:118 controllers/Menu.php:226
|
198 |
+
msgid "Install Plugins"
|
199 |
+
msgstr ""
|
200 |
+
|
201 |
+
#: controllers/Menu.php:125 controllers/Menu.php:233
|
202 |
+
msgid "Hide My WP - Backup & Restore"
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: controllers/Menu.php:126 controllers/Menu.php:234 models/Settings.php:48
|
206 |
+
msgid "Backup/Restore"
|
207 |
+
msgstr ""
|
208 |
+
|
209 |
+
#: controllers/Menu.php:133 controllers/Menu.php:241
|
210 |
+
msgid "Hide My WP - Advanced Settings"
|
211 |
+
msgstr ""
|
212 |
+
|
213 |
+
#: controllers/Menu.php:134 controllers/Menu.php:242 models/Settings.php:53
|
214 |
+
msgid "Advanced"
|
215 |
+
msgstr ""
|
216 |
+
|
217 |
+
#: controllers/Menu.php:147 controllers/Settings.php:190
|
218 |
+
msgid "Hide My WP"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#: controllers/Notice.php:31
|
222 |
+
msgid "Close notification"
|
223 |
+
msgstr ""
|
224 |
+
|
225 |
+
#: controllers/Notice.php:35
|
226 |
+
msgid "Thank you for using Hide My WP?"
|
227 |
+
msgstr ""
|
228 |
+
|
229 |
+
#: controllers/Notice.php:36
|
230 |
+
#, php-format
|
231 |
+
msgid ""
|
232 |
+
"Add %sXML-RPC attack protection, SQL/Script firewall, reCaptcha login%s and "
|
233 |
+
"more with Hide My WP Ghost premium features."
|
234 |
+
msgstr ""
|
235 |
+
|
236 |
+
#: controllers/Notice.php:37
|
237 |
+
msgid "See all premium features"
|
238 |
+
msgstr ""
|
239 |
+
|
240 |
+
#: controllers/SecurityCheck.php:23
|
241 |
+
msgid ""
|
242 |
+
"You should check your website every week to see if there are any security "
|
243 |
+
"changes."
|
244 |
+
msgstr ""
|
245 |
+
|
246 |
+
#: controllers/SecurityCheck.php:56
|
247 |
+
msgid ""
|
248 |
+
"First, you need to connect Hide My Wp with WPPlugins and switch from Default "
|
249 |
+
"mode to Lite Mode."
|
250 |
+
msgstr ""
|
251 |
+
|
252 |
+
#: controllers/SecurityCheck.php:60 view/Brute.php:30 view/Brute.php:31
|
253 |
+
#: view/Brute.php:81 view/Brute.php:94 view/Log.php:12 view/Mapping.php:88
|
254 |
+
#: view/Mapping.php:162 view/Permalinks.php:338 view/Permalinks.php:413
|
255 |
+
#: view/Permalinks.php:444 view/Tweaks.php:27
|
256 |
+
#, php-format
|
257 |
+
msgid "This feature requires %sHide My WP Ghost%s."
|
258 |
+
msgstr ""
|
259 |
+
|
260 |
+
#: controllers/SecurityCheck.php:60 view/Brute.php:32 view/Brute.php:82
|
261 |
+
#: view/Brute.php:95 view/Log.php:13 view/Mapping.php:89 view/Mapping.php:163
|
262 |
+
#: view/Permalinks.php:39 view/Permalinks.php:339 view/Permalinks.php:414
|
263 |
+
#: view/Permalinks.php:445 view/Tweaks.php:28
|
264 |
+
msgid "PRO"
|
265 |
+
msgstr ""
|
266 |
+
|
267 |
+
#: controllers/SecurityCheck.php:64
|
268 |
+
msgid "First, you need to switch Hide My Wp from Default mode to Lite Mode."
|
269 |
+
msgstr ""
|
270 |
+
|
271 |
+
#: controllers/SecurityCheck.php:105
|
272 |
+
msgid "PHP Version"
|
273 |
+
msgstr ""
|
274 |
+
|
275 |
+
#: controllers/SecurityCheck.php:109
|
276 |
+
msgid ""
|
277 |
+
"Using an old version of PHP makes your site slow and prone to hacker attacks "
|
278 |
+
"due to known vulnerabilities that exist in versions of PHP that are no "
|
279 |
+
"longer maintained. <br /><br />You need <strong>PHP 7.0</strong> or higher "
|
280 |
+
"for your website."
|
281 |
+
msgstr ""
|
282 |
+
|
283 |
+
#: controllers/SecurityCheck.php:110
|
284 |
+
msgid ""
|
285 |
+
"Email your hosting company and tell them you'd like to switch to a newer "
|
286 |
+
"version of PHP or move your site to a better hosting company."
|
287 |
+
msgstr ""
|
288 |
+
|
289 |
+
#: controllers/SecurityCheck.php:113
|
290 |
+
msgid "Mysql Version"
|
291 |
+
msgstr ""
|
292 |
+
|
293 |
+
#: controllers/SecurityCheck.php:117
|
294 |
+
msgid ""
|
295 |
+
"Using an old version of MySQL makes your site slow and prone to hacker "
|
296 |
+
"attacks due to known vulnerabilities that exist in versions of MySQL that "
|
297 |
+
"are no longer maintained. <br /><br />You need <strong>Mysql 5.4</strong> or "
|
298 |
+
"higher"
|
299 |
+
msgstr ""
|
300 |
+
|
301 |
+
#: controllers/SecurityCheck.php:118
|
302 |
+
msgid ""
|
303 |
+
"Email your hosting company and tell them you'd like to switch to a newer "
|
304 |
+
"version of MySQL or move your site to a better hosting company"
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: controllers/SecurityCheck.php:121
|
308 |
+
msgid "WordPress Version"
|
309 |
+
msgstr ""
|
310 |
+
|
311 |
+
#: controllers/SecurityCheck.php:125
|
312 |
+
#, php-format
|
313 |
+
msgid ""
|
314 |
+
"You should always update WordPress to the %slatest versions%s. These usually "
|
315 |
+
"include the latest security fixes, and don't alter WP in any significant "
|
316 |
+
"way. These should be applied as soon as WP releases them. <br /><br />When a "
|
317 |
+
"new version of WordPress is available, you will receive an update message on "
|
318 |
+
"your WordPress Admin screens. To update WordPress, click the link in this "
|
319 |
+
"message."
|
320 |
+
msgstr ""
|
321 |
+
|
322 |
+
#: controllers/SecurityCheck.php:126
|
323 |
+
msgid "There is a newer version of WordPress available ({version})."
|
324 |
+
msgstr ""
|
325 |
+
|
326 |
+
#: controllers/SecurityCheck.php:129
|
327 |
+
msgid "WP Debug Mode"
|
328 |
+
msgstr ""
|
329 |
+
|
330 |
+
#: controllers/SecurityCheck.php:133
|
331 |
+
msgid ""
|
332 |
+
"Every good developer should turn on debugging before getting started on a "
|
333 |
+
"new plugin or theme. In fact, the WordPress Codex 'highly recommends' that "
|
334 |
+
"developers use WP_DEBUG. <br /><br />Unfortunately, many developers forget "
|
335 |
+
"the debug mode, even when the website is live. Showing debug logs in the "
|
336 |
+
"frontend will let hackers know a lot about your WordPress website."
|
337 |
+
msgstr ""
|
338 |
+
|
339 |
+
#: controllers/SecurityCheck.php:134
|
340 |
+
msgid ""
|
341 |
+
"Disable WP_DEBUG for live websites in wp_config.php <code>define('WP_DEBUG', "
|
342 |
+
"false);</code>"
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: controllers/SecurityCheck.php:138
|
346 |
+
msgid "DB Debug Mode"
|
347 |
+
msgstr ""
|
348 |
+
|
349 |
+
#: controllers/SecurityCheck.php:142
|
350 |
+
msgid ""
|
351 |
+
"It's not safe to have Database Debug turned on. Make sure you don't use "
|
352 |
+
"Database debug on live websites."
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
#: controllers/SecurityCheck.php:143
|
356 |
+
#, php-format
|
357 |
+
msgid ""
|
358 |
+
"Turn off the debug plugins if your website is live. You can also switch on "
|
359 |
+
"%sHide My Wp > Tweaks > Disable DB Debug in Frontent%s"
|
360 |
+
msgstr ""
|
361 |
+
|
362 |
+
#: controllers/SecurityCheck.php:147
|
363 |
+
msgid "Script Debug Mode"
|
364 |
+
msgstr ""
|
365 |
+
|
366 |
+
#: controllers/SecurityCheck.php:151
|
367 |
+
msgid ""
|
368 |
+
"Every good developer should turn on debugging before getting started on a "
|
369 |
+
"new plugin or theme. In fact, the WordPress Codex 'highly recommends' that "
|
370 |
+
"developers use SCRIPT_DEBUG. Unfortunately, many developers forget the debug "
|
371 |
+
"mode even when the website is live. Showing debug logs in the frontend will "
|
372 |
+
"let hackers know a lot about your WordPress website."
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: controllers/SecurityCheck.php:152
|
376 |
+
msgid ""
|
377 |
+
"Disable SCRIPT_DEBUG for live websites in wp_config.php "
|
378 |
+
"<code>define('SCRIPT_DEBUG', false);</code>"
|
379 |
+
msgstr ""
|
380 |
+
|
381 |
+
#: controllers/SecurityCheck.php:156
|
382 |
+
msgid "display_errors PHP directive"
|
383 |
+
msgstr ""
|
384 |
+
|
385 |
+
#: controllers/SecurityCheck.php:160
|
386 |
+
msgid ""
|
387 |
+
"Displaying any kind of debug info in the frontend is extremely bad. If any "
|
388 |
+
"PHP errors happen on your site they should be logged in a safe place and not "
|
389 |
+
"displayed to visitors or potential attackers."
|
390 |
+
msgstr ""
|
391 |
+
|
392 |
+
#: controllers/SecurityCheck.php:161
|
393 |
+
msgid "Edit wp_config.php and add <code>ini_set('display_errors', 0);</code>"
|
394 |
+
msgstr ""
|
395 |
+
|
396 |
+
#: controllers/SecurityCheck.php:164
|
397 |
+
msgid "Backend under SSL"
|
398 |
+
msgstr ""
|
399 |
+
|
400 |
+
#: controllers/SecurityCheck.php:168
|
401 |
+
msgid ""
|
402 |
+
"SSL is an abbreviation used for Secure Sockets Layers, which are encryption "
|
403 |
+
"protocols used on the internet to secure information exchange and provide "
|
404 |
+
"certificate information.<br /><br />These certificates provide an assurance "
|
405 |
+
"to the user about the identity of the website they are communicating with. "
|
406 |
+
"SSL may also be called TLS or Transport Layer Security protocol. <br /><br /"
|
407 |
+
">It's important to have a secure connection for the Admin Dashboard in "
|
408 |
+
"WordPress."
|
409 |
+
msgstr ""
|
410 |
+
|
411 |
+
#: controllers/SecurityCheck.php:169
|
412 |
+
#, php-format
|
413 |
+
msgid "Learn how to set your website as %s. %sClick Here%s"
|
414 |
+
msgstr ""
|
415 |
+
|
416 |
+
#: controllers/SecurityCheck.php:172
|
417 |
+
msgid "User 'admin' as Administrator"
|
418 |
+
msgstr ""
|
419 |
+
|
420 |
+
#: controllers/SecurityCheck.php:176
|
421 |
+
msgid ""
|
422 |
+
"In the old days, the default WordPress admin username was 'admin'. Since "
|
423 |
+
"usernames make up half of the login credentials, this made it easier for "
|
424 |
+
"hackers to launch brute-force attacks. <br /><br />Thankfully, WordPress has "
|
425 |
+
"since changed this and now requires you to select a custom username at the "
|
426 |
+
"time of installing WordPress."
|
427 |
+
msgstr ""
|
428 |
+
|
429 |
+
#: controllers/SecurityCheck.php:177
|
430 |
+
msgid "Change the user 'admin' with another name to improve security."
|
431 |
+
msgstr ""
|
432 |
+
|
433 |
+
#: controllers/SecurityCheck.php:180
|
434 |
+
msgid "Spammers can easily signup"
|
435 |
+
msgstr ""
|
436 |
+
|
437 |
+
#: controllers/SecurityCheck.php:184
|
438 |
+
msgid ""
|
439 |
+
"If you do not have an e-commerce, membership or guest posting website, you "
|
440 |
+
"shouldn't let users subscribe to your blog. You will end up with spam "
|
441 |
+
"registrations and your website will be filled with spammy content and "
|
442 |
+
"comments."
|
443 |
+
msgstr ""
|
444 |
+
|
445 |
+
#: controllers/SecurityCheck.php:185
|
446 |
+
#, php-format
|
447 |
+
msgid ""
|
448 |
+
"Change the signup path from %sHide My Wp > Custom Register URL%s or uncheck "
|
449 |
+
"the option %s > %s > %s"
|
450 |
+
msgstr ""
|
451 |
+
|
452 |
+
#: controllers/SecurityCheck.php:185 controllers/SecurityCheck.php:444
|
453 |
+
msgid "General"
|
454 |
+
msgstr ""
|
455 |
+
|
456 |
+
#: controllers/SecurityCheck.php:185
|
457 |
+
msgid "Membership"
|
458 |
+
msgstr ""
|
459 |
+
|
460 |
+
#: controllers/SecurityCheck.php:188
|
461 |
+
msgid "Outdated Plugins"
|
462 |
+
msgstr ""
|
463 |
+
|
464 |
+
#: controllers/SecurityCheck.php:192
|
465 |
+
msgid ""
|
466 |
+
"WordPress and its plugins and themes are like any other software installed "
|
467 |
+
"on your computer, and like any other application on your devices. "
|
468 |
+
"Periodically, developers release updates which provide new features, or fix "
|
469 |
+
"known bugs. <br /><br />These new features may not necessarily be something "
|
470 |
+
"that you want. In fact, you may be perfectly satisfied with the "
|
471 |
+
"functionality you currently have. Nevertheless, you are still likely to be "
|
472 |
+
"concerned about bugs.<br /><br />Software bugs can come in many shapes and "
|
473 |
+
"sizes. A bug could be very serious, such as preventing users from using a "
|
474 |
+
"plugin, or it could be minor and only affect a certain part of a theme, for "
|
475 |
+
"example. In some cases, bugs can cause serious security holes. <br /><br /"
|
476 |
+
">Keeping plugins up to date is one of the most important and easiest ways to "
|
477 |
+
"keep your site secure."
|
478 |
+
msgstr ""
|
479 |
+
|
480 |
+
#: controllers/SecurityCheck.php:193 controllers/SecurityCheck.php:201
|
481 |
+
msgid "Go to the Updates page and update all the plugins to the last version."
|
482 |
+
msgstr ""
|
483 |
+
|
484 |
+
#: controllers/SecurityCheck.php:196
|
485 |
+
msgid "Not Updated Plugins"
|
486 |
+
msgstr ""
|
487 |
+
|
488 |
+
#: controllers/SecurityCheck.php:200
|
489 |
+
msgid ""
|
490 |
+
"Plugins that have not been updated in the last 12 months can have real "
|
491 |
+
"security problems. Make sure you use updated plugins from WordPress "
|
492 |
+
"Directory."
|
493 |
+
msgstr ""
|
494 |
+
|
495 |
+
#: controllers/SecurityCheck.php:204
|
496 |
+
msgid "Version Incompatible Plugins"
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#: controllers/SecurityCheck.php:208
|
500 |
+
msgid ""
|
501 |
+
"Plugins that are incompatible with your version of WordPress can have real "
|
502 |
+
"security problems. Make sure you use tested plugins from WordPress Directory."
|
503 |
+
msgstr ""
|
504 |
+
|
505 |
+
#: controllers/SecurityCheck.php:209
|
506 |
+
msgid "Make sure you use tested plugins from WordPress Directory."
|
507 |
+
msgstr ""
|
508 |
+
|
509 |
+
#: controllers/SecurityCheck.php:212
|
510 |
+
msgid "Outdated Themes"
|
511 |
+
msgstr ""
|
512 |
+
|
513 |
+
#: controllers/SecurityCheck.php:216
|
514 |
+
msgid ""
|
515 |
+
"WordPress and its plugins and themes are like any other software installed "
|
516 |
+
"on your computer, and like any other application on your devices. "
|
517 |
+
"Periodically developers release updates which provide new features or fix "
|
518 |
+
"known bugs. <br /><br />New features may be something that you do not "
|
519 |
+
"necessarily want. In fact, you may be perfectly satisfied with the "
|
520 |
+
"functionality you currently have. Nevertheless, you may still be concerned "
|
521 |
+
"about bugs.<br /><br />Software bugs can come in many shapes and sizes. A "
|
522 |
+
"bug could be very serious, such as preventing users from using a plugin, or "
|
523 |
+
"it could be a minor bug that only affects a certain part of a theme, for "
|
524 |
+
"example. In some cases, bugs can even cause serious security holes.<br /"
|
525 |
+
"><br />Keeping themes up to date is one of the most important and easiest "
|
526 |
+
"ways to keep your site secure."
|
527 |
+
msgstr ""
|
528 |
+
|
529 |
+
#: controllers/SecurityCheck.php:217
|
530 |
+
msgid "Go to the Updates page and update all the themes to the last version."
|
531 |
+
msgstr ""
|
532 |
+
|
533 |
+
#: controllers/SecurityCheck.php:220
|
534 |
+
msgid "Database Prefix"
|
535 |
+
msgstr ""
|
536 |
+
|
537 |
+
#: controllers/SecurityCheck.php:224
|
538 |
+
msgid ""
|
539 |
+
"The WordPress database is like a brain for your entire WordPress site, "
|
540 |
+
"because every single bit of information about your site is stored there, "
|
541 |
+
"thus making it a hacker’s favorite target. <br /><br />Spammers and hackers "
|
542 |
+
"run automated code for SQL injections.<br />Unfortunately, many people "
|
543 |
+
"forget to change the database prefix when they install WordPress. <br />This "
|
544 |
+
"makes it easier for hackers to plan a mass attack by targeting the default "
|
545 |
+
"prefix <strong>wp_</strong>."
|
546 |
+
msgstr ""
|
547 |
+
|
548 |
+
#: controllers/SecurityCheck.php:225
|
549 |
+
#, php-format
|
550 |
+
msgid ""
|
551 |
+
"Hide My WP protects your website from most SQL injections but, if possible, "
|
552 |
+
"use a custom prefix for database tables to avoid SQL injections. %sRead more"
|
553 |
+
"%s"
|
554 |
+
msgstr ""
|
555 |
+
|
556 |
+
#: controllers/SecurityCheck.php:228
|
557 |
+
msgid "Versions in Source Code"
|
558 |
+
msgstr ""
|
559 |
+
|
560 |
+
#: controllers/SecurityCheck.php:232
|
561 |
+
msgid ""
|
562 |
+
"WordPress, plugins and themes add their version info to the source code, so "
|
563 |
+
"anyone can see it. <br /><br />Hackers can easily find a website with "
|
564 |
+
"vulnerable version plugins or themes, and target these with Zero-Day "
|
565 |
+
"Exploits."
|
566 |
+
msgstr ""
|
567 |
+
|
568 |
+
#: controllers/SecurityCheck.php:233
|
569 |
+
#, php-format
|
570 |
+
msgid "Switch on %sHide My WP > Tweaks > %s %s"
|
571 |
+
msgstr ""
|
572 |
+
|
573 |
+
#: controllers/SecurityCheck.php:233 view/Tweaks.php:65
|
574 |
+
msgid "Hide Versions and WordPress Tags"
|
575 |
+
msgstr ""
|
576 |
+
|
577 |
+
#: controllers/SecurityCheck.php:237
|
578 |
+
msgid "Salts and Security Keys valid"
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: controllers/SecurityCheck.php:241
|
582 |
+
msgid ""
|
583 |
+
"Security keys are used to ensure better encryption of information stored in "
|
584 |
+
"the user's cookies and hashed passwords. <br /><br />These make your site "
|
585 |
+
"more difficult to hack, access and crack by adding random elements to the "
|
586 |
+
"password. You don't have to remember these keys. In fact, once you set them "
|
587 |
+
"you'll never see them again. Therefore there's no excuse for not setting "
|
588 |
+
"them properly."
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: controllers/SecurityCheck.php:242
|
592 |
+
msgid ""
|
593 |
+
"Security keys are defined in wp-config.php as constants on lines. They "
|
594 |
+
"should be as unique and as long as possible. <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
595 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
596 |
+
"NONCE_SALT</code>"
|
597 |
+
msgstr ""
|
598 |
+
|
599 |
+
#: controllers/SecurityCheck.php:245
|
600 |
+
msgid "Security Keys Updated"
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: controllers/SecurityCheck.php:249
|
604 |
+
msgid ""
|
605 |
+
"The security keys in wp-config.php should be renewed as often as possible."
|
606 |
+
msgstr ""
|
607 |
+
|
608 |
+
#: controllers/SecurityCheck.php:250
|
609 |
+
#, php-format
|
610 |
+
msgid ""
|
611 |
+
"You can generate %snew Keys from here%s <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
612 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
613 |
+
"NONCE_SALT</code>"
|
614 |
+
msgstr ""
|
615 |
+
|
616 |
+
#: controllers/SecurityCheck.php:253
|
617 |
+
msgid "WordPress dDatabase Password"
|
618 |
+
msgstr ""
|
619 |
+
|
620 |
+
#: controllers/SecurityCheck.php:257
|
621 |
+
msgid ""
|
622 |
+
"There is no such thing as an \"unimportant password\"! The same goes for "
|
623 |
+
"your WordPress database password. <br />Although most servers are configured "
|
624 |
+
"so that the database can't be accessed from other hosts (or from outside of "
|
625 |
+
"the local network), that doesn't mean your database password should be "
|
626 |
+
"\"12345\" or no password at all."
|
627 |
+
msgstr ""
|
628 |
+
|
629 |
+
#: controllers/SecurityCheck.php:258
|
630 |
+
msgid ""
|
631 |
+
"Choose a proper database password, at least 8 characters long with a "
|
632 |
+
"combination of letters, numbers and special characters. After you change it, "
|
633 |
+
"set the new password in the wp_config.php file <code>define('DB_PASSWORD', "
|
634 |
+
"'NEW_DB_PASSWORD_GOES_HERE');</code>"
|
635 |
+
msgstr ""
|
636 |
+
|
637 |
+
#: controllers/SecurityCheck.php:269
|
638 |
+
msgid "/wp-content is visible in source code"
|
639 |
+
msgstr ""
|
640 |
+
|
641 |
+
#: controllers/SecurityCheck.php:273
|
642 |
+
msgid ""
|
643 |
+
"It's important to rename common WordPress paths, such as wp-content and wp-"
|
644 |
+
"includes to prevent hackers from knowing that you have a WordPress website."
|
645 |
+
msgstr ""
|
646 |
+
|
647 |
+
#: controllers/SecurityCheck.php:274
|
648 |
+
#, php-format
|
649 |
+
msgid ""
|
650 |
+
"Change the wp-content, wp-includes and other common paths with %sHide My Wp "
|
651 |
+
"> Permalinks%s"
|
652 |
+
msgstr ""
|
653 |
+
|
654 |
+
#: controllers/SecurityCheck.php:277
|
655 |
+
msgid "/wp-content path is accessible"
|
656 |
+
msgstr ""
|
657 |
+
|
658 |
+
#: controllers/SecurityCheck.php:281
|
659 |
+
msgid ""
|
660 |
+
"It's important to hide the common WordPress paths to prevent attacks on "
|
661 |
+
"vulnerable plugins and themes. <br /> Also, it's important to hide the names "
|
662 |
+
"of plugins and themes to make it impossible for bots to detect them."
|
663 |
+
msgstr ""
|
664 |
+
|
665 |
+
#: controllers/SecurityCheck.php:282
|
666 |
+
#, php-format
|
667 |
+
msgid ""
|
668 |
+
"Switch on %sHide My Wp > Hide WordPress Common Paths%s to hide the old paths"
|
669 |
+
msgstr ""
|
670 |
+
|
671 |
+
#: controllers/SecurityCheck.php:286 controllers/SecurityCheck.php:294
|
672 |
+
#, php-format
|
673 |
+
msgid "%s is visible in source code"
|
674 |
+
msgstr ""
|
675 |
+
|
676 |
+
#: controllers/SecurityCheck.php:290
|
677 |
+
#, php-format
|
678 |
+
msgid ""
|
679 |
+
"Having the admin URL visible in the source code it's really bad because "
|
680 |
+
"hackers will immediately know your secret admin path and start a Brute Force "
|
681 |
+
"attack. The custom admin path should not appear in the ajax URL. <br /><br /"
|
682 |
+
">Find solutions for %show to hide the path from source code%s."
|
683 |
+
msgstr ""
|
684 |
+
|
685 |
+
#: controllers/SecurityCheck.php:291
|
686 |
+
#, php-format
|
687 |
+
msgid ""
|
688 |
+
"Switch on %sHide My WP > Permalinks > Hide wp-admin from ajax URL%s. Hide "
|
689 |
+
"any reference to admin path from the installed plugins."
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: controllers/SecurityCheck.php:298
|
693 |
+
#, php-format
|
694 |
+
msgid ""
|
695 |
+
"Having the login URL visible in the source code it's really bad because "
|
696 |
+
"hackers will immediately know your secret login path and start a Brute Force "
|
697 |
+
"attack. <br /><br />The custom login path should be kept secret and with the "
|
698 |
+
"Brute Force Protection activated for it. <br ><br />Find solutions for %show "
|
699 |
+
"to hide the path from source code%s."
|
700 |
+
msgstr ""
|
701 |
+
|
702 |
+
#: controllers/SecurityCheck.php:299
|
703 |
+
#, php-format
|
704 |
+
msgid "%sHide the login path%s from theme menu or widget."
|
705 |
+
msgstr ""
|
706 |
+
|
707 |
+
#: controllers/SecurityCheck.php:302
|
708 |
+
msgid "/wp-login path is accessible"
|
709 |
+
msgstr ""
|
710 |
+
|
711 |
+
#: controllers/SecurityCheck.php:306
|
712 |
+
msgid ""
|
713 |
+
"If your site allows user logins, you need your login page to be easy to find "
|
714 |
+
"for your users. You also need to do other things to protect against "
|
715 |
+
"malicious login attempts. <br /><br />However, obscurity is a valid security "
|
716 |
+
"layer when used as part of a comprehensive security strategy, and if you "
|
717 |
+
"want to cut down on the number of malicious login attempts. Making your "
|
718 |
+
"login page difficult to find is one way to do that."
|
719 |
+
msgstr ""
|
720 |
+
|
721 |
+
#: controllers/SecurityCheck.php:307
|
722 |
+
#, php-format
|
723 |
+
msgid ""
|
724 |
+
"Change the wp-login from %sHide My Wp > Custom login URL%s and Switch on "
|
725 |
+
"%sHide My Wp > Brute Force Protection%s"
|
726 |
+
msgstr ""
|
727 |
+
|
728 |
+
#: controllers/SecurityCheck.php:310
|
729 |
+
msgid "/wp_config.php file is writable"
|
730 |
+
msgstr ""
|
731 |
+
|
732 |
+
#: controllers/SecurityCheck.php:314
|
733 |
+
msgid ""
|
734 |
+
"One of the most important files in your WordPress installation is the wp-"
|
735 |
+
"config.php file. <br />This file is located in the root directory of your "
|
736 |
+
"WordPress installation, and contains your website's base configuration "
|
737 |
+
"details, such as database connection information."
|
738 |
+
msgstr ""
|
739 |
+
|
740 |
+
#: controllers/SecurityCheck.php:315
|
741 |
+
#, php-format
|
742 |
+
msgid ""
|
743 |
+
"Try setting chmod to %s0400%s or %s0440%s and if the website works normally "
|
744 |
+
"that's the best one to use."
|
745 |
+
msgstr ""
|
746 |
+
|
747 |
+
#: controllers/SecurityCheck.php:318
|
748 |
+
msgid "wp-config.php & wp-config-sample.php files are accessible "
|
749 |
+
msgstr ""
|
750 |
+
|
751 |
+
#: controllers/SecurityCheck.php:322
|
752 |
+
msgid ""
|
753 |
+
"One of the most important files in your WordPress installation is the wp-"
|
754 |
+
"config.php file. <br />This file is located in the root directory of your "
|
755 |
+
"WordPress installation and contains your website's base configuration "
|
756 |
+
"details, such as database connection information."
|
757 |
+
msgstr ""
|
758 |
+
|
759 |
+
#: controllers/SecurityCheck.php:323
|
760 |
+
#, php-format
|
761 |
+
msgid ""
|
762 |
+
"Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-config.php "
|
763 |
+
"& wp-config-sample.php files"
|
764 |
+
msgstr ""
|
765 |
+
|
766 |
+
#: controllers/SecurityCheck.php:327
|
767 |
+
msgid "readme.html file is accessible "
|
768 |
+
msgstr ""
|
769 |
+
|
770 |
+
#: controllers/SecurityCheck.php:331
|
771 |
+
msgid ""
|
772 |
+
"It's important to hide or remove the readme.html file because it contains WP "
|
773 |
+
"version details."
|
774 |
+
msgstr ""
|
775 |
+
|
776 |
+
#: controllers/SecurityCheck.php:332
|
777 |
+
#, php-format
|
778 |
+
msgid ""
|
779 |
+
"Rename readme.html file or switch on %sHide My Wp > Hide WordPress Common "
|
780 |
+
"Files%s"
|
781 |
+
msgstr ""
|
782 |
+
|
783 |
+
#: controllers/SecurityCheck.php:336
|
784 |
+
msgid "install.php & upgrade.php files are accessible "
|
785 |
+
msgstr ""
|
786 |
+
|
787 |
+
#: controllers/SecurityCheck.php:340
|
788 |
+
msgid ""
|
789 |
+
"WordPress is well-known for its ease of installation. <br/>It's important to "
|
790 |
+
"hide the wp-admin/install.php and wp-admin/upgrade.php files because there "
|
791 |
+
"have already been a couple of security issues regarding these files."
|
792 |
+
msgstr ""
|
793 |
+
|
794 |
+
#: controllers/SecurityCheck.php:341
|
795 |
+
#, php-format
|
796 |
+
msgid ""
|
797 |
+
"Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-admin/"
|
798 |
+
"install.php & wp-admin/upgrade.php files"
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: controllers/SecurityCheck.php:345
|
802 |
+
msgid "PHP register_globals is on"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: controllers/SecurityCheck.php:349
|
806 |
+
msgid ""
|
807 |
+
"This is one of the biggest security issues you can have on your site! If "
|
808 |
+
"your hosting company has this directive enabled by default, switch to "
|
809 |
+
"another company immediately!"
|
810 |
+
msgstr ""
|
811 |
+
|
812 |
+
#: controllers/SecurityCheck.php:350
|
813 |
+
msgid ""
|
814 |
+
"If you have access to php.ini file, set <code>register_globals = off</code> "
|
815 |
+
"or contact the hosting company to set it off"
|
816 |
+
msgstr ""
|
817 |
+
|
818 |
+
#: controllers/SecurityCheck.php:353
|
819 |
+
msgid "PHP expose_php is on"
|
820 |
+
msgstr ""
|
821 |
+
|
822 |
+
#: controllers/SecurityCheck.php:357
|
823 |
+
msgid ""
|
824 |
+
"Exposing the PHP version will make the job of attacking your site much "
|
825 |
+
"easier."
|
826 |
+
msgstr ""
|
827 |
+
|
828 |
+
#: controllers/SecurityCheck.php:358
|
829 |
+
msgid ""
|
830 |
+
"If you have access to php.ini file, set <code>expose_php = off</code> or "
|
831 |
+
"contact the hosting company to set it off"
|
832 |
+
msgstr ""
|
833 |
+
|
834 |
+
#: controllers/SecurityCheck.php:361
|
835 |
+
msgid "PHP safe_mode is on"
|
836 |
+
msgstr ""
|
837 |
+
|
838 |
+
#: controllers/SecurityCheck.php:365
|
839 |
+
msgid ""
|
840 |
+
"PHP safe mode was one of the attempts to solve security problems of shared "
|
841 |
+
"web hosting servers. <br /><br />It is still being used by some web hosting "
|
842 |
+
"providers, however, nowadays this is regarded as improper. A systematic "
|
843 |
+
"approach proves that it’s architecturally incorrect to try solving complex "
|
844 |
+
"security issues at the PHP level, rather than at the web server and OS "
|
845 |
+
"levels.<br /><br />Technically, safe mode is a PHP directive that restricts "
|
846 |
+
"the way some built-in PHP functions operate. The main problem here is "
|
847 |
+
"inconsistency. When turned on, PHP safe mode may prevent many legitimate PHP "
|
848 |
+
"functions from working correctly. At the same time there exists a variety of "
|
849 |
+
"methods to override safe mode limitations using PHP functions that aren’t "
|
850 |
+
"restricted, so if a hacker has already got in – safe mode is useless."
|
851 |
+
msgstr ""
|
852 |
+
|
853 |
+
#: controllers/SecurityCheck.php:366
|
854 |
+
msgid ""
|
855 |
+
"If you have access to php.ini file, set <code>safe_mode = off</code> or "
|
856 |
+
"contact the hosting company to set it off"
|
857 |
+
msgstr ""
|
858 |
+
|
859 |
+
#: controllers/SecurityCheck.php:369
|
860 |
+
msgid "PHP allow_url_include is on"
|
861 |
+
msgstr ""
|
862 |
+
|
863 |
+
#: controllers/SecurityCheck.php:373
|
864 |
+
msgid ""
|
865 |
+
"Having this PHP directive enabled will leave your site exposed to cross-site "
|
866 |
+
"attacks (XSS). <br /><br />There's absolutely no valid reason to enable this "
|
867 |
+
"directive, and using any PHP code that requires it is very risky."
|
868 |
+
msgstr ""
|
869 |
+
|
870 |
+
#: controllers/SecurityCheck.php:374
|
871 |
+
msgid ""
|
872 |
+
"If you have access to php.ini file, set <code>allow_url_include = off</code> "
|
873 |
+
"or contact the hosting company to set it off"
|
874 |
+
msgstr ""
|
875 |
+
|
876 |
+
#: controllers/SecurityCheck.php:377
|
877 |
+
msgid "Plugins/Themes editor enabled"
|
878 |
+
msgstr ""
|
879 |
+
|
880 |
+
#: controllers/SecurityCheck.php:381
|
881 |
+
msgid ""
|
882 |
+
"The plugins and themes file editor is a very convenient tool because it "
|
883 |
+
"enables you to make quick changes without the need to use FTP. <br /><br /"
|
884 |
+
">Unfortunately, it's also a security issue because it not only shows the PHP "
|
885 |
+
"source code, it also enables attackers to inject malicious code into your "
|
886 |
+
"site if they manage to gain access to admin."
|
887 |
+
msgstr ""
|
888 |
+
|
889 |
+
#: controllers/SecurityCheck.php:382
|
890 |
+
msgid ""
|
891 |
+
"Disable DISALLOW_FILE_EDIT for live websites in wp_config.php "
|
892 |
+
"<code>define('DISALLOW_FILE_EDIT', true);</code>"
|
893 |
+
msgstr ""
|
894 |
+
|
895 |
+
#: controllers/SecurityCheck.php:386
|
896 |
+
#, php-format
|
897 |
+
msgid "Folder %s is browsable "
|
898 |
+
msgstr ""
|
899 |
+
|
900 |
+
#: controllers/SecurityCheck.php:390
|
901 |
+
msgid ""
|
902 |
+
"Allowing anyone to view all files in the Uploads folder with a browser will "
|
903 |
+
"allow them to easily download all your uploaded files. It's a security and a "
|
904 |
+
"copyright issue."
|
905 |
+
msgstr ""
|
906 |
+
|
907 |
+
#: controllers/SecurityCheck.php:391
|
908 |
+
#, php-format
|
909 |
+
msgid "Learn how to disable %sDirectory Browsing%s"
|
910 |
+
msgstr ""
|
911 |
+
|
912 |
+
#: controllers/SecurityCheck.php:395
|
913 |
+
msgid "Windows Live Writer is on "
|
914 |
+
msgstr ""
|
915 |
+
|
916 |
+
#: controllers/SecurityCheck.php:399
|
917 |
+
msgid ""
|
918 |
+
"If you're not using Windows Live Writer there's really no valid reason to "
|
919 |
+
"have its link in the page header, because this tells the whole world you're "
|
920 |
+
"using WordPress."
|
921 |
+
msgstr ""
|
922 |
+
|
923 |
+
#: controllers/SecurityCheck.php:400
|
924 |
+
#, php-format
|
925 |
+
msgid "Switch on %sHide My Wp > Tweaks > Disable WLW Manifest scripts%s"
|
926 |
+
msgstr ""
|
927 |
+
|
928 |
+
#: controllers/SecurityCheck.php:404
|
929 |
+
msgid "XML-RPC access is on"
|
930 |
+
msgstr ""
|
931 |
+
|
932 |
+
#: controllers/SecurityCheck.php:408
|
933 |
+
msgid ""
|
934 |
+
"WordPress XML-RPC is a specification that aims to standardize communications "
|
935 |
+
"between different systems. It uses HTTP as the transport mechanism and XML "
|
936 |
+
"as encoding mechanism to enable a wide range of data to be transmitted. <br /"
|
937 |
+
"><br />The two biggest assets of the API are its extendibility and its "
|
938 |
+
"security. XML-RPC authenticates using basic authentication. It sends the "
|
939 |
+
"username and password with each request, which is a big no-no in security "
|
940 |
+
"circles."
|
941 |
+
msgstr ""
|
942 |
+
|
943 |
+
#: controllers/SecurityCheck.php:409
|
944 |
+
#, php-format
|
945 |
+
msgid "Switch on %sHide My Wp > Tweaks > Disable XML-RPC access%s"
|
946 |
+
msgstr ""
|
947 |
+
|
948 |
+
#: controllers/SecurityCheck.php:413
|
949 |
+
msgid "RDS is visible"
|
950 |
+
msgstr ""
|
951 |
+
|
952 |
+
#: controllers/SecurityCheck.php:417
|
953 |
+
msgid ""
|
954 |
+
"If you're not using any Really Simple Discovery services such as pingbacks, "
|
955 |
+
"there's no need to advertise that endpoint (link) in the header. Please note "
|
956 |
+
"that for most sites this is not a security issue because they \"want to be "
|
957 |
+
"discovered\", but if you want to hide the fact that you're using WP, this is "
|
958 |
+
"the way to go."
|
959 |
+
msgstr ""
|
960 |
+
|
961 |
+
#: controllers/SecurityCheck.php:418
|
962 |
+
#, php-format
|
963 |
+
msgid "Switch on %sHide My Wp > Tweaks > Hide RSD header%s"
|
964 |
+
msgstr ""
|
965 |
+
|
966 |
+
#: controllers/SecurityCheck.php:422
|
967 |
+
msgid "MySql Grant All Permissions"
|
968 |
+
msgstr ""
|
969 |
+
|
970 |
+
#: controllers/SecurityCheck.php:426
|
971 |
+
msgid ""
|
972 |
+
"If an attacker gains access to your wp-config.php file and gets the MySQL "
|
973 |
+
"username and password, he'll be able to login to that database and do "
|
974 |
+
"whatever that account allows. <br /><br />That's why it's important to keep "
|
975 |
+
"the account's privileges to a bare minimum.<br /><br />For instance, if "
|
976 |
+
"you're not installing any new plugins or updating WP, that account doesn't "
|
977 |
+
"need the CREATE or DROP table privileges.<br /><br />For regular, day-to-day "
|
978 |
+
"usage these are the recommended privileges: SELECT, INSERT, UPDATE and "
|
979 |
+
"DELETE."
|
980 |
+
msgstr ""
|
981 |
+
|
982 |
+
#: controllers/SecurityCheck.php:427
|
983 |
+
#, php-format
|
984 |
+
msgid "To learn how to revoke permissions from PhpMyAdmin %sClick here%s"
|
985 |
+
msgstr ""
|
986 |
+
|
987 |
+
#: controllers/SecurityCheck.php:430
|
988 |
+
msgid "Author URL by ID access"
|
989 |
+
msgstr ""
|
990 |
+
|
991 |
+
#: controllers/SecurityCheck.php:434
|
992 |
+
msgid ""
|
993 |
+
"Usernames (unlike passwords) are not secret. By knowing someone's username, "
|
994 |
+
"you can't log in to their account. You also need the password. <br /><br /"
|
995 |
+
">However, by knowing the username, you are one step closer to logging in "
|
996 |
+
"using the username to brute-force the password, or to gain access in a "
|
997 |
+
"similar way. <br /><br />That's why it's advisable to keep the list of "
|
998 |
+
"usernames private, at least to some degree. By default, by accessing siteurl."
|
999 |
+
"com/?author={id} and looping through IDs from 1 you can get a list of "
|
1000 |
+
"usernames, because WP will redirect you to siteurl.com/author/user/ if the "
|
1001 |
+
"ID exists in the system."
|
1002 |
+
msgstr ""
|
1003 |
+
|
1004 |
+
#: controllers/SecurityCheck.php:435
|
1005 |
+
#, php-format
|
1006 |
+
msgid "Switch on %sHide My Wp > Hide Author ID URL%s"
|
1007 |
+
msgstr ""
|
1008 |
+
|
1009 |
+
#: controllers/SecurityCheck.php:439
|
1010 |
+
msgid "Default WordPress Tagline"
|
1011 |
+
msgstr ""
|
1012 |
+
|
1013 |
+
#: controllers/SecurityCheck.php:443
|
1014 |
+
msgid ""
|
1015 |
+
"The WordPress site tagline is a short phrase located under the site title, "
|
1016 |
+
"similar to a subtitle or advertising slogan. The goal of a tagline is to "
|
1017 |
+
"convey the essence of your site to visitors. <br /><br />If you don't change "
|
1018 |
+
"the default tagline it will be very easy to detect that your website was "
|
1019 |
+
"actually built with WordPress"
|
1020 |
+
msgstr ""
|
1021 |
+
|
1022 |
+
#: controllers/SecurityCheck.php:444
|
1023 |
+
#, php-format
|
1024 |
+
msgid "Change the Tagline in %s > %s"
|
1025 |
+
msgstr ""
|
1026 |
+
|
1027 |
+
#: controllers/SecurityCheck.php:444
|
1028 |
+
msgid "Tagline"
|
1029 |
+
msgstr ""
|
1030 |
+
|
1031 |
+
#: controllers/SecurityCheck.php:521 controllers/SecurityCheck.php:549
|
1032 |
+
#: controllers/SecurityCheck.php:574
|
1033 |
+
msgid "Saved! You can run the test again."
|
1034 |
+
msgstr ""
|
1035 |
+
|
1036 |
+
#: controllers/SecurityCheck.php:526 controllers/SecurityCheck.php:553
|
1037 |
+
msgid "Could not fix it. You need to change it yourself."
|
1038 |
+
msgstr ""
|
1039 |
+
|
1040 |
+
#: controllers/SecurityCheck.php:567
|
1041 |
+
msgid "Saved! This task will be ignored on future tests."
|
1042 |
+
msgstr ""
|
1043 |
+
|
1044 |
+
#: controllers/SecurityCheck.php:621 controllers/SecurityCheck.php:639
|
1045 |
+
#: controllers/SecurityCheck.php:653 controllers/SecurityCheck.php:666
|
1046 |
+
#: controllers/SecurityCheck.php:678 controllers/SecurityCheck.php:923
|
1047 |
+
#: controllers/SecurityCheck.php:1005 controllers/SecurityCheck.php:1021
|
1048 |
+
#: controllers/SecurityCheck.php:1029 controllers/SecurityCheck.php:1105
|
1049 |
+
#: controllers/SecurityCheck.php:1118 controllers/SecurityCheck.php:1132
|
1050 |
+
#: controllers/SecurityCheck.php:1145 controllers/SecurityCheck.php:1157
|
1051 |
+
#: controllers/SecurityCheck.php:1162 controllers/SecurityCheck.php:1187
|
1052 |
+
#: controllers/SecurityCheck.php:1212 controllers/SecurityCheck.php:1226
|
1053 |
+
#: controllers/SecurityCheck.php:1240 controllers/SecurityCheck.php:1257
|
1054 |
+
#: controllers/SecurityCheck.php:1289 controllers/SecurityCheck.php:1311
|
1055 |
+
#: controllers/SecurityCheck.php:1333 controllers/SecurityCheck.php:1355
|
1056 |
+
#: controllers/SecurityCheck.php:1375 controllers/SecurityCheck.php:1397
|
1057 |
+
#: controllers/SecurityCheck.php:1411 controllers/SecurityCheck.php:1420
|
1058 |
+
msgid "Yes"
|
1059 |
+
msgstr ""
|
1060 |
+
|
1061 |
+
#: controllers/SecurityCheck.php:621 controllers/SecurityCheck.php:639
|
1062 |
+
#: controllers/SecurityCheck.php:653 controllers/SecurityCheck.php:666
|
1063 |
+
#: controllers/SecurityCheck.php:678 controllers/SecurityCheck.php:1005
|
1064 |
+
#: controllers/SecurityCheck.php:1021 controllers/SecurityCheck.php:1029
|
1065 |
+
#: controllers/SecurityCheck.php:1105 controllers/SecurityCheck.php:1118
|
1066 |
+
#: controllers/SecurityCheck.php:1132 controllers/SecurityCheck.php:1145
|
1067 |
+
#: controllers/SecurityCheck.php:1157 controllers/SecurityCheck.php:1182
|
1068 |
+
#: controllers/SecurityCheck.php:1192 controllers/SecurityCheck.php:1212
|
1069 |
+
#: controllers/SecurityCheck.php:1226 controllers/SecurityCheck.php:1240
|
1070 |
+
#: controllers/SecurityCheck.php:1289 controllers/SecurityCheck.php:1311
|
1071 |
+
#: controllers/SecurityCheck.php:1333 controllers/SecurityCheck.php:1355
|
1072 |
+
#: controllers/SecurityCheck.php:1375 controllers/SecurityCheck.php:1397
|
1073 |
+
#: controllers/SecurityCheck.php:1411 controllers/SecurityCheck.php:1420
|
1074 |
+
msgid "No"
|
1075 |
+
msgstr ""
|
1076 |
+
|
1077 |
+
#: controllers/SecurityCheck.php:747
|
1078 |
+
#, php-format
|
1079 |
+
msgid "%s plugin are outdated: %s"
|
1080 |
+
msgstr ""
|
1081 |
+
|
1082 |
+
#: controllers/SecurityCheck.php:747 controllers/SecurityCheck.php:823
|
1083 |
+
msgid "All plugins are up to date"
|
1084 |
+
msgstr ""
|
1085 |
+
|
1086 |
+
#: controllers/SecurityCheck.php:780
|
1087 |
+
#, php-format
|
1088 |
+
msgid "%s theme(s) are outdated: %s"
|
1089 |
+
msgstr ""
|
1090 |
+
|
1091 |
+
#: controllers/SecurityCheck.php:780
|
1092 |
+
msgid "Themes are up to date"
|
1093 |
+
msgstr ""
|
1094 |
+
|
1095 |
+
#: controllers/SecurityCheck.php:859
|
1096 |
+
msgid "All plugins are compatible"
|
1097 |
+
msgstr ""
|
1098 |
+
|
1099 |
+
#: controllers/SecurityCheck.php:944
|
1100 |
+
#, php-format
|
1101 |
+
msgid "%s days since last update"
|
1102 |
+
msgstr ""
|
1103 |
+
|
1104 |
+
#: controllers/SecurityCheck.php:944
|
1105 |
+
msgid "Updated"
|
1106 |
+
msgstr ""
|
1107 |
+
|
1108 |
+
#: controllers/SecurityCheck.php:961
|
1109 |
+
msgid "Empty"
|
1110 |
+
msgstr ""
|
1111 |
+
|
1112 |
+
#: controllers/SecurityCheck.php:966
|
1113 |
+
msgid "only "
|
1114 |
+
msgstr ""
|
1115 |
+
|
1116 |
+
#: controllers/SecurityCheck.php:971
|
1117 |
+
msgid "too simple"
|
1118 |
+
msgstr ""
|
1119 |
+
|
1120 |
+
#: controllers/SecurityCheck.php:976
|
1121 |
+
msgid "Good"
|
1122 |
+
msgstr ""
|
1123 |
+
|
1124 |
+
#: controllers/SecurityCheck.php:1023
|
1125 |
+
msgid ""
|
1126 |
+
"Change the wp-config.php file permission to Read-Only using File Manager."
|
1127 |
+
msgstr ""
|
1128 |
+
|
1129 |
+
#: controllers/SecurityCheck.php:1265
|
1130 |
+
msgid "no"
|
1131 |
+
msgstr ""
|
1132 |
+
|
1133 |
+
#: controllers/SecurityCheck.php:1417
|
1134 |
+
msgid "Just another WordPress site"
|
1135 |
+
msgstr ""
|
1136 |
+
|
1137 |
+
#: controllers/Settings.php:45
|
1138 |
+
#, php-format
|
1139 |
+
msgid ""
|
1140 |
+
"NGINX detected. In case you didn't add the code in the NGINX config already, "
|
1141 |
+
"please add the following line. %s"
|
1142 |
+
msgstr ""
|
1143 |
+
|
1144 |
+
#: controllers/Settings.php:45 models/Rewrite.php:684
|
1145 |
+
msgid "Learn How To Add the Code"
|
1146 |
+
msgstr ""
|
1147 |
+
|
1148 |
+
#: controllers/Settings.php:45
|
1149 |
+
msgid "Don't forget to reload the Nginx service."
|
1150 |
+
msgstr ""
|
1151 |
+
|
1152 |
+
#: controllers/Settings.php:45
|
1153 |
+
msgid "Learn How"
|
1154 |
+
msgstr ""
|
1155 |
+
|
1156 |
+
#: controllers/Settings.php:54 view/Backup.php:16
|
1157 |
+
msgid "Restore Settings"
|
1158 |
+
msgstr ""
|
1159 |
+
|
1160 |
+
#: controllers/Settings.php:57
|
1161 |
+
msgid "You want to restore the last saved settings? "
|
1162 |
+
msgstr ""
|
1163 |
+
|
1164 |
+
#: controllers/Settings.php:75
|
1165 |
+
#, php-format
|
1166 |
+
msgid ""
|
1167 |
+
"%sLimited Time Offer%s: Get %s65%% OFF%s today on Hide My WP Ghost 5 "
|
1168 |
+
"Websites License. %sHurry Up!%s"
|
1169 |
+
msgstr ""
|
1170 |
+
|
1171 |
+
#: controllers/Settings.php:122
|
1172 |
+
#, php-format
|
1173 |
+
msgid ""
|
1174 |
+
"New Plugin/Theme detected! You need to save the Hide My WP Setting again to "
|
1175 |
+
"include them all! %sClick here%s"
|
1176 |
+
msgstr ""
|
1177 |
+
|
1178 |
+
#: controllers/Settings.php:135
|
1179 |
+
#, php-format
|
1180 |
+
msgid ""
|
1181 |
+
"New Plugin/Theme detected! You need to save the Hide My WP Setting again to "
|
1182 |
+
"include them all! %sSave Settings%s"
|
1183 |
+
msgstr ""
|
1184 |
+
|
1185 |
+
#: controllers/Settings.php:151
|
1186 |
+
#, php-format
|
1187 |
+
msgid ""
|
1188 |
+
"To activate the new %sHide My WP %s %s settings you need to confirm and re-"
|
1189 |
+
"login!"
|
1190 |
+
msgstr ""
|
1191 |
+
|
1192 |
+
#: controllers/Settings.php:159
|
1193 |
+
msgid "Yes, I'm ready to re-login"
|
1194 |
+
msgstr ""
|
1195 |
+
|
1196 |
+
#: controllers/Settings.php:166 view/FrontendCheck.php:36
|
1197 |
+
msgid "No, abort"
|
1198 |
+
msgstr ""
|
1199 |
+
|
1200 |
+
#: controllers/Settings.php:207
|
1201 |
+
msgid "My Account"
|
1202 |
+
msgstr ""
|
1203 |
+
|
1204 |
+
#: controllers/Settings.php:336
|
1205 |
+
msgid ""
|
1206 |
+
"Error: You entered the same text twice in the Text Mapping. We removed the "
|
1207 |
+
"duplicates to prevent any redirect errors."
|
1208 |
+
msgstr ""
|
1209 |
+
|
1210 |
+
#: controllers/Settings.php:479
|
1211 |
+
msgid ""
|
1212 |
+
"ERROR! Please make sure you use a valid token to connect the plugin with "
|
1213 |
+
"WPPlugins"
|
1214 |
+
msgstr ""
|
1215 |
+
|
1216 |
+
#: controllers/Settings.php:484
|
1217 |
+
msgid ""
|
1218 |
+
"ERROR! Please make sure you use an email address to connect the plugin with "
|
1219 |
+
"WPPlugins"
|
1220 |
+
msgstr ""
|
1221 |
+
|
1222 |
+
#: controllers/Settings.php:533
|
1223 |
+
msgid "Great! The backup is restored."
|
1224 |
+
msgstr ""
|
1225 |
+
|
1226 |
+
#: controllers/Settings.php:547 controllers/Settings.php:550
|
1227 |
+
msgid "Error! The backup is not valid."
|
1228 |
+
msgstr ""
|
1229 |
+
|
1230 |
+
#: controllers/Settings.php:553
|
1231 |
+
msgid "Error! You have to enter a previous saved backup file."
|
1232 |
+
msgstr ""
|
1233 |
+
|
1234 |
+
#: controllers/Settings.php:566
|
1235 |
+
msgid "Hide My Wp > Question"
|
1236 |
+
msgstr ""
|
1237 |
+
|
1238 |
+
#: models/Brute.php:427
|
1239 |
+
#, php-format
|
1240 |
+
msgid "%sYou failed to correctly answer the math problem.%s Please try again"
|
1241 |
+
msgstr ""
|
1242 |
+
|
1243 |
+
#: models/Brute.php:435
|
1244 |
+
#, php-format
|
1245 |
+
msgid ""
|
1246 |
+
"%sERROR:%s Email or Password is incorrect. %s %d attempts left before lockout"
|
1247 |
+
msgstr ""
|
1248 |
+
|
1249 |
+
#: models/Brute.php:459
|
1250 |
+
msgid "Prove your humanity: "
|
1251 |
+
msgstr ""
|
1252 |
+
|
1253 |
+
#: models/Brute.php:472
|
1254 |
+
msgid "Login Blocked by Hide My WordPress"
|
1255 |
+
msgstr ""
|
1256 |
+
|
1257 |
+
#: models/Compatibility.php:211
|
1258 |
+
msgid ""
|
1259 |
+
"CDN Enabled detected. Please include the new wp-content and wp-includes "
|
1260 |
+
"paths in CDN Enabler Settings"
|
1261 |
+
msgstr ""
|
1262 |
+
|
1263 |
+
#: models/Compatibility.php:219
|
1264 |
+
#, php-format
|
1265 |
+
msgid ""
|
1266 |
+
"CDN Enabler detected! Learn how to configure it with Hide My WP %sClick here"
|
1267 |
+
"%s"
|
1268 |
+
msgstr ""
|
1269 |
+
|
1270 |
+
#: models/Compatibility.php:231
|
1271 |
+
#, php-format
|
1272 |
+
msgid ""
|
1273 |
+
"WP Super Cache CDN detected. Please include %s and %s paths in WP Super "
|
1274 |
+
"Cache > CDN > Include directories"
|
1275 |
+
msgstr ""
|
1276 |
+
|
1277 |
+
#: models/Compatibility.php:238
|
1278 |
+
#, php-format
|
1279 |
+
msgid ""
|
1280 |
+
"Hide My WP does not work without mode_rewrite. Please activate the rewrite "
|
1281 |
+
"module in Apache. %sMore details%s"
|
1282 |
+
msgstr ""
|
1283 |
+
|
1284 |
+
#: models/Compatibility.php:243
|
1285 |
+
#, php-format
|
1286 |
+
msgid ""
|
1287 |
+
"Hide My WP does not work with %s Permalinks. Change it to %s or other type "
|
1288 |
+
"in Settings > Permalinks in order to hide it"
|
1289 |
+
msgstr ""
|
1290 |
+
|
1291 |
+
#: models/Compatibility.php:243
|
1292 |
+
msgid "Plain"
|
1293 |
+
msgstr ""
|
1294 |
+
|
1295 |
+
#: models/Compatibility.php:243
|
1296 |
+
msgid "Post Name"
|
1297 |
+
msgstr ""
|
1298 |
+
|
1299 |
+
#: models/Compatibility.php:248
|
1300 |
+
#, php-format
|
1301 |
+
msgid ""
|
1302 |
+
"You need to activate the URL Rewrite for IIS to be able to change the "
|
1303 |
+
"permalink structure to friendly URL (without index.php). %sMore details%s"
|
1304 |
+
msgstr ""
|
1305 |
+
|
1306 |
+
#: models/Compatibility.php:250
|
1307 |
+
msgid ""
|
1308 |
+
"You need to set the permalink structure to friendly URL (without index.php)."
|
1309 |
+
msgstr ""
|
1310 |
+
|
1311 |
+
#: models/Compatibility.php:255
|
1312 |
+
msgid ""
|
1313 |
+
"The constant ADMIN_COOKIE_PATH is defined in wp-config.php by another "
|
1314 |
+
"plugin. Hide My WP will not work unless you remove the line "
|
1315 |
+
"define('ADMIN_COOKIE_PATH', ...);"
|
1316 |
+
msgstr ""
|
1317 |
+
|
1318 |
+
#: models/Compatibility.php:261
|
1319 |
+
#, php-format
|
1320 |
+
msgid ""
|
1321 |
+
"Inmotion detected. %sPlease read how to make the plugin compatible with "
|
1322 |
+
"Inmotion Nginx Cache%s"
|
1323 |
+
msgstr ""
|
1324 |
+
|
1325 |
+
#: models/Compatibility.php:273
|
1326 |
+
msgid ""
|
1327 |
+
"Hide My WP rules are not saved in the config file and this may affect the "
|
1328 |
+
"website loading speed."
|
1329 |
+
msgstr ""
|
1330 |
+
|
1331 |
+
#: models/Compatibility.php:283
|
1332 |
+
#, php-format
|
1333 |
+
msgid ""
|
1334 |
+
"Godaddy detected! To avoid CSS errors, make sure you switch off the CDN from "
|
1335 |
+
"%s"
|
1336 |
+
msgstr ""
|
1337 |
+
|
1338 |
+
#: models/Rewrite.php:643
|
1339 |
+
#, php-format
|
1340 |
+
msgid ""
|
1341 |
+
"IIS detected. You need to update your %s file by adding the following lines "
|
1342 |
+
"after <rules> tag: %s"
|
1343 |
+
msgstr ""
|
1344 |
+
|
1345 |
+
#: models/Rewrite.php:664 models/Rewrite.php:732
|
1346 |
+
#, php-format
|
1347 |
+
msgid ""
|
1348 |
+
"Config file is not writable. You need to update your %s file by adding the "
|
1349 |
+
"following lines at the beginning of the file: %s"
|
1350 |
+
msgstr ""
|
1351 |
+
|
1352 |
+
#: models/Rewrite.php:684
|
1353 |
+
#, php-format
|
1354 |
+
msgid ""
|
1355 |
+
"WpEngine detected. Add the redirects in the WpEngine Redirect rules panel %s"
|
1356 |
+
msgstr ""
|
1357 |
+
|
1358 |
+
#: models/Rewrite.php:764
|
1359 |
+
#, php-format
|
1360 |
+
msgid ""
|
1361 |
+
"Config file is not writable. You have to added it manually at the beginning "
|
1362 |
+
"of the %s file: %s"
|
1363 |
+
msgstr ""
|
1364 |
+
|
1365 |
+
#: models/Rewrite.php:2034
|
1366 |
+
msgid ""
|
1367 |
+
"There has been a critical error on your website. Please check your site "
|
1368 |
+
"admin email inbox for instructions."
|
1369 |
+
msgstr ""
|
1370 |
+
|
1371 |
+
#: models/Rewrite.php:2036
|
1372 |
+
msgid "There has been a critical error on your website."
|
1373 |
+
msgstr ""
|
1374 |
+
|
1375 |
+
#: models/Settings.php:12
|
1376 |
+
msgid "Permalinks"
|
1377 |
+
msgstr ""
|
1378 |
+
|
1379 |
+
#: models/Settings.php:13
|
1380 |
+
msgid "Change common paths"
|
1381 |
+
msgstr ""
|
1382 |
+
|
1383 |
+
#: models/Settings.php:18
|
1384 |
+
msgid "Text and URL mapping"
|
1385 |
+
msgstr ""
|
1386 |
+
|
1387 |
+
#: models/Settings.php:23
|
1388 |
+
msgid "Add WordPress Tweaks"
|
1389 |
+
msgstr ""
|
1390 |
+
|
1391 |
+
#: models/Settings.php:27
|
1392 |
+
msgid "Brute Force"
|
1393 |
+
msgstr ""
|
1394 |
+
|
1395 |
+
#: models/Settings.php:28
|
1396 |
+
msgid "Add Login Protection"
|
1397 |
+
msgstr ""
|
1398 |
+
|
1399 |
+
#: models/Settings.php:33
|
1400 |
+
msgid "Website Events Log"
|
1401 |
+
msgstr ""
|
1402 |
+
|
1403 |
+
#: models/Settings.php:38
|
1404 |
+
msgid "Test Your Website"
|
1405 |
+
msgstr ""
|
1406 |
+
|
1407 |
+
#: models/Settings.php:43 view/Plugins.php:29
|
1408 |
+
msgid "Plugins"
|
1409 |
+
msgstr ""
|
1410 |
+
|
1411 |
+
#: models/Settings.php:49
|
1412 |
+
msgid "Save your settings"
|
1413 |
+
msgstr ""
|
1414 |
+
|
1415 |
+
#: models/Settings.php:67
|
1416 |
+
msgid "WP Super Cache"
|
1417 |
+
msgstr ""
|
1418 |
+
|
1419 |
+
#: models/Settings.php:69
|
1420 |
+
msgid ""
|
1421 |
+
"A very fast caching engine for WordPress that produces static html files. "
|
1422 |
+
"Works well with Minify HTML plugin."
|
1423 |
+
msgstr ""
|
1424 |
+
|
1425 |
+
#: models/Settings.php:74
|
1426 |
+
msgid "Autoptimize"
|
1427 |
+
msgstr ""
|
1428 |
+
|
1429 |
+
#: models/Settings.php:76
|
1430 |
+
msgid ""
|
1431 |
+
"Autoptimize speeds up your website by optimizing JS, CSS and HTML, async-ing "
|
1432 |
+
"JavaScript, removing emoji cruft, optimizing Google Fonts and more."
|
1433 |
+
msgstr ""
|
1434 |
+
|
1435 |
+
#: models/Settings.php:81
|
1436 |
+
msgid "Minify HTML"
|
1437 |
+
msgstr ""
|
1438 |
+
|
1439 |
+
#: models/Settings.php:83
|
1440 |
+
msgid ""
|
1441 |
+
"Minify HTML output for clean looking markup and faster downloading. Minify "
|
1442 |
+
"HTML also has optional specialized minification for JS and internal CSS."
|
1443 |
+
msgstr ""
|
1444 |
+
|
1445 |
+
#: models/Settings.php:88
|
1446 |
+
msgid "iThemes Security"
|
1447 |
+
msgstr ""
|
1448 |
+
|
1449 |
+
#: models/Settings.php:90
|
1450 |
+
msgid ""
|
1451 |
+
"iThemes Security gives you over 30+ ways to secure and protect your WP site. "
|
1452 |
+
"WP sites can be an easy target for attacks because of plugin "
|
1453 |
+
"vulnerabilities, weak passwords and obsolete software."
|
1454 |
+
msgstr ""
|
1455 |
+
|
1456 |
+
#: models/Settings.php:95
|
1457 |
+
msgid "Sucuri Security"
|
1458 |
+
msgstr ""
|
1459 |
+
|
1460 |
+
#: models/Settings.php:97
|
1461 |
+
msgid ""
|
1462 |
+
"The Sucuri WordPress Security plugin is a security toolset for security "
|
1463 |
+
"integrity monitoring, malware detection and security hardening."
|
1464 |
+
msgstr ""
|
1465 |
+
|
1466 |
+
#: models/Settings.php:102
|
1467 |
+
msgid "Back Up WordPress"
|
1468 |
+
msgstr ""
|
1469 |
+
|
1470 |
+
#: models/Settings.php:104
|
1471 |
+
msgid ""
|
1472 |
+
"Simple automated backups of your WordPress-powered website. Back Up "
|
1473 |
+
"WordPress will back up your entire site including your database and all your "
|
1474 |
+
"files on a schedule that suits you."
|
1475 |
+
msgstr ""
|
1476 |
+
|
1477 |
+
#: models/Settings.php:109
|
1478 |
+
msgid "SEO SQUIRRLY"
|
1479 |
+
msgstr ""
|
1480 |
+
|
1481 |
+
#: models/Settings.php:111
|
1482 |
+
msgid ""
|
1483 |
+
"Welcome to Assisted WordPress SEO. Say Good-Bye to Search Engine "
|
1484 |
+
"Frustrations. Squirrly assists you in getting Excellent SEO for Humans and "
|
1485 |
+
"Search Engines."
|
1486 |
+
msgstr ""
|
1487 |
+
|
1488 |
+
#: models/Settings.php:116
|
1489 |
+
msgid "Elementor Page Builder"
|
1490 |
+
msgstr ""
|
1491 |
+
|
1492 |
+
#: models/Settings.php:118
|
1493 |
+
msgid ""
|
1494 |
+
"The most advanced frontend drag & drop page builder. Create high-end, pixel "
|
1495 |
+
"perfect websites at record speeds. Any theme, any page, any design."
|
1496 |
+
msgstr ""
|
1497 |
+
|
1498 |
+
#: models/Settings.php:123
|
1499 |
+
msgid "Weglot Translate"
|
1500 |
+
msgstr ""
|
1501 |
+
|
1502 |
+
#: models/Settings.php:125
|
1503 |
+
msgid ""
|
1504 |
+
"Translate your website into multiple languages without any code. Weglot "
|
1505 |
+
"Translate is fully SEO compatible and follows Google's best practices."
|
1506 |
+
msgstr ""
|
1507 |
+
|
1508 |
+
#: models/Settings.php:130
|
1509 |
+
msgid "AddToAny Share Btn"
|
1510 |
+
msgstr ""
|
1511 |
+
|
1512 |
+
#: models/Settings.php:132
|
1513 |
+
msgid ""
|
1514 |
+
"Share buttons for WordPress including the AddToAny sharing button, Facebook, "
|
1515 |
+
"Twitter, Google+, Pinterest, WhatsApp, many more, and follow icons too."
|
1516 |
+
msgstr ""
|
1517 |
+
|
1518 |
+
#: models/Settings.php:146
|
1519 |
+
msgid ""
|
1520 |
+
"You can't set both ADMIN and LOGIN with the same name. Please use different "
|
1521 |
+
"names"
|
1522 |
+
msgstr ""
|
1523 |
+
|
1524 |
+
#: models/Settings.php:295
|
1525 |
+
#, php-format
|
1526 |
+
msgid ""
|
1527 |
+
"Short name detected: %s. You need to use unique paths with more than 4 chars "
|
1528 |
+
"to avoid WordPress errors."
|
1529 |
+
msgstr ""
|
1530 |
+
|
1531 |
+
#: models/Settings.php:300
|
1532 |
+
#, php-format
|
1533 |
+
msgid ""
|
1534 |
+
"Invalid name detected: %s. You need to use another name to avoid WordPress "
|
1535 |
+
"errors."
|
1536 |
+
msgstr ""
|
1537 |
+
|
1538 |
+
#: models/Settings.php:305
|
1539 |
+
#, php-format
|
1540 |
+
msgid ""
|
1541 |
+
"Invalid name detected: %s. Add only the final path name to avoid WordPress "
|
1542 |
+
"errors."
|
1543 |
+
msgstr ""
|
1544 |
+
|
1545 |
+
#: models/Settings.php:309
|
1546 |
+
#, php-format
|
1547 |
+
msgid ""
|
1548 |
+
"Invalid name detected: %s. The name can't start with / to avoid WordPress "
|
1549 |
+
"errors."
|
1550 |
+
msgstr ""
|
1551 |
+
|
1552 |
+
#: models/Settings.php:316
|
1553 |
+
#, php-format
|
1554 |
+
msgid ""
|
1555 |
+
"Invalid name detected: %s. The paths can't end with . to avoid WordPress "
|
1556 |
+
"errors."
|
1557 |
+
msgstr ""
|
1558 |
+
|
1559 |
+
#: models/Settings.php:343
|
1560 |
+
#, php-format
|
1561 |
+
msgid ""
|
1562 |
+
"Weak name detected: %s. You need to use another name to increase your "
|
1563 |
+
"website security."
|
1564 |
+
msgstr ""
|
1565 |
+
|
1566 |
+
#: view/Advanced.php:11
|
1567 |
+
msgid "Redirect Settings"
|
1568 |
+
msgstr ""
|
1569 |
+
|
1570 |
+
#: view/Advanced.php:15
|
1571 |
+
msgid "Redirect hidden paths"
|
1572 |
+
msgstr ""
|
1573 |
+
|
1574 |
+
#: view/Advanced.php:19
|
1575 |
+
msgid "Front page"
|
1576 |
+
msgstr ""
|
1577 |
+
|
1578 |
+
#: view/Advanced.php:20
|
1579 |
+
msgid "404 page"
|
1580 |
+
msgstr ""
|
1581 |
+
|
1582 |
+
#: view/Advanced.php:32
|
1583 |
+
msgid ""
|
1584 |
+
"Redirect the protected paths /wp-admin, /wp-login to Front Page or 404 page."
|
1585 |
+
msgstr ""
|
1586 |
+
|
1587 |
+
#: view/Advanced.php:33
|
1588 |
+
msgid ""
|
1589 |
+
"You can create a new page and come back to choose to redirect to that page"
|
1590 |
+
msgstr ""
|
1591 |
+
|
1592 |
+
#: view/Advanced.php:39
|
1593 |
+
msgid "Custom Safe URL Param"
|
1594 |
+
msgstr ""
|
1595 |
+
|
1596 |
+
#: view/Advanced.php:40
|
1597 |
+
msgid "eg. disable_url, safe_url"
|
1598 |
+
msgstr ""
|
1599 |
+
|
1600 |
+
#: view/Advanced.php:46
|
1601 |
+
msgid ""
|
1602 |
+
"The Safe URL will set all the settings to default. Use it only if you're "
|
1603 |
+
"locked out"
|
1604 |
+
msgstr ""
|
1605 |
+
|
1606 |
+
#: view/Advanced.php:47
|
1607 |
+
msgid "Safe URL:"
|
1608 |
+
msgstr ""
|
1609 |
+
|
1610 |
+
#: view/Advanced.php:53
|
1611 |
+
msgid "Compatibility Settings"
|
1612 |
+
msgstr ""
|
1613 |
+
|
1614 |
+
#: view/Advanced.php:61
|
1615 |
+
msgid "Fix Relative URLs"
|
1616 |
+
msgstr ""
|
1617 |
+
|
1618 |
+
#: view/Advanced.php:63
|
1619 |
+
#, php-format
|
1620 |
+
msgid "Convert links like /wp-content/* into %s/wp-content/*."
|
1621 |
+
msgstr ""
|
1622 |
+
|
1623 |
+
#: view/Advanced.php:73
|
1624 |
+
msgid "Fix Sitemaps XML"
|
1625 |
+
msgstr ""
|
1626 |
+
|
1627 |
+
#: view/Advanced.php:75
|
1628 |
+
msgid "Double check the Sitemap XML files and make sure the paths are changed."
|
1629 |
+
msgstr ""
|
1630 |
+
|
1631 |
+
#: view/Advanced.php:85
|
1632 |
+
msgid "Fix Robots.txt"
|
1633 |
+
msgstr ""
|
1634 |
+
|
1635 |
+
#: view/Advanced.php:87
|
1636 |
+
msgid "Hide WordPress paths from robots.txt file"
|
1637 |
+
msgstr ""
|
1638 |
+
|
1639 |
+
#: view/Advanced.php:97
|
1640 |
+
msgid "Late Loading"
|
1641 |
+
msgstr ""
|
1642 |
+
|
1643 |
+
#: view/Advanced.php:99
|
1644 |
+
msgid ""
|
1645 |
+
"Load HMW after all plugins are loaded. Useful for CDN plugins (eg. CDN "
|
1646 |
+
"Enabler)."
|
1647 |
+
msgstr ""
|
1648 |
+
|
1649 |
+
#: view/Advanced.php:100
|
1650 |
+
msgid "(only if other cache plugins request this)"
|
1651 |
+
msgstr ""
|
1652 |
+
|
1653 |
+
#: view/Advanced.php:110
|
1654 |
+
msgid "Clean Login Page"
|
1655 |
+
msgstr ""
|
1656 |
+
|
1657 |
+
#: view/Advanced.php:112
|
1658 |
+
msgid ""
|
1659 |
+
"Cancel the login hooks from other plugins and themes to prevent them from "
|
1660 |
+
"changing the Hide My WordPress redirects."
|
1661 |
+
msgstr ""
|
1662 |
+
|
1663 |
+
#: view/Advanced.php:112
|
1664 |
+
msgid "(not recommended)"
|
1665 |
+
msgstr ""
|
1666 |
+
|
1667 |
+
#: view/Advanced.php:121
|
1668 |
+
msgid "Cache Settings"
|
1669 |
+
msgstr ""
|
1670 |
+
|
1671 |
+
#: view/Advanced.php:129
|
1672 |
+
msgid "Security Check Notification"
|
1673 |
+
msgstr ""
|
1674 |
+
|
1675 |
+
#: view/Advanced.php:131
|
1676 |
+
msgid "Show Security Check notification when it's not checked every week."
|
1677 |
+
msgstr ""
|
1678 |
+
|
1679 |
+
#: view/Advanced.php:147
|
1680 |
+
msgid "Optimize CSS and JS files"
|
1681 |
+
msgstr ""
|
1682 |
+
|
1683 |
+
#: view/Advanced.php:148
|
1684 |
+
msgid "Cache CSS, JS and Images to increase the frontend loading speed."
|
1685 |
+
msgstr ""
|
1686 |
+
|
1687 |
+
#: view/Advanced.php:149
|
1688 |
+
#, php-format
|
1689 |
+
msgid "Check the website loading speed with %sPingdom Tool%s"
|
1690 |
+
msgstr ""
|
1691 |
+
|
1692 |
+
#: view/Advanced.php:157
|
1693 |
+
msgid "Notification Settings"
|
1694 |
+
msgstr ""
|
1695 |
+
|
1696 |
+
#: view/Advanced.php:165
|
1697 |
+
msgid "Email notification"
|
1698 |
+
msgstr ""
|
1699 |
+
|
1700 |
+
#: view/Advanced.php:166
|
1701 |
+
msgid "Send me an email with the changed admin and login URLs"
|
1702 |
+
msgstr ""
|
1703 |
+
|
1704 |
+
#: view/Advanced.php:175 view/Connect.php:17
|
1705 |
+
msgid "Email Address"
|
1706 |
+
msgstr ""
|
1707 |
+
|
1708 |
+
#: view/Advanced.php:191 view/Brute.php:115 view/Mapping.php:210
|
1709 |
+
#: view/Mapping.php:215 view/Permalinks.php:530 view/Permalinks.php:535
|
1710 |
+
#: view/Tweaks.php:162
|
1711 |
+
msgid "Save"
|
1712 |
+
msgstr ""
|
1713 |
+
|
1714 |
+
#: view/Advanced.php:192 view/Brute.php:116 view/Mapping.php:211
|
1715 |
+
#: view/Mapping.php:216 view/Permalinks.php:531 view/Permalinks.php:536
|
1716 |
+
#: view/Tweaks.php:163
|
1717 |
+
#, php-format
|
1718 |
+
msgid "Love Hide My WP %s? Show us ;)"
|
1719 |
+
msgstr ""
|
1720 |
+
|
1721 |
+
#: view/Advanced.php:199 view/Mapping.php:243 view/Permalinks.php:563
|
1722 |
+
#: view/Tweaks.php:192
|
1723 |
+
msgid "Love Hide My WP?"
|
1724 |
+
msgstr ""
|
1725 |
+
|
1726 |
+
#: view/Advanced.php:204 view/Permalinks.php:568 view/Tweaks.php:197
|
1727 |
+
msgid "Please help us and support our plugin on WordPress.org"
|
1728 |
+
msgstr ""
|
1729 |
+
|
1730 |
+
#: view/Advanced.php:207 view/Mapping.php:249 view/Permalinks.php:571
|
1731 |
+
#: view/Tweaks.php:200
|
1732 |
+
msgid "Rate Hide My WP"
|
1733 |
+
msgstr ""
|
1734 |
+
|
1735 |
+
#: view/Advanced.php:210 view/Permalinks.php:574 view/Tweaks.php:203
|
1736 |
+
msgid "Contact us after you left the review cause we have a surprise for you."
|
1737 |
+
msgstr ""
|
1738 |
+
|
1739 |
+
#: view/Advanced.php:221 view/Mapping.php:224 view/Permalinks.php:544
|
1740 |
+
#: view/Tweaks.php:173
|
1741 |
+
msgid "Check Your Website"
|
1742 |
+
msgstr ""
|
1743 |
+
|
1744 |
+
#: view/Advanced.php:223 view/Mapping.php:226 view/Permalinks.php:546
|
1745 |
+
#: view/Tweaks.php:175
|
1746 |
+
msgid "Check if your website is secured with the current settings."
|
1747 |
+
msgstr ""
|
1748 |
+
|
1749 |
+
#: view/Advanced.php:229 view/Mapping.php:232 view/Permalinks.php:552
|
1750 |
+
#: view/Tweaks.php:181
|
1751 |
+
msgid ""
|
1752 |
+
"Make sure you save the settings and empty the cache before checking your "
|
1753 |
+
"website with our tool."
|
1754 |
+
msgstr ""
|
1755 |
+
|
1756 |
+
#: view/Advanced.php:233 view/Mapping.php:236 view/Permalinks.php:556
|
1757 |
+
#: view/Tweaks.php:185
|
1758 |
+
msgid "Learn more about Hide My WP"
|
1759 |
+
msgstr ""
|
1760 |
+
|
1761 |
+
#: view/Backup.php:7
|
1762 |
+
msgid "Backup/Restore Settings"
|
1763 |
+
msgstr ""
|
1764 |
+
|
1765 |
+
#: view/Backup.php:9
|
1766 |
+
msgid ""
|
1767 |
+
"Click Backup and the download will start automatically. You can use the "
|
1768 |
+
"Backup for all your websites."
|
1769 |
+
msgstr ""
|
1770 |
+
|
1771 |
+
#: view/Backup.php:15 view/Backup.php:55
|
1772 |
+
msgid "Backup Settings"
|
1773 |
+
msgstr ""
|
1774 |
+
|
1775 |
+
#: view/Backup.php:26
|
1776 |
+
msgid "Hide My Wp Restore"
|
1777 |
+
msgstr ""
|
1778 |
+
|
1779 |
+
#: view/Backup.php:32
|
1780 |
+
msgid "Upload the file with the saved Hide My Wp Settings"
|
1781 |
+
msgstr ""
|
1782 |
+
|
1783 |
+
#: view/Backup.php:40
|
1784 |
+
msgid "Restore Backup"
|
1785 |
+
msgstr ""
|
1786 |
+
|
1787 |
+
#: view/Backup.php:56
|
1788 |
+
msgid ""
|
1789 |
+
"It's important to <strong>save your settings every time you change them</"
|
1790 |
+
"strong>. You can use the backup to configure other websites you own."
|
1791 |
+
msgstr ""
|
1792 |
+
|
1793 |
+
#: view/Brute.php:15
|
1794 |
+
msgid "Use Brute Force Protection"
|
1795 |
+
msgstr ""
|
1796 |
+
|
1797 |
+
#: view/Brute.php:17
|
1798 |
+
msgid "Protects your website against brute force login attacks"
|
1799 |
+
msgstr ""
|
1800 |
+
|
1801 |
+
#: view/Brute.php:28
|
1802 |
+
msgid "Math Check protection"
|
1803 |
+
msgstr ""
|
1804 |
+
|
1805 |
+
#: view/Brute.php:53
|
1806 |
+
msgid "Max fail attempts"
|
1807 |
+
msgstr ""
|
1808 |
+
|
1809 |
+
#: view/Brute.php:54
|
1810 |
+
msgid "Block IP on login page"
|
1811 |
+
msgstr ""
|
1812 |
+
|
1813 |
+
#: view/Brute.php:62
|
1814 |
+
msgid "Ban duration"
|
1815 |
+
msgstr ""
|
1816 |
+
|
1817 |
+
#: view/Brute.php:63
|
1818 |
+
msgid "No. of seconds"
|
1819 |
+
msgstr ""
|
1820 |
+
|
1821 |
+
#: view/Brute.php:71
|
1822 |
+
msgid "Lockout Message"
|
1823 |
+
msgstr ""
|
1824 |
+
|
1825 |
+
#: view/Brute.php:72
|
1826 |
+
msgid "Show message instead of login form"
|
1827 |
+
msgstr ""
|
1828 |
+
|
1829 |
+
#: view/Brute.php:86
|
1830 |
+
msgid "Whitelist IPs"
|
1831 |
+
msgstr ""
|
1832 |
+
|
1833 |
+
#: view/Brute.php:87
|
1834 |
+
#, php-format
|
1835 |
+
msgid ""
|
1836 |
+
"You can white-list a single IP like 192.168.0.1 or a range of 245 IPs like "
|
1837 |
+
"192.168.0.*. Find your IP with %s"
|
1838 |
+
msgstr ""
|
1839 |
+
|
1840 |
+
#: view/Brute.php:100
|
1841 |
+
msgid "Ban IPs"
|
1842 |
+
msgstr ""
|
1843 |
+
|
1844 |
+
#: view/Brute.php:101
|
1845 |
+
msgid ""
|
1846 |
+
"You can ban a single IP like 192.168.0.1 or a range of 245 IPs like "
|
1847 |
+
"192.168.0.*. These IPs will not be able to access the login page."
|
1848 |
+
msgstr ""
|
1849 |
+
|
1850 |
+
#: view/Brute.php:122
|
1851 |
+
msgid "Blocked IPs"
|
1852 |
+
msgstr ""
|
1853 |
+
|
1854 |
+
#: view/Brute.php:128
|
1855 |
+
msgid "Unlock all"
|
1856 |
+
msgstr ""
|
1857 |
+
|
1858 |
+
#: view/Brute.php:139
|
1859 |
+
msgid "Brute Force Login Protection"
|
1860 |
+
msgstr ""
|
1861 |
+
|
1862 |
+
#: view/Brute.php:140
|
1863 |
+
msgid ""
|
1864 |
+
"Protects your website against brute force login attacks using Hide My "
|
1865 |
+
"WordPress <br /><br /> A common threat web developers face is a password-"
|
1866 |
+
"guessing attack known as a brute force attack. A brute-force attack is an "
|
1867 |
+
"attempt to discover a password by systematically trying every possible "
|
1868 |
+
"combination of letters, numbers, and symbols until you discover the one "
|
1869 |
+
"correct combination that works. "
|
1870 |
+
msgstr ""
|
1871 |
+
|
1872 |
+
#: view/Brute.php:146 view/Log.php:78
|
1873 |
+
msgid "Features"
|
1874 |
+
msgstr ""
|
1875 |
+
|
1876 |
+
#: view/Brute.php:148
|
1877 |
+
msgid "Limit the number of allowed login attempts using normal login form"
|
1878 |
+
msgstr ""
|
1879 |
+
|
1880 |
+
#: view/Brute.php:149
|
1881 |
+
msgid "Math problem verification while logging in"
|
1882 |
+
msgstr ""
|
1883 |
+
|
1884 |
+
#: view/Brute.php:150
|
1885 |
+
msgid "Manually block/unblock IP addresses"
|
1886 |
+
msgstr ""
|
1887 |
+
|
1888 |
+
#: view/Brute.php:151
|
1889 |
+
msgid "Manually whitelist trusted IP addresses"
|
1890 |
+
msgstr ""
|
1891 |
+
|
1892 |
+
#: view/Brute.php:152
|
1893 |
+
msgid "Option to inform user about remaining attempts on login page"
|
1894 |
+
msgstr ""
|
1895 |
+
|
1896 |
+
#: view/Brute.php:153
|
1897 |
+
msgid "Custom message to show to blocked users"
|
1898 |
+
msgstr ""
|
1899 |
+
|
1900 |
+
#: view/Connect.php:12
|
1901 |
+
msgid "Activate Free version"
|
1902 |
+
msgstr ""
|
1903 |
+
|
1904 |
+
#: view/Connect.php:18
|
1905 |
+
msgid "Enter your email address to get security alerts and How To Lessons"
|
1906 |
+
msgstr ""
|
1907 |
+
|
1908 |
+
#: view/Connect.php:37
|
1909 |
+
msgid "Monitor my website, send me security alerts and vulnerability reports"
|
1910 |
+
msgstr ""
|
1911 |
+
|
1912 |
+
#: view/Connect.php:47
|
1913 |
+
msgid "I want to receive How To lessons for Hide My WP Ghost by email"
|
1914 |
+
msgstr ""
|
1915 |
+
|
1916 |
+
#: view/Connect.php:58
|
1917 |
+
msgid "Activate"
|
1918 |
+
msgstr ""
|
1919 |
+
|
1920 |
+
#: view/Connect.php:64
|
1921 |
+
msgid "Skip Activation"
|
1922 |
+
msgstr ""
|
1923 |
+
|
1924 |
+
#: view/Connect.php:73
|
1925 |
+
msgid "Activate Hide My WP"
|
1926 |
+
msgstr ""
|
1927 |
+
|
1928 |
+
#: view/Connect.php:75
|
1929 |
+
#, php-format
|
1930 |
+
msgid ""
|
1931 |
+
"By activating the Free version of Hide My WP you agree with our %sTerms of "
|
1932 |
+
"Use%s and %sPrivacy Policy%s"
|
1933 |
+
msgstr ""
|
1934 |
+
|
1935 |
+
#: view/Connect.php:78
|
1936 |
+
msgid ""
|
1937 |
+
"Note! If you add your email you will receive a free token which will "
|
1938 |
+
"activate the plugin."
|
1939 |
+
msgstr ""
|
1940 |
+
|
1941 |
+
#: view/Connect.php:81
|
1942 |
+
#, php-format
|
1943 |
+
msgid ""
|
1944 |
+
"If you bought Hide My WP Ghost please remove this plugin and install the one "
|
1945 |
+
"from %sYour Account%s"
|
1946 |
+
msgstr ""
|
1947 |
+
|
1948 |
+
#: view/Dashboard.php:18
|
1949 |
+
msgid "Security Level"
|
1950 |
+
msgstr ""
|
1951 |
+
|
1952 |
+
#: view/Dashboard.php:23 view/SecurityCheck.php:22
|
1953 |
+
#, php-format
|
1954 |
+
msgid ""
|
1955 |
+
"Your website security %sis extremely weak%s. %sMany hacking doors are "
|
1956 |
+
"available."
|
1957 |
+
msgstr ""
|
1958 |
+
|
1959 |
+
#: view/Dashboard.php:26 view/SecurityCheck.php:25
|
1960 |
+
#, php-format
|
1961 |
+
msgid ""
|
1962 |
+
"Your website security %sis very weak%s. %sMany hacking doors are available."
|
1963 |
+
msgstr ""
|
1964 |
+
|
1965 |
+
#: view/Dashboard.php:29 view/SecurityCheck.php:28
|
1966 |
+
#, php-format
|
1967 |
+
msgid ""
|
1968 |
+
"Your website security is still weak. %sSome of the main hacking doors are "
|
1969 |
+
"still available."
|
1970 |
+
msgstr ""
|
1971 |
+
|
1972 |
+
#: view/Dashboard.php:32 view/SecurityCheck.php:31
|
1973 |
+
#, php-format
|
1974 |
+
msgid ""
|
1975 |
+
"Your website security is strong. %sKeep checking the security every week."
|
1976 |
+
msgstr ""
|
1977 |
+
|
1978 |
+
#: view/Dashboard.php:37
|
1979 |
+
msgid "Urgent Security Actions Required"
|
1980 |
+
msgstr ""
|
1981 |
+
|
1982 |
+
#: view/Dashboard.php:45
|
1983 |
+
msgid "Check All The Security Tasks"
|
1984 |
+
msgstr ""
|
1985 |
+
|
1986 |
+
#: view/Dashboard.php:47
|
1987 |
+
msgid "Upgrade Your Security"
|
1988 |
+
msgstr ""
|
1989 |
+
|
1990 |
+
#: view/Dashboard.php:55
|
1991 |
+
msgid "Recheck Security"
|
1992 |
+
msgstr ""
|
1993 |
+
|
1994 |
+
#: view/Dashboard.php:107
|
1995 |
+
msgid "Checking Website Security ..."
|
1996 |
+
msgstr ""
|
1997 |
+
|
1998 |
+
#: view/FrontendCheck.php:7
|
1999 |
+
msgid "Next Steps"
|
2000 |
+
msgstr ""
|
2001 |
+
|
2002 |
+
#: view/FrontendCheck.php:9
|
2003 |
+
msgid "Frontend Login Test"
|
2004 |
+
msgstr ""
|
2005 |
+
|
2006 |
+
#: view/FrontendCheck.php:13
|
2007 |
+
#, php-format
|
2008 |
+
msgid "Run %sFrontend Login Test%s and login inside the pupop. "
|
2009 |
+
msgstr ""
|
2010 |
+
|
2011 |
+
#: view/FrontendCheck.php:14
|
2012 |
+
msgid "If you're able to login, you've set the new paths correctly."
|
2013 |
+
msgstr ""
|
2014 |
+
|
2015 |
+
#: view/FrontendCheck.php:15
|
2016 |
+
msgid ""
|
2017 |
+
"If the Login Page displays any error, please make sure you follow the Hide "
|
2018 |
+
"My WP Ghost instructions before moving forward."
|
2019 |
+
msgstr ""
|
2020 |
+
|
2021 |
+
#: view/FrontendCheck.php:16
|
2022 |
+
msgid ""
|
2023 |
+
"Do not log out from this browser until you are confident that the Frontend "
|
2024 |
+
"is working and you will be able to log in again."
|
2025 |
+
msgstr ""
|
2026 |
+
|
2027 |
+
#: view/FrontendCheck.php:17
|
2028 |
+
#, php-format
|
2029 |
+
msgid ""
|
2030 |
+
"If you can't configure Hide My WP Ghost, switch to Default mode and "
|
2031 |
+
"%scontact us%s."
|
2032 |
+
msgstr ""
|
2033 |
+
|
2034 |
+
#: view/FrontendCheck.php:21
|
2035 |
+
#, php-format
|
2036 |
+
msgid "%sWARNING:%s Use the custom login URL to login to admin."
|
2037 |
+
msgstr ""
|
2038 |
+
|
2039 |
+
#: view/FrontendCheck.php:22
|
2040 |
+
#, php-format
|
2041 |
+
msgid ""
|
2042 |
+
"Your login URL will be: %s In case you can't re-login, use the safe URL: %s"
|
2043 |
+
msgstr ""
|
2044 |
+
|
2045 |
+
#: view/FrontendCheck.php:29
|
2046 |
+
msgid "Yes, it's working"
|
2047 |
+
msgstr ""
|
2048 |
+
|
2049 |
+
#: view/FrontendCheck.php:44
|
2050 |
+
msgid "Frontend login Test"
|
2051 |
+
msgstr ""
|
2052 |
+
|
2053 |
+
#: view/Log.php:10
|
2054 |
+
msgid "Events Settings"
|
2055 |
+
msgstr ""
|
2056 |
+
|
2057 |
+
#: view/Log.php:23
|
2058 |
+
msgid "Log Users Events"
|
2059 |
+
msgstr ""
|
2060 |
+
|
2061 |
+
#: view/Log.php:24
|
2062 |
+
msgid "Track and Log events that happens on your WordPress site!"
|
2063 |
+
msgstr ""
|
2064 |
+
|
2065 |
+
#: view/Log.php:37
|
2066 |
+
msgid "Log Brute Force Attempts"
|
2067 |
+
msgstr ""
|
2068 |
+
|
2069 |
+
#: view/Log.php:38
|
2070 |
+
msgid "Track and Log brute force attempts"
|
2071 |
+
msgstr ""
|
2072 |
+
|
2073 |
+
#: view/Log.php:46
|
2074 |
+
msgid "Log Use Roles"
|
2075 |
+
msgstr ""
|
2076 |
+
|
2077 |
+
#: view/Log.php:47
|
2078 |
+
msgid "Hold Control key to select multiple user roles"
|
2079 |
+
msgstr ""
|
2080 |
+
|
2081 |
+
#: view/Log.php:48
|
2082 |
+
msgid "Don't select any role if you want to log all user roles"
|
2083 |
+
msgstr ""
|
2084 |
+
|
2085 |
+
#: view/Log.php:71
|
2086 |
+
msgid "Monitor everything that happens on your WordPress site!"
|
2087 |
+
msgstr ""
|
2088 |
+
|
2089 |
+
#: view/Log.php:72
|
2090 |
+
msgid ""
|
2091 |
+
"It's safe to know what happened on your website at any time, in admin and on "
|
2092 |
+
"frontend."
|
2093 |
+
msgstr ""
|
2094 |
+
|
2095 |
+
#: view/Log.php:73
|
2096 |
+
msgid ""
|
2097 |
+
"All the logs are saved on our Cloud Servers and your data is safe in case "
|
2098 |
+
"you reinstall the plugin"
|
2099 |
+
msgstr ""
|
2100 |
+
|
2101 |
+
#: view/Log.php:80
|
2102 |
+
msgid "Monitor, track and log events on your website"
|
2103 |
+
msgstr ""
|
2104 |
+
|
2105 |
+
#: view/Log.php:81
|
2106 |
+
msgid "Know what the other users are doing on your website and when"
|
2107 |
+
msgstr ""
|
2108 |
+
|
2109 |
+
#: view/Log.php:82
|
2110 |
+
msgid "You can set to receive email with alerts for one or more actions"
|
2111 |
+
msgstr ""
|
2112 |
+
|
2113 |
+
#: view/Log.php:83
|
2114 |
+
msgid "Filter events and users"
|
2115 |
+
msgstr ""
|
2116 |
+
|
2117 |
+
#: view/Log.php:84
|
2118 |
+
msgid "Compatible with all themes and plugins"
|
2119 |
+
msgstr ""
|
2120 |
+
|
2121 |
+
#: view/Mapping.php:12
|
2122 |
+
msgid "Text Mapping"
|
2123 |
+
msgstr ""
|
2124 |
+
|
2125 |
+
#: view/Mapping.php:19 view/Mapping.php:95 view/Mapping.php:168
|
2126 |
+
msgid ""
|
2127 |
+
"First, you need to switch Hide My Wp from Default mode to Safe Mode or Ghost "
|
2128 |
+
"Mode."
|
2129 |
+
msgstr ""
|
2130 |
+
|
2131 |
+
#: view/Mapping.php:24
|
2132 |
+
msgid "Replace the text in tags and classes to hide any WordPress footprint."
|
2133 |
+
msgstr ""
|
2134 |
+
|
2135 |
+
#: view/Mapping.php:25
|
2136 |
+
msgid ""
|
2137 |
+
"Note! Your plugins and themes may use these and it will affect the design "
|
2138 |
+
"and functionality."
|
2139 |
+
msgstr ""
|
2140 |
+
|
2141 |
+
#: view/Mapping.php:37
|
2142 |
+
msgid "Text Mapping only Classes, IDs, JS variables"
|
2143 |
+
msgstr ""
|
2144 |
+
|
2145 |
+
#: view/Mapping.php:39
|
2146 |
+
msgid "Change the text only in classes, styles & scrips. (Recommended ON)"
|
2147 |
+
msgstr ""
|
2148 |
+
|
2149 |
+
#: view/Mapping.php:40
|
2150 |
+
msgid "If this option is switched off, the text is changed in all page"
|
2151 |
+
msgstr ""
|
2152 |
+
|
2153 |
+
#: view/Mapping.php:51 view/Mapping.php:64
|
2154 |
+
msgid "Remove Text Map"
|
2155 |
+
msgstr ""
|
2156 |
+
|
2157 |
+
#: view/Mapping.php:76
|
2158 |
+
msgid "Add another text"
|
2159 |
+
msgstr ""
|
2160 |
+
|
2161 |
+
#: view/Mapping.php:84
|
2162 |
+
msgid "URL Mapping"
|
2163 |
+
msgstr ""
|
2164 |
+
|
2165 |
+
#: view/Mapping.php:98
|
2166 |
+
msgid "You can add a list of URLs you want to change into new ones. "
|
2167 |
+
msgstr ""
|
2168 |
+
|
2169 |
+
#: view/Mapping.php:99
|
2170 |
+
msgid ""
|
2171 |
+
"It's important to include only internal URLs from Frontend source code after "
|
2172 |
+
"you activate the plugin in Safe Mode or Ghost Mode."
|
2173 |
+
msgstr ""
|
2174 |
+
|
2175 |
+
#: view/Mapping.php:100
|
2176 |
+
msgid "Example:"
|
2177 |
+
msgstr ""
|
2178 |
+
|
2179 |
+
#: view/Mapping.php:102 view/Mapping.php:111
|
2180 |
+
msgid "from"
|
2181 |
+
msgstr ""
|
2182 |
+
|
2183 |
+
#: view/Mapping.php:106 view/Mapping.php:115
|
2184 |
+
msgid "to"
|
2185 |
+
msgstr ""
|
2186 |
+
|
2187 |
+
#: view/Mapping.php:109
|
2188 |
+
msgid "or"
|
2189 |
+
msgstr ""
|
2190 |
+
|
2191 |
+
#: view/Mapping.php:125 view/Mapping.php:138
|
2192 |
+
msgid "Remove URL Map"
|
2193 |
+
msgstr ""
|
2194 |
+
|
2195 |
+
#: view/Mapping.php:150
|
2196 |
+
msgid "Add another URL"
|
2197 |
+
msgstr ""
|
2198 |
+
|
2199 |
+
#: view/Mapping.php:158
|
2200 |
+
msgid "CDN URLs"
|
2201 |
+
msgstr ""
|
2202 |
+
|
2203 |
+
#: view/Mapping.php:171
|
2204 |
+
msgid "You can add one or more CDN URLs you use."
|
2205 |
+
msgstr ""
|
2206 |
+
|
2207 |
+
#: view/Mapping.php:172
|
2208 |
+
msgid ""
|
2209 |
+
"This option will not activate the CDN option for your website but it will "
|
2210 |
+
"change the custom paths in case you already set a CDN URL with another "
|
2211 |
+
"plugin."
|
2212 |
+
msgstr ""
|
2213 |
+
|
2214 |
+
#: view/Mapping.php:181 view/Mapping.php:190
|
2215 |
+
msgid "Remove CDN"
|
2216 |
+
msgstr ""
|
2217 |
+
|
2218 |
+
#: view/Mapping.php:199
|
2219 |
+
msgid "Add another CDN URL"
|
2220 |
+
msgstr ""
|
2221 |
+
|
2222 |
+
#: view/Mapping.php:246
|
2223 |
+
msgid "Give us 5 stars on WordPress.org"
|
2224 |
+
msgstr ""
|
2225 |
+
|
2226 |
+
#: view/Permalinks.php:9
|
2227 |
+
msgid ""
|
2228 |
+
"Hide My WordPress requires to be activated on the entire network to prevent "
|
2229 |
+
"login issues!"
|
2230 |
+
msgstr ""
|
2231 |
+
|
2232 |
+
#: view/Permalinks.php:32
|
2233 |
+
msgid "Levels of security"
|
2234 |
+
msgstr ""
|
2235 |
+
|
2236 |
+
#: view/Permalinks.php:34
|
2237 |
+
msgid "Default (unsafe)"
|
2238 |
+
msgstr ""
|
2239 |
+
|
2240 |
+
#: view/Permalinks.php:35
|
2241 |
+
msgid "Lite mode"
|
2242 |
+
msgstr ""
|
2243 |
+
|
2244 |
+
#: view/Permalinks.php:38
|
2245 |
+
#, php-format
|
2246 |
+
msgid ""
|
2247 |
+
"Upgrade Your Website Security. Add Firewall, Hide WordPress Completely. "
|
2248 |
+
"%sUnlock this feature%s"
|
2249 |
+
msgstr ""
|
2250 |
+
|
2251 |
+
#: view/Permalinks.php:42
|
2252 |
+
msgid "Ghost mode"
|
2253 |
+
msgstr ""
|
2254 |
+
|
2255 |
+
#: view/Permalinks.php:46
|
2256 |
+
#, php-format
|
2257 |
+
msgid ""
|
2258 |
+
"%sWARNING:%s The admin path is hidden from visitors. Use the custom login "
|
2259 |
+
"URL to login to admin"
|
2260 |
+
msgstr ""
|
2261 |
+
|
2262 |
+
#: view/Permalinks.php:47
|
2263 |
+
#, php-format
|
2264 |
+
msgid ""
|
2265 |
+
"If you can't login, use this URL: %s and all your changes are roll back to "
|
2266 |
+
"default"
|
2267 |
+
msgstr ""
|
2268 |
+
|
2269 |
+
#: view/Permalinks.php:119
|
2270 |
+
msgid "Admin Settings"
|
2271 |
+
msgstr ""
|
2272 |
+
|
2273 |
+
#: view/Permalinks.php:122
|
2274 |
+
#, php-format
|
2275 |
+
msgid ""
|
2276 |
+
"Your admin URL is changed by another plugin/theme in %s. To prevent errors, "
|
2277 |
+
"deactivate the other plugin who changes the admin path."
|
2278 |
+
msgstr ""
|
2279 |
+
|
2280 |
+
#: view/Permalinks.php:126
|
2281 |
+
#, php-format
|
2282 |
+
msgid ""
|
2283 |
+
"Your admin URL can't be changed on %s hosting because of the %s security "
|
2284 |
+
"terms."
|
2285 |
+
msgstr ""
|
2286 |
+
|
2287 |
+
#: view/Permalinks.php:132
|
2288 |
+
msgid "Custom Admin Path"
|
2289 |
+
msgstr ""
|
2290 |
+
|
2291 |
+
#: view/Permalinks.php:133
|
2292 |
+
msgid "eg. adm, back"
|
2293 |
+
msgstr ""
|
2294 |
+
|
2295 |
+
#: view/Permalinks.php:147
|
2296 |
+
msgid "Hide \"wp-admin\""
|
2297 |
+
msgstr ""
|
2298 |
+
|
2299 |
+
#: view/Permalinks.php:148
|
2300 |
+
msgid "Show 404 Not Found Error when visitors access /wp-admin"
|
2301 |
+
msgstr ""
|
2302 |
+
|
2303 |
+
#: view/Permalinks.php:157
|
2304 |
+
msgid "Hide the new admin path"
|
2305 |
+
msgstr ""
|
2306 |
+
|
2307 |
+
#: view/Permalinks.php:158
|
2308 |
+
msgid ""
|
2309 |
+
"Let only the new login be accessible and redirect me to admin after logging "
|
2310 |
+
"in"
|
2311 |
+
msgstr ""
|
2312 |
+
|
2313 |
+
#: view/Permalinks.php:163
|
2314 |
+
msgid ""
|
2315 |
+
"Some Themes don't work with custom Admin and Ajax paths. In case of ajax "
|
2316 |
+
"errors, switch back to wp-admin and admin-ajax.php."
|
2317 |
+
msgstr ""
|
2318 |
+
|
2319 |
+
#: view/Permalinks.php:169
|
2320 |
+
msgid "Login Settings"
|
2321 |
+
msgstr ""
|
2322 |
+
|
2323 |
+
#: view/Permalinks.php:172
|
2324 |
+
#, php-format
|
2325 |
+
msgid ""
|
2326 |
+
"Your login URL is changed by another plugin/theme in %s. To prevent errors, "
|
2327 |
+
"deactivate the other plugin who changes the login path."
|
2328 |
+
msgstr ""
|
2329 |
+
|
2330 |
+
#: view/Permalinks.php:177
|
2331 |
+
msgid "Custom Login Path"
|
2332 |
+
msgstr ""
|
2333 |
+
|
2334 |
+
#: view/Permalinks.php:178
|
2335 |
+
msgid "eg. login or signin"
|
2336 |
+
msgstr ""
|
2337 |
+
|
2338 |
+
#: view/Permalinks.php:191
|
2339 |
+
msgid "Hide \"wp-login.php\""
|
2340 |
+
msgstr ""
|
2341 |
+
|
2342 |
+
#: view/Permalinks.php:192
|
2343 |
+
msgid "Show 404 Not Found Error when visitors access /wp-login.php"
|
2344 |
+
msgstr ""
|
2345 |
+
|
2346 |
+
#: view/Permalinks.php:201
|
2347 |
+
msgid "Custom Lost Password Path"
|
2348 |
+
msgstr ""
|
2349 |
+
|
2350 |
+
#: view/Permalinks.php:202
|
2351 |
+
msgid "eg. lostpass or forgotpass"
|
2352 |
+
msgstr ""
|
2353 |
+
|
2354 |
+
#: view/Permalinks.php:212
|
2355 |
+
msgid "Custom Register Path"
|
2356 |
+
msgstr ""
|
2357 |
+
|
2358 |
+
#: view/Permalinks.php:213
|
2359 |
+
msgid "eg. newuser or register"
|
2360 |
+
msgstr ""
|
2361 |
+
|
2362 |
+
#: view/Permalinks.php:223
|
2363 |
+
msgid "Custom Logout Path"
|
2364 |
+
msgstr ""
|
2365 |
+
|
2366 |
+
#: view/Permalinks.php:224
|
2367 |
+
msgid "eg. logout or disconnect"
|
2368 |
+
msgstr ""
|
2369 |
+
|
2370 |
+
#: view/Permalinks.php:234
|
2371 |
+
msgid "Custom Activation Path"
|
2372 |
+
msgstr ""
|
2373 |
+
|
2374 |
+
#: view/Permalinks.php:235
|
2375 |
+
msgid "eg. multisite activation link"
|
2376 |
+
msgstr ""
|
2377 |
+
|
2378 |
+
#: view/Permalinks.php:248
|
2379 |
+
msgid "Common Paths"
|
2380 |
+
msgstr ""
|
2381 |
+
|
2382 |
+
#: view/Permalinks.php:252
|
2383 |
+
msgid "Custom admin-ajax Path"
|
2384 |
+
msgstr ""
|
2385 |
+
|
2386 |
+
#: view/Permalinks.php:253
|
2387 |
+
msgid "eg. ajax, json"
|
2388 |
+
msgstr ""
|
2389 |
+
|
2390 |
+
#: view/Permalinks.php:266
|
2391 |
+
msgid "Hide wp-admin from ajax URL"
|
2392 |
+
msgstr ""
|
2393 |
+
|
2394 |
+
#: view/Permalinks.php:267
|
2395 |
+
#, php-format
|
2396 |
+
msgid "Show /%s instead of /%s"
|
2397 |
+
msgstr ""
|
2398 |
+
|
2399 |
+
#: view/Permalinks.php:268
|
2400 |
+
msgid "Works only with the custom admin-ajax path to avoid infinite loops."
|
2401 |
+
msgstr ""
|
2402 |
+
|
2403 |
+
#: view/Permalinks.php:275
|
2404 |
+
msgid "Custom wp-content Path"
|
2405 |
+
msgstr ""
|
2406 |
+
|
2407 |
+
#: view/Permalinks.php:276
|
2408 |
+
msgid "eg. core, inc, include"
|
2409 |
+
msgstr ""
|
2410 |
+
|
2411 |
+
#: view/Permalinks.php:286
|
2412 |
+
msgid "Custom wp-includes Path"
|
2413 |
+
msgstr ""
|
2414 |
+
|
2415 |
+
#: view/Permalinks.php:287
|
2416 |
+
msgid "eg. lib, library"
|
2417 |
+
msgstr ""
|
2418 |
+
|
2419 |
+
#: view/Permalinks.php:298
|
2420 |
+
msgid "Custom uploads Path"
|
2421 |
+
msgstr ""
|
2422 |
+
|
2423 |
+
#: view/Permalinks.php:299
|
2424 |
+
msgid "eg. images, files"
|
2425 |
+
msgstr ""
|
2426 |
+
|
2427 |
+
#: view/Permalinks.php:308
|
2428 |
+
#, php-format
|
2429 |
+
msgid ""
|
2430 |
+
"You already defined a different wp-content/uploads directory in wp-config."
|
2431 |
+
"php %s"
|
2432 |
+
msgstr ""
|
2433 |
+
|
2434 |
+
#: view/Permalinks.php:314
|
2435 |
+
msgid "Custom comment Path"
|
2436 |
+
msgstr ""
|
2437 |
+
|
2438 |
+
#: view/Permalinks.php:315
|
2439 |
+
msgid "eg. comments, discussion"
|
2440 |
+
msgstr ""
|
2441 |
+
|
2442 |
+
#: view/Permalinks.php:326
|
2443 |
+
msgid "Custom author Path"
|
2444 |
+
msgstr ""
|
2445 |
+
|
2446 |
+
#: view/Permalinks.php:327
|
2447 |
+
msgid "eg. profile, usr, writer"
|
2448 |
+
msgstr ""
|
2449 |
+
|
2450 |
+
#: view/Permalinks.php:345
|
2451 |
+
msgid "Hide Author ID URL"
|
2452 |
+
msgstr ""
|
2453 |
+
|
2454 |
+
#: view/Permalinks.php:346
|
2455 |
+
msgid "Don't let URLs like domain.com?author=1 show the user login name"
|
2456 |
+
msgstr ""
|
2457 |
+
|
2458 |
+
#: view/Permalinks.php:354
|
2459 |
+
msgid "Plugin Settings"
|
2460 |
+
msgstr ""
|
2461 |
+
|
2462 |
+
#: view/Permalinks.php:358
|
2463 |
+
msgid "Custom plugins Path"
|
2464 |
+
msgstr ""
|
2465 |
+
|
2466 |
+
#: view/Permalinks.php:359
|
2467 |
+
msgid "eg. modules"
|
2468 |
+
msgstr ""
|
2469 |
+
|
2470 |
+
#: view/Permalinks.php:371
|
2471 |
+
msgid "Hide plugin names"
|
2472 |
+
msgstr ""
|
2473 |
+
|
2474 |
+
#: view/Permalinks.php:372
|
2475 |
+
msgid "Give random names to each plugin"
|
2476 |
+
msgstr ""
|
2477 |
+
|
2478 |
+
#: view/Permalinks.php:379
|
2479 |
+
msgid "Theme Settings"
|
2480 |
+
msgstr ""
|
2481 |
+
|
2482 |
+
#: view/Permalinks.php:383
|
2483 |
+
msgid "Custom themes Path"
|
2484 |
+
msgstr ""
|
2485 |
+
|
2486 |
+
#: view/Permalinks.php:384
|
2487 |
+
msgid "eg. assets, templates, styles"
|
2488 |
+
msgstr ""
|
2489 |
+
|
2490 |
+
#: view/Permalinks.php:399
|
2491 |
+
msgid "Hide theme names"
|
2492 |
+
msgstr ""
|
2493 |
+
|
2494 |
+
#: view/Permalinks.php:400
|
2495 |
+
msgid "Give random names to each theme (works in WP multisite)"
|
2496 |
+
msgstr ""
|
2497 |
+
|
2498 |
+
#: view/Permalinks.php:411
|
2499 |
+
msgid "REST API Settings"
|
2500 |
+
msgstr ""
|
2501 |
+
|
2502 |
+
#: view/Permalinks.php:419
|
2503 |
+
msgid "Custom wp-json Path"
|
2504 |
+
msgstr ""
|
2505 |
+
|
2506 |
+
#: view/Permalinks.php:420
|
2507 |
+
msgid "eg. json, api, call"
|
2508 |
+
msgstr ""
|
2509 |
+
|
2510 |
+
#: view/Permalinks.php:433
|
2511 |
+
msgid "Disable Rest API access"
|
2512 |
+
msgstr ""
|
2513 |
+
|
2514 |
+
#: view/Permalinks.php:434
|
2515 |
+
msgid "Disable Rest API access if you don't use your website for API calls"
|
2516 |
+
msgstr ""
|
2517 |
+
|
2518 |
+
#: view/Permalinks.php:442
|
2519 |
+
msgid "Security Settings"
|
2520 |
+
msgstr ""
|
2521 |
+
|
2522 |
+
#: view/Permalinks.php:454
|
2523 |
+
msgid "Hide WordPress Common Paths"
|
2524 |
+
msgstr ""
|
2525 |
+
|
2526 |
+
#: view/Permalinks.php:455
|
2527 |
+
msgid "Hide /wp-content, /wp-include, /plugins, /themes paths"
|
2528 |
+
msgstr ""
|
2529 |
+
|
2530 |
+
#: view/Permalinks.php:456
|
2531 |
+
msgid "Hide upgrade.php and install.php for visitors"
|
2532 |
+
msgstr ""
|
2533 |
+
|
2534 |
+
#: view/Permalinks.php:457
|
2535 |
+
msgid "(this may affect the fonts and images loaded through CSS)"
|
2536 |
+
msgstr ""
|
2537 |
+
|
2538 |
+
#: view/Permalinks.php:467
|
2539 |
+
msgid "Hide WordPress Common Files"
|
2540 |
+
msgstr ""
|
2541 |
+
|
2542 |
+
#: view/Permalinks.php:468
|
2543 |
+
msgid ""
|
2544 |
+
"Hide wp-config.php , wp-config-sample.php, readme.html, license.txt files"
|
2545 |
+
msgstr ""
|
2546 |
+
|
2547 |
+
#: view/Permalinks.php:480
|
2548 |
+
msgid "Firewall Against Script Injection"
|
2549 |
+
msgstr ""
|
2550 |
+
|
2551 |
+
#: view/Permalinks.php:481
|
2552 |
+
msgid ""
|
2553 |
+
"Most WordPress installations are hosted on the popular Apache, Nginx and IIS "
|
2554 |
+
"web servers."
|
2555 |
+
msgstr ""
|
2556 |
+
|
2557 |
+
#: view/Permalinks.php:482
|
2558 |
+
msgid ""
|
2559 |
+
"A thorough set of rules can prevent many types of SQL Injection and URL "
|
2560 |
+
"hacks from being interpreted."
|
2561 |
+
msgstr ""
|
2562 |
+
|
2563 |
+
#: view/Permalinks.php:493
|
2564 |
+
msgid "Disable Directory Browsing"
|
2565 |
+
msgstr ""
|
2566 |
+
|
2567 |
+
#: view/Permalinks.php:494
|
2568 |
+
#, php-format
|
2569 |
+
msgid "Don't let hackers see any directory content. See %sUploads Directory%s"
|
2570 |
+
msgstr ""
|
2571 |
+
|
2572 |
+
#: view/Permalinks.php:507
|
2573 |
+
msgid "Custom category Path"
|
2574 |
+
msgstr ""
|
2575 |
+
|
2576 |
+
#: view/Permalinks.php:508
|
2577 |
+
msgid "eg. cat, dir, list"
|
2578 |
+
msgstr ""
|
2579 |
+
|
2580 |
+
#: view/Permalinks.php:517
|
2581 |
+
msgid "Custom tags Path"
|
2582 |
+
msgstr ""
|
2583 |
+
|
2584 |
+
#: view/Permalinks.php:518
|
2585 |
+
msgid "eg. keyword, topic"
|
2586 |
+
msgstr ""
|
2587 |
+
|
2588 |
+
#: view/Plugins.php:14
|
2589 |
+
msgid "More details"
|
2590 |
+
msgstr ""
|
2591 |
+
|
2592 |
+
#: view/Plugins.php:16
|
2593 |
+
msgid "Install Plugin"
|
2594 |
+
msgstr ""
|
2595 |
+
|
2596 |
+
#: view/Plugins.php:18
|
2597 |
+
msgid "Plugin Installed"
|
2598 |
+
msgstr ""
|
2599 |
+
|
2600 |
+
#: view/Plugins.php:30
|
2601 |
+
msgid ""
|
2602 |
+
"We are testing every week the latest version of these plugins and <strong>we "
|
2603 |
+
"make sure they are working with Hide My WP</strong> plugin.\n"
|
2604 |
+
" <br /><br />You don't need to install all these plugin "
|
2605 |
+
"in your website. If you're already using a cache plugin you don't need to "
|
2606 |
+
"install another one. <strong>We recommend using only one cache plugin</"
|
2607 |
+
"strong>.\n"
|
2608 |
+
" <br /><br />You can also install either <strong>iThemes "
|
2609 |
+
"Security</strong> plugin or <strong>Sucuri Security</strong> plugin to work "
|
2610 |
+
"with Hide My Wp plugin.\n"
|
2611 |
+
" <br /><br />If your plugins directory is not writable "
|
2612 |
+
"you will need to install the plugins manually."
|
2613 |
+
msgstr ""
|
2614 |
+
|
2615 |
+
#: view/SecurityCheck.php:6
|
2616 |
+
msgid "WordPress Security Check"
|
2617 |
+
msgstr ""
|
2618 |
+
|
2619 |
+
#: view/SecurityCheck.php:35 view/SecurityCheck.php:63
|
2620 |
+
msgid "Start Scan"
|
2621 |
+
msgstr ""
|
2622 |
+
|
2623 |
+
#: view/SecurityCheck.php:48
|
2624 |
+
msgid "Passed"
|
2625 |
+
msgstr ""
|
2626 |
+
|
2627 |
+
#: view/SecurityCheck.php:49
|
2628 |
+
msgid "Failed"
|
2629 |
+
msgstr ""
|
2630 |
+
|
2631 |
+
#: view/SecurityCheck.php:55
|
2632 |
+
msgid ""
|
2633 |
+
"Congratulations! You completed all the security tasks. Make sure you check "
|
2634 |
+
"your site once a week."
|
2635 |
+
msgstr ""
|
2636 |
+
|
2637 |
+
#: view/SecurityCheck.php:66
|
2638 |
+
#, php-format
|
2639 |
+
msgid ""
|
2640 |
+
"According to %sGoogle latest stats%s, over %s20k websites are hacked every "
|
2641 |
+
"week%s and over %s30% of them are made in WordPress%s. <br />It's "
|
2642 |
+
"%sbetter to prevent an attack%s than to spend a lot of money and time to "
|
2643 |
+
"recover your data after an attack not to mention the situation when your "
|
2644 |
+
"clients' data are stollen."
|
2645 |
+
msgstr ""
|
2646 |
+
|
2647 |
+
#: view/SecurityCheck.php:69
|
2648 |
+
msgid "Last check:"
|
2649 |
+
msgstr ""
|
2650 |
+
|
2651 |
+
#: view/SecurityCheck.php:82
|
2652 |
+
msgid "Name"
|
2653 |
+
msgstr ""
|
2654 |
+
|
2655 |
+
#: view/SecurityCheck.php:83
|
2656 |
+
msgid "Value"
|
2657 |
+
msgstr ""
|
2658 |
+
|
2659 |
+
#: view/SecurityCheck.php:84
|
2660 |
+
msgid "Valid"
|
2661 |
+
msgstr ""
|
2662 |
+
|
2663 |
+
#: view/SecurityCheck.php:85
|
2664 |
+
msgid "Action"
|
2665 |
+
msgstr ""
|
2666 |
+
|
2667 |
+
#: view/SecurityCheck.php:110
|
2668 |
+
msgid "Info"
|
2669 |
+
msgstr ""
|
2670 |
+
|
2671 |
+
#: view/SecurityCheck.php:111
|
2672 |
+
msgid "Fix it"
|
2673 |
+
msgstr ""
|
2674 |
+
|
2675 |
+
#: view/SecurityCheck.php:112
|
2676 |
+
msgid "Are you sure you want to ignore this task in the future?"
|
2677 |
+
msgstr ""
|
2678 |
+
|
2679 |
+
#: view/SecurityCheck.php:125
|
2680 |
+
msgid "Reset all ingnored tasks"
|
2681 |
+
msgstr ""
|
2682 |
+
|
2683 |
+
#: view/Support.php:3
|
2684 |
+
msgid "Need Help?"
|
2685 |
+
msgstr ""
|
2686 |
+
|
2687 |
+
#: view/Support.php:6
|
2688 |
+
#, php-format
|
2689 |
+
msgid ""
|
2690 |
+
"Read the plugin tutorial and how to setup every feature %sRead Hide My WP "
|
2691 |
+
"Tutorial%s"
|
2692 |
+
msgstr ""
|
2693 |
+
|
2694 |
+
#: view/Support.php:8
|
2695 |
+
#, php-format
|
2696 |
+
msgid ""
|
2697 |
+
"You can also email us on %scontact@wpplugins.tips%s and we are happy to "
|
2698 |
+
"answer any question or suggestion you may have and we aim to respond within "
|
2699 |
+
"24 hours."
|
2700 |
+
msgstr ""
|
2701 |
+
|
2702 |
+
#: view/Tweaks.php:10
|
2703 |
+
msgid "Change Options"
|
2704 |
+
msgstr ""
|
2705 |
+
|
2706 |
+
#: view/Tweaks.php:18
|
2707 |
+
msgid "Change Paths for Logged Users"
|
2708 |
+
msgstr ""
|
2709 |
+
|
2710 |
+
#: view/Tweaks.php:20
|
2711 |
+
msgid "Change WordPress paths while you're logged in"
|
2712 |
+
msgstr ""
|
2713 |
+
|
2714 |
+
#: view/Tweaks.php:21
|
2715 |
+
msgid "(not recommended, may affect other plugins functionality in admin)"
|
2716 |
+
msgstr ""
|
2717 |
+
|
2718 |
+
#: view/Tweaks.php:35
|
2719 |
+
msgid "Change Paths in Cached Files"
|
2720 |
+
msgstr ""
|
2721 |
+
|
2722 |
+
#: view/Tweaks.php:36
|
2723 |
+
msgid ""
|
2724 |
+
"Change the WordPress common paths in the cached files from /wp-content/cache "
|
2725 |
+
"directory"
|
2726 |
+
msgstr ""
|
2727 |
+
|
2728 |
+
#: view/Tweaks.php:37
|
2729 |
+
msgid ""
|
2730 |
+
"(this feature runs in background and needs up to one minute after every "
|
2731 |
+
"cache purged)"
|
2732 |
+
msgstr ""
|
2733 |
+
|
2734 |
+
#: view/Tweaks.php:48
|
2735 |
+
msgid "Change Paths in Ajax Calls"
|
2736 |
+
msgstr ""
|
2737 |
+
|
2738 |
+
#: view/Tweaks.php:50
|
2739 |
+
msgid ""
|
2740 |
+
"This will prevent from showing the old paths when an image or font is called "
|
2741 |
+
"through ajax"
|
2742 |
+
msgstr ""
|
2743 |
+
|
2744 |
+
#: view/Tweaks.php:58
|
2745 |
+
msgid "Hide/Show Options"
|
2746 |
+
msgstr ""
|
2747 |
+
|
2748 |
+
#: view/Tweaks.php:67
|
2749 |
+
msgid ""
|
2750 |
+
"Hide WordPress and Plugin versions from the end of any image, css and js "
|
2751 |
+
"files"
|
2752 |
+
msgstr ""
|
2753 |
+
|
2754 |
+
#: view/Tweaks.php:68
|
2755 |
+
msgid "Hide the WP Generator META"
|
2756 |
+
msgstr ""
|
2757 |
+
|
2758 |
+
#: view/Tweaks.php:69
|
2759 |
+
msgid "Hide the WP DNS Prefetch META"
|
2760 |
+
msgstr ""
|
2761 |
+
|
2762 |
+
#: view/Tweaks.php:78
|
2763 |
+
msgid "Hide RSD (Really Simple Discovery) header"
|
2764 |
+
msgstr ""
|
2765 |
+
|
2766 |
+
#: view/Tweaks.php:80
|
2767 |
+
msgid "Don't show any WordPress information in HTTP header request"
|
2768 |
+
msgstr ""
|
2769 |
+
|
2770 |
+
#: view/Tweaks.php:90
|
2771 |
+
msgid "Hide WordPress HTML Comments"
|
2772 |
+
msgstr ""
|
2773 |
+
|
2774 |
+
#: view/Tweaks.php:92
|
2775 |
+
msgid "Hide the HTML Comments left by theme and plugins"
|
2776 |
+
msgstr ""
|
2777 |
+
|
2778 |
+
#: view/Tweaks.php:101
|
2779 |
+
msgid "Hide Emojicons"
|
2780 |
+
msgstr ""
|
2781 |
+
|
2782 |
+
#: view/Tweaks.php:103
|
2783 |
+
msgid "Don't load Emoji Icons if you don't use them"
|
2784 |
+
msgstr ""
|
2785 |
+
|
2786 |
+
#: view/Tweaks.php:110
|
2787 |
+
msgid "Other Settings"
|
2788 |
+
msgstr ""
|
2789 |
+
|
2790 |
+
#: view/Tweaks.php:117
|
2791 |
+
msgid "Disable XML-RPC authentication"
|
2792 |
+
msgstr ""
|
2793 |
+
|
2794 |
+
#: view/Tweaks.php:119
|
2795 |
+
#, php-format
|
2796 |
+
msgid "Don't load XML-RPC to prevent %sBrute force attacks via XML-RPC%s"
|
2797 |
+
msgstr ""
|
2798 |
+
|
2799 |
+
#: view/Tweaks.php:128
|
2800 |
+
msgid "Disable Embed scripts"
|
2801 |
+
msgstr ""
|
2802 |
+
|
2803 |
+
#: view/Tweaks.php:130
|
2804 |
+
msgid "Don't load oEmbed service if you don't use oEmbed videos"
|
2805 |
+
msgstr ""
|
2806 |
+
|
2807 |
+
#: view/Tweaks.php:140
|
2808 |
+
msgid "Disable WLW Manifest scripts"
|
2809 |
+
msgstr ""
|
2810 |
+
|
2811 |
+
#: view/Tweaks.php:142
|
2812 |
+
msgid ""
|
2813 |
+
"Don't load WLW if you didn't configure Windows Live Writer for your site"
|
2814 |
+
msgstr ""
|
2815 |
+
|
2816 |
+
#: view/Tweaks.php:152
|
2817 |
+
msgid "Disable DB Debug in Frontent"
|
2818 |
+
msgstr ""
|
2819 |
+
|
2820 |
+
#: view/Tweaks.php:154
|
2821 |
+
msgid "Don't load DB Debug if your website is live"
|
2822 |
+
msgstr ""
|
2823 |
+
|
2824 |
+
#. Plugin Name of the plugin/theme
|
2825 |
+
msgid "Hide My WP Ghost Lite"
|
2826 |
+
msgstr ""
|
2827 |
+
|
2828 |
+
#. Plugin URI of the plugin/theme
|
2829 |
+
msgid "https://wordpress.org/plugins/hide-my-wp/"
|
2830 |
+
msgstr ""
|
2831 |
+
|
2832 |
+
#. Description of the plugin/theme
|
2833 |
+
msgid ""
|
2834 |
+
"The best solution for WordPress Security. Hide wp-admin, wp-login, wp-"
|
2835 |
+
"content, plugins, themes etc. Add Firewall, Brute Force protection & more. "
|
2836 |
+
"<br /> <a href=\"http://hidemywpghost.com/wordpress\" target=\"_blank"
|
2837 |
+
"\"><strong>Unlock all features</strong></a>"
|
2838 |
+
msgstr ""
|
2839 |
+
|
2840 |
+
#. Author of the plugin/theme
|
2841 |
+
msgid "WPPlugins - WordPress Security Plugins"
|
2842 |
+
msgstr ""
|
2843 |
+
|
2844 |
+
#. Author URI of the plugin/theme
|
2845 |
+
msgid "https://wpplugins.tips"
|
2846 |
+
msgstr ""
|
languages/hide-my-wp-es_ES.mo
ADDED
Binary file
|
languages/hide-my-wp-es_ES.po
ADDED
@@ -0,0 +1,3580 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Hide My Wordpress PRO\n"
|
4 |
+
"POT-Creation-Date: 2020-05-14 19:48+0300\n"
|
5 |
+
"PO-Revision-Date: 2020-05-14 20:33+0300\n"
|
6 |
+
"Last-Translator: John Darrel <john@wpplugins.tips>\n"
|
7 |
+
"Language-Team: WpPluginsTips <john@wpplugins.tips>\n"
|
8 |
+
"Language: es_ES\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.3.1\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"X-Poedit-WPHeader: index.php\n"
|
15 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
17 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
18 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
21 |
+
|
22 |
+
#: classes/Error.php:17
|
23 |
+
msgid ""
|
24 |
+
"Function get_class does not exist! It's required for Hide My WP to work "
|
25 |
+
"properly."
|
26 |
+
msgstr ""
|
27 |
+
"¡La función get_class no existe! Es necesario para que Hide My WP funcione "
|
28 |
+
"correctamente."
|
29 |
+
|
30 |
+
#: classes/Error.php:20
|
31 |
+
msgid ""
|
32 |
+
"Function file_exists does not exist! It's required for Hide My WP to work "
|
33 |
+
"properly."
|
34 |
+
msgstr ""
|
35 |
+
"La función file_exists no existe! Es necesario para que Hide My WP funcione "
|
36 |
+
"correctamente."
|
37 |
+
|
38 |
+
#: classes/Error.php:24
|
39 |
+
msgid "The home directory is not set!"
|
40 |
+
msgstr "¡El directorio de inicio no está configurado!"
|
41 |
+
|
42 |
+
#: classes/Error.php:28
|
43 |
+
msgid "The PHP version has to be greater than 5.1"
|
44 |
+
msgstr "La versión de PHP tiene que ser mayor que 5.1"
|
45 |
+
|
46 |
+
#: classes/Error.php:36
|
47 |
+
msgid ""
|
48 |
+
"For Hide My WP to work, the PHP version has to be equal or greater than 5.1"
|
49 |
+
msgstr ""
|
50 |
+
"Para que Hide My WP funcione, la versión de PHP debe ser igual o mayor que "
|
51 |
+
"5.1"
|
52 |
+
|
53 |
+
#: classes/Tools.php:30 classes/Tools.php:34
|
54 |
+
#, php-format
|
55 |
+
msgid ""
|
56 |
+
"Your memory limit is %sM. You need at least %sM to prevent loading errors in "
|
57 |
+
"frontend. See: %sIncreasing memory allocated to PHP%s"
|
58 |
+
msgstr ""
|
59 |
+
"Su límite de memoria es %sM. Necesitas al menos %sM para evitar errores de "
|
60 |
+
"carga en el frontend. Mira..: %sIncrementar la memoria asignada a PHP%s"
|
61 |
+
|
62 |
+
#: classes/Tools.php:122
|
63 |
+
msgid ""
|
64 |
+
"Your IP has been flagged for potential security violations. Please try again "
|
65 |
+
"in a little while..."
|
66 |
+
msgstr ""
|
67 |
+
"Su IP se ha boqueado por posibles infracciones de seguridad. Inténtalo de "
|
68 |
+
"nuevo dentro de un rato ..."
|
69 |
+
|
70 |
+
#: classes/Tools.php:333
|
71 |
+
msgid "Documentation"
|
72 |
+
msgstr "Documentación"
|
73 |
+
|
74 |
+
#: classes/Tools.php:334
|
75 |
+
msgid "Leave a review"
|
76 |
+
msgstr "Dejar un comentario"
|
77 |
+
|
78 |
+
#: classes/Tools.php:351
|
79 |
+
msgid "Upgrade to Premium"
|
80 |
+
msgstr "Mejorar a Premium"
|
81 |
+
|
82 |
+
#: classes/Tools.php:353 controllers/SecurityCheck.php:185
|
83 |
+
msgid "Settings"
|
84 |
+
msgstr "Configuración"
|
85 |
+
|
86 |
+
#: classes/Tools.php:1129
|
87 |
+
#, php-format
|
88 |
+
msgid "CONNECTION ERROR! Make sure your website can access: %s"
|
89 |
+
msgstr "¡ERROR DE CONEXIÓN! Asegúrese de que su sitio web puede acceder a: %s"
|
90 |
+
|
91 |
+
#: classes/Tools.php:1149
|
92 |
+
msgid "New Login Information"
|
93 |
+
msgstr "Ocultar la nueva ruta de admin"
|
94 |
+
|
95 |
+
#: controllers/Brute.php:34
|
96 |
+
msgid "IP Blocked by Hide My WordPress Brute Force Protection"
|
97 |
+
msgstr "IP bloqueada por la protección de Brute Force de Hide My WP"
|
98 |
+
|
99 |
+
#: controllers/Brute.php:62
|
100 |
+
msgid "Add only real IPs. No local ips needed."
|
101 |
+
msgstr "Añadir sólo IPs reales. Las IPs locales no son necesarias."
|
102 |
+
|
103 |
+
#: controllers/Brute.php:78
|
104 |
+
msgid "Add only real IPs. No local ips allowed."
|
105 |
+
msgstr "Añadir sólo IPs reales. Las IPs locales no son necesarias."
|
106 |
+
|
107 |
+
#: controllers/Brute.php:92
|
108 |
+
msgid "You need to set a positive number of attempts "
|
109 |
+
msgstr "Es necesario establecer un número positivo de intentos"
|
110 |
+
|
111 |
+
#: controllers/Brute.php:100
|
112 |
+
msgid "You need to set a positive waiting time"
|
113 |
+
msgstr "Es necesario establecer un tiempo de espera positivo"
|
114 |
+
|
115 |
+
#: controllers/Brute.php:107 controllers/Settings.php:261
|
116 |
+
#: controllers/Settings.php:292 controllers/Settings.php:349
|
117 |
+
#: controllers/Settings.php:362
|
118 |
+
msgid "Saved"
|
119 |
+
msgstr "Guardado"
|
120 |
+
|
121 |
+
#: controllers/Brute.php:134
|
122 |
+
msgid "Cnt"
|
123 |
+
msgstr "Cnt"
|
124 |
+
|
125 |
+
#: controllers/Brute.php:135
|
126 |
+
msgid "IP"
|
127 |
+
msgstr "IP"
|
128 |
+
|
129 |
+
#: controllers/Brute.php:136
|
130 |
+
msgid "Fail Attempts"
|
131 |
+
msgstr "Intentos Fallidos"
|
132 |
+
|
133 |
+
#: controllers/Brute.php:137
|
134 |
+
msgid "Hostname"
|
135 |
+
msgstr "Nombre de host"
|
136 |
+
|
137 |
+
#: controllers/Brute.php:138
|
138 |
+
msgid "Options"
|
139 |
+
msgstr "Opciones"
|
140 |
+
|
141 |
+
#: controllers/Brute.php:160
|
142 |
+
msgid "No blacklisted ips"
|
143 |
+
msgstr "Lista negra de IPs vacía"
|
144 |
+
|
145 |
+
#: controllers/Brute.php:202
|
146 |
+
#, php-format
|
147 |
+
msgid ""
|
148 |
+
"<strong>ERROR:</strong> Email or Password is incorrect. <br /> %d attempts "
|
149 |
+
"left before lockout"
|
150 |
+
msgstr ""
|
151 |
+
"<strong>ERROR:</strong> Correo electrónico o contraseña incorrecta."
|
152 |
+
"<br>Quedan %d intentos antes de bloqueo"
|
153 |
+
|
154 |
+
#: controllers/Menu.php:66 controllers/Menu.php:175
|
155 |
+
msgid "Hide My WP - Customize Permalinks"
|
156 |
+
msgstr "Conozca más detalles acerca de Hide My WP"
|
157 |
+
|
158 |
+
#: controllers/Menu.php:67 controllers/Menu.php:176
|
159 |
+
msgid "Change Paths"
|
160 |
+
msgstr "Cambia los caminos"
|
161 |
+
|
162 |
+
#: controllers/Menu.php:74 controllers/Menu.php:183
|
163 |
+
msgid "Hide My WP - Mapping"
|
164 |
+
msgstr "Hide My WP - Mapeo"
|
165 |
+
|
166 |
+
#: controllers/Menu.php:75 controllers/Menu.php:184 models/Settings.php:17
|
167 |
+
msgid "Mapping"
|
168 |
+
msgstr "Mapeo"
|
169 |
+
|
170 |
+
#: controllers/Menu.php:82 controllers/Menu.php:191
|
171 |
+
msgid "Hide My WP - Tweaks"
|
172 |
+
msgstr "Hide My WP - Tweaks"
|
173 |
+
|
174 |
+
#: controllers/Menu.php:83 controllers/Menu.php:192 models/Settings.php:22
|
175 |
+
msgid "Tweaks"
|
176 |
+
msgstr "Ajustes rápidos"
|
177 |
+
|
178 |
+
#: controllers/Menu.php:91 controllers/Menu.php:200
|
179 |
+
msgid "Hide My WP - Brute Force Protection"
|
180 |
+
msgstr "Hide My WP - Protección de Brute Force"
|
181 |
+
|
182 |
+
#: controllers/Menu.php:92 controllers/Menu.php:201
|
183 |
+
msgid "Brute Force Protection"
|
184 |
+
msgstr "Seguridad contra ataque por Brute Force"
|
185 |
+
|
186 |
+
#: controllers/Menu.php:100 controllers/Menu.php:208
|
187 |
+
msgid "Hide My WP - Log Events"
|
188 |
+
msgstr "Hide My WP - Registro de eventos"
|
189 |
+
|
190 |
+
#: controllers/Menu.php:101 controllers/Menu.php:209 models/Settings.php:32
|
191 |
+
#: view/Log.php:70
|
192 |
+
msgid "Log Events"
|
193 |
+
msgstr "Registro de eventos"
|
194 |
+
|
195 |
+
#: controllers/Menu.php:109 controllers/Menu.php:217
|
196 |
+
msgid "Hide My WP - Security Check"
|
197 |
+
msgstr "Hide My WP - Control de seguridad"
|
198 |
+
|
199 |
+
#: controllers/Menu.php:110 controllers/Menu.php:218 models/Settings.php:37
|
200 |
+
#: view/Advanced.php:226 view/Mapping.php:229 view/Permalinks.php:549
|
201 |
+
#: view/Tweaks.php:178
|
202 |
+
msgid "Security Check"
|
203 |
+
msgstr "Control de seguridad"
|
204 |
+
|
205 |
+
#: controllers/Menu.php:117 controllers/Menu.php:225
|
206 |
+
msgid "Hide My WP - Recommended Plugins"
|
207 |
+
msgstr "Hide My WP - Instalar Plugins"
|
208 |
+
|
209 |
+
#: controllers/Menu.php:118 controllers/Menu.php:226
|
210 |
+
msgid "Install Plugins"
|
211 |
+
msgstr "Instalar Plugins"
|
212 |
+
|
213 |
+
#: controllers/Menu.php:125 controllers/Menu.php:233
|
214 |
+
msgid "Hide My WP - Backup & Restore"
|
215 |
+
msgstr "Hide My WP - Copia de seguridad/Restaurar"
|
216 |
+
|
217 |
+
#: controllers/Menu.php:126 controllers/Menu.php:234 models/Settings.php:48
|
218 |
+
msgid "Backup/Restore"
|
219 |
+
msgstr "Copia de seguridad/Restaurar"
|
220 |
+
|
221 |
+
#: controllers/Menu.php:133 controllers/Menu.php:241
|
222 |
+
msgid "Hide My WP - Advanced Settings"
|
223 |
+
msgstr "Hide My WP - Configuración Avanzada"
|
224 |
+
|
225 |
+
#: controllers/Menu.php:134 controllers/Menu.php:242 models/Settings.php:53
|
226 |
+
msgid "Advanced"
|
227 |
+
msgstr "Configuración Avanzada"
|
228 |
+
|
229 |
+
#: controllers/Menu.php:147 controllers/Settings.php:190
|
230 |
+
msgid "Hide My WP"
|
231 |
+
msgstr "Hide My WP"
|
232 |
+
|
233 |
+
#: controllers/Notice.php:31
|
234 |
+
msgid "Close notification"
|
235 |
+
msgstr "Cerar la Notificación"
|
236 |
+
|
237 |
+
#: controllers/Notice.php:35
|
238 |
+
msgid "Thank you for using Hide My WP?"
|
239 |
+
msgstr "Gracias por usar Hide My WP"
|
240 |
+
|
241 |
+
#: controllers/Notice.php:36
|
242 |
+
#, php-format
|
243 |
+
msgid ""
|
244 |
+
"Add %sXML-RPC attack protection, SQL/Script firewall, reCaptcha login%s and "
|
245 |
+
"more with Hide My WP Ghost premium features."
|
246 |
+
msgstr ""
|
247 |
+
"Añade protección contra ataques %sXML-RPC, cortafuegos SQL/Script, reCaptcha "
|
248 |
+
"login%s y más con las características premium de Hide My WP Ghost."
|
249 |
+
|
250 |
+
#: controllers/Notice.php:37
|
251 |
+
msgid "See all premium features"
|
252 |
+
msgstr "Ver todas las características premium"
|
253 |
+
|
254 |
+
#: controllers/SecurityCheck.php:23
|
255 |
+
msgid ""
|
256 |
+
"You should check your website every week to see if there are any security "
|
257 |
+
"changes."
|
258 |
+
msgstr ""
|
259 |
+
"Deberías revisar tu sitio web cada semana para ver si hay algún cambio de "
|
260 |
+
"seguridad."
|
261 |
+
|
262 |
+
#: controllers/SecurityCheck.php:56
|
263 |
+
msgid ""
|
264 |
+
"First, you need to connect Hide My Wp with WPPlugins and switch from Default "
|
265 |
+
"mode to Lite Mode."
|
266 |
+
msgstr ""
|
267 |
+
"Primero, debes conectar Hide My Wp con WPPlugins y cambiar del modo por "
|
268 |
+
"defecto al modo Lite."
|
269 |
+
|
270 |
+
#: controllers/SecurityCheck.php:60 view/Brute.php:30 view/Brute.php:31
|
271 |
+
#: view/Brute.php:81 view/Brute.php:94 view/Log.php:12 view/Mapping.php:88
|
272 |
+
#: view/Mapping.php:162 view/Permalinks.php:338 view/Permalinks.php:413
|
273 |
+
#: view/Permalinks.php:444 view/Tweaks.php:27
|
274 |
+
#, php-format
|
275 |
+
msgid "This feature requires %sHide My WP Ghost%s."
|
276 |
+
msgstr "Esta característica requiere %sHide My WP Ghost%s."
|
277 |
+
|
278 |
+
#: controllers/SecurityCheck.php:60 view/Brute.php:32 view/Brute.php:82
|
279 |
+
#: view/Brute.php:95 view/Log.php:13 view/Mapping.php:89 view/Mapping.php:163
|
280 |
+
#: view/Permalinks.php:39 view/Permalinks.php:339 view/Permalinks.php:414
|
281 |
+
#: view/Permalinks.php:445 view/Tweaks.php:28
|
282 |
+
msgid "PRO"
|
283 |
+
msgstr "PRO"
|
284 |
+
|
285 |
+
#: controllers/SecurityCheck.php:64
|
286 |
+
msgid "First, you need to switch Hide My Wp from Default mode to Lite Mode."
|
287 |
+
msgstr ""
|
288 |
+
"Primero, tienes que cambiar Hide My Wp del modo por defecto al modo Lite."
|
289 |
+
|
290 |
+
#: controllers/SecurityCheck.php:105
|
291 |
+
msgid "PHP Version"
|
292 |
+
msgstr "Versión de PHP"
|
293 |
+
|
294 |
+
#: controllers/SecurityCheck.php:109
|
295 |
+
msgid ""
|
296 |
+
"Using an old version of PHP makes your site slow and prone to hacker attacks "
|
297 |
+
"due to known vulnerabilities that exist in versions of PHP that are no "
|
298 |
+
"longer maintained. <br /><br />You need <strong>PHP 7.0</strong> or higher "
|
299 |
+
"for your website."
|
300 |
+
msgstr ""
|
301 |
+
"El uso de una versión antigua de PHP hace que su sitio sea lento y propenso "
|
302 |
+
"a ataques de hackers debido a las vulnerabilidades conocidas que existen en "
|
303 |
+
"las versiones de PHP que ya no se mantienen. <br /><br />Necesita "
|
304 |
+
"<strong>PHP 7.0</strong> o superior para su sitio web."
|
305 |
+
|
306 |
+
#: controllers/SecurityCheck.php:110
|
307 |
+
msgid ""
|
308 |
+
"Email your hosting company and tell them you'd like to switch to a newer "
|
309 |
+
"version of PHP or move your site to a better hosting company."
|
310 |
+
msgstr ""
|
311 |
+
"Envíe un correo electrónico a su compañía de hospedaje y dígales que le "
|
312 |
+
"gustaría cambiar a una nueva versión de PHP o mover su sitio a una compañía "
|
313 |
+
"de hospedaje mejor."
|
314 |
+
|
315 |
+
#: controllers/SecurityCheck.php:113
|
316 |
+
msgid "Mysql Version"
|
317 |
+
msgstr "Versión Mysql"
|
318 |
+
|
319 |
+
#: controllers/SecurityCheck.php:117
|
320 |
+
msgid ""
|
321 |
+
"Using an old version of MySQL makes your site slow and prone to hacker "
|
322 |
+
"attacks due to known vulnerabilities that exist in versions of MySQL that "
|
323 |
+
"are no longer maintained. <br /><br />You need <strong>Mysql 5.4</strong> or "
|
324 |
+
"higher"
|
325 |
+
msgstr ""
|
326 |
+
"El uso de una versión antigua de MySQL hace que su sitio sea lento y "
|
327 |
+
"propenso a ataques de hackers debido a las vulnerabilidades conocidas que "
|
328 |
+
"existen en las versiones de MySQL que ya no se mantienen. <br /><br />Usted "
|
329 |
+
"necesita <strong>Mysql 5.4</strong> o superior"
|
330 |
+
|
331 |
+
#: controllers/SecurityCheck.php:118
|
332 |
+
msgid ""
|
333 |
+
"Email your hosting company and tell them you'd like to switch to a newer "
|
334 |
+
"version of MySQL or move your site to a better hosting company"
|
335 |
+
msgstr ""
|
336 |
+
"Envíe un correo electrónico a su compañía de hospedaje y dígales que le "
|
337 |
+
"gustaría cambiar a una nueva versión de MySQL o mover su sitio a una "
|
338 |
+
"compañía de hospedaje mejor"
|
339 |
+
|
340 |
+
#: controllers/SecurityCheck.php:121
|
341 |
+
msgid "WordPress Version"
|
342 |
+
msgstr "Versión de WordPress"
|
343 |
+
|
344 |
+
#: controllers/SecurityCheck.php:125
|
345 |
+
#, php-format
|
346 |
+
msgid ""
|
347 |
+
"You should always update WordPress to the %slatest versions%s. These usually "
|
348 |
+
"include the latest security fixes, and don't alter WP in any significant "
|
349 |
+
"way. These should be applied as soon as WP releases them. <br /><br />When a "
|
350 |
+
"new version of WordPress is available, you will receive an update message on "
|
351 |
+
"your WordPress Admin screens. To update WordPress, click the link in this "
|
352 |
+
"message."
|
353 |
+
msgstr ""
|
354 |
+
"Siempre debes actualizar WordPress a las %sversiones más recientes%s. Estas "
|
355 |
+
"suelen incluir las últimas correcciones de seguridad, y no alteran WP de "
|
356 |
+
"manera significativa. Estos deberían ser aplicados tan pronto como WP los "
|
357 |
+
"publique. <br /><br />Cuando una nueva versión de WordPress esté disponible, "
|
358 |
+
"recibirás un mensaje de actualización en las pantallas de administración de "
|
359 |
+
"WordPress. Para actualizar WordPress, haz clic en el enlace de este mensaje."
|
360 |
+
|
361 |
+
#: controllers/SecurityCheck.php:126
|
362 |
+
msgid "There is a newer version of WordPress available ({version})."
|
363 |
+
msgstr "Hay una nueva versión de WordPress disponible ({versión})."
|
364 |
+
|
365 |
+
#: controllers/SecurityCheck.php:129
|
366 |
+
msgid "WP Debug Mode"
|
367 |
+
msgstr "Modo de depuración de WP"
|
368 |
+
|
369 |
+
#: controllers/SecurityCheck.php:133
|
370 |
+
msgid ""
|
371 |
+
"Every good developer should turn on debugging before getting started on a "
|
372 |
+
"new plugin or theme. In fact, the WordPress Codex 'highly recommends' that "
|
373 |
+
"developers use WP_DEBUG. <br /><br />Unfortunately, many developers forget "
|
374 |
+
"the debug mode, even when the website is live. Showing debug logs in the "
|
375 |
+
"frontend will let hackers know a lot about your WordPress website."
|
376 |
+
msgstr ""
|
377 |
+
"Todo buen desarrollador debería activar la depuración antes de empezar con "
|
378 |
+
"un nuevo plugin o tema. De hecho, el Codex de WordPress \"recomienda "
|
379 |
+
"encarecidamente\" que los desarrolladores usen WP_DEBUG. <br /><br /"
|
380 |
+
">Desafortunadamente, muchos desarrolladores olvidan el modo de depuración, "
|
381 |
+
"incluso cuando el sitio web está en vivo. Mostrar registros de depuración en "
|
382 |
+
"el frontend le permitirá a los hackers saber mucho sobre tu sitio web de "
|
383 |
+
"WordPress."
|
384 |
+
|
385 |
+
#: controllers/SecurityCheck.php:134
|
386 |
+
msgid ""
|
387 |
+
"Disable WP_DEBUG for live websites in wp_config.php <code>define('WP_DEBUG', "
|
388 |
+
"false);</code>"
|
389 |
+
msgstr ""
|
390 |
+
"Deshabilitar WP_DEBUG para sitios web en vivo en wp_config.php "
|
391 |
+
"<code>define('WP_DEBUG', false);</code>"
|
392 |
+
|
393 |
+
#: controllers/SecurityCheck.php:138
|
394 |
+
msgid "DB Debug Mode"
|
395 |
+
msgstr "Modo de depuración DB"
|
396 |
+
|
397 |
+
#: controllers/SecurityCheck.php:142
|
398 |
+
msgid ""
|
399 |
+
"It's not safe to have Database Debug turned on. Make sure you don't use "
|
400 |
+
"Database debug on live websites."
|
401 |
+
msgstr ""
|
402 |
+
"No es seguro tener activado el depurador de la base de datos. Asegúrate de "
|
403 |
+
"no usar el depurador de la base de datos en sitios web en vivo."
|
404 |
+
|
405 |
+
#: controllers/SecurityCheck.php:143
|
406 |
+
#, php-format
|
407 |
+
msgid ""
|
408 |
+
"Turn off the debug plugins if your website is live. You can also switch on "
|
409 |
+
"%sHide My Wp > Tweaks > Disable DB Debug in Frontent%s"
|
410 |
+
msgstr ""
|
411 |
+
"Apague los plugins de depuración si su sitio web está en vivo. También "
|
412 |
+
"puedes activar %sHide My Wp > Tweaks > Disable DB Debug in Frontent%s"
|
413 |
+
|
414 |
+
#: controllers/SecurityCheck.php:147
|
415 |
+
msgid "Script Debug Mode"
|
416 |
+
msgstr "Modo de depuración de guiones"
|
417 |
+
|
418 |
+
#: controllers/SecurityCheck.php:151
|
419 |
+
msgid ""
|
420 |
+
"Every good developer should turn on debugging before getting started on a "
|
421 |
+
"new plugin or theme. In fact, the WordPress Codex 'highly recommends' that "
|
422 |
+
"developers use SCRIPT_DEBUG. Unfortunately, many developers forget the debug "
|
423 |
+
"mode even when the website is live. Showing debug logs in the frontend will "
|
424 |
+
"let hackers know a lot about your WordPress website."
|
425 |
+
msgstr ""
|
426 |
+
"Todo buen desarrollador debería activar la depuración antes de empezar con "
|
427 |
+
"un nuevo plugin o tema. De hecho, el Codex de WordPress \"recomienda "
|
428 |
+
"encarecidamente\" que los desarrolladores usen SCRIPT_DEBUG. "
|
429 |
+
"Desafortunadamente, muchos desarrolladores olvidan el modo de depuración "
|
430 |
+
"incluso cuando el sitio web está en vivo. Mostrar registros de depuración en "
|
431 |
+
"el frontend le permitirá a los hackers saber mucho sobre tu sitio web de "
|
432 |
+
"WordPress."
|
433 |
+
|
434 |
+
#: controllers/SecurityCheck.php:152
|
435 |
+
msgid ""
|
436 |
+
"Disable SCRIPT_DEBUG for live websites in wp_config.php "
|
437 |
+
"<code>define('SCRIPT_DEBUG', false);</code>"
|
438 |
+
msgstr ""
|
439 |
+
"Deshabilitar SCRIPT_DEBUG para sitios web en vivo en wp_config.php "
|
440 |
+
"<code>define('SCRIPT_DEBUG', false);</code>"
|
441 |
+
|
442 |
+
#: controllers/SecurityCheck.php:156
|
443 |
+
msgid "display_errors PHP directive"
|
444 |
+
msgstr "errores_de_visualización Directiva PHP"
|
445 |
+
|
446 |
+
#: controllers/SecurityCheck.php:160
|
447 |
+
msgid ""
|
448 |
+
"Displaying any kind of debug info in the frontend is extremely bad. If any "
|
449 |
+
"PHP errors happen on your site they should be logged in a safe place and not "
|
450 |
+
"displayed to visitors or potential attackers."
|
451 |
+
msgstr ""
|
452 |
+
"Mostrar cualquier tipo de información de depuración en el frontend es "
|
453 |
+
"extremadamente malo. Si cualquier error de PHP ocurre en su sitio, debe ser "
|
454 |
+
"registrado en un lugar seguro y no ser mostrado a los visitantes o "
|
455 |
+
"potenciales atacantes."
|
456 |
+
|
457 |
+
#: controllers/SecurityCheck.php:161
|
458 |
+
msgid "Edit wp_config.php and add <code>ini_set('display_errors', 0);</code>"
|
459 |
+
msgstr "Edita wp_config.php y añade <code>ini_set('display_errors', 0);</code>"
|
460 |
+
|
461 |
+
#: controllers/SecurityCheck.php:164
|
462 |
+
msgid "Backend under SSL"
|
463 |
+
msgstr "Backend bajo SSL"
|
464 |
+
|
465 |
+
#: controllers/SecurityCheck.php:168
|
466 |
+
msgid ""
|
467 |
+
"SSL is an abbreviation used for Secure Sockets Layers, which are encryption "
|
468 |
+
"protocols used on the internet to secure information exchange and provide "
|
469 |
+
"certificate information.<br /><br />These certificates provide an assurance "
|
470 |
+
"to the user about the identity of the website they are communicating with. "
|
471 |
+
"SSL may also be called TLS or Transport Layer Security protocol. <br /><br /"
|
472 |
+
">It's important to have a secure connection for the Admin Dashboard in "
|
473 |
+
"WordPress."
|
474 |
+
msgstr ""
|
475 |
+
"SSL es la abreviatura de Secure Sockets Layers, que son protocolos de "
|
476 |
+
"cifrado utilizados en Internet para asegurar el intercambio de información y "
|
477 |
+
"proporcionar información de certificados.<br /><br />Estos certificados "
|
478 |
+
"proporcionan una garantía al usuario sobre la identidad del sitio web con el "
|
479 |
+
"que se está comunicando. El SSL también puede denominarse TLS o protocolo de "
|
480 |
+
"seguridad de la capa de transporte. <br /><br />Es importante tener una "
|
481 |
+
"conexión segura para el panel de administración en WordPress."
|
482 |
+
|
483 |
+
#: controllers/SecurityCheck.php:169
|
484 |
+
#, php-format
|
485 |
+
msgid "Learn how to set your website as %s. %sClick Here%s"
|
486 |
+
msgstr "Aprende a configurar tu sitio web como %s. %sHaz clic aquí%s"
|
487 |
+
|
488 |
+
#: controllers/SecurityCheck.php:172
|
489 |
+
msgid "User 'admin' as Administrator"
|
490 |
+
msgstr "Ocultar la nueva ruta de admin"
|
491 |
+
|
492 |
+
#: controllers/SecurityCheck.php:176
|
493 |
+
msgid ""
|
494 |
+
"In the old days, the default WordPress admin username was 'admin'. Since "
|
495 |
+
"usernames make up half of the login credentials, this made it easier for "
|
496 |
+
"hackers to launch brute-force attacks. <br /><br />Thankfully, WordPress has "
|
497 |
+
"since changed this and now requires you to select a custom username at the "
|
498 |
+
"time of installing WordPress."
|
499 |
+
msgstr ""
|
500 |
+
"En los viejos tiempos, el nombre de usuario predeterminado del administrador "
|
501 |
+
"de WordPress era 'admin'. Como los nombres de usuario constituyen la mitad "
|
502 |
+
"de las credenciales de inicio de sesión, esto facilitaba a los hackers el "
|
503 |
+
"lanzamiento de ataques de fuerza bruta. <br /><br />Afortunadamente, "
|
504 |
+
"WordPress ha cambiado esto y ahora requiere que selecciones un nombre de "
|
505 |
+
"usuario personalizado al momento de instalar WordPress."
|
506 |
+
|
507 |
+
#: controllers/SecurityCheck.php:177
|
508 |
+
msgid "Change the user 'admin' with another name to improve security."
|
509 |
+
msgstr "Cambiar el usuario 'admin' por otro nombre para mejorar la seguridad."
|
510 |
+
|
511 |
+
#: controllers/SecurityCheck.php:180
|
512 |
+
msgid "Spammers can easily signup"
|
513 |
+
msgstr "Los spammers pueden inscribirse fácilmente"
|
514 |
+
|
515 |
+
#: controllers/SecurityCheck.php:184
|
516 |
+
msgid ""
|
517 |
+
"If you do not have an e-commerce, membership or guest posting website, you "
|
518 |
+
"shouldn't let users subscribe to your blog. You will end up with spam "
|
519 |
+
"registrations and your website will be filled with spammy content and "
|
520 |
+
"comments."
|
521 |
+
msgstr ""
|
522 |
+
"Si no tiene un sitio web de comercio electrónico, de membresía o de "
|
523 |
+
"publicaciones de invitados, no debe permitir que los usuarios se suscriban a "
|
524 |
+
"su blog. Terminará con registros de spam y su sitio web se llenará de "
|
525 |
+
"contenido y comentarios de spam."
|
526 |
+
|
527 |
+
#: controllers/SecurityCheck.php:185
|
528 |
+
#, php-format
|
529 |
+
msgid ""
|
530 |
+
"Change the signup path from %sHide My Wp > Custom Register URL%s or uncheck "
|
531 |
+
"the option %s > %s > %s"
|
532 |
+
msgstr ""
|
533 |
+
"Cambie la ruta de registro desde %sHide My Wp > Custom Register URL%s o "
|
534 |
+
"desmarque la opción %s > %s > %s"
|
535 |
+
|
536 |
+
#: controllers/SecurityCheck.php:185 controllers/SecurityCheck.php:444
|
537 |
+
msgid "General"
|
538 |
+
msgstr "General"
|
539 |
+
|
540 |
+
#: controllers/SecurityCheck.php:185
|
541 |
+
msgid "Membership"
|
542 |
+
msgstr "Membresía"
|
543 |
+
|
544 |
+
#: controllers/SecurityCheck.php:188
|
545 |
+
msgid "Outdated Plugins"
|
546 |
+
msgstr "Plugins obsoletos"
|
547 |
+
|
548 |
+
#: controllers/SecurityCheck.php:192
|
549 |
+
msgid ""
|
550 |
+
"WordPress and its plugins and themes are like any other software installed "
|
551 |
+
"on your computer, and like any other application on your devices. "
|
552 |
+
"Periodically, developers release updates which provide new features, or fix "
|
553 |
+
"known bugs. <br /><br />These new features may not necessarily be something "
|
554 |
+
"that you want. In fact, you may be perfectly satisfied with the "
|
555 |
+
"functionality you currently have. Nevertheless, you are still likely to be "
|
556 |
+
"concerned about bugs.<br /><br />Software bugs can come in many shapes and "
|
557 |
+
"sizes. A bug could be very serious, such as preventing users from using a "
|
558 |
+
"plugin, or it could be minor and only affect a certain part of a theme, for "
|
559 |
+
"example. In some cases, bugs can cause serious security holes. <br /><br /"
|
560 |
+
">Keeping plugins up to date is one of the most important and easiest ways to "
|
561 |
+
"keep your site secure."
|
562 |
+
msgstr ""
|
563 |
+
"WordPress y sus plugins y temas son como cualquier otro software instalado "
|
564 |
+
"en tu ordenador, y como cualquier otra aplicación en tus dispositivos. "
|
565 |
+
"Periódicamente, los desarrolladores publican actualizaciones que "
|
566 |
+
"proporcionan nuevas características o corrigen errores conocidos. <br /><br /"
|
567 |
+
">Estas nuevas características pueden no ser necesariamente algo que tú "
|
568 |
+
"quieras. De hecho, es posible que estés perfectamente satisfecho con la "
|
569 |
+
"funcionalidad que tienes actualmente. Sin embargo, es probable que aún le "
|
570 |
+
"preocupen los errores.<br /><br />Los errores de software pueden tener "
|
571 |
+
"muchas formas y tamaños. Un error puede ser muy grave, como impedir que los "
|
572 |
+
"usuarios usen un plugin, o puede ser menor y afectar sólo a una cierta parte "
|
573 |
+
"de un tema, por ejemplo. En algunos casos, los bugs pueden causar serios "
|
574 |
+
"agujeros de seguridad. <br /><br />Mantener los plugins actualizados es una "
|
575 |
+
"de las formas más importantes y fáciles de mantener su sitio seguro."
|
576 |
+
|
577 |
+
#: controllers/SecurityCheck.php:193 controllers/SecurityCheck.php:201
|
578 |
+
msgid "Go to the Updates page and update all the plugins to the last version."
|
579 |
+
msgstr ""
|
580 |
+
"Ve a la página de actualizaciones y actualiza todos los plugins a la última "
|
581 |
+
"versión."
|
582 |
+
|
583 |
+
#: controllers/SecurityCheck.php:196
|
584 |
+
msgid "Not Updated Plugins"
|
585 |
+
msgstr "Plugins no actualizados"
|
586 |
+
|
587 |
+
#: controllers/SecurityCheck.php:200
|
588 |
+
msgid ""
|
589 |
+
"Plugins that have not been updated in the last 12 months can have real "
|
590 |
+
"security problems. Make sure you use updated plugins from WordPress "
|
591 |
+
"Directory."
|
592 |
+
msgstr ""
|
593 |
+
"Los plugins que no han sido actualizados en los últimos 12 meses pueden "
|
594 |
+
"tener verdaderos problemas de seguridad. Asegúrate de usar los plugins "
|
595 |
+
"actualizados del directorio de WordPress."
|
596 |
+
|
597 |
+
#: controllers/SecurityCheck.php:204
|
598 |
+
msgid "Version Incompatible Plugins"
|
599 |
+
msgstr "(sólo si otros plugins de cache lo requieren)"
|
600 |
+
|
601 |
+
#: controllers/SecurityCheck.php:208
|
602 |
+
msgid ""
|
603 |
+
"Plugins that are incompatible with your version of WordPress can have real "
|
604 |
+
"security problems. Make sure you use tested plugins from WordPress Directory."
|
605 |
+
msgstr ""
|
606 |
+
"Los plugins que son incompatibles con tu versión de WordPress pueden tener "
|
607 |
+
"verdaderos problemas de seguridad. Asegúrate de usar los plugins probados "
|
608 |
+
"del directorio de WordPress."
|
609 |
+
|
610 |
+
#: controllers/SecurityCheck.php:209
|
611 |
+
msgid "Make sure you use tested plugins from WordPress Directory."
|
612 |
+
msgstr "Asegúrate de usar los plugins probados del directorio de WordPress."
|
613 |
+
|
614 |
+
#: controllers/SecurityCheck.php:212
|
615 |
+
msgid "Outdated Themes"
|
616 |
+
msgstr "Temas obsoletos"
|
617 |
+
|
618 |
+
#: controllers/SecurityCheck.php:216
|
619 |
+
msgid ""
|
620 |
+
"WordPress and its plugins and themes are like any other software installed "
|
621 |
+
"on your computer, and like any other application on your devices. "
|
622 |
+
"Periodically developers release updates which provide new features or fix "
|
623 |
+
"known bugs. <br /><br />New features may be something that you do not "
|
624 |
+
"necessarily want. In fact, you may be perfectly satisfied with the "
|
625 |
+
"functionality you currently have. Nevertheless, you may still be concerned "
|
626 |
+
"about bugs.<br /><br />Software bugs can come in many shapes and sizes. A "
|
627 |
+
"bug could be very serious, such as preventing users from using a plugin, or "
|
628 |
+
"it could be a minor bug that only affects a certain part of a theme, for "
|
629 |
+
"example. In some cases, bugs can even cause serious security holes.<br /"
|
630 |
+
"><br />Keeping themes up to date is one of the most important and easiest "
|
631 |
+
"ways to keep your site secure."
|
632 |
+
msgstr ""
|
633 |
+
"WordPress y sus plugins y temas son como cualquier otro software instalado "
|
634 |
+
"en tu ordenador, y como cualquier otra aplicación en tus dispositivos. "
|
635 |
+
"Periódicamente los desarrolladores publican actualizaciones que proporcionan "
|
636 |
+
"nuevas características o corrigen errores conocidos. <br /><br />Las nuevas "
|
637 |
+
"características pueden ser algo que no necesariamente quieres. De hecho, es "
|
638 |
+
"posible que estés perfectamente satisfecho con la funcionalidad que tienes "
|
639 |
+
"actualmente. Sin embargo, puede que aún le preocupen los errores.<br /><br /"
|
640 |
+
">Los errores de software pueden tener muchas formas y tamaños. Un error "
|
641 |
+
"puede ser muy grave, como impedir que los usuarios usen un plugin, o puede "
|
642 |
+
"ser un error menor que sólo afecta a una cierta parte de un tema, por "
|
643 |
+
"ejemplo. En algunos casos, los bugs pueden incluso causar serios agujeros de "
|
644 |
+
"seguridad.<br /><br />Mantener los temas actualizados es una de las formas "
|
645 |
+
"más importantes y sencillas de mantener su sitio seguro."
|
646 |
+
|
647 |
+
#: controllers/SecurityCheck.php:217
|
648 |
+
msgid "Go to the Updates page and update all the themes to the last version."
|
649 |
+
msgstr ""
|
650 |
+
"Ve a la página de actualizaciones y actualiza todos los temas a la última "
|
651 |
+
"versión."
|
652 |
+
|
653 |
+
#: controllers/SecurityCheck.php:220
|
654 |
+
msgid "Database Prefix"
|
655 |
+
msgstr "Prefijo de la base de datos"
|
656 |
+
|
657 |
+
#: controllers/SecurityCheck.php:224
|
658 |
+
msgid ""
|
659 |
+
"The WordPress database is like a brain for your entire WordPress site, "
|
660 |
+
"because every single bit of information about your site is stored there, "
|
661 |
+
"thus making it a hacker’s favorite target. <br /><br />Spammers and hackers "
|
662 |
+
"run automated code for SQL injections.<br />Unfortunately, many people "
|
663 |
+
"forget to change the database prefix when they install WordPress. <br />This "
|
664 |
+
"makes it easier for hackers to plan a mass attack by targeting the default "
|
665 |
+
"prefix <strong>wp_</strong>."
|
666 |
+
msgstr ""
|
667 |
+
"La base de datos de WordPress es como un cerebro para todo tu sitio de "
|
668 |
+
"WordPress, porque cada pedacito de información sobre tu sitio está "
|
669 |
+
"almacenado allí, convirtiéndolo así en el objetivo favorito de los hackers. "
|
670 |
+
"<br /><br />Los spammers y hackers ejecutan código automatizado para "
|
671 |
+
"inyecciones de SQL.<br />Desafortunadamente, mucha gente se olvida de "
|
672 |
+
"cambiar el prefijo de la base de datos cuando instala WordPress. <br />Esto "
|
673 |
+
"facilita a los hackers el planear un ataque masivo apuntando al prefijo "
|
674 |
+
"predeterminado <strong>wp_</strong>."
|
675 |
+
|
676 |
+
#: controllers/SecurityCheck.php:225
|
677 |
+
#, php-format
|
678 |
+
msgid ""
|
679 |
+
"Hide My WP protects your website from most SQL injections but, if possible, "
|
680 |
+
"use a custom prefix for database tables to avoid SQL injections. %sRead more"
|
681 |
+
"%s"
|
682 |
+
msgstr ""
|
683 |
+
"Hide My WP protege su sitio web de la mayoría de las inyecciones de SQL "
|
684 |
+
"pero, si es posible, utilice un prefijo personalizado para las tablas de la "
|
685 |
+
"base de datos para evitar las inyecciones de SQL. %sLeer más%s"
|
686 |
+
|
687 |
+
#: controllers/SecurityCheck.php:228
|
688 |
+
msgid "Versions in Source Code"
|
689 |
+
msgstr "Versiones en el código fuente"
|
690 |
+
|
691 |
+
#: controllers/SecurityCheck.php:232
|
692 |
+
msgid ""
|
693 |
+
"WordPress, plugins and themes add their version info to the source code, so "
|
694 |
+
"anyone can see it. <br /><br />Hackers can easily find a website with "
|
695 |
+
"vulnerable version plugins or themes, and target these with Zero-Day "
|
696 |
+
"Exploits."
|
697 |
+
msgstr ""
|
698 |
+
"WordPress, los plugins y los temas añaden la información de su versión al "
|
699 |
+
"código fuente, para que cualquiera pueda verla. <br /><br />Los hackers "
|
700 |
+
"pueden encontrar fácilmente un sitio web con plugins o temas de versiones "
|
701 |
+
"vulnerables, y apuntarlos con Exploits de Día Cero."
|
702 |
+
|
703 |
+
#: controllers/SecurityCheck.php:233
|
704 |
+
#, php-format
|
705 |
+
msgid "Switch on %sHide My WP > Tweaks > %s %s"
|
706 |
+
msgstr "Enciende %sHide My WP > Ajustes > %s %s"
|
707 |
+
|
708 |
+
#: controllers/SecurityCheck.php:233 view/Tweaks.php:65
|
709 |
+
msgid "Hide Versions and WordPress Tags"
|
710 |
+
msgstr "Ocultar versiones y etiquetas de WordPress"
|
711 |
+
|
712 |
+
#: controllers/SecurityCheck.php:237
|
713 |
+
msgid "Salts and Security Keys valid"
|
714 |
+
msgstr "Las sales y las llaves de seguridad son válidas"
|
715 |
+
|
716 |
+
#: controllers/SecurityCheck.php:241
|
717 |
+
msgid ""
|
718 |
+
"Security keys are used to ensure better encryption of information stored in "
|
719 |
+
"the user's cookies and hashed passwords. <br /><br />These make your site "
|
720 |
+
"more difficult to hack, access and crack by adding random elements to the "
|
721 |
+
"password. You don't have to remember these keys. In fact, once you set them "
|
722 |
+
"you'll never see them again. Therefore there's no excuse for not setting "
|
723 |
+
"them properly."
|
724 |
+
msgstr ""
|
725 |
+
"Las claves de seguridad se utilizan para asegurar una mejor codificación de "
|
726 |
+
"la información almacenada en las cookies y las contraseñas de los usuarios. "
|
727 |
+
"<br /><br />Esto hace que su sitio sea más difícil de hackear, acceder y "
|
728 |
+
"crackear añadiendo elementos aleatorios a la contraseña. No es necesario que "
|
729 |
+
"recuerde estas claves. De hecho, una vez que las configures, no las volverás "
|
730 |
+
"a ver. Por lo tanto, no hay excusa para no configurarlas correctamente."
|
731 |
+
|
732 |
+
#: controllers/SecurityCheck.php:242
|
733 |
+
msgid ""
|
734 |
+
"Security keys are defined in wp-config.php as constants on lines. They "
|
735 |
+
"should be as unique and as long as possible. <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
736 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
737 |
+
"NONCE_SALT</code>"
|
738 |
+
msgstr ""
|
739 |
+
"Las claves de seguridad se definen en wp-config.php como constantes en las "
|
740 |
+
"líneas. Deben ser tan únicas y largas como sea posible. <code>AUTH_KEY,"
|
741 |
+
"SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,"
|
742 |
+
"LOGGED_IN_SALT,NONCE_SALT</code>"
|
743 |
+
|
744 |
+
#: controllers/SecurityCheck.php:245
|
745 |
+
msgid "Security Keys Updated"
|
746 |
+
msgstr "Llaves de seguridad actualizadas"
|
747 |
+
|
748 |
+
#: controllers/SecurityCheck.php:249
|
749 |
+
msgid ""
|
750 |
+
"The security keys in wp-config.php should be renewed as often as possible."
|
751 |
+
msgstr ""
|
752 |
+
"Las claves de seguridad en wp-config.php deben ser renovadas tan a menudo "
|
753 |
+
"como sea posible."
|
754 |
+
|
755 |
+
#: controllers/SecurityCheck.php:250
|
756 |
+
#, php-format
|
757 |
+
msgid ""
|
758 |
+
"You can generate %snew Keys from here%s <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
759 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
760 |
+
"NONCE_SALT</code>"
|
761 |
+
msgstr ""
|
762 |
+
"Puedes generar %s nuevas claves desde aquí %s <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
763 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
764 |
+
"NONCE_SALT</code>"
|
765 |
+
|
766 |
+
#: controllers/SecurityCheck.php:253
|
767 |
+
msgid "WordPress dDatabase Password"
|
768 |
+
msgstr "Contraseña de la base de datos de WordPress dDatabase"
|
769 |
+
|
770 |
+
#: controllers/SecurityCheck.php:257
|
771 |
+
msgid ""
|
772 |
+
"There is no such thing as an \"unimportant password\"! The same goes for "
|
773 |
+
"your WordPress database password. <br />Although most servers are configured "
|
774 |
+
"so that the database can't be accessed from other hosts (or from outside of "
|
775 |
+
"the local network), that doesn't mean your database password should be "
|
776 |
+
"\"12345\" or no password at all."
|
777 |
+
msgstr ""
|
778 |
+
"¡No existe tal cosa como una \"contraseña sin importancia\"! Lo mismo ocurre "
|
779 |
+
"con la contraseña de la base de datos de WordPress. <br />Aunque la mayoría "
|
780 |
+
"de los servidores están configurados de manera que no se puede acceder a la "
|
781 |
+
"base de datos desde otros hosts (o desde fuera de la red local), eso no "
|
782 |
+
"significa que tu contraseña de la base de datos deba ser \"12345\" o ninguna "
|
783 |
+
"contraseña en absoluto."
|
784 |
+
|
785 |
+
#: controllers/SecurityCheck.php:258
|
786 |
+
msgid ""
|
787 |
+
"Choose a proper database password, at least 8 characters long with a "
|
788 |
+
"combination of letters, numbers and special characters. After you change it, "
|
789 |
+
"set the new password in the wp_config.php file <code>define('DB_PASSWORD', "
|
790 |
+
"'NEW_DB_PASSWORD_GOES_HERE');</code>"
|
791 |
+
msgstr ""
|
792 |
+
"Elija una contraseña adecuada para la base de datos, de al menos 8 "
|
793 |
+
"caracteres de longitud con una combinación de letras, números y caracteres "
|
794 |
+
"especiales. Después de cambiarla, establezca la nueva contraseña en el "
|
795 |
+
"archivo wp_config.php <code>define('DB_PASSWORD', "
|
796 |
+
"'NEW_DB_PASSWORD_GOES_HERE');</code>"
|
797 |
+
|
798 |
+
#: controllers/SecurityCheck.php:269
|
799 |
+
msgid "/wp-content is visible in source code"
|
800 |
+
msgstr "El contenido de /wp es visible en el código fuente"
|
801 |
+
|
802 |
+
#: controllers/SecurityCheck.php:273
|
803 |
+
msgid ""
|
804 |
+
"It's important to rename common WordPress paths, such as wp-content and wp-"
|
805 |
+
"includes to prevent hackers from knowing that you have a WordPress website."
|
806 |
+
msgstr ""
|
807 |
+
"Es importante renombrar las rutas comunes de WordPress, como wp-contenido y "
|
808 |
+
"wp-incluido para evitar que los hackers sepan que tienes un sitio web de "
|
809 |
+
"WordPress."
|
810 |
+
|
811 |
+
#: controllers/SecurityCheck.php:274
|
812 |
+
#, php-format
|
813 |
+
msgid ""
|
814 |
+
"Change the wp-content, wp-includes and other common paths with %sHide My Wp "
|
815 |
+
"> Permalinks%s"
|
816 |
+
msgstr ""
|
817 |
+
"Cambie el contenido del wp, wp-incluye y otros caminos comunes con %sHide My "
|
818 |
+
"Wp > Permalinks%s"
|
819 |
+
|
820 |
+
#: controllers/SecurityCheck.php:277
|
821 |
+
msgid "/wp-content path is accessible"
|
822 |
+
msgstr "/El camino del contenido de la página web es accesible.."
|
823 |
+
|
824 |
+
#: controllers/SecurityCheck.php:281
|
825 |
+
msgid ""
|
826 |
+
"It's important to hide the common WordPress paths to prevent attacks on "
|
827 |
+
"vulnerable plugins and themes. <br /> Also, it's important to hide the names "
|
828 |
+
"of plugins and themes to make it impossible for bots to detect them."
|
829 |
+
msgstr ""
|
830 |
+
"Es importante ocultar las rutas comunes de WordPress para prevenir ataques a "
|
831 |
+
"los plugins y temas vulnerables. <br /> También es importante ocultar los "
|
832 |
+
"nombres de los plugins y temas para hacer imposible que los bots los "
|
833 |
+
"detecten."
|
834 |
+
|
835 |
+
#: controllers/SecurityCheck.php:282
|
836 |
+
#, php-format
|
837 |
+
msgid ""
|
838 |
+
"Switch on %sHide My Wp > Hide WordPress Common Paths%s to hide the old paths"
|
839 |
+
msgstr ""
|
840 |
+
"Enciende %sHide My Wp > Hide WordPress Common Paths%s para ocultar los "
|
841 |
+
"viejos caminos"
|
842 |
+
|
843 |
+
#: controllers/SecurityCheck.php:286 controllers/SecurityCheck.php:294
|
844 |
+
#, php-format
|
845 |
+
msgid "%s is visible in source code"
|
846 |
+
msgstr "%s es visible en el código fuente"
|
847 |
+
|
848 |
+
#: controllers/SecurityCheck.php:290
|
849 |
+
#, php-format
|
850 |
+
msgid ""
|
851 |
+
"Having the admin URL visible in the source code it's really bad because "
|
852 |
+
"hackers will immediately know your secret admin path and start a Brute Force "
|
853 |
+
"attack. The custom admin path should not appear in the ajax URL. <br /><br /"
|
854 |
+
">Find solutions for %show to hide the path from source code%s."
|
855 |
+
msgstr ""
|
856 |
+
"Tener la URL del administrador visible en el código fuente es realmente malo "
|
857 |
+
"porque los hackers sabrán inmediatamente la ruta secreta del administrador y "
|
858 |
+
"comenzarán un ataque de Fuerza Bruta. La ruta de administración "
|
859 |
+
"personalizada no debería aparecer en la URL de Ajax. <br /><br />Encuentra "
|
860 |
+
"soluciones para %show para ocultar la ruta del código fuente%s."
|
861 |
+
|
862 |
+
#: controllers/SecurityCheck.php:291
|
863 |
+
#, php-format
|
864 |
+
msgid ""
|
865 |
+
"Switch on %sHide My WP > Permalinks > Hide wp-admin from ajax URL%s. Hide "
|
866 |
+
"any reference to admin path from the installed plugins."
|
867 |
+
msgstr ""
|
868 |
+
"Enciende %sHide My WP > Enlaces permanentes > Ocultar wp-admin de ajax URL"
|
869 |
+
"%s. Ocultar cualquier referencia a la ruta del administrador de los plugins "
|
870 |
+
"instalados."
|
871 |
+
|
872 |
+
#: controllers/SecurityCheck.php:298
|
873 |
+
#, php-format
|
874 |
+
msgid ""
|
875 |
+
"Having the login URL visible in the source code it's really bad because "
|
876 |
+
"hackers will immediately know your secret login path and start a Brute Force "
|
877 |
+
"attack. <br /><br />The custom login path should be kept secret and with the "
|
878 |
+
"Brute Force Protection activated for it. <br ><br />Find solutions for %show "
|
879 |
+
"to hide the path from source code%s."
|
880 |
+
msgstr ""
|
881 |
+
"Tener la URL de inicio de sesión visible en el código fuente es realmente "
|
882 |
+
"malo porque los hackers sabrán inmediatamente su ruta de inicio de sesión "
|
883 |
+
"secreta y comenzarán un ataque de Fuerza Bruta. <br /><br />La ruta de "
|
884 |
+
"acceso personalizada debe mantenerse secreta y con la protección de Fuerza "
|
885 |
+
"Bruta activada para ello. <br ><br />Encuentra soluciones para %show para "
|
886 |
+
"ocultar la ruta del código fuente%s."
|
887 |
+
|
888 |
+
#: controllers/SecurityCheck.php:299
|
889 |
+
#, php-format
|
890 |
+
msgid "%sHide the login path%s from theme menu or widget."
|
891 |
+
msgstr "%sOculta la ruta de acceso%s del menú temático o del widget."
|
892 |
+
|
893 |
+
#: controllers/SecurityCheck.php:302
|
894 |
+
msgid "/wp-login path is accessible"
|
895 |
+
msgstr "/La ruta de acceso al wp es accesible"
|
896 |
+
|
897 |
+
#: controllers/SecurityCheck.php:306
|
898 |
+
msgid ""
|
899 |
+
"If your site allows user logins, you need your login page to be easy to find "
|
900 |
+
"for your users. You also need to do other things to protect against "
|
901 |
+
"malicious login attempts. <br /><br />However, obscurity is a valid security "
|
902 |
+
"layer when used as part of a comprehensive security strategy, and if you "
|
903 |
+
"want to cut down on the number of malicious login attempts. Making your "
|
904 |
+
"login page difficult to find is one way to do that."
|
905 |
+
msgstr ""
|
906 |
+
"Si su sitio permite el ingreso de usuarios, necesita que su página de "
|
907 |
+
"ingreso sea fácil de encontrar para sus usuarios. También necesita hacer "
|
908 |
+
"otras cosas para protegerse contra intentos de inicio de sesión maliciosos. "
|
909 |
+
"<br /><br />Sin embargo, la oscuridad es una capa de seguridad válida cuando "
|
910 |
+
"se utiliza como parte de una estrategia de seguridad integral, y si desea "
|
911 |
+
"reducir el número de intentos de inicio de sesión maliciosos. Una forma de "
|
912 |
+
"hacerlo es dificultando la búsqueda de su página de inicio de sesión."
|
913 |
+
|
914 |
+
#: controllers/SecurityCheck.php:307
|
915 |
+
#, php-format
|
916 |
+
msgid ""
|
917 |
+
"Change the wp-login from %sHide My Wp > Custom login URL%s and Switch on "
|
918 |
+
"%sHide My Wp > Brute Force Protection%s"
|
919 |
+
msgstr ""
|
920 |
+
"Cambie el wp-login de %sHide My Wp > Custom login URL%s y encienda %sHide My "
|
921 |
+
"Wp > Brute Force Protection%s"
|
922 |
+
|
923 |
+
#: controllers/SecurityCheck.php:310
|
924 |
+
msgid "/wp_config.php file is writable"
|
925 |
+
msgstr "El archivo /wp_config.php es escribible"
|
926 |
+
|
927 |
+
#: controllers/SecurityCheck.php:314
|
928 |
+
msgid ""
|
929 |
+
"One of the most important files in your WordPress installation is the wp-"
|
930 |
+
"config.php file. <br />This file is located in the root directory of your "
|
931 |
+
"WordPress installation, and contains your website's base configuration "
|
932 |
+
"details, such as database connection information."
|
933 |
+
msgstr ""
|
934 |
+
"Uno de los archivos más importantes de su instalación de WordPress es el "
|
935 |
+
"archivo wp-config.php. <br />Este archivo se encuentra en el directorio raíz "
|
936 |
+
"de la instalación de WordPress y contiene los detalles de la configuración "
|
937 |
+
"básica de su sitio web, como la información de conexión a la base de datos."
|
938 |
+
|
939 |
+
#: controllers/SecurityCheck.php:315
|
940 |
+
#, php-format
|
941 |
+
msgid ""
|
942 |
+
"Try setting chmod to %s0400%s or %s0440%s and if the website works normally "
|
943 |
+
"that's the best one to use."
|
944 |
+
msgstr ""
|
945 |
+
"Intenta poner chmod en %s0400%s o %s0440%s y si el sitio web funciona "
|
946 |
+
"normalmente es el mejor para usar."
|
947 |
+
|
948 |
+
#: controllers/SecurityCheck.php:318
|
949 |
+
msgid "wp-config.php & wp-config-sample.php files are accessible "
|
950 |
+
msgstr "se puede acceder a los archivos wp-config.php y wp-config-sample.php"
|
951 |
+
|
952 |
+
#: controllers/SecurityCheck.php:322
|
953 |
+
msgid ""
|
954 |
+
"One of the most important files in your WordPress installation is the wp-"
|
955 |
+
"config.php file. <br />This file is located in the root directory of your "
|
956 |
+
"WordPress installation and contains your website's base configuration "
|
957 |
+
"details, such as database connection information."
|
958 |
+
msgstr ""
|
959 |
+
"Uno de los archivos más importantes de su instalación de WordPress es el "
|
960 |
+
"archivo wp-config.php. <br />Este archivo se encuentra en el directorio raíz "
|
961 |
+
"de la instalación de WordPress y contiene los detalles de la configuración "
|
962 |
+
"básica de su sitio web, como la información de conexión a la base de datos."
|
963 |
+
|
964 |
+
#: controllers/SecurityCheck.php:323
|
965 |
+
#, php-format
|
966 |
+
msgid ""
|
967 |
+
"Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-config.php "
|
968 |
+
"& wp-config-sample.php files"
|
969 |
+
msgstr ""
|
970 |
+
"Enciende %sHide My Wp > Hide WordPress Common Files%s para ocultar los "
|
971 |
+
"archivos wp-config.php & wp-config-sample.php"
|
972 |
+
|
973 |
+
#: controllers/SecurityCheck.php:327
|
974 |
+
msgid "readme.html file is accessible "
|
975 |
+
msgstr "el archivo readme.html es accesible"
|
976 |
+
|
977 |
+
#: controllers/SecurityCheck.php:331
|
978 |
+
msgid ""
|
979 |
+
"It's important to hide or remove the readme.html file because it contains WP "
|
980 |
+
"version details."
|
981 |
+
msgstr ""
|
982 |
+
"Es importante ocultar o eliminar el archivo readme.html porque contiene "
|
983 |
+
"detalles de la versión WP."
|
984 |
+
|
985 |
+
#: controllers/SecurityCheck.php:332
|
986 |
+
#, php-format
|
987 |
+
msgid ""
|
988 |
+
"Rename readme.html file or switch on %sHide My Wp > Hide WordPress Common "
|
989 |
+
"Files%s"
|
990 |
+
msgstr ""
|
991 |
+
"Renombra el archivo readme.html o enciende %sHide My Wp > Hide WordPress "
|
992 |
+
"Common Files%s"
|
993 |
+
|
994 |
+
#: controllers/SecurityCheck.php:336
|
995 |
+
msgid "install.php & upgrade.php files are accessible "
|
996 |
+
msgstr "se puede acceder a los archivos install.php y upgrade.php"
|
997 |
+
|
998 |
+
#: controllers/SecurityCheck.php:340
|
999 |
+
msgid ""
|
1000 |
+
"WordPress is well-known for its ease of installation. <br/>It's important to "
|
1001 |
+
"hide the wp-admin/install.php and wp-admin/upgrade.php files because there "
|
1002 |
+
"have already been a couple of security issues regarding these files."
|
1003 |
+
msgstr ""
|
1004 |
+
"WordPress es conocido por su facilidad de instalación. <br/>Es importante "
|
1005 |
+
"ocultar los archivos wp-admin/install.php y wp-admin/upgrade.php porque ya "
|
1006 |
+
"ha habido un par de problemas de seguridad con respecto a estos archivos."
|
1007 |
+
|
1008 |
+
#: controllers/SecurityCheck.php:341
|
1009 |
+
#, php-format
|
1010 |
+
msgid ""
|
1011 |
+
"Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-admin/"
|
1012 |
+
"install.php & wp-admin/upgrade.php files"
|
1013 |
+
msgstr ""
|
1014 |
+
"Activar %sHide My Wp > Hide WordPress Common Files%s para ocultar los "
|
1015 |
+
"archivos wp-admin/install.php & wp-admin/upgrade.php"
|
1016 |
+
|
1017 |
+
#: controllers/SecurityCheck.php:345
|
1018 |
+
msgid "PHP register_globals is on"
|
1019 |
+
msgstr "ej. usuario-nuevo o registrar"
|
1020 |
+
|
1021 |
+
#: controllers/SecurityCheck.php:349
|
1022 |
+
msgid ""
|
1023 |
+
"This is one of the biggest security issues you can have on your site! If "
|
1024 |
+
"your hosting company has this directive enabled by default, switch to "
|
1025 |
+
"another company immediately!"
|
1026 |
+
msgstr ""
|
1027 |
+
"¡Este es uno de los mayores problemas de seguridad que puedes tener en tu "
|
1028 |
+
"sitio! Si su compañía de alojamiento tiene esta directiva activada por "
|
1029 |
+
"defecto, ¡cambie a otra compañía inmediatamente!"
|
1030 |
+
|
1031 |
+
#: controllers/SecurityCheck.php:350
|
1032 |
+
msgid ""
|
1033 |
+
"If you have access to php.ini file, set <code>register_globals = off</code> "
|
1034 |
+
"or contact the hosting company to set it off"
|
1035 |
+
msgstr ""
|
1036 |
+
"Si tienes acceso al archivo php.ini, activa <code>register_globals = off</"
|
1037 |
+
"code> o contacta con la compañía de alojamiento para activarlo"
|
1038 |
+
|
1039 |
+
#: controllers/SecurityCheck.php:353
|
1040 |
+
msgid "PHP expose_php is on"
|
1041 |
+
msgstr "PHP expose_php está en"
|
1042 |
+
|
1043 |
+
#: controllers/SecurityCheck.php:357
|
1044 |
+
msgid ""
|
1045 |
+
"Exposing the PHP version will make the job of attacking your site much "
|
1046 |
+
"easier."
|
1047 |
+
msgstr ""
|
1048 |
+
"Exponer la versión PHP hará el trabajo de atacar su sitio mucho más fácil."
|
1049 |
+
|
1050 |
+
#: controllers/SecurityCheck.php:358
|
1051 |
+
msgid ""
|
1052 |
+
"If you have access to php.ini file, set <code>expose_php = off</code> or "
|
1053 |
+
"contact the hosting company to set it off"
|
1054 |
+
msgstr ""
|
1055 |
+
"Si tiene acceso al archivo php.ini, configure <code>expose_php = off</code> "
|
1056 |
+
"o contacte con la compañía de alojamiento para configurarlo"
|
1057 |
+
|
1058 |
+
#: controllers/SecurityCheck.php:361
|
1059 |
+
msgid "PHP safe_mode is on"
|
1060 |
+
msgstr "PHP safe_mode está activado"
|
1061 |
+
|
1062 |
+
#: controllers/SecurityCheck.php:365
|
1063 |
+
msgid ""
|
1064 |
+
"PHP safe mode was one of the attempts to solve security problems of shared "
|
1065 |
+
"web hosting servers. <br /><br />It is still being used by some web hosting "
|
1066 |
+
"providers, however, nowadays this is regarded as improper. A systematic "
|
1067 |
+
"approach proves that it’s architecturally incorrect to try solving complex "
|
1068 |
+
"security issues at the PHP level, rather than at the web server and OS "
|
1069 |
+
"levels.<br /><br />Technically, safe mode is a PHP directive that restricts "
|
1070 |
+
"the way some built-in PHP functions operate. The main problem here is "
|
1071 |
+
"inconsistency. When turned on, PHP safe mode may prevent many legitimate PHP "
|
1072 |
+
"functions from working correctly. At the same time there exists a variety of "
|
1073 |
+
"methods to override safe mode limitations using PHP functions that aren’t "
|
1074 |
+
"restricted, so if a hacker has already got in – safe mode is useless."
|
1075 |
+
msgstr ""
|
1076 |
+
"El modo seguro de PHP fue uno de los intentos de resolver los problemas de "
|
1077 |
+
"seguridad de los servidores de alojamiento web compartidos. <br /><br /"
|
1078 |
+
">Todavía es utilizado por algunos proveedores de alojamiento web, sin "
|
1079 |
+
"embargo, hoy en día esto se considera inadecuado. Un enfoque sistemático "
|
1080 |
+
"demuestra que es arquitectónicamente incorrecto tratar de resolver complejos "
|
1081 |
+
"problemas de seguridad a nivel de PHP, en lugar de a nivel de servidores web "
|
1082 |
+
"y sistemas operativos.<br /><br />Técnicamente, el modo seguro es una "
|
1083 |
+
"directiva de PHP que restringe la forma en que operan algunas funciones "
|
1084 |
+
"incorporadas de PHP. El principal problema aquí es la inconsistencia. Cuando "
|
1085 |
+
"se activa, el modo seguro de PHP puede impedir que muchas funciones "
|
1086 |
+
"legítimas de PHP funcionen correctamente. Al mismo tiempo, existe una "
|
1087 |
+
"variedad de métodos para anular las limitaciones del modo seguro usando "
|
1088 |
+
"funciones de PHP que no están restringidas, así que si un hacker ya ha "
|
1089 |
+
"entrado - el modo seguro es inútil."
|
1090 |
+
|
1091 |
+
#: controllers/SecurityCheck.php:366
|
1092 |
+
msgid ""
|
1093 |
+
"If you have access to php.ini file, set <code>safe_mode = off</code> or "
|
1094 |
+
"contact the hosting company to set it off"
|
1095 |
+
msgstr ""
|
1096 |
+
"Si tienes acceso al archivo php.ini, activa el <code>modo seguro = off</"
|
1097 |
+
"code> o contacta con la compañía de alojamiento para activarlo"
|
1098 |
+
|
1099 |
+
#: controllers/SecurityCheck.php:369
|
1100 |
+
msgid "PHP allow_url_include is on"
|
1101 |
+
msgstr "PHP allow_url_include está activado"
|
1102 |
+
|
1103 |
+
#: controllers/SecurityCheck.php:373
|
1104 |
+
msgid ""
|
1105 |
+
"Having this PHP directive enabled will leave your site exposed to cross-site "
|
1106 |
+
"attacks (XSS). <br /><br />There's absolutely no valid reason to enable this "
|
1107 |
+
"directive, and using any PHP code that requires it is very risky."
|
1108 |
+
msgstr ""
|
1109 |
+
"Tener esta directiva PHP activada dejará su sitio expuesto a ataques de "
|
1110 |
+
"sitios cruzados (XSS). <br /><br />No hay absolutamente ninguna razón válida "
|
1111 |
+
"para habilitar esta directiva, y usar cualquier código PHP que lo requiera "
|
1112 |
+
"es muy arriesgado."
|
1113 |
+
|
1114 |
+
#: controllers/SecurityCheck.php:374
|
1115 |
+
msgid ""
|
1116 |
+
"If you have access to php.ini file, set <code>allow_url_include = off</code> "
|
1117 |
+
"or contact the hosting company to set it off"
|
1118 |
+
msgstr ""
|
1119 |
+
"Si tienes acceso al archivo php.ini, establece <code>allow_url_include = "
|
1120 |
+
"off</code> o contacta con la compañía de alojamiento para activarlo"
|
1121 |
+
|
1122 |
+
#: controllers/SecurityCheck.php:377
|
1123 |
+
msgid "Plugins/Themes editor enabled"
|
1124 |
+
msgstr "Plugins/Editor de temas habilitado"
|
1125 |
+
|
1126 |
+
#: controllers/SecurityCheck.php:381
|
1127 |
+
msgid ""
|
1128 |
+
"The plugins and themes file editor is a very convenient tool because it "
|
1129 |
+
"enables you to make quick changes without the need to use FTP. <br /><br /"
|
1130 |
+
">Unfortunately, it's also a security issue because it not only shows the PHP "
|
1131 |
+
"source code, it also enables attackers to inject malicious code into your "
|
1132 |
+
"site if they manage to gain access to admin."
|
1133 |
+
msgstr ""
|
1134 |
+
"El editor de archivos de plugins y temas es una herramienta muy conveniente "
|
1135 |
+
"porque permite hacer cambios rápidos sin necesidad de usar FTP. <br /><br /"
|
1136 |
+
">Desafortunadamente, también es un problema de seguridad porque no sólo "
|
1137 |
+
"muestra el código fuente de PHP, sino que también permite a los atacantes "
|
1138 |
+
"inyectar código malicioso en su sitio si logran acceder al administrador."
|
1139 |
+
|
1140 |
+
#: controllers/SecurityCheck.php:382
|
1141 |
+
msgid ""
|
1142 |
+
"Disable DISALLOW_FILE_EDIT for live websites in wp_config.php "
|
1143 |
+
"<code>define('DISALLOW_FILE_EDIT', true);</code>"
|
1144 |
+
msgstr ""
|
1145 |
+
"Deshabilitar DISALLOW_FILE_EDIT para sitios web en vivo en wp_config.php "
|
1146 |
+
"<code>define('DISALLOW_FILE_EDIT', true);</code>"
|
1147 |
+
|
1148 |
+
#: controllers/SecurityCheck.php:386
|
1149 |
+
#, php-format
|
1150 |
+
msgid "Folder %s is browsable "
|
1151 |
+
msgstr "La carpeta %s es navegable"
|
1152 |
+
|
1153 |
+
#: controllers/SecurityCheck.php:390
|
1154 |
+
msgid ""
|
1155 |
+
"Allowing anyone to view all files in the Uploads folder with a browser will "
|
1156 |
+
"allow them to easily download all your uploaded files. It's a security and a "
|
1157 |
+
"copyright issue."
|
1158 |
+
msgstr ""
|
1159 |
+
"Permitir a cualquiera ver todos los archivos de la carpeta de subidas con un "
|
1160 |
+
"navegador les permitirá descargar fácilmente todos sus archivos subidos. Es "
|
1161 |
+
"una cuestión de seguridad y de derechos de autor."
|
1162 |
+
|
1163 |
+
#: controllers/SecurityCheck.php:391
|
1164 |
+
#, php-format
|
1165 |
+
msgid "Learn how to disable %sDirectory Browsing%s"
|
1166 |
+
msgstr "Aprende a deshabilitar la %sNavegación por el directorio%s"
|
1167 |
+
|
1168 |
+
#: controllers/SecurityCheck.php:395
|
1169 |
+
msgid "Windows Live Writer is on "
|
1170 |
+
msgstr "Windows Live Writer está encendido"
|
1171 |
+
|
1172 |
+
#: controllers/SecurityCheck.php:399
|
1173 |
+
msgid ""
|
1174 |
+
"If you're not using Windows Live Writer there's really no valid reason to "
|
1175 |
+
"have its link in the page header, because this tells the whole world you're "
|
1176 |
+
"using WordPress."
|
1177 |
+
msgstr ""
|
1178 |
+
"Si no usas Windows Live Writer no hay ninguna razón válida para tener su "
|
1179 |
+
"enlace en el encabezado de la página, porque esto le dice a todo el mundo "
|
1180 |
+
"que estás usando WordPress."
|
1181 |
+
|
1182 |
+
#: controllers/SecurityCheck.php:400
|
1183 |
+
#, php-format
|
1184 |
+
msgid "Switch on %sHide My Wp > Tweaks > Disable WLW Manifest scripts%s"
|
1185 |
+
msgstr ""
|
1186 |
+
"Enciende %sHide My Wp > Ajustes > Deshabilita los guiones del Manifiesto WLW"
|
1187 |
+
"%s"
|
1188 |
+
|
1189 |
+
#: controllers/SecurityCheck.php:404
|
1190 |
+
msgid "XML-RPC access is on"
|
1191 |
+
msgstr "Inhabilitar el acceso a la Rest API"
|
1192 |
+
|
1193 |
+
#: controllers/SecurityCheck.php:408
|
1194 |
+
msgid ""
|
1195 |
+
"WordPress XML-RPC is a specification that aims to standardize communications "
|
1196 |
+
"between different systems. It uses HTTP as the transport mechanism and XML "
|
1197 |
+
"as encoding mechanism to enable a wide range of data to be transmitted. <br /"
|
1198 |
+
"><br />The two biggest assets of the API are its extendibility and its "
|
1199 |
+
"security. XML-RPC authenticates using basic authentication. It sends the "
|
1200 |
+
"username and password with each request, which is a big no-no in security "
|
1201 |
+
"circles."
|
1202 |
+
msgstr ""
|
1203 |
+
"WordPress XML-RPC es una especificación que tiene por objeto estandarizar "
|
1204 |
+
"las comunicaciones entre los diferentes sistemas. Utiliza HTTP como "
|
1205 |
+
"mecanismo de transporte y XML como mecanismo de codificación para permitir "
|
1206 |
+
"la transmisión de una amplia gama de datos. <br /><br />Las dos mayores "
|
1207 |
+
"ventajas de la API son su extensibilidad y su seguridad. XML-RPC autentica "
|
1208 |
+
"utilizando una autenticación básica. Envía el nombre de usuario y la "
|
1209 |
+
"contraseña con cada solicitud, lo cual es un gran no-no en los círculos de "
|
1210 |
+
"seguridad."
|
1211 |
+
|
1212 |
+
#: controllers/SecurityCheck.php:409
|
1213 |
+
#, php-format
|
1214 |
+
msgid "Switch on %sHide My Wp > Tweaks > Disable XML-RPC access%s"
|
1215 |
+
msgstr "Enciende %sHide My Wp > Ajustes > Deshabilita el acceso XML-RPC%s"
|
1216 |
+
|
1217 |
+
#: controllers/SecurityCheck.php:413
|
1218 |
+
msgid "RDS is visible"
|
1219 |
+
msgstr "El RDS es visible"
|
1220 |
+
|
1221 |
+
#: controllers/SecurityCheck.php:417
|
1222 |
+
msgid ""
|
1223 |
+
"If you're not using any Really Simple Discovery services such as pingbacks, "
|
1224 |
+
"there's no need to advertise that endpoint (link) in the header. Please note "
|
1225 |
+
"that for most sites this is not a security issue because they \"want to be "
|
1226 |
+
"discovered\", but if you want to hide the fact that you're using WP, this is "
|
1227 |
+
"the way to go."
|
1228 |
+
msgstr ""
|
1229 |
+
"Si no estás usando ningún servicio de Really Simple Discovery como "
|
1230 |
+
"pingbacks, no hay necesidad de anunciar ese punto final (enlace) en el "
|
1231 |
+
"encabezado. Ten en cuenta que para la mayoría de los sitios esto no es un "
|
1232 |
+
"problema de seguridad porque \"quieren ser descubiertos\", pero si quieres "
|
1233 |
+
"ocultar el hecho de que estás usando WP, este es el camino a seguir."
|
1234 |
+
|
1235 |
+
#: controllers/SecurityCheck.php:418
|
1236 |
+
#, php-format
|
1237 |
+
msgid "Switch on %sHide My Wp > Tweaks > Hide RSD header%s"
|
1238 |
+
msgstr "Enciende %sHide My Wp > Ajustes > Ocultar encabezamiento RSD%s"
|
1239 |
+
|
1240 |
+
#: controllers/SecurityCheck.php:422
|
1241 |
+
msgid "MySql Grant All Permissions"
|
1242 |
+
msgstr "MySql otorga todos los permisos"
|
1243 |
+
|
1244 |
+
#: controllers/SecurityCheck.php:426
|
1245 |
+
msgid ""
|
1246 |
+
"If an attacker gains access to your wp-config.php file and gets the MySQL "
|
1247 |
+
"username and password, he'll be able to login to that database and do "
|
1248 |
+
"whatever that account allows. <br /><br />That's why it's important to keep "
|
1249 |
+
"the account's privileges to a bare minimum.<br /><br />For instance, if "
|
1250 |
+
"you're not installing any new plugins or updating WP, that account doesn't "
|
1251 |
+
"need the CREATE or DROP table privileges.<br /><br />For regular, day-to-day "
|
1252 |
+
"usage these are the recommended privileges: SELECT, INSERT, UPDATE and "
|
1253 |
+
"DELETE."
|
1254 |
+
msgstr ""
|
1255 |
+
"Si un atacante obtiene acceso a su archivo wp-config.php y obtiene el nombre "
|
1256 |
+
"de usuario y la contraseña de MySQL, podrá acceder a esa base de datos y "
|
1257 |
+
"hacer lo que esa cuenta le permita. <br /><br />Por eso es importante "
|
1258 |
+
"mantener los privilegios de la cuenta al mínimo.<br /><br />Por ejemplo, si "
|
1259 |
+
"no estás instalando ningún nuevo plugin o actualizando WP, esa cuenta no "
|
1260 |
+
"necesita los privilegios de la tabla CREATE o DROP.<br /><br />Para el uso "
|
1261 |
+
"diario y regular, estos son los privilegios recomendados: SELECCIONAR, "
|
1262 |
+
"INSERTAR, ACTUALIZAR y BORRAR."
|
1263 |
+
|
1264 |
+
#: controllers/SecurityCheck.php:427
|
1265 |
+
#, php-format
|
1266 |
+
msgid "To learn how to revoke permissions from PhpMyAdmin %sClick here%s"
|
1267 |
+
msgstr "Para aprender a revocar los permisos de PhpMyAdmin %sClick here%s"
|
1268 |
+
|
1269 |
+
#: controllers/SecurityCheck.php:430
|
1270 |
+
msgid "Author URL by ID access"
|
1271 |
+
msgstr "URL del autor por acceso de identificación"
|
1272 |
+
|
1273 |
+
#: controllers/SecurityCheck.php:434
|
1274 |
+
msgid ""
|
1275 |
+
"Usernames (unlike passwords) are not secret. By knowing someone's username, "
|
1276 |
+
"you can't log in to their account. You also need the password. <br /><br /"
|
1277 |
+
">However, by knowing the username, you are one step closer to logging in "
|
1278 |
+
"using the username to brute-force the password, or to gain access in a "
|
1279 |
+
"similar way. <br /><br />That's why it's advisable to keep the list of "
|
1280 |
+
"usernames private, at least to some degree. By default, by accessing siteurl."
|
1281 |
+
"com/?author={id} and looping through IDs from 1 you can get a list of "
|
1282 |
+
"usernames, because WP will redirect you to siteurl.com/author/user/ if the "
|
1283 |
+
"ID exists in the system."
|
1284 |
+
msgstr ""
|
1285 |
+
"Los nombres de usuario (a diferencia de las contraseñas) no son secretos. Al "
|
1286 |
+
"conocer el nombre de usuario de alguien, no puedes acceder a su cuenta. "
|
1287 |
+
"También necesitas la contraseña. <br /><br />Sin embargo, al conocer el "
|
1288 |
+
"nombre de usuario, estás un paso más cerca de iniciar sesión usando el "
|
1289 |
+
"nombre de usuario para forzar la contraseña, o para obtener acceso de una "
|
1290 |
+
"manera similar. <br /><br />Por eso es aconsejable mantener la lista de "
|
1291 |
+
"nombres de usuario en privado, al menos hasta cierto punto. Por defecto, al "
|
1292 |
+
"acceder a siteurl.com/?author={id} y hacer un bucle a través de las "
|
1293 |
+
"identificaciones de 1 se puede obtener una lista de nombres de usuario, "
|
1294 |
+
"porque WP te redirigirá a siteurl.com/?author={id} si la identificación "
|
1295 |
+
"existe en el sistema."
|
1296 |
+
|
1297 |
+
#: controllers/SecurityCheck.php:435
|
1298 |
+
#, php-format
|
1299 |
+
msgid "Switch on %sHide My Wp > Hide Author ID URL%s"
|
1300 |
+
msgstr "Enciende %sHide My Wp > Ocultar ID de Autor URL%s"
|
1301 |
+
|
1302 |
+
#: controllers/SecurityCheck.php:439
|
1303 |
+
msgid "Default WordPress Tagline"
|
1304 |
+
msgstr "Línea de texto predeterminada de WordPress"
|
1305 |
+
|
1306 |
+
#: controllers/SecurityCheck.php:443
|
1307 |
+
msgid ""
|
1308 |
+
"The WordPress site tagline is a short phrase located under the site title, "
|
1309 |
+
"similar to a subtitle or advertising slogan. The goal of a tagline is to "
|
1310 |
+
"convey the essence of your site to visitors. <br /><br />If you don't change "
|
1311 |
+
"the default tagline it will be very easy to detect that your website was "
|
1312 |
+
"actually built with WordPress"
|
1313 |
+
msgstr ""
|
1314 |
+
"El eslogan del sitio WordPress es una frase corta ubicada bajo el título del "
|
1315 |
+
"sitio, similar a un subtítulo o un eslogan publicitario. El objetivo de un "
|
1316 |
+
"eslogan es transmitir la esencia de su sitio a los visitantes. <br /><br /"
|
1317 |
+
">Si no cambias el eslogan predeterminado, será muy fácil detectar que tu "
|
1318 |
+
"sitio web fue realmente construido con WordPress"
|
1319 |
+
|
1320 |
+
#: controllers/SecurityCheck.php:444
|
1321 |
+
#, php-format
|
1322 |
+
msgid "Change the Tagline in %s > %s"
|
1323 |
+
msgstr "Cambie la línea de la etiqueta en %s > %s"
|
1324 |
+
|
1325 |
+
#: controllers/SecurityCheck.php:444
|
1326 |
+
msgid "Tagline"
|
1327 |
+
msgstr "Lema"
|
1328 |
+
|
1329 |
+
#: controllers/SecurityCheck.php:521 controllers/SecurityCheck.php:549
|
1330 |
+
#: controllers/SecurityCheck.php:574
|
1331 |
+
msgid "Saved! You can run the test again."
|
1332 |
+
msgstr "¡Salvado! Puedes hacer la prueba de nuevo."
|
1333 |
+
|
1334 |
+
#: controllers/SecurityCheck.php:526 controllers/SecurityCheck.php:553
|
1335 |
+
msgid "Could not fix it. You need to change it yourself."
|
1336 |
+
msgstr "No pude arreglarlo. Necesitas cambiarlo tú mismo."
|
1337 |
+
|
1338 |
+
#: controllers/SecurityCheck.php:567
|
1339 |
+
msgid "Saved! This task will be ignored on future tests."
|
1340 |
+
msgstr "¡Salvado! Esta tarea será ignorada en futuras pruebas."
|
1341 |
+
|
1342 |
+
#: controllers/SecurityCheck.php:621 controllers/SecurityCheck.php:639
|
1343 |
+
#: controllers/SecurityCheck.php:653 controllers/SecurityCheck.php:666
|
1344 |
+
#: controllers/SecurityCheck.php:678 controllers/SecurityCheck.php:923
|
1345 |
+
#: controllers/SecurityCheck.php:1005 controllers/SecurityCheck.php:1021
|
1346 |
+
#: controllers/SecurityCheck.php:1029 controllers/SecurityCheck.php:1105
|
1347 |
+
#: controllers/SecurityCheck.php:1118 controllers/SecurityCheck.php:1132
|
1348 |
+
#: controllers/SecurityCheck.php:1145 controllers/SecurityCheck.php:1157
|
1349 |
+
#: controllers/SecurityCheck.php:1162 controllers/SecurityCheck.php:1187
|
1350 |
+
#: controllers/SecurityCheck.php:1212 controllers/SecurityCheck.php:1226
|
1351 |
+
#: controllers/SecurityCheck.php:1240 controllers/SecurityCheck.php:1257
|
1352 |
+
#: controllers/SecurityCheck.php:1289 controllers/SecurityCheck.php:1311
|
1353 |
+
#: controllers/SecurityCheck.php:1333 controllers/SecurityCheck.php:1355
|
1354 |
+
#: controllers/SecurityCheck.php:1375 controllers/SecurityCheck.php:1397
|
1355 |
+
#: controllers/SecurityCheck.php:1411 controllers/SecurityCheck.php:1420
|
1356 |
+
msgid "Yes"
|
1357 |
+
msgstr "Sí"
|
1358 |
+
|
1359 |
+
#: controllers/SecurityCheck.php:621 controllers/SecurityCheck.php:639
|
1360 |
+
#: controllers/SecurityCheck.php:653 controllers/SecurityCheck.php:666
|
1361 |
+
#: controllers/SecurityCheck.php:678 controllers/SecurityCheck.php:1005
|
1362 |
+
#: controllers/SecurityCheck.php:1021 controllers/SecurityCheck.php:1029
|
1363 |
+
#: controllers/SecurityCheck.php:1105 controllers/SecurityCheck.php:1118
|
1364 |
+
#: controllers/SecurityCheck.php:1132 controllers/SecurityCheck.php:1145
|
1365 |
+
#: controllers/SecurityCheck.php:1157 controllers/SecurityCheck.php:1182
|
1366 |
+
#: controllers/SecurityCheck.php:1192 controllers/SecurityCheck.php:1212
|
1367 |
+
#: controllers/SecurityCheck.php:1226 controllers/SecurityCheck.php:1240
|
1368 |
+
#: controllers/SecurityCheck.php:1289 controllers/SecurityCheck.php:1311
|
1369 |
+
#: controllers/SecurityCheck.php:1333 controllers/SecurityCheck.php:1355
|
1370 |
+
#: controllers/SecurityCheck.php:1375 controllers/SecurityCheck.php:1397
|
1371 |
+
#: controllers/SecurityCheck.php:1411 controllers/SecurityCheck.php:1420
|
1372 |
+
msgid "No"
|
1373 |
+
msgstr "No"
|
1374 |
+
|
1375 |
+
#: controllers/SecurityCheck.php:747
|
1376 |
+
#, php-format
|
1377 |
+
msgid "%s plugin are outdated: %s"
|
1378 |
+
msgstr "%s Los plugins están obsoletos: %s"
|
1379 |
+
|
1380 |
+
#: controllers/SecurityCheck.php:747 controllers/SecurityCheck.php:823
|
1381 |
+
msgid "All plugins are up to date"
|
1382 |
+
msgstr "Todos los plugins están actualizados"
|
1383 |
+
|
1384 |
+
#: controllers/SecurityCheck.php:780
|
1385 |
+
#, php-format
|
1386 |
+
msgid "%s theme(s) are outdated: %s"
|
1387 |
+
msgstr "%s Los temas están obsoletos: %s"
|
1388 |
+
|
1389 |
+
#: controllers/SecurityCheck.php:780
|
1390 |
+
msgid "Themes are up to date"
|
1391 |
+
msgstr "Los temas están al día"
|
1392 |
+
|
1393 |
+
#: controllers/SecurityCheck.php:859
|
1394 |
+
msgid "All plugins are compatible"
|
1395 |
+
msgstr "Vaciar IPs"
|
1396 |
+
|
1397 |
+
#: controllers/SecurityCheck.php:944
|
1398 |
+
#, php-format
|
1399 |
+
msgid "%s days since last update"
|
1400 |
+
msgstr "%s días desde la última actualización"
|
1401 |
+
|
1402 |
+
#: controllers/SecurityCheck.php:944
|
1403 |
+
msgid "Updated"
|
1404 |
+
msgstr "Actualizado"
|
1405 |
+
|
1406 |
+
#: controllers/SecurityCheck.php:961
|
1407 |
+
msgid "Empty"
|
1408 |
+
msgstr "Vacío"
|
1409 |
+
|
1410 |
+
#: controllers/SecurityCheck.php:966
|
1411 |
+
msgid "only "
|
1412 |
+
msgstr "solamente"
|
1413 |
+
|
1414 |
+
#: controllers/SecurityCheck.php:971
|
1415 |
+
msgid "too simple"
|
1416 |
+
msgstr "demasiado simple"
|
1417 |
+
|
1418 |
+
#: controllers/SecurityCheck.php:976
|
1419 |
+
msgid "Good"
|
1420 |
+
msgstr "Bueno"
|
1421 |
+
|
1422 |
+
#: controllers/SecurityCheck.php:1023
|
1423 |
+
msgid ""
|
1424 |
+
"Change the wp-config.php file permission to Read-Only using File Manager."
|
1425 |
+
msgstr ""
|
1426 |
+
"Cambie el permiso del archivo wp-config.php a sólo lectura usando el "
|
1427 |
+
"Administrador de Archivos."
|
1428 |
+
|
1429 |
+
#: controllers/SecurityCheck.php:1265
|
1430 |
+
msgid "no"
|
1431 |
+
msgstr "no"
|
1432 |
+
|
1433 |
+
#: controllers/SecurityCheck.php:1417
|
1434 |
+
msgid "Just another WordPress site"
|
1435 |
+
msgstr "Otro sitio de AlmirallMed"
|
1436 |
+
|
1437 |
+
#: controllers/Settings.php:45
|
1438 |
+
#, php-format
|
1439 |
+
msgid ""
|
1440 |
+
"NGINX detected. In case you didn't add the code in the NGINX config already, "
|
1441 |
+
"please add the following line. %s"
|
1442 |
+
msgstr ""
|
1443 |
+
"NGINX detectado. En caso de que no haya añadido el código en la "
|
1444 |
+
"configuración del NGINX ya, por favor añada la siguiente línea. %s"
|
1445 |
+
|
1446 |
+
#: controllers/Settings.php:45 models/Rewrite.php:684
|
1447 |
+
msgid "Learn How To Add the Code"
|
1448 |
+
msgstr "Aprende a añadir el código"
|
1449 |
+
|
1450 |
+
#: controllers/Settings.php:45
|
1451 |
+
msgid "Don't forget to reload the Nginx service."
|
1452 |
+
msgstr "No olvides reiniciar el servicio de Nginx"
|
1453 |
+
|
1454 |
+
#: controllers/Settings.php:45
|
1455 |
+
msgid "Learn How"
|
1456 |
+
msgstr "Aprende cómo"
|
1457 |
+
|
1458 |
+
#: controllers/Settings.php:54 view/Backup.php:16
|
1459 |
+
msgid "Restore Settings"
|
1460 |
+
msgstr "Restaurar Configuración"
|
1461 |
+
|
1462 |
+
#: controllers/Settings.php:57
|
1463 |
+
msgid "You want to restore the last saved settings? "
|
1464 |
+
msgstr "¿Desea restaurar la última configuración guardada?"
|
1465 |
+
|
1466 |
+
#: controllers/Settings.php:75
|
1467 |
+
#, php-format
|
1468 |
+
msgid ""
|
1469 |
+
"%sLimited Time Offer%s: Get %s65%% OFF%s today on Hide My WP Ghost 5 "
|
1470 |
+
"Websites License. %sHurry Up!%s"
|
1471 |
+
msgstr ""
|
1472 |
+
"%s Oferta de tiempo limitado%s: Obtenga hoy %s65%% de descuento%s en la "
|
1473 |
+
"licencia de los sitios web de Hide My WP Ghost 5. %sHurry Up!%s"
|
1474 |
+
|
1475 |
+
#: controllers/Settings.php:122
|
1476 |
+
#, php-format
|
1477 |
+
msgid ""
|
1478 |
+
"New Plugin/Theme detected! You need to save the Hide My WP Setting again to "
|
1479 |
+
"include them all! %sClick here%s"
|
1480 |
+
msgstr ""
|
1481 |
+
"¡Nuevo plugin/tema detectado! ¡Necesitas guardar la configuración de Hide My "
|
1482 |
+
"WP de nuevo para incluirlos a todos! %s Haz clic aquí %s"
|
1483 |
+
|
1484 |
+
#: controllers/Settings.php:135
|
1485 |
+
#, php-format
|
1486 |
+
msgid ""
|
1487 |
+
"New Plugin/Theme detected! You need to save the Hide My WP Setting again to "
|
1488 |
+
"include them all! %sSave Settings%s"
|
1489 |
+
msgstr ""
|
1490 |
+
"¡Nuevo plugin/tema detectado! ¡Necesitas guardar la configuración de Hide My "
|
1491 |
+
"WP de nuevo para incluirlos a todos! %sGuardar ajustes%s"
|
1492 |
+
|
1493 |
+
#: controllers/Settings.php:151
|
1494 |
+
#, php-format
|
1495 |
+
msgid ""
|
1496 |
+
"To activate the new %sHide My WP %s %s settings you need to confirm and re-"
|
1497 |
+
"login!"
|
1498 |
+
msgstr ""
|
1499 |
+
"Para activar la nueva configuración de %sHide My WP %s %s necesitas "
|
1500 |
+
"confirmar y volver a iniciar sesión!"
|
1501 |
+
|
1502 |
+
#: controllers/Settings.php:159
|
1503 |
+
msgid "Yes, I'm ready to re-login"
|
1504 |
+
msgstr "Sí, estoy listo para volver a entrar"
|
1505 |
+
|
1506 |
+
#: controllers/Settings.php:166 view/FrontendCheck.php:36
|
1507 |
+
msgid "No, abort"
|
1508 |
+
msgstr "No, cancelar"
|
1509 |
+
|
1510 |
+
#: controllers/Settings.php:207
|
1511 |
+
msgid "My Account"
|
1512 |
+
msgstr "Mi cuenta"
|
1513 |
+
|
1514 |
+
#: controllers/Settings.php:336
|
1515 |
+
msgid ""
|
1516 |
+
"Error: You entered the same text twice in the Text Mapping. We removed the "
|
1517 |
+
"duplicates to prevent any redirect errors."
|
1518 |
+
msgstr ""
|
1519 |
+
"Error: Has introducido el mismo texto dos veces en el mapa de texto. "
|
1520 |
+
"Eliminamos los duplicados para evitar cualquier error de redireccionamiento."
|
1521 |
+
|
1522 |
+
#: controllers/Settings.php:479
|
1523 |
+
msgid ""
|
1524 |
+
"ERROR! Please make sure you use a valid token to connect the plugin with "
|
1525 |
+
"WPPlugins"
|
1526 |
+
msgstr ""
|
1527 |
+
"¡ERROR! Por favor, asegúrate de usar un token válido para conectar el plugin "
|
1528 |
+
"con WPPlugins"
|
1529 |
+
|
1530 |
+
#: controllers/Settings.php:484
|
1531 |
+
msgid ""
|
1532 |
+
"ERROR! Please make sure you use an email address to connect the plugin with "
|
1533 |
+
"WPPlugins"
|
1534 |
+
msgstr ""
|
1535 |
+
"¡ERROR! Por favor, asegúrate de usar una dirección de correo electrónico "
|
1536 |
+
"para conectar el plugin con WPPlugins"
|
1537 |
+
|
1538 |
+
#: controllers/Settings.php:533
|
1539 |
+
msgid "Great! The backup is restored."
|
1540 |
+
msgstr "La copia de seguridad se ha restaurado."
|
1541 |
+
|
1542 |
+
#: controllers/Settings.php:547 controllers/Settings.php:550
|
1543 |
+
msgid "Error! The backup is not valid."
|
1544 |
+
msgstr "¡Error! Copia de seguridad inválida."
|
1545 |
+
|
1546 |
+
#: controllers/Settings.php:553
|
1547 |
+
msgid "Error! You have to enter a previous saved backup file."
|
1548 |
+
msgstr ""
|
1549 |
+
"¡Error! Tiene que seleccionar una copia de seguridad guardada previamente."
|
1550 |
+
|
1551 |
+
#: controllers/Settings.php:566
|
1552 |
+
msgid "Hide My Wp > Question"
|
1553 |
+
msgstr "Hide My WP > Preguntas"
|
1554 |
+
|
1555 |
+
#: models/Brute.php:427
|
1556 |
+
#, php-format
|
1557 |
+
msgid "%sYou failed to correctly answer the math problem.%s Please try again"
|
1558 |
+
msgstr ""
|
1559 |
+
"%sNo respondiste correctamente al problema de matemáticas. %s Por favor, "
|
1560 |
+
"inténtalo de nuevo"
|
1561 |
+
|
1562 |
+
#: models/Brute.php:435
|
1563 |
+
#, php-format
|
1564 |
+
msgid ""
|
1565 |
+
"%sERROR:%s Email or Password is incorrect. %s %d attempts left before lockout"
|
1566 |
+
msgstr ""
|
1567 |
+
"%sERROR:%s El correo electrónico o la contraseña son incorrectos. %s %d "
|
1568 |
+
"intentos restantes antes del bloqueo"
|
1569 |
+
|
1570 |
+
#: models/Brute.php:459
|
1571 |
+
msgid "Prove your humanity: "
|
1572 |
+
msgstr "Responda a la pregunta:"
|
1573 |
+
|
1574 |
+
#: models/Brute.php:472
|
1575 |
+
msgid "Login Blocked by Hide My WordPress"
|
1576 |
+
msgstr "Inicio de sesión bloqueado por Ocultar mi WordPress"
|
1577 |
+
|
1578 |
+
#: models/Compatibility.php:211
|
1579 |
+
msgid ""
|
1580 |
+
"CDN Enabled detected. Please include the new wp-content and wp-includes "
|
1581 |
+
"paths in CDN Enabler Settings"
|
1582 |
+
msgstr ""
|
1583 |
+
"CDN Enabled detectado. Por favor, incluya en CDN Enabler Config las nuevas "
|
1584 |
+
"rutas de wp-content y wp-includes"
|
1585 |
+
|
1586 |
+
#: models/Compatibility.php:219
|
1587 |
+
#, php-format
|
1588 |
+
msgid ""
|
1589 |
+
"CDN Enabler detected! Learn how to configure it with Hide My WP %sClick here"
|
1590 |
+
"%s"
|
1591 |
+
msgstr ""
|
1592 |
+
"¡Habilitador CDN detectado! Aprende a configurarlo con Hide My WP %sClick "
|
1593 |
+
"here%s"
|
1594 |
+
|
1595 |
+
#: models/Compatibility.php:231
|
1596 |
+
#, php-format
|
1597 |
+
msgid ""
|
1598 |
+
"WP Super Cache CDN detected. Please include %s and %s paths in WP Super "
|
1599 |
+
"Cache > CDN > Include directories"
|
1600 |
+
msgstr ""
|
1601 |
+
"WP Super Cache CDN detectado. Por favor, incluye las rutas %s y %s en WP "
|
1602 |
+
"Super Cache > CDN > Incluir directorios"
|
1603 |
+
|
1604 |
+
#: models/Compatibility.php:238
|
1605 |
+
#, php-format
|
1606 |
+
msgid ""
|
1607 |
+
"Hide My WP does not work without mode_rewrite. Please activate the rewrite "
|
1608 |
+
"module in Apache. %sMore details%s"
|
1609 |
+
msgstr ""
|
1610 |
+
"Hide My WP no funciona sin mode_rewrite. Por favor, activa el módulo de "
|
1611 |
+
"reescritura en Apache. %sMás detalles%s"
|
1612 |
+
|
1613 |
+
#: models/Compatibility.php:243
|
1614 |
+
#, php-format
|
1615 |
+
msgid ""
|
1616 |
+
"Hide My WP does not work with %s Permalinks. Change it to %s or other type "
|
1617 |
+
"in Settings > Permalinks in order to hide it"
|
1618 |
+
msgstr ""
|
1619 |
+
"Hide My WP no funciona con %s Permalinks. Cámbialo a %s o a otro tipo en "
|
1620 |
+
"Configuración > Enlaces permanentes para ocultarlo"
|
1621 |
+
|
1622 |
+
#: models/Compatibility.php:243
|
1623 |
+
msgid "Plain"
|
1624 |
+
msgstr "Plano"
|
1625 |
+
|
1626 |
+
#: models/Compatibility.php:243
|
1627 |
+
msgid "Post Name"
|
1628 |
+
msgstr "Entrada"
|
1629 |
+
|
1630 |
+
#: models/Compatibility.php:248
|
1631 |
+
#, php-format
|
1632 |
+
msgid ""
|
1633 |
+
"You need to activate the URL Rewrite for IIS to be able to change the "
|
1634 |
+
"permalink structure to friendly URL (without index.php). %sMore details%s"
|
1635 |
+
msgstr ""
|
1636 |
+
"Es necesario activar URL Rewrite de IIS para poder cambiar la estructura de "
|
1637 |
+
"enlace permanente a URL amigables (sin index.php). %sMás detalles%s"
|
1638 |
+
|
1639 |
+
#: models/Compatibility.php:250
|
1640 |
+
msgid ""
|
1641 |
+
"You need to set the permalink structure to friendly URL (without index.php)."
|
1642 |
+
msgstr ""
|
1643 |
+
"Es necesario establecer la estructura de enlace permanente a URL amigables "
|
1644 |
+
"(sin index.php)."
|
1645 |
+
|
1646 |
+
#: models/Compatibility.php:255
|
1647 |
+
msgid ""
|
1648 |
+
"The constant ADMIN_COOKIE_PATH is defined in wp-config.php by another "
|
1649 |
+
"plugin. Hide My WP will not work unless you remove the line "
|
1650 |
+
"define('ADMIN_COOKIE_PATH', ...);"
|
1651 |
+
msgstr ""
|
1652 |
+
"La constante ADMIN_COOKIE_PATH está definida en wp-config.php por otro "
|
1653 |
+
"plugin. Hide My WP no funcionará a menos que elimine la línea "
|
1654 |
+
"define('ADMIN_COOKIE_PATH', ...);"
|
1655 |
+
|
1656 |
+
#: models/Compatibility.php:261
|
1657 |
+
#, php-format
|
1658 |
+
msgid ""
|
1659 |
+
"Inmotion detected. %sPlease read how to make the plugin compatible with "
|
1660 |
+
"Inmotion Nginx Cache%s"
|
1661 |
+
msgstr ""
|
1662 |
+
"Inmoción detectada. %sPor favor, lee cómo hacer el plugin compatible con "
|
1663 |
+
"Inmotion Nginx Cache%s"
|
1664 |
+
|
1665 |
+
#: models/Compatibility.php:273
|
1666 |
+
msgid ""
|
1667 |
+
"Hide My WP rules are not saved in the config file and this may affect the "
|
1668 |
+
"website loading speed."
|
1669 |
+
msgstr ""
|
1670 |
+
"Las reglas de Hide My WP no se guardan en el archivo de configuración y esto "
|
1671 |
+
"puede afectar a la velocidad de carga del sitio web."
|
1672 |
+
|
1673 |
+
#: models/Compatibility.php:283
|
1674 |
+
#, php-format
|
1675 |
+
msgid ""
|
1676 |
+
"Godaddy detected! To avoid CSS errors, make sure you switch off the CDN from "
|
1677 |
+
"%s"
|
1678 |
+
msgstr ""
|
1679 |
+
"¡Godaddy detectado! Para evitar errores de CSS, asegúrate de apagar el CDN "
|
1680 |
+
"de %s"
|
1681 |
+
|
1682 |
+
#: models/Rewrite.php:643
|
1683 |
+
#, php-format
|
1684 |
+
msgid ""
|
1685 |
+
"IIS detected. You need to update your %s file by adding the following lines "
|
1686 |
+
"after <rules> tag: %s"
|
1687 |
+
msgstr ""
|
1688 |
+
"IIS detectado. Necesitas actualizar tu archivo %s añadiendo las siguientes "
|
1689 |
+
"líneas después de la etiqueta %s"
|
1690 |
+
|
1691 |
+
#: models/Rewrite.php:664 models/Rewrite.php:732
|
1692 |
+
#, php-format
|
1693 |
+
msgid ""
|
1694 |
+
"Config file is not writable. You need to update your %s file by adding the "
|
1695 |
+
"following lines at the beginning of the file: %s"
|
1696 |
+
msgstr ""
|
1697 |
+
"El archivo de configuración no se puede escribir. Necesitas actualizar tu "
|
1698 |
+
"archivo %s añadiendo las siguientes líneas al principio del archivo: %s"
|
1699 |
+
|
1700 |
+
#: models/Rewrite.php:684
|
1701 |
+
#, php-format
|
1702 |
+
msgid ""
|
1703 |
+
"WpEngine detected. Add the redirects in the WpEngine Redirect rules panel %s"
|
1704 |
+
msgstr ""
|
1705 |
+
"Motor WpEngine detectado. Añade los redireccionamientos en el panel de "
|
1706 |
+
"reglas de WpEngine Redirect %s"
|
1707 |
+
|
1708 |
+
#: models/Rewrite.php:764
|
1709 |
+
#, php-format
|
1710 |
+
msgid ""
|
1711 |
+
"Config file is not writable. You have to added it manually at the beginning "
|
1712 |
+
"of the %s file: %s"
|
1713 |
+
msgstr ""
|
1714 |
+
"El archivo de configuración no se puede escribir. Tienes que añadirlo "
|
1715 |
+
"manualmente al principio del archivo %s: %s"
|
1716 |
+
|
1717 |
+
#: models/Rewrite.php:2034
|
1718 |
+
msgid ""
|
1719 |
+
"There has been a critical error on your website. Please check your site "
|
1720 |
+
"admin email inbox for instructions."
|
1721 |
+
msgstr ""
|
1722 |
+
"Ha habido un error crítico en su sitio web. Por favor, compruebe la bandeja "
|
1723 |
+
"de entrada del correo electrónico del administrador de su sitio para obtener "
|
1724 |
+
"instrucciones."
|
1725 |
+
|
1726 |
+
#: models/Rewrite.php:2036
|
1727 |
+
msgid "There has been a critical error on your website."
|
1728 |
+
msgstr "Ha habido un error crítico en su sitio web."
|
1729 |
+
|
1730 |
+
#: models/Settings.php:12
|
1731 |
+
msgid "Permalinks"
|
1732 |
+
msgstr "Permalinks"
|
1733 |
+
|
1734 |
+
#: models/Settings.php:13
|
1735 |
+
msgid "Change common paths"
|
1736 |
+
msgstr "Cambiar rutas comunes"
|
1737 |
+
|
1738 |
+
#: models/Settings.php:18
|
1739 |
+
msgid "Text and URL mapping"
|
1740 |
+
msgstr "Mapeo de texto y URL"
|
1741 |
+
|
1742 |
+
#: models/Settings.php:23
|
1743 |
+
msgid "Add WordPress Tweaks"
|
1744 |
+
msgstr "Agregar WordPress Tweaks"
|
1745 |
+
|
1746 |
+
#: models/Settings.php:27
|
1747 |
+
msgid "Brute Force"
|
1748 |
+
msgstr "Fuerza bruta"
|
1749 |
+
|
1750 |
+
#: models/Settings.php:28
|
1751 |
+
msgid "Add Login Protection"
|
1752 |
+
msgstr "Protección contra ataque por fuerza bruta"
|
1753 |
+
|
1754 |
+
#: models/Settings.php:33
|
1755 |
+
msgid "Website Events Log"
|
1756 |
+
msgstr "Registro de eventos del sitio web"
|
1757 |
+
|
1758 |
+
#: models/Settings.php:38
|
1759 |
+
msgid "Test Your Website"
|
1760 |
+
msgstr "Pruebe su sitio web"
|
1761 |
+
|
1762 |
+
#: models/Settings.php:43 view/Plugins.php:29
|
1763 |
+
msgid "Plugins"
|
1764 |
+
msgstr "Plugins"
|
1765 |
+
|
1766 |
+
#: models/Settings.php:49
|
1767 |
+
msgid "Save your settings"
|
1768 |
+
msgstr "Guardar tus ajustes"
|
1769 |
+
|
1770 |
+
#: models/Settings.php:67
|
1771 |
+
msgid "WP Super Cache"
|
1772 |
+
msgstr "WP Super cache"
|
1773 |
+
|
1774 |
+
#: models/Settings.php:69
|
1775 |
+
msgid ""
|
1776 |
+
"A very fast caching engine for WordPress that produces static html files. "
|
1777 |
+
"Works well with Minify HTML plugin."
|
1778 |
+
msgstr ""
|
1779 |
+
"Un motor de caché muy rápido para WordPress que produce archivos html "
|
1780 |
+
"estáticos. Funciona bien con el plugin Minify HTML."
|
1781 |
+
|
1782 |
+
#: models/Settings.php:74
|
1783 |
+
msgid "Autoptimize"
|
1784 |
+
msgstr "Autoptimizar"
|
1785 |
+
|
1786 |
+
#: models/Settings.php:76
|
1787 |
+
msgid ""
|
1788 |
+
"Autoptimize speeds up your website by optimizing JS, CSS and HTML, async-ing "
|
1789 |
+
"JavaScript, removing emoji cruft, optimizing Google Fonts and more."
|
1790 |
+
msgstr ""
|
1791 |
+
"Autoptimize acelera tu sitio web optimizando JS, CSS y HTML, sincronizando "
|
1792 |
+
"JavaScript, eliminando los emoji cruft, optimizando las fuentes de Google y "
|
1793 |
+
"más."
|
1794 |
+
|
1795 |
+
#: models/Settings.php:81
|
1796 |
+
msgid "Minify HTML"
|
1797 |
+
msgstr "Minify HTML"
|
1798 |
+
|
1799 |
+
#: models/Settings.php:83
|
1800 |
+
msgid ""
|
1801 |
+
"Minify HTML output for clean looking markup and faster downloading. Minify "
|
1802 |
+
"HTML also has optional specialized minification for JS and internal CSS."
|
1803 |
+
msgstr ""
|
1804 |
+
"Minimizar la salida HTML para un marcado de aspecto limpio y una descarga "
|
1805 |
+
"más rápida. Minify HTML también tiene una minificación especializada "
|
1806 |
+
"opcional para JS y CSS interno."
|
1807 |
+
|
1808 |
+
#: models/Settings.php:88
|
1809 |
+
msgid "iThemes Security"
|
1810 |
+
msgstr "iTemas Seguridad"
|
1811 |
+
|
1812 |
+
#: models/Settings.php:90
|
1813 |
+
msgid ""
|
1814 |
+
"iThemes Security gives you over 30+ ways to secure and protect your WP site. "
|
1815 |
+
"WP sites can be an easy target for attacks because of plugin "
|
1816 |
+
"vulnerabilities, weak passwords and obsolete software."
|
1817 |
+
msgstr ""
|
1818 |
+
"iThemes Security te ofrece más de 30 formas de asegurar y proteger tu sitio "
|
1819 |
+
"WP. Los sitios de WP pueden ser un blanco fácil para los ataques debido a "
|
1820 |
+
"las vulnerabilidades de los plugins, las contraseñas débiles y el software "
|
1821 |
+
"obsoleto."
|
1822 |
+
|
1823 |
+
#: models/Settings.php:95
|
1824 |
+
msgid "Sucuri Security"
|
1825 |
+
msgstr "Seguridad de Sucuri"
|
1826 |
+
|
1827 |
+
#: models/Settings.php:97
|
1828 |
+
msgid ""
|
1829 |
+
"The Sucuri WordPress Security plugin is a security toolset for security "
|
1830 |
+
"integrity monitoring, malware detection and security hardening."
|
1831 |
+
msgstr ""
|
1832 |
+
"El plugin de seguridad de Sucuri WordPress es un conjunto de herramientas de "
|
1833 |
+
"seguridad para el control de la integridad de la seguridad, la detección de "
|
1834 |
+
"malware y el endurecimiento de la seguridad."
|
1835 |
+
|
1836 |
+
#: models/Settings.php:102
|
1837 |
+
msgid "Back Up WordPress"
|
1838 |
+
msgstr "ej. adm, backend"
|
1839 |
+
|
1840 |
+
#: models/Settings.php:104
|
1841 |
+
msgid ""
|
1842 |
+
"Simple automated backups of your WordPress-powered website. Back Up "
|
1843 |
+
"WordPress will back up your entire site including your database and all your "
|
1844 |
+
"files on a schedule that suits you."
|
1845 |
+
msgstr ""
|
1846 |
+
"Simples copias de seguridad automatizadas de tu sitio web potenciado por "
|
1847 |
+
"WordPress. Copia de seguridad WordPress hará una copia de seguridad de todo "
|
1848 |
+
"tu sitio, incluyendo tu base de datos y todos tus archivos en un horario que "
|
1849 |
+
"te convenga."
|
1850 |
+
|
1851 |
+
#: models/Settings.php:109
|
1852 |
+
msgid "SEO SQUIRRLY"
|
1853 |
+
msgstr "SEO SQUIRRLY"
|
1854 |
+
|
1855 |
+
#: models/Settings.php:111
|
1856 |
+
msgid ""
|
1857 |
+
"Welcome to Assisted WordPress SEO. Say Good-Bye to Search Engine "
|
1858 |
+
"Frustrations. Squirrly assists you in getting Excellent SEO for Humans and "
|
1859 |
+
"Search Engines."
|
1860 |
+
msgstr ""
|
1861 |
+
"Bienvenido a Assisted WordPress SEO. Despídase de las frustraciones de los "
|
1862 |
+
"motores de búsqueda. Squirrly te ayuda a conseguir un excelente SEO para "
|
1863 |
+
"humanos y motores de búsqueda."
|
1864 |
+
|
1865 |
+
#: models/Settings.php:116
|
1866 |
+
msgid "Elementor Page Builder"
|
1867 |
+
msgstr "Elementor Page Builder"
|
1868 |
+
|
1869 |
+
#: models/Settings.php:118
|
1870 |
+
msgid ""
|
1871 |
+
"The most advanced frontend drag & drop page builder. Create high-end, pixel "
|
1872 |
+
"perfect websites at record speeds. Any theme, any page, any design."
|
1873 |
+
msgstr ""
|
1874 |
+
"El creador de páginas de arrastrar y soltar más avanzado de frontend. Cree "
|
1875 |
+
"sitios web de alta gama y píxeles perfectos a velocidades récord. Cualquier "
|
1876 |
+
"tema, cualquier página, cualquier diseño."
|
1877 |
+
|
1878 |
+
#: models/Settings.php:123
|
1879 |
+
msgid "Weglot Translate"
|
1880 |
+
msgstr "Weglot Traducir"
|
1881 |
+
|
1882 |
+
#: models/Settings.php:125
|
1883 |
+
msgid ""
|
1884 |
+
"Translate your website into multiple languages without any code. Weglot "
|
1885 |
+
"Translate is fully SEO compatible and follows Google's best practices."
|
1886 |
+
msgstr ""
|
1887 |
+
"Traduce tu sitio web a varios idiomas sin ningún código. Weglot Translate es "
|
1888 |
+
"totalmente compatible con el SEO y sigue las mejores prácticas de Google."
|
1889 |
+
|
1890 |
+
#: models/Settings.php:130
|
1891 |
+
msgid "AddToAny Share Btn"
|
1892 |
+
msgstr "AddToAny Share Btn"
|
1893 |
+
|
1894 |
+
#: models/Settings.php:132
|
1895 |
+
msgid ""
|
1896 |
+
"Share buttons for WordPress including the AddToAny sharing button, Facebook, "
|
1897 |
+
"Twitter, Google+, Pinterest, WhatsApp, many more, and follow icons too."
|
1898 |
+
msgstr ""
|
1899 |
+
"Botones de compartir para WordPress, incluyendo el botón de compartir "
|
1900 |
+
"AddToAny, Facebook, Twitter, Google+, Pinterest, WhatsApp, muchos más, y "
|
1901 |
+
"también iconos de seguimiento."
|
1902 |
+
|
1903 |
+
#: models/Settings.php:146
|
1904 |
+
msgid ""
|
1905 |
+
"You can't set both ADMIN and LOGIN with the same name. Please use different "
|
1906 |
+
"names"
|
1907 |
+
msgstr ""
|
1908 |
+
"No se pueden definir ADMIN y LOGIN con el mismo nombre. Utilice diferentes "
|
1909 |
+
"nombres"
|
1910 |
+
|
1911 |
+
#: models/Settings.php:295
|
1912 |
+
#, php-format
|
1913 |
+
msgid ""
|
1914 |
+
"Short name detected: %s. You need to use unique paths with more than 4 chars "
|
1915 |
+
"to avoid WordPress errors."
|
1916 |
+
msgstr ""
|
1917 |
+
"Nombre corto detectado: %s. Necesitas usar rutas únicas con más de 4 "
|
1918 |
+
"caracteres para evitar errores de WordPress."
|
1919 |
+
|
1920 |
+
#: models/Settings.php:300
|
1921 |
+
#, php-format
|
1922 |
+
msgid ""
|
1923 |
+
"Invalid name detected: %s. You need to use another name to avoid WordPress "
|
1924 |
+
"errors."
|
1925 |
+
msgstr ""
|
1926 |
+
"Nombre inválido detectado: %s. Necesitas usar otro nombre para evitar "
|
1927 |
+
"errores de WordPress."
|
1928 |
+
|
1929 |
+
#: models/Settings.php:305
|
1930 |
+
#, php-format
|
1931 |
+
msgid ""
|
1932 |
+
"Invalid name detected: %s. Add only the final path name to avoid WordPress "
|
1933 |
+
"errors."
|
1934 |
+
msgstr ""
|
1935 |
+
"Nombre inválido detectado: %s. Añade sólo el nombre de la ruta final para "
|
1936 |
+
"evitar errores de WordPress."
|
1937 |
+
|
1938 |
+
#: models/Settings.php:309
|
1939 |
+
#, php-format
|
1940 |
+
msgid ""
|
1941 |
+
"Invalid name detected: %s. The name can't start with / to avoid WordPress "
|
1942 |
+
"errors."
|
1943 |
+
msgstr ""
|
1944 |
+
"Nombre inválido detectado: %s. El nombre no puede comenzar con / para evitar "
|
1945 |
+
"errores de WordPress."
|
1946 |
+
|
1947 |
+
#: models/Settings.php:316
|
1948 |
+
#, php-format
|
1949 |
+
msgid ""
|
1950 |
+
"Invalid name detected: %s. The paths can't end with . to avoid WordPress "
|
1951 |
+
"errors."
|
1952 |
+
msgstr ""
|
1953 |
+
"Nombre inválido detectado: %s. Los caminos no pueden terminar con . para "
|
1954 |
+
"evitar errores de WordPress."
|
1955 |
+
|
1956 |
+
#: models/Settings.php:343
|
1957 |
+
#, php-format
|
1958 |
+
msgid ""
|
1959 |
+
"Weak name detected: %s. You need to use another name to increase your "
|
1960 |
+
"website security."
|
1961 |
+
msgstr ""
|
1962 |
+
"Nombre débil detectado: %s. Necesitas usar otro nombre para aumentar la "
|
1963 |
+
"seguridad de tu sitio web."
|
1964 |
+
|
1965 |
+
#: view/Advanced.php:11
|
1966 |
+
msgid "Redirect Settings"
|
1967 |
+
msgstr "Ajustes de Redireccionamiento"
|
1968 |
+
|
1969 |
+
#: view/Advanced.php:15
|
1970 |
+
msgid "Redirect hidden paths"
|
1971 |
+
msgstr "Redirigir los caminos ocultos"
|
1972 |
+
|
1973 |
+
#: view/Advanced.php:19
|
1974 |
+
msgid "Front page"
|
1975 |
+
msgstr "Página Principal"
|
1976 |
+
|
1977 |
+
#: view/Advanced.php:20
|
1978 |
+
msgid "404 page"
|
1979 |
+
msgstr "Página 404"
|
1980 |
+
|
1981 |
+
#: view/Advanced.php:32
|
1982 |
+
msgid ""
|
1983 |
+
"Redirect the protected paths /wp-admin, /wp-login to Front Page or 404 page."
|
1984 |
+
msgstr ""
|
1985 |
+
"Redirige las rutas protegidas /wp-admin, /wp-login a Front Page o 404 page."
|
1986 |
+
|
1987 |
+
#: view/Advanced.php:33
|
1988 |
+
msgid ""
|
1989 |
+
"You can create a new page and come back to choose to redirect to that page"
|
1990 |
+
msgstr ""
|
1991 |
+
"Puedes crear una nueva página y volver a elegir para redirigirte a esa página"
|
1992 |
+
|
1993 |
+
#: view/Advanced.php:39
|
1994 |
+
msgid "Custom Safe URL Param"
|
1995 |
+
msgstr "Parámetro de URL seguro personalizado"
|
1996 |
+
|
1997 |
+
#: view/Advanced.php:40
|
1998 |
+
msgid "eg. disable_url, safe_url"
|
1999 |
+
msgstr "por ejemplo, deshabilitar_url, seguro_url"
|
2000 |
+
|
2001 |
+
#: view/Advanced.php:46
|
2002 |
+
msgid ""
|
2003 |
+
"The Safe URL will set all the settings to default. Use it only if you're "
|
2004 |
+
"locked out"
|
2005 |
+
msgstr ""
|
2006 |
+
"La URL segura establecerá todos los ajustes como predeterminados. Utilízala "
|
2007 |
+
"sólo si estás bloqueado"
|
2008 |
+
|
2009 |
+
#: view/Advanced.php:47
|
2010 |
+
msgid "Safe URL:"
|
2011 |
+
msgstr "URL segura:"
|
2012 |
+
|
2013 |
+
#: view/Advanced.php:53
|
2014 |
+
msgid "Compatibility Settings"
|
2015 |
+
msgstr "Configuración"
|
2016 |
+
|
2017 |
+
#: view/Advanced.php:61
|
2018 |
+
msgid "Fix Relative URLs"
|
2019 |
+
msgstr "Arreglar las URLs relativas"
|
2020 |
+
|
2021 |
+
#: view/Advanced.php:63
|
2022 |
+
#, php-format
|
2023 |
+
msgid "Convert links like /wp-content/* into %s/wp-content/*."
|
2024 |
+
msgstr "Convierte los enlaces como /wp-content/* en %s/wp-content/*."
|
2025 |
+
|
2026 |
+
#: view/Advanced.php:73
|
2027 |
+
msgid "Fix Sitemaps XML"
|
2028 |
+
msgstr "Arreglar los Sitemaps XML"
|
2029 |
+
|
2030 |
+
#: view/Advanced.php:75
|
2031 |
+
msgid "Double check the Sitemap XML files and make sure the paths are changed."
|
2032 |
+
msgstr ""
|
2033 |
+
"Compruebe los archivos XML de Sitemap y asegúrese de que las rutas han sido "
|
2034 |
+
"cambiadas."
|
2035 |
+
|
2036 |
+
#: view/Advanced.php:85
|
2037 |
+
msgid "Fix Robots.txt"
|
2038 |
+
msgstr "Fix Robots.txt"
|
2039 |
+
|
2040 |
+
#: view/Advanced.php:87
|
2041 |
+
msgid "Hide WordPress paths from robots.txt file"
|
2042 |
+
msgstr "Ocultar las rutas de WordPress del archivo robots.txt"
|
2043 |
+
|
2044 |
+
#: view/Advanced.php:97
|
2045 |
+
msgid "Late Loading"
|
2046 |
+
msgstr "Carga Tardía"
|
2047 |
+
|
2048 |
+
#: view/Advanced.php:99
|
2049 |
+
msgid ""
|
2050 |
+
"Load HMW after all plugins are loaded. Useful for CDN plugins (eg. CDN "
|
2051 |
+
"Enabler)."
|
2052 |
+
msgstr ""
|
2053 |
+
"Cargar HMW después de que todos los plugins estén cargados. Es útil para los "
|
2054 |
+
"plugins CDN (por ejemplo, CDN Enabler)."
|
2055 |
+
|
2056 |
+
#: view/Advanced.php:100
|
2057 |
+
msgid "(only if other cache plugins request this)"
|
2058 |
+
msgstr "(sólo si otros plugins de cache lo requieren)"
|
2059 |
+
|
2060 |
+
#: view/Advanced.php:110
|
2061 |
+
msgid "Clean Login Page"
|
2062 |
+
msgstr "Página Principal"
|
2063 |
+
|
2064 |
+
#: view/Advanced.php:112
|
2065 |
+
msgid ""
|
2066 |
+
"Cancel the login hooks from other plugins and themes to prevent them from "
|
2067 |
+
"changing the Hide My WordPress redirects."
|
2068 |
+
msgstr ""
|
2069 |
+
"Cancelar los ganchos de inicio de sesión de otros plugins y temas para "
|
2070 |
+
"evitar que cambien las redirecciones de Hide My WordPress."
|
2071 |
+
|
2072 |
+
#: view/Advanced.php:112
|
2073 |
+
msgid "(not recommended)"
|
2074 |
+
msgstr "(no recomendado)"
|
2075 |
+
|
2076 |
+
#: view/Advanced.php:121
|
2077 |
+
msgid "Cache Settings"
|
2078 |
+
msgstr "Configuración de caché"
|
2079 |
+
|
2080 |
+
#: view/Advanced.php:129
|
2081 |
+
msgid "Security Check Notification"
|
2082 |
+
msgstr "Notificación por correo"
|
2083 |
+
|
2084 |
+
#: view/Advanced.php:131
|
2085 |
+
msgid "Show Security Check notification when it's not checked every week."
|
2086 |
+
msgstr ""
|
2087 |
+
"Mostrar la notificación de comprobación de seguridad cuando no se comprueba "
|
2088 |
+
"cada semana."
|
2089 |
+
|
2090 |
+
#: view/Advanced.php:147
|
2091 |
+
msgid "Optimize CSS and JS files"
|
2092 |
+
msgstr "Optimizar los archivos CSS y JS"
|
2093 |
+
|
2094 |
+
#: view/Advanced.php:148
|
2095 |
+
msgid "Cache CSS, JS and Images to increase the frontend loading speed."
|
2096 |
+
msgstr ""
|
2097 |
+
"Cachear CSS, JS e imágenes para aumentar la velocidad de carga del frontend."
|
2098 |
+
|
2099 |
+
#: view/Advanced.php:149
|
2100 |
+
#, php-format
|
2101 |
+
msgid "Check the website loading speed with %sPingdom Tool%s"
|
2102 |
+
msgstr "Compruebe la velocidad de carga de la página web con %sPingdom Tool%s"
|
2103 |
+
|
2104 |
+
#: view/Advanced.php:157
|
2105 |
+
msgid "Notification Settings"
|
2106 |
+
msgstr "Configuración de las notificaciones"
|
2107 |
+
|
2108 |
+
#: view/Advanced.php:165
|
2109 |
+
msgid "Email notification"
|
2110 |
+
msgstr "Notificación por correo"
|
2111 |
+
|
2112 |
+
#: view/Advanced.php:166
|
2113 |
+
msgid "Send me an email with the changed admin and login URLs"
|
2114 |
+
msgstr "Mándame un e-mail con las nuevas URLs de ADMIN y LOGIN"
|
2115 |
+
|
2116 |
+
#: view/Advanced.php:175 view/Connect.php:17
|
2117 |
+
msgid "Email Address"
|
2118 |
+
msgstr "Dirección de correo electrónico"
|
2119 |
+
|
2120 |
+
#: view/Advanced.php:191 view/Brute.php:115 view/Mapping.php:210
|
2121 |
+
#: view/Mapping.php:215 view/Permalinks.php:530 view/Permalinks.php:535
|
2122 |
+
#: view/Tweaks.php:162
|
2123 |
+
msgid "Save"
|
2124 |
+
msgstr "Guardar"
|
2125 |
+
|
2126 |
+
#: view/Advanced.php:192 view/Brute.php:116 view/Mapping.php:211
|
2127 |
+
#: view/Mapping.php:216 view/Permalinks.php:531 view/Permalinks.php:536
|
2128 |
+
#: view/Tweaks.php:163
|
2129 |
+
#, php-format
|
2130 |
+
msgid "Love Hide My WP %s? Show us ;)"
|
2131 |
+
msgstr "Ama Hide My WP %s? Muéstranos ;)"
|
2132 |
+
|
2133 |
+
#: view/Advanced.php:199 view/Mapping.php:243 view/Permalinks.php:563
|
2134 |
+
#: view/Tweaks.php:192
|
2135 |
+
msgid "Love Hide My WP?"
|
2136 |
+
msgstr "Ama Hide My WP?"
|
2137 |
+
|
2138 |
+
#: view/Advanced.php:204 view/Permalinks.php:568 view/Tweaks.php:197
|
2139 |
+
msgid "Please help us and support our plugin on WordPress.org"
|
2140 |
+
msgstr "Por favor, ayúdanos y apoya nuestro plugin en WordPress.org"
|
2141 |
+
|
2142 |
+
#: view/Advanced.php:207 view/Mapping.php:249 view/Permalinks.php:571
|
2143 |
+
#: view/Tweaks.php:200
|
2144 |
+
msgid "Rate Hide My WP"
|
2145 |
+
msgstr "Calificar Hide My WP"
|
2146 |
+
|
2147 |
+
#: view/Advanced.php:210 view/Permalinks.php:574 view/Tweaks.php:203
|
2148 |
+
msgid "Contact us after you left the review cause we have a surprise for you."
|
2149 |
+
msgstr ""
|
2150 |
+
"Contáctanos después de dejar la revista porque tenemos una sorpresa para ti."
|
2151 |
+
|
2152 |
+
#: view/Advanced.php:221 view/Mapping.php:224 view/Permalinks.php:544
|
2153 |
+
#: view/Tweaks.php:173
|
2154 |
+
msgid "Check Your Website"
|
2155 |
+
msgstr "Revise su sitio web"
|
2156 |
+
|
2157 |
+
#: view/Advanced.php:223 view/Mapping.php:226 view/Permalinks.php:546
|
2158 |
+
#: view/Tweaks.php:175
|
2159 |
+
msgid "Check if your website is secured with the current settings."
|
2160 |
+
msgstr "Compruebe si su sitio web está protegido con la configuración actual."
|
2161 |
+
|
2162 |
+
#: view/Advanced.php:229 view/Mapping.php:232 view/Permalinks.php:552
|
2163 |
+
#: view/Tweaks.php:181
|
2164 |
+
msgid ""
|
2165 |
+
"Make sure you save the settings and empty the cache before checking your "
|
2166 |
+
"website with our tool."
|
2167 |
+
msgstr ""
|
2168 |
+
"Asegúrese de guardar la configuración y vaciar la caché antes de revisar su "
|
2169 |
+
"sitio web con nuestra herramienta."
|
2170 |
+
|
2171 |
+
#: view/Advanced.php:233 view/Mapping.php:236 view/Permalinks.php:556
|
2172 |
+
#: view/Tweaks.php:185
|
2173 |
+
msgid "Learn more about Hide My WP"
|
2174 |
+
msgstr "Conozca más detalles acerca de Hide My WP"
|
2175 |
+
|
2176 |
+
#: view/Backup.php:7
|
2177 |
+
msgid "Backup/Restore Settings"
|
2178 |
+
msgstr "Respalda/Configurar Restauración"
|
2179 |
+
|
2180 |
+
#: view/Backup.php:9
|
2181 |
+
msgid ""
|
2182 |
+
"Click Backup and the download will start automatically. You can use the "
|
2183 |
+
"Backup for all your websites."
|
2184 |
+
msgstr ""
|
2185 |
+
"Haz clic en Copia de seguridad y la descarga comenzará automáticamente. "
|
2186 |
+
"Puedes usar la copia de seguridad para todos tus sitios web."
|
2187 |
+
|
2188 |
+
#: view/Backup.php:15 view/Backup.php:55
|
2189 |
+
msgid "Backup Settings"
|
2190 |
+
msgstr "Descargar Configuración"
|
2191 |
+
|
2192 |
+
#: view/Backup.php:26
|
2193 |
+
msgid "Hide My Wp Restore"
|
2194 |
+
msgstr "Restaurar Hide My WP"
|
2195 |
+
|
2196 |
+
#: view/Backup.php:32
|
2197 |
+
msgid "Upload the file with the saved Hide My Wp Settings"
|
2198 |
+
msgstr "Suba el archivo con la opciones de configuración de su Hide My WP"
|
2199 |
+
|
2200 |
+
#: view/Backup.php:40
|
2201 |
+
msgid "Restore Backup"
|
2202 |
+
msgstr "Restaurar Backup"
|
2203 |
+
|
2204 |
+
#: view/Backup.php:56
|
2205 |
+
msgid ""
|
2206 |
+
"It's important to <strong>save your settings every time you change them</"
|
2207 |
+
"strong>. You can use the backup to configure other websites you own."
|
2208 |
+
msgstr ""
|
2209 |
+
"Es importante que guardes <strong>tus ajustes cada vez que</strong> los "
|
2210 |
+
"cambies. Puedes usar la copia de seguridad para configurar otros sitios web "
|
2211 |
+
"de tu propiedad."
|
2212 |
+
|
2213 |
+
#: view/Brute.php:15
|
2214 |
+
msgid "Use Brute Force Protection"
|
2215 |
+
msgstr "Seguridad contra ataque por fuerza bruta"
|
2216 |
+
|
2217 |
+
#: view/Brute.php:17
|
2218 |
+
msgid "Protects your website against brute force login attacks"
|
2219 |
+
msgstr "Protege tu web contra ataques de fuerza bruta en la página de login"
|
2220 |
+
|
2221 |
+
#: view/Brute.php:28
|
2222 |
+
msgid "Math Check protection"
|
2223 |
+
msgstr "Protección de Verificación Matemática"
|
2224 |
+
|
2225 |
+
#: view/Brute.php:53
|
2226 |
+
msgid "Max fail attempts"
|
2227 |
+
msgstr "Nº Máximo de intentos fallidos"
|
2228 |
+
|
2229 |
+
#: view/Brute.php:54
|
2230 |
+
msgid "Block IP on login page"
|
2231 |
+
msgstr "Bloquear/desbloquear manualmente direcciones IP"
|
2232 |
+
|
2233 |
+
#: view/Brute.php:62
|
2234 |
+
msgid "Ban duration"
|
2235 |
+
msgstr "Duración del bloqueo (segundos)"
|
2236 |
+
|
2237 |
+
#: view/Brute.php:63
|
2238 |
+
msgid "No. of seconds"
|
2239 |
+
msgstr "No. de segundos"
|
2240 |
+
|
2241 |
+
#: view/Brute.php:71
|
2242 |
+
msgid "Lockout Message"
|
2243 |
+
msgstr "Mensaje de bloqueo"
|
2244 |
+
|
2245 |
+
#: view/Brute.php:72
|
2246 |
+
msgid "Show message instead of login form"
|
2247 |
+
msgstr "Mostrar mensaje en lugar de formulario de acceso"
|
2248 |
+
|
2249 |
+
#: view/Brute.php:86
|
2250 |
+
msgid "Whitelist IPs"
|
2251 |
+
msgstr "Lista blanca de IPs"
|
2252 |
+
|
2253 |
+
#: view/Brute.php:87
|
2254 |
+
#, php-format
|
2255 |
+
msgid ""
|
2256 |
+
"You can white-list a single IP like 192.168.0.1 or a range of 245 IPs like "
|
2257 |
+
"192.168.0.*. Find your IP with %s"
|
2258 |
+
msgstr ""
|
2259 |
+
"Puede incluir en la lista blanca una sola IP 192.168.0.1 o un rango de 245 "
|
2260 |
+
"IPs como 192.168.0.*. Conozca su IP en %s"
|
2261 |
+
|
2262 |
+
#: view/Brute.php:100
|
2263 |
+
msgid "Ban IPs"
|
2264 |
+
msgstr "Duración del bloqueo (segundos)"
|
2265 |
+
|
2266 |
+
#: view/Brute.php:101
|
2267 |
+
msgid ""
|
2268 |
+
"You can ban a single IP like 192.168.0.1 or a range of 245 IPs like "
|
2269 |
+
"192.168.0.*. These IPs will not be able to access the login page."
|
2270 |
+
msgstr ""
|
2271 |
+
"Puedes prohibir una sola IP como 192.168.0.1 o un rango de 245 IPs como "
|
2272 |
+
"192.168.0.*. Estas IPs no podrán acceder a la página de inicio de sesión."
|
2273 |
+
|
2274 |
+
#: view/Brute.php:122
|
2275 |
+
msgid "Blocked IPs"
|
2276 |
+
msgstr "IPs bloqueadas"
|
2277 |
+
|
2278 |
+
#: view/Brute.php:128
|
2279 |
+
msgid "Unlock all"
|
2280 |
+
msgstr "Vaciar IPs"
|
2281 |
+
|
2282 |
+
#: view/Brute.php:139
|
2283 |
+
msgid "Brute Force Login Protection"
|
2284 |
+
msgstr "Protección contra ataque por fuerza bruta"
|
2285 |
+
|
2286 |
+
#: view/Brute.php:140
|
2287 |
+
msgid ""
|
2288 |
+
"Protects your website against brute force login attacks using Hide My "
|
2289 |
+
"WordPress <br /><br /> A common threat web developers face is a password-"
|
2290 |
+
"guessing attack known as a brute force attack. A brute-force attack is an "
|
2291 |
+
"attempt to discover a password by systematically trying every possible "
|
2292 |
+
"combination of letters, numbers, and symbols until you discover the one "
|
2293 |
+
"correct combination that works. "
|
2294 |
+
msgstr ""
|
2295 |
+
"Protege su sitio web contra los ataques de inicio de sesión por fuerza bruta "
|
2296 |
+
"usando Hide My WordPress <br /><br />Una amenaza común a la que se enfrentan "
|
2297 |
+
"los desarrolladores web es un ataque de adivinación de contraseñas conocido "
|
2298 |
+
"como ataque por fuerza bruta. Un ataque de fuerza bruta es un intento de "
|
2299 |
+
"descubrir una contraseña probando sistemáticamente todas las combinaciones "
|
2300 |
+
"posibles de letras, números y símbolos hasta que se descubre la única "
|
2301 |
+
"combinación correcta que funciona "
|
2302 |
+
|
2303 |
+
#: view/Brute.php:146 view/Log.php:78
|
2304 |
+
msgid "Features"
|
2305 |
+
msgstr "Características"
|
2306 |
+
|
2307 |
+
#: view/Brute.php:148
|
2308 |
+
msgid "Limit the number of allowed login attempts using normal login form"
|
2309 |
+
msgstr ""
|
2310 |
+
"Limitar el número de intentos permitidos de login utilizando el formulario "
|
2311 |
+
"de inicio de sesión habitual"
|
2312 |
+
|
2313 |
+
#: view/Brute.php:149
|
2314 |
+
msgid "Math problem verification while logging in"
|
2315 |
+
msgstr "Verificación de problemas matemáticos al iniciar la sesión"
|
2316 |
+
|
2317 |
+
#: view/Brute.php:150
|
2318 |
+
msgid "Manually block/unblock IP addresses"
|
2319 |
+
msgstr "Bloquear/desbloquear manualmente direcciones IP"
|
2320 |
+
|
2321 |
+
#: view/Brute.php:151
|
2322 |
+
msgid "Manually whitelist trusted IP addresses"
|
2323 |
+
msgstr "Manualmente incluir en la lista blanca direcciones IP de confianza"
|
2324 |
+
|
2325 |
+
#: view/Brute.php:152
|
2326 |
+
msgid "Option to inform user about remaining attempts on login page"
|
2327 |
+
msgstr ""
|
2328 |
+
"Posibilidad de informar al usuario sobre los intentos restantes de login"
|
2329 |
+
|
2330 |
+
#: view/Brute.php:153
|
2331 |
+
msgid "Custom message to show to blocked users"
|
2332 |
+
msgstr "Mensaje personalizado a mostrar a los usuarios bloqueados"
|
2333 |
+
|
2334 |
+
#: view/Connect.php:12
|
2335 |
+
msgid "Activate Free version"
|
2336 |
+
msgstr "Activar la versión gratuita"
|
2337 |
+
|
2338 |
+
#: view/Connect.php:18
|
2339 |
+
msgid "Enter your email address to get security alerts and How To Lessons"
|
2340 |
+
msgstr ""
|
2341 |
+
"Ingrese su dirección de correo electrónico para obtener alertas de seguridad "
|
2342 |
+
"y lecciones de cómo hacerlo"
|
2343 |
+
|
2344 |
+
#: view/Connect.php:37
|
2345 |
+
msgid "Monitor my website, send me security alerts and vulnerability reports"
|
2346 |
+
msgstr ""
|
2347 |
+
"Supervisa mi sitio web, envíame alertas de seguridad e informes de "
|
2348 |
+
"vulnerabilidad"
|
2349 |
+
|
2350 |
+
#: view/Connect.php:47
|
2351 |
+
msgid "I want to receive How To lessons for Hide My WP Ghost by email"
|
2352 |
+
msgstr ""
|
2353 |
+
"Quiero recibir las lecciones de \"Cómo hacer para esconder mi fantasma WP\" "
|
2354 |
+
"por correo electrónico"
|
2355 |
+
|
2356 |
+
#: view/Connect.php:58
|
2357 |
+
msgid "Activate"
|
2358 |
+
msgstr "Activar"
|
2359 |
+
|
2360 |
+
#: view/Connect.php:64
|
2361 |
+
msgid "Skip Activation"
|
2362 |
+
msgstr "Saltar la activación"
|
2363 |
+
|
2364 |
+
#: view/Connect.php:73
|
2365 |
+
msgid "Activate Hide My WP"
|
2366 |
+
msgstr "Conozca más detalles acerca de Hide My WP"
|
2367 |
+
|
2368 |
+
#: view/Connect.php:75
|
2369 |
+
#, php-format
|
2370 |
+
msgid ""
|
2371 |
+
"By activating the Free version of Hide My WP you agree with our %sTerms of "
|
2372 |
+
"Use%s and %sPrivacy Policy%s"
|
2373 |
+
msgstr ""
|
2374 |
+
"Al activar la versión gratuita de Hide My WP usted está de acuerdo con "
|
2375 |
+
"nuestras %sTérminos de Uso%s y %sPolíticas de Privacidad%s"
|
2376 |
+
|
2377 |
+
#: view/Connect.php:78
|
2378 |
+
msgid ""
|
2379 |
+
"Note! If you add your email you will receive a free token which will "
|
2380 |
+
"activate the plugin."
|
2381 |
+
msgstr ""
|
2382 |
+
"¡Anótese! Si añades tu correo electrónico, recibirás un vale gratuito que "
|
2383 |
+
"activará el plugin."
|
2384 |
+
|
2385 |
+
#: view/Connect.php:81
|
2386 |
+
#, php-format
|
2387 |
+
msgid ""
|
2388 |
+
"If you bought Hide My WP Ghost please remove this plugin and install the one "
|
2389 |
+
"from %sYour Account%s"
|
2390 |
+
msgstr ""
|
2391 |
+
"Si usted compró Hide My WP Ghost por favor retire este plugin e instale el "
|
2392 |
+
"de %sYour Account%s"
|
2393 |
+
|
2394 |
+
#: view/Dashboard.php:18
|
2395 |
+
msgid "Security Level"
|
2396 |
+
msgstr "Nivel de seguridad"
|
2397 |
+
|
2398 |
+
#: view/Dashboard.php:23 view/SecurityCheck.php:22
|
2399 |
+
#, php-format
|
2400 |
+
msgid ""
|
2401 |
+
"Your website security %sis extremely weak%s. %sMany hacking doors are "
|
2402 |
+
"available."
|
2403 |
+
msgstr ""
|
2404 |
+
"La seguridad de su sitio web %s es extremadamente débil%s. %sMuchas puertas "
|
2405 |
+
"de hacking están disponibles."
|
2406 |
+
|
2407 |
+
#: view/Dashboard.php:26 view/SecurityCheck.php:25
|
2408 |
+
#, php-format
|
2409 |
+
msgid ""
|
2410 |
+
"Your website security %sis very weak%s. %sMany hacking doors are available."
|
2411 |
+
msgstr ""
|
2412 |
+
"La seguridad de su sitio web %ses muy débil%s. %sMuchas puertas de hacking "
|
2413 |
+
"están disponibles."
|
2414 |
+
|
2415 |
+
#: view/Dashboard.php:29 view/SecurityCheck.php:28
|
2416 |
+
#, php-format
|
2417 |
+
msgid ""
|
2418 |
+
"Your website security is still weak. %sSome of the main hacking doors are "
|
2419 |
+
"still available."
|
2420 |
+
msgstr ""
|
2421 |
+
"La seguridad de su sitio web %ses todavía débil. Algunas de las principales "
|
2422 |
+
"puertas de hacking todavía están disponibles."
|
2423 |
+
|
2424 |
+
#: view/Dashboard.php:32 view/SecurityCheck.php:31
|
2425 |
+
#, php-format
|
2426 |
+
msgid ""
|
2427 |
+
"Your website security is strong. %sKeep checking the security every week."
|
2428 |
+
msgstr ""
|
2429 |
+
"La seguridad de su sitio web es fuerte. %sSigue revisando la seguridad cada "
|
2430 |
+
"semana."
|
2431 |
+
|
2432 |
+
#: view/Dashboard.php:37
|
2433 |
+
msgid "Urgent Security Actions Required"
|
2434 |
+
msgstr "Se requieren medidas de seguridad urgentes"
|
2435 |
+
|
2436 |
+
#: view/Dashboard.php:45
|
2437 |
+
msgid "Check All The Security Tasks"
|
2438 |
+
msgstr "Revisa todas las tareas de seguridad"
|
2439 |
+
|
2440 |
+
#: view/Dashboard.php:47
|
2441 |
+
msgid "Upgrade Your Security"
|
2442 |
+
msgstr "Actualice su seguridad"
|
2443 |
+
|
2444 |
+
#: view/Dashboard.php:55
|
2445 |
+
msgid "Recheck Security"
|
2446 |
+
msgstr "Vuelva a comprobar la seguridad"
|
2447 |
+
|
2448 |
+
#: view/Dashboard.php:107
|
2449 |
+
msgid "Checking Website Security ..."
|
2450 |
+
msgstr "Comprobando la seguridad del sitio web..."
|
2451 |
+
|
2452 |
+
#: view/FrontendCheck.php:7
|
2453 |
+
msgid "Next Steps"
|
2454 |
+
msgstr "Siguientes pasos"
|
2455 |
+
|
2456 |
+
#: view/FrontendCheck.php:9
|
2457 |
+
msgid "Frontend Login Test"
|
2458 |
+
msgstr "ej. login o registrar"
|
2459 |
+
|
2460 |
+
#: view/FrontendCheck.php:13
|
2461 |
+
#, php-format
|
2462 |
+
msgid "Run %sFrontend Login Test%s and login inside the pupop. "
|
2463 |
+
msgstr "Ejecute %sFrontend Login Test%s e inicie sesión dentro de la pupila"
|
2464 |
+
|
2465 |
+
#: view/FrontendCheck.php:14
|
2466 |
+
msgid "If you're able to login, you've set the new paths correctly."
|
2467 |
+
msgstr "Si puedes entrar, has establecido correctamente las nuevas rutas."
|
2468 |
+
|
2469 |
+
#: view/FrontendCheck.php:15
|
2470 |
+
msgid ""
|
2471 |
+
"If the Login Page displays any error, please make sure you follow the Hide "
|
2472 |
+
"My WP Ghost instructions before moving forward."
|
2473 |
+
msgstr ""
|
2474 |
+
"Si la página de inicio de sesión muestra algún error, por favor, asegúrese "
|
2475 |
+
"de seguir las instrucciones de Ocultar mi fantasma WP antes de seguir "
|
2476 |
+
"adelante."
|
2477 |
+
|
2478 |
+
#: view/FrontendCheck.php:16
|
2479 |
+
msgid ""
|
2480 |
+
"Do not log out from this browser until you are confident that the Frontend "
|
2481 |
+
"is working and you will be able to log in again."
|
2482 |
+
msgstr ""
|
2483 |
+
"No cierre la sesión de este navegador hasta que esté seguro de que el "
|
2484 |
+
"Frontend funciona y pueda volver a entrar."
|
2485 |
+
|
2486 |
+
#: view/FrontendCheck.php:17
|
2487 |
+
#, php-format
|
2488 |
+
msgid ""
|
2489 |
+
"If you can't configure Hide My WP Ghost, switch to Default mode and "
|
2490 |
+
"%scontact us%s."
|
2491 |
+
msgstr ""
|
2492 |
+
"Si no puedes configurar Hide My WP Ghost, cambia al modo por defecto y "
|
2493 |
+
"%scontacta con nosotros%s."
|
2494 |
+
|
2495 |
+
#: view/FrontendCheck.php:21
|
2496 |
+
#, php-format
|
2497 |
+
msgid "%sWARNING:%s Use the custom login URL to login to admin."
|
2498 |
+
msgstr ""
|
2499 |
+
"%sAttention!%sUsa la URL de inicio de sesión personalizada para acceder a la "
|
2500 |
+
"administración."
|
2501 |
+
|
2502 |
+
#: view/FrontendCheck.php:22
|
2503 |
+
#, php-format
|
2504 |
+
msgid ""
|
2505 |
+
"Your login URL will be: %s In case you can't re-login, use the safe URL: %s"
|
2506 |
+
msgstr ""
|
2507 |
+
"Tu URL de acceso será: %sEn caso de que no puedas volver a iniciar sesión, "
|
2508 |
+
"usa la URL segura: %s"
|
2509 |
+
|
2510 |
+
#: view/FrontendCheck.php:29
|
2511 |
+
msgid "Yes, it's working"
|
2512 |
+
msgstr "Sí, está funcionando"
|
2513 |
+
|
2514 |
+
#: view/FrontendCheck.php:44
|
2515 |
+
msgid "Frontend login Test"
|
2516 |
+
msgstr "ej. login o registrar"
|
2517 |
+
|
2518 |
+
#: view/Log.php:10
|
2519 |
+
msgid "Events Settings"
|
2520 |
+
msgstr "Ajustes de eventos"
|
2521 |
+
|
2522 |
+
#: view/Log.php:23
|
2523 |
+
msgid "Log Users Events"
|
2524 |
+
msgstr "Mensaje personalizado a mostrar a los usuarios bloqueados"
|
2525 |
+
|
2526 |
+
#: view/Log.php:24
|
2527 |
+
msgid "Track and Log events that happens on your WordPress site!"
|
2528 |
+
msgstr "Rastrea y registra los eventos que ocurren en tu sitio de WordPress"
|
2529 |
+
|
2530 |
+
#: view/Log.php:37
|
2531 |
+
msgid "Log Brute Force Attempts"
|
2532 |
+
msgstr "Registro de intentos de fuerza bruta"
|
2533 |
+
|
2534 |
+
#: view/Log.php:38
|
2535 |
+
msgid "Track and Log brute force attempts"
|
2536 |
+
msgstr "Rastrear y registrar los intentos de fuerza bruta"
|
2537 |
+
|
2538 |
+
#: view/Log.php:46
|
2539 |
+
msgid "Log Use Roles"
|
2540 |
+
msgstr "Roles de uso de roles"
|
2541 |
+
|
2542 |
+
#: view/Log.php:47
|
2543 |
+
msgid "Hold Control key to select multiple user roles"
|
2544 |
+
msgstr ""
|
2545 |
+
"Mantenga pulsada la tecla Control para seleccionar varios roles de usuario"
|
2546 |
+
|
2547 |
+
#: view/Log.php:48
|
2548 |
+
msgid "Don't select any role if you want to log all user roles"
|
2549 |
+
msgstr ""
|
2550 |
+
"No seleccione ningún rol si quiere registrar todos los roles de usuario"
|
2551 |
+
|
2552 |
+
#: view/Log.php:71
|
2553 |
+
msgid "Monitor everything that happens on your WordPress site!"
|
2554 |
+
msgstr "Monitorea todo lo que pasa en tu sitio de WordPress!"
|
2555 |
+
|
2556 |
+
#: view/Log.php:72
|
2557 |
+
msgid ""
|
2558 |
+
"It's safe to know what happened on your website at any time, in admin and on "
|
2559 |
+
"frontend."
|
2560 |
+
msgstr ""
|
2561 |
+
"Es seguro saber lo que pasó en su sitio web en cualquier momento, en la "
|
2562 |
+
"administración y en el frontend."
|
2563 |
+
|
2564 |
+
#: view/Log.php:73
|
2565 |
+
msgid ""
|
2566 |
+
"All the logs are saved on our Cloud Servers and your data is safe in case "
|
2567 |
+
"you reinstall the plugin"
|
2568 |
+
msgstr ""
|
2569 |
+
"Todos los registros se guardan en nuestros servidores de nubes y sus datos "
|
2570 |
+
"están seguros en caso de reinstalar el plugin"
|
2571 |
+
|
2572 |
+
#: view/Log.php:80
|
2573 |
+
msgid "Monitor, track and log events on your website"
|
2574 |
+
msgstr "Monitorear, rastrear y registrar los eventos en su sitio web"
|
2575 |
+
|
2576 |
+
#: view/Log.php:81
|
2577 |
+
msgid "Know what the other users are doing on your website and when"
|
2578 |
+
msgstr ""
|
2579 |
+
"Saber lo que los otros usuarios están haciendo en su sitio web y cuando"
|
2580 |
+
|
2581 |
+
#: view/Log.php:82
|
2582 |
+
msgid "You can set to receive email with alerts for one or more actions"
|
2583 |
+
msgstr ""
|
2584 |
+
"Puedes configurar para recibir correo electrónico con alertas de una o más "
|
2585 |
+
"acciones"
|
2586 |
+
|
2587 |
+
#: view/Log.php:83
|
2588 |
+
msgid "Filter events and users"
|
2589 |
+
msgstr "Mensaje personalizado a mostrar a los usuarios bloqueados"
|
2590 |
+
|
2591 |
+
#: view/Log.php:84
|
2592 |
+
msgid "Compatible with all themes and plugins"
|
2593 |
+
msgstr "Compatible con todos los temas y plugins"
|
2594 |
+
|
2595 |
+
#: view/Mapping.php:12
|
2596 |
+
msgid "Text Mapping"
|
2597 |
+
msgstr "Mapeo de texto"
|
2598 |
+
|
2599 |
+
#: view/Mapping.php:19 view/Mapping.php:95 view/Mapping.php:168
|
2600 |
+
msgid ""
|
2601 |
+
"First, you need to switch Hide My Wp from Default mode to Safe Mode or Ghost "
|
2602 |
+
"Mode."
|
2603 |
+
msgstr ""
|
2604 |
+
"Primero, tienes que cambiar Hide My Wp del modo por defecto al modo seguro o "
|
2605 |
+
"al modo fantasma."
|
2606 |
+
|
2607 |
+
#: view/Mapping.php:24
|
2608 |
+
msgid "Replace the text in tags and classes to hide any WordPress footprint."
|
2609 |
+
msgstr ""
|
2610 |
+
"Reemplazar el texto en etiquetas y clases para ocultar cualquier huella de "
|
2611 |
+
"WordPress."
|
2612 |
+
|
2613 |
+
#: view/Mapping.php:25
|
2614 |
+
msgid ""
|
2615 |
+
"Note! Your plugins and themes may use these and it will affect the design "
|
2616 |
+
"and functionality."
|
2617 |
+
msgstr ""
|
2618 |
+
"Nota: Usar con precaución. Tus plugins y temas pueden utilizarlos y puede "
|
2619 |
+
"afectar el diseño y la funcionalidad de la web"
|
2620 |
+
|
2621 |
+
#: view/Mapping.php:37
|
2622 |
+
msgid "Text Mapping only Classes, IDs, JS variables"
|
2623 |
+
msgstr "Sólo mapeo de texto Clases, IDs, variables JS"
|
2624 |
+
|
2625 |
+
#: view/Mapping.php:39
|
2626 |
+
msgid "Change the text only in classes, styles & scrips. (Recommended ON)"
|
2627 |
+
msgstr "Cambie el texto sólo en clases, estilos y guiones. (Recomendado ON)"
|
2628 |
+
|
2629 |
+
#: view/Mapping.php:40
|
2630 |
+
msgid "If this option is switched off, the text is changed in all page"
|
2631 |
+
msgstr "Si esta opción está desactivada, el texto se cambia en toda la página"
|
2632 |
+
|
2633 |
+
#: view/Mapping.php:51 view/Mapping.php:64
|
2634 |
+
msgid "Remove Text Map"
|
2635 |
+
msgstr "Eliminar el mapa de texto"
|
2636 |
+
|
2637 |
+
#: view/Mapping.php:76
|
2638 |
+
msgid "Add another text"
|
2639 |
+
msgstr "Añade otro texto"
|
2640 |
+
|
2641 |
+
#: view/Mapping.php:84
|
2642 |
+
msgid "URL Mapping"
|
2643 |
+
msgstr "Mapeo de URL"
|
2644 |
+
|
2645 |
+
#: view/Mapping.php:98
|
2646 |
+
msgid "You can add a list of URLs you want to change into new ones. "
|
2647 |
+
msgstr "Puedes añadir una lista de URLs que quieras cambiar por otras nuevas"
|
2648 |
+
|
2649 |
+
#: view/Mapping.php:99
|
2650 |
+
msgid ""
|
2651 |
+
"It's important to include only internal URLs from Frontend source code after "
|
2652 |
+
"you activate the plugin in Safe Mode or Ghost Mode."
|
2653 |
+
msgstr ""
|
2654 |
+
"Es importante incluir sólo las URLs internas del código fuente de Frontend "
|
2655 |
+
"después de activar el plugin en modo seguro o en modo fantasma."
|
2656 |
+
|
2657 |
+
#: view/Mapping.php:100
|
2658 |
+
msgid "Example:"
|
2659 |
+
msgstr "Ejemplo:"
|
2660 |
+
|
2661 |
+
#: view/Mapping.php:102 view/Mapping.php:111
|
2662 |
+
msgid "from"
|
2663 |
+
msgstr "desde"
|
2664 |
+
|
2665 |
+
#: view/Mapping.php:106 view/Mapping.php:115
|
2666 |
+
msgid "to"
|
2667 |
+
msgstr "a"
|
2668 |
+
|
2669 |
+
#: view/Mapping.php:109
|
2670 |
+
msgid "or"
|
2671 |
+
msgstr "o"
|
2672 |
+
|
2673 |
+
#: view/Mapping.php:125 view/Mapping.php:138
|
2674 |
+
msgid "Remove URL Map"
|
2675 |
+
msgstr "Eliminar el mapa URL"
|
2676 |
+
|
2677 |
+
#: view/Mapping.php:150
|
2678 |
+
msgid "Add another URL"
|
2679 |
+
msgstr "Añadir otra URL"
|
2680 |
+
|
2681 |
+
#: view/Mapping.php:158
|
2682 |
+
msgid "CDN URLs"
|
2683 |
+
msgstr "CDN URLs"
|
2684 |
+
|
2685 |
+
#: view/Mapping.php:171
|
2686 |
+
msgid "You can add one or more CDN URLs you use."
|
2687 |
+
msgstr "Puedes añadir una o más de las URL de CDN que utilizas."
|
2688 |
+
|
2689 |
+
#: view/Mapping.php:172
|
2690 |
+
msgid ""
|
2691 |
+
"This option will not activate the CDN option for your website but it will "
|
2692 |
+
"change the custom paths in case you already set a CDN URL with another "
|
2693 |
+
"plugin."
|
2694 |
+
msgstr ""
|
2695 |
+
"Esta opción no activará la opción de CDN para tu sitio web pero cambiará las "
|
2696 |
+
"rutas personalizadas en caso de que ya hayas establecido una URL de CDN con "
|
2697 |
+
"otro plugin."
|
2698 |
+
|
2699 |
+
#: view/Mapping.php:181 view/Mapping.php:190
|
2700 |
+
msgid "Remove CDN"
|
2701 |
+
msgstr "Eliminar el CDN"
|
2702 |
+
|
2703 |
+
#: view/Mapping.php:199
|
2704 |
+
msgid "Add another CDN URL"
|
2705 |
+
msgstr "Agregar otro CDN URL"
|
2706 |
+
|
2707 |
+
#: view/Mapping.php:246
|
2708 |
+
msgid "Give us 5 stars on WordPress.org"
|
2709 |
+
msgstr "Danos 5 estrellas en WordPress.org"
|
2710 |
+
|
2711 |
+
#: view/Permalinks.php:9
|
2712 |
+
msgid ""
|
2713 |
+
"Hide My WordPress requires to be activated on the entire network to prevent "
|
2714 |
+
"login issues!"
|
2715 |
+
msgstr ""
|
2716 |
+
"Hide My WordPress requiere ser activado en toda la red para evitar problemas "
|
2717 |
+
"de acceso!"
|
2718 |
+
|
2719 |
+
#: view/Permalinks.php:32
|
2720 |
+
msgid "Levels of security"
|
2721 |
+
msgstr "Niveles de seguridad"
|
2722 |
+
|
2723 |
+
#: view/Permalinks.php:34
|
2724 |
+
msgid "Default (unsafe)"
|
2725 |
+
msgstr "Por defecto (inseguro)"
|
2726 |
+
|
2727 |
+
#: view/Permalinks.php:35
|
2728 |
+
msgid "Lite mode"
|
2729 |
+
msgstr "Modo Lite"
|
2730 |
+
|
2731 |
+
#: view/Permalinks.php:38
|
2732 |
+
#, php-format
|
2733 |
+
msgid ""
|
2734 |
+
"Upgrade Your Website Security. Add Firewall, Hide WordPress Completely. "
|
2735 |
+
"%sUnlock this feature%s"
|
2736 |
+
msgstr ""
|
2737 |
+
"Actualice la seguridad de su sitio web. Añade un cortafuegos, oculta "
|
2738 |
+
"WordPress completamente. %sDesbloquea esta función%s"
|
2739 |
+
|
2740 |
+
#: view/Permalinks.php:42
|
2741 |
+
msgid "Ghost mode"
|
2742 |
+
msgstr "Modo Ghost"
|
2743 |
+
|
2744 |
+
#: view/Permalinks.php:46
|
2745 |
+
#, php-format
|
2746 |
+
msgid ""
|
2747 |
+
"%sWARNING:%s The admin path is hidden from visitors. Use the custom login "
|
2748 |
+
"URL to login to admin"
|
2749 |
+
msgstr ""
|
2750 |
+
"%sAttention%s La ruta de administración está oculta a los visitantes. Usa la "
|
2751 |
+
"URL de inicio de sesión personalizada para acceder a admin"
|
2752 |
+
|
2753 |
+
#: view/Permalinks.php:47
|
2754 |
+
#, php-format
|
2755 |
+
msgid ""
|
2756 |
+
"If you can't login, use this URL: %s and all your changes are roll back to "
|
2757 |
+
"default"
|
2758 |
+
msgstr ""
|
2759 |
+
"Si no puedes acceder, utiliza esta URL: %s y todos tus cambios se volverán a "
|
2760 |
+
"poner por defecto"
|
2761 |
+
|
2762 |
+
#: view/Permalinks.php:119
|
2763 |
+
msgid "Admin Settings"
|
2764 |
+
msgstr "Configuración de administración"
|
2765 |
+
|
2766 |
+
#: view/Permalinks.php:122
|
2767 |
+
#, php-format
|
2768 |
+
msgid ""
|
2769 |
+
"Your admin URL is changed by another plugin/theme in %s. To prevent errors, "
|
2770 |
+
"deactivate the other plugin who changes the admin path."
|
2771 |
+
msgstr ""
|
2772 |
+
"La URL de tu administrador es cambiada por otro plugin/tema en %s. Para "
|
2773 |
+
"prevenir errores, desactiva el otro plugin que cambia la ruta de "
|
2774 |
+
"administración."
|
2775 |
+
|
2776 |
+
#: view/Permalinks.php:126
|
2777 |
+
#, php-format
|
2778 |
+
msgid ""
|
2779 |
+
"Your admin URL can't be changed on %s hosting because of the %s security "
|
2780 |
+
"terms."
|
2781 |
+
msgstr ""
|
2782 |
+
"Tu URL de administración no puede ser cambiada en el hosting de %s debido a "
|
2783 |
+
"los términos de seguridad de %s."
|
2784 |
+
|
2785 |
+
#: view/Permalinks.php:132
|
2786 |
+
msgid "Custom Admin Path"
|
2787 |
+
msgstr "Ocultar la nueva ruta de admin"
|
2788 |
+
|
2789 |
+
#: view/Permalinks.php:133
|
2790 |
+
msgid "eg. adm, back"
|
2791 |
+
msgstr "ej. adm, backend"
|
2792 |
+
|
2793 |
+
#: view/Permalinks.php:147
|
2794 |
+
msgid "Hide \"wp-admin\""
|
2795 |
+
msgstr "Ocultar \"wp-admin\""
|
2796 |
+
|
2797 |
+
#: view/Permalinks.php:148
|
2798 |
+
msgid "Show 404 Not Found Error when visitors access /wp-admin"
|
2799 |
+
msgstr "Mostrar Error 404 No encontrado para /wp-admin"
|
2800 |
+
|
2801 |
+
#: view/Permalinks.php:157
|
2802 |
+
msgid "Hide the new admin path"
|
2803 |
+
msgstr "Ocultar la nueva ruta de admin"
|
2804 |
+
|
2805 |
+
#: view/Permalinks.php:158
|
2806 |
+
msgid ""
|
2807 |
+
"Let only the new login be accessible and redirect me to admin after logging "
|
2808 |
+
"in"
|
2809 |
+
msgstr ""
|
2810 |
+
"Que sólo se pueda acceder a la nueva sesión y me redirija a la "
|
2811 |
+
"administración después de entrar"
|
2812 |
+
|
2813 |
+
#: view/Permalinks.php:163
|
2814 |
+
msgid ""
|
2815 |
+
"Some Themes don't work with custom Admin and Ajax paths. In case of ajax "
|
2816 |
+
"errors, switch back to wp-admin and admin-ajax.php."
|
2817 |
+
msgstr ""
|
2818 |
+
"Algunos temas no funcionan con los caminos personalizados de Admin y Ajax. "
|
2819 |
+
"En caso de errores de Ajax, vuelve a wp-admin y admin-ajax.php."
|
2820 |
+
|
2821 |
+
#: view/Permalinks.php:169
|
2822 |
+
msgid "Login Settings"
|
2823 |
+
msgstr "Configuración de inicio de sesión"
|
2824 |
+
|
2825 |
+
#: view/Permalinks.php:172
|
2826 |
+
#, php-format
|
2827 |
+
msgid ""
|
2828 |
+
"Your login URL is changed by another plugin/theme in %s. To prevent errors, "
|
2829 |
+
"deactivate the other plugin who changes the login path."
|
2830 |
+
msgstr ""
|
2831 |
+
"Tu URL de acceso se cambia por otro plugin/tema en %s. Para evitar errores, "
|
2832 |
+
"desactiva el otro plugin que cambia la ruta de acceso."
|
2833 |
+
|
2834 |
+
#: view/Permalinks.php:177
|
2835 |
+
msgid "Custom Login Path"
|
2836 |
+
msgstr "Mensaje personalizado a mostrar a los usuarios bloqueados"
|
2837 |
+
|
2838 |
+
#: view/Permalinks.php:178
|
2839 |
+
msgid "eg. login or signin"
|
2840 |
+
msgstr "ej. login o registrar"
|
2841 |
+
|
2842 |
+
#: view/Permalinks.php:191
|
2843 |
+
msgid "Hide \"wp-login.php\""
|
2844 |
+
msgstr "Ocultar \"wp-login.php\""
|
2845 |
+
|
2846 |
+
#: view/Permalinks.php:192
|
2847 |
+
msgid "Show 404 Not Found Error when visitors access /wp-login.php"
|
2848 |
+
msgstr ""
|
2849 |
+
"Mostrar el error 404 Not Found cuando los visitantes acceden a /wp-login.php"
|
2850 |
+
|
2851 |
+
#: view/Permalinks.php:201
|
2852 |
+
msgid "Custom Lost Password Path"
|
2853 |
+
msgstr "Ruta de la Contraseña Perdida Personalizada"
|
2854 |
+
|
2855 |
+
#: view/Permalinks.php:202
|
2856 |
+
msgid "eg. lostpass or forgotpass"
|
2857 |
+
msgstr "ej. contrasena-perdida o recordar-pass"
|
2858 |
+
|
2859 |
+
#: view/Permalinks.php:212
|
2860 |
+
msgid "Custom Register Path"
|
2861 |
+
msgstr "Ruta de la Registrar Personalizada"
|
2862 |
+
|
2863 |
+
#: view/Permalinks.php:213
|
2864 |
+
msgid "eg. newuser or register"
|
2865 |
+
msgstr "ej. usuario-nuevo o registrar"
|
2866 |
+
|
2867 |
+
#: view/Permalinks.php:223
|
2868 |
+
msgid "Custom Logout Path"
|
2869 |
+
msgstr "Ruta de Cerrar Session Personalizada"
|
2870 |
+
|
2871 |
+
#: view/Permalinks.php:224
|
2872 |
+
msgid "eg. logout or disconnect"
|
2873 |
+
msgstr "eg. cerrar o desconectar"
|
2874 |
+
|
2875 |
+
#: view/Permalinks.php:234
|
2876 |
+
msgid "Custom Activation Path"
|
2877 |
+
msgstr "Ocultar la nueva ruta de admin"
|
2878 |
+
|
2879 |
+
#: view/Permalinks.php:235
|
2880 |
+
msgid "eg. multisite activation link"
|
2881 |
+
msgstr "por ejemplo, el enlace de activación multisitio"
|
2882 |
+
|
2883 |
+
#: view/Permalinks.php:248
|
2884 |
+
msgid "Common Paths"
|
2885 |
+
msgstr "Caminos comunes"
|
2886 |
+
|
2887 |
+
#: view/Permalinks.php:252
|
2888 |
+
msgid "Custom admin-ajax Path"
|
2889 |
+
msgstr "Ocultar la ruta de admin-ajax"
|
2890 |
+
|
2891 |
+
#: view/Permalinks.php:253
|
2892 |
+
msgid "eg. ajax, json"
|
2893 |
+
msgstr "eg. Ajax, JSON"
|
2894 |
+
|
2895 |
+
#: view/Permalinks.php:266
|
2896 |
+
msgid "Hide wp-admin from ajax URL"
|
2897 |
+
msgstr "Ocultar wp-admin de la URL de ajax"
|
2898 |
+
|
2899 |
+
#: view/Permalinks.php:267
|
2900 |
+
#, php-format
|
2901 |
+
msgid "Show /%s instead of /%s"
|
2902 |
+
msgstr "Mostrar /%s en lugar de /%s"
|
2903 |
+
|
2904 |
+
#: view/Permalinks.php:268
|
2905 |
+
msgid "Works only with the custom admin-ajax path to avoid infinite loops."
|
2906 |
+
msgstr ""
|
2907 |
+
"Funciona sólo con el camino personalizado de admin-ajax para evitar bucles "
|
2908 |
+
"infinitos."
|
2909 |
+
|
2910 |
+
#: view/Permalinks.php:275
|
2911 |
+
msgid "Custom wp-content Path"
|
2912 |
+
msgstr "Ruta de wp-content Personalizada"
|
2913 |
+
|
2914 |
+
#: view/Permalinks.php:276
|
2915 |
+
msgid "eg. core, inc, include"
|
2916 |
+
msgstr "p.e. core, inc, incluye"
|
2917 |
+
|
2918 |
+
#: view/Permalinks.php:286
|
2919 |
+
msgid "Custom wp-includes Path"
|
2920 |
+
msgstr "Ruta de wp-includes Personalizada"
|
2921 |
+
|
2922 |
+
#: view/Permalinks.php:287
|
2923 |
+
msgid "eg. lib, library"
|
2924 |
+
msgstr "eg. lib, biblioteca"
|
2925 |
+
|
2926 |
+
#: view/Permalinks.php:298
|
2927 |
+
msgid "Custom uploads Path"
|
2928 |
+
msgstr "Ruta de uploads Personalizada"
|
2929 |
+
|
2930 |
+
#: view/Permalinks.php:299
|
2931 |
+
msgid "eg. images, files"
|
2932 |
+
msgstr "eg. imágenes, archivos"
|
2933 |
+
|
2934 |
+
#: view/Permalinks.php:308
|
2935 |
+
#, php-format
|
2936 |
+
msgid ""
|
2937 |
+
"You already defined a different wp-content/uploads directory in wp-config."
|
2938 |
+
"php %s"
|
2939 |
+
msgstr ""
|
2940 |
+
"Ya has definido un directorio wp-content/uploads diferente en wp-config.php "
|
2941 |
+
"%s"
|
2942 |
+
|
2943 |
+
#: view/Permalinks.php:314
|
2944 |
+
msgid "Custom comment Path"
|
2945 |
+
msgstr "Ruta de comment Personalizada"
|
2946 |
+
|
2947 |
+
#: view/Permalinks.php:315
|
2948 |
+
msgid "eg. comments, discussion"
|
2949 |
+
msgstr "eg. Comentarios, discusión"
|
2950 |
+
|
2951 |
+
#: view/Permalinks.php:326
|
2952 |
+
msgid "Custom author Path"
|
2953 |
+
msgstr "Ruta del autor Personalizada"
|
2954 |
+
|
2955 |
+
#: view/Permalinks.php:327
|
2956 |
+
msgid "eg. profile, usr, writer"
|
2957 |
+
msgstr "p.e. perfil, usr, escritor"
|
2958 |
+
|
2959 |
+
#: view/Permalinks.php:345
|
2960 |
+
msgid "Hide Author ID URL"
|
2961 |
+
msgstr "Ocultar el URL de ID del autor"
|
2962 |
+
|
2963 |
+
#: view/Permalinks.php:346
|
2964 |
+
msgid "Don't let URLs like domain.com?author=1 show the user login name"
|
2965 |
+
msgstr ""
|
2966 |
+
"No dejes que las URLs como domain.com?author=1 muestren el nombre de usuario"
|
2967 |
+
|
2968 |
+
#: view/Permalinks.php:354
|
2969 |
+
msgid "Plugin Settings"
|
2970 |
+
msgstr "Configuración de Plugin"
|
2971 |
+
|
2972 |
+
#: view/Permalinks.php:358
|
2973 |
+
msgid "Custom plugins Path"
|
2974 |
+
msgstr "Ruta del plugins Personalizada"
|
2975 |
+
|
2976 |
+
#: view/Permalinks.php:359
|
2977 |
+
msgid "eg. modules"
|
2978 |
+
msgstr "eg. modulos"
|
2979 |
+
|
2980 |
+
#: view/Permalinks.php:371
|
2981 |
+
msgid "Hide plugin names"
|
2982 |
+
msgstr "Ocultar las nombres del plugin"
|
2983 |
+
|
2984 |
+
#: view/Permalinks.php:372
|
2985 |
+
msgid "Give random names to each plugin"
|
2986 |
+
msgstr "Darle nombres al azar a cada plugin"
|
2987 |
+
|
2988 |
+
#: view/Permalinks.php:379
|
2989 |
+
msgid "Theme Settings"
|
2990 |
+
msgstr "Ajustes de tema"
|
2991 |
+
|
2992 |
+
#: view/Permalinks.php:383
|
2993 |
+
msgid "Custom themes Path"
|
2994 |
+
msgstr "Ruta de temas Personalizada"
|
2995 |
+
|
2996 |
+
#: view/Permalinks.php:384
|
2997 |
+
msgid "eg. assets, templates, styles"
|
2998 |
+
msgstr "por ejemplo, activos, plantillas, estilos"
|
2999 |
+
|
3000 |
+
#: view/Permalinks.php:399
|
3001 |
+
msgid "Hide theme names"
|
3002 |
+
msgstr "Ocultar los nombres de los temas"
|
3003 |
+
|
3004 |
+
#: view/Permalinks.php:400
|
3005 |
+
msgid "Give random names to each theme (works in WP multisite)"
|
3006 |
+
msgstr "Dar nombres al azar a cada tema (funciona en WP multisitio)"
|
3007 |
+
|
3008 |
+
#: view/Permalinks.php:411
|
3009 |
+
msgid "REST API Settings"
|
3010 |
+
msgstr "Inhabilitar el acceso a la Rest API"
|
3011 |
+
|
3012 |
+
#: view/Permalinks.php:419
|
3013 |
+
msgid "Custom wp-json Path"
|
3014 |
+
msgstr "URL personalizado para wp-json"
|
3015 |
+
|
3016 |
+
#: view/Permalinks.php:420
|
3017 |
+
msgid "eg. json, api, call"
|
3018 |
+
msgstr "por ejemplo, json, api, llama"
|
3019 |
+
|
3020 |
+
#: view/Permalinks.php:433
|
3021 |
+
msgid "Disable Rest API access"
|
3022 |
+
msgstr "Inhabilitar el acceso a la Rest API"
|
3023 |
+
|
3024 |
+
#: view/Permalinks.php:434
|
3025 |
+
msgid "Disable Rest API access if you don't use your website for API calls"
|
3026 |
+
msgstr ""
|
3027 |
+
"Deshabilita el acceso a la API de descanso si no utilizas tu sitio web para "
|
3028 |
+
"las llamadas a la API"
|
3029 |
+
|
3030 |
+
#: view/Permalinks.php:442
|
3031 |
+
msgid "Security Settings"
|
3032 |
+
msgstr "Ajustes de seguridad"
|
3033 |
+
|
3034 |
+
#: view/Permalinks.php:454
|
3035 |
+
msgid "Hide WordPress Common Paths"
|
3036 |
+
msgstr "Ocultar los caminos comunes de WordPress"
|
3037 |
+
|
3038 |
+
#: view/Permalinks.php:455
|
3039 |
+
msgid "Hide /wp-content, /wp-include, /plugins, /themes paths"
|
3040 |
+
msgstr ""
|
3041 |
+
"Ocultar el contenido de /wp-content, /wp-include, /plugins, /themes paths"
|
3042 |
+
|
3043 |
+
#: view/Permalinks.php:456
|
3044 |
+
msgid "Hide upgrade.php and install.php for visitors"
|
3045 |
+
msgstr "Esconder upgrade.php e instalar.php para los visitantes"
|
3046 |
+
|
3047 |
+
#: view/Permalinks.php:457
|
3048 |
+
msgid "(this may affect the fonts and images loaded through CSS)"
|
3049 |
+
msgstr "(esto puede afectar a las fuentes e imágenes cargadas a través de CSS)"
|
3050 |
+
|
3051 |
+
#: view/Permalinks.php:467
|
3052 |
+
msgid "Hide WordPress Common Files"
|
3053 |
+
msgstr "Ocultar archivos comunes de WordPress"
|
3054 |
+
|
3055 |
+
#: view/Permalinks.php:468
|
3056 |
+
msgid ""
|
3057 |
+
"Hide wp-config.php , wp-config-sample.php, readme.html, license.txt files"
|
3058 |
+
msgstr ""
|
3059 |
+
"Ocultar wp-config.php , wp-config-sample.php, readme.html, archivos license."
|
3060 |
+
"txt"
|
3061 |
+
|
3062 |
+
#: view/Permalinks.php:480
|
3063 |
+
msgid "Firewall Against Script Injection"
|
3064 |
+
msgstr "Cortafuegos contra la inyección de scripts"
|
3065 |
+
|
3066 |
+
#: view/Permalinks.php:481
|
3067 |
+
msgid ""
|
3068 |
+
"Most WordPress installations are hosted on the popular Apache, Nginx and IIS "
|
3069 |
+
"web servers."
|
3070 |
+
msgstr ""
|
3071 |
+
"La mayoría de las instalaciones de WordPress están alojadas en los populares "
|
3072 |
+
"servidores web Apache, Nginx e IIS."
|
3073 |
+
|
3074 |
+
#: view/Permalinks.php:482
|
3075 |
+
msgid ""
|
3076 |
+
"A thorough set of rules can prevent many types of SQL Injection and URL "
|
3077 |
+
"hacks from being interpreted."
|
3078 |
+
msgstr ""
|
3079 |
+
"Un conjunto completo de reglas puede evitar que se interpreten muchos tipos "
|
3080 |
+
"de Inyección SQL y hackeo de URL."
|
3081 |
+
|
3082 |
+
#: view/Permalinks.php:493
|
3083 |
+
msgid "Disable Directory Browsing"
|
3084 |
+
msgstr "Desactivar la navegación por el directorio"
|
3085 |
+
|
3086 |
+
#: view/Permalinks.php:494
|
3087 |
+
#, php-format
|
3088 |
+
msgid "Don't let hackers see any directory content. See %sUploads Directory%s"
|
3089 |
+
msgstr ""
|
3090 |
+
"No dejes que los hackers vean el contenido de ningún directorio. Ver %subir "
|
3091 |
+
"directorio%s"
|
3092 |
+
|
3093 |
+
#: view/Permalinks.php:507
|
3094 |
+
msgid "Custom category Path"
|
3095 |
+
msgstr "Ruta de categorías Personalizada"
|
3096 |
+
|
3097 |
+
#: view/Permalinks.php:508
|
3098 |
+
msgid "eg. cat, dir, list"
|
3099 |
+
msgstr "p.e. cat, dir, lista"
|
3100 |
+
|
3101 |
+
#: view/Permalinks.php:517
|
3102 |
+
msgid "Custom tags Path"
|
3103 |
+
msgstr "Ruta de etiquetas Personalizada"
|
3104 |
+
|
3105 |
+
#: view/Permalinks.php:518
|
3106 |
+
msgid "eg. keyword, topic"
|
3107 |
+
msgstr "ej. etiqueta, keyword, topic"
|
3108 |
+
|
3109 |
+
#: view/Plugins.php:14
|
3110 |
+
msgid "More details"
|
3111 |
+
msgstr "Más detalles"
|
3112 |
+
|
3113 |
+
#: view/Plugins.php:16
|
3114 |
+
msgid "Install Plugin"
|
3115 |
+
msgstr "Instalar Plugin"
|
3116 |
+
|
3117 |
+
#: view/Plugins.php:18
|
3118 |
+
msgid "Plugin Installed"
|
3119 |
+
msgstr "Plugin instalado"
|
3120 |
+
|
3121 |
+
#: view/Plugins.php:30
|
3122 |
+
msgid ""
|
3123 |
+
"We are testing every week the latest version of these plugins and <strong>we "
|
3124 |
+
"make sure they are working with Hide My WP</strong> plugin.\n"
|
3125 |
+
" <br /><br />You don't need to install all these plugin "
|
3126 |
+
"in your website. If you're already using a cache plugin you don't need to "
|
3127 |
+
"install another one. <strong>We recommend using only one cache plugin</"
|
3128 |
+
"strong>.\n"
|
3129 |
+
" <br /><br />You can also install either <strong>iThemes "
|
3130 |
+
"Security</strong> plugin or <strong>Sucuri Security</strong> plugin to work "
|
3131 |
+
"with Hide My Wp plugin.\n"
|
3132 |
+
" <br /><br />If your plugins directory is not writable "
|
3133 |
+
"you will need to install the plugins manually."
|
3134 |
+
msgstr ""
|
3135 |
+
"Estamos probando cada semana la última versión de estos plugins y nos "
|
3136 |
+
"aseguramos de que funcionan <strong>con</strong> el plugin <strong>Hide My "
|
3137 |
+
"WP</strong>.\n"
|
3138 |
+
" <br /><br /> No es necesario que instale todos estos "
|
3139 |
+
"plugins en su sitio web. Si ya usas un plugin de caché no necesitas instalar "
|
3140 |
+
"otro. Te recomendamos que utilices <strong>un</strong> solo plugin de "
|
3141 |
+
"caché.\n"
|
3142 |
+
" <br /><br /> También puedes instalar el plugin de "
|
3143 |
+
"seguridad de <strong>iThemes</strong> o el plugin de <strong>seguridad de "
|
3144 |
+
"Sucuri</strong> para que funcione con el plugin de Hide My Wp.\n"
|
3145 |
+
" <br /><br /> Si el directorio de plugins no es "
|
3146 |
+
"escribible, deberá instalar los plugins manualmente."
|
3147 |
+
|
3148 |
+
#: view/SecurityCheck.php:6
|
3149 |
+
msgid "WordPress Security Check"
|
3150 |
+
msgstr "Comprobación de seguridad de WordPress"
|
3151 |
+
|
3152 |
+
#: view/SecurityCheck.php:35 view/SecurityCheck.php:63
|
3153 |
+
msgid "Start Scan"
|
3154 |
+
msgstr "Empezar a rastrear"
|
3155 |
+
|
3156 |
+
#: view/SecurityCheck.php:48
|
3157 |
+
msgid "Passed"
|
3158 |
+
msgstr "Pasado"
|
3159 |
+
|
3160 |
+
#: view/SecurityCheck.php:49
|
3161 |
+
msgid "Failed"
|
3162 |
+
msgstr "Fallido"
|
3163 |
+
|
3164 |
+
#: view/SecurityCheck.php:55
|
3165 |
+
msgid ""
|
3166 |
+
"Congratulations! You completed all the security tasks. Make sure you check "
|
3167 |
+
"your site once a week."
|
3168 |
+
msgstr ""
|
3169 |
+
"¡Felicidades! Has completado todas las tareas de seguridad. Asegúrate de "
|
3170 |
+
"revisar tu sitio una vez a la semana."
|
3171 |
+
|
3172 |
+
#: view/SecurityCheck.php:66
|
3173 |
+
#, php-format
|
3174 |
+
msgid ""
|
3175 |
+
"According to %sGoogle latest stats%s, over %s20k websites are hacked every "
|
3176 |
+
"week%s and over %s30% of them are made in WordPress%s. <br />It's "
|
3177 |
+
"%sbetter to prevent an attack%s than to spend a lot of money and time to "
|
3178 |
+
"recover your data after an attack not to mention the situation when your "
|
3179 |
+
"clients' data are stollen."
|
3180 |
+
msgstr ""
|
3181 |
+
"De acuerdo con las %súltimas estadísticas de Google%s, más de %s20.000 "
|
3182 |
+
"sitios web son hackeados cada semana%s y más del %s30% de ellos son "
|
3183 |
+
"hechos en WordPress%s. <br />Es %smejor prevenir un ataque %sque gastar "
|
3184 |
+
"mucho dinero y tiempo en recuperar tus datos después de un ataque, sin "
|
3185 |
+
"mencionar la situación en la que los datos de tus clientes se quedan "
|
3186 |
+
"estancados."
|
3187 |
+
|
3188 |
+
#: view/SecurityCheck.php:69
|
3189 |
+
msgid "Last check:"
|
3190 |
+
msgstr "Última comprobación:"
|
3191 |
+
|
3192 |
+
#: view/SecurityCheck.php:82
|
3193 |
+
msgid "Name"
|
3194 |
+
msgstr "Nombre"
|
3195 |
+
|
3196 |
+
#: view/SecurityCheck.php:83
|
3197 |
+
msgid "Value"
|
3198 |
+
msgstr "Valor"
|
3199 |
+
|
3200 |
+
#: view/SecurityCheck.php:84
|
3201 |
+
msgid "Valid"
|
3202 |
+
msgstr "Válido"
|
3203 |
+
|
3204 |
+
#: view/SecurityCheck.php:85
|
3205 |
+
msgid "Action"
|
3206 |
+
msgstr "Acción"
|
3207 |
+
|
3208 |
+
#: view/SecurityCheck.php:110
|
3209 |
+
msgid "Info"
|
3210 |
+
msgstr "Información"
|
3211 |
+
|
3212 |
+
#: view/SecurityCheck.php:111
|
3213 |
+
msgid "Fix it"
|
3214 |
+
msgstr "Reparar"
|
3215 |
+
|
3216 |
+
#: view/SecurityCheck.php:112
|
3217 |
+
msgid "Are you sure you want to ignore this task in the future?"
|
3218 |
+
msgstr "¿Estás seguro de que quieres ignorar esta tarea en el futuro?"
|
3219 |
+
|
3220 |
+
#: view/SecurityCheck.php:125
|
3221 |
+
msgid "Reset all ingnored tasks"
|
3222 |
+
msgstr "Reajustar todas las tareas ignoradas"
|
3223 |
+
|
3224 |
+
#: view/Support.php:3
|
3225 |
+
msgid "Need Help?"
|
3226 |
+
msgstr "¿Necesitas ayuda?"
|
3227 |
+
|
3228 |
+
#: view/Support.php:6
|
3229 |
+
#, php-format
|
3230 |
+
msgid ""
|
3231 |
+
"Read the plugin tutorial and how to setup every feature %sRead Hide My WP "
|
3232 |
+
"Tutorial%s"
|
3233 |
+
msgstr ""
|
3234 |
+
"Lee el tutorial del plugin y cómo configurar cada función %sLee el tutorial "
|
3235 |
+
"de Hide My WP%s"
|
3236 |
+
|
3237 |
+
#: view/Support.php:8
|
3238 |
+
#, php-format
|
3239 |
+
msgid ""
|
3240 |
+
"You can also email us on %scontact@wpplugins.tips%s and we are happy to "
|
3241 |
+
"answer any question or suggestion you may have and we aim to respond within "
|
3242 |
+
"24 hours."
|
3243 |
+
msgstr ""
|
3244 |
+
"También puede enviarnos un correo electrónico a %scontact@wpplugins.tips%s y "
|
3245 |
+
"estaremos encantados de responder a cualquier pregunta o sugerencia que "
|
3246 |
+
"pueda tener y nuestro objetivo es responder en un plazo de 24 horas."
|
3247 |
+
|
3248 |
+
#: view/Tweaks.php:10
|
3249 |
+
msgid "Change Options"
|
3250 |
+
msgstr "Opciones"
|
3251 |
+
|
3252 |
+
#: view/Tweaks.php:18
|
3253 |
+
msgid "Change Paths for Logged Users"
|
3254 |
+
msgstr "Cambiar las rutas de los usuarios registrados"
|
3255 |
+
|
3256 |
+
#: view/Tweaks.php:20
|
3257 |
+
msgid "Change WordPress paths while you're logged in"
|
3258 |
+
msgstr "Cambia los caminos de WordPress mientras estás conectado"
|
3259 |
+
|
3260 |
+
#: view/Tweaks.php:21
|
3261 |
+
msgid "(not recommended, may affect other plugins functionality in admin)"
|
3262 |
+
msgstr ""
|
3263 |
+
"(no recomendado, puede afectar a la funcionalidad de otros plugins en admin)"
|
3264 |
+
|
3265 |
+
#: view/Tweaks.php:35
|
3266 |
+
msgid "Change Paths in Cached Files"
|
3267 |
+
msgstr "Cambiar los caminos en los archivos almacenados"
|
3268 |
+
|
3269 |
+
#: view/Tweaks.php:36
|
3270 |
+
msgid ""
|
3271 |
+
"Change the WordPress common paths in the cached files from /wp-content/cache "
|
3272 |
+
"directory"
|
3273 |
+
msgstr ""
|
3274 |
+
"Cambiar las rutas comunes de WordPress en los archivos almacenados en el "
|
3275 |
+
"directorio /wp-content/cache"
|
3276 |
+
|
3277 |
+
#: view/Tweaks.php:37
|
3278 |
+
msgid ""
|
3279 |
+
"(this feature runs in background and needs up to one minute after every "
|
3280 |
+
"cache purged)"
|
3281 |
+
msgstr ""
|
3282 |
+
"(esta característica funciona en segundo plano y necesita hasta un minuto "
|
3283 |
+
"después de cada caché purgado)"
|
3284 |
+
|
3285 |
+
#: view/Tweaks.php:48
|
3286 |
+
msgid "Change Paths in Ajax Calls"
|
3287 |
+
msgstr "Cambiar los caminos en las llamadas de Ajax"
|
3288 |
+
|
3289 |
+
#: view/Tweaks.php:50
|
3290 |
+
msgid ""
|
3291 |
+
"This will prevent from showing the old paths when an image or font is called "
|
3292 |
+
"through ajax"
|
3293 |
+
msgstr ""
|
3294 |
+
"Esto evitará que se muestren los viejos caminos cuando una imagen o fuente "
|
3295 |
+
"se llama a través de ajax"
|
3296 |
+
|
3297 |
+
#: view/Tweaks.php:58
|
3298 |
+
msgid "Hide/Show Options"
|
3299 |
+
msgstr "Opciones"
|
3300 |
+
|
3301 |
+
#: view/Tweaks.php:67
|
3302 |
+
msgid ""
|
3303 |
+
"Hide WordPress and Plugin versions from the end of any image, css and js "
|
3304 |
+
"files"
|
3305 |
+
msgstr ""
|
3306 |
+
"Ocultar las versiones de WordPress y Plugin al final de cualquier archivo de "
|
3307 |
+
"imagen, css y js"
|
3308 |
+
|
3309 |
+
#: view/Tweaks.php:68
|
3310 |
+
msgid "Hide the WP Generator META"
|
3311 |
+
msgstr "Ocultar \"wp-login.php\""
|
3312 |
+
|
3313 |
+
#: view/Tweaks.php:69
|
3314 |
+
msgid "Hide the WP DNS Prefetch META"
|
3315 |
+
msgstr "Ocultar el WP DNS Prefetch META"
|
3316 |
+
|
3317 |
+
#: view/Tweaks.php:78
|
3318 |
+
msgid "Hide RSD (Really Simple Discovery) header"
|
3319 |
+
msgstr "Ocultar el encabezado RSD (Really Simple Discovery)"
|
3320 |
+
|
3321 |
+
#: view/Tweaks.php:80
|
3322 |
+
msgid "Don't show any WordPress information in HTTP header request"
|
3323 |
+
msgstr ""
|
3324 |
+
"No muestres ninguna información de WordPress en la solicitud de encabezado "
|
3325 |
+
"HTTP"
|
3326 |
+
|
3327 |
+
#: view/Tweaks.php:90
|
3328 |
+
msgid "Hide WordPress HTML Comments"
|
3329 |
+
msgstr "Ocultar los Comentarios HTML pertenecientes a temas y plugins"
|
3330 |
+
|
3331 |
+
#: view/Tweaks.php:92
|
3332 |
+
msgid "Hide the HTML Comments left by theme and plugins"
|
3333 |
+
msgstr "Ocultar los Comentarios HTML pertenecientes a temas y plugins"
|
3334 |
+
|
3335 |
+
#: view/Tweaks.php:101
|
3336 |
+
msgid "Hide Emojicons"
|
3337 |
+
msgstr "Ocultar Emojiconos"
|
3338 |
+
|
3339 |
+
#: view/Tweaks.php:103
|
3340 |
+
msgid "Don't load Emoji Icons if you don't use them"
|
3341 |
+
msgstr "No cargar los iconos de Emoji si no los usa"
|
3342 |
+
|
3343 |
+
#: view/Tweaks.php:110
|
3344 |
+
msgid "Other Settings"
|
3345 |
+
msgstr "Otros ajustes"
|
3346 |
+
|
3347 |
+
#: view/Tweaks.php:117
|
3348 |
+
msgid "Disable XML-RPC authentication"
|
3349 |
+
msgstr "Deshabilitar la autenticación XML-RPC"
|
3350 |
+
|
3351 |
+
#: view/Tweaks.php:119
|
3352 |
+
#, php-format
|
3353 |
+
msgid "Don't load XML-RPC to prevent %sBrute force attacks via XML-RPC%s"
|
3354 |
+
msgstr ""
|
3355 |
+
"No cargue XML-RPC para prevenir ataques de %sfuerza bruta a través de XML-RPC"
|
3356 |
+
"%s"
|
3357 |
+
|
3358 |
+
#: view/Tweaks.php:128
|
3359 |
+
msgid "Disable Embed scripts"
|
3360 |
+
msgstr "Deshabilitar los scripts incrustadas"
|
3361 |
+
|
3362 |
+
#: view/Tweaks.php:130
|
3363 |
+
msgid "Don't load oEmbed service if you don't use oEmbed videos"
|
3364 |
+
msgstr "No cargar el servicio oEmbed si no utiliza videos oEmbed"
|
3365 |
+
|
3366 |
+
#: view/Tweaks.php:140
|
3367 |
+
msgid "Disable WLW Manifest scripts"
|
3368 |
+
msgstr "Deshabilitar los scripts de WLW Manifest"
|
3369 |
+
|
3370 |
+
#: view/Tweaks.php:142
|
3371 |
+
msgid ""
|
3372 |
+
"Don't load WLW if you didn't configure Windows Live Writer for your site"
|
3373 |
+
msgstr "No cargues WLW si no has configurado Windows Live Writer para tu sitio"
|
3374 |
+
|
3375 |
+
#: view/Tweaks.php:152
|
3376 |
+
msgid "Disable DB Debug in Frontent"
|
3377 |
+
msgstr "Deshabilitar la depuración de DB en Frontent"
|
3378 |
+
|
3379 |
+
#: view/Tweaks.php:154
|
3380 |
+
msgid "Don't load DB Debug if your website is live"
|
3381 |
+
msgstr "No cargue DB Debug si su sitio web está en vivo"
|
3382 |
+
|
3383 |
+
#. Plugin Name of the plugin/theme
|
3384 |
+
msgid "Hide My WP Ghost Lite"
|
3385 |
+
msgstr "Hide My WP Ghost Lite"
|
3386 |
+
|
3387 |
+
#. Plugin URI of the plugin/theme
|
3388 |
+
msgid "https://wordpress.org/plugins/hide-my-wp/"
|
3389 |
+
msgstr "https://wordpress.org/plugins/hide-my-wp/"
|
3390 |
+
|
3391 |
+
#. Description of the plugin/theme
|
3392 |
+
msgid ""
|
3393 |
+
"The best solution for WordPress Security. Hide wp-admin, wp-login, wp-"
|
3394 |
+
"content, plugins, themes etc. Add Firewall, Brute Force protection & more. "
|
3395 |
+
"<br /> <a href=\"http://hidemywpghost.com/wordpress\" target=\"_blank"
|
3396 |
+
"\"><strong>Unlock all features</strong></a>"
|
3397 |
+
msgstr ""
|
3398 |
+
"La mejor solución para la seguridad de WordPress. Ocultar wp-admin, wp-"
|
3399 |
+
"login, wp-content, plugins, temas, etc. Añade un cortafuegos, protección de "
|
3400 |
+
"fuerza bruta y más. <br /> <a href=\"http://hidemywpghost.com/wordpress\" "
|
3401 |
+
"target=\"_blank\"><strong>Desbloquea todas las características</strong></a>"
|
3402 |
+
|
3403 |
+
#. Author of the plugin/theme
|
3404 |
+
msgid "WPPlugins - WordPress Security Plugins"
|
3405 |
+
msgstr "WPPlugins - Plugins de seguridad de WordPress"
|
3406 |
+
|
3407 |
+
#. Author URI of the plugin/theme
|
3408 |
+
msgid "https://wpplugins.tips"
|
3409 |
+
msgstr "https://wpplugins.tips"
|
3410 |
+
|
3411 |
+
#~ msgid "Cancel the changes"
|
3412 |
+
#~ msgstr "Cancelar los cambios"
|
3413 |
+
|
3414 |
+
#~ msgid ""
|
3415 |
+
#~ "Action Required. Proceed with the instructions or cancel the changes "
|
3416 |
+
#~ msgstr ""
|
3417 |
+
#~ "Acción requerida. Continue con las instrucciones o cancele los cambios "
|
3418 |
+
|
3419 |
+
#, php-format
|
3420 |
+
#~ msgid ""
|
3421 |
+
#~ "You still see %s because you are logged in. To prevent errors, log-in "
|
3422 |
+
#~ "with the new admin url: %s"
|
3423 |
+
#~ msgstr ""
|
3424 |
+
#~ "Sigue viendo %s porque todavía está logueado. Para evitar errores, inicie "
|
3425 |
+
#~ "la sesión de nuevo usando la url del admin: %s"
|
3426 |
+
|
3427 |
+
#~ msgid "Custom theme style name"
|
3428 |
+
#~ msgstr "Cambiar el nombre del css de su tema"
|
3429 |
+
|
3430 |
+
#~ msgid "Hide IDs from Stylesheets"
|
3431 |
+
#~ msgstr "Ocultar ID de hojas de estilo"
|
3432 |
+
|
3433 |
+
#~ msgid "(may slow down the website)"
|
3434 |
+
#~ msgstr "(puede ralentizar el sitio web)"
|
3435 |
+
|
3436 |
+
#~ msgid "Custom admin URL"
|
3437 |
+
#~ msgstr "Definir la URL de Admin"
|
3438 |
+
|
3439 |
+
#~ msgid "Custom login URL"
|
3440 |
+
#~ msgstr "Definir URL de Login"
|
3441 |
+
|
3442 |
+
#~ msgid "Show 404 Not Found Error for /wp-login.php"
|
3443 |
+
#~ msgstr "Mostrar Error 404 No encontrado para /wp-login.php"
|
3444 |
+
|
3445 |
+
#~ msgid "Custom Lost Password URL"
|
3446 |
+
#~ msgstr "URL Recuperar Contraseña"
|
3447 |
+
|
3448 |
+
#~ msgid "Custom Register URL"
|
3449 |
+
#~ msgstr "URL de Registro Usuario"
|
3450 |
+
|
3451 |
+
#~ msgid "Custom wp-includes URL"
|
3452 |
+
#~ msgstr "URL personalizado para wp-includes"
|
3453 |
+
|
3454 |
+
#~ msgid "Custom uploads URL"
|
3455 |
+
#~ msgstr "URL de upload"
|
3456 |
+
|
3457 |
+
#~ msgid "Custom comment URL"
|
3458 |
+
#~ msgstr "URL de Comentario"
|
3459 |
+
|
3460 |
+
#~ msgid "Custom author URL"
|
3461 |
+
#~ msgstr "URL del Autor"
|
3462 |
+
|
3463 |
+
#~ msgid "Custom plugins path URL"
|
3464 |
+
#~ msgstr "URL de plugins"
|
3465 |
+
|
3466 |
+
#~ msgid "Custom themes path URL"
|
3467 |
+
#~ msgstr "Definir URL para temas"
|
3468 |
+
|
3469 |
+
#~ msgid "Custom category URL"
|
3470 |
+
#~ msgstr "URL de categorías"
|
3471 |
+
|
3472 |
+
#~ msgid "Custom tags URL"
|
3473 |
+
#~ msgstr "URL de etiquetas"
|
3474 |
+
|
3475 |
+
#~ msgid "I've already left a review"
|
3476 |
+
#~ msgstr "Ya he dejado una revisión"
|
3477 |
+
|
3478 |
+
#~ msgid "Never show again"
|
3479 |
+
#~ msgstr "No volver a mostrar"
|
3480 |
+
|
3481 |
+
#~ msgid "Advanced Settings"
|
3482 |
+
#~ msgstr "Configuración Avanzada"
|
3483 |
+
|
3484 |
+
#~ msgid "Fix relative URLs"
|
3485 |
+
#~ msgstr "Solucionar URLs relativas"
|
3486 |
+
|
3487 |
+
#~ msgid "Strict Login"
|
3488 |
+
#~ msgstr "Inicio de sesión estricto"
|
3489 |
+
|
3490 |
+
#~ msgid ""
|
3491 |
+
#~ "Load HMW after all plugins are loaded. Useful for CDN plugins (eg. CDN "
|
3492 |
+
#~ "Enabler)"
|
3493 |
+
#~ msgstr ""
|
3494 |
+
#~ "Load HMW after all plugins are loaded. Useful for CDN plugins (eg. CDN "
|
3495 |
+
#~ "Enabler)"
|
3496 |
+
|
3497 |
+
#~ msgid "Leave A Review?"
|
3498 |
+
#~ msgstr "Dejar una opinión"
|
3499 |
+
|
3500 |
+
#~ msgid "Sure! I'd love to!"
|
3501 |
+
#~ msgstr "¡Me encantaría!"
|
3502 |
+
|
3503 |
+
#~ msgid "Remove text by matching"
|
3504 |
+
#~ msgstr "Eliminar texto por coincidencia"
|
3505 |
+
|
3506 |
+
#~ msgid ""
|
3507 |
+
#~ "You can also enter text parts like wp- and it will remove all the text "
|
3508 |
+
#~ "containing wp- from your source code"
|
3509 |
+
#~ msgstr ""
|
3510 |
+
#~ "Puede incluso indicar parte de texto como wp- y se eliminarán todas las "
|
3511 |
+
#~ "coincidencias wp- desde su código fuente"
|
3512 |
+
|
3513 |
+
#~ msgid "Maybe Later"
|
3514 |
+
#~ msgstr "Quizá más tarde."
|
3515 |
+
|
3516 |
+
#~ msgid ""
|
3517 |
+
#~ "Your admin path is changed. To prevent errors, disable the other plugin "
|
3518 |
+
#~ "who changes the admin path."
|
3519 |
+
#~ msgstr ""
|
3520 |
+
#~ "La ruta de acceso cómo admin se cambió. Para evitar errores, desactive el "
|
3521 |
+
#~ "otro plugin que cambia esta ruta de acceso."
|
3522 |
+
|
3523 |
+
#~ msgid ""
|
3524 |
+
#~ "If you can't login, use this URL: %s and all changes are rollback to "
|
3525 |
+
#~ "default"
|
3526 |
+
#~ msgstr ""
|
3527 |
+
#~ "Si no puede loguearse, utiliza esta URL: %s y se cargará la configuración "
|
3528 |
+
#~ "predefinida."
|
3529 |
+
|
3530 |
+
#~ msgid ""
|
3531 |
+
#~ "Let only the new login to be accesible and redirect me to admin after I'm "
|
3532 |
+
#~ "logged in"
|
3533 |
+
#~ msgstr ""
|
3534 |
+
#~ "Dejar sólo el nuevo login que sea accesible y redireccióname a admin "
|
3535 |
+
#~ "después de loguearme"
|
3536 |
+
|
3537 |
+
#~ msgid "Hide Plugins name"
|
3538 |
+
#~ msgstr "Ocultar nombre Plugins"
|
3539 |
+
|
3540 |
+
#~ msgid "Hide Themes name"
|
3541 |
+
#~ msgstr "Ocultar nombre de temas"
|
3542 |
+
|
3543 |
+
#~ msgid ""
|
3544 |
+
#~ "Don't load it if you didn't configure Windows Live Writer for your site"
|
3545 |
+
#~ msgstr "No cargar si no tiene configurado Windows Live Writer para su web"
|
3546 |
+
|
3547 |
+
#~ msgid ""
|
3548 |
+
#~ "We hope you've enjoyed using Hide My WP PRO! Would you consider leaving "
|
3549 |
+
#~ "us a review on WordPress.org?"
|
3550 |
+
#~ msgstr ""
|
3551 |
+
#~ "¡Esperamos que ha disfrutado usando Hide My WP PRO! ¿Consideraría dejar "
|
3552 |
+
#~ "una valoración positiva en WordPress.org?"
|
3553 |
+
|
3554 |
+
#~ msgid ""
|
3555 |
+
#~ "CDN Enabler detected! Learn how to configure it with Hide My WP PRO "
|
3556 |
+
#~ "%sClick here%s"
|
3557 |
+
#~ msgstr ""
|
3558 |
+
#~ "¡CDN Enabler detectado! Aprenda a configurarlo con Hide My WP PRO %sClick "
|
3559 |
+
#~ "aquí%s"
|
3560 |
+
|
3561 |
+
#~ msgid "Check for updates"
|
3562 |
+
#~ msgstr "Comprobar actualizaciones."
|
3563 |
+
|
3564 |
+
#~ msgid "This plugin is up to date."
|
3565 |
+
#~ msgstr "Este plugin está actualizado."
|
3566 |
+
|
3567 |
+
#~ msgid "A new version of this plugin is available."
|
3568 |
+
#~ msgstr "Una nueva versión de este plugin está disponible."
|
3569 |
+
|
3570 |
+
#~ msgid "Unknown update checker status \"%s\""
|
3571 |
+
#~ msgstr "Status de actualización desconocido \"%s\""
|
3572 |
+
|
3573 |
+
#~ msgid "Custom ajax URL"
|
3574 |
+
#~ msgstr "URL para llamadas ajax"
|
3575 |
+
|
3576 |
+
#~ msgid "You can choose to hide all the URLs from hackers and spammers."
|
3577 |
+
#~ msgstr "Puede elegir ocultar todas las URL de hackers y spammers."
|
3578 |
+
|
3579 |
+
#~ msgid "WPPlugins"
|
3580 |
+
#~ msgstr "WPPlugins"
|
languages/hide-my-wp-ro_RO.mo
ADDED
Binary file
|
languages/hide-my-wp-ro_RO.po
ADDED
@@ -0,0 +1,3416 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: Hide My WP Ghost\n"
|
4 |
+
"POT-Creation-Date: 2020-05-14 18:31+0300\n"
|
5 |
+
"PO-Revision-Date: 2020-05-14 19:45+0300\n"
|
6 |
+
"Last-Translator: John Darrel <john@wpplugins.tips>\n"
|
7 |
+
"Language-Team: WpPluginsTips <john@wpplugins.tips>\n"
|
8 |
+
"Language: ro_RO\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.3.1\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"X-Poedit-WPHeader: index.php\n"
|
15 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
17 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
18 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
19 |
+
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && n"
|
20 |
+
"%100<=19) ? 1 : 2);\n"
|
21 |
+
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
+
|
24 |
+
#: classes/Error.php:17
|
25 |
+
msgid ""
|
26 |
+
"Function get_class does not exist! It's required for Hide My WP to work "
|
27 |
+
"properly."
|
28 |
+
msgstr ""
|
29 |
+
"Funcția get_class nu există! Este necesar ca Hide My WP să funcționeze "
|
30 |
+
"corect."
|
31 |
+
|
32 |
+
#: classes/Error.php:20
|
33 |
+
msgid ""
|
34 |
+
"Function file_exists does not exist! It's required for Hide My WP to work "
|
35 |
+
"properly."
|
36 |
+
msgstr ""
|
37 |
+
"Funcția file_exists nu există! Este necesar ca Hide My WP să funcționeze "
|
38 |
+
"corect."
|
39 |
+
|
40 |
+
#: classes/Error.php:24
|
41 |
+
msgid "The home directory is not set!"
|
42 |
+
msgstr "Directorul de acasă nu este setat!"
|
43 |
+
|
44 |
+
#: classes/Error.php:28
|
45 |
+
msgid "The PHP version has to be greater than 5.1"
|
46 |
+
msgstr "Versiunea PHP trebuie să fie mai mare de 5.1"
|
47 |
+
|
48 |
+
#: classes/Error.php:36
|
49 |
+
msgid ""
|
50 |
+
"For Hide My WP to work, the PHP version has to be equal or greater than 5.1"
|
51 |
+
msgstr ""
|
52 |
+
"Pentru ca Hide My WP să funcționeze, versiunea PHP trebuie să fie egală sau "
|
53 |
+
"mai mare de 5.1"
|
54 |
+
|
55 |
+
#: classes/Tools.php:30 classes/Tools.php:34
|
56 |
+
#, php-format
|
57 |
+
msgid ""
|
58 |
+
"Your memory limit is %sM. You need at least %sM to prevent loading errors in "
|
59 |
+
"frontend. See: %sIncreasing memory allocated to PHP%s"
|
60 |
+
msgstr ""
|
61 |
+
"Limita dvs. de memorie este %sM. Aveți nevoie de cel puțin %sM pentru a "
|
62 |
+
"preveni erorile de încărcare în frontend. Vezi: %sCreșterea memoriei alocate "
|
63 |
+
"PHP %s"
|
64 |
+
|
65 |
+
#: classes/Tools.php:122
|
66 |
+
msgid ""
|
67 |
+
"Your IP has been flagged for potential security violations. Please try again "
|
68 |
+
"in a little while..."
|
69 |
+
msgstr ""
|
70 |
+
"IP-ul dvs. a fost marcat pentru eventuale încălcări de securitate. Încercați "
|
71 |
+
"din nou peste puțin timp ..."
|
72 |
+
|
73 |
+
#: classes/Tools.php:333
|
74 |
+
msgid "Documentation"
|
75 |
+
msgstr "Documentație"
|
76 |
+
|
77 |
+
#: classes/Tools.php:334
|
78 |
+
msgid "Leave a review"
|
79 |
+
msgstr "Lasă o evaluare"
|
80 |
+
|
81 |
+
#: classes/Tools.php:351
|
82 |
+
msgid "Upgrade to Premium"
|
83 |
+
msgstr "Treceți la Premium"
|
84 |
+
|
85 |
+
#: classes/Tools.php:353 controllers/SecurityCheck.php:185
|
86 |
+
msgid "Settings"
|
87 |
+
msgstr "Setări"
|
88 |
+
|
89 |
+
#: classes/Tools.php:1129
|
90 |
+
#, php-format
|
91 |
+
msgid "CONNECTION ERROR! Make sure your website can access: %s"
|
92 |
+
msgstr ""
|
93 |
+
"EROARE DE CONEXIUNE! Asigurați-vă că site-ul dvs. web poate avea acces: %s"
|
94 |
+
|
95 |
+
#: classes/Tools.php:1149
|
96 |
+
msgid "New Login Information"
|
97 |
+
msgstr "Informații de conectare noi"
|
98 |
+
|
99 |
+
#: controllers/Brute.php:34
|
100 |
+
msgid "IP Blocked by Hide My WordPress Brute Force Protection"
|
101 |
+
msgstr "IP Blocat de Hide My WordPress Brute Force Protection"
|
102 |
+
|
103 |
+
#: controllers/Brute.php:62
|
104 |
+
msgid "Add only real IPs. No local ips needed."
|
105 |
+
msgstr "Adăugați doar IP-uri reale. Nu este nevoie de IP local."
|
106 |
+
|
107 |
+
#: controllers/Brute.php:78
|
108 |
+
msgid "Add only real IPs. No local ips allowed."
|
109 |
+
msgstr "Adauga doar IP-uri reale. Nu sunt permise IP-uri locale."
|
110 |
+
|
111 |
+
#: controllers/Brute.php:92
|
112 |
+
msgid "You need to set a positive number of attempts "
|
113 |
+
msgstr "Trebuie să setați un număr pozitiv de încercări"
|
114 |
+
|
115 |
+
#: controllers/Brute.php:100
|
116 |
+
msgid "You need to set a positive waiting time"
|
117 |
+
msgstr "Trebuie să setați un timp de așteptare pozitiv"
|
118 |
+
|
119 |
+
#: controllers/Brute.php:107 controllers/Settings.php:261
|
120 |
+
#: controllers/Settings.php:292 controllers/Settings.php:349
|
121 |
+
#: controllers/Settings.php:362
|
122 |
+
msgid "Saved"
|
123 |
+
msgstr "Salvat"
|
124 |
+
|
125 |
+
#: controllers/Brute.php:134
|
126 |
+
msgid "Cnt"
|
127 |
+
msgstr "Cnt"
|
128 |
+
|
129 |
+
#: controllers/Brute.php:135
|
130 |
+
msgid "IP"
|
131 |
+
msgstr "IP"
|
132 |
+
|
133 |
+
#: controllers/Brute.php:136
|
134 |
+
msgid "Fail Attempts"
|
135 |
+
msgstr "Încercări cu eșec"
|
136 |
+
|
137 |
+
#: controllers/Brute.php:137
|
138 |
+
msgid "Hostname"
|
139 |
+
msgstr "Numele gazdei"
|
140 |
+
|
141 |
+
#: controllers/Brute.php:138
|
142 |
+
msgid "Options"
|
143 |
+
msgstr "Opțiuni"
|
144 |
+
|
145 |
+
#: controllers/Brute.php:160
|
146 |
+
msgid "No blacklisted ips"
|
147 |
+
msgstr "Nu există IP-uri listate negre"
|
148 |
+
|
149 |
+
#: controllers/Brute.php:202
|
150 |
+
#, php-format
|
151 |
+
msgid ""
|
152 |
+
"<strong>ERROR:</strong> Email or Password is incorrect. <br /> %d attempts "
|
153 |
+
"left before lockout"
|
154 |
+
msgstr ""
|
155 |
+
"<strong>EROARE:</strong> e-mailul sau parola sunt incorecte. <br /> % d "
|
156 |
+
"încercări rămase înainte de blocare"
|
157 |
+
|
158 |
+
#: controllers/Menu.php:66 controllers/Menu.php:175
|
159 |
+
msgid "Hide My WP - Customize Permalinks"
|
160 |
+
msgstr "Hide My WP - Personalizează legături permanente"
|
161 |
+
|
162 |
+
#: controllers/Menu.php:67 controllers/Menu.php:176
|
163 |
+
msgid "Change Paths"
|
164 |
+
msgstr "Schimbă căile"
|
165 |
+
|
166 |
+
#: controllers/Menu.php:74 controllers/Menu.php:183
|
167 |
+
msgid "Hide My WP - Mapping"
|
168 |
+
msgstr "Hide My WP - Mapping"
|
169 |
+
|
170 |
+
#: controllers/Menu.php:75 controllers/Menu.php:184 models/Settings.php:17
|
171 |
+
msgid "Mapping"
|
172 |
+
msgstr "Hartă"
|
173 |
+
|
174 |
+
#: controllers/Menu.php:82 controllers/Menu.php:191
|
175 |
+
msgid "Hide My WP - Tweaks"
|
176 |
+
msgstr "Hide My WP - Tweaks"
|
177 |
+
|
178 |
+
#: controllers/Menu.php:83 controllers/Menu.php:192 models/Settings.php:22
|
179 |
+
msgid "Tweaks"
|
180 |
+
msgstr "Alte setari"
|
181 |
+
|
182 |
+
#: controllers/Menu.php:91 controllers/Menu.php:200
|
183 |
+
msgid "Hide My WP - Brute Force Protection"
|
184 |
+
msgstr "Hide My WP - Brute Force Protection"
|
185 |
+
|
186 |
+
#: controllers/Menu.php:92 controllers/Menu.php:201
|
187 |
+
msgid "Brute Force Protection"
|
188 |
+
msgstr "Protecția cu Captcha Math"
|
189 |
+
|
190 |
+
#: controllers/Menu.php:100 controllers/Menu.php:208
|
191 |
+
msgid "Hide My WP - Log Events"
|
192 |
+
msgstr "Hide My WP - Log Evenimente"
|
193 |
+
|
194 |
+
#: controllers/Menu.php:101 controllers/Menu.php:209 models/Settings.php:32
|
195 |
+
#: view/Log.php:70
|
196 |
+
msgid "Log Events"
|
197 |
+
msgstr "Salveaza actiuni"
|
198 |
+
|
199 |
+
#: controllers/Menu.php:109 controllers/Menu.php:217
|
200 |
+
msgid "Hide My WP - Security Check"
|
201 |
+
msgstr "Hide My WP - Verificare de securitate"
|
202 |
+
|
203 |
+
#: controllers/Menu.php:110 controllers/Menu.php:218 models/Settings.php:37
|
204 |
+
#: view/Advanced.php:226 view/Mapping.php:229 view/Permalinks.php:549
|
205 |
+
#: view/Tweaks.php:178
|
206 |
+
msgid "Security Check"
|
207 |
+
msgstr "Verificare de securitate"
|
208 |
+
|
209 |
+
#: controllers/Menu.php:117 controllers/Menu.php:225
|
210 |
+
msgid "Hide My WP - Recommended Plugins"
|
211 |
+
msgstr "Hide My WP - plugin-uri recomandate"
|
212 |
+
|
213 |
+
#: controllers/Menu.php:118 controllers/Menu.php:226
|
214 |
+
msgid "Install Plugins"
|
215 |
+
msgstr "Instalați plugin-uri"
|
216 |
+
|
217 |
+
#: controllers/Menu.php:125 controllers/Menu.php:233
|
218 |
+
msgid "Hide My WP - Backup & Restore"
|
219 |
+
msgstr "Hide My WP - Backup & Restore"
|
220 |
+
|
221 |
+
#: controllers/Menu.php:126 controllers/Menu.php:234 models/Settings.php:48
|
222 |
+
msgid "Backup/Restore"
|
223 |
+
msgstr "Backup / Restore"
|
224 |
+
|
225 |
+
#: controllers/Menu.php:133 controllers/Menu.php:241
|
226 |
+
msgid "Hide My WP - Advanced Settings"
|
227 |
+
msgstr "Hide My WP - Setări avansate"
|
228 |
+
|
229 |
+
#: controllers/Menu.php:134 controllers/Menu.php:242 models/Settings.php:53
|
230 |
+
msgid "Advanced"
|
231 |
+
msgstr "Avansat"
|
232 |
+
|
233 |
+
#: controllers/Menu.php:147 controllers/Settings.php:190
|
234 |
+
msgid "Hide My WP"
|
235 |
+
msgstr "Hide My WP"
|
236 |
+
|
237 |
+
#: controllers/Notice.php:31
|
238 |
+
msgid "Close notification"
|
239 |
+
msgstr "Închide notificare"
|
240 |
+
|
241 |
+
#: controllers/Notice.php:35
|
242 |
+
msgid "Thank you for using Hide My WP?"
|
243 |
+
msgstr "Vă mulțumim că ați folosit Hide My WP"
|
244 |
+
|
245 |
+
#: controllers/Notice.php:36
|
246 |
+
#, php-format
|
247 |
+
msgid ""
|
248 |
+
"Add %sXML-RPC attack protection, SQL/Script firewall, reCaptcha login%s and "
|
249 |
+
"more with Hide My WP Ghost premium features."
|
250 |
+
msgstr ""
|
251 |
+
"Adăugați %s protecție XML-RPC împotriva atacurilor, firewall SQL / Script, "
|
252 |
+
"conectare reCaptcha %s și multe altele cu funcțiile premium Hide My WP Ghost."
|
253 |
+
|
254 |
+
#: controllers/Notice.php:37
|
255 |
+
msgid "See all premium features"
|
256 |
+
msgstr "Vedeți toate funcțiile premium"
|
257 |
+
|
258 |
+
#: controllers/SecurityCheck.php:23
|
259 |
+
msgid ""
|
260 |
+
"You should check your website every week to see if there are any security "
|
261 |
+
"changes."
|
262 |
+
msgstr ""
|
263 |
+
"Ar trebui să vă verificați site-ul web în fiecare săptămână pentru a vedea "
|
264 |
+
"dacă există modificări de securitate."
|
265 |
+
|
266 |
+
#: controllers/SecurityCheck.php:56
|
267 |
+
msgid ""
|
268 |
+
"First, you need to connect Hide My Wp with WPPlugins and switch from Default "
|
269 |
+
"mode to Lite Mode."
|
270 |
+
msgstr ""
|
271 |
+
"În primul rând, trebuie să conectați Hide My Wp cu WPPlugins și să comutați "
|
272 |
+
"din modul implicit în modul Lite."
|
273 |
+
|
274 |
+
#: controllers/SecurityCheck.php:60 view/Brute.php:30 view/Brute.php:31
|
275 |
+
#: view/Brute.php:81 view/Brute.php:94 view/Log.php:12 view/Mapping.php:88
|
276 |
+
#: view/Mapping.php:162 view/Permalinks.php:338 view/Permalinks.php:413
|
277 |
+
#: view/Permalinks.php:444 view/Tweaks.php:27
|
278 |
+
#, php-format
|
279 |
+
msgid "This feature requires %sHide My WP Ghost%s."
|
280 |
+
msgstr "Această caracteristică necesită %sHide My WP Ghost %s."
|
281 |
+
|
282 |
+
#: controllers/SecurityCheck.php:60 view/Brute.php:32 view/Brute.php:82
|
283 |
+
#: view/Brute.php:95 view/Log.php:13 view/Mapping.php:89 view/Mapping.php:163
|
284 |
+
#: view/Permalinks.php:39 view/Permalinks.php:339 view/Permalinks.php:414
|
285 |
+
#: view/Permalinks.php:445 view/Tweaks.php:28
|
286 |
+
msgid "PRO"
|
287 |
+
msgstr "PRO"
|
288 |
+
|
289 |
+
#: controllers/SecurityCheck.php:64
|
290 |
+
msgid "First, you need to switch Hide My Wp from Default mode to Lite Mode."
|
291 |
+
msgstr ""
|
292 |
+
"În primul rând, trebuie să comutați Hide My WP din modul implicit în modul "
|
293 |
+
"Lite."
|
294 |
+
|
295 |
+
#: controllers/SecurityCheck.php:105
|
296 |
+
msgid "PHP Version"
|
297 |
+
msgstr "Versiune PHP"
|
298 |
+
|
299 |
+
#: controllers/SecurityCheck.php:109
|
300 |
+
msgid ""
|
301 |
+
"Using an old version of PHP makes your site slow and prone to hacker attacks "
|
302 |
+
"due to known vulnerabilities that exist in versions of PHP that are no "
|
303 |
+
"longer maintained. <br /><br />You need <strong>PHP 7.0</strong> or higher "
|
304 |
+
"for your website."
|
305 |
+
msgstr ""
|
306 |
+
"Utilizarea unei versiuni vechi de PHP face ca site-ul dvs. să fie lent și "
|
307 |
+
"predispus la atacuri de hackeri din cauza vulnerabilităților cunoscute care "
|
308 |
+
"există în versiunile de PHP care nu mai sunt întreținute. <br /><br /> Aveți "
|
309 |
+
"nevoie de <strong>PHP 7.0</strong> sau o versiune superioară pentru site-ul "
|
310 |
+
"dvs."
|
311 |
+
|
312 |
+
#: controllers/SecurityCheck.php:110
|
313 |
+
msgid ""
|
314 |
+
"Email your hosting company and tell them you'd like to switch to a newer "
|
315 |
+
"version of PHP or move your site to a better hosting company."
|
316 |
+
msgstr ""
|
317 |
+
"Trimiteți prin e-mail companiei dvs. de găzduire și spuneți-le că doriți să "
|
318 |
+
"treceți la o versiune mai nouă de PHP sau să vă mutați site-ul către o "
|
319 |
+
"companie de găzduire mai bună."
|
320 |
+
|
321 |
+
#: controllers/SecurityCheck.php:113
|
322 |
+
msgid "Mysql Version"
|
323 |
+
msgstr "Versiunea Mysql"
|
324 |
+
|
325 |
+
#: controllers/SecurityCheck.php:117
|
326 |
+
msgid ""
|
327 |
+
"Using an old version of MySQL makes your site slow and prone to hacker "
|
328 |
+
"attacks due to known vulnerabilities that exist in versions of MySQL that "
|
329 |
+
"are no longer maintained. <br /><br />You need <strong>Mysql 5.4</strong> or "
|
330 |
+
"higher"
|
331 |
+
msgstr ""
|
332 |
+
"Utilizarea unei versiuni vechi de MySQL face ca site-ul dvs. să fie lent și "
|
333 |
+
"predispus la atacuri de hackeri din cauza vulnerabilităților cunoscute care "
|
334 |
+
"există în versiunile MySQL care nu mai sunt întreținute. <br /><br /> Aveți "
|
335 |
+
"nevoie de <strong>Mysql 5.4</strong> sau mai mare"
|
336 |
+
|
337 |
+
#: controllers/SecurityCheck.php:118
|
338 |
+
msgid ""
|
339 |
+
"Email your hosting company and tell them you'd like to switch to a newer "
|
340 |
+
"version of MySQL or move your site to a better hosting company"
|
341 |
+
msgstr ""
|
342 |
+
"Trimiteți prin e-mail companiei dvs. de găzduire și spuneți-le că doriți să "
|
343 |
+
"treceți la o versiune mai nouă de MySQL sau să vă mutați site-ul către o "
|
344 |
+
"companie de găzduire mai bună"
|
345 |
+
|
346 |
+
#: controllers/SecurityCheck.php:121
|
347 |
+
msgid "WordPress Version"
|
348 |
+
msgstr "Versiune WordPress"
|
349 |
+
|
350 |
+
#: controllers/SecurityCheck.php:125
|
351 |
+
#, php-format
|
352 |
+
msgid ""
|
353 |
+
"You should always update WordPress to the %slatest versions%s. These usually "
|
354 |
+
"include the latest security fixes, and don't alter WP in any significant "
|
355 |
+
"way. These should be applied as soon as WP releases them. <br /><br />When a "
|
356 |
+
"new version of WordPress is available, you will receive an update message on "
|
357 |
+
"your WordPress Admin screens. To update WordPress, click the link in this "
|
358 |
+
"message."
|
359 |
+
msgstr ""
|
360 |
+
"Ar trebui să actualizați WordPress întotdeauna la versiunile %slatest %s. "
|
361 |
+
"Acestea includ de obicei cele mai recente corecții de securitate și nu "
|
362 |
+
"modifică WP-ul într-un mod semnificativ. Acestea ar trebui aplicate imediat "
|
363 |
+
"ce WP le eliberează. <br /><br /> Când o nouă versiune a WordPress este "
|
364 |
+
"disponibilă, veți primi un mesaj de actualizare pe ecranele dvs. de "
|
365 |
+
"administrare WordPress. Pentru a actualiza WordPress, faceți clic pe linkul "
|
366 |
+
"din acest mesaj."
|
367 |
+
|
368 |
+
#: controllers/SecurityCheck.php:126
|
369 |
+
msgid "There is a newer version of WordPress available ({version})."
|
370 |
+
msgstr "Există o versiune mai nouă a WordPress ({versiunea})."
|
371 |
+
|
372 |
+
#: controllers/SecurityCheck.php:129
|
373 |
+
msgid "WP Debug Mode"
|
374 |
+
msgstr "Modul de depanare WP"
|
375 |
+
|
376 |
+
#: controllers/SecurityCheck.php:133
|
377 |
+
msgid ""
|
378 |
+
"Every good developer should turn on debugging before getting started on a "
|
379 |
+
"new plugin or theme. In fact, the WordPress Codex 'highly recommends' that "
|
380 |
+
"developers use WP_DEBUG. <br /><br />Unfortunately, many developers forget "
|
381 |
+
"the debug mode, even when the website is live. Showing debug logs in the "
|
382 |
+
"frontend will let hackers know a lot about your WordPress website."
|
383 |
+
msgstr ""
|
384 |
+
"Fiecare dezvoltator bun ar trebui să pornească depanarea înainte de a începe "
|
385 |
+
"un nou plugin sau o temă. De fapt, WordPress Codex „recomandă cu tărie” ca "
|
386 |
+
"dezvoltatorii să folosească WP_DEBUG. <br /><br /> Din păcate, mulți "
|
387 |
+
"dezvoltatori uită modul de debug, chiar și atunci când site-ul este live. "
|
388 |
+
"Afișarea jurnalelor de depanare în frontend va permite hackerilor să știe "
|
389 |
+
"multe despre site-ul dvs. WordPress."
|
390 |
+
|
391 |
+
#: controllers/SecurityCheck.php:134
|
392 |
+
msgid ""
|
393 |
+
"Disable WP_DEBUG for live websites in wp_config.php <code>define('WP_DEBUG', "
|
394 |
+
"false);</code>"
|
395 |
+
msgstr ""
|
396 |
+
"Dezactivați WP_DEBUG pentru site-urile web live din wp_config.php "
|
397 |
+
"<code>define('WP_DEBUG', false);</code>"
|
398 |
+
|
399 |
+
#: controllers/SecurityCheck.php:138
|
400 |
+
msgid "DB Debug Mode"
|
401 |
+
msgstr "Modul de Debug DB"
|
402 |
+
|
403 |
+
#: controllers/SecurityCheck.php:142
|
404 |
+
msgid ""
|
405 |
+
"It's not safe to have Database Debug turned on. Make sure you don't use "
|
406 |
+
"Database debug on live websites."
|
407 |
+
msgstr ""
|
408 |
+
"Nu este sigur să aveți Debug-ul de baze de date activat. Asigurați-vă că nu "
|
409 |
+
"utilizați debug-ul de baze de date pe site-urile web live."
|
410 |
+
|
411 |
+
#: controllers/SecurityCheck.php:143
|
412 |
+
#, php-format
|
413 |
+
msgid ""
|
414 |
+
"Turn off the debug plugins if your website is live. You can also switch on "
|
415 |
+
"%sHide My Wp > Tweaks > Disable DB Debug in Frontent%s"
|
416 |
+
msgstr ""
|
417 |
+
"Dezactivați plugin-urile de depanare dacă site-ul dvs. web este live. "
|
418 |
+
"Puteți, de asemenea, să activați %sHide My WP > Tweaks> Dezactivați debug-ul "
|
419 |
+
"DB în Frontent %s"
|
420 |
+
|
421 |
+
#: controllers/SecurityCheck.php:147
|
422 |
+
msgid "Script Debug Mode"
|
423 |
+
msgstr "Modul Debug Script"
|
424 |
+
|
425 |
+
#: controllers/SecurityCheck.php:151
|
426 |
+
msgid ""
|
427 |
+
"Every good developer should turn on debugging before getting started on a "
|
428 |
+
"new plugin or theme. In fact, the WordPress Codex 'highly recommends' that "
|
429 |
+
"developers use SCRIPT_DEBUG. Unfortunately, many developers forget the debug "
|
430 |
+
"mode even when the website is live. Showing debug logs in the frontend will "
|
431 |
+
"let hackers know a lot about your WordPress website."
|
432 |
+
msgstr ""
|
433 |
+
"Fiecare dezvoltator bun ar trebui să pornească depanarea înainte de a începe "
|
434 |
+
"un nou plugin sau o temă. De fapt, WordPress Codex „recomandă cu tărie” ca "
|
435 |
+
"dezvoltatorii să utilizeze SCRIPT_DEBUG. Din păcate, mulți dezvoltatori uită "
|
436 |
+
"modul de depanare chiar și atunci când site-ul este live. Afișarea "
|
437 |
+
"jurnalelor de depanare în frontend va permite hackerilor să știe multe "
|
438 |
+
"despre site-ul dvs. WordPress."
|
439 |
+
|
440 |
+
#: controllers/SecurityCheck.php:152
|
441 |
+
msgid ""
|
442 |
+
"Disable SCRIPT_DEBUG for live websites in wp_config.php "
|
443 |
+
"<code>define('SCRIPT_DEBUG', false);</code>"
|
444 |
+
msgstr ""
|
445 |
+
"Dezactivați SCRIPT_DEBUG pentru site-urile web live în wp_config.php "
|
446 |
+
"<code>define('SCRIPT_DEBUG', false);</code>"
|
447 |
+
|
448 |
+
#: controllers/SecurityCheck.php:156
|
449 |
+
msgid "display_errors PHP directive"
|
450 |
+
msgstr "display_errors Directiva PHP"
|
451 |
+
|
452 |
+
#: controllers/SecurityCheck.php:160
|
453 |
+
msgid ""
|
454 |
+
"Displaying any kind of debug info in the frontend is extremely bad. If any "
|
455 |
+
"PHP errors happen on your site they should be logged in a safe place and not "
|
456 |
+
"displayed to visitors or potential attackers."
|
457 |
+
msgstr ""
|
458 |
+
"Afișarea oricăror informații de depanare în frontend este extrem de proastă. "
|
459 |
+
"Dacă apar erori PHP pe site-ul dvs., acestea ar trebui să fie conectate într-"
|
460 |
+
"un loc sigur și să nu fie afișate vizitatorilor sau potențialilor atacatori."
|
461 |
+
|
462 |
+
#: controllers/SecurityCheck.php:161
|
463 |
+
msgid "Edit wp_config.php and add <code>ini_set('display_errors', 0);</code>"
|
464 |
+
msgstr ""
|
465 |
+
"Editați wp_config.php și adăugați <code>ini_set('display_errors', 0);</code>"
|
466 |
+
|
467 |
+
#: controllers/SecurityCheck.php:164
|
468 |
+
msgid "Backend under SSL"
|
469 |
+
msgstr "Backend sub SSL"
|
470 |
+
|
471 |
+
#: controllers/SecurityCheck.php:168
|
472 |
+
msgid ""
|
473 |
+
"SSL is an abbreviation used for Secure Sockets Layers, which are encryption "
|
474 |
+
"protocols used on the internet to secure information exchange and provide "
|
475 |
+
"certificate information.<br /><br />These certificates provide an assurance "
|
476 |
+
"to the user about the identity of the website they are communicating with. "
|
477 |
+
"SSL may also be called TLS or Transport Layer Security protocol. <br /><br /"
|
478 |
+
">It's important to have a secure connection for the Admin Dashboard in "
|
479 |
+
"WordPress."
|
480 |
+
msgstr ""
|
481 |
+
"SSL este o prescurtare folosită pentru Secure Sockets Layers, care sunt "
|
482 |
+
"protocoale de criptare utilizate pe internet pentru securizarea schimbului "
|
483 |
+
"de informații și furnizarea informațiilor despre certificat. <br /><br /> "
|
484 |
+
"Aceste certificate oferă utilizatorului o asigurare despre identitatea site-"
|
485 |
+
"ului web cu care comunică. SSL mai poate fi denumit protocol TLS sau "
|
486 |
+
"Transport Layer Security. <br /><br /> Este important să aveți o conexiune "
|
487 |
+
"sigură pentru tabloul de bord administrat în WordPress."
|
488 |
+
|
489 |
+
#: controllers/SecurityCheck.php:169
|
490 |
+
#, php-format
|
491 |
+
msgid "Learn how to set your website as %s. %sClick Here%s"
|
492 |
+
msgstr "Aflați cum să setați site-ul dvs. ca %s. %s Faceți clic aici %s"
|
493 |
+
|
494 |
+
#: controllers/SecurityCheck.php:172
|
495 |
+
msgid "User 'admin' as Administrator"
|
496 |
+
msgstr "Utilizator 'admin' ca administrator"
|
497 |
+
|
498 |
+
#: controllers/SecurityCheck.php:176
|
499 |
+
msgid ""
|
500 |
+
"In the old days, the default WordPress admin username was 'admin'. Since "
|
501 |
+
"usernames make up half of the login credentials, this made it easier for "
|
502 |
+
"hackers to launch brute-force attacks. <br /><br />Thankfully, WordPress has "
|
503 |
+
"since changed this and now requires you to select a custom username at the "
|
504 |
+
"time of installing WordPress."
|
505 |
+
msgstr ""
|
506 |
+
"Pe vremuri, numele de utilizator WordPress admin era implicit 'admin'. "
|
507 |
+
"Întrucât numele de utilizator alcătuiesc jumătate din datele de "
|
508 |
+
"autentificare de conectare, acest lucru a făcut mai ușor pentru hackeri să "
|
509 |
+
"lanseze atacuri de forță brută. <br /><br /> Din fericire, WordPress a "
|
510 |
+
"schimbat de atunci și acum necesită să selectați un nume de utilizator "
|
511 |
+
"personalizat în momentul instalării WordPress."
|
512 |
+
|
513 |
+
#: controllers/SecurityCheck.php:177
|
514 |
+
msgid "Change the user 'admin' with another name to improve security."
|
515 |
+
msgstr ""
|
516 |
+
"Modificați utilizatorul 'admin' cu un alt nume pentru a îmbunătăți "
|
517 |
+
"securitatea."
|
518 |
+
|
519 |
+
#: controllers/SecurityCheck.php:180
|
520 |
+
msgid "Spammers can easily signup"
|
521 |
+
msgstr "Spammerii se pot înscrie cu ușurință"
|
522 |
+
|
523 |
+
#: controllers/SecurityCheck.php:184
|
524 |
+
msgid ""
|
525 |
+
"If you do not have an e-commerce, membership or guest posting website, you "
|
526 |
+
"shouldn't let users subscribe to your blog. You will end up with spam "
|
527 |
+
"registrations and your website will be filled with spammy content and "
|
528 |
+
"comments."
|
529 |
+
msgstr ""
|
530 |
+
"Dacă nu aveți un site de comerț electronic, membru sau postare de invitați, "
|
531 |
+
"nu ar trebui să lăsați utilizatorii să se aboneze la blogul dvs. Veți ajunge "
|
532 |
+
"la înregistrări spam și site-ul dvs. web va fi completat cu conținut spam și "
|
533 |
+
"comentarii."
|
534 |
+
|
535 |
+
#: controllers/SecurityCheck.php:185
|
536 |
+
#, php-format
|
537 |
+
msgid ""
|
538 |
+
"Change the signup path from %sHide My Wp > Custom Register URL%s or uncheck "
|
539 |
+
"the option %s > %s > %s"
|
540 |
+
msgstr ""
|
541 |
+
"Schimbați calea de înscriere din %sHide Wp My> Personalizează calea de "
|
542 |
+
"înregistrare %s sau debifați opțiunea %s> %s> %s"
|
543 |
+
|
544 |
+
#: controllers/SecurityCheck.php:185 controllers/SecurityCheck.php:444
|
545 |
+
msgid "General"
|
546 |
+
msgstr "General"
|
547 |
+
|
548 |
+
#: controllers/SecurityCheck.php:185
|
549 |
+
msgid "Membership"
|
550 |
+
msgstr "Abonament"
|
551 |
+
|
552 |
+
#: controllers/SecurityCheck.php:188
|
553 |
+
msgid "Outdated Plugins"
|
554 |
+
msgstr "Plugin-uri învechite"
|
555 |
+
|
556 |
+
#: controllers/SecurityCheck.php:192
|
557 |
+
msgid ""
|
558 |
+
"WordPress and its plugins and themes are like any other software installed "
|
559 |
+
"on your computer, and like any other application on your devices. "
|
560 |
+
"Periodically, developers release updates which provide new features, or fix "
|
561 |
+
"known bugs. <br /><br />These new features may not necessarily be something "
|
562 |
+
"that you want. In fact, you may be perfectly satisfied with the "
|
563 |
+
"functionality you currently have. Nevertheless, you are still likely to be "
|
564 |
+
"concerned about bugs.<br /><br />Software bugs can come in many shapes and "
|
565 |
+
"sizes. A bug could be very serious, such as preventing users from using a "
|
566 |
+
"plugin, or it could be minor and only affect a certain part of a theme, for "
|
567 |
+
"example. In some cases, bugs can cause serious security holes. <br /><br /"
|
568 |
+
">Keeping plugins up to date is one of the most important and easiest ways to "
|
569 |
+
"keep your site secure."
|
570 |
+
msgstr ""
|
571 |
+
"WordPress și plugin-urile și temele sale sunt ca orice alt software instalat "
|
572 |
+
"pe computer și ca orice altă aplicație de pe dispozitivele tale. Periodic, "
|
573 |
+
"dezvoltatorii eliberează actualizări care furnizează noi funcții sau rezolvă "
|
574 |
+
"erorile cunoscute. <br /><br /> Aceste funcții noi pot să nu fie neapărat "
|
575 |
+
"ceva pe care îl doriți. De fapt, este posibil să fiți perfect satisfăcut de "
|
576 |
+
"funcționalitatea pe care o aveți în prezent. Cu toate acestea, sunteți încă "
|
577 |
+
"preocupat de erori. <br /><br /> Bug-urile software pot avea mai multe forme "
|
578 |
+
"și dimensiuni. Un bug ar putea fi foarte grav, cum ar fi împiedicarea "
|
579 |
+
"utilizatorilor de a utiliza un plugin sau poate fi minor și poate afecta "
|
580 |
+
"doar o anumită parte a unei teme, de exemplu. În unele cazuri, bug-urile pot "
|
581 |
+
"provoca grave găuri de securitate. <br /><br /> Menținerea plugin-urilor la "
|
582 |
+
"zi este una dintre cele mai importante și mai simple modalități de a vă "
|
583 |
+
"proteja site-ul."
|
584 |
+
|
585 |
+
#: controllers/SecurityCheck.php:193 controllers/SecurityCheck.php:201
|
586 |
+
msgid "Go to the Updates page and update all the plugins to the last version."
|
587 |
+
msgstr ""
|
588 |
+
"Accesați pagina Actualizări și actualizați toate plugin-urile la ultima "
|
589 |
+
"versiune."
|
590 |
+
|
591 |
+
#: controllers/SecurityCheck.php:196
|
592 |
+
msgid "Not Updated Plugins"
|
593 |
+
msgstr "Pluginuri neactualizate"
|
594 |
+
|
595 |
+
#: controllers/SecurityCheck.php:200
|
596 |
+
msgid ""
|
597 |
+
"Plugins that have not been updated in the last 12 months can have real "
|
598 |
+
"security problems. Make sure you use updated plugins from WordPress "
|
599 |
+
"Directory."
|
600 |
+
msgstr ""
|
601 |
+
"Pluginurile care nu au fost actualizate în ultimele 12 luni pot avea "
|
602 |
+
"probleme reale de securitate. Asigurați-vă că utilizați plugin-uri "
|
603 |
+
"actualizate din Directory WordPress."
|
604 |
+
|
605 |
+
#: controllers/SecurityCheck.php:204
|
606 |
+
msgid "Version Incompatible Plugins"
|
607 |
+
msgstr "Plugin-uri incompatibile cu versiunea"
|
608 |
+
|
609 |
+
#: controllers/SecurityCheck.php:208
|
610 |
+
msgid ""
|
611 |
+
"Plugins that are incompatible with your version of WordPress can have real "
|
612 |
+
"security problems. Make sure you use tested plugins from WordPress Directory."
|
613 |
+
msgstr ""
|
614 |
+
"Pluginurile care sunt incompatibile cu versiunea dvs. de WordPress pot avea "
|
615 |
+
"probleme reale de securitate. Asigurați-vă că utilizați plugin-uri testate "
|
616 |
+
"din Directory WordPress."
|
617 |
+
|
618 |
+
#: controllers/SecurityCheck.php:209
|
619 |
+
msgid "Make sure you use tested plugins from WordPress Directory."
|
620 |
+
msgstr "Asigurați-vă că utilizați plugin-uri testate din Directory WordPress."
|
621 |
+
|
622 |
+
#: controllers/SecurityCheck.php:212
|
623 |
+
msgid "Outdated Themes"
|
624 |
+
msgstr "Teme învechite"
|
625 |
+
|
626 |
+
#: controllers/SecurityCheck.php:216
|
627 |
+
msgid ""
|
628 |
+
"WordPress and its plugins and themes are like any other software installed "
|
629 |
+
"on your computer, and like any other application on your devices. "
|
630 |
+
"Periodically developers release updates which provide new features or fix "
|
631 |
+
"known bugs. <br /><br />New features may be something that you do not "
|
632 |
+
"necessarily want. In fact, you may be perfectly satisfied with the "
|
633 |
+
"functionality you currently have. Nevertheless, you may still be concerned "
|
634 |
+
"about bugs.<br /><br />Software bugs can come in many shapes and sizes. A "
|
635 |
+
"bug could be very serious, such as preventing users from using a plugin, or "
|
636 |
+
"it could be a minor bug that only affects a certain part of a theme, for "
|
637 |
+
"example. In some cases, bugs can even cause serious security holes.<br /"
|
638 |
+
"><br />Keeping themes up to date is one of the most important and easiest "
|
639 |
+
"ways to keep your site secure."
|
640 |
+
msgstr ""
|
641 |
+
"WordPress și plugin-urile și temele sale sunt ca orice alt software instalat "
|
642 |
+
"pe computer și ca orice altă aplicație de pe dispozitivele tale. Periodic, "
|
643 |
+
"dezvoltatorii eliberează actualizări care furnizează noi funcții sau rezolvă "
|
644 |
+
"erori cunoscute. <br /><br /> Funcțiile noi pot fi ceva ce nu doriți "
|
645 |
+
"neapărat. De fapt, este posibil să fiți perfect satisfăcut de "
|
646 |
+
"funcționalitatea pe care o aveți în prezent. Cu toate acestea, este posibil "
|
647 |
+
"să fiți încă preocupat de erori. <br /><br /> Bug-urile software pot avea "
|
648 |
+
"mai multe forme și dimensiuni. Un bug ar putea fi foarte grav, cum ar fi "
|
649 |
+
"împiedicarea utilizatorilor de a utiliza un plugin sau ar putea fi un bug "
|
650 |
+
"minor care afectează doar o anumită parte a unei teme, de exemplu. În unele "
|
651 |
+
"cazuri, bug-urile pot provoca chiar găuri de securitate grave. <br /><br /> "
|
652 |
+
"Menținerea temelor la zi este una dintre cele mai importante și mai simple "
|
653 |
+
"modalități de a vă proteja site-ul."
|
654 |
+
|
655 |
+
#: controllers/SecurityCheck.php:217
|
656 |
+
msgid "Go to the Updates page and update all the themes to the last version."
|
657 |
+
msgstr ""
|
658 |
+
"Accesați pagina Actualizări și actualizați toate temele la ultima versiune."
|
659 |
+
|
660 |
+
#: controllers/SecurityCheck.php:220
|
661 |
+
msgid "Database Prefix"
|
662 |
+
msgstr "Prefixul bazei de date"
|
663 |
+
|
664 |
+
#: controllers/SecurityCheck.php:224
|
665 |
+
msgid ""
|
666 |
+
"The WordPress database is like a brain for your entire WordPress site, "
|
667 |
+
"because every single bit of information about your site is stored there, "
|
668 |
+
"thus making it a hacker’s favorite target. <br /><br />Spammers and hackers "
|
669 |
+
"run automated code for SQL injections.<br />Unfortunately, many people "
|
670 |
+
"forget to change the database prefix when they install WordPress. <br />This "
|
671 |
+
"makes it easier for hackers to plan a mass attack by targeting the default "
|
672 |
+
"prefix <strong>wp_</strong>."
|
673 |
+
msgstr ""
|
674 |
+
"Baza de date WordPress este ca un creier pentru întregul dvs. site "
|
675 |
+
"WordPress, deoarece fiecare informație despre site-ul dvs. este stocată "
|
676 |
+
"acolo, devenind astfel o țintă preferată a hackerilor. <br /><br /> "
|
677 |
+
"Spammerii și hackerii rulează cod automat pentru injecții SQL. <br /> Din "
|
678 |
+
"păcate, mulți oameni uită să schimbe prefixul bazei de date atunci când "
|
679 |
+
"instalează WordPress. <br /> Acest lucru face mai ușor pentru hackeri să "
|
680 |
+
"planifice un atac de masă, vizând prefixul implicit <strong>wp_</strong> ."
|
681 |
+
|
682 |
+
#: controllers/SecurityCheck.php:225
|
683 |
+
#, php-format
|
684 |
+
msgid ""
|
685 |
+
"Hide My WP protects your website from most SQL injections but, if possible, "
|
686 |
+
"use a custom prefix for database tables to avoid SQL injections. %sRead more"
|
687 |
+
"%s"
|
688 |
+
msgstr ""
|
689 |
+
"Hide My WP protejează site-ul dvs. de majoritatea injecțiilor SQL, dar, dacă "
|
690 |
+
"este posibil, utilizați un prefix personalizat pentru tabelele bazei de date "
|
691 |
+
"pentru a evita injecțiile SQL. %sCitește mai mult %s"
|
692 |
+
|
693 |
+
#: controllers/SecurityCheck.php:228
|
694 |
+
msgid "Versions in Source Code"
|
695 |
+
msgstr "Versiuni în Codul Sursă"
|
696 |
+
|
697 |
+
#: controllers/SecurityCheck.php:232
|
698 |
+
msgid ""
|
699 |
+
"WordPress, plugins and themes add their version info to the source code, so "
|
700 |
+
"anyone can see it. <br /><br />Hackers can easily find a website with "
|
701 |
+
"vulnerable version plugins or themes, and target these with Zero-Day "
|
702 |
+
"Exploits."
|
703 |
+
msgstr ""
|
704 |
+
"WordPress, plugin-urile și temele adaugă informațiile versiunii lor la codul "
|
705 |
+
"sursă, astfel încât oricine să-l poată vedea. <br /><br /> Hackerii pot găsi "
|
706 |
+
"cu ușurință un site web cu plugin-uri sau teme pentru versiuni vulnerabile "
|
707 |
+
"și le pot viza cu Exploit-uri Zero-Day."
|
708 |
+
|
709 |
+
#: controllers/SecurityCheck.php:233
|
710 |
+
#, php-format
|
711 |
+
msgid "Switch on %sHide My WP > Tweaks > %s %s"
|
712 |
+
msgstr "Activați %sHide My WP> Tweaks> %s %s"
|
713 |
+
|
714 |
+
#: controllers/SecurityCheck.php:233 view/Tweaks.php:65
|
715 |
+
msgid "Hide Versions and WordPress Tags"
|
716 |
+
msgstr "Ascundeți versiunile și etichetele WordPress"
|
717 |
+
|
718 |
+
#: controllers/SecurityCheck.php:237
|
719 |
+
msgid "Salts and Security Keys valid"
|
720 |
+
msgstr "Sare și chei de securitate valabile"
|
721 |
+
|
722 |
+
#: controllers/SecurityCheck.php:241
|
723 |
+
msgid ""
|
724 |
+
"Security keys are used to ensure better encryption of information stored in "
|
725 |
+
"the user's cookies and hashed passwords. <br /><br />These make your site "
|
726 |
+
"more difficult to hack, access and crack by adding random elements to the "
|
727 |
+
"password. You don't have to remember these keys. In fact, once you set them "
|
728 |
+
"you'll never see them again. Therefore there's no excuse for not setting "
|
729 |
+
"them properly."
|
730 |
+
msgstr ""
|
731 |
+
"Cheile de securitate sunt utilizate pentru a asigura o mai bună criptare a "
|
732 |
+
"informațiilor stocate în cookie-urile utilizatorului și parolele hashed. "
|
733 |
+
"<br /><br /> Acestea fac site-ul dvs. mai dificil de hack, accesat și crack "
|
734 |
+
"prin adăugarea de elemente aleatorii la parola. Nu trebuie să vă amintiți "
|
735 |
+
"aceste chei. De fapt, odată ce le setați, nu le veți mai vedea niciodată. "
|
736 |
+
"Prin urmare, nu există nicio scuză pentru a nu le seta corect."
|
737 |
+
|
738 |
+
#: controllers/SecurityCheck.php:242
|
739 |
+
msgid ""
|
740 |
+
"Security keys are defined in wp-config.php as constants on lines. They "
|
741 |
+
"should be as unique and as long as possible. <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
742 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
743 |
+
"NONCE_SALT</code>"
|
744 |
+
msgstr ""
|
745 |
+
"Cheile de securitate sunt definite în wp-config.php ca constante pe linii. "
|
746 |
+
"Acestea ar trebui să fie cât mai unice și cât mai lungi. <code>AUTH_KEY,"
|
747 |
+
"SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,"
|
748 |
+
"LOGGED_IN_SALT,NONCE_SALT</code>"
|
749 |
+
|
750 |
+
#: controllers/SecurityCheck.php:245
|
751 |
+
msgid "Security Keys Updated"
|
752 |
+
msgstr "Cheile de securitate actualizate"
|
753 |
+
|
754 |
+
#: controllers/SecurityCheck.php:249
|
755 |
+
msgid ""
|
756 |
+
"The security keys in wp-config.php should be renewed as often as possible."
|
757 |
+
msgstr ""
|
758 |
+
"Cheile de securitate din wp-config.php ar trebui reînnoite cât mai des "
|
759 |
+
"posibil."
|
760 |
+
|
761 |
+
#: controllers/SecurityCheck.php:250
|
762 |
+
#, php-format
|
763 |
+
msgid ""
|
764 |
+
"You can generate %snew Keys from here%s <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
765 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
766 |
+
"NONCE_SALT</code>"
|
767 |
+
msgstr ""
|
768 |
+
"Puteți genera %s chei necunoscute de aici %s <code>AUTH_KEY,SECURE_AUTH_KEY,"
|
769 |
+
"LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,"
|
770 |
+
"NONCE_SALT</code>"
|
771 |
+
|
772 |
+
#: controllers/SecurityCheck.php:253
|
773 |
+
msgid "WordPress dDatabase Password"
|
774 |
+
msgstr "Parolă WordPress dDatabase"
|
775 |
+
|
776 |
+
#: controllers/SecurityCheck.php:257
|
777 |
+
msgid ""
|
778 |
+
"There is no such thing as an \"unimportant password\"! The same goes for "
|
779 |
+
"your WordPress database password. <br />Although most servers are configured "
|
780 |
+
"so that the database can't be accessed from other hosts (or from outside of "
|
781 |
+
"the local network), that doesn't mean your database password should be "
|
782 |
+
"\"12345\" or no password at all."
|
783 |
+
msgstr ""
|
784 |
+
"Nu există o țparolă fără importanțăț! Același lucru este valabil și pentru "
|
785 |
+
"parola dvs. de bază de date WordPress. <br /> Deși majoritatea serverelor "
|
786 |
+
"sunt configurate astfel încât baza de date să nu poată fi accesată de la "
|
787 |
+
"alte gazde (sau din afara rețelei locale), asta nu înseamnă că parola bazei "
|
788 |
+
"dvs. de date ar trebui să fie „12345” sau deloc o parolă."
|
789 |
+
|
790 |
+
#: controllers/SecurityCheck.php:258
|
791 |
+
msgid ""
|
792 |
+
"Choose a proper database password, at least 8 characters long with a "
|
793 |
+
"combination of letters, numbers and special characters. After you change it, "
|
794 |
+
"set the new password in the wp_config.php file <code>define('DB_PASSWORD', "
|
795 |
+
"'NEW_DB_PASSWORD_GOES_HERE');</code>"
|
796 |
+
msgstr ""
|
797 |
+
"Alegeți o parolă adecvată a bazei de date, de cel puțin 8 caractere cu o "
|
798 |
+
"combinație de litere, numere și caractere speciale. După ce o schimbați, "
|
799 |
+
"setați noua parolă în fișierul wp_config.php <code>define('DB_PASSWORD', "
|
800 |
+
"'NEW_DB_PASSWORD_GOES_HERE');</code>"
|
801 |
+
|
802 |
+
#: controllers/SecurityCheck.php:269
|
803 |
+
msgid "/wp-content is visible in source code"
|
804 |
+
msgstr "/wp-content este vizibil în codul sursă"
|
805 |
+
|
806 |
+
#: controllers/SecurityCheck.php:273
|
807 |
+
msgid ""
|
808 |
+
"It's important to rename common WordPress paths, such as wp-content and wp-"
|
809 |
+
"includes to prevent hackers from knowing that you have a WordPress website."
|
810 |
+
msgstr ""
|
811 |
+
"Este important să redenumiți căile comune WordPress, cum ar fi wp-content și "
|
812 |
+
"wp-include pentru a împiedica hackerii să știe că aveți un site WordPress."
|
813 |
+
|
814 |
+
#: controllers/SecurityCheck.php:274
|
815 |
+
#, php-format
|
816 |
+
msgid ""
|
817 |
+
"Change the wp-content, wp-includes and other common paths with %sHide My Wp "
|
818 |
+
"> Permalinks%s"
|
819 |
+
msgstr ""
|
820 |
+
"Modificați wp-content, wp-include și alte căi comune cu %sHide My Wp> "
|
821 |
+
"Permalinking %s"
|
822 |
+
|
823 |
+
#: controllers/SecurityCheck.php:277
|
824 |
+
msgid "/wp-content path is accessible"
|
825 |
+
msgstr "/wp-content este accesibilă"
|
826 |
+
|
827 |
+
#: controllers/SecurityCheck.php:281
|
828 |
+
msgid ""
|
829 |
+
"It's important to hide the common WordPress paths to prevent attacks on "
|
830 |
+
"vulnerable plugins and themes. <br /> Also, it's important to hide the names "
|
831 |
+
"of plugins and themes to make it impossible for bots to detect them."
|
832 |
+
msgstr ""
|
833 |
+
"Este important să ascundeți căile comune WordPress pentru a preveni "
|
834 |
+
"atacurile asupra plugin-urilor și temelor vulnerabile. <br /> De asemenea, "
|
835 |
+
"este important să ascundeți numele de plugin-uri și teme pentru a face "
|
836 |
+
"imposibilă detectarea de către roboți."
|
837 |
+
|
838 |
+
#: controllers/SecurityCheck.php:282
|
839 |
+
#, php-format
|
840 |
+
msgid ""
|
841 |
+
"Switch on %sHide My Wp > Hide WordPress Common Paths%s to hide the old paths"
|
842 |
+
msgstr ""
|
843 |
+
"Activează %sHide My Wp> Ascunde căile comune WordPress %s pentru a ascunde "
|
844 |
+
"căile vechi"
|
845 |
+
|
846 |
+
#: controllers/SecurityCheck.php:286 controllers/SecurityCheck.php:294
|
847 |
+
#, php-format
|
848 |
+
msgid "%s is visible in source code"
|
849 |
+
msgstr "%s este vizibil în codul sursă"
|
850 |
+
|
851 |
+
#: controllers/SecurityCheck.php:290
|
852 |
+
#, php-format
|
853 |
+
msgid ""
|
854 |
+
"Having the admin URL visible in the source code it's really bad because "
|
855 |
+
"hackers will immediately know your secret admin path and start a Brute Force "
|
856 |
+
"attack. The custom admin path should not appear in the ajax URL. <br /><br /"
|
857 |
+
">Find solutions for %show to hide the path from source code%s."
|
858 |
+
msgstr ""
|
859 |
+
"Dacă URL-ul admin este vizibil în codul sursă, este foarte rău, deoarece "
|
860 |
+
"hackerii vor cunoaște imediat calea ta secretă de administrare și vor începe "
|
861 |
+
"un atac al Forței Brute. Calea de administrare personalizată nu trebuie să "
|
862 |
+
"apară pe adresa URL ajax. <br /><br /> Găsiți soluții pentru %show pentru a "
|
863 |
+
"ascunde calea de codul sursă %s."
|
864 |
+
|
865 |
+
#: controllers/SecurityCheck.php:291
|
866 |
+
#, php-format
|
867 |
+
msgid ""
|
868 |
+
"Switch on %sHide My WP > Permalinks > Hide wp-admin from ajax URL%s. Hide "
|
869 |
+
"any reference to admin path from the installed plugins."
|
870 |
+
msgstr ""
|
871 |
+
"Activați %sHide My WP> Legături permanente> Ascunde wp-admin de la URL-ul "
|
872 |
+
"ajax %s. Ascundeți orice referință la calea admin din plugin-urile instalate."
|
873 |
+
|
874 |
+
#: controllers/SecurityCheck.php:298
|
875 |
+
#, php-format
|
876 |
+
msgid ""
|
877 |
+
"Having the login URL visible in the source code it's really bad because "
|
878 |
+
"hackers will immediately know your secret login path and start a Brute Force "
|
879 |
+
"attack. <br /><br />The custom login path should be kept secret and with the "
|
880 |
+
"Brute Force Protection activated for it. <br ><br />Find solutions for %show "
|
881 |
+
"to hide the path from source code%s."
|
882 |
+
msgstr ""
|
883 |
+
"Dacă adresa URL de conectare este vizibilă în codul sursă, este într-adevăr "
|
884 |
+
"rău, deoarece hackerii vor cunoaște imediat calea ta de conectare secretă și "
|
885 |
+
"vor începe un atac Brute Force. <br /><br /> Calea de conectare "
|
886 |
+
"personalizată ar trebui să fie ținută secretă și cu Brute Force Protection "
|
887 |
+
"activată pentru aceasta. <br ><br /> Găsiți soluții pentru %show pentru a "
|
888 |
+
"ascunde calea de codul sursă %s."
|
889 |
+
|
890 |
+
#: controllers/SecurityCheck.php:299
|
891 |
+
#, php-format
|
892 |
+
msgid "%sHide the login path%s from theme menu or widget."
|
893 |
+
msgstr "%s Ascunde login %s din meniul tematic sau widget."
|
894 |
+
|
895 |
+
#: controllers/SecurityCheck.php:302
|
896 |
+
msgid "/wp-login path is accessible"
|
897 |
+
msgstr "/wp-login este accesibilă"
|
898 |
+
|
899 |
+
#: controllers/SecurityCheck.php:306
|
900 |
+
msgid ""
|
901 |
+
"If your site allows user logins, you need your login page to be easy to find "
|
902 |
+
"for your users. You also need to do other things to protect against "
|
903 |
+
"malicious login attempts. <br /><br />However, obscurity is a valid security "
|
904 |
+
"layer when used as part of a comprehensive security strategy, and if you "
|
905 |
+
"want to cut down on the number of malicious login attempts. Making your "
|
906 |
+
"login page difficult to find is one way to do that."
|
907 |
+
msgstr ""
|
908 |
+
"Dacă site-ul dvs. permite conectarea utilizatorilor, aveți nevoie de pagina "
|
909 |
+
"dvs. de conectare pentru a fi ușor de găsit pentru utilizatorii dvs. De "
|
910 |
+
"asemenea, trebuie să faceți alte lucruri pentru a vă proteja împotriva "
|
911 |
+
"încercărilor de conectare rău intenționate. <br /><br /> Cu toate acestea, "
|
912 |
+
"obscuritatea este un strat de securitate valid atunci când este utilizată ca "
|
913 |
+
"parte a unei strategii de securitate cuprinzătoare și dacă doriți să "
|
914 |
+
"reduceți numărul de încercări de conectare rău intenționate. A face dificilă "
|
915 |
+
"găsirea paginii de conectare este o modalitate de a face acest lucru."
|
916 |
+
|
917 |
+
#: controllers/SecurityCheck.php:307
|
918 |
+
#, php-format
|
919 |
+
msgid ""
|
920 |
+
"Change the wp-login from %sHide My Wp > Custom login URL%s and Switch on "
|
921 |
+
"%sHide My Wp > Brute Force Protection%s"
|
922 |
+
msgstr ""
|
923 |
+
"Modificați wp-login din %sHide My Wp> Personalizează login URL %s și porniți "
|
924 |
+
"%sHide My Wp> Brute Force Protection %s"
|
925 |
+
|
926 |
+
#: controllers/SecurityCheck.php:310
|
927 |
+
msgid "/wp_config.php file is writable"
|
928 |
+
msgstr "Fișierul /wp_config.php este accesibil pentru scriere"
|
929 |
+
|
930 |
+
#: controllers/SecurityCheck.php:314
|
931 |
+
msgid ""
|
932 |
+
"One of the most important files in your WordPress installation is the wp-"
|
933 |
+
"config.php file. <br />This file is located in the root directory of your "
|
934 |
+
"WordPress installation, and contains your website's base configuration "
|
935 |
+
"details, such as database connection information."
|
936 |
+
msgstr ""
|
937 |
+
"Unul dintre cele mai importante fișiere din instalarea dvs. WordPress este "
|
938 |
+
"fișierul wp-config.php. <br /> Acest fișier este localizat în directorul "
|
939 |
+
"rădăcină al instalării WordPress și conține detaliile de configurare de bază "
|
940 |
+
"ale site-ului dvs., cum ar fi informațiile despre conexiunea bazei de date."
|
941 |
+
|
942 |
+
#: controllers/SecurityCheck.php:315
|
943 |
+
#, php-format
|
944 |
+
msgid ""
|
945 |
+
"Try setting chmod to %s0400%s or %s0440%s and if the website works normally "
|
946 |
+
"that's the best one to use."
|
947 |
+
msgstr ""
|
948 |
+
"Încercați să setați chmod la %s0400 %s sau %s0440 %s și dacă site-ul web "
|
949 |
+
"funcționează normal, acesta este cel mai bun de utilizat."
|
950 |
+
|
951 |
+
#: controllers/SecurityCheck.php:318
|
952 |
+
msgid "wp-config.php & wp-config-sample.php files are accessible "
|
953 |
+
msgstr "Fișierele wp-config.php și wp-config-sample.php sunt accesibile "
|
954 |
+
|
955 |
+
#: controllers/SecurityCheck.php:322
|
956 |
+
msgid ""
|
957 |
+
"One of the most important files in your WordPress installation is the wp-"
|
958 |
+
"config.php file. <br />This file is located in the root directory of your "
|
959 |
+
"WordPress installation and contains your website's base configuration "
|
960 |
+
"details, such as database connection information."
|
961 |
+
msgstr ""
|
962 |
+
"Unul dintre cele mai importante fișiere din instalarea dvs. WordPress este "
|
963 |
+
"fișierul wp-config.php. <br /> Acest fișier este localizat în directorul "
|
964 |
+
"rădăcină al instalării WordPress și conține detaliile de configurare de bază "
|
965 |
+
"ale site-ului dvs., cum ar fi informațiile despre conexiunea bazei de date."
|
966 |
+
|
967 |
+
#: controllers/SecurityCheck.php:323
|
968 |
+
#, php-format
|
969 |
+
msgid ""
|
970 |
+
"Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-config.php "
|
971 |
+
"& wp-config-sample.php files"
|
972 |
+
msgstr ""
|
973 |
+
"Activează %sHide My Wp> Ascunde fișierele comune %s pentru a ascunde "
|
974 |
+
"fișierele wp-config.php & wp-config-sample.php"
|
975 |
+
|
976 |
+
#: controllers/SecurityCheck.php:327
|
977 |
+
msgid "readme.html file is accessible "
|
978 |
+
msgstr "fișierul readme.html este accesibil"
|
979 |
+
|
980 |
+
#: controllers/SecurityCheck.php:331
|
981 |
+
msgid ""
|
982 |
+
"It's important to hide or remove the readme.html file because it contains WP "
|
983 |
+
"version details."
|
984 |
+
msgstr ""
|
985 |
+
"Este important să ascundeți sau să eliminați fișierul readme.html, deoarece "
|
986 |
+
"conține detalii despre versiunea WP."
|
987 |
+
|
988 |
+
#: controllers/SecurityCheck.php:332
|
989 |
+
#, php-format
|
990 |
+
msgid ""
|
991 |
+
"Rename readme.html file or switch on %sHide My Wp > Hide WordPress Common "
|
992 |
+
"Files%s"
|
993 |
+
msgstr ""
|
994 |
+
"Redenumește fișierul readme.html sau pornește %sHide My Wp> Ascunde "
|
995 |
+
"fișierele comune WordPress %s"
|
996 |
+
|
997 |
+
#: controllers/SecurityCheck.php:336
|
998 |
+
msgid "install.php & upgrade.php files are accessible "
|
999 |
+
msgstr "Fișierele install.php & upgrade.php sunt accesibile"
|
1000 |
+
|
1001 |
+
#: controllers/SecurityCheck.php:340
|
1002 |
+
msgid ""
|
1003 |
+
"WordPress is well-known for its ease of installation. <br/>It's important to "
|
1004 |
+
"hide the wp-admin/install.php and wp-admin/upgrade.php files because there "
|
1005 |
+
"have already been a couple of security issues regarding these files."
|
1006 |
+
msgstr ""
|
1007 |
+
"WordPress este bine-cunoscut pentru ușurința sa de instalare. <br/> Este "
|
1008 |
+
"important să ascundeți fișierele wp-admin/install.php și wp-admin/upgrade."
|
1009 |
+
"php, deoarece au existat deja câteva probleme de securitate cu privire la "
|
1010 |
+
"aceste fișiere."
|
1011 |
+
|
1012 |
+
#: controllers/SecurityCheck.php:341
|
1013 |
+
#, php-format
|
1014 |
+
msgid ""
|
1015 |
+
"Switch on %sHide My Wp > Hide WordPress Common Files%s to hide wp-admin/"
|
1016 |
+
"install.php & wp-admin/upgrade.php files"
|
1017 |
+
msgstr ""
|
1018 |
+
"Activează %sHide My Wp> Ascunde fișierele comune %s pentru a ascunde "
|
1019 |
+
"fișierele wp-admin/install.php & wp-admin/upgrade.php"
|
1020 |
+
|
1021 |
+
#: controllers/SecurityCheck.php:345
|
1022 |
+
msgid "PHP register_globals is on"
|
1023 |
+
msgstr "PHP register_globals este activat"
|
1024 |
+
|
1025 |
+
#: controllers/SecurityCheck.php:349
|
1026 |
+
msgid ""
|
1027 |
+
"This is one of the biggest security issues you can have on your site! If "
|
1028 |
+
"your hosting company has this directive enabled by default, switch to "
|
1029 |
+
"another company immediately!"
|
1030 |
+
msgstr ""
|
1031 |
+
"Aceasta este una dintre cele mai mari probleme de securitate pe care le "
|
1032 |
+
"puteți avea pe site-ul dvs.! Dacă compania dvs. de găzduire are această "
|
1033 |
+
"directivă activată în mod implicit, treceți imediat la o altă companie!"
|
1034 |
+
|
1035 |
+
#: controllers/SecurityCheck.php:350
|
1036 |
+
msgid ""
|
1037 |
+
"If you have access to php.ini file, set <code>register_globals = off</code> "
|
1038 |
+
"or contact the hosting company to set it off"
|
1039 |
+
msgstr ""
|
1040 |
+
"Dacă aveți acces la fișierul php.ini, setați <code>register_globals = off</"
|
1041 |
+
"code> sau contactați compania gazdă pentru a-l opri"
|
1042 |
+
|
1043 |
+
#: controllers/SecurityCheck.php:353
|
1044 |
+
msgid "PHP expose_php is on"
|
1045 |
+
msgstr "PHP expose_php este activ"
|
1046 |
+
|
1047 |
+
#: controllers/SecurityCheck.php:357
|
1048 |
+
msgid ""
|
1049 |
+
"Exposing the PHP version will make the job of attacking your site much "
|
1050 |
+
"easier."
|
1051 |
+
msgstr "Expunerea versiunii PHP va facilita munca de a vă ataca site-ul."
|
1052 |
+
|
1053 |
+
#: controllers/SecurityCheck.php:358
|
1054 |
+
msgid ""
|
1055 |
+
"If you have access to php.ini file, set <code>expose_php = off</code> or "
|
1056 |
+
"contact the hosting company to set it off"
|
1057 |
+
msgstr ""
|
1058 |
+
"Dacă aveți acces la fișierul php.ini, setați <code>expose_php = off</code> "
|
1059 |
+
"sau contactați compania de găzduire pentru a-l opri"
|
1060 |
+
|
1061 |
+
#: controllers/SecurityCheck.php:361
|
1062 |
+
msgid "PHP safe_mode is on"
|
1063 |
+
msgstr "PHP safe_mode este activ"
|
1064 |
+
|
1065 |
+
#: controllers/SecurityCheck.php:365
|
1066 |
+
msgid ""
|
1067 |
+
"PHP safe mode was one of the attempts to solve security problems of shared "
|
1068 |
+
"web hosting servers. <br /><br />It is still being used by some web hosting "
|
1069 |
+
"providers, however, nowadays this is regarded as improper. A systematic "
|
1070 |
+
"approach proves that it’s architecturally incorrect to try solving complex "
|
1071 |
+
"security issues at the PHP level, rather than at the web server and OS "
|
1072 |
+
"levels.<br /><br />Technically, safe mode is a PHP directive that restricts "
|
1073 |
+
"the way some built-in PHP functions operate. The main problem here is "
|
1074 |
+
"inconsistency. When turned on, PHP safe mode may prevent many legitimate PHP "
|
1075 |
+
"functions from working correctly. At the same time there exists a variety of "
|
1076 |
+
"methods to override safe mode limitations using PHP functions that aren’t "
|
1077 |
+
"restricted, so if a hacker has already got in – safe mode is useless."
|
1078 |
+
msgstr ""
|
1079 |
+
"Modul sigur PHP a fost una dintre încercările de a rezolva problemele de "
|
1080 |
+
"securitate ale serverelor de găzduire web partajate. <br /><br /> Încă este "
|
1081 |
+
"folosit de unii furnizori de găzduire web, cu toate acestea, astăzi acest "
|
1082 |
+
"lucru este considerat ca fiind impropriu. O abordare sistematică dovedește "
|
1083 |
+
"că este incorect din punct de vedere arhitectural să încerci să rezolvi "
|
1084 |
+
"probleme complexe de securitate la nivelul PHP, mai degrabă decât la "
|
1085 |
+
"serverul web și nivelurile de sistem de operare. <br /><br /> Tehnic, modul "
|
1086 |
+
"sigur este o directivă PHP care restricționează modul în care funcționează "
|
1087 |
+
"unele funcții PHP încorporate. Problema principală aici este inconsistența. "
|
1088 |
+
"Când este pornit, modul PHP sigur poate împiedica multe funcții PHP legitime "
|
1089 |
+
"să funcționeze corect. În același timp, există o varietate de metode pentru "
|
1090 |
+
"a trece peste limitele modului sigur folosind funcțiile PHP care nu sunt "
|
1091 |
+
"restricționate, deci dacă un hacker a intrat deja - modul sigur nu este "
|
1092 |
+
"inutil."
|
1093 |
+
|
1094 |
+
#: controllers/SecurityCheck.php:366
|
1095 |
+
msgid ""
|
1096 |
+
"If you have access to php.ini file, set <code>safe_mode = off</code> or "
|
1097 |
+
"contact the hosting company to set it off"
|
1098 |
+
msgstr ""
|
1099 |
+
"Dacă aveți acces la fișierul php.ini, setați <code>safe_mode = off</code> "
|
1100 |
+
"sau contactați compania gazdă pentru a-l opri"
|
1101 |
+
|
1102 |
+
#: controllers/SecurityCheck.php:369
|
1103 |
+
msgid "PHP allow_url_include is on"
|
1104 |
+
msgstr "PHP allow_url_include este activat"
|
1105 |
+
|
1106 |
+
#: controllers/SecurityCheck.php:373
|
1107 |
+
msgid ""
|
1108 |
+
"Having this PHP directive enabled will leave your site exposed to cross-site "
|
1109 |
+
"attacks (XSS). <br /><br />There's absolutely no valid reason to enable this "
|
1110 |
+
"directive, and using any PHP code that requires it is very risky."
|
1111 |
+
msgstr ""
|
1112 |
+
"Dacă această directivă PHP este activată, vă va lăsa site-ul expus la "
|
1113 |
+
"atacuri cross-site (XSS). <br /><br /> Nu există absolut niciun motiv valid "
|
1114 |
+
"pentru a activa această directivă, iar utilizarea oricărui cod PHP care "
|
1115 |
+
"necesită este foarte riscantă."
|
1116 |
+
|
1117 |
+
#: controllers/SecurityCheck.php:374
|
1118 |
+
msgid ""
|
1119 |
+
"If you have access to php.ini file, set <code>allow_url_include = off</code> "
|
1120 |
+
"or contact the hosting company to set it off"
|
1121 |
+
msgstr ""
|
1122 |
+
"Dacă aveți acces la fișierul php.ini, setați <code>allow_url_include = off</"
|
1123 |
+
"code> sau contactați compania gazdă pentru a-l opri"
|
1124 |
+
|
1125 |
+
#: controllers/SecurityCheck.php:377
|
1126 |
+
msgid "Plugins/Themes editor enabled"
|
1127 |
+
msgstr "Editorul de plugin-uri / teme este activat"
|
1128 |
+
|
1129 |
+
#: controllers/SecurityCheck.php:381
|
1130 |
+
msgid ""
|
1131 |
+
"The plugins and themes file editor is a very convenient tool because it "
|
1132 |
+
"enables you to make quick changes without the need to use FTP. <br /><br /"
|
1133 |
+
">Unfortunately, it's also a security issue because it not only shows the PHP "
|
1134 |
+
"source code, it also enables attackers to inject malicious code into your "
|
1135 |
+
"site if they manage to gain access to admin."
|
1136 |
+
msgstr ""
|
1137 |
+
"Editorul de fișiere cu plugin-uri și teme este un instrument foarte "
|
1138 |
+
"convenabil, deoarece vă permite să faceți modificări rapide, fără a fi "
|
1139 |
+
"nevoie să utilizați FTP. <br /><br /> Din păcate, este și o problemă de "
|
1140 |
+
"securitate, deoarece nu numai că afișează codul sursă PHP, ci permite și "
|
1141 |
+
"atacatorilor să injecteze cod rău intenționat pe site-ul dvs., dacă reușesc "
|
1142 |
+
"să obțină acces la administrator."
|
1143 |
+
|
1144 |
+
#: controllers/SecurityCheck.php:382
|
1145 |
+
msgid ""
|
1146 |
+
"Disable DISALLOW_FILE_EDIT for live websites in wp_config.php "
|
1147 |
+
"<code>define('DISALLOW_FILE_EDIT', true);</code>"
|
1148 |
+
msgstr ""
|
1149 |
+
"Dezactivează DISALLOW_FILE_EDIT pentru site-urile web live din wp_config.php "
|
1150 |
+
"<code>define('DISALLOW_FILE_EDIT', true);</code>"
|
1151 |
+
|
1152 |
+
#: controllers/SecurityCheck.php:386
|
1153 |
+
#, php-format
|
1154 |
+
msgid "Folder %s is browsable "
|
1155 |
+
msgstr "Dosarul %s este accesibil"
|
1156 |
+
|
1157 |
+
#: controllers/SecurityCheck.php:390
|
1158 |
+
msgid ""
|
1159 |
+
"Allowing anyone to view all files in the Uploads folder with a browser will "
|
1160 |
+
"allow them to easily download all your uploaded files. It's a security and a "
|
1161 |
+
"copyright issue."
|
1162 |
+
msgstr ""
|
1163 |
+
"Permiterea oricui să vizualizeze toate fișierele din folderul Uploads cu un "
|
1164 |
+
"browser le va permite să descarce cu ușurință toate fișierele încărcate. "
|
1165 |
+
"Este o problemă de securitate și de copyright."
|
1166 |
+
|
1167 |
+
#: controllers/SecurityCheck.php:391
|
1168 |
+
#, php-format
|
1169 |
+
msgid "Learn how to disable %sDirectory Browsing%s"
|
1170 |
+
msgstr "Aflați cum să dezactivați %s Navigarea directoare %s"
|
1171 |
+
|
1172 |
+
#: controllers/SecurityCheck.php:395
|
1173 |
+
msgid "Windows Live Writer is on "
|
1174 |
+
msgstr "Windows Live Writer este activ"
|
1175 |
+
|
1176 |
+
#: controllers/SecurityCheck.php:399
|
1177 |
+
msgid ""
|
1178 |
+
"If you're not using Windows Live Writer there's really no valid reason to "
|
1179 |
+
"have its link in the page header, because this tells the whole world you're "
|
1180 |
+
"using WordPress."
|
1181 |
+
msgstr ""
|
1182 |
+
"Dacă nu utilizați Windows Live Writer, nu există niciun motiv valid pentru a "
|
1183 |
+
"avea legătura sa în antetul paginii, deoarece acest lucru spune întreaga "
|
1184 |
+
"lume pe care o utilizați WordPress."
|
1185 |
+
|
1186 |
+
#: controllers/SecurityCheck.php:400
|
1187 |
+
#, php-format
|
1188 |
+
msgid "Switch on %sHide My Wp > Tweaks > Disable WLW Manifest scripts%s"
|
1189 |
+
msgstr "Activați %sHide My Wp> Tweaks> Dezactivați scripturile WLW Manifest %s"
|
1190 |
+
|
1191 |
+
#: controllers/SecurityCheck.php:404
|
1192 |
+
msgid "XML-RPC access is on"
|
1193 |
+
msgstr "Dezactivează accesul XML-RPC"
|
1194 |
+
|
1195 |
+
#: controllers/SecurityCheck.php:408
|
1196 |
+
msgid ""
|
1197 |
+
"WordPress XML-RPC is a specification that aims to standardize communications "
|
1198 |
+
"between different systems. It uses HTTP as the transport mechanism and XML "
|
1199 |
+
"as encoding mechanism to enable a wide range of data to be transmitted. <br /"
|
1200 |
+
"><br />The two biggest assets of the API are its extendibility and its "
|
1201 |
+
"security. XML-RPC authenticates using basic authentication. It sends the "
|
1202 |
+
"username and password with each request, which is a big no-no in security "
|
1203 |
+
"circles."
|
1204 |
+
msgstr ""
|
1205 |
+
"WordPress XML-RPC este o specificație care își propune să standardizeze "
|
1206 |
+
"comunicațiile între diferite sisteme. Utilizează HTTP ca mecanism de "
|
1207 |
+
"transport și XML ca mecanism de codificare pentru a permite o gamă largă de "
|
1208 |
+
"date să fie transmise. <br /><br /> Cele două mari active ale API sunt "
|
1209 |
+
"extensibilitatea și securitatea sa. XML-RPC se autentifică folosind "
|
1210 |
+
"autentificarea de bază. Acesta trimite numele de utilizator și parola cu "
|
1211 |
+
"fiecare cerere, care este un număr mare în cercurile de securitate."
|
1212 |
+
|
1213 |
+
#: controllers/SecurityCheck.php:409
|
1214 |
+
#, php-format
|
1215 |
+
msgid "Switch on %sHide My Wp > Tweaks > Disable XML-RPC access%s"
|
1216 |
+
msgstr "Activați %sHide My Wp> Tweaks> Dezactivați accesul XML-RPC %s"
|
1217 |
+
|
1218 |
+
#: controllers/SecurityCheck.php:413
|
1219 |
+
msgid "RDS is visible"
|
1220 |
+
msgstr "RDS este vizibil"
|
1221 |
+
|
1222 |
+
#: controllers/SecurityCheck.php:417
|
1223 |
+
msgid ""
|
1224 |
+
"If you're not using any Really Simple Discovery services such as pingbacks, "
|
1225 |
+
"there's no need to advertise that endpoint (link) in the header. Please note "
|
1226 |
+
"that for most sites this is not a security issue because they \"want to be "
|
1227 |
+
"discovered\", but if you want to hide the fact that you're using WP, this is "
|
1228 |
+
"the way to go."
|
1229 |
+
msgstr ""
|
1230 |
+
"Dacă nu utilizați niciun serviciu de descoperire într-adevăr simplă, cum ar "
|
1231 |
+
"fi pingbacks, nu este necesar să faceți publicitate acel punct (link) în "
|
1232 |
+
"antet. Vă rugăm să rețineți că pentru majoritatea site-urilor nu este o "
|
1233 |
+
"problemă de securitate, deoarece „vor să fie descoperite”, dar dacă doriți "
|
1234 |
+
"să ascundeți faptul că utilizați WP, acesta este calea de urmat."
|
1235 |
+
|
1236 |
+
#: controllers/SecurityCheck.php:418
|
1237 |
+
#, php-format
|
1238 |
+
msgid "Switch on %sHide My Wp > Tweaks > Hide RSD header%s"
|
1239 |
+
msgstr "Activați %sHide My Wp> Tweaks > Ascunde antetul RSD %s"
|
1240 |
+
|
1241 |
+
#: controllers/SecurityCheck.php:422
|
1242 |
+
msgid "MySql Grant All Permissions"
|
1243 |
+
msgstr "MySql Acordă toate permisiunile"
|
1244 |
+
|
1245 |
+
#: controllers/SecurityCheck.php:426
|
1246 |
+
msgid ""
|
1247 |
+
"If an attacker gains access to your wp-config.php file and gets the MySQL "
|
1248 |
+
"username and password, he'll be able to login to that database and do "
|
1249 |
+
"whatever that account allows. <br /><br />That's why it's important to keep "
|
1250 |
+
"the account's privileges to a bare minimum.<br /><br />For instance, if "
|
1251 |
+
"you're not installing any new plugins or updating WP, that account doesn't "
|
1252 |
+
"need the CREATE or DROP table privileges.<br /><br />For regular, day-to-day "
|
1253 |
+
"usage these are the recommended privileges: SELECT, INSERT, UPDATE and "
|
1254 |
+
"DELETE."
|
1255 |
+
msgstr ""
|
1256 |
+
"Dacă un atacator câștigă acces la fișierul dvs. wp-config.php și primește "
|
1257 |
+
"numele de utilizator și parola MySQL, va putea să se conecteze la acea bază "
|
1258 |
+
"de date și să facă tot ce permite acest cont. <br /><br /> De aceea, este "
|
1259 |
+
"important să păstrezi privilegiile contului la un nivel minim. <br /><br /> "
|
1260 |
+
"De exemplu, dacă nu instalați plugin-uri noi sau actualizați WP, acel cont "
|
1261 |
+
"nu are nevoie de privilegiile CREATE sau DROP. <br /><br /> Pentru "
|
1262 |
+
"utilizarea obișnuită zilnică, acestea sunt privilegiile recomandate: SELECT, "
|
1263 |
+
"INSERT, UPDATE și DELETE."
|
1264 |
+
|
1265 |
+
#: controllers/SecurityCheck.php:427
|
1266 |
+
#, php-format
|
1267 |
+
msgid "To learn how to revoke permissions from PhpMyAdmin %sClick here%s"
|
1268 |
+
msgstr ""
|
1269 |
+
"Pentru a afla cum să revocați permisiunile de la PhpMyAdmin %s Faceți clic "
|
1270 |
+
"aici %s"
|
1271 |
+
|
1272 |
+
#: controllers/SecurityCheck.php:430
|
1273 |
+
msgid "Author URL by ID access"
|
1274 |
+
msgstr "URL-ul autorului prin acces ID"
|
1275 |
+
|
1276 |
+
#: controllers/SecurityCheck.php:434
|
1277 |
+
msgid ""
|
1278 |
+
"Usernames (unlike passwords) are not secret. By knowing someone's username, "
|
1279 |
+
"you can't log in to their account. You also need the password. <br /><br /"
|
1280 |
+
">However, by knowing the username, you are one step closer to logging in "
|
1281 |
+
"using the username to brute-force the password, or to gain access in a "
|
1282 |
+
"similar way. <br /><br />That's why it's advisable to keep the list of "
|
1283 |
+
"usernames private, at least to some degree. By default, by accessing siteurl."
|
1284 |
+
"com/?author={id} and looping through IDs from 1 you can get a list of "
|
1285 |
+
"usernames, because WP will redirect you to siteurl.com/author/user/ if the "
|
1286 |
+
"ID exists in the system."
|
1287 |
+
msgstr ""
|
1288 |
+
"Numele de utilizator (spre deosebire de parolele) nu sunt secrete. Cunoscând "
|
1289 |
+
"numele de utilizator al cuiva, nu vă puteți autentifica în contul său. De "
|
1290 |
+
"asemenea, aveți nevoie de parola. <br /><br /> Cu toate acestea, cunoscând "
|
1291 |
+
"numele de utilizator, sunteți cu un pas mai aproape de a vă autentifica "
|
1292 |
+
"folosind numele de utilizator pentru a forța parola brută sau pentru a "
|
1293 |
+
"obține acces într-un mod similar. <br /><br /> De aceea este recomandabil să "
|
1294 |
+
"păstrați lista de nume de utilizator private, cel puțin într-o oarecare "
|
1295 |
+
"măsură. În mod implicit, accesând siteurl.com/?author=obileid} și făcând o "
|
1296 |
+
"buclă de ID-uri de la 1 puteți obține o listă de nume de utilizator, "
|
1297 |
+
"deoarece WP vă va redirecționa către siteurl.com/author/user/ dacă ID-ul "
|
1298 |
+
"există în sistem ."
|
1299 |
+
|
1300 |
+
#: controllers/SecurityCheck.php:435
|
1301 |
+
#, php-format
|
1302 |
+
msgid "Switch on %sHide My Wp > Hide Author ID URL%s"
|
1303 |
+
msgstr "Activați %sHide My Wp> Ascundeți ID-ul autorului %s"
|
1304 |
+
|
1305 |
+
#: controllers/SecurityCheck.php:439
|
1306 |
+
msgid "Default WordPress Tagline"
|
1307 |
+
msgstr "Etichetă WordPress implicită"
|
1308 |
+
|
1309 |
+
#: controllers/SecurityCheck.php:443
|
1310 |
+
msgid ""
|
1311 |
+
"The WordPress site tagline is a short phrase located under the site title, "
|
1312 |
+
"similar to a subtitle or advertising slogan. The goal of a tagline is to "
|
1313 |
+
"convey the essence of your site to visitors. <br /><br />If you don't change "
|
1314 |
+
"the default tagline it will be very easy to detect that your website was "
|
1315 |
+
"actually built with WordPress"
|
1316 |
+
msgstr ""
|
1317 |
+
"Eticheta site-ului WordPress este o frază scurtă situată sub titlul site-"
|
1318 |
+
"ului, asemănătoare cu un subtitlu sau slogan publicitar. Scopul unei linii "
|
1319 |
+
"de etichete este de a transmite vizitatilor esența site-ului dvs. <br /><br /"
|
1320 |
+
"> Dacă nu schimbați marcajul implicit, va fi foarte ușor să detectați că "
|
1321 |
+
"site-ul dvs. web a fost de fapt creat cu WordPress"
|
1322 |
+
|
1323 |
+
#: controllers/SecurityCheck.php:444
|
1324 |
+
#, php-format
|
1325 |
+
msgid "Change the Tagline in %s > %s"
|
1326 |
+
msgstr "Modificați eticheta în %s> %s"
|
1327 |
+
|
1328 |
+
#: controllers/SecurityCheck.php:444
|
1329 |
+
msgid "Tagline"
|
1330 |
+
msgstr "Slogan"
|
1331 |
+
|
1332 |
+
#: controllers/SecurityCheck.php:521 controllers/SecurityCheck.php:549
|
1333 |
+
#: controllers/SecurityCheck.php:574
|
1334 |
+
msgid "Saved! You can run the test again."
|
1335 |
+
msgstr "Salvat! Puteți rula testul din nou."
|
1336 |
+
|
1337 |
+
#: controllers/SecurityCheck.php:526 controllers/SecurityCheck.php:553
|
1338 |
+
msgid "Could not fix it. You need to change it yourself."
|
1339 |
+
msgstr "Nu s-a putut rezolva. Trebuie să-l schimbi singur."
|
1340 |
+
|
1341 |
+
#: controllers/SecurityCheck.php:567
|
1342 |
+
msgid "Saved! This task will be ignored on future tests."
|
1343 |
+
msgstr "Salvat! Această sarcină va fi ignorată la testele viitoare."
|
1344 |
+
|
1345 |
+
#: controllers/SecurityCheck.php:621 controllers/SecurityCheck.php:639
|
1346 |
+
#: controllers/SecurityCheck.php:653 controllers/SecurityCheck.php:666
|
1347 |
+
#: controllers/SecurityCheck.php:678 controllers/SecurityCheck.php:923
|
1348 |
+
#: controllers/SecurityCheck.php:1005 controllers/SecurityCheck.php:1021
|
1349 |
+
#: controllers/SecurityCheck.php:1029 controllers/SecurityCheck.php:1105
|
1350 |
+
#: controllers/SecurityCheck.php:1118 controllers/SecurityCheck.php:1132
|
1351 |
+
#: controllers/SecurityCheck.php:1145 controllers/SecurityCheck.php:1157
|
1352 |
+
#: controllers/SecurityCheck.php:1162 controllers/SecurityCheck.php:1187
|
1353 |
+
#: controllers/SecurityCheck.php:1212 controllers/SecurityCheck.php:1226
|
1354 |
+
#: controllers/SecurityCheck.php:1240 controllers/SecurityCheck.php:1257
|
1355 |
+
#: controllers/SecurityCheck.php:1289 controllers/SecurityCheck.php:1311
|
1356 |
+
#: controllers/SecurityCheck.php:1333 controllers/SecurityCheck.php:1355
|
1357 |
+
#: controllers/SecurityCheck.php:1375 controllers/SecurityCheck.php:1397
|
1358 |
+
#: controllers/SecurityCheck.php:1411 controllers/SecurityCheck.php:1420
|
1359 |
+
msgid "Yes"
|
1360 |
+
msgstr "Da"
|
1361 |
+
|
1362 |
+
#: controllers/SecurityCheck.php:621 controllers/SecurityCheck.php:639
|
1363 |
+
#: controllers/SecurityCheck.php:653 controllers/SecurityCheck.php:666
|
1364 |
+
#: controllers/SecurityCheck.php:678 controllers/SecurityCheck.php:1005
|
1365 |
+
#: controllers/SecurityCheck.php:1021 controllers/SecurityCheck.php:1029
|
1366 |
+
#: controllers/SecurityCheck.php:1105 controllers/SecurityCheck.php:1118
|
1367 |
+
#: controllers/SecurityCheck.php:1132 controllers/SecurityCheck.php:1145
|
1368 |
+
#: controllers/SecurityCheck.php:1157 controllers/SecurityCheck.php:1182
|
1369 |
+
#: controllers/SecurityCheck.php:1192 controllers/SecurityCheck.php:1212
|
1370 |
+
#: controllers/SecurityCheck.php:1226 controllers/SecurityCheck.php:1240
|
1371 |
+
#: controllers/SecurityCheck.php:1289 controllers/SecurityCheck.php:1311
|
1372 |
+
#: controllers/SecurityCheck.php:1333 controllers/SecurityCheck.php:1355
|
1373 |
+
#: controllers/SecurityCheck.php:1375 controllers/SecurityCheck.php:1397
|
1374 |
+
#: controllers/SecurityCheck.php:1411 controllers/SecurityCheck.php:1420
|
1375 |
+
msgid "No"
|
1376 |
+
msgstr "Nu"
|
1377 |
+
|
1378 |
+
#: controllers/SecurityCheck.php:747
|
1379 |
+
#, php-format
|
1380 |
+
msgid "%s plugin are outdated: %s"
|
1381 |
+
msgstr "Pluginul %s este învechit: %s"
|
1382 |
+
|
1383 |
+
#: controllers/SecurityCheck.php:747 controllers/SecurityCheck.php:823
|
1384 |
+
msgid "All plugins are up to date"
|
1385 |
+
msgstr "Toate plugin-urile sunt la zi"
|
1386 |
+
|
1387 |
+
#: controllers/SecurityCheck.php:780
|
1388 |
+
#, php-format
|
1389 |
+
msgid "%s theme(s) are outdated: %s"
|
1390 |
+
msgstr "%s tema (temele) sunt depășite: %s"
|
1391 |
+
|
1392 |
+
#: controllers/SecurityCheck.php:780
|
1393 |
+
msgid "Themes are up to date"
|
1394 |
+
msgstr "Temele sunt la zi"
|
1395 |
+
|
1396 |
+
#: controllers/SecurityCheck.php:859
|
1397 |
+
msgid "All plugins are compatible"
|
1398 |
+
msgstr "Toate plugin-urile sunt compatibile"
|
1399 |
+
|
1400 |
+
#: controllers/SecurityCheck.php:944
|
1401 |
+
#, php-format
|
1402 |
+
msgid "%s days since last update"
|
1403 |
+
msgstr "%s zile de la ultima actualizare"
|
1404 |
+
|
1405 |
+
#: controllers/SecurityCheck.php:944
|
1406 |
+
msgid "Updated"
|
1407 |
+
msgstr "Actualizat"
|
1408 |
+
|
1409 |
+
#: controllers/SecurityCheck.php:961
|
1410 |
+
msgid "Empty"
|
1411 |
+
msgstr "Gol"
|
1412 |
+
|
1413 |
+
#: controllers/SecurityCheck.php:966
|
1414 |
+
msgid "only "
|
1415 |
+
msgstr "numai "
|
1416 |
+
|
1417 |
+
#: controllers/SecurityCheck.php:971
|
1418 |
+
msgid "too simple"
|
1419 |
+
msgstr "prea simplu"
|
1420 |
+
|
1421 |
+
#: controllers/SecurityCheck.php:976
|
1422 |
+
msgid "Good"
|
1423 |
+
msgstr "Bun"
|
1424 |
+
|
1425 |
+
#: controllers/SecurityCheck.php:1023
|
1426 |
+
msgid ""
|
1427 |
+
"Change the wp-config.php file permission to Read-Only using File Manager."
|
1428 |
+
msgstr ""
|
1429 |
+
"Modificați permisiunea fișierului wp-config.php în Read-Only numai cu File "
|
1430 |
+
"Manager."
|
1431 |
+
|
1432 |
+
#: controllers/SecurityCheck.php:1265
|
1433 |
+
msgid "no"
|
1434 |
+
msgstr "nu"
|
1435 |
+
|
1436 |
+
#: controllers/SecurityCheck.php:1417
|
1437 |
+
msgid "Just another WordPress site"
|
1438 |
+
msgstr "Doar un alt WordPress site"
|
1439 |
+
|
1440 |
+
#: controllers/Settings.php:45
|
1441 |
+
#, php-format
|
1442 |
+
msgid ""
|
1443 |
+
"NGINX detected. In case you didn't add the code in the NGINX config already, "
|
1444 |
+
"please add the following line. %s"
|
1445 |
+
msgstr ""
|
1446 |
+
"A fost detectat NGINX. În cazul în care nu ați adăugat deja codul în "
|
1447 |
+
"configurația NGINX, vă rugăm să adăugați următoarea linie. %s"
|
1448 |
+
|
1449 |
+
#: controllers/Settings.php:45 models/Rewrite.php:684
|
1450 |
+
msgid "Learn How To Add the Code"
|
1451 |
+
msgstr "Aflați cum să adăugați codul"
|
1452 |
+
|
1453 |
+
#: controllers/Settings.php:45
|
1454 |
+
msgid "Don't forget to reload the Nginx service."
|
1455 |
+
msgstr "Nu uitați să reîncărcați serviciul Nginx."
|
1456 |
+
|
1457 |
+
#: controllers/Settings.php:45
|
1458 |
+
msgid "Learn How"
|
1459 |
+
msgstr "Afla cum"
|
1460 |
+
|
1461 |
+
#: controllers/Settings.php:54 view/Backup.php:16
|
1462 |
+
msgid "Restore Settings"
|
1463 |
+
msgstr "Restaurați setările"
|
1464 |
+
|
1465 |
+
#: controllers/Settings.php:57
|
1466 |
+
msgid "You want to restore the last saved settings? "
|
1467 |
+
msgstr "Doriți să restaurați ultimele setări salvate? "
|
1468 |
+
|
1469 |
+
#: controllers/Settings.php:75
|
1470 |
+
#, php-format
|
1471 |
+
msgid ""
|
1472 |
+
"%sLimited Time Offer%s: Get %s65%% OFF%s today on Hide My WP Ghost 5 "
|
1473 |
+
"Websites License. %sHurry Up!%s"
|
1474 |
+
msgstr ""
|
1475 |
+
"%s Ofertă de timp limitată %s: Obțineți %s65 %% OFF %s azi pe Ascundeți "
|
1476 |
+
"licența mea WP Ghid 5 site-uri. %sHurry Up! %s"
|
1477 |
+
|
1478 |
+
#: controllers/Settings.php:122
|
1479 |
+
#, php-format
|
1480 |
+
msgid ""
|
1481 |
+
"New Plugin/Theme detected! You need to save the Hide My WP Setting again to "
|
1482 |
+
"include them all! %sClick here%s"
|
1483 |
+
msgstr ""
|
1484 |
+
"Nou detectat plugin / temă! Trebuie să salvați din nou Setarea Hide My WP "
|
1485 |
+
"pentru a le include pe toate! %s Faceți clic aici %s"
|
1486 |
+
|
1487 |
+
#: controllers/Settings.php:135
|
1488 |
+
#, php-format
|
1489 |
+
msgid ""
|
1490 |
+
"New Plugin/Theme detected! You need to save the Hide My WP Setting again to "
|
1491 |
+
"include them all! %sSave Settings%s"
|
1492 |
+
msgstr ""
|
1493 |
+
"Nou detectat plugin / temă! Trebuie să salvați din nou Setarea Hide My WP "
|
1494 |
+
"pentru a le include pe toate! %sSalvează setările %s"
|
1495 |
+
|
1496 |
+
#: controllers/Settings.php:151
|
1497 |
+
#, php-format
|
1498 |
+
msgid ""
|
1499 |
+
"To activate the new %sHide My WP %s %s settings you need to confirm and re-"
|
1500 |
+
"login!"
|
1501 |
+
msgstr ""
|
1502 |
+
"Pentru a activa noile setări %sHide My WP %s %s, trebuie să confirmați și să "
|
1503 |
+
"vă autentificați din nou!"
|
1504 |
+
|
1505 |
+
#: controllers/Settings.php:159
|
1506 |
+
msgid "Yes, I'm ready to re-login"
|
1507 |
+
msgstr "Da, sunt gata să mă re-autentific"
|
1508 |
+
|
1509 |
+
#: controllers/Settings.php:166 view/FrontendCheck.php:36
|
1510 |
+
msgid "No, abort"
|
1511 |
+
msgstr "Nu, avocați"
|
1512 |
+
|
1513 |
+
#: controllers/Settings.php:207
|
1514 |
+
msgid "My Account"
|
1515 |
+
msgstr "Contul meu"
|
1516 |
+
|
1517 |
+
#: controllers/Settings.php:336
|
1518 |
+
msgid ""
|
1519 |
+
"Error: You entered the same text twice in the Text Mapping. We removed the "
|
1520 |
+
"duplicates to prevent any redirect errors."
|
1521 |
+
msgstr ""
|
1522 |
+
"Eroare: ați introdus același text de două ori în Mapping Text. Am eliminat "
|
1523 |
+
"duplicatele pentru a preveni eventualele erori de redirecționare."
|
1524 |
+
|
1525 |
+
#: controllers/Settings.php:479
|
1526 |
+
msgid ""
|
1527 |
+
"ERROR! Please make sure you use a valid token to connect the plugin with "
|
1528 |
+
"WPPlugins"
|
1529 |
+
msgstr ""
|
1530 |
+
"EROARE! Vă rugăm să vă asigurați că utilizați un token valid pentru a "
|
1531 |
+
"conecta plugin-ul cu WPPlugins"
|
1532 |
+
|
1533 |
+
#: controllers/Settings.php:484
|
1534 |
+
msgid ""
|
1535 |
+
"ERROR! Please make sure you use an email address to connect the plugin with "
|
1536 |
+
"WPPlugins"
|
1537 |
+
msgstr ""
|
1538 |
+
"EROARE! Vă rugăm să vă asigurați că utilizați o adresă de e-mail pentru a "
|
1539 |
+
"conecta plugin-ul cu WPPlugins"
|
1540 |
+
|
1541 |
+
#: controllers/Settings.php:533
|
1542 |
+
msgid "Great! The backup is restored."
|
1543 |
+
msgstr "Grozav! Copia de rezervă este restabilită."
|
1544 |
+
|
1545 |
+
#: controllers/Settings.php:547 controllers/Settings.php:550
|
1546 |
+
msgid "Error! The backup is not valid."
|
1547 |
+
msgstr "Eroare! Copia de rezervă nu este validă."
|
1548 |
+
|
1549 |
+
#: controllers/Settings.php:553
|
1550 |
+
msgid "Error! You have to enter a previous saved backup file."
|
1551 |
+
msgstr "Eroare! Trebuie să introduceți un fișier salvat anterior salvat."
|
1552 |
+
|
1553 |
+
#: controllers/Settings.php:566
|
1554 |
+
msgid "Hide My Wp > Question"
|
1555 |
+
msgstr "Hide My WP > Întrebare"
|
1556 |
+
|
1557 |
+
#: models/Brute.php:427
|
1558 |
+
#, php-format
|
1559 |
+
msgid "%sYou failed to correctly answer the math problem.%s Please try again"
|
1560 |
+
msgstr ""
|
1561 |
+
"%s Nu ați reușit să răspundeți corect la problema matematică. %s Încercați "
|
1562 |
+
"din nou"
|
1563 |
+
|
1564 |
+
#: models/Brute.php:435
|
1565 |
+
#, php-format
|
1566 |
+
msgid ""
|
1567 |
+
"%sERROR:%s Email or Password is incorrect. %s %d attempts left before lockout"
|
1568 |
+
msgstr ""
|
1569 |
+
"%sERROR: %s E-mail sau parolă este incorectă. %s% d a încercat să rămână "
|
1570 |
+
"înainte de blocare"
|
1571 |
+
|
1572 |
+
#: models/Brute.php:459
|
1573 |
+
msgid "Prove your humanity: "
|
1574 |
+
msgstr "Dovedește-ți umanitatea: "
|
1575 |
+
|
1576 |
+
#: models/Brute.php:472
|
1577 |
+
msgid "Login Blocked by Hide My WordPress"
|
1578 |
+
msgstr "Logare Blocat de Hide My WP"
|
1579 |
+
|
1580 |
+
#: models/Compatibility.php:211
|
1581 |
+
msgid ""
|
1582 |
+
"CDN Enabled detected. Please include the new wp-content and wp-includes "
|
1583 |
+
"paths in CDN Enabler Settings"
|
1584 |
+
msgstr ""
|
1585 |
+
"CDN Activat detectat. Vă rugăm să includeți noile căi wp-content și wp-"
|
1586 |
+
"include în setările CDN Enabler"
|
1587 |
+
|
1588 |
+
#: models/Compatibility.php:219
|
1589 |
+
#, php-format
|
1590 |
+
msgid ""
|
1591 |
+
"CDN Enabler detected! Learn how to configure it with Hide My WP %sClick here"
|
1592 |
+
"%s"
|
1593 |
+
msgstr ""
|
1594 |
+
"CDN Enabler detectat! Aflați cum să-l configurați cu Hide My WP %s Faceți "
|
1595 |
+
"clic aici %s"
|
1596 |
+
|
1597 |
+
#: models/Compatibility.php:231
|
1598 |
+
#, php-format
|
1599 |
+
msgid ""
|
1600 |
+
"WP Super Cache CDN detected. Please include %s and %s paths in WP Super "
|
1601 |
+
"Cache > CDN > Include directories"
|
1602 |
+
msgstr ""
|
1603 |
+
"WP Super Cache CDN detectat. Vă rugăm să includeți %s și %s căi în WP Super "
|
1604 |
+
"Cache> CDN> Includere directoare"
|
1605 |
+
|
1606 |
+
#: models/Compatibility.php:238
|
1607 |
+
#, php-format
|
1608 |
+
msgid ""
|
1609 |
+
"Hide My WP does not work without mode_rewrite. Please activate the rewrite "
|
1610 |
+
"module in Apache. %sMore details%s"
|
1611 |
+
msgstr ""
|
1612 |
+
"Hide My WP nu funcționează fără mode_rewrite. Vă rugăm să activați modulul "
|
1613 |
+
"de rescriere în Apache. %sMai multe detalii %s"
|
1614 |
+
|
1615 |
+
#: models/Compatibility.php:243
|
1616 |
+
#, php-format
|
1617 |
+
msgid ""
|
1618 |
+
"Hide My WP does not work with %s Permalinks. Change it to %s or other type "
|
1619 |
+
"in Settings > Permalinks in order to hide it"
|
1620 |
+
msgstr ""
|
1621 |
+
"Hide My WP nu funcționează cu %s Permalink. Schimbă-l în %s sau alt tip în "
|
1622 |
+
"Setări> Legături permanente pentru a-l ascunde"
|
1623 |
+
|
1624 |
+
#: models/Compatibility.php:243
|
1625 |
+
msgid "Plain"
|
1626 |
+
msgstr "Șablon - format text simplu"
|
1627 |
+
|
1628 |
+
#: models/Compatibility.php:243
|
1629 |
+
msgid "Post Name"
|
1630 |
+
msgstr "Numele articolului"
|
1631 |
+
|
1632 |
+
#: models/Compatibility.php:248
|
1633 |
+
#, php-format
|
1634 |
+
msgid ""
|
1635 |
+
"You need to activate the URL Rewrite for IIS to be able to change the "
|
1636 |
+
"permalink structure to friendly URL (without index.php). %sMore details%s"
|
1637 |
+
msgstr ""
|
1638 |
+
"Trebuie să activați rescrierea URL-ului pentru IIS pentru a putea modifica "
|
1639 |
+
"structura de legături permanente în URL prietenoasă (fără index.php). %sMai "
|
1640 |
+
"multe detalii %s"
|
1641 |
+
|
1642 |
+
#: models/Compatibility.php:250
|
1643 |
+
msgid ""
|
1644 |
+
"You need to set the permalink structure to friendly URL (without index.php)."
|
1645 |
+
msgstr ""
|
1646 |
+
"Trebuie să setați structura de legături permanente pe o adresă URL "
|
1647 |
+
"prietenoasă (fără index.php)."
|
1648 |
+
|
1649 |
+
#: models/Compatibility.php:255
|
1650 |
+
msgid ""
|
1651 |
+
"The constant ADMIN_COOKIE_PATH is defined in wp-config.php by another "
|
1652 |
+
"plugin. Hide My WP will not work unless you remove the line "
|
1653 |
+
"define('ADMIN_COOKIE_PATH', ...);"
|
1654 |
+
msgstr ""
|
1655 |
+
"Constanta ADMIN_COOKIE_PATH este definită în wp-config.php de un alt plugin. "
|
1656 |
+
"Hide My WP nu va funcționa decât dacă eliminați definiția liniei "
|
1657 |
+
"(„ADMIN_COOKIE_PATH”, ...);"
|
1658 |
+
|
1659 |
+
#: models/Compatibility.php:261
|
1660 |
+
#, php-format
|
1661 |
+
msgid ""
|
1662 |
+
"Inmotion detected. %sPlease read how to make the plugin compatible with "
|
1663 |
+
"Inmotion Nginx Cache%s"
|
1664 |
+
msgstr ""
|
1665 |
+
"Detectarea mișcării. %s Vă rugăm să citiți cum să faceți plugin-ul "
|
1666 |
+
"compatibil cu Inmotion Nginx Cache %s"
|
1667 |
+
|
1668 |
+
#: models/Compatibility.php:273
|
1669 |
+
msgid ""
|
1670 |
+
"Hide My WP rules are not saved in the config file and this may affect the "
|
1671 |
+
"website loading speed."
|
1672 |
+
msgstr ""
|
1673 |
+
"Ascundeți regulile WP-ului meu nu sunt salvate în fișierul de configurare și "
|
1674 |
+
"acest lucru poate afecta viteza de încărcare a site-ului."
|
1675 |
+
|
1676 |
+
#: models/Compatibility.php:283
|
1677 |
+
#, php-format
|
1678 |
+
msgid ""
|
1679 |
+
"Godaddy detected! To avoid CSS errors, make sure you switch off the CDN from "
|
1680 |
+
"%s"
|
1681 |
+
msgstr ""
|
1682 |
+
"Godaddy a detectat! Pentru a evita erorile CSS, asigurați-vă că opriți CDN "
|
1683 |
+
"de la %s"
|
1684 |
+
|
1685 |
+
#: models/Rewrite.php:643
|
1686 |
+
#, php-format
|
1687 |
+
msgid ""
|
1688 |
+
"IIS detected. You need to update your %s file by adding the following lines "
|
1689 |
+
"after <rules> tag: %s"
|
1690 |
+
msgstr ""
|
1691 |
+
"IIS detectat. Trebuie să actualizați fișierul %s adăugând următoarele "
|
1692 |
+
"rânduri după < reguli > Etichete: %s"
|
1693 |
+
|
1694 |
+
#: models/Rewrite.php:664 models/Rewrite.php:732
|
1695 |
+
#, php-format
|
1696 |
+
msgid ""
|
1697 |
+
"Config file is not writable. You need to update your %s file by adding the "
|
1698 |
+
"following lines at the beginning of the file: %s"
|
1699 |
+
msgstr ""
|
1700 |
+
"Fișierul de configurare nu poate fi scris. Trebuie să actualizați fișierul "
|
1701 |
+
"%s adăugând următoarele linii la începutul fișierului: %s"
|
1702 |
+
|
1703 |
+
#: models/Rewrite.php:684
|
1704 |
+
#, php-format
|
1705 |
+
msgid ""
|
1706 |
+
"WpEngine detected. Add the redirects in the WpEngine Redirect rules panel %s"
|
1707 |
+
msgstr ""
|
1708 |
+
"WpEngine detectat. Adăugați redirectările în panoul de reguli WpEngine "
|
1709 |
+
"Redirect, %s"
|
1710 |
+
|
1711 |
+
#: models/Rewrite.php:764
|
1712 |
+
#, php-format
|
1713 |
+
msgid ""
|
1714 |
+
"Config file is not writable. You have to added it manually at the beginning "
|
1715 |
+
"of the %s file: %s"
|
1716 |
+
msgstr ""
|
1717 |
+
"Fișierul de configurare nu poate fi scris. Trebuie să îl adăugați manual la "
|
1718 |
+
"începutul fișierului %s: %s"
|
1719 |
+
|
1720 |
+
#: models/Rewrite.php:2034
|
1721 |
+
msgid ""
|
1722 |
+
"There has been a critical error on your website. Please check your site "
|
1723 |
+
"admin email inbox for instructions."
|
1724 |
+
msgstr ""
|
1725 |
+
"A apărut o eroare critică pe site-ul dvs. web. Vă rugăm să verificați "
|
1726 |
+
"instrucțiunile de pe adresa de e-mail a administratorului site-ului pentru "
|
1727 |
+
"instrucțiuni."
|
1728 |
+
|
1729 |
+
#: models/Rewrite.php:2036
|
1730 |
+
msgid "There has been a critical error on your website."
|
1731 |
+
msgstr "A apărut o eroare critică pe site-ul dvs. web."
|
1732 |
+
|
1733 |
+
#: models/Settings.php:12
|
1734 |
+
msgid "Permalinks"
|
1735 |
+
msgstr "Link-uri permanente"
|
1736 |
+
|
1737 |
+
#: models/Settings.php:13
|
1738 |
+
msgid "Change common paths"
|
1739 |
+
msgstr "Schimbați căile comune"
|
1740 |
+
|
1741 |
+
#: models/Settings.php:18
|
1742 |
+
msgid "Text and URL mapping"
|
1743 |
+
msgstr "Mapare text și URL"
|
1744 |
+
|
1745 |
+
#: models/Settings.php:23
|
1746 |
+
msgid "Add WordPress Tweaks"
|
1747 |
+
msgstr "Adăugați WordPress Tweaks"
|
1748 |
+
|
1749 |
+
#: models/Settings.php:27
|
1750 |
+
msgid "Brute Force"
|
1751 |
+
msgstr "Protecția Brute Force cu Captcha Math"
|
1752 |
+
|
1753 |
+
#: models/Settings.php:28
|
1754 |
+
msgid "Add Login Protection"
|
1755 |
+
msgstr "Adăugare Protecție autentificare"
|
1756 |
+
|
1757 |
+
#: models/Settings.php:33
|
1758 |
+
msgid "Website Events Log"
|
1759 |
+
msgstr "Jurnalul evenimentelor site-ului web"
|
1760 |
+
|
1761 |
+
#: models/Settings.php:38
|
1762 |
+
msgid "Test Your Website"
|
1763 |
+
msgstr "Testează-ți site-ul"
|
1764 |
+
|
1765 |
+
#: models/Settings.php:43 view/Plugins.php:29
|
1766 |
+
msgid "Plugins"
|
1767 |
+
msgstr "Plugin-uri"
|
1768 |
+
|
1769 |
+
#: models/Settings.php:49
|
1770 |
+
msgid "Save your settings"
|
1771 |
+
msgstr "Salvați setările"
|
1772 |
+
|
1773 |
+
#: models/Settings.php:67
|
1774 |
+
msgid "WP Super Cache"
|
1775 |
+
msgstr "WP Super Cache"
|
1776 |
+
|
1777 |
+
#: models/Settings.php:69
|
1778 |
+
msgid ""
|
1779 |
+
"A very fast caching engine for WordPress that produces static html files. "
|
1780 |
+
"Works well with Minify HTML plugin."
|
1781 |
+
msgstr ""
|
1782 |
+
"Un motor de memorie în cache foarte rapid pentru WordPress care produce "
|
1783 |
+
"fișiere statice html. Funcționează bine cu plugin-ul Minify HTML."
|
1784 |
+
|
1785 |
+
#: models/Settings.php:74
|
1786 |
+
msgid "Autoptimize"
|
1787 |
+
msgstr "Autoptimize"
|
1788 |
+
|
1789 |
+
#: models/Settings.php:76
|
1790 |
+
msgid ""
|
1791 |
+
"Autoptimize speeds up your website by optimizing JS, CSS and HTML, async-ing "
|
1792 |
+
"JavaScript, removing emoji cruft, optimizing Google Fonts and more."
|
1793 |
+
msgstr ""
|
1794 |
+
"Autoptimize accelerează site-ul dvs. prin optimizarea JS, CSS și HTML, "
|
1795 |
+
"asincronizare JavaScript, eliminarea cruft emoji, optimizarea fonturilor "
|
1796 |
+
"Google și altele."
|
1797 |
+
|
1798 |
+
#: models/Settings.php:81
|
1799 |
+
msgid "Minify HTML"
|
1800 |
+
msgstr "Minify HTML"
|
1801 |
+
|
1802 |
+
#: models/Settings.php:83
|
1803 |
+
msgid ""
|
1804 |
+
"Minify HTML output for clean looking markup and faster downloading. Minify "
|
1805 |
+
"HTML also has optional specialized minification for JS and internal CSS."
|
1806 |
+
msgstr ""
|
1807 |
+
"Minimizați ieșirea HTML pentru marcarea curată și mai rapidă descărcare. "
|
1808 |
+
"Minify HTML are, de asemenea, opțiuni de minificare specializate pentru JS "
|
1809 |
+
"și CSS interne."
|
1810 |
+
|
1811 |
+
#: models/Settings.php:88
|
1812 |
+
msgid "iThemes Security"
|
1813 |
+
msgstr "Securitatea iThemes"
|
1814 |
+
|
1815 |
+
#: models/Settings.php:90
|
1816 |
+
msgid ""
|
1817 |
+
"iThemes Security gives you over 30+ ways to secure and protect your WP site. "
|
1818 |
+
"WP sites can be an easy target for attacks because of plugin "
|
1819 |
+
"vulnerabilities, weak passwords and obsolete software."
|
1820 |
+
msgstr ""
|
1821 |
+
"iThemes Security vă oferă peste 30 de moduri de a vă proteja și proteja site-"
|
1822 |
+
"ul WP. Site-urile WP pot fi o țintă ușoară pentru atacuri din cauza "
|
1823 |
+
"vulnerabilităților plugin-ului, a parolelor slabe și a software-ului "
|
1824 |
+
"învechit."
|
1825 |
+
|
1826 |
+
#: models/Settings.php:95
|
1827 |
+
msgid "Sucuri Security"
|
1828 |
+
msgstr "Securitate Sucuri"
|
1829 |
+
|
1830 |
+
#: models/Settings.php:97
|
1831 |
+
msgid ""
|
1832 |
+
"The Sucuri WordPress Security plugin is a security toolset for security "
|
1833 |
+
"integrity monitoring, malware detection and security hardening."
|
1834 |
+
msgstr ""
|
1835 |
+
"Pluginul Sucuri WordPress Security este un set de instrumente de securitate "
|
1836 |
+
"pentru monitorizarea integrității securității, detectarea de malware și "
|
1837 |
+
"întărirea securității."
|
1838 |
+
|
1839 |
+
#: models/Settings.php:102
|
1840 |
+
msgid "Back Up WordPress"
|
1841 |
+
msgstr "Back Up WordPress"
|
1842 |
+
|
1843 |
+
#: models/Settings.php:104
|
1844 |
+
msgid ""
|
1845 |
+
"Simple automated backups of your WordPress-powered website. Back Up "
|
1846 |
+
"WordPress will back up your entire site including your database and all your "
|
1847 |
+
"files on a schedule that suits you."
|
1848 |
+
msgstr ""
|
1849 |
+
"Copii de rezervă simple automate ale site-ului dvs. web bazat pe WordPress. "
|
1850 |
+
"Back Up WordPress va face backup pentru întregul site, inclusiv baza de date "
|
1851 |
+
"și toate fișierele dvs. într-un program care vi se potrivește."
|
1852 |
+
|
1853 |
+
#: models/Settings.php:109
|
1854 |
+
msgid "SEO SQUIRRLY"
|
1855 |
+
msgstr "SQUIRRLY SEO"
|
1856 |
+
|
1857 |
+
#: models/Settings.php:111
|
1858 |
+
msgid ""
|
1859 |
+
"Welcome to Assisted WordPress SEO. Say Good-Bye to Search Engine "
|
1860 |
+
"Frustrations. Squirrly assists you in getting Excellent SEO for Humans and "
|
1861 |
+
"Search Engines."
|
1862 |
+
msgstr ""
|
1863 |
+
"Bine ați venit la asistat WordPress SEO. Spuneți-vă la revedere la "
|
1864 |
+
"frustrările motorului de căutare. Squirrly vă ajută să obțineți un SEO "
|
1865 |
+
"excelent pentru oameni și motoare de căutare."
|
1866 |
+
|
1867 |
+
#: models/Settings.php:116
|
1868 |
+
msgid "Elementor Page Builder"
|
1869 |
+
msgstr "Elementor Page Builder"
|
1870 |
+
|
1871 |
+
#: models/Settings.php:118
|
1872 |
+
msgid ""
|
1873 |
+
"The most advanced frontend drag & drop page builder. Create high-end, pixel "
|
1874 |
+
"perfect websites at record speeds. Any theme, any page, any design."
|
1875 |
+
msgstr ""
|
1876 |
+
"Cel mai avansat constructor de pagini drag and drop frontend. Creați site-"
|
1877 |
+
"uri web de înaltă performanță, cu pixeli, la viteze record. Orice temă, "
|
1878 |
+
"orice pagină, orice design."
|
1879 |
+
|
1880 |
+
#: models/Settings.php:123
|
1881 |
+
msgid "Weglot Translate"
|
1882 |
+
msgstr "Traducerea Weglot"
|
1883 |
+
|
1884 |
+
#: models/Settings.php:125
|
1885 |
+
msgid ""
|
1886 |
+
"Translate your website into multiple languages without any code. Weglot "
|
1887 |
+
"Translate is fully SEO compatible and follows Google's best practices."
|
1888 |
+
msgstr ""
|
1889 |
+
"Traduceți site-ul dvs. web în mai multe limbi fără niciun cod. Weglot "
|
1890 |
+
"Translate este pe deplin compatibil cu SEO și respectă cele mai bune "
|
1891 |
+
"practici Google."
|
1892 |
+
|
1893 |
+
#: models/Settings.php:130
|
1894 |
+
msgid "AddToAny Share Btn"
|
1895 |
+
msgstr "AddToAny Share Btn"
|
1896 |
+
|
1897 |
+
#: models/Settings.php:132
|
1898 |
+
msgid ""
|
1899 |
+
"Share buttons for WordPress including the AddToAny sharing button, Facebook, "
|
1900 |
+
"Twitter, Google+, Pinterest, WhatsApp, many more, and follow icons too."
|
1901 |
+
msgstr ""
|
1902 |
+
"Partajează butoane pentru WordPress, inclusiv butonul de partajare AddToAny, "
|
1903 |
+
"Facebook, Twitter, Google+, Pinterest, WhatsApp, multe altele și urmează și "
|
1904 |
+
"pictogramele."
|
1905 |
+
|
1906 |
+
#: models/Settings.php:146
|
1907 |
+
msgid ""
|
1908 |
+
"You can't set both ADMIN and LOGIN with the same name. Please use different "
|
1909 |
+
"names"
|
1910 |
+
msgstr ""
|
1911 |
+
"Nu puteți seta atât ADMIN, cât și LOGIN cu același nume. Vă rugăm să "
|
1912 |
+
"folosiți diferite nume"
|
1913 |
+
|
1914 |
+
#: models/Settings.php:295
|
1915 |
+
#, php-format
|
1916 |
+
msgid ""
|
1917 |
+
"Short name detected: %s. You need to use unique paths with more than 4 chars "
|
1918 |
+
"to avoid WordPress errors."
|
1919 |
+
msgstr ""
|
1920 |
+
"Nume scurt detectat: %s. Trebuie să utilizați căi unice cu mai mult de 4 "
|
1921 |
+
"caractere pentru a evita erorile WordPress."
|
1922 |
+
|
1923 |
+
#: models/Settings.php:300
|
1924 |
+
#, php-format
|
1925 |
+
msgid ""
|
1926 |
+
"Invalid name detected: %s. You need to use another name to avoid WordPress "
|
1927 |
+
"errors."
|
1928 |
+
msgstr ""
|
1929 |
+
"Numele nevalid este detectat: %s. Trebuie să folosiți un alt nume pentru a "
|
1930 |
+
"evita erorile WordPress."
|
1931 |
+
|
1932 |
+
#: models/Settings.php:305
|
1933 |
+
#, php-format
|
1934 |
+
msgid ""
|
1935 |
+
"Invalid name detected: %s. Add only the final path name to avoid WordPress "
|
1936 |
+
"errors."
|
1937 |
+
msgstr ""
|
1938 |
+
"Numele nevalid este detectat: %s. Adaugă doar numele final de cale pentru a "
|
1939 |
+
"evita erorile WordPress."
|
1940 |
+
|
1941 |
+
#: models/Settings.php:309
|
1942 |
+
#, php-format
|
1943 |
+
msgid ""
|
1944 |
+
"Invalid name detected: %s. The name can't start with / to avoid WordPress "
|
1945 |
+
"errors."
|
1946 |
+
msgstr ""
|
1947 |
+
"Numele nevalid este detectat: %s. Numele nu poate începe cu / pentru a evita "
|
1948 |
+
"erorile WordPress."
|
1949 |
+
|
1950 |
+
#: models/Settings.php:316
|
1951 |
+
#, php-format
|
1952 |
+
msgid ""
|
1953 |
+
"Invalid name detected: %s. The paths can't end with . to avoid WordPress "
|
1954 |
+
"errors."
|
1955 |
+
msgstr ""
|
1956 |
+
"Numele nevalid este detectat: %s. Căile nu se pot termina. pentru a evita "
|
1957 |
+
"erorile WordPress."
|
1958 |
+
|
1959 |
+
#: models/Settings.php:343
|
1960 |
+
#, php-format
|
1961 |
+
msgid ""
|
1962 |
+
"Weak name detected: %s. You need to use another name to increase your "
|
1963 |
+
"website security."
|
1964 |
+
msgstr ""
|
1965 |
+
"Numele slab detectat: %s. Trebuie să utilizați un alt nume pentru a crește "
|
1966 |
+
"securitatea site-ului."
|
1967 |
+
|
1968 |
+
#: view/Advanced.php:11
|
1969 |
+
msgid "Redirect Settings"
|
1970 |
+
msgstr "Setări redirecționare"
|
1971 |
+
|
1972 |
+
#: view/Advanced.php:15
|
1973 |
+
msgid "Redirect hidden paths"
|
1974 |
+
msgstr "Redirecționați căile ascunse"
|
1975 |
+
|
1976 |
+
#: view/Advanced.php:19
|
1977 |
+
msgid "Front page"
|
1978 |
+
msgstr "Înapoi la prima pagină"
|
1979 |
+
|
1980 |
+
#: view/Advanced.php:20
|
1981 |
+
msgid "404 page"
|
1982 |
+
msgstr "404 pag"
|
1983 |
+
|
1984 |
+
#: view/Advanced.php:32
|
1985 |
+
msgid ""
|
1986 |
+
"Redirect the protected paths /wp-admin, /wp-login to Front Page or 404 page."
|
1987 |
+
msgstr ""
|
1988 |
+
"Redirecționați căile protejate /wp-admin, /wp-login către prima pagină sau "
|
1989 |
+
"pagina 404."
|
1990 |
+
|
1991 |
+
#: view/Advanced.php:33
|
1992 |
+
msgid ""
|
1993 |
+
"You can create a new page and come back to choose to redirect to that page"
|
1994 |
+
msgstr ""
|
1995 |
+
"Puteți crea o pagină nouă și reveni pentru a alege să redirecționați către "
|
1996 |
+
"pagina respectivă"
|
1997 |
+
|
1998 |
+
#: view/Advanced.php:39
|
1999 |
+
msgid "Custom Safe URL Param"
|
2000 |
+
msgstr "Personalizează Parametrul de siguranță"
|
2001 |
+
|
2002 |
+
#: view/Advanced.php:40
|
2003 |
+
msgid "eg. disable_url, safe_url"
|
2004 |
+
msgstr "de exemplu. disable_url, safe_url"
|
2005 |
+
|
2006 |
+
#: view/Advanced.php:46
|
2007 |
+
msgid ""
|
2008 |
+
"The Safe URL will set all the settings to default. Use it only if you're "
|
2009 |
+
"locked out"
|
2010 |
+
msgstr ""
|
2011 |
+
"Adresa URL sigură va seta toate setările ca implicită. Folosiți-l doar dacă "
|
2012 |
+
"sunteți blocat"
|
2013 |
+
|
2014 |
+
#: view/Advanced.php:47
|
2015 |
+
msgid "Safe URL:"
|
2016 |
+
msgstr "URL de siguranță:"
|
2017 |
+
|
2018 |
+
#: view/Advanced.php:53
|
2019 |
+
msgid "Compatibility Settings"
|
2020 |
+
msgstr "Setări de compatibilitate"
|
2021 |
+
|
2022 |
+
#: view/Advanced.php:61
|
2023 |
+
msgid "Fix Relative URLs"
|
2024 |
+
msgstr "Remediază adresele URL relative"
|
2025 |
+
|
2026 |
+
#: view/Advanced.php:63
|
2027 |
+
#, php-format
|
2028 |
+
msgid "Convert links like /wp-content/* into %s/wp-content/*."
|
2029 |
+
msgstr "Convertiți legături precum /wp-content / * în %s /wp-content / *."
|
2030 |
+
|
2031 |
+
#: view/Advanced.php:73
|
2032 |
+
msgid "Fix Sitemaps XML"
|
2033 |
+
msgstr "Corectează Sitemaps XML"
|
2034 |
+
|
2035 |
+
#: view/Advanced.php:75
|
2036 |
+
msgid "Double check the Sitemap XML files and make sure the paths are changed."
|
2037 |
+
msgstr ""
|
2038 |
+
"Verificați dublu fișierele XML Sitemap și asigurați-vă că căile sunt "
|
2039 |
+
"schimbate."
|
2040 |
+
|
2041 |
+
#: view/Advanced.php:85
|
2042 |
+
msgid "Fix Robots.txt"
|
2043 |
+
msgstr "Corectează Robots.txt"
|
2044 |
+
|
2045 |
+
#: view/Advanced.php:87
|
2046 |
+
msgid "Hide WordPress paths from robots.txt file"
|
2047 |
+
msgstr "Ascundeți căile WordPress din fișierul robots.txt"
|
2048 |
+
|
2049 |
+
#: view/Advanced.php:97
|
2050 |
+
msgid "Late Loading"
|
2051 |
+
msgstr "Încărcare îmtârziată"
|
2052 |
+
|
2053 |
+
#: view/Advanced.php:99
|
2054 |
+
msgid ""
|
2055 |
+
"Load HMW after all plugins are loaded. Useful for CDN plugins (eg. CDN "
|
2056 |
+
"Enabler)."
|
2057 |
+
msgstr ""
|
2058 |
+
"Încărcați HMW după încărcarea tuturor plugin-urilor. Util pentru plugin-"
|
2059 |
+
"urile CDN (de ex. CDN Enabler)."
|
2060 |
+
|
2061 |
+
#: view/Advanced.php:100
|
2062 |
+
msgid "(only if other cache plugins request this)"
|
2063 |
+
msgstr "(numai dacă alte plugin-uri cache solicită acest lucru)"
|
2064 |
+
|
2065 |
+
#: view/Advanced.php:110
|
2066 |
+
msgid "Clean Login Page"
|
2067 |
+
msgstr "Curățați pagina de conectare"
|
2068 |
+
|
2069 |
+
#: view/Advanced.php:112
|
2070 |
+
msgid ""
|
2071 |
+
"Cancel the login hooks from other plugins and themes to prevent them from "
|
2072 |
+
"changing the Hide My WordPress redirects."
|
2073 |
+
msgstr ""
|
2074 |
+
"Anulați cârligele de conectare de la alte plugin-uri și teme pentru a le "
|
2075 |
+
"împiedica să schimbe ascunderea redirecțiilor WordPress."
|
2076 |
+
|
2077 |
+
#: view/Advanced.php:112
|
2078 |
+
msgid "(not recommended)"
|
2079 |
+
msgstr "(Nu se recomandă)"
|
2080 |
+
|
2081 |
+
#: view/Advanced.php:121
|
2082 |
+
msgid "Cache Settings"
|
2083 |
+
msgstr "Setări cache"
|
2084 |
+
|
2085 |
+
#: view/Advanced.php:129
|
2086 |
+
msgid "Security Check Notification"
|
2087 |
+
msgstr "Notificare verificare securitate"
|
2088 |
+
|
2089 |
+
#: view/Advanced.php:131
|
2090 |
+
msgid "Show Security Check notification when it's not checked every week."
|
2091 |
+
msgstr ""
|
2092 |
+
"Afișați notificarea de verificare a securității atunci când nu este "
|
2093 |
+
"verificată în fiecare săptămână."
|
2094 |
+
|
2095 |
+
#: view/Advanced.php:147
|
2096 |
+
msgid "Optimize CSS and JS files"
|
2097 |
+
msgstr "Optimizați fișierele CSS și JS"
|
2098 |
+
|
2099 |
+
#: view/Advanced.php:148
|
2100 |
+
msgid "Cache CSS, JS and Images to increase the frontend loading speed."
|
2101 |
+
msgstr "Cache CSS, JS și Imagini pentru a crește viteza de încărcare frontend."
|
2102 |
+
|
2103 |
+
#: view/Advanced.php:149
|
2104 |
+
#, php-format
|
2105 |
+
msgid "Check the website loading speed with %sPingdom Tool%s"
|
2106 |
+
msgstr "Verificați viteza de încărcare a site-ului web cu %sPingdom Tool %s"
|
2107 |
+
|
2108 |
+
#: view/Advanced.php:157
|
2109 |
+
msgid "Notification Settings"
|
2110 |
+
msgstr "Setări Notificări"
|
2111 |
+
|
2112 |
+
#: view/Advanced.php:165
|
2113 |
+
msgid "Email notification"
|
2114 |
+
msgstr "Permite închiderea curând e-mail notificare"
|
2115 |
+
|
2116 |
+
#: view/Advanced.php:166
|
2117 |
+
msgid "Send me an email with the changed admin and login URLs"
|
2118 |
+
msgstr "Trimite-mi un e-mail cu adresele modificate de admin și de conectare"
|
2119 |
+
|
2120 |
+
#: view/Advanced.php:175 view/Connect.php:17
|
2121 |
+
msgid "Email Address"
|
2122 |
+
msgstr "Adresa email"
|
2123 |
+
|
2124 |
+
#: view/Advanced.php:191 view/Brute.php:115 view/Mapping.php:210
|
2125 |
+
#: view/Mapping.php:215 view/Permalinks.php:530 view/Permalinks.php:535
|
2126 |
+
#: view/Tweaks.php:162
|
2127 |
+
msgid "Save"
|
2128 |
+
msgstr "Salvează"
|
2129 |
+
|
2130 |
+
#: view/Advanced.php:192 view/Brute.php:116 view/Mapping.php:211
|
2131 |
+
#: view/Mapping.php:216 view/Permalinks.php:531 view/Permalinks.php:536
|
2132 |
+
#: view/Tweaks.php:163
|
2133 |
+
#, php-format
|
2134 |
+
msgid "Love Hide My WP %s? Show us ;)"
|
2135 |
+
msgstr "Îți place ascunde WP %s? Arata-ne ;)"
|
2136 |
+
|
2137 |
+
#: view/Advanced.php:199 view/Mapping.php:243 view/Permalinks.php:563
|
2138 |
+
#: view/Tweaks.php:192
|
2139 |
+
msgid "Love Hide My WP?"
|
2140 |
+
msgstr "Îți place ascunde WP-ul meu?"
|
2141 |
+
|
2142 |
+
#: view/Advanced.php:204 view/Permalinks.php:568 view/Tweaks.php:197
|
2143 |
+
msgid "Please help us and support our plugin on WordPress.org"
|
2144 |
+
msgstr ""
|
2145 |
+
"Vă rugăm să ne ajutați și să susțineți plugin-ul nostru pe WordPress.org"
|
2146 |
+
|
2147 |
+
#: view/Advanced.php:207 view/Mapping.php:249 view/Permalinks.php:571
|
2148 |
+
#: view/Tweaks.php:200
|
2149 |
+
msgid "Rate Hide My WP"
|
2150 |
+
msgstr "Evaluează Hide My WP"
|
2151 |
+
|
2152 |
+
#: view/Advanced.php:210 view/Permalinks.php:574 view/Tweaks.php:203
|
2153 |
+
msgid "Contact us after you left the review cause we have a surprise for you."
|
2154 |
+
msgstr ""
|
2155 |
+
"Contactați-ne după ce ați părăsit cauza pentru examinare, avem o surpriză "
|
2156 |
+
"pentru dvs."
|
2157 |
+
|
2158 |
+
#: view/Advanced.php:221 view/Mapping.php:224 view/Permalinks.php:544
|
2159 |
+
#: view/Tweaks.php:173
|
2160 |
+
msgid "Check Your Website"
|
2161 |
+
msgstr "Verificați-vă site-ul"
|
2162 |
+
|
2163 |
+
#: view/Advanced.php:223 view/Mapping.php:226 view/Permalinks.php:546
|
2164 |
+
#: view/Tweaks.php:175
|
2165 |
+
msgid "Check if your website is secured with the current settings."
|
2166 |
+
msgstr "Verificați dacă site-ul dvs. web este securizat cu setările actuale."
|
2167 |
+
|
2168 |
+
#: view/Advanced.php:229 view/Mapping.php:232 view/Permalinks.php:552
|
2169 |
+
#: view/Tweaks.php:181
|
2170 |
+
msgid ""
|
2171 |
+
"Make sure you save the settings and empty the cache before checking your "
|
2172 |
+
"website with our tool."
|
2173 |
+
msgstr ""
|
2174 |
+
"Asigurați-vă că salvați setările și goliți memoria cache înainte de a "
|
2175 |
+
"verifica site-ul dvs. web cu instrumentul nostru."
|
2176 |
+
|
2177 |
+
#: view/Advanced.php:233 view/Mapping.php:236 view/Permalinks.php:556
|
2178 |
+
#: view/Tweaks.php:185
|
2179 |
+
msgid "Learn more about Hide My WP"
|
2180 |
+
msgstr "Aflați mai multe despre Ascundeți WP"
|
2181 |
+
|
2182 |
+
#: view/Backup.php:7
|
2183 |
+
msgid "Backup/Restore Settings"
|
2184 |
+
msgstr "Setări de Beckup/Restore"
|
2185 |
+
|
2186 |
+
#: view/Backup.php:9
|
2187 |
+
msgid ""
|
2188 |
+
"Click Backup and the download will start automatically. You can use the "
|
2189 |
+
"Backup for all your websites."
|
2190 |
+
msgstr ""
|
2191 |
+
"Faceți clic pe Backup și descărcarea va începe automat. Puteți utiliza "
|
2192 |
+
"Backup pentru toate site-urile dvs. web."
|
2193 |
+
|
2194 |
+
#: view/Backup.php:15 view/Backup.php:55
|
2195 |
+
msgid "Backup Settings"
|
2196 |
+
msgstr "Setări salvare"
|
2197 |
+
|
2198 |
+
#: view/Backup.php:26
|
2199 |
+
msgid "Hide My Wp Restore"
|
2200 |
+
msgstr "Restaurare setări Hide My WP"
|
2201 |
+
|
2202 |
+
#: view/Backup.php:32
|
2203 |
+
msgid "Upload the file with the saved Hide My Wp Settings"
|
2204 |
+
msgstr "Încărcați fișierul cu salvarea Hide My WP Settings"
|
2205 |
+
|
2206 |
+
#: view/Backup.php:40
|
2207 |
+
msgid "Restore Backup"
|
2208 |
+
msgstr "Restaurați backup"
|
2209 |
+
|
2210 |
+
#: view/Backup.php:56
|
2211 |
+
msgid ""
|
2212 |
+
"It's important to <strong>save your settings every time you change them</"
|
2213 |
+
"strong>. You can use the backup to configure other websites you own."
|
2214 |
+
msgstr ""
|
2215 |
+
"Este important să <strong>vă salvați setările de fiecare dată când le "
|
2216 |
+
"schimbați</strong> . Puteți utiliza backup pentru a configura alte site-uri "
|
2217 |
+
"web pe care le dețineți."
|
2218 |
+
|
2219 |
+
#: view/Brute.php:15
|
2220 |
+
msgid "Use Brute Force Protection"
|
2221 |
+
msgstr "Folosiți Brute Force Protection"
|
2222 |
+
|
2223 |
+
#: view/Brute.php:17
|
2224 |
+
msgid "Protects your website against brute force login attacks"
|
2225 |
+
msgstr ""
|
2226 |
+
"Protejează site-ul dvs. împotriva atacurilor de conectare cu forțe brute"
|
2227 |
+
|
2228 |
+
#: view/Brute.php:28
|
2229 |
+
msgid "Math Check protection"
|
2230 |
+
msgstr "Protecție cu Verificare Matematică"
|
2231 |
+
|
2232 |
+
#: view/Brute.php:53
|
2233 |
+
msgid "Max fail attempts"
|
2234 |
+
msgstr "Numărul de încercările eronate"
|
2235 |
+
|
2236 |
+
#: view/Brute.php:54
|
2237 |
+
msgid "Block IP on login page"
|
2238 |
+
msgstr "Blocați IP pe pagina de conectare"
|
2239 |
+
|
2240 |
+
#: view/Brute.php:62
|
2241 |
+
msgid "Ban duration"
|
2242 |
+
msgstr "Durata interdicției"
|
2243 |
+
|
2244 |
+
#: view/Brute.php:63
|
2245 |
+
msgid "No. of seconds"
|
2246 |
+
msgstr "Număr de secunde"
|
2247 |
+
|
2248 |
+
#: view/Brute.php:71
|
2249 |
+
msgid "Lockout Message"
|
2250 |
+
msgstr "Mesaj de blocare"
|
2251 |
+
|
2252 |
+
#: view/Brute.php:72
|
2253 |
+
msgid "Show message instead of login form"
|
2254 |
+
msgstr "Afișați mesajul în loc de formularul de autentificare"
|
2255 |
+
|
2256 |
+
#: view/Brute.php:86
|
2257 |
+
msgid "Whitelist IPs"
|
2258 |
+
msgstr "IP-uri cu lista albă"
|
2259 |
+
|
2260 |
+
#: view/Brute.php:87
|
2261 |
+
#, php-format
|
2262 |
+
msgid ""
|
2263 |
+
"You can white-list a single IP like 192.168.0.1 or a range of 245 IPs like "
|
2264 |
+
"192.168.0.*. Find your IP with %s"
|
2265 |
+
msgstr ""
|
2266 |
+
"Puteți lista alb un singur IP cum ar fi 192.168.0.1 sau o gamă de 245 de IP-"
|
2267 |
+
"uri precum 192.168.0. *. Găsiți IP-ul dvs. cu %s"
|
2268 |
+
|
2269 |
+
#: view/Brute.php:100
|
2270 |
+
msgid "Ban IPs"
|
2271 |
+
msgstr "Interzicerea IP-urilor"
|
2272 |
+
|
2273 |
+
#: view/Brute.php:101
|
2274 |
+
msgid ""
|
2275 |
+
"You can ban a single IP like 192.168.0.1 or a range of 245 IPs like "
|
2276 |
+
"192.168.0.*. These IPs will not be able to access the login page."
|
2277 |
+
msgstr ""
|
2278 |
+
"Puteți interzice un singur IP precum 192.168.0.1 sau o gamă de 245 de IP-uri "
|
2279 |
+
"precum 192.168.0. *. Aceste IP-uri nu vor putea accesa pagina de conectare."
|
2280 |
+
|
2281 |
+
#: view/Brute.php:122
|
2282 |
+
msgid "Blocked IPs"
|
2283 |
+
msgstr "IP-uri blocate"
|
2284 |
+
|
2285 |
+
#: view/Brute.php:128
|
2286 |
+
msgid "Unlock all"
|
2287 |
+
msgstr "Descuie tot"
|
2288 |
+
|
2289 |
+
#: view/Brute.php:139
|
2290 |
+
msgid "Brute Force Login Protection"
|
2291 |
+
msgstr "Protecția Brute Force pe login"
|
2292 |
+
|
2293 |
+
#: view/Brute.php:140
|
2294 |
+
msgid ""
|
2295 |
+
"Protects your website against brute force login attacks using Hide My "
|
2296 |
+
"WordPress <br /><br /> A common threat web developers face is a password-"
|
2297 |
+
"guessing attack known as a brute force attack. A brute-force attack is an "
|
2298 |
+
"attempt to discover a password by systematically trying every possible "
|
2299 |
+
"combination of letters, numbers, and symbols until you discover the one "
|
2300 |
+
"correct combination that works. "
|
2301 |
+
msgstr ""
|
2302 |
+
"Protejează site-ul dvs. împotriva atacurilor de conectare cu forțe brute, "
|
2303 |
+
"utilizând Hide My WordPress <br /><br /> O amenințare comună se confruntă cu "
|
2304 |
+
"dezvoltatorii web este un atac de ghicire a parolei cunoscut sub numele de "
|
2305 |
+
"atac de forță brută. Un atac de forță brută este o încercare de a descoperi "
|
2306 |
+
"o parolă încercând sistematic fiecare combinație posibilă de litere, numere "
|
2307 |
+
"și simboluri până când descoperi combinația corectă care funcționează."
|
2308 |
+
|
2309 |
+
#: view/Brute.php:146 view/Log.php:78
|
2310 |
+
msgid "Features"
|
2311 |
+
msgstr "Caracteristici"
|
2312 |
+
|
2313 |
+
#: view/Brute.php:148
|
2314 |
+
msgid "Limit the number of allowed login attempts using normal login form"
|
2315 |
+
msgstr ""
|
2316 |
+
"Limitați numărul de încercări de autentificare permise folosind formularul "
|
2317 |
+
"normal de autentificare"
|
2318 |
+
|
2319 |
+
#: view/Brute.php:149
|
2320 |
+
msgid "Math problem verification while logging in"
|
2321 |
+
msgstr "Verificarea problemelor matematice în momentul conectării"
|
2322 |
+
|
2323 |
+
#: view/Brute.php:150
|
2324 |
+
msgid "Manually block/unblock IP addresses"
|
2325 |
+
msgstr "Blocați / deblocați manual adresele IP"
|
2326 |
+
|
2327 |
+
#: view/Brute.php:151
|
2328 |
+
msgid "Manually whitelist trusted IP addresses"
|
2329 |
+
msgstr "Lista manuală de adrese IP de încredere"
|
2330 |
+
|
2331 |
+
#: view/Brute.php:152
|
2332 |
+
msgid "Option to inform user about remaining attempts on login page"
|
2333 |
+
msgstr ""
|
2334 |
+
"Opțiune de a informa utilizatorul despre încercările rămase pe pagina de "
|
2335 |
+
"conectare"
|
2336 |
+
|
2337 |
+
#: view/Brute.php:153
|
2338 |
+
msgid "Custom message to show to blocked users"
|
2339 |
+
msgstr "Mesaj personalizat pentru a fi afișat utilizatorilor blocați"
|
2340 |
+
|
2341 |
+
#: view/Connect.php:12
|
2342 |
+
msgid "Activate Free version"
|
2343 |
+
msgstr "Activați versiunea gratuită"
|
2344 |
+
|
2345 |
+
#: view/Connect.php:18
|
2346 |
+
msgid "Enter your email address to get security alerts and How To Lessons"
|
2347 |
+
msgstr ""
|
2348 |
+
"Introdu adresa de e-mail pentru a obține alerte de securitate și cum să "
|
2349 |
+
"lecții"
|
2350 |
+
|
2351 |
+
#: view/Connect.php:37
|
2352 |
+
msgid "Monitor my website, send me security alerts and vulnerability reports"
|
2353 |
+
msgstr ""
|
2354 |
+
"Monitorizează site-ul meu web, trimite-mi alerte de securitate și rapoarte "
|
2355 |
+
"de vulnerabilitate"
|
2356 |
+
|
2357 |
+
#: view/Connect.php:47
|
2358 |
+
msgid "I want to receive How To lessons for Hide My WP Ghost by email"
|
2359 |
+
msgstr ""
|
2360 |
+
"Vreau să primesc prin e-mail lecții despre cum să ascund fantoma mea WP"
|
2361 |
+
|
2362 |
+
#: view/Connect.php:58
|
2363 |
+
msgid "Activate"
|
2364 |
+
msgstr "Activează"
|
2365 |
+
|
2366 |
+
#: view/Connect.php:64
|
2367 |
+
msgid "Skip Activation"
|
2368 |
+
msgstr "Salt peste activare"
|
2369 |
+
|
2370 |
+
#: view/Connect.php:73
|
2371 |
+
msgid "Activate Hide My WP"
|
2372 |
+
msgstr "Activați Hide My WP"
|
2373 |
+
|
2374 |
+
#: view/Connect.php:75
|
2375 |
+
#, php-format
|
2376 |
+
msgid ""
|
2377 |
+
"By activating the Free version of Hide My WP you agree with our %sTerms of "
|
2378 |
+
"Use%s and %sPrivacy Policy%s"
|
2379 |
+
msgstr ""
|
2380 |
+
"Activând versiunea gratuită a Ascundeți WP-ul dvs. sunteți de acord cu "
|
2381 |
+
"%sTermenii noștri de utilizare %s și %s Politica de confidențialitate %s"
|
2382 |
+
|
2383 |
+
#: view/Connect.php:78
|
2384 |
+
msgid ""
|
2385 |
+
"Note! If you add your email you will receive a free token which will "
|
2386 |
+
"activate the plugin."
|
2387 |
+
msgstr ""
|
2388 |
+
"Notă! Dacă adăugați e-mailul dvs. veți primi un jeton gratuit care va activa "
|
2389 |
+
"plugin-ul."
|
2390 |
+
|
2391 |
+
#: view/Connect.php:81
|
2392 |
+
#, php-format
|
2393 |
+
msgid ""
|
2394 |
+
"If you bought Hide My WP Ghost please remove this plugin and install the one "
|
2395 |
+
"from %sYour Account%s"
|
2396 |
+
msgstr ""
|
2397 |
+
"Dacă ați cumpărat Hide My WP Ghost, vă rugăm să eliminați acest plugin și să-"
|
2398 |
+
"l instalați din %sYour Account %s"
|
2399 |
+
|
2400 |
+
#: view/Dashboard.php:18
|
2401 |
+
msgid "Security Level"
|
2402 |
+
msgstr "Nivel de securitate"
|
2403 |
+
|
2404 |
+
#: view/Dashboard.php:23 view/SecurityCheck.php:22
|
2405 |
+
#, php-format
|
2406 |
+
msgid ""
|
2407 |
+
"Your website security %sis extremely weak%s. %sMany hacking doors are "
|
2408 |
+
"available."
|
2409 |
+
msgstr ""
|
2410 |
+
"Securitatea site-ului dvs. %sis extrem de slab %s. %sMe multe uși de "
|
2411 |
+
"hacking sunt disponibile."
|
2412 |
+
|
2413 |
+
#: view/Dashboard.php:26 view/SecurityCheck.php:25
|
2414 |
+
#, php-format
|
2415 |
+
msgid ""
|
2416 |
+
"Your website security %sis very weak%s. %sMany hacking doors are available."
|
2417 |
+
msgstr ""
|
2418 |
+
"Securitatea site-ului dvs. %sis foarte slab %s. %sMe multe uși de hacking "
|
2419 |
+
"sunt disponibile."
|
2420 |
+
|
2421 |
+
#: view/Dashboard.php:29 view/SecurityCheck.php:28
|
2422 |
+
#, php-format
|
2423 |
+
msgid ""
|
2424 |
+
"Your website security is still weak. %sSome of the main hacking doors are "
|
2425 |
+
"still available."
|
2426 |
+
msgstr ""
|
2427 |
+
"Securitatea site-ului dvs. web este încă slabă. %s dintre unele dintre "
|
2428 |
+
"principalele uși de hacking sunt încă disponibile."
|
2429 |
+
|
2430 |
+
#: view/Dashboard.php:32 view/SecurityCheck.php:31
|
2431 |
+
#, php-format
|
2432 |
+
msgid ""
|
2433 |
+
"Your website security is strong. %sKeep checking the security every week."
|
2434 |
+
msgstr ""
|
2435 |
+
"Securitatea site-ului dvs. web este puternică. %s Vă rugăm să verificați "
|
2436 |
+
"securitatea în fiecare săptămână."
|
2437 |
+
|
2438 |
+
#: view/Dashboard.php:37
|
2439 |
+
msgid "Urgent Security Actions Required"
|
2440 |
+
msgstr "Acțiuni de securitate urgente necesare"
|
2441 |
+
|
2442 |
+
#: view/Dashboard.php:45
|
2443 |
+
msgid "Check All The Security Tasks"
|
2444 |
+
msgstr "Verificați toate sarcinile de securitate"
|
2445 |
+
|
2446 |
+
#: view/Dashboard.php:47
|
2447 |
+
msgid "Upgrade Your Security"
|
2448 |
+
msgstr "Îmbunătățiți-vă securitatea"
|
2449 |
+
|
2450 |
+
#: view/Dashboard.php:55
|
2451 |
+
msgid "Recheck Security"
|
2452 |
+
msgstr "Verificați securitatea"
|
2453 |
+
|
2454 |
+
#: view/Dashboard.php:107
|
2455 |
+
msgid "Checking Website Security ..."
|
2456 |
+
msgstr "Verificarea securității site-ului ..."
|
2457 |
+
|
2458 |
+
#: view/FrontendCheck.php:7
|
2459 |
+
msgid "Next Steps"
|
2460 |
+
msgstr "Pasul urmator"
|
2461 |
+
|
2462 |
+
#: view/FrontendCheck.php:9
|
2463 |
+
msgid "Frontend Login Test"
|
2464 |
+
msgstr "Test de conectare frontend"
|
2465 |
+
|
2466 |
+
#: view/FrontendCheck.php:13
|
2467 |
+
#, php-format
|
2468 |
+
msgid "Run %sFrontend Login Test%s and login inside the pupop. "
|
2469 |
+
msgstr ""
|
2470 |
+
"Rulați %sFrontend Login de testare %s și conectați-vă în interiorul "
|
2471 |
+
"cățelului."
|
2472 |
+
|
2473 |
+
#: view/FrontendCheck.php:14
|
2474 |
+
msgid "If you're able to login, you've set the new paths correctly."
|
2475 |
+
msgstr "Dacă vă puteți autentifica, ați setat corect noile căi."
|
2476 |
+
|
2477 |
+
#: view/FrontendCheck.php:15
|
2478 |
+
msgid ""
|
2479 |
+
"If the Login Page displays any error, please make sure you follow the Hide "
|
2480 |
+
"My WP Ghost instructions before moving forward."
|
2481 |
+
msgstr ""
|
2482 |
+
"Dacă pagina de conectare afișează vreo eroare, asigurați-vă că urmați "
|
2483 |
+
"instrucțiunile Hide My WP Ghost înainte de a merge mai departe."
|
2484 |
+
|
2485 |
+
#: view/FrontendCheck.php:16
|
2486 |
+
msgid ""
|
2487 |
+
"Do not log out from this browser until you are confident that the Frontend "
|
2488 |
+
"is working and you will be able to log in again."
|
2489 |
+
msgstr ""
|
2490 |
+
"Nu vă deconectați de pe acest browser până nu aveți încredere că Frontend "
|
2491 |
+
"funcționează și veți putea să vă autentificați din nou."
|
2492 |
+
|
2493 |
+
#: view/FrontendCheck.php:17
|
2494 |
+
#, php-format
|
2495 |
+
msgid ""
|
2496 |
+
"If you can't configure Hide My WP Ghost, switch to Default mode and "
|
2497 |
+
"%scontact us%s."
|
2498 |
+
msgstr ""
|
2499 |
+
"Dacă nu puteți configura Hide My WP Ghost, treceți la modul implicit și "
|
2500 |
+
"%scontact us %s."
|
2501 |
+
|
2502 |
+
#: view/FrontendCheck.php:21
|
2503 |
+
#, php-format
|
2504 |
+
msgid "%sWARNING:%s Use the custom login URL to login to admin."
|
2505 |
+
msgstr ""
|
2506 |
+
"%sWARNING: %s Utilizați URL-ul de conectare personalizat pentru a vă "
|
2507 |
+
"autentifica la administrator."
|
2508 |
+
|
2509 |
+
#: view/FrontendCheck.php:22
|
2510 |
+
#, php-format
|
2511 |
+
msgid ""
|
2512 |
+
"Your login URL will be: %s In case you can't re-login, use the safe URL: %s"
|
2513 |
+
msgstr ""
|
2514 |
+
"URL-ul dvs. de conectare va fi: %s În cazul în care nu vă puteți re-"
|
2515 |
+
"autentifica, utilizați adresa URL sigură: %s"
|
2516 |
+
|
2517 |
+
#: view/FrontendCheck.php:29
|
2518 |
+
msgid "Yes, it's working"
|
2519 |
+
msgstr "Da, funcționează"
|
2520 |
+
|
2521 |
+
#: view/FrontendCheck.php:44
|
2522 |
+
msgid "Frontend login Test"
|
2523 |
+
msgstr "Test de conectare frontend"
|
2524 |
+
|
2525 |
+
#: view/Log.php:10
|
2526 |
+
msgid "Events Settings"
|
2527 |
+
msgstr "Setări evenimente"
|
2528 |
+
|
2529 |
+
#: view/Log.php:23
|
2530 |
+
msgid "Log Users Events"
|
2531 |
+
msgstr "Jucați evenimente pentru utilizatori"
|
2532 |
+
|
2533 |
+
#: view/Log.php:24
|
2534 |
+
msgid "Track and Log events that happens on your WordPress site!"
|
2535 |
+
msgstr ""
|
2536 |
+
"Urmăriți și memorați evenimentele care se întâmplă pe site-ul dvs. WordPress!"
|
2537 |
+
|
2538 |
+
#: view/Log.php:37
|
2539 |
+
msgid "Log Brute Force Attempts"
|
2540 |
+
msgstr "Încercări Brute Force"
|
2541 |
+
|
2542 |
+
#: view/Log.php:38
|
2543 |
+
msgid "Track and Log brute force attempts"
|
2544 |
+
msgstr "Urmăriți și Memorați încercările Brute Force"
|
2545 |
+
|
2546 |
+
#: view/Log.php:46
|
2547 |
+
msgid "Log Use Roles"
|
2548 |
+
msgstr "Ce roluri să urmăriți"
|
2549 |
+
|
2550 |
+
#: view/Log.php:47
|
2551 |
+
msgid "Hold Control key to select multiple user roles"
|
2552 |
+
msgstr ""
|
2553 |
+
"Țineți apăsată tasta Control pentru a selecta mai multe roluri de utilizator"
|
2554 |
+
|
2555 |
+
#: view/Log.php:48
|
2556 |
+
msgid "Don't select any role if you want to log all user roles"
|
2557 |
+
msgstr ""
|
2558 |
+
"Nu selectați niciun rol dacă doriți să înregistrați toate rolurile "
|
2559 |
+
"utilizatorului"
|
2560 |
+
|
2561 |
+
#: view/Log.php:71
|
2562 |
+
msgid "Monitor everything that happens on your WordPress site!"
|
2563 |
+
msgstr "Monitorizați tot ce se întâmplă pe site-ul dvs. WordPress!"
|
2564 |
+
|
2565 |
+
#: view/Log.php:72
|
2566 |
+
msgid ""
|
2567 |
+
"It's safe to know what happened on your website at any time, in admin and on "
|
2568 |
+
"frontend."
|
2569 |
+
msgstr ""
|
2570 |
+
"Este sigur să știți ce s-a întâmplat pe site-ul dvs. web în orice moment, în "
|
2571 |
+
"admin și în frontend."
|
2572 |
+
|
2573 |
+
#: view/Log.php:73
|
2574 |
+
msgid ""
|
2575 |
+
"All the logs are saved on our Cloud Servers and your data is safe in case "
|
2576 |
+
"you reinstall the plugin"
|
2577 |
+
msgstr ""
|
2578 |
+
"Toate jurnalele sunt salvate pe serverele Cloud și datele dvs. sunt sigure "
|
2579 |
+
"în cazul în care reinstalați plugin-ul"
|
2580 |
+
|
2581 |
+
#: view/Log.php:80
|
2582 |
+
msgid "Monitor, track and log events on your website"
|
2583 |
+
msgstr ""
|
2584 |
+
"Monitorizați, urmăriți și înregistrați evenimentele de pe site-ul dvs. web"
|
2585 |
+
|
2586 |
+
#: view/Log.php:81
|
2587 |
+
msgid "Know what the other users are doing on your website and when"
|
2588 |
+
msgstr "Știți ce fac ceilalți utilizatori pe site-ul dvs. web și când"
|
2589 |
+
|
2590 |
+
#: view/Log.php:82
|
2591 |
+
msgid "You can set to receive email with alerts for one or more actions"
|
2592 |
+
msgstr ""
|
2593 |
+
"Puteți seta să primiți e-mail cu alerte pentru una sau mai multe acțiuni"
|
2594 |
+
|
2595 |
+
#: view/Log.php:83
|
2596 |
+
msgid "Filter events and users"
|
2597 |
+
msgstr "Filtrați evenimentele și utilizatorii"
|
2598 |
+
|
2599 |
+
#: view/Log.php:84
|
2600 |
+
msgid "Compatible with all themes and plugins"
|
2601 |
+
msgstr "Compatibil cu toate temele și plugin-urile"
|
2602 |
+
|
2603 |
+
#: view/Mapping.php:12
|
2604 |
+
msgid "Text Mapping"
|
2605 |
+
msgstr "Mapare text"
|
2606 |
+
|
2607 |
+
#: view/Mapping.php:19 view/Mapping.php:95 view/Mapping.php:168
|
2608 |
+
msgid ""
|
2609 |
+
"First, you need to switch Hide My Wp from Default mode to Safe Mode or Ghost "
|
2610 |
+
"Mode."
|
2611 |
+
msgstr ""
|
2612 |
+
"În primul rând, trebuie să comutați Hide My WP din modul implicit în modul "
|
2613 |
+
"Safe sau modul Ghost."
|
2614 |
+
|
2615 |
+
#: view/Mapping.php:24
|
2616 |
+
msgid "Replace the text in tags and classes to hide any WordPress footprint."
|
2617 |
+
msgstr ""
|
2618 |
+
"Înlocuiți textul în etichete și clase pentru a ascunde orice amprentă "
|
2619 |
+
"WordPress."
|
2620 |
+
|
2621 |
+
#: view/Mapping.php:25
|
2622 |
+
msgid ""
|
2623 |
+
"Note! Your plugins and themes may use these and it will affect the design "
|
2624 |
+
"and functionality."
|
2625 |
+
msgstr ""
|
2626 |
+
"Notă! Plugin-urile și temele dvs. le pot utiliza și acestea vor afecta "
|
2627 |
+
"designul și funcționalitatea."
|
2628 |
+
|
2629 |
+
#: view/Mapping.php:37
|
2630 |
+
msgid "Text Mapping only Classes, IDs, JS variables"
|
2631 |
+
msgstr "Modifică text-ul doar în clase, ID-uri, variabile JS"
|
2632 |
+
|
2633 |
+
#: view/Mapping.php:39
|
2634 |
+
msgid "Change the text only in classes, styles & scrips. (Recommended ON)"
|
2635 |
+
msgstr "Modificați textul doar în clase, stiluri și scrieri. (Recomandat ON)"
|
2636 |
+
|
2637 |
+
#: view/Mapping.php:40
|
2638 |
+
msgid "If this option is switched off, the text is changed in all page"
|
2639 |
+
msgstr ""
|
2640 |
+
"Dacă această opțiune este dezactivată, textul este schimbat în toate paginile"
|
2641 |
+
|
2642 |
+
#: view/Mapping.php:51 view/Mapping.php:64
|
2643 |
+
msgid "Remove Text Map"
|
2644 |
+
msgstr "Eliminați harta textului"
|
2645 |
+
|
2646 |
+
#: view/Mapping.php:76
|
2647 |
+
msgid "Add another text"
|
2648 |
+
msgstr "Adăugați un alt text"
|
2649 |
+
|
2650 |
+
#: view/Mapping.php:84
|
2651 |
+
msgid "URL Mapping"
|
2652 |
+
msgstr "Mapare URL"
|
2653 |
+
|
2654 |
+
#: view/Mapping.php:98
|
2655 |
+
msgid "You can add a list of URLs you want to change into new ones. "
|
2656 |
+
msgstr ""
|
2657 |
+
"Puteți adăuga o listă de adrese URL pe care doriți să le schimbați în altele "
|
2658 |
+
"noi."
|
2659 |
+
|
2660 |
+
#: view/Mapping.php:99
|
2661 |
+
msgid ""
|
2662 |
+
"It's important to include only internal URLs from Frontend source code after "
|
2663 |
+
"you activate the plugin in Safe Mode or Ghost Mode."
|
2664 |
+
msgstr ""
|
2665 |
+
"Este important să includeți doar adresele URL interne din codul sursă "
|
2666 |
+
"Frontend după activarea plugin-ului în modul Safe sau Ghost Mode."
|
2667 |
+
|
2668 |
+
#: view/Mapping.php:100
|
2669 |
+
msgid "Example:"
|
2670 |
+
msgstr "Exemplu:"
|
2671 |
+
|
2672 |
+
#: view/Mapping.php:102 view/Mapping.php:111
|
2673 |
+
msgid "from"
|
2674 |
+
msgstr "de la"
|
2675 |
+
|
2676 |
+
#: view/Mapping.php:106 view/Mapping.php:115
|
2677 |
+
msgid "to"
|
2678 |
+
msgstr "catre"
|
2679 |
+
|
2680 |
+
#: view/Mapping.php:109
|
2681 |
+
msgid "or"
|
2682 |
+
msgstr "sau"
|
2683 |
+
|
2684 |
+
#: view/Mapping.php:125 view/Mapping.php:138
|
2685 |
+
msgid "Remove URL Map"
|
2686 |
+
msgstr "Ștergeți Maparea URL"
|
2687 |
+
|
2688 |
+
#: view/Mapping.php:150
|
2689 |
+
msgid "Add another URL"
|
2690 |
+
msgstr "Adăugați o altă adresă URL"
|
2691 |
+
|
2692 |
+
#: view/Mapping.php:158
|
2693 |
+
msgid "CDN URLs"
|
2694 |
+
msgstr "URL-urile CDN"
|
2695 |
+
|
2696 |
+
#: view/Mapping.php:171
|
2697 |
+
msgid "You can add one or more CDN URLs you use."
|
2698 |
+
msgstr "Puteți adăuga unul sau mai multe URL-uri CDN pe care le utilizați."
|
2699 |
+
|
2700 |
+
#: view/Mapping.php:172
|
2701 |
+
msgid ""
|
2702 |
+
"This option will not activate the CDN option for your website but it will "
|
2703 |
+
"change the custom paths in case you already set a CDN URL with another "
|
2704 |
+
"plugin."
|
2705 |
+
msgstr ""
|
2706 |
+
"Această opțiune nu va activa opțiunea CDN pentru site-ul dvs. web, dar va "
|
2707 |
+
"schimba căile personalizate în cazul în care deja setați o adresă URL CDN cu "
|
2708 |
+
"un alt plugin."
|
2709 |
+
|
2710 |
+
#: view/Mapping.php:181 view/Mapping.php:190
|
2711 |
+
msgid "Remove CDN"
|
2712 |
+
msgstr "Eliminați CDN"
|
2713 |
+
|
2714 |
+
#: view/Mapping.php:199
|
2715 |
+
msgid "Add another CDN URL"
|
2716 |
+
msgstr "Adăugați o altă adresă URL CDN"
|
2717 |
+
|
2718 |
+
#: view/Mapping.php:246
|
2719 |
+
msgid "Give us 5 stars on WordPress.org"
|
2720 |
+
msgstr "Dă-ne 5 stele pe WordPress.org"
|
2721 |
+
|
2722 |
+
#: view/Permalinks.php:9
|
2723 |
+
msgid ""
|
2724 |
+
"Hide My WordPress requires to be activated on the entire network to prevent "
|
2725 |
+
"login issues!"
|
2726 |
+
msgstr ""
|
2727 |
+
"Ascunde WordPress-ul meu necesită să fie activat pe întreaga rețea pentru a "
|
2728 |
+
"preveni problemele de autentificare!"
|
2729 |
+
|
2730 |
+
#: view/Permalinks.php:32
|
2731 |
+
msgid "Levels of security"
|
2732 |
+
msgstr "Niveluri de securitate"
|
2733 |
+
|
2734 |
+
#: view/Permalinks.php:34
|
2735 |
+
msgid "Default (unsafe)"
|
2736 |
+
msgstr "Implicit (nesigur)"
|
2737 |
+
|
2738 |
+
#: view/Permalinks.php:35
|
2739 |
+
msgid "Lite mode"
|
2740 |
+
msgstr "Modul Lite"
|
2741 |
+
|
2742 |
+
#: view/Permalinks.php:38
|
2743 |
+
#, php-format
|
2744 |
+
msgid ""
|
2745 |
+
"Upgrade Your Website Security. Add Firewall, Hide WordPress Completely. "
|
2746 |
+
"%sUnlock this feature%s"
|
2747 |
+
msgstr ""
|
2748 |
+
"Upgrade-ți securitatea site-ului. Adăugați firewall, ascundeți complet "
|
2749 |
+
"WordPress. %sDeschideți această caracteristică %s"
|
2750 |
+
|
2751 |
+
#: view/Permalinks.php:42
|
2752 |
+
msgid "Ghost mode"
|
2753 |
+
msgstr "Mod Ghost"
|
2754 |
+
|
2755 |
+
#: view/Permalinks.php:46
|
2756 |
+
#, php-format
|
2757 |
+
msgid ""
|
2758 |
+
"%sWARNING:%s The admin path is hidden from visitors. Use the custom login "
|
2759 |
+
"URL to login to admin"
|
2760 |
+
msgstr ""
|
2761 |
+
"%sWARNING: %s Calea de administrare este ascunsă vizitatorilor. Utilizați "
|
2762 |
+
"URL-ul de conectare personalizat pentru a vă autentifica la admin"
|
2763 |
+
|
2764 |
+
#: view/Permalinks.php:47
|
2765 |
+
#, php-format
|
2766 |
+
msgid ""
|
2767 |
+
"If you can't login, use this URL: %s and all your changes are roll back to "
|
2768 |
+
"default"
|
2769 |
+
msgstr ""
|
2770 |
+
"Dacă nu vă puteți autentifica, utilizați această adresă URL: %s și toate "
|
2771 |
+
"modificările dvs. sunt redate în mod implicit"
|
2772 |
+
|
2773 |
+
#: view/Permalinks.php:119
|
2774 |
+
msgid "Admin Settings"
|
2775 |
+
msgstr "Setări Admin"
|
2776 |
+
|
2777 |
+
#: view/Permalinks.php:122
|
2778 |
+
#, php-format
|
2779 |
+
msgid ""
|
2780 |
+
"Your admin URL is changed by another plugin/theme in %s. To prevent errors, "
|
2781 |
+
"deactivate the other plugin who changes the admin path."
|
2782 |
+
msgstr ""
|
2783 |
+
"Adresa URL a dvs. este modificată cu un alt plugin / temă în %s. Pentru a "
|
2784 |
+
"preveni erorile, dezactivați celălalt plugin care modifică calea de "
|
2785 |
+
"administrare."
|
2786 |
+
|
2787 |
+
#: view/Permalinks.php:126
|
2788 |
+
#, php-format
|
2789 |
+
msgid ""
|
2790 |
+
"Your admin URL can't be changed on %s hosting because of the %s security "
|
2791 |
+
"terms."
|
2792 |
+
msgstr ""
|
2793 |
+
"URL-ul dvs. de admin nu poate fi modificat în %s hosting din cauza "
|
2794 |
+
"condițiilor de securitate %s."
|
2795 |
+
|
2796 |
+
#: view/Permalinks.php:132
|
2797 |
+
msgid "Custom Admin Path"
|
2798 |
+
msgstr "Personalizează Calea Admin"
|
2799 |
+
|
2800 |
+
#: view/Permalinks.php:133
|
2801 |
+
msgid "eg. adm, back"
|
2802 |
+
msgstr "de exemplu. adm, back"
|
2803 |
+
|
2804 |
+
#: view/Permalinks.php:147
|
2805 |
+
msgid "Hide \"wp-admin\""
|
2806 |
+
msgstr "Ascundeți 'wp-admin'"
|
2807 |
+
|
2808 |
+
#: view/Permalinks.php:148
|
2809 |
+
msgid "Show 404 Not Found Error when visitors access /wp-admin"
|
2810 |
+
msgstr ""
|
2811 |
+
"Afișare 404 Eroare nu a fost găsită când vizitatorii accesează /wp-admin"
|
2812 |
+
|
2813 |
+
#: view/Permalinks.php:157
|
2814 |
+
msgid "Hide the new admin path"
|
2815 |
+
msgstr "Ascundeți noua cale de admin"
|
2816 |
+
|
2817 |
+
#: view/Permalinks.php:158
|
2818 |
+
msgid ""
|
2819 |
+
"Let only the new login be accessible and redirect me to admin after logging "
|
2820 |
+
"in"
|
2821 |
+
msgstr ""
|
2822 |
+
"Permiteți accesul la noua conectare și să mă redirecționați către "
|
2823 |
+
"administrator după conectare"
|
2824 |
+
|
2825 |
+
#: view/Permalinks.php:163
|
2826 |
+
msgid ""
|
2827 |
+
"Some Themes don't work with custom Admin and Ajax paths. In case of ajax "
|
2828 |
+
"errors, switch back to wp-admin and admin-ajax.php."
|
2829 |
+
msgstr ""
|
2830 |
+
"Unele teme nu funcționează cu căi de administrare personalizate și Ajax. În "
|
2831 |
+
"cazul erorilor de ajax, treceți înapoi la wp-admin și admin-ajax.php."
|
2832 |
+
|
2833 |
+
#: view/Permalinks.php:169
|
2834 |
+
msgid "Login Settings"
|
2835 |
+
msgstr "Setări Login"
|
2836 |
+
|
2837 |
+
#: view/Permalinks.php:172
|
2838 |
+
#, php-format
|
2839 |
+
msgid ""
|
2840 |
+
"Your login URL is changed by another plugin/theme in %s. To prevent errors, "
|
2841 |
+
"deactivate the other plugin who changes the login path."
|
2842 |
+
msgstr ""
|
2843 |
+
"Adresa URL de conectare este modificată cu un alt plugin / temă din %s. "
|
2844 |
+
"Pentru a preveni erorile, dezactivați celălalt plugin care schimbă login."
|
2845 |
+
|
2846 |
+
#: view/Permalinks.php:177
|
2847 |
+
msgid "Custom Login Path"
|
2848 |
+
msgstr "Personalizează Calea Login"
|
2849 |
+
|
2850 |
+
#: view/Permalinks.php:178
|
2851 |
+
msgid "eg. login or signin"
|
2852 |
+
msgstr "de exemplu. login sau signin"
|
2853 |
+
|
2854 |
+
#: view/Permalinks.php:191
|
2855 |
+
msgid "Hide \"wp-login.php\""
|
2856 |
+
msgstr "Ascundeți \"wp-login.php\""
|
2857 |
+
|
2858 |
+
#: view/Permalinks.php:192
|
2859 |
+
msgid "Show 404 Not Found Error when visitors access /wp-login.php"
|
2860 |
+
msgstr "Afișare 404 Page Not Found când vizitatorii accesează /wp-login.php"
|
2861 |
+
|
2862 |
+
#: view/Permalinks.php:201
|
2863 |
+
msgid "Custom Lost Password Path"
|
2864 |
+
msgstr "Personalizează calea Lost Password"
|
2865 |
+
|
2866 |
+
#: view/Permalinks.php:202
|
2867 |
+
msgid "eg. lostpass or forgotpass"
|
2868 |
+
msgstr "de exemplu. lostpass sau forgotpass"
|
2869 |
+
|
2870 |
+
#: view/Permalinks.php:212
|
2871 |
+
msgid "Custom Register Path"
|
2872 |
+
msgstr "Personalizează calea de inregistrare"
|
2873 |
+
|
2874 |
+
#: view/Permalinks.php:213
|
2875 |
+
msgid "eg. newuser or register"
|
2876 |
+
msgstr "de exemplu. newuser sau register"
|
2877 |
+
|
2878 |
+
#: view/Permalinks.php:223
|
2879 |
+
msgid "Custom Logout Path"
|
2880 |
+
msgstr "Personalizează calea de deconectare"
|
2881 |
+
|
2882 |
+
#: view/Permalinks.php:224
|
2883 |
+
msgid "eg. logout or disconnect"
|
2884 |
+
msgstr "de exemplu. logout sau disconnect"
|
2885 |
+
|
2886 |
+
#: view/Permalinks.php:234
|
2887 |
+
msgid "Custom Activation Path"
|
2888 |
+
msgstr "Personalizează calea de activare"
|
2889 |
+
|
2890 |
+
#: view/Permalinks.php:235
|
2891 |
+
msgid "eg. multisite activation link"
|
2892 |
+
msgstr "de exemplu. multisite activation link"
|
2893 |
+
|
2894 |
+
#: view/Permalinks.php:248
|
2895 |
+
msgid "Common Paths"
|
2896 |
+
msgstr "Căile WordPress comunie"
|
2897 |
+
|
2898 |
+
#: view/Permalinks.php:252
|
2899 |
+
msgid "Custom admin-ajax Path"
|
2900 |
+
msgstr "Personalizează Calea admin-ajax"
|
2901 |
+
|
2902 |
+
#: view/Permalinks.php:253
|
2903 |
+
msgid "eg. ajax, json"
|
2904 |
+
msgstr "de exemplu. ajax, json"
|
2905 |
+
|
2906 |
+
#: view/Permalinks.php:266
|
2907 |
+
msgid "Hide wp-admin from ajax URL"
|
2908 |
+
msgstr "Ascundeți wp-admin de la adresa URL ajax"
|
2909 |
+
|
2910 |
+
#: view/Permalinks.php:267
|
2911 |
+
#, php-format
|
2912 |
+
msgid "Show /%s instead of /%s"
|
2913 |
+
msgstr "Afișați / %s în loc de / %s"
|
2914 |
+
|
2915 |
+
#: view/Permalinks.php:268
|
2916 |
+
msgid "Works only with the custom admin-ajax path to avoid infinite loops."
|
2917 |
+
msgstr ""
|
2918 |
+
"Funcționează numai cu calea personalizată admin-ajax pentru a evita bucle "
|
2919 |
+
"infinite."
|
2920 |
+
|
2921 |
+
#: view/Permalinks.php:275
|
2922 |
+
msgid "Custom wp-content Path"
|
2923 |
+
msgstr "Calea personalizată pentru wp-content"
|
2924 |
+
|
2925 |
+
#: view/Permalinks.php:276
|
2926 |
+
msgid "eg. core, inc, include"
|
2927 |
+
msgstr "de exemplu. nucleu, inc, include"
|
2928 |
+
|
2929 |
+
#: view/Permalinks.php:286
|
2930 |
+
msgid "Custom wp-includes Path"
|
2931 |
+
msgstr "Personalizează calea wp-include"
|
2932 |
+
|
2933 |
+
#: view/Permalinks.php:287
|
2934 |
+
msgid "eg. lib, library"
|
2935 |
+
msgstr "de exemplu. lib, library"
|
2936 |
+
|
2937 |
+
#: view/Permalinks.php:298
|
2938 |
+
msgid "Custom uploads Path"
|
2939 |
+
msgstr "Personalizează calea Uploads"
|
2940 |
+
|
2941 |
+
#: view/Permalinks.php:299
|
2942 |
+
msgid "eg. images, files"
|
2943 |
+
msgstr "de exemplu. imagini, files"
|
2944 |
+
|
2945 |
+
#: view/Permalinks.php:308
|
2946 |
+
#, php-format
|
2947 |
+
msgid ""
|
2948 |
+
"You already defined a different wp-content/uploads directory in wp-config."
|
2949 |
+
"php %s"
|
2950 |
+
msgstr ""
|
2951 |
+
"Ați definit deja un alt director wp-content/uploads în wp-config.php %s"
|
2952 |
+
|
2953 |
+
#: view/Permalinks.php:314
|
2954 |
+
msgid "Custom comment Path"
|
2955 |
+
msgstr "Personalizează calea de comentarii"
|
2956 |
+
|
2957 |
+
#: view/Permalinks.php:315
|
2958 |
+
msgid "eg. comments, discussion"
|
2959 |
+
msgstr "de exemplu. comentarii, dicussion"
|
2960 |
+
|
2961 |
+
#: view/Permalinks.php:326
|
2962 |
+
msgid "Custom author Path"
|
2963 |
+
msgstr "Personalizează calea autorului"
|
2964 |
+
|
2965 |
+
#: view/Permalinks.php:327
|
2966 |
+
msgid "eg. profile, usr, writer"
|
2967 |
+
msgstr "de exemplu. profil, usr, scriitor"
|
2968 |
+
|
2969 |
+
#: view/Permalinks.php:345
|
2970 |
+
msgid "Hide Author ID URL"
|
2971 |
+
msgstr "Ascundeți ID-ul autorului din adresa URL"
|
2972 |
+
|
2973 |
+
#: view/Permalinks.php:346
|
2974 |
+
msgid "Don't let URLs like domain.com?author=1 show the user login name"
|
2975 |
+
msgstr ""
|
2976 |
+
"Nu lăsați adresele URL precum domain.com?author=1 să arate numele de "
|
2977 |
+
"conectare al utilizatorului"
|
2978 |
+
|
2979 |
+
#: view/Permalinks.php:354
|
2980 |
+
msgid "Plugin Settings"
|
2981 |
+
msgstr "Setări Plugin"
|
2982 |
+
|
2983 |
+
#: view/Permalinks.php:358
|
2984 |
+
msgid "Custom plugins Path"
|
2985 |
+
msgstr "Plugin-uri personalizate"
|
2986 |
+
|
2987 |
+
#: view/Permalinks.php:359
|
2988 |
+
msgid "eg. modules"
|
2989 |
+
msgstr "de exemplu. module"
|
2990 |
+
|
2991 |
+
#: view/Permalinks.php:371
|
2992 |
+
msgid "Hide plugin names"
|
2993 |
+
msgstr "Ascundeți numele plugin-urilor"
|
2994 |
+
|
2995 |
+
#: view/Permalinks.php:372
|
2996 |
+
msgid "Give random names to each plugin"
|
2997 |
+
msgstr "Dați nume aleatorii fiecărui plugin"
|
2998 |
+
|
2999 |
+
#: view/Permalinks.php:379
|
3000 |
+
msgid "Theme Settings"
|
3001 |
+
msgstr "Setările temei"
|
3002 |
+
|
3003 |
+
#: view/Permalinks.php:383
|
3004 |
+
msgid "Custom themes Path"
|
3005 |
+
msgstr "Calea cu teme personalizate"
|
3006 |
+
|
3007 |
+
#: view/Permalinks.php:384
|
3008 |
+
msgid "eg. assets, templates, styles"
|
3009 |
+
msgstr "de exemplu. active, templates, style"
|
3010 |
+
|
3011 |
+
#: view/Permalinks.php:399
|
3012 |
+
msgid "Hide theme names"
|
3013 |
+
msgstr "Ascundeți numele temelor"
|
3014 |
+
|
3015 |
+
#: view/Permalinks.php:400
|
3016 |
+
msgid "Give random names to each theme (works in WP multisite)"
|
3017 |
+
msgstr "Dați nume aleatorii fiecărei teme (funcționează în WP multisite)"
|
3018 |
+
|
3019 |
+
#: view/Permalinks.php:411
|
3020 |
+
msgid "REST API Settings"
|
3021 |
+
msgstr "Setări REST API"
|
3022 |
+
|
3023 |
+
#: view/Permalinks.php:419
|
3024 |
+
msgid "Custom wp-json Path"
|
3025 |
+
msgstr "Personalizează Calea wp-json"
|
3026 |
+
|
3027 |
+
#: view/Permalinks.php:420
|
3028 |
+
msgid "eg. json, api, call"
|
3029 |
+
msgstr "de exemplu. json, api, call"
|
3030 |
+
|
3031 |
+
#: view/Permalinks.php:433
|
3032 |
+
msgid "Disable Rest API access"
|
3033 |
+
msgstr "Dezactivați accesul API"
|
3034 |
+
|
3035 |
+
#: view/Permalinks.php:434
|
3036 |
+
msgid "Disable Rest API access if you don't use your website for API calls"
|
3037 |
+
msgstr ""
|
3038 |
+
"Dezactivați accesului API dacă nu utilizați site-ul dvs. web pentru apeluri "
|
3039 |
+
"API"
|
3040 |
+
|
3041 |
+
#: view/Permalinks.php:442
|
3042 |
+
msgid "Security Settings"
|
3043 |
+
msgstr "Setări de Securitate"
|
3044 |
+
|
3045 |
+
#: view/Permalinks.php:454
|
3046 |
+
msgid "Hide WordPress Common Paths"
|
3047 |
+
msgstr "Ascundeți căile comune WordPress"
|
3048 |
+
|
3049 |
+
#: view/Permalinks.php:455
|
3050 |
+
msgid "Hide /wp-content, /wp-include, /plugins, /themes paths"
|
3051 |
+
msgstr "Ascunde /wp-content, /wp-include, /plugins, /themes"
|
3052 |
+
|
3053 |
+
#: view/Permalinks.php:456
|
3054 |
+
msgid "Hide upgrade.php and install.php for visitors"
|
3055 |
+
msgstr "Ascunde upgrade.php și install.php pentru vizitatori"
|
3056 |
+
|
3057 |
+
#: view/Permalinks.php:457
|
3058 |
+
msgid "(this may affect the fonts and images loaded through CSS)"
|
3059 |
+
msgstr "(acest lucru poate afecta fonturile și imaginile încărcate prin CSS)"
|
3060 |
+
|
3061 |
+
#: view/Permalinks.php:467
|
3062 |
+
msgid "Hide WordPress Common Files"
|
3063 |
+
msgstr "Ascundeți fișierele comune WordPress"
|
3064 |
+
|
3065 |
+
#: view/Permalinks.php:468
|
3066 |
+
msgid ""
|
3067 |
+
"Hide wp-config.php , wp-config-sample.php, readme.html, license.txt files"
|
3068 |
+
msgstr ""
|
3069 |
+
"Ascundeți fișierele wp-config.php, wp-config-sample.php, readme.html, "
|
3070 |
+
"license.txt"
|
3071 |
+
|
3072 |
+
#: view/Permalinks.php:480
|
3073 |
+
msgid "Firewall Against Script Injection"
|
3074 |
+
msgstr "Firewall împotriva injectării scriptului"
|
3075 |
+
|
3076 |
+
#: view/Permalinks.php:481
|
3077 |
+
msgid ""
|
3078 |
+
"Most WordPress installations are hosted on the popular Apache, Nginx and IIS "
|
3079 |
+
"web servers."
|
3080 |
+
msgstr ""
|
3081 |
+
"Majoritatea instalațiilor WordPress sunt găzduite pe celebrele servere web "
|
3082 |
+
"Apache, Nginx și IIS."
|
3083 |
+
|
3084 |
+
#: view/Permalinks.php:482
|
3085 |
+
msgid ""
|
3086 |
+
"A thorough set of rules can prevent many types of SQL Injection and URL "
|
3087 |
+
"hacks from being interpreted."
|
3088 |
+
msgstr ""
|
3089 |
+
"Un set complet de reguli poate împiedica interpretarea multor tipuri de SQL "
|
3090 |
+
"Injection și URL-urile URL."
|
3091 |
+
|
3092 |
+
#: view/Permalinks.php:493
|
3093 |
+
msgid "Disable Directory Browsing"
|
3094 |
+
msgstr "Dezactivați navigarea în directoare"
|
3095 |
+
|
3096 |
+
#: view/Permalinks.php:494
|
3097 |
+
#, php-format
|
3098 |
+
msgid "Don't let hackers see any directory content. See %sUploads Directory%s"
|
3099 |
+
msgstr ""
|
3100 |
+
"Nu lăsați hackerii să vadă niciun conținut de director. Consultați %sUploads "
|
3101 |
+
"Directory %s"
|
3102 |
+
|
3103 |
+
#: view/Permalinks.php:507
|
3104 |
+
msgid "Custom category Path"
|
3105 |
+
msgstr "Personalizează Calea de categorii"
|
3106 |
+
|
3107 |
+
#: view/Permalinks.php:508
|
3108 |
+
msgid "eg. cat, dir, list"
|
3109 |
+
msgstr "de exemplu. cat, dir, list"
|
3110 |
+
|
3111 |
+
#: view/Permalinks.php:517
|
3112 |
+
msgid "Custom tags Path"
|
3113 |
+
msgstr "Personalizează Calea Etichetă"
|
3114 |
+
|
3115 |
+
#: view/Permalinks.php:518
|
3116 |
+
msgid "eg. keyword, topic"
|
3117 |
+
msgstr "de exemplu. keyword, topic"
|
3118 |
+
|
3119 |
+
#: view/Plugins.php:14
|
3120 |
+
msgid "More details"
|
3121 |
+
msgstr "Mai multe detalii"
|
3122 |
+
|
3123 |
+
#: view/Plugins.php:16
|
3124 |
+
msgid "Install Plugin"
|
3125 |
+
msgstr "Instalare Plugin"
|
3126 |
+
|
3127 |
+
#: view/Plugins.php:18
|
3128 |
+
msgid "Plugin Installed"
|
3129 |
+
msgstr "Plugin instalat"
|
3130 |
+
|
3131 |
+
#: view/Plugins.php:30
|
3132 |
+
msgid ""
|
3133 |
+
"We are testing every week the latest version of these plugins and <strong>we "
|
3134 |
+
"make sure they are working with Hide My WP</strong> plugin.\n"
|
3135 |
+
" <br /><br />You don't need to install all these plugin "
|
3136 |
+
"in your website. If you're already using a cache plugin you don't need to "
|
3137 |
+
"install another one. <strong>We recommend using only one cache plugin</"
|
3138 |
+
"strong>.\n"
|
3139 |
+
" <br /><br />You can also install either <strong>iThemes "
|
3140 |
+
"Security</strong> plugin or <strong>Sucuri Security</strong> plugin to work "
|
3141 |
+
"with Hide My Wp plugin.\n"
|
3142 |
+
" <br /><br />If your plugins directory is not writable "
|
3143 |
+
"you will need to install the plugins manually."
|
3144 |
+
msgstr ""
|
3145 |
+
"În fiecare săptămână testăm cea mai recentă versiune a acestor plugin-uri și "
|
3146 |
+
"<strong>ne asigurăm că lucrează cu</strong> plugin-ul <strong>Hide My WP</"
|
3147 |
+
"strong> . <br /><br /> Nu trebuie să instalați toate aceste plugin-uri pe "
|
3148 |
+
"site-ul dvs. web. Dacă utilizați deja un plugin pentru cache nu trebuie să "
|
3149 |
+
"instalați altul. <strong>Vă recomandăm să utilizați un singur plugin de "
|
3150 |
+
"cache</strong> . <br /><br /> Puteți instala fie plugin-ul <strong>iThemes "
|
3151 |
+
"Security,</strong> fie plugin-ul <strong>Sucuri Security</strong> pentru a "
|
3152 |
+
"funcționa cu plugin-ul Hide My Wp. <br /><br /> Dacă directorul dvs. de "
|
3153 |
+
"plugin-uri nu este scris, va trebui să instalați manual plugin-urile."
|
3154 |
+
|
3155 |
+
#: view/SecurityCheck.php:6
|
3156 |
+
msgid "WordPress Security Check"
|
3157 |
+
msgstr "Verificare Securitate WordPress"
|
3158 |
+
|
3159 |
+
#: view/SecurityCheck.php:35 view/SecurityCheck.php:63
|
3160 |
+
msgid "Start Scan"
|
3161 |
+
msgstr "Incepe Scanarea"
|
3162 |
+
|
3163 |
+
#: view/SecurityCheck.php:48
|
3164 |
+
msgid "Passed"
|
3165 |
+
msgstr "Aprobat"
|
3166 |
+
|
3167 |
+
#: view/SecurityCheck.php:49
|
3168 |
+
msgid "Failed"
|
3169 |
+
msgstr "Eșuată"
|
3170 |
+
|
3171 |
+
#: view/SecurityCheck.php:55
|
3172 |
+
msgid ""
|
3173 |
+
"Congratulations! You completed all the security tasks. Make sure you check "
|
3174 |
+
"your site once a week."
|
3175 |
+
msgstr ""
|
3176 |
+
"Felicitări! Ați finalizat toate sarcinile de securitate. Asigurați-vă că "
|
3177 |
+
"verificați site-ul dvs. o dată pe săptămână."
|
3178 |
+
|
3179 |
+
#: view/SecurityCheck.php:66
|
3180 |
+
#, php-format
|
3181 |
+
msgid ""
|
3182 |
+
"According to %sGoogle latest stats%s, over %s20k websites are hacked every "
|
3183 |
+
"week%s and over %s30% of them are made in WordPress%s. <br />It's "
|
3184 |
+
"%sbetter to prevent an attack%s than to spend a lot of money and time to "
|
3185 |
+
"recover your data after an attack not to mention the situation when your "
|
3186 |
+
"clients' data are stollen."
|
3187 |
+
msgstr ""
|
3188 |
+
"Conform ultimelor statistici %s Google %s, peste %s 20k site-uri web sunt "
|
3189 |
+
"hack-uite în fiecare săptămână %s, iar peste %s30% dintre ele sunt "
|
3190 |
+
"realizate în WordPress %s. <br /> Este %smai bine să preveniți un atac %s "
|
3191 |
+
"decât să cheltuiți mulți bani și timp pentru a recupera datele dvs. după un "
|
3192 |
+
"atac pentru a nu menționa situația în care datele clienților dvs. sunt "
|
3193 |
+
"blocate."
|
3194 |
+
|
3195 |
+
#: view/SecurityCheck.php:69
|
3196 |
+
msgid "Last check:"
|
3197 |
+
msgstr "Ultima verificare:"
|
3198 |
+
|
3199 |
+
#: view/SecurityCheck.php:82
|
3200 |
+
msgid "Name"
|
3201 |
+
msgstr "Nume"
|
3202 |
+
|
3203 |
+
#: view/SecurityCheck.php:83
|
3204 |
+
msgid "Value"
|
3205 |
+
msgstr "Valoare"
|
3206 |
+
|
3207 |
+
#: view/SecurityCheck.php:84
|
3208 |
+
msgid "Valid"
|
3209 |
+
msgstr "Valabil"
|
3210 |
+
|
3211 |
+
#: view/SecurityCheck.php:85
|
3212 |
+
msgid "Action"
|
3213 |
+
msgstr "Actiune"
|
3214 |
+
|
3215 |
+
#: view/SecurityCheck.php:110
|
3216 |
+
msgid "Info"
|
3217 |
+
msgstr "Info"
|
3218 |
+
|
3219 |
+
#: view/SecurityCheck.php:111
|
3220 |
+
msgid "Fix it"
|
3221 |
+
msgstr "Repara-l"
|
3222 |
+
|
3223 |
+
#: view/SecurityCheck.php:112
|
3224 |
+
msgid "Are you sure you want to ignore this task in the future?"
|
3225 |
+
msgstr "Sigur doriți să ignorați această sarcină în viitor?"
|
3226 |
+
|
3227 |
+
#: view/SecurityCheck.php:125
|
3228 |
+
msgid "Reset all ingnored tasks"
|
3229 |
+
msgstr "Resetați toate sarcinile ignorate"
|
3230 |
+
|
3231 |
+
#: view/Support.php:3
|
3232 |
+
msgid "Need Help?"
|
3233 |
+
msgstr "Ai nevoie de ajutor?:"
|
3234 |
+
|
3235 |
+
#: view/Support.php:6
|
3236 |
+
#, php-format
|
3237 |
+
msgid ""
|
3238 |
+
"Read the plugin tutorial and how to setup every feature %sRead Hide My WP "
|
3239 |
+
"Tutorial%s"
|
3240 |
+
msgstr ""
|
3241 |
+
"Citiți tutorialul plugin-ului și modul de configurare a fiecărei funcții "
|
3242 |
+
"%sCitiți Hide My WP Tutorial %s"
|
3243 |
+
|
3244 |
+
#: view/Support.php:8
|
3245 |
+
#, php-format
|
3246 |
+
msgid ""
|
3247 |
+
"You can also email us on %scontact@wpplugins.tips%s and we are happy to "
|
3248 |
+
"answer any question or suggestion you may have and we aim to respond within "
|
3249 |
+
"24 hours."
|
3250 |
+
msgstr ""
|
3251 |
+
"Puteți, de asemenea, să ne trimiteți un e-mail pe %scontact@wpplugins.tips%s "
|
3252 |
+
"și suntem bucuroși să răspundem la orice întrebare sau sugestie pe care o "
|
3253 |
+
"puteți avea și ne propunem să răspundem în 24 de ore."
|
3254 |
+
|
3255 |
+
#: view/Tweaks.php:10
|
3256 |
+
msgid "Change Options"
|
3257 |
+
msgstr "Modificați opțiuni"
|
3258 |
+
|
3259 |
+
#: view/Tweaks.php:18
|
3260 |
+
msgid "Change Paths for Logged Users"
|
3261 |
+
msgstr "Modificați căile pentru utilizatorii conectați"
|
3262 |
+
|
3263 |
+
#: view/Tweaks.php:20
|
3264 |
+
msgid "Change WordPress paths while you're logged in"
|
3265 |
+
msgstr "Modificați căile WordPress în timp ce sunteți autentificat"
|
3266 |
+
|
3267 |
+
#: view/Tweaks.php:21
|
3268 |
+
msgid "(not recommended, may affect other plugins functionality in admin)"
|
3269 |
+
msgstr ""
|
3270 |
+
"(nerecomandat, poate afecta funcționalitatea altor plugin-uri în admin)"
|
3271 |
+
|
3272 |
+
#: view/Tweaks.php:35
|
3273 |
+
msgid "Change Paths in Cached Files"
|
3274 |
+
msgstr "Modificați căile în fișierele cache"
|
3275 |
+
|
3276 |
+
#: view/Tweaks.php:36
|
3277 |
+
msgid ""
|
3278 |
+
"Change the WordPress common paths in the cached files from /wp-content/cache "
|
3279 |
+
"directory"
|
3280 |
+
msgstr ""
|
3281 |
+
"Modificați căile comune WordPress din fișierele din cache din directorul /wp-"
|
3282 |
+
"content/cache"
|
3283 |
+
|
3284 |
+
#: view/Tweaks.php:37
|
3285 |
+
msgid ""
|
3286 |
+
"(this feature runs in background and needs up to one minute after every "
|
3287 |
+
"cache purged)"
|
3288 |
+
msgstr ""
|
3289 |
+
"(această caracteristică rulează în fundal și are nevoie de până la un minut "
|
3290 |
+
"după fiecare cache eliminată)"
|
3291 |
+
|
3292 |
+
#: view/Tweaks.php:48
|
3293 |
+
msgid "Change Paths in Ajax Calls"
|
3294 |
+
msgstr "Schimbă căile în apelurile Ajax"
|
3295 |
+
|
3296 |
+
#: view/Tweaks.php:50
|
3297 |
+
msgid ""
|
3298 |
+
"This will prevent from showing the old paths when an image or font is called "
|
3299 |
+
"through ajax"
|
3300 |
+
msgstr ""
|
3301 |
+
"Acest lucru va împiedica afișarea căilor vechi atunci când o imagine sau "
|
3302 |
+
"font este apelat prin ajax"
|
3303 |
+
|
3304 |
+
#: view/Tweaks.php:58
|
3305 |
+
msgid "Hide/Show Options"
|
3306 |
+
msgstr "Opțiuni Ascunde/Afișează"
|
3307 |
+
|
3308 |
+
#: view/Tweaks.php:67
|
3309 |
+
msgid ""
|
3310 |
+
"Hide WordPress and Plugin versions from the end of any image, css and js "
|
3311 |
+
"files"
|
3312 |
+
msgstr ""
|
3313 |
+
"Ascundeți versiunile WordPress și Plugin de la sfârșitul oricărei fișiere "
|
3314 |
+
"imagine, CSS și JS"
|
3315 |
+
|
3316 |
+
#: view/Tweaks.php:68
|
3317 |
+
msgid "Hide the WP Generator META"
|
3318 |
+
msgstr "Ascundeți META Generatorul WP"
|
3319 |
+
|
3320 |
+
#: view/Tweaks.php:69
|
3321 |
+
msgid "Hide the WP DNS Prefetch META"
|
3322 |
+
msgstr "Ascundeți META-ul WP DNS Prefetch"
|
3323 |
+
|
3324 |
+
#: view/Tweaks.php:78
|
3325 |
+
msgid "Hide RSD (Really Simple Discovery) header"
|
3326 |
+
msgstr "Ascundeți antetul RSD (Real Simple Discovery)"
|
3327 |
+
|
3328 |
+
#: view/Tweaks.php:80
|
3329 |
+
msgid "Don't show any WordPress information in HTTP header request"
|
3330 |
+
msgstr "Nu afișați informații WordPress în solicitarea antetului HTTP"
|
3331 |
+
|
3332 |
+
#: view/Tweaks.php:90
|
3333 |
+
msgid "Hide WordPress HTML Comments"
|
3334 |
+
msgstr "<strong>Ascunde comentariile HTML</strong>"
|
3335 |
+
|
3336 |
+
#: view/Tweaks.php:92
|
3337 |
+
msgid "Hide the HTML Comments left by theme and plugins"
|
3338 |
+
msgstr "Ascundeți comentariile HTML lăsate de temă și plugin-uri"
|
3339 |
+
|
3340 |
+
#: view/Tweaks.php:101
|
3341 |
+
msgid "Hide Emojicons"
|
3342 |
+
msgstr "Ascundeți Emojicons"
|
3343 |
+
|
3344 |
+
#: view/Tweaks.php:103
|
3345 |
+
msgid "Don't load Emoji Icons if you don't use them"
|
3346 |
+
msgstr "Nu încărcați pictogramele Emoji dacă nu le utilizați"
|
3347 |
+
|
3348 |
+
#: view/Tweaks.php:110
|
3349 |
+
msgid "Other Settings"
|
3350 |
+
msgstr "Alte setări"
|
3351 |
+
|
3352 |
+
#: view/Tweaks.php:117
|
3353 |
+
msgid "Disable XML-RPC authentication"
|
3354 |
+
msgstr "Dezactivează autentificarea XML-RPC"
|
3355 |
+
|
3356 |
+
#: view/Tweaks.php:119
|
3357 |
+
#, php-format
|
3358 |
+
msgid "Don't load XML-RPC to prevent %sBrute force attacks via XML-RPC%s"
|
3359 |
+
msgstr ""
|
3360 |
+
"Nu încărcați XML-RPC pentru a preveni atacurile de forță %sBrute Force prin "
|
3361 |
+
"XML-RPC %s"
|
3362 |
+
|
3363 |
+
#: view/Tweaks.php:128
|
3364 |
+
msgid "Disable Embed scripts"
|
3365 |
+
msgstr "Dezactivați scripturile Embed"
|
3366 |
+
|
3367 |
+
#: view/Tweaks.php:130
|
3368 |
+
msgid "Don't load oEmbed service if you don't use oEmbed videos"
|
3369 |
+
msgstr "Nu încărcați serviciul Ombed dacă nu utilizați videoclipuri oEmbed"
|
3370 |
+
|
3371 |
+
#: view/Tweaks.php:140
|
3372 |
+
msgid "Disable WLW Manifest scripts"
|
3373 |
+
msgstr "<strong>Dezactivează schiptul WLW Manifest</strong>"
|
3374 |
+
|
3375 |
+
#: view/Tweaks.php:142
|
3376 |
+
msgid ""
|
3377 |
+
"Don't load WLW if you didn't configure Windows Live Writer for your site"
|
3378 |
+
msgstr ""
|
3379 |
+
"Nu încărcați WLW dacă nu ați configurat Windows Live Writer pentru site-ul "
|
3380 |
+
"dvs."
|
3381 |
+
|
3382 |
+
#: view/Tweaks.php:152
|
3383 |
+
msgid "Disable DB Debug in Frontent"
|
3384 |
+
msgstr "Dezactivează debug-ul DB în Frontend"
|
3385 |
+
|
3386 |
+
#: view/Tweaks.php:154
|
3387 |
+
msgid "Don't load DB Debug if your website is live"
|
3388 |
+
msgstr "Nu încărcați DB Debug dacă site-ul dvs. web este live"
|
3389 |
+
|
3390 |
+
#. Plugin Name of the plugin/theme
|
3391 |
+
msgid "Hide My WP Ghost Lite"
|
3392 |
+
msgstr "Ascunde-mi WP Ghost Lite"
|
3393 |
+
|
3394 |
+
#. Plugin URI of the plugin/theme
|
3395 |
+
msgid "https://wordpress.org/plugins/hide-my-wp/"
|
3396 |
+
msgstr "https://wordpress.org/plugins/hide-my-wp/"
|
3397 |
+
|
3398 |
+
#. Description of the plugin/theme
|
3399 |
+
msgid ""
|
3400 |
+
"The best solution for WordPress Security. Hide wp-admin, wp-login, wp-"
|
3401 |
+
"content, plugins, themes etc. Add Firewall, Brute Force protection & more. "
|
3402 |
+
"<br /> <a href=\"http://hidemywpghost.com/wordpress\" target=\"_blank"
|
3403 |
+
"\"><strong>Unlock all features</strong></a>"
|
3404 |
+
msgstr ""
|
3405 |
+
"Cea mai bună soluție pentru securitatea WordPress. Ascunde wp-admin, wp-"
|
3406 |
+
"login, conținut wp, plugin-uri, teme etc. Adăugați firewall, protecție Brute "
|
3407 |
+
"Force și multe altele. <br /> <a href=\"http://hidemywpghost.com/wordpress\" "
|
3408 |
+
"target=\"_blank\"><strong>Deblocați toate funcțiile</strong></a>"
|
3409 |
+
|
3410 |
+
#. Author of the plugin/theme
|
3411 |
+
msgid "WPPlugins - WordPress Security Plugins"
|
3412 |
+
msgstr "WPPlugins - plugin-uri de securitate WordPress"
|
3413 |
+
|
3414 |
+
#. Author URI of the plugin/theme
|
3415 |
+
msgid "https://wpplugins.tips"
|
3416 |
+
msgstr "https://wpplugins.tips"
|
models/Brute.php
ADDED
@@ -0,0 +1,477 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Brute {
|
5 |
+
protected $user_ip;
|
6 |
+
public $response;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Retrives and sets the ip address the person logging in
|
10 |
+
*
|
11 |
+
* @return string
|
12 |
+
*/
|
13 |
+
|
14 |
+
public function brute_get_ip() {
|
15 |
+
if (isset($this->user_ip)) {
|
16 |
+
return $this->user_ip;
|
17 |
+
}
|
18 |
+
|
19 |
+
$ip = $_SERVER['REMOTE_ADDR'];
|
20 |
+
$trusted_header = HMW_Classes_Tools::getOption('trusted_ip_header');
|
21 |
+
|
22 |
+
if (is_string($trusted_header) && $trusted_header <> '') {
|
23 |
+
if (isset($_SERVER[$trusted_header])) {
|
24 |
+
$ip = $_SERVER[$trusted_header];
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
$ips = array_reverse(explode(', ', $ip));
|
29 |
+
foreach ($ips as $ip) {
|
30 |
+
$ip = $this->clean_ip($ip);
|
31 |
+
|
32 |
+
// If the IP is in a private or reserved range, keep looking
|
33 |
+
if ($ip == '127.0.0.1' || $ip == '::1' || $this->ip_is_private($ip)) {
|
34 |
+
continue;
|
35 |
+
} else {
|
36 |
+
$this->user_ip = $ip;
|
37 |
+
return $this->user_ip;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
$this->user_ip = $this->clean_ip($_SERVER['REMOTE_ADDR']);
|
42 |
+
return $this->user_ip;
|
43 |
+
}
|
44 |
+
|
45 |
+
|
46 |
+
public function clean_ip($ip) {
|
47 |
+
$ip = trim($ip);
|
48 |
+
|
49 |
+
// Check for IPv4 IP cast as IPv6
|
50 |
+
if (preg_match('/^::ffff:(\d+\.\d+\.\d+\.\d+)$/', $ip, $matches)) {
|
51 |
+
$ip = $matches[1];
|
52 |
+
}
|
53 |
+
|
54 |
+
return $ip;
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Checks an IP to see if it is within a private range
|
60 |
+
* @param string $ip
|
61 |
+
* @return bool
|
62 |
+
*/
|
63 |
+
public function ip_is_private($ip) {
|
64 |
+
$pri_addrs = array(
|
65 |
+
'10.0.0.0|10.255.255.255', // single class A network
|
66 |
+
'172.16.0.0|172.31.255.255', // 16 contiguous class B network
|
67 |
+
'192.168.0.0|192.168.255.255', // 256 contiguous class C network
|
68 |
+
'169.254.0.0|169.254.255.255', // Link-local address also refered to as Automatic Private IP Addressing
|
69 |
+
'127.0.0.0|127.255.255.255' // localhost
|
70 |
+
);
|
71 |
+
|
72 |
+
$long_ip = ip2long($ip);
|
73 |
+
if ($long_ip != -1) {
|
74 |
+
|
75 |
+
foreach ($pri_addrs AS $pri_addr) {
|
76 |
+
list ($start, $end) = explode('|', $pri_addr);
|
77 |
+
|
78 |
+
// IF IS PRIVATE
|
79 |
+
if ($long_ip >= ip2long($start) && $long_ip <= ip2long($end)) {
|
80 |
+
return true;
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
return false;
|
86 |
+
}
|
87 |
+
|
88 |
+
public function get_privacy_key() {
|
89 |
+
// Privacy key generation uses the NONCE_SALT + admin email-- admin email is
|
90 |
+
// used to prevent identical privacy keys if NONCE_SALT is not customized
|
91 |
+
return substr(md5(NONCE_SALT . get_site_option('admin_email')), 5, 10);
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Checks the status for a given IP. API results are cached as transients in the wp_options table
|
96 |
+
*
|
97 |
+
* @return array
|
98 |
+
*/
|
99 |
+
public function brute_check_loginability() {
|
100 |
+
|
101 |
+
$ip = $this->brute_get_ip();
|
102 |
+
$headers = $this->brute_get_headers();
|
103 |
+
$header_hash = md5(json_encode($headers));
|
104 |
+
|
105 |
+
$transient_name = 'hmw_brute_' . $header_hash;
|
106 |
+
$transient_value = $this->get_transient($transient_name);
|
107 |
+
//Never block login from whitelisted IPs
|
108 |
+
if ($this->check_whitelisted_ip($ip)) {
|
109 |
+
return $transient_value;
|
110 |
+
}
|
111 |
+
|
112 |
+
//Check out our transients
|
113 |
+
if (isset($transient_value) && $transient_value['status'] == 'ok') {
|
114 |
+
return $transient_value;
|
115 |
+
}
|
116 |
+
|
117 |
+
if (isset($transient_value) && $transient_value['status'] == 'blocked') {
|
118 |
+
//there is a current block-- prevent login
|
119 |
+
$this->brute_kill_login();
|
120 |
+
}
|
121 |
+
|
122 |
+
|
123 |
+
//If we've reached this point, this means that the IP isn't cached.
|
124 |
+
//Now we check to see if we should allow login
|
125 |
+
$response = $this->brute_call('check_ip');
|
126 |
+
|
127 |
+
if ($response['status'] == 'blocked') {
|
128 |
+
$this->brute_kill_login();
|
129 |
+
}
|
130 |
+
|
131 |
+
return $response;
|
132 |
+
}
|
133 |
+
|
134 |
+
public function check_whitelisted_ip($ip) {
|
135 |
+
//Never block login from whitelisted IPs
|
136 |
+
$whitelist = HMW_Classes_Tools::getOption('whitelist_ip');
|
137 |
+
$wl_items = json_decode($whitelist, true);
|
138 |
+
|
139 |
+
if (isset($wl_items) && !empty($wl_items)) {
|
140 |
+
foreach ($wl_items as $item) {
|
141 |
+
$item = trim($item);
|
142 |
+
if ($ip == $item) {
|
143 |
+
return true;
|
144 |
+
}
|
145 |
+
|
146 |
+
if (strpos($item, '*') === false) { //no match, no wildcard
|
147 |
+
continue;
|
148 |
+
}
|
149 |
+
|
150 |
+
$iplong = ip2long($ip);
|
151 |
+
$ip_low = ip2long(str_replace('*', '0', $item));
|
152 |
+
$ip_high = ip2long(str_replace('*', '255', $item));
|
153 |
+
|
154 |
+
if ($iplong >= $ip_low && $iplong <= $ip_high) {//IP is within wildcard range
|
155 |
+
return true;
|
156 |
+
}
|
157 |
+
|
158 |
+
}
|
159 |
+
}
|
160 |
+
return false;
|
161 |
+
}
|
162 |
+
|
163 |
+
public function brute_get_local_host() {
|
164 |
+
if (isset($this->local_host)) {
|
165 |
+
return $this->local_host;
|
166 |
+
}
|
167 |
+
|
168 |
+
$uri = 'http://' . strtolower($_SERVER['HTTP_HOST']);
|
169 |
+
|
170 |
+
if (is_multisite()) {
|
171 |
+
$uri = network_home_url();
|
172 |
+
}
|
173 |
+
|
174 |
+
$uridata = parse_url($uri);
|
175 |
+
|
176 |
+
$domain = $uridata['host'];
|
177 |
+
|
178 |
+
//if we still don't have it, get the site_url
|
179 |
+
if (!$domain) {
|
180 |
+
$uri = get_site_url(1);
|
181 |
+
$uridata = parse_url($uri);
|
182 |
+
if (isset($uridata['host'])) {
|
183 |
+
$domain = $uridata['host'];
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
$this->local_host = $domain;
|
188 |
+
|
189 |
+
return $this->local_host;
|
190 |
+
}
|
191 |
+
|
192 |
+
|
193 |
+
public function brute_get_blocked_attempts() {
|
194 |
+
$blocked_count = get_site_option('bruteprotect_blocked_attempt_count');
|
195 |
+
if (!$blocked_count) {
|
196 |
+
$blocked_count = 0;
|
197 |
+
}
|
198 |
+
|
199 |
+
return $blocked_count;
|
200 |
+
}
|
201 |
+
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Finds out if this site is using http or https
|
205 |
+
*
|
206 |
+
* @return string
|
207 |
+
*/
|
208 |
+
public function brute_get_protocol() {
|
209 |
+
$protocol = (is_ssl()) ? "https://" : "http://";
|
210 |
+
|
211 |
+
return $protocol;
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Get all IP headers so that we can process on our server...
|
216 |
+
*
|
217 |
+
* @return array
|
218 |
+
*/
|
219 |
+
public function brute_get_headers() {
|
220 |
+
$o = array();
|
221 |
+
|
222 |
+
$ip_related_headers = array(
|
223 |
+
'GD_PHP_HANDLER',
|
224 |
+
'HTTP_AKAMAI_ORIGIN_HOP',
|
225 |
+
'HTTP_CF_CONNECTING_IP',
|
226 |
+
'HTTP_CLIENT_IP',
|
227 |
+
'HTTP_FASTLY_CLIENT_IP',
|
228 |
+
'HTTP_FORWARDED',
|
229 |
+
'HTTP_FORWARDED_FOR',
|
230 |
+
'HTTP_INCAP_CLIENT_IP',
|
231 |
+
'HTTP_TRUE_CLIENT_IP',
|
232 |
+
'HTTP_X_CLIENTIP',
|
233 |
+
'HTTP_X_CLUSTER_CLIENT_IP',
|
234 |
+
'HTTP_X_FORWARDED',
|
235 |
+
'HTTP_X_FORWARDED_FOR',
|
236 |
+
'HTTP_X_IP_TRAIL',
|
237 |
+
'HTTP_X_REAL_IP',
|
238 |
+
'HTTP_X_VARNISH',
|
239 |
+
'REMOTE_ADDR'
|
240 |
+
|
241 |
+
);
|
242 |
+
|
243 |
+
foreach ($ip_related_headers as $header) {
|
244 |
+
if (isset($_SERVER[$header])) {
|
245 |
+
$o[$header] = $_SERVER[$header];
|
246 |
+
}
|
247 |
+
}
|
248 |
+
|
249 |
+
return $o;
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* process the brute call
|
254 |
+
*
|
255 |
+
* @param string $action 'check_ip', 'check_key', or 'failed_attempt'
|
256 |
+
* @param array $info Any custom data to post to the api
|
257 |
+
*
|
258 |
+
* @return array
|
259 |
+
*/
|
260 |
+
public function brute_call($action = 'check_ip', $info = array()) {
|
261 |
+
$headers = $this->brute_get_headers();
|
262 |
+
$header_hash = md5(json_encode($headers));
|
263 |
+
$transient_name = 'hmw_brute_' . $header_hash;
|
264 |
+
|
265 |
+
$response = $this->get_transient($transient_name);
|
266 |
+
$attempts = (isset($response['attempts']) ? (int)$response['attempts'] : 0);
|
267 |
+
|
268 |
+
if ($action == 'failed_attempt') {
|
269 |
+
if ($this->check_whitelisted_ip($this->brute_get_ip())) {
|
270 |
+
$response['status'] = 'ok';
|
271 |
+
return $response;
|
272 |
+
}
|
273 |
+
|
274 |
+
$attempts = (int)$attempts + 1;
|
275 |
+
|
276 |
+
if ($attempts > HMW_Classes_Tools::getOption('brute_max_attempts')) {
|
277 |
+
|
278 |
+
$info['ip'] = $this->brute_get_ip();
|
279 |
+
$info['host'] = $this->brute_get_local_host();
|
280 |
+
$info['protocol'] = $this->brute_get_protocol();
|
281 |
+
$info['headers'] = json_encode($this->brute_get_headers());
|
282 |
+
|
283 |
+
$response = array_merge($response, $info);
|
284 |
+
$response['attempts'] = $attempts;
|
285 |
+
$response['status'] = 'blocked';
|
286 |
+
|
287 |
+
wp_redirect(site_url());
|
288 |
+
} else {
|
289 |
+
$response['attempts'] = $attempts;
|
290 |
+
$response['status'] = 'ok';
|
291 |
+
}
|
292 |
+
$this->set_transient($transient_name, $response, (int)HMW_Classes_Tools::getOption('brute_max_timeout'));
|
293 |
+
} elseif ($action == 'check_ip') {
|
294 |
+
$response['status'] = (isset($response['status']) ? $response['status'] : 'ok');
|
295 |
+
|
296 |
+
//Always block a banned IP
|
297 |
+
if ($this->check_banned_ip($this->brute_get_ip())) {
|
298 |
+
$response['status'] = 'blocked';
|
299 |
+
|
300 |
+
}
|
301 |
+
|
302 |
+
} elseif ($action == 'clear_ip') {
|
303 |
+
$this->delete_transient($transient_name);
|
304 |
+
}
|
305 |
+
|
306 |
+
return $response;
|
307 |
+
}
|
308 |
+
|
309 |
+
public function set_transient($transient, $value, $expiration) {
|
310 |
+
if (is_multisite() && !is_main_site()) {
|
311 |
+
switch_to_blog($this->get_main_blog_id());
|
312 |
+
$return = set_transient($transient, $value, $expiration);
|
313 |
+
restore_current_blog();
|
314 |
+
return $return;
|
315 |
+
}
|
316 |
+
return set_transient($transient, $value, $expiration);
|
317 |
+
}
|
318 |
+
|
319 |
+
public function delete_transient($transient) {
|
320 |
+
if (is_multisite() && !is_main_site()) {
|
321 |
+
switch_to_blog($this->get_main_blog_id());
|
322 |
+
$return = delete_transient($transient);
|
323 |
+
restore_current_blog();
|
324 |
+
return $return;
|
325 |
+
}
|
326 |
+
return delete_transient($transient);
|
327 |
+
}
|
328 |
+
|
329 |
+
public function get_transient($transient) {
|
330 |
+
if (is_multisite() && !is_main_site()) {
|
331 |
+
switch_to_blog($this->get_main_blog_id());
|
332 |
+
$return = get_transient($transient);
|
333 |
+
restore_current_blog();
|
334 |
+
return $return;
|
335 |
+
}
|
336 |
+
return get_transient($transient);
|
337 |
+
}
|
338 |
+
|
339 |
+
/**
|
340 |
+
* If we're in a multisite network, return the blog ID of the primary blog
|
341 |
+
*
|
342 |
+
* @return int
|
343 |
+
*/
|
344 |
+
public function get_main_blog_id() {
|
345 |
+
if (defined('BLOG_ID_CURRENT_SITE')) {
|
346 |
+
return BLOG_ID_CURRENT_SITE;
|
347 |
+
}
|
348 |
+
|
349 |
+
return 1;
|
350 |
+
}
|
351 |
+
|
352 |
+
|
353 |
+
public function get_blocked_ips() {
|
354 |
+
global $wpdb;
|
355 |
+
$ips = array();
|
356 |
+
$pattern = '_transient_timeout_hmw_brute_';
|
357 |
+
//check 20 keyword at one time
|
358 |
+
$sql = "SELECT `option_name` FROM `" . $wpdb->options . "` WHERE (`option_name` like '$pattern%') ORDER BY `option_id` DESC";
|
359 |
+
|
360 |
+
if ($rows = $wpdb->get_results($sql)) {
|
361 |
+
foreach ($rows as $row) {
|
362 |
+
if (!$transient_value = $this->get_transient(str_replace($pattern, 'hmw_brute_', $row->option_name))) {
|
363 |
+
$this->delete_transient(str_replace($pattern, '', $row->option_name));
|
364 |
+
}
|
365 |
+
if ($transient_value['status'] == 'blocked') {
|
366 |
+
$ips[str_replace($pattern, 'hmw_brute_', $row->option_name)] = $transient_value;
|
367 |
+
}
|
368 |
+
}
|
369 |
+
}
|
370 |
+
|
371 |
+
|
372 |
+
return $ips;
|
373 |
+
}
|
374 |
+
|
375 |
+
public function check_banned_ip($ip) {
|
376 |
+
//Never block login from whitelisted IPs
|
377 |
+
$banlist = HMW_Classes_Tools::getOption('banlist_ip');
|
378 |
+
$wl_items = @json_decode($banlist, true);
|
379 |
+
|
380 |
+
if (isset($wl_items) && !empty($wl_items)) {
|
381 |
+
foreach ($wl_items as $item) {
|
382 |
+
$item = trim($item);
|
383 |
+
if ($ip == $item) {
|
384 |
+
return true;
|
385 |
+
}
|
386 |
+
|
387 |
+
if (strpos($item, '*') === false) { //no match, no wildcard
|
388 |
+
continue;
|
389 |
+
}
|
390 |
+
|
391 |
+
$iplong = ip2long($ip);
|
392 |
+
$ip_low = ip2long(str_replace('*', '0', $item));
|
393 |
+
$ip_high = ip2long(str_replace('*', '255', $item));
|
394 |
+
|
395 |
+
if ($iplong >= $ip_low && $iplong <= $ip_high) {//IP is within wildcard range
|
396 |
+
return true;
|
397 |
+
}
|
398 |
+
|
399 |
+
}
|
400 |
+
}
|
401 |
+
return false;
|
402 |
+
}
|
403 |
+
|
404 |
+
public function delete_ip($transient) {
|
405 |
+
$this->delete_transient($transient);
|
406 |
+
}
|
407 |
+
|
408 |
+
|
409 |
+
/**
|
410 |
+
* Verifies that a user answered the math problem correctly while logging in.
|
411 |
+
*
|
412 |
+
* @param mixed $user
|
413 |
+
* @param mixed $response
|
414 |
+
* @return mixed $user Returns the user if the math is correct
|
415 |
+
*/
|
416 |
+
public function brute_math_authenticate($user, $response) {
|
417 |
+
|
418 |
+
if (isset($_POST['brute_num']) && isset($_POST['brute_ck'])) {
|
419 |
+
$salt = HMW_Classes_Tools::getOption('hmw_disable') . get_site_option('admin_email');
|
420 |
+
$ans = (int)$_POST['brute_num'];
|
421 |
+
$salted_ans = sha1($salt . $ans);
|
422 |
+
$correct_ans = $_POST['brute_ck'];
|
423 |
+
|
424 |
+
if (!$correct_ans && !isset($_POST['brute_ck'])) {
|
425 |
+
} elseif ($salted_ans != $correct_ans) {
|
426 |
+
$user = new WP_Error('authentication_failed',
|
427 |
+
sprintf(__('%sYou failed to correctly answer the math problem.%s Please try again', _HMW_PLUGIN_NAME_), '<strong>', '</strong>')
|
428 |
+
);
|
429 |
+
} elseif (is_wp_error($user)) {
|
430 |
+
if (!isset($response['attempts'])) {
|
431 |
+
$response['attempts'] = 0;
|
432 |
+
}
|
433 |
+
$left = max(((int)HMW_Classes_Tools::getOption('brute_max_attempts') - (int)$response['attempts']), 0);
|
434 |
+
$user = new WP_Error('authentication_failed',
|
435 |
+
sprintf(__('%sERROR:%s Email or Password is incorrect. %s %d attempts left before lockout', _HMW_PLUGIN_NAME_), '<strong>', '</strong>', '<br />', $left)
|
436 |
+
);
|
437 |
+
}
|
438 |
+
}
|
439 |
+
|
440 |
+
return $user;
|
441 |
+
}
|
442 |
+
|
443 |
+
/**
|
444 |
+
* Requires a user to solve a simple equation. Added to any WordPress login form.
|
445 |
+
*
|
446 |
+
* @return void outputs html
|
447 |
+
*/
|
448 |
+
public function brute_math_form() {
|
449 |
+
if (!HMW_Classes_Tools::getOption('brute_use_math')) {
|
450 |
+
return;
|
451 |
+
}
|
452 |
+
$salt = HMW_Classes_Tools::getOption('hmw_disable') . get_site_option('admin_email');
|
453 |
+
$num1 = rand(0, 10);
|
454 |
+
$num2 = rand(1, 10);
|
455 |
+
$sum = $num1 + $num2;
|
456 |
+
$ans = sha1($salt . $sum);
|
457 |
+
?>
|
458 |
+
<div style="margin: 5px 0 20px;">
|
459 |
+
<strong><?php echo __('Prove your humanity: ', _HMW_PLUGIN_NAME_) ?></strong>
|
460 |
+
<?php echo $num1 ?> + <?php echo $num2 ?> =
|
461 |
+
<input type="input" name="brute_num" value="" size="2"/>
|
462 |
+
<input type="hidden" name="brute_ck" value="<?php echo $ans; ?>" id="brute_ck"/>
|
463 |
+
</div>
|
464 |
+
<?php
|
465 |
+
}
|
466 |
+
|
467 |
+
|
468 |
+
public function brute_kill_login() {
|
469 |
+
do_action('hmw_kill_login', $this->brute_get_ip());
|
470 |
+
wp_ob_end_flush_all();
|
471 |
+
wp_die(HMW_Classes_Tools::getOption('hmw_brute_message'),
|
472 |
+
__('Login Blocked by Hide My WordPress', _HMW_PLUGIN_NAME_),
|
473 |
+
array('response' => 403)
|
474 |
+
);
|
475 |
+
}
|
476 |
+
|
477 |
+
}
|
models/Compatibility.php
ADDED
@@ -0,0 +1,470 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Models_Compatibility {
|
5 |
+
|
6 |
+
public function __construct() {
|
7 |
+
if ( is_admin() ) {
|
8 |
+
add_filter( 'rocket_cache_reject_uri', array( $this, 'rocket_reject_url' ), PHP_INT_MAX );
|
9 |
+
} else {
|
10 |
+
defined( 'WPFC_REMOVE_FOOTER_COMMENT' ) || define( 'WPFC_REMOVE_FOOTER_COMMENT', true );
|
11 |
+
defined( 'WP_ROCKET_WHITE_LABEL_FOOTPRINT' ) || define( 'WP_ROCKET_WHITE_LABEL_FOOTPRINT', true );
|
12 |
+
|
13 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-fastest-cache/wpFastestCache.php' ) ) {
|
14 |
+
global $wp_fastest_cache_options;
|
15 |
+
$wp_fastest_cache_options = json_decode( get_option( "WpFastestCache" ) );
|
16 |
+
if ( isset( $wp_fastest_cache_options->wpFastestCacheStatus ) ) {
|
17 |
+
$wp_fastest_cache_options->wpFastestCacheStatus = false;
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
//Check boot compatibility for some plugins and functionalities
|
23 |
+
$this->checkCompatibilityOnLoad();
|
24 |
+
}
|
25 |
+
|
26 |
+
public function alreadyCached() {
|
27 |
+
if ( did_action( 'wpsupercache_buffer' ) || did_action( 'autoptimize_html_after_minify' ) || did_action( 'rocket_buffer' ) || did_action( 'hmw_buffer' ) ) {
|
28 |
+
return true;
|
29 |
+
}
|
30 |
+
|
31 |
+
return false;
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Check some compatibility on page load
|
36 |
+
*
|
37 |
+
*/
|
38 |
+
public function checkCompatibilityOnLoad() {
|
39 |
+
|
40 |
+
if ( HMW_Classes_Tools::isPluginActive( 'ithemes-security-pro/ithemes-security-pro.php' ) ||
|
41 |
+
HMW_Classes_Tools::isPluginActive( 'better-wp-security/better-wp-security.php' )) {
|
42 |
+
$settings = get_option('itsec-storage');
|
43 |
+
if(isset($settings['hide-backend']['enabled']) && $settings['hide-backend']['enabled']) {
|
44 |
+
if ( isset( $settings['hide-backend']['slug'] ) && $settings['hide-backend']['slug'] <> '' ) {
|
45 |
+
defined( 'HMW_DEFAULT_LOGIN' ) || define( 'HMW_DEFAULT_LOGIN', $settings['hide-backend']['slug'] );
|
46 |
+
HMW_Classes_Tools::$options['hmw_login_url'] = HMW_Classes_Tools::$default['hmw_login_url'];
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
if ( ! is_admin() ) {
|
52 |
+
|
53 |
+
try {
|
54 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_robots' ) ) {
|
55 |
+
if ( HMW_Classes_ObjController::getClass( 'HMW_Models_Files' )->isFile( $_SERVER['REQUEST_URI'] ) ) {
|
56 |
+
//Compatibility with Squirrly SEOx-cf-powered-by
|
57 |
+
if ( HMW_Classes_Tools::isPluginActive( 'squirrly-seo/squirrly.php' ) ) {
|
58 |
+
add_filter( 'sq_robots', array(
|
59 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
60 |
+
'replace_robots'
|
61 |
+
), 11 );
|
62 |
+
} else {
|
63 |
+
if ( strpos( $_SERVER['REQUEST_URI'], 'robots.txt' ) ) {
|
64 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' )->replace_robots( false );
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
69 |
+
} catch ( Exception $e ) {
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Check other plugins and set compatibility settings
|
77 |
+
*/
|
78 |
+
public function checkCompatibility() {
|
79 |
+
//don't let to rename and hide the current paths if logout is required
|
80 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
81 |
+
return;
|
82 |
+
}
|
83 |
+
|
84 |
+
if ( ! is_admin() ) {
|
85 |
+
|
86 |
+
//compatibility with Wp Maintenance plugin
|
87 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-maintenance-mode/wp-maintenance-mode.php' ) ) {
|
88 |
+
add_filter( 'wpmm_footer', array(
|
89 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
90 |
+
'getTempBuffer'
|
91 |
+
) );
|
92 |
+
}
|
93 |
+
|
94 |
+
//Chech if the users set to change for logged users users
|
95 |
+
//don't let cache plugins to change the paths is not needed
|
96 |
+
if ( ! HMW_Classes_Tools::doChangesAdmin() ) {
|
97 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
98 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
99 |
+
|
100 |
+
return;
|
101 |
+
}
|
102 |
+
|
103 |
+
//Change the template directory URL in themes
|
104 |
+
if ( HMW_Classes_Tools::isThemeActive( 'Avada' ) ) {
|
105 |
+
add_filter( 'template_directory_uri', array(
|
106 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
107 |
+
'find_replace_url'
|
108 |
+
), PHP_INT_MAX );
|
109 |
+
}
|
110 |
+
|
111 |
+
//Compatibility with Squirrly SEO
|
112 |
+
if ( HMW_Classes_Tools::isPluginActive( 'squirrly-seo/squirrly.php' ) ) {
|
113 |
+
add_filter( 'sq_buffer', array(
|
114 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
115 |
+
'find_replace'
|
116 |
+
), PHP_INT_MAX );
|
117 |
+
}
|
118 |
+
|
119 |
+
//Compatibility with WP-rocket plugin
|
120 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-rocket/wp-rocket.php' ) ) {
|
121 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
122 |
+
|
123 |
+
add_filter( 'rocket_buffer', array(
|
124 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
125 |
+
'find_replace'
|
126 |
+
), PHP_INT_MAX );
|
127 |
+
|
128 |
+
add_filter( 'rocket_cache_busting_filename', array(
|
129 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
130 |
+
'find_replace_url'
|
131 |
+
), PHP_INT_MAX );
|
132 |
+
add_filter( 'rocket_iframe_lazyload_placeholder', array(
|
133 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
134 |
+
'find_replace_url'
|
135 |
+
), PHP_INT_MAX );
|
136 |
+
|
137 |
+
return;
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
//Compatibility with CDN Enabler
|
142 |
+
if ( HMW_Classes_Tools::isPluginActive( 'hummingbird-performance/wp-hummingbird.php' ) ) {
|
143 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
144 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
145 |
+
|
146 |
+
return;
|
147 |
+
}
|
148 |
+
|
149 |
+
//Compatibility with Wp Super Cache Plugin
|
150 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-super-cache/wp-cache.php' ) ) {
|
151 |
+
//add_filter('hmw_laterload', array('HMW_Classes_Tools', 'returnFalse'));
|
152 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
153 |
+
|
154 |
+
add_filter( 'wpsupercache_buffer', array(
|
155 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
156 |
+
'find_replace'
|
157 |
+
), PHP_INT_MAX );
|
158 |
+
|
159 |
+
return;
|
160 |
+
}
|
161 |
+
|
162 |
+
//Compatibility with CDN Enabler
|
163 |
+
if ( HMW_Classes_Tools::isPluginActive( 'cdn-enabler/cdn-enabler.php' ) ) {
|
164 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
165 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
166 |
+
|
167 |
+
return;
|
168 |
+
}
|
169 |
+
|
170 |
+
|
171 |
+
//Compatibility with Autoptimize plugin
|
172 |
+
if ( HMW_Classes_Tools::isPluginActive( 'autoptimize/autoptimize.php' ) ) {
|
173 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
174 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
175 |
+
|
176 |
+
return;
|
177 |
+
}
|
178 |
+
|
179 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-asset-clean-up/wpacu.php' ) || HMW_Classes_Tools::isPluginActive( 'wp-asset-clean-up-pro/wpacu.php' ) ) {
|
180 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
181 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
182 |
+
|
183 |
+
add_filter( 'wpacu_html_source', array(
|
184 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
185 |
+
'find_replace'
|
186 |
+
), PHP_INT_MAX );
|
187 |
+
|
188 |
+
return;
|
189 |
+
}
|
190 |
+
|
191 |
+
//Patch for WOT Cache plugin
|
192 |
+
if ( defined( 'WOT_VERSION' ) ) {
|
193 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
194 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
195 |
+
|
196 |
+
add_filter( 'wot_cache', array(
|
197 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
198 |
+
'find_replace'
|
199 |
+
), PHP_INT_MAX );
|
200 |
+
|
201 |
+
return;
|
202 |
+
}
|
203 |
+
|
204 |
+
//For woo-global-cart plugin
|
205 |
+
if ( defined( 'WOOGC_VERSION' ) ) {
|
206 |
+
remove_all_actions( 'shutdown', 1 );
|
207 |
+
add_filter( 'hmw_buffer', array( $this, 'fix_woogc_shutdown' ) );
|
208 |
+
|
209 |
+
return;
|
210 |
+
}
|
211 |
+
|
212 |
+
if ( HMW_Classes_Tools::isPluginActive( 'cache-enabler/cache-enabler.php' ) ) {
|
213 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnFalse' ) );
|
214 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
215 |
+
|
216 |
+
return;
|
217 |
+
}
|
218 |
+
|
219 |
+
//Compatibility with Wp Fastest Cache
|
220 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-fastest-cache/wpFastestCache.php' ) ) {
|
221 |
+
add_filter( 'hmw_laterload', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
222 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
223 |
+
|
224 |
+
return;
|
225 |
+
}
|
226 |
+
|
227 |
+
//Compatibility with Powered Cache
|
228 |
+
if ( HMW_Classes_Tools::isPluginActive( 'powered-cache/powered-cache.php' ) ) {
|
229 |
+
global $powered_cache_options;
|
230 |
+
|
231 |
+
if ( apply_filters( 'powered_cache_lazy_load_enabled', true ) ) {
|
232 |
+
add_filter( 'hmw_process_buffer', array( 'HMW_Classes_Tools', 'returnTrue' ) );
|
233 |
+
}
|
234 |
+
|
235 |
+
add_filter( 'powered_cache_page_caching_buffer', array(
|
236 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ),
|
237 |
+
'find_replace'
|
238 |
+
), PHP_INT_MAX );
|
239 |
+
if ( isset( $powered_cache_options ) ) {
|
240 |
+
$powered_cache_options['show_cache_message'] = false;
|
241 |
+
}
|
242 |
+
|
243 |
+
return;
|
244 |
+
}
|
245 |
+
|
246 |
+
//Compatibility with W3 Total cache
|
247 |
+
if ( HMW_Classes_Tools::isPluginActive( 'w3-total-cache/w3-total-cache.php' ) ) {
|
248 |
+
//Don't show comments
|
249 |
+
add_filter( 'w3tc_can_print_comment', array( 'HMW_Classes_Tools', 'returnFalse' ), PHP_INT_MAX );
|
250 |
+
|
251 |
+
return;
|
252 |
+
}
|
253 |
+
|
254 |
+
}
|
255 |
+
}
|
256 |
+
|
257 |
+
public static function getAlerts() {
|
258 |
+
//is CDN plugin installed
|
259 |
+
if ( is_admin() || is_network_admin() ) {
|
260 |
+
if ( HMW_Classes_Tools::isPluginActive( 'cdn-enabler/cdn-enabler.php' ) ) {
|
261 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) <> 'default' ) {
|
262 |
+
if ( $cdn_enabler = get_option( 'cdn_enabler' ) ) {
|
263 |
+
if ( isset( $cdn_enabler['dirs'] ) ) {
|
264 |
+
$dirs = explode( ',', $cdn_enabler['dirs'] );
|
265 |
+
if ( ! empty( $dirs ) &&
|
266 |
+
! in_array( HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ), $dirs ) &&
|
267 |
+
! in_array( HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ), $dirs )
|
268 |
+
) {
|
269 |
+
HMW_Classes_Error::setError( __( 'CDN Enabled detected. Please include the new wp-content and wp-includes paths in CDN Enabler Settings', _HMW_PLUGIN_NAME_ ), 'default' );
|
270 |
+
}
|
271 |
+
}
|
272 |
+
}
|
273 |
+
}
|
274 |
+
|
275 |
+
if ( isset( $_SERVER["REQUEST_URI"] ) ) {
|
276 |
+
if ( admin_url( 'options-general.php?page=cdn_enabler', 'relative' ) == $_SERVER['REQUEST_URI'] ) {
|
277 |
+
HMW_Classes_Error::setError( sprintf( __( "CDN Enabler detected! Learn how to configure it with Hide My WP %sClick here%s", _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/hide-my-wp-and-cdn-enabler/" target="_blank">', '</a>' ), 'error' );
|
278 |
+
}
|
279 |
+
}
|
280 |
+
}
|
281 |
+
|
282 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-super-cache/wp-cache.php' ) ) {
|
283 |
+
if ( get_option( 'ossdl_off_cdn_url' ) <> '' && get_option( 'ossdl_off_cdn_url' ) <> home_url() ) {
|
284 |
+
$dirs = explode( ',', get_option( 'ossdl_off_include_dirs' ) );
|
285 |
+
if ( ! empty( $dirs ) &&
|
286 |
+
! in_array( HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ), $dirs ) &&
|
287 |
+
! in_array( HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ), $dirs )
|
288 |
+
) {
|
289 |
+
HMW_Classes_Error::setError( sprintf( __( 'WP Super Cache CDN detected. Please include %s and %s paths in WP Super Cache > CDN > Include directories', _HMW_PLUGIN_NAME_ ), '<strong>' . HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) . '</strong>', '<strong>' . HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ) . '</strong>' ), 'default' );
|
290 |
+
}
|
291 |
+
}
|
292 |
+
}
|
293 |
+
|
294 |
+
//Mor Rewrite is not installed
|
295 |
+
if ( HMW_Classes_Tools::isApache() && ! HMW_Classes_Tools::isModeRewrite() ) {
|
296 |
+
HMW_Classes_Error::setError( sprintf( __( 'Hide My WP does not work without mode_rewrite. Please activate the rewrite module in Apache. %sMore details%s', _HMW_PLUGIN_NAME_ ), '<a href="https://tecadmin.net/enable-apache-mod-rewrite-module-in-ubuntu-linuxmint/" target="_blank">', '</a>' ) );
|
297 |
+
}
|
298 |
+
|
299 |
+
//No permalink structure
|
300 |
+
if ( ! HMW_Classes_Tools::isPermalinkStructure() ) {
|
301 |
+
HMW_Classes_Error::setError( sprintf( __( 'Hide My WP does not work with %s Permalinks. Change it to %s or other type in Settings > Permalinks in order to hide it', _HMW_PLUGIN_NAME_ ), __( 'Plain' ), __( 'Post Name' ) ) );
|
302 |
+
defined( 'HMW_DISABLE' ) || define( 'HMW_DISABLE', true );
|
303 |
+
} else {
|
304 |
+
//IIS server and no Rewrite Permalinks installed
|
305 |
+
if ( HMW_Classes_Tools::isIIS() && HMW_Classes_Tools::isPHPPermalink() ) {
|
306 |
+
HMW_Classes_Error::setError( sprintf( __( 'You need to activate the URL Rewrite for IIS to be able to change the permalink structure to friendly URL (without index.php). %sMore details%s', _HMW_PLUGIN_NAME_ ), '<a href="https://www.iis.net/downloads/microsoft/url-rewrite" target="_blank">', '</a>' ) );
|
307 |
+
} elseif ( HMW_Classes_Tools::isPHPPermalink() ) {
|
308 |
+
HMW_Classes_Error::setError( __( 'You need to set the permalink structure to friendly URL (without index.php).', _HMW_PLUGIN_NAME_ ) );
|
309 |
+
}
|
310 |
+
}
|
311 |
+
|
312 |
+
if ( HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->isConfigAdminCookie() ) {
|
313 |
+
HMW_Classes_Error::setError( __( 'The constant ADMIN_COOKIE_PATH is defined in wp-config.php by another plugin. Hide My WP will not work unless you remove the line define(\'ADMIN_COOKIE_PATH\', ...);', _HMW_PLUGIN_NAME_ ) );
|
314 |
+
defined( 'HMW_DISABLE' ) || define( 'HMW_DISABLE', true );
|
315 |
+
}
|
316 |
+
|
317 |
+
//Inmotion server detected
|
318 |
+
if ( HMW_Classes_Tools::isInmotion() ) {
|
319 |
+
HMW_Classes_Error::setError( sprintf( __( 'Inmotion detected. %sPlease read how to make the plugin compatible with Inmotion Nginx Cache%s', _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/hide-my-wp-pro-compatible-with-inmotion-wordpress-hosting/" target="_blank">', '</a>' ) );
|
320 |
+
}
|
321 |
+
|
322 |
+
//The login path is changed by other plugins and may affect the functionality
|
323 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] == HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
324 |
+
if ( strpos( site_url( 'wp-login.php' ), HMW_Classes_Tools::$default['hmw_login_url'] ) === false ) {
|
325 |
+
defined( 'HMW_DEFAULT_LOGIN' ) || define( 'HMW_DEFAULT_LOGIN', site_url( 'wp-login.php' ) );
|
326 |
+
}
|
327 |
+
}
|
328 |
+
|
329 |
+
//The admin URL is already changed by other plugins and may affect the functionality
|
330 |
+
if ( ! HMW_RULES_IN_CONFIG ) {
|
331 |
+
HMW_Classes_Error::setError( __( 'Hide My WP rules are not saved in the config file and this may affect the website loading speed.', _HMW_PLUGIN_NAME_ ) );
|
332 |
+
defined( 'HMW_DEFAULT_ADMIN' ) || define( 'HMW_DEFAULT_ADMIN', HMW_Classes_Tools::$default['hmw_admin_url'] );
|
333 |
+
} elseif ( HMW_Classes_Tools::$default['hmw_admin_url'] == HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
334 |
+
if ( strpos( admin_url(), HMW_Classes_Tools::$default['hmw_admin_url'] ) === false ) {
|
335 |
+
defined( 'HMW_DEFAULT_ADMIN' ) || define( 'HMW_DEFAULT_ADMIN', admin_url() );
|
336 |
+
}
|
337 |
+
}
|
338 |
+
|
339 |
+
|
340 |
+
if ( HMW_Classes_Tools::isGodaddy() ) {
|
341 |
+
HMW_Classes_Error::setError( sprintf( __( "Godaddy detected! To avoid CSS errors, make sure you switch off the CDN from %s", _HMW_PLUGIN_NAME_ ), '<strong>' . '<a href="https://hidemywpghost.com/how-to-use-hide-my-wp-with-godaddy/" target="_blank"> Godaddy > Managed WordPress > Overview</a>' . '</strong>' ) );
|
342 |
+
}
|
343 |
+
|
344 |
+
//Check if the rules are working as expected
|
345 |
+
if ( HMW_Classes_Tools::getOption( 'rewrites' ) ) {
|
346 |
+
HMW_Classes_Error::setError( __( 'Some URLs passed through the config file rules and loaded through WordPress which may slow down your website.', _HMW_PLUGIN_NAME_ ) );
|
347 |
+
if ( HMW_Classes_Tools::isApache() || HMW_Classes_Tools::isLitespeed() ) {
|
348 |
+
HMW_Classes_Error::setError( sprintf( __( 'Save the settings and check the rules in .htaccess file. %sMake sure you activated AllowOverride All for your domain%s.', _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/how-to-enable-allowoverwrite-on-google-cloud-platform/" target="_blank">', '</a>' ) );
|
349 |
+
} elseif ( HMW_Classes_Tools::isNginx() ) {
|
350 |
+
HMW_Classes_Error::setError( sprintf( __( 'Save the settings and add the config file in Nginx. Follow %sSetup Hide My WP Ghost on Nginx Server%s.', _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/how-to-setup-hide-my-wp-on-nginx-server/" target="_blank">', '</a>' ) );
|
351 |
+
} elseif ( HMW_Classes_Tools::isWpengine() ) {
|
352 |
+
HMW_Classes_Error::setError( sprintf( __( 'Save the settings and add the rewrite rules in WPEngine and .htaccess. Follow %sSetup Hide My WP Ghost on Nginx Server%s.', _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/hide-my-wp-pro-compatible-with-wp-engine/" target="_blank">', '</a>' ) );
|
353 |
+
} elseif ( HMW_Classes_Tools::isWindows() ) {
|
354 |
+
HMW_Classes_Error::setError( sprintf( __( 'Save the settings and add the rewrite rules in web.config file. Follow %sSetup Hide My WP on Windows IIS server%s tutorial.', _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/kb/setup-hide-my-wp-on-windows-iis-server/" target="_blank">', '</a>' ) );
|
355 |
+
}
|
356 |
+
}
|
357 |
+
|
358 |
+
}
|
359 |
+
|
360 |
+
|
361 |
+
}
|
362 |
+
|
363 |
+
public function rocket_reject_url( $uri ) {
|
364 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
365 |
+
$path = parse_url( home_url(), PHP_URL_PATH );
|
366 |
+
$uri[] = ( $path <> '/' ? $path . '/' : $path ) . HMW_Classes_Tools::getOption( 'hmw_login_url' );
|
367 |
+
}
|
368 |
+
|
369 |
+
return $uri;
|
370 |
+
}
|
371 |
+
|
372 |
+
|
373 |
+
/**
|
374 |
+
* Include CDNs if found
|
375 |
+
* @return array|false
|
376 |
+
*/
|
377 |
+
public function findCDNServers() {
|
378 |
+
$domains = array();
|
379 |
+
|
380 |
+
HMW_Debug::dump( "findCDNServers", HMW_Classes_Tools::isPluginActive( 'wp-rocket/wp-rocket.php' ) );
|
381 |
+
|
382 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-rocket/wp-rocket.php' ) && function_exists( 'get_rocket_option' ) ) {
|
383 |
+
HMW_Debug::dump( "wp rocket installed" );
|
384 |
+
$cnames = get_rocket_option( 'cdn_cnames', array() );
|
385 |
+
foreach ( $cnames as $k => $_urls ) {
|
386 |
+
HMW_Debug::dump( $_urls );
|
387 |
+
$_urls = explode( ',', $_urls );
|
388 |
+
$_urls = array_map( 'trim', $_urls );
|
389 |
+
|
390 |
+
foreach ( $_urls as $url ) {
|
391 |
+
$domains[] = $url;
|
392 |
+
}
|
393 |
+
}
|
394 |
+
}
|
395 |
+
|
396 |
+
if ( HMW_Classes_Tools::isPluginActive( 'cdn-enabler/cdn-enabler.php' ) ) {
|
397 |
+
if ( $cd_enabler = get_option( 'cdn_enabler' ) ) {
|
398 |
+
if ( isset( $cd_enabler['url'] ) ) {
|
399 |
+
$domains[] = $cd_enabler['url'];
|
400 |
+
}
|
401 |
+
}
|
402 |
+
}
|
403 |
+
|
404 |
+
if ( HMW_Classes_Tools::isPluginActive( 'powered-cache/powered-cache.php' ) ) {
|
405 |
+
global $powered_cache_options;
|
406 |
+
if ( isset( $powered_cache_options['cdn_hostname'] ) ) {
|
407 |
+
$hostnames = $powered_cache_options['cdn_hostname'];
|
408 |
+
if ( ! empty( $hostnames ) ) {
|
409 |
+
foreach ( $hostnames as $host ) {
|
410 |
+
if ( ! empty( $host ) ) {
|
411 |
+
$domains[] = $host;
|
412 |
+
}
|
413 |
+
}
|
414 |
+
}
|
415 |
+
}
|
416 |
+
}
|
417 |
+
|
418 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-super-cache/wp-cache.php' ) ) {
|
419 |
+
if ( get_option( 'ossdl_off_cdn_url' ) <> '' && get_option( 'ossdl_off_cdn_url' ) <> home_url() ) {
|
420 |
+
$domains[] = get_option( 'ossdl_off_cdn_url' );
|
421 |
+
}
|
422 |
+
}
|
423 |
+
|
424 |
+
if ( ! empty( $domains ) ) {
|
425 |
+
return $domains;
|
426 |
+
}
|
427 |
+
|
428 |
+
return false;
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Fix compatibility with WooGC plugin
|
433 |
+
*
|
434 |
+
* @param $buffer
|
435 |
+
*
|
436 |
+
* @return mixed
|
437 |
+
*/
|
438 |
+
public function fix_woogc_shutdown( $buffer ) {
|
439 |
+
global $blog_id, $woocommerce, $WooGC;;
|
440 |
+
|
441 |
+
if ( ! class_exists( 'WooGC' ) ) {
|
442 |
+
return $buffer;
|
443 |
+
}
|
444 |
+
|
445 |
+
if ( ! is_object( $woocommerce->cart ) ) {
|
446 |
+
return $buffer;
|
447 |
+
}
|
448 |
+
|
449 |
+
|
450 |
+
if ( ! $WooGC instanceof WooGC ) {
|
451 |
+
return $buffer;
|
452 |
+
}
|
453 |
+
|
454 |
+
$options = $WooGC->functions->get_options();
|
455 |
+
$blog_details = get_blog_details( $blog_id );
|
456 |
+
|
457 |
+
//replace any checkout links
|
458 |
+
if ( ! empty( $options['cart_checkout_location'] ) && $options['cart_checkout_location'] != $blog_id ) {
|
459 |
+
$checkout_url = $woocommerce->cart->get_checkout_url();
|
460 |
+
$checkout_url = str_replace( array( 'http:', 'https:' ), "", $checkout_url );
|
461 |
+
$checkout_url = trailingslashit( $checkout_url );
|
462 |
+
|
463 |
+
$buffer = str_replace( $blog_details->domain . "/checkout/", $checkout_url, $buffer );
|
464 |
+
|
465 |
+
}
|
466 |
+
|
467 |
+
return $buffer;
|
468 |
+
}
|
469 |
+
|
470 |
+
}
|
models/Cookies.php
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Cookies {
|
5 |
+
|
6 |
+
public function __construct() {
|
7 |
+
if (HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption('hmw_admin_url')) {
|
8 |
+
$this->setCookieContants();
|
9 |
+
|
10 |
+
add_filter('redirect_post_location', array($this, 'setPostCookie'), PHP_INT_MAX, 2);
|
11 |
+
add_action('set_auth_cookie', array($this, 'setAuthCookie'), PHP_INT_MAX, 2);
|
12 |
+
add_action('clear_auth_cookie', array($this, 'setCleanCookie'), PHP_INT_MAX);
|
13 |
+
add_action('set_logged_in_cookie', array($this, 'setLoginCookie'), PHP_INT_MAX, 2);
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Set the cookie constants in case of admin change
|
19 |
+
*/
|
20 |
+
public function setCookieContants() {
|
21 |
+
if (!defined('HMW_ADMIN_COOKIE_PATH')) {
|
22 |
+
if (is_multisite()) {
|
23 |
+
global $blog_id;
|
24 |
+
switch_to_blog($blog_id);
|
25 |
+
|
26 |
+
ms_cookie_constants();
|
27 |
+
if (!is_subdomain_install() || trim(parse_url(get_option('siteurl'), PHP_URL_PATH), '/')) {
|
28 |
+
define('HMW_ADMIN_COOKIE_PATH', SITECOOKIEPATH);
|
29 |
+
} else {
|
30 |
+
define('HMW_ADMIN_COOKIE_PATH', SITECOOKIEPATH . HMW_Classes_Tools::getOption('hmw_admin_url'));
|
31 |
+
}
|
32 |
+
restore_current_blog();
|
33 |
+
} else {
|
34 |
+
wp_cookie_constants();
|
35 |
+
define('HMW_ADMIN_COOKIE_PATH', SITECOOKIEPATH . HMW_Classes_Tools::getOption('hmw_admin_url'));
|
36 |
+
}
|
37 |
+
}
|
38 |
+
if (!defined('HMW_PLUGINS_COOKIE_PATH')) {
|
39 |
+
define('HMW_PLUGINS_COOKIE_PATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl') . '/' . HMW_Classes_Tools::getOption('hmw_plugin_url')));
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
public function setPostCookie($location, $post_id) {
|
45 |
+
if (defined('HMW_ADMIN_COOKIE_PATH')) {
|
46 |
+
if ($post_id > 0) {
|
47 |
+
if (isset($_COOKIE['wp-saving-post']) && $_COOKIE['wp-saving-post'] === $post_id . '-check') {
|
48 |
+
setcookie('wp-saving-post', $post_id . '-saved', time() + DAY_IN_SECONDS, HMW_ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl());
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
return $location;
|
53 |
+
}
|
54 |
+
|
55 |
+
public function setTestCookie() {
|
56 |
+
if (!defined('TEST_COOKIE'))
|
57 |
+
define('TEST_COOKIE', 'test_cookie');
|
58 |
+
|
59 |
+
$secure = is_ssl() && 'https' === parse_url(get_option('home'), PHP_URL_SCHEME);
|
60 |
+
setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, $this->getCookieDomain(), $secure);
|
61 |
+
if (SITECOOKIEPATH != COOKIEPATH) {
|
62 |
+
setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure);
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
public function testCookies() {
|
67 |
+
$secure = is_ssl();
|
68 |
+
if ( $secure ) {
|
69 |
+
$auth_cookie_name = SECURE_AUTH_COOKIE;
|
70 |
+
} else {
|
71 |
+
$auth_cookie_name = AUTH_COOKIE;
|
72 |
+
}
|
73 |
+
|
74 |
+
return ( isset( $_COOKIE[ $auth_cookie_name ] ) && $_COOKIE[ $auth_cookie_name ] );
|
75 |
+
}
|
76 |
+
|
77 |
+
public function setCookiesCurrentPath() {
|
78 |
+
global $current_user;
|
79 |
+
|
80 |
+
if ( $current_user->ID ) {
|
81 |
+
wp_set_auth_cookie( $current_user->ID );
|
82 |
+
|
83 |
+
if ( $this->testCookies() ) {
|
84 |
+
return true;
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
return false;
|
89 |
+
}
|
90 |
+
|
91 |
+
public function setAuthCookie($auth_cookie, $expire) {
|
92 |
+
if (defined('HMW_ADMIN_COOKIE_PATH')) {
|
93 |
+
$secure = is_ssl();
|
94 |
+
if ($secure) {
|
95 |
+
$auth_cookie_name = SECURE_AUTH_COOKIE;
|
96 |
+
} else {
|
97 |
+
$auth_cookie_name = AUTH_COOKIE;
|
98 |
+
}
|
99 |
+
|
100 |
+
if (defined('HMW_PLUGINS_COOKIE_PATH')) {
|
101 |
+
setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
|
102 |
+
setcookie($auth_cookie_name, $auth_cookie, $expire, HMW_PLUGINS_COOKIE_PATH, $this->getCookieDomain(), $secure, true);
|
103 |
+
}
|
104 |
+
|
105 |
+
setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
|
106 |
+
setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
|
107 |
+
|
108 |
+
setcookie($auth_cookie_name, $auth_cookie, $expire, HMW_ADMIN_COOKIE_PATH, $this->getCookieDomain(), $secure, true);
|
109 |
+
}
|
110 |
+
}
|
111 |
+
|
112 |
+
public function setLoginCookie($logged_in_cookie, $expire) {
|
113 |
+
// Front-end cookie is secure when the auth cookie is secure and the site's home URL is forced HTTPS.
|
114 |
+
$secure_logged_in_cookie = is_ssl() && 'https' === parse_url(get_option('home'), PHP_URL_SCHEME);
|
115 |
+
|
116 |
+
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, $this->getCookieDomain(), $secure_logged_in_cookie, true);
|
117 |
+
if (COOKIEPATH != SITECOOKIEPATH) {
|
118 |
+
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, $this->getCookieDomain(), $secure_logged_in_cookie, true);
|
119 |
+
}
|
120 |
+
|
121 |
+
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
|
122 |
+
if (COOKIEPATH != SITECOOKIEPATH)
|
123 |
+
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
|
124 |
+
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Check if the current user IP is always the same
|
129 |
+
* If not, request a relogin
|
130 |
+
* @param $response
|
131 |
+
* @return mixed
|
132 |
+
*/
|
133 |
+
public function checkLoggedIP($response) {
|
134 |
+
if (isset($_SERVER['REMOTE_ADDR']) && isset($_COOKIE['wordpress_logged_address'])) {
|
135 |
+
if (md5($_SERVER['REMOTE_ADDR']) <> $_COOKIE['wordpress_logged_address']) {
|
136 |
+
global $current_user;
|
137 |
+
$current_user->ID = null;
|
138 |
+
$response['wp-auth-check'] = false;
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
return $response;
|
143 |
+
}
|
144 |
+
/**
|
145 |
+
* Clean the user cookies on logout
|
146 |
+
*/
|
147 |
+
/**
|
148 |
+
* Clean the user cookies on logout
|
149 |
+
*/
|
150 |
+
public function setCleanCookie() {
|
151 |
+
if (defined('HMW_ADMIN_COOKIE_PATH') && defined('PLUGINS_COOKIE_PATH')) {
|
152 |
+
setcookie(AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, HMW_ADMIN_COOKIE_PATH, $this->getCookieDomain());
|
153 |
+
setcookie(SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, HMW_ADMIN_COOKIE_PATH, $this->getCookieDomain());
|
154 |
+
setcookie('wordpress_logged_address', ' ', time() - YEAR_IN_SECONDS, HMW_ADMIN_COOKIE_PATH, $this->getCookieDomain());
|
155 |
+
|
156 |
+
setcookie(AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, HMW_PLUGINS_COOKIE_PATH, $this->getCookieDomain());
|
157 |
+
setcookie(SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, HMW_PLUGINS_COOKIE_PATH, $this->getCookieDomain());
|
158 |
+
setcookie('wordpress_logged_address', ' ', time() - YEAR_IN_SECONDS, HMW_PLUGINS_COOKIE_PATH, $this->getCookieDomain());
|
159 |
+
}
|
160 |
+
}
|
161 |
+
|
162 |
+
public function getCookieDomain() {
|
163 |
+
$domain = COOKIE_DOMAIN;
|
164 |
+
|
165 |
+
if (is_multisite()) {
|
166 |
+
global $blog_id;
|
167 |
+
switch_to_blog($blog_id);
|
168 |
+
$current_network = get_network();
|
169 |
+
|
170 |
+
$domain = preg_replace('|^www\.|', '', parse_url(get_option('siteurl'), PHP_URL_HOST));
|
171 |
+
|
172 |
+
if (!empty($current_network->cookie_domain)) {
|
173 |
+
if (strpos($current_network->cookie_domain, $domain) === false) {
|
174 |
+
$domain = '.' . $domain;
|
175 |
+
}
|
176 |
+
} elseif (strpos($current_network->domain, $domain) === false) {
|
177 |
+
$domain = '.' . $domain;
|
178 |
+
}
|
179 |
+
restore_current_blog();
|
180 |
+
}
|
181 |
+
|
182 |
+
return $domain;
|
183 |
+
}
|
184 |
+
|
185 |
+
}
|
models/Files.php
ADDED
@@ -0,0 +1,400 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Files {
|
5 |
+
|
6 |
+
protected $_files = array();
|
7 |
+
protected $_replace = array();
|
8 |
+
protected $_rewrites = array();
|
9 |
+
|
10 |
+
public function __construct() {
|
11 |
+
$this->_files = array(
|
12 |
+
'jpg',
|
13 |
+
'jpeg',
|
14 |
+
'png',
|
15 |
+
'bmp',
|
16 |
+
'gif',
|
17 |
+
'jp2',
|
18 |
+
'webp',
|
19 |
+
'css',
|
20 |
+
'scss',
|
21 |
+
'js',
|
22 |
+
'woff',
|
23 |
+
'woff2',
|
24 |
+
'ttf',
|
25 |
+
'otf',
|
26 |
+
'pfb',
|
27 |
+
'pfm',
|
28 |
+
'tfil',
|
29 |
+
'eot',
|
30 |
+
'svg',
|
31 |
+
'pdf',
|
32 |
+
'doc',
|
33 |
+
'docx',
|
34 |
+
'csv',
|
35 |
+
'xls',
|
36 |
+
'xslx',
|
37 |
+
'mp2',
|
38 |
+
'mp3',
|
39 |
+
'mp4',
|
40 |
+
'mpeg',
|
41 |
+
'zip',
|
42 |
+
'rar',
|
43 |
+
'txt'
|
44 |
+
);
|
45 |
+
|
46 |
+
//init the replace array
|
47 |
+
$this->_replace = array('from' => [], 'to' => []);
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Check if the current URL is a file
|
52 |
+
*/
|
53 |
+
public function checkBrokenFile() {
|
54 |
+
//don't let to rename and hide the current paths if logout is required
|
55 |
+
if (HMW_Classes_Tools::getOption('error') || HMW_Classes_Tools::getOption('logout')) {
|
56 |
+
return;
|
57 |
+
}
|
58 |
+
|
59 |
+
//stop here is the option is default.
|
60 |
+
//the prvious code is needed for settings change and validation
|
61 |
+
if (HMW_Classes_Tools::getOption('hmw_mode') == 'default') {
|
62 |
+
return;
|
63 |
+
}
|
64 |
+
|
65 |
+
if (is_404()) {
|
66 |
+
$this->showFile($this->getCurrentURL());
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
*
|
72 |
+
* If the rewrite config is not set
|
73 |
+
* If there is a new file path, change it back to real path and show the file
|
74 |
+
* Prevents errors when the paths are chnged but the rewrite config is not set up correctly
|
75 |
+
* @param $url
|
76 |
+
* @return bool|string
|
77 |
+
*/
|
78 |
+
public function isFile($url) {
|
79 |
+
if ($url <> '') {
|
80 |
+
if (strpos($url, '?') !== false) $url = substr($url, 0, strpos($url, '?'));
|
81 |
+
if (strrpos($url, '.') !== false) {
|
82 |
+
$ext = substr($url, strrpos($url, '.') + 1);
|
83 |
+
if (in_array($ext, $this->_files)) {
|
84 |
+
return $ext;
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
+
return false;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Get the current URL
|
94 |
+
* @return string
|
95 |
+
*/
|
96 |
+
public function getCurrentURL() {
|
97 |
+
$url = '';
|
98 |
+
|
99 |
+
if (isset($_SERVER['HTTP_HOST'])) {
|
100 |
+
// build the URL in the address bar
|
101 |
+
$url = is_ssl() ? 'https://' : 'http://';
|
102 |
+
$url .= $_SERVER['HTTP_HOST'];
|
103 |
+
$url .= $_SERVER['REQUEST_URI'];
|
104 |
+
}
|
105 |
+
|
106 |
+
return $url;
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Build the redirects array
|
111 |
+
* @throws Exception
|
112 |
+
*/
|
113 |
+
public function buildRedirect() {
|
114 |
+
$rewriteModel = HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' );
|
115 |
+
|
116 |
+
//build the rules paths to change back the hidden paths
|
117 |
+
if ( !isset( $rewriteModel->_replace['from'] ) && !isset( $rewriteModel->_replace['to'] ) ) {
|
118 |
+
$rewriteModel->buildRedirect();
|
119 |
+
}
|
120 |
+
|
121 |
+
foreach ( $rewriteModel->_replace['from'] as $key => $row ) {
|
122 |
+
if ( $rewriteModel->_replace['rewrite'][$key] ) {
|
123 |
+
$this->_rewrites['from'][] = '#^/' . $rewriteModel->_replace['to'][$key] . (substr( $rewriteModel->_replace['to'][$key], -1 ) == '/' ? "(.*)" : "") . '#i';
|
124 |
+
$this->_rewrites['to'][] = '/' . $rewriteModel->_replace['from'][$key] . (substr( $rewriteModel->_replace['to'][$key], -1 ) == '/' ? "$1" : "");
|
125 |
+
}
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Show the file when the server rewrite is not added
|
131 |
+
*
|
132 |
+
* @param string $url broken URL
|
133 |
+
*
|
134 |
+
* @throws Exception
|
135 |
+
*/
|
136 |
+
public function showFile( $url ) {
|
137 |
+
if ( !defined( 'ABSPATH' ) ) {
|
138 |
+
return;
|
139 |
+
}
|
140 |
+
|
141 |
+
//remove the redirect hook
|
142 |
+
remove_filter( 'wp_redirect', array(HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ), 'sanitize_redirect'), PHP_INT_MAX );
|
143 |
+
|
144 |
+
//Buid the rewrite rules
|
145 |
+
$this->buildRedirect();
|
146 |
+
|
147 |
+
//Get the original URL based on rewrite rules
|
148 |
+
$parse_url = parse_url( $url );
|
149 |
+
|
150 |
+
//Get the home root path
|
151 |
+
$home_root = parse_url( home_url() );
|
152 |
+
if ( isset( $home_root['path'] ) ) {
|
153 |
+
$home_root = $home_root['path'];
|
154 |
+
$parse_url['path'] = str_replace( $home_root, '', $parse_url['path'] );
|
155 |
+
} else {
|
156 |
+
$home_root = '';
|
157 |
+
}
|
158 |
+
|
159 |
+
$parse_url['query'] = ((isset($parse_url['query']) && $parse_url['query']) ? '?' . $parse_url['query'] : '');
|
160 |
+
$parse_url['path'] = preg_replace( $this->_rewrites['from'], $this->_rewrites['to'], $parse_url['path'] );
|
161 |
+
$new_url = $parse_url['scheme'] . '://' . $parse_url['host'] . $home_root . $parse_url['path'] . $parse_url['query'];
|
162 |
+
$new_url = str_replace( '/wp-admin/wp-admin/', '/wp-admin/', $new_url ); //remove duplicates
|
163 |
+
|
164 |
+
$ctype = false;
|
165 |
+
if ( $ext = $this->isFile( $new_url ) ) {
|
166 |
+
|
167 |
+
$new_path = HMW_Classes_Tools::getRootPath() . $parse_url['path'];
|
168 |
+
if ( file_exists( $new_path ) ) {
|
169 |
+
|
170 |
+
//if file is loaded through WordPress rewrites and not through config file
|
171 |
+
if ( strpos( $url, HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) ) && $url <> $new_url ) {
|
172 |
+
$redirects = (int)HMW_Classes_Tools::getOption( 'rewrites' );
|
173 |
+
HMW_Classes_Tools::saveOptions( 'rewrites', ($redirects + 1) );
|
174 |
+
}
|
175 |
+
//////////////////////////////////////////////////////////////////////////
|
176 |
+
switch ( $ext ) {
|
177 |
+
case "scss":
|
178 |
+
case "css":
|
179 |
+
$ctype = "text/css";
|
180 |
+
break;
|
181 |
+
case "js":
|
182 |
+
$ctype = "application/javascript";
|
183 |
+
break;
|
184 |
+
case "svg":
|
185 |
+
$ctype = "image/svg+xml";
|
186 |
+
break;
|
187 |
+
default:
|
188 |
+
if ( function_exists( 'mime_content_type' ) ) {
|
189 |
+
$ctype = @mime_content_type( $new_path );
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
+
ob_clean(); //clear the buffer
|
194 |
+
$content = @file_get_contents( $new_path );
|
195 |
+
|
196 |
+
header( "HTTP/1.1 200 OK" );
|
197 |
+
header( "Cache-Control: max-age=2592000" );
|
198 |
+
header( "Expires: " . gmdate( 'r', strtotime( "+1 month" ) ) );
|
199 |
+
header( 'Vary: Accept-Encoding' );
|
200 |
+
|
201 |
+
if ( $ctype ) {
|
202 |
+
header( 'Content-Type: ' . $ctype . '; charset: UTF-8' );
|
203 |
+
}
|
204 |
+
|
205 |
+
if ( strpos( $new_url, '.js' ) || strpos( $new_url, '.css' ) || strpos( $new_url, '.scss' ) ) {
|
206 |
+
//remove comments
|
207 |
+
$content = preg_replace( '/\*\*\*+/s', '', $content, 1 );
|
208 |
+
$content = preg_replace( '/(\/\*[^\*]+\*\/)/s', '', $content, 1 );
|
209 |
+
|
210 |
+
//Text Mapping for all css and js files
|
211 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mapping_classes' ) ) {
|
212 |
+
$hmw_text_mapping = json_decode( HMW_Classes_Tools::getOption( 'hmw_text_mapping' ), true );
|
213 |
+
if ( isset( $hmw_text_mapping['from'] ) && !empty( $hmw_text_mapping['from'] ) &&
|
214 |
+
isset( $hmw_text_mapping['to'] ) && !empty( $hmw_text_mapping['to'] ) ) {
|
215 |
+
|
216 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mapping_classes' ) ) {
|
217 |
+
|
218 |
+
foreach ( $hmw_text_mapping['from'] as $index => $from ) {
|
219 |
+
$content = preg_replace( "'(?:([^/])" . addslashes( $from ) . "([^/]))'is", '$1' . $hmw_text_mapping['to'][$index] . '$2', $content );
|
220 |
+
}
|
221 |
+
|
222 |
+
} else {
|
223 |
+
$content = str_ireplace( $hmw_text_mapping['from'], $hmw_text_mapping['to'], $content );
|
224 |
+
}
|
225 |
+
|
226 |
+
}
|
227 |
+
}
|
228 |
+
}
|
229 |
+
|
230 |
+
//gzip the CSS
|
231 |
+
if ( function_exists( 'gzencode' ) ) {
|
232 |
+
header( "Content-Encoding: gzip" ); //HTTP 1.1
|
233 |
+
$content = gzencode( $content );
|
234 |
+
}
|
235 |
+
|
236 |
+
//Show the content
|
237 |
+
header( 'Content-Length: ' . strlen( $content ) );
|
238 |
+
echo $content;
|
239 |
+
exit();
|
240 |
+
}
|
241 |
+
|
242 |
+
} elseif ( strpos( $new_url, 'wp-login.php' ) || strpos( $new_url, HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) ) {
|
243 |
+
|
244 |
+
$actions = array(
|
245 |
+
'postpass',
|
246 |
+
'logout',
|
247 |
+
'lostpassword',
|
248 |
+
'retrievepassword',
|
249 |
+
'resetpass',
|
250 |
+
'rp',
|
251 |
+
'register',
|
252 |
+
'login',
|
253 |
+
'confirmaction'
|
254 |
+
);
|
255 |
+
$_REQUEST['action'] = $this->strposa( $new_url, $actions );
|
256 |
+
|
257 |
+
ob_start();
|
258 |
+
include(ABSPATH . '/wp-login.php');
|
259 |
+
$content = ob_get_clean();
|
260 |
+
|
261 |
+
header( "HTTP/1.1 200 OK" );
|
262 |
+
echo $content;
|
263 |
+
exit();
|
264 |
+
|
265 |
+
} elseif ( strpos( $new_url, '/wp-activate.php' ) ) {
|
266 |
+
|
267 |
+
ob_start();
|
268 |
+
include(ABSPATH . '/wp-activate.php');
|
269 |
+
$content = ob_get_clean();
|
270 |
+
|
271 |
+
header( "HTTP/1.1 200 OK" );
|
272 |
+
echo $content;
|
273 |
+
exit();
|
274 |
+
|
275 |
+
} elseif ( strpos( $new_url, '/wp-signup.php' ) ) {
|
276 |
+
|
277 |
+
ob_start();
|
278 |
+
include(ABSPATH . '/wp-signup.php');
|
279 |
+
$content = ob_get_clean();
|
280 |
+
|
281 |
+
header( "HTTP/1.1 200 OK" );
|
282 |
+
echo $content;
|
283 |
+
exit();
|
284 |
+
|
285 |
+
} elseif ( strpos( $new_url, '/' . HMW_Classes_Tools::$default['hmw_wp-json'] ) && isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
|
286 |
+
$response = $this->postRequest( $url );
|
287 |
+
|
288 |
+
header( "HTTP/1.1 200 OK" );
|
289 |
+
if ( !empty( $response['headers'] ) ) {
|
290 |
+
foreach ( $response['headers'] as $header ) {
|
291 |
+
header( $header );
|
292 |
+
}
|
293 |
+
}
|
294 |
+
echo $response['body'];
|
295 |
+
|
296 |
+
exit();
|
297 |
+
|
298 |
+
} elseif ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
|
299 |
+
$response = $this->postRequest( $new_url );
|
300 |
+
|
301 |
+
header( "HTTP/1.1 200 OK" );
|
302 |
+
if ( !empty( $response['headers'] ) ) {
|
303 |
+
foreach ( $response['headers'] as $header ) {
|
304 |
+
header( $header );
|
305 |
+
}
|
306 |
+
}
|
307 |
+
echo $response['body'];
|
308 |
+
|
309 |
+
exit();
|
310 |
+
|
311 |
+
} elseif ( $url <> $new_url ) {
|
312 |
+
wp_safe_redirect( $new_url, 301 );
|
313 |
+
exit();
|
314 |
+
}
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Do a Post request
|
319 |
+
* @param $url
|
320 |
+
* @return array
|
321 |
+
*/
|
322 |
+
public function postRequest( $url ) {
|
323 |
+
$return = array();
|
324 |
+
|
325 |
+
$headers = getallheaders();
|
326 |
+
$options = array(
|
327 |
+
'method' => 'POST',
|
328 |
+
'headers' => $headers,
|
329 |
+
'body' => $_POST,
|
330 |
+
'timeout' => 60,
|
331 |
+
'sslverify' => false,
|
332 |
+
);
|
333 |
+
|
334 |
+
|
335 |
+
$response = wp_remote_post( $url, $options );
|
336 |
+
|
337 |
+
$return['body'] = wp_remote_retrieve_body( $response );
|
338 |
+
foreach ( wp_remote_retrieve_headers( $response ) as $key => $value ) {
|
339 |
+
if ( !is_array( $value ) ) {
|
340 |
+
$return['headers'][] = "$key: $value";
|
341 |
+
} else {
|
342 |
+
foreach ( $value as $v )
|
343 |
+
$return['headers'][] = "$key: $v";
|
344 |
+
}
|
345 |
+
}
|
346 |
+
|
347 |
+
return $return;
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Do a Get request
|
352 |
+
* @param $url
|
353 |
+
* @return array
|
354 |
+
*/
|
355 |
+
public function getRequest( $url ) {
|
356 |
+
$return = array();
|
357 |
+
|
358 |
+
$headers = getallheaders();
|
359 |
+
$options = array(
|
360 |
+
'method' => 'GET',
|
361 |
+
'headers' => $headers,
|
362 |
+
'timeout' => 60,
|
363 |
+
'sslverify' => false,
|
364 |
+
);
|
365 |
+
|
366 |
+
|
367 |
+
$response = wp_remote_get( $url, $options );
|
368 |
+
|
369 |
+
$return['body'] = wp_remote_retrieve_body( $response );
|
370 |
+
foreach ( wp_remote_retrieve_headers( $response ) as $key => $value ) {
|
371 |
+
if ( !is_array( $value ) ) {
|
372 |
+
$return['headers'][] = "$key: $value";
|
373 |
+
} else {
|
374 |
+
foreach ( $value as $v )
|
375 |
+
$return['headers'][] = "$key: $v";
|
376 |
+
}
|
377 |
+
}
|
378 |
+
|
379 |
+
return $return;
|
380 |
+
}
|
381 |
+
|
382 |
+
/**
|
383 |
+
* Look into array of actions
|
384 |
+
*
|
385 |
+
* @param $haystack
|
386 |
+
* @param array $needles
|
387 |
+
* @param int $offset
|
388 |
+
*
|
389 |
+
* @return bool|mixed
|
390 |
+
*/
|
391 |
+
function strposa($haystack, $needles = array(), $offset = 0) {
|
392 |
+
foreach ($needles as $needle) {
|
393 |
+
if (strpos($haystack, $needle, $offset) !== false) {
|
394 |
+
return $needle;
|
395 |
+
}
|
396 |
+
}
|
397 |
+
return false;
|
398 |
+
}
|
399 |
+
|
400 |
+
}
|
models/Menu.php
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Menu {
|
5 |
+
|
6 |
+
/** @var array with the menu content
|
7 |
+
*
|
8 |
+
* $page_title (string) (required) The text to be displayed in the title tags of the page when the menu is selected
|
9 |
+
* $menu_title (string) (required) The on-screen name text for the menu
|
10 |
+
* $capability (string) (required) The capability required for this menu to be displayed to the user. User levels are deprecated and should not be used here!
|
11 |
+
* $menu_slug (string) (required) The slug name to refer to this menu by (should be unique for this menu). Prior to Version 3.0 this was called the file (or handle) parameter. If the function parameter is omitted, the menu_slug should be the PHP file that handles the display of the menu page content.
|
12 |
+
* $function The function that displays the page content for the menu page. Technically, the function parameter is optional, but if it is not supplied, then WordPress will basically assume that including the PHP file will generate the administration screen, without calling a function. Most plugin authors choose to put the page-generating code in a function within their main plugin file.:In the event that the function parameter is specified, it is possible to use any string for the file parameter. This allows usage of pages such as ?page=my_super_plugin_page instead of ?page=my-super-plugin/admin-options.php.
|
13 |
+
* $icon_url (string) (optional) The url to the icon to be used for this menu. This parameter is optional. Icons should be fairly small, around 16 x 16 pixels for best results. You can use the plugin_dir_url( __FILE__ ) function to get the URL of your plugin directory and then add the image filename to it. You can set $icon_url to "div" to have wordpress generate <br> tag instead of <img>. This can be used for more advanced formating via CSS, such as changing icon on hover.
|
14 |
+
* $position (integer) (optional) The position in the menu order this menu should appear. By default, if this parameter is omitted, the menu will appear at the bottom of the menu structure. The higher the number, the lower its position in the menu. WARNING: if 2 menu items use the same position attribute, one of the items may be overwritten so that only one item displays!
|
15 |
+
*
|
16 |
+
* */
|
17 |
+
public $menu = array();
|
18 |
+
public $meta = array();
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Add a menu in WP admin page
|
22 |
+
*
|
23 |
+
* @param array $param
|
24 |
+
*
|
25 |
+
* @return void
|
26 |
+
*/
|
27 |
+
public function addMenu($param = null) {
|
28 |
+
if ($param)
|
29 |
+
$this->menu = $param;
|
30 |
+
|
31 |
+
if (is_array($this->menu)) {
|
32 |
+
|
33 |
+
if ($this->menu[0] <> '' && $this->menu[1] <> '') {
|
34 |
+
/* add the translation */
|
35 |
+
$this->menu[0] = __($this->menu[0], _HMW_PLUGIN_NAME_);
|
36 |
+
$this->menu[1] = __($this->menu[1], _HMW_PLUGIN_NAME_);
|
37 |
+
|
38 |
+
if (!isset($this->menu[5]))
|
39 |
+
$this->menu[5] = null;
|
40 |
+
if (!isset($this->menu[6]))
|
41 |
+
$this->menu[6] = null;
|
42 |
+
|
43 |
+
/* add the menu with WP */
|
44 |
+
add_menu_page($this->menu[0], $this->menu[1], $this->menu[2], $this->menu[3], $this->menu[4], $this->menu[5], $this->menu[6]);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Add a submenumenu in WP admin page
|
51 |
+
*
|
52 |
+
* @param array $param
|
53 |
+
*
|
54 |
+
* @return void
|
55 |
+
*/
|
56 |
+
public function addSubmenu($param = null) {
|
57 |
+
if ($param)
|
58 |
+
$this->menu = $param;
|
59 |
+
|
60 |
+
if (is_array($this->menu)) {
|
61 |
+
|
62 |
+
if ($this->menu[0] <> '' && $this->menu[1] <> '') {
|
63 |
+
/* add the translation */
|
64 |
+
$this->menu[0] = __($this->menu[0], _HMW_PLUGIN_NAME_);
|
65 |
+
$this->menu[1] = __($this->menu[1], _HMW_PLUGIN_NAME_);
|
66 |
+
|
67 |
+
if (!isset($this->menu[5]))
|
68 |
+
$this->menu[5] = null;
|
69 |
+
|
70 |
+
/* add the menu with WP */
|
71 |
+
add_submenu_page($this->menu[0], $this->menu[1], $this->menu[2], $this->menu[3], $this->menu[4], $this->menu[5]);
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Add a box Meta in WP
|
78 |
+
*
|
79 |
+
* @param array $param
|
80 |
+
*
|
81 |
+
* @return void
|
82 |
+
*/
|
83 |
+
public function addOption($param = null) {
|
84 |
+
if ($param) {
|
85 |
+
$this->meta = $param;
|
86 |
+
}
|
87 |
+
|
88 |
+
if (is_array($this->meta)) {
|
89 |
+
|
90 |
+
if ($this->meta[0] <> '' && $this->meta[1] <> '') {
|
91 |
+
/* add the translation */
|
92 |
+
$this->meta[1] = __($this->meta[1], _HMW_PLUGIN_NAME_);
|
93 |
+
|
94 |
+
if (!isset($this->meta[5]))
|
95 |
+
$this->meta[5] = null;
|
96 |
+
|
97 |
+
/* add the box content with WP */
|
98 |
+
add_options_page($this->meta[0], $this->meta[1], $this->meta[2], $this->meta[3], $this->meta[4]);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Prevent other plugins to load CSS into HMW
|
105 |
+
*/
|
106 |
+
public function fixEnqueueErrors() {
|
107 |
+
global $wp_styles, $wp_scripts;
|
108 |
+
$corelib = array('admin-bar', 'colors', 'ie', 'common', 'utils', 'wp-auth-check','dismissible-notices',
|
109 |
+
'media-editor', 'media-audiovideo', 'media-views', 'imgareaselect', 'mce-view', 'image-edit',
|
110 |
+
'wordfence-global-style','ip2location_country_blocker_admin_menu_styles','wf-adminbar','autoptimize-toolbar',
|
111 |
+
'yoast-seo-adminbar','bbp-admin-css','bp-admin-common-css','bp-admin-bar','elementor-common','ithemes-icon-font',
|
112 |
+
'wordfence-ls-admin-global','woocommerce_admin_menu_styles','besclwp_cpt_admin_style','uabb-notice-settings',
|
113 |
+
'besclwp_cpt_admin_script','itsec-core-admin-notices','flatsome-panel-css','wordfence-global-style','ame-custom-menu-colors',
|
114 |
+
'wordfence-ls-admin-global', 'wordfenceAJAXcss', 'wpf_admin_style', 'wf-adminbar', 'wpf-graphics-admin-style', 'wpr-admin-common'
|
115 |
+
);
|
116 |
+
|
117 |
+
foreach ($wp_styles->queue as $key => $queue) {
|
118 |
+
if (!in_array($queue, $corelib)) {
|
119 |
+
unset($wp_styles->queue[$key]);
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
foreach ($wp_scripts->queue as $key => $queue) {
|
124 |
+
if (!in_array($queue, $corelib)) {
|
125 |
+
unset($wp_scripts->queue[$key]);
|
126 |
+
}
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
}
|
models/Rewrite.php
ADDED
@@ -0,0 +1,2070 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
class HMW_Models_Rewrite {
|
5 |
+
|
6 |
+
public $_replace = array();
|
7 |
+
public $paths;
|
8 |
+
//
|
9 |
+
protected $_rewrites;
|
10 |
+
protected $_replaced;
|
11 |
+
protected $_blogurl;
|
12 |
+
protected $_pass;
|
13 |
+
//
|
14 |
+
protected $_findtextmapping = array();
|
15 |
+
protected $_replacetextmapping = array();
|
16 |
+
|
17 |
+
public function __construct() {
|
18 |
+
$this->_blogurl = str_replace( 'www.', '', parse_url( site_url(), PHP_URL_HOST ) . parse_url( site_url(), PHP_URL_PATH ) );
|
19 |
+
}
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Avoid loading the same buffer 2 times in a row
|
23 |
+
* Used if a cache plugin is installed
|
24 |
+
*
|
25 |
+
* @param $hook
|
26 |
+
*
|
27 |
+
* @return bool
|
28 |
+
*/
|
29 |
+
public function obLoaded( $hook = false ) {
|
30 |
+
if ( $hook && function_exists( 'ob_list_handlers' ) ) {
|
31 |
+
$buffers = @ob_list_handlers();
|
32 |
+
|
33 |
+
if ( ! empty( $buffers ) ) {
|
34 |
+
if ( in_array( $hook, $buffers ) ) {
|
35 |
+
return true;
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Start the buffer listener
|
45 |
+
*/
|
46 |
+
public function startBuffer() {
|
47 |
+
//If the content is HTML
|
48 |
+
$fileModel = HMW_Classes_ObjController::getClass( 'HMW_Models_Files' );
|
49 |
+
|
50 |
+
if ( ! $fileModel->isFile( $fileModel->getCurrentURL() ) ) {
|
51 |
+
ob_start( array( $this, 'getBuffer' ) );
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Load on Shutdown and get the buffer for sitemaps
|
57 |
+
* @throws Exception
|
58 |
+
*/
|
59 |
+
public function shutDownBuffer() {
|
60 |
+
//Force to change the URL for xml content types
|
61 |
+
if ( HMW_Classes_Tools::isContentHeader( array( 'text/xml' ) ) ) {
|
62 |
+
$buffer = $this->find_replace( ob_get_contents() );
|
63 |
+
ob_end_clean();
|
64 |
+
echo $buffer;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Get the buffer by hook for compatibility with other plugins
|
70 |
+
* @throws Exception
|
71 |
+
*/
|
72 |
+
public function getTempBuffer() {
|
73 |
+
//Force to change the URL for xml content types
|
74 |
+
$buffer = $this->find_replace( ob_get_contents() );
|
75 |
+
|
76 |
+
ob_end_clean();
|
77 |
+
echo $buffer;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Get the output buffer
|
82 |
+
*
|
83 |
+
* @param $buffer
|
84 |
+
*
|
85 |
+
* @return mixed
|
86 |
+
*/
|
87 |
+
public function getBuffer( $buffer ) {
|
88 |
+
if ( HMW_Classes_Tools::isAjax() && HMW_Classes_Tools::getOption( 'hmw_hideajax_paths' ) ) {
|
89 |
+
//replace the URLs in Ajax
|
90 |
+
if ( function_exists( 'is_user_logged_in' ) && ! is_user_logged_in() ) {
|
91 |
+
$buffer = $this->find_replace( $buffer );
|
92 |
+
}
|
93 |
+
} else {
|
94 |
+
$hmw_process_buffer = apply_filters( 'hmw_process_buffer', true );
|
95 |
+
|
96 |
+
if ( HMW_Classes_Tools::isPluginActive( 'wp-rocket/wp-rocket.php' ) ) {
|
97 |
+
|
98 |
+
$rocket_cache_search = apply_filters( 'rocket_cache_search', false );
|
99 |
+
$rocket_override_donotcachepage = apply_filters( 'rocket_override_donotcachepage', false );
|
100 |
+
if ( ( function_exists( 'is_404' ) && is_404() )
|
101 |
+
|| ( ( function_exists( 'is_search' ) && is_search() ) && ! $rocket_cache_search ) // Don't cache search results.
|
102 |
+
|| ( ( defined( 'DONOTCACHEPAGE' ) && DONOTCACHEPAGE ) && ! $rocket_override_donotcachepage )
|
103 |
+
|| ( defined( 'DONOTROCKETOPTIMIZE' ) && DONOTROCKETOPTIMIZE )
|
104 |
+
) {
|
105 |
+
$hmw_process_buffer = true;
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
if ( $hmw_process_buffer ) {
|
110 |
+
//Make sure is permalink set up
|
111 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
112 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
113 |
+
return $buffer;
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) <> 'default' ) {//If not in default mode
|
118 |
+
|
119 |
+
//Don't run Hide My WP in these cases
|
120 |
+
if ( strlen( $buffer ) < 255 || HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
121 |
+
return $buffer;
|
122 |
+
}
|
123 |
+
|
124 |
+
//Check if other plugins already did the cache
|
125 |
+
if ( HMW_Classes_ObjController::getClass( 'HMW_Models_Compatibility' )->alreadyCached() ) {
|
126 |
+
return $buffer;
|
127 |
+
}
|
128 |
+
|
129 |
+
if ( HMW_Classes_Tools::isContentHeader( array( 'text/html', 'text/xml' ) ) ) {
|
130 |
+
//if it's not in admin dashboar or is in admin dashboard but it's not the adminitrator
|
131 |
+
//If the user set to change the paths for logged users
|
132 |
+
if ( HMW_Classes_Tools::doChangesAdmin() ) {
|
133 |
+
$buffer = $this->find_replace( $buffer );
|
134 |
+
}
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
}
|
139 |
+
}
|
140 |
+
|
141 |
+
//Return the buffer to HTML
|
142 |
+
return apply_filters( 'hmw_buffer', $buffer );
|
143 |
+
}
|
144 |
+
|
145 |
+
/************************************ BUID & FLUSH REWRITES****************************************/
|
146 |
+
/**
|
147 |
+
* Prepare redirect build
|
148 |
+
* @return $this
|
149 |
+
*/
|
150 |
+
public function clearRedirect() {
|
151 |
+
HMW_Classes_Tools::$options = HMW_Classes_Tools::getOptions();
|
152 |
+
$this->_replace = array();
|
153 |
+
|
154 |
+
return $this;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Build the array with find and replace
|
159 |
+
* Decide what goes to htaccess and not
|
160 |
+
* @return $this
|
161 |
+
*/
|
162 |
+
public function buildRedirect() {
|
163 |
+
add_action( 'home_url', array( $this, 'home_url' ), PHP_INT_MAX, 1 );
|
164 |
+
|
165 |
+
if ( ! empty( $this->_replace ) ) {
|
166 |
+
return $this;
|
167 |
+
}
|
168 |
+
|
169 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) <> 'default' ) {
|
170 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
171 |
+
//get all blogs
|
172 |
+
global $wpdb;
|
173 |
+
$this->paths = array();
|
174 |
+
|
175 |
+
$blogs = $wpdb->get_results( "SELECT path FROM " . $wpdb->blogs . " where blog_id > 1" );
|
176 |
+
foreach ( $blogs as $blog ) {
|
177 |
+
$this->paths[] = HMW_Classes_Tools::getRelativePath( $blog->path );
|
178 |
+
}
|
179 |
+
}
|
180 |
+
|
181 |
+
//Redirect the AJAX
|
182 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] . '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) &&
|
183 |
+
HMW_Classes_Tools::$default['hmw_admin-ajax_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) ) {
|
184 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_admin_url'] . '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'];
|
185 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' );
|
186 |
+
$this->_replace['rewrite'][] = true;
|
187 |
+
|
188 |
+
$this->_replace['from'][] = HMW_Classes_Tools::getOption( 'hmw_admin_url' ) . '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'];
|
189 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' );
|
190 |
+
$this->_replace['rewrite'][] = false;
|
191 |
+
}
|
192 |
+
|
193 |
+
//Redirect the ADMIN
|
194 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
195 |
+
$safeoptions = HMW_Classes_Tools::getOptions( true );
|
196 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> $safeoptions['hmw_admin_url'] ) {
|
197 |
+
$this->_replace['from'][] = "wp-admin" . '/';
|
198 |
+
$this->_replace['to'][] = $safeoptions['hmw_admin_url'] . '/';
|
199 |
+
$this->_replace['rewrite'][] = true;
|
200 |
+
}
|
201 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_admin_url' ) <> $safeoptions['hmw_admin_url'] ) {
|
202 |
+
$this->_replace['from'][] = "wp-admin" . '/';
|
203 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_admin_url' ) . '/';
|
204 |
+
$this->_replace['rewrite'][] = true;
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
|
209 |
+
//Redirect the LOGIN
|
210 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
211 |
+
$this->_replace['from'][] = "wp-login.php";
|
212 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_login_url' );
|
213 |
+
$this->_replace['rewrite'][] = true;
|
214 |
+
|
215 |
+
$this->_replace['from'][] = "wp-login.php";
|
216 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_login_url' ) . '/';
|
217 |
+
$this->_replace['rewrite'][] = true;
|
218 |
+
}
|
219 |
+
|
220 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) <> '' ) {
|
221 |
+
$this->_replace['from'][] = HMW_Classes_Tools::getOption( 'hmw_login_url' ) . "?action=lostpassword";
|
222 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' );
|
223 |
+
$this->_replace['rewrite'][] = false;
|
224 |
+
|
225 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_login_url'] . "?action=lostpassword";
|
226 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' );
|
227 |
+
$this->_replace['rewrite'][] = true;
|
228 |
+
}
|
229 |
+
|
230 |
+
if ( HMW_Classes_Tools::$default['hmw_activate_url'] <> HMW_Classes_Tools::getOption( 'hmw_activate_url' ) ) {
|
231 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_activate_url' ) <> '' ) {
|
232 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_activate_url'];
|
233 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_activate_url' );
|
234 |
+
$this->_replace['rewrite'][] = true;
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
|
239 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_register_url' ) <> '' ) {
|
240 |
+
$this->_replace['from'][] = HMW_Classes_Tools::getOption( 'hmw_login_url' ) . "?action=register";
|
241 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_register_url' );
|
242 |
+
$this->_replace['rewrite'][] = false;
|
243 |
+
|
244 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_login_url'] . "?action=register";
|
245 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_register_url' );
|
246 |
+
$this->_replace['rewrite'][] = true;
|
247 |
+
}
|
248 |
+
|
249 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_logout_url' ) <> '' ) {
|
250 |
+
$this->_replace['from'][] = HMW_Classes_Tools::getOption( 'hmw_login_url' ) . "?action=logout";
|
251 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_logout_url' );
|
252 |
+
$this->_replace['rewrite'][] = false;
|
253 |
+
|
254 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_login_url'] . "?action=logout";
|
255 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_logout_url' );
|
256 |
+
$this->_replace['rewrite'][] = true;
|
257 |
+
}
|
258 |
+
|
259 |
+
//Modify plugins urls
|
260 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_plugins' ) ) {
|
261 |
+
$all_plugins = HMW_Classes_Tools::getOption( 'hmw_plugins' );
|
262 |
+
|
263 |
+
if ( ! empty( $all_plugins['to'] ) ) {
|
264 |
+
foreach ( $all_plugins['to'] as $index => $plugin_path ) {
|
265 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
266 |
+
foreach ( $this->paths as $path ) {
|
267 |
+
//hmw_Debug::dump($path);
|
268 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_plugin_url'] . '/' . $all_plugins['from'][ $index ];
|
269 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_plugin_url' ) . '/' . $plugin_path . '/';
|
270 |
+
$this->_replace['rewrite'][] = false;
|
271 |
+
}
|
272 |
+
}
|
273 |
+
|
274 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_plugin_url'] . '/' . $all_plugins['from'][ $index ];
|
275 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_plugin_url' ) . '/' . $plugin_path . '/';
|
276 |
+
$this->_replace['rewrite'][] = true;
|
277 |
+
}
|
278 |
+
}
|
279 |
+
}
|
280 |
+
|
281 |
+
//Modify plugins
|
282 |
+
if ( HMW_Classes_Tools::$default['hmw_plugin_url'] <> HMW_Classes_Tools::getOption( 'hmw_plugin_url' ) ) {
|
283 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
284 |
+
foreach ( $this->paths as $path ) {
|
285 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_plugin_url'] . '/';
|
286 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_plugin_url' ) . '/';
|
287 |
+
$this->_replace['rewrite'][] = false;
|
288 |
+
}
|
289 |
+
}
|
290 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_plugin_url'] . '/';
|
291 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_plugin_url' ) . '/';
|
292 |
+
$this->_replace['rewrite'][] = true;
|
293 |
+
|
294 |
+
|
295 |
+
//HMW_Debug::dump($this->_replace['from']);
|
296 |
+
|
297 |
+
}
|
298 |
+
|
299 |
+
//Modify themes urls
|
300 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_themes' ) ) {
|
301 |
+
$all_themes = HMW_Classes_Tools::getOption( 'hmw_themes' );
|
302 |
+
|
303 |
+
if ( ! empty( $all_themes['to'] ) ) {
|
304 |
+
foreach ( $all_themes['to'] as $index => $theme_path ) {
|
305 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
306 |
+
foreach ( $this->paths as $path ) {
|
307 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_themes_url'] . '/' . $all_themes['from'][ $index ];
|
308 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . $theme_path . '/';
|
309 |
+
$this->_replace['rewrite'][] = false;
|
310 |
+
|
311 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_themes_url'] . '/' . $all_themes['from'][ $index ] . HMW_Classes_Tools::$default['hmw_themes_style'];
|
312 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . $theme_path . '/' . HMW_Classes_Tools::getOption( 'hmw_themes_style' );
|
313 |
+
$this->_replace['rewrite'][] = false;
|
314 |
+
}
|
315 |
+
}
|
316 |
+
|
317 |
+
|
318 |
+
if ( HMW_Classes_Tools::$default['hmw_themes_style'] <> HMW_Classes_Tools::getOption( 'hmw_themes_style' ) ) {
|
319 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_themes_url'] . '/' . $all_themes['from'][ $index ] . HMW_Classes_Tools::$default['hmw_themes_style'];
|
320 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . $theme_path . '/' . HMW_Classes_Tools::getOption( 'hmw_themes_style' );
|
321 |
+
$this->_replace['rewrite'][] = true;
|
322 |
+
|
323 |
+
$this->_replace['from'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . $theme_path . '/' . HMW_Classes_Tools::$default['hmw_themes_style'];
|
324 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . $theme_path . '/' . HMW_Classes_Tools::getOption( 'hmw_themes_style' );
|
325 |
+
$this->_replace['rewrite'][] = false;
|
326 |
+
}
|
327 |
+
|
328 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_themes_url'] . '/' . $all_themes['from'][ $index ];
|
329 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . $theme_path . '/';
|
330 |
+
$this->_replace['rewrite'][] = true;
|
331 |
+
}
|
332 |
+
|
333 |
+
}
|
334 |
+
}
|
335 |
+
|
336 |
+
//Modify theme URL
|
337 |
+
if ( HMW_Classes_Tools::$default['hmw_themes_url'] <> HMW_Classes_Tools::getOption( 'hmw_themes_url' ) ) {
|
338 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
339 |
+
foreach ( $this->paths as $path ) {
|
340 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_themes_url'] . '/';
|
341 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/';
|
342 |
+
$this->_replace['rewrite'][] = false;
|
343 |
+
}
|
344 |
+
}
|
345 |
+
|
346 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_themes_url'] . '/';
|
347 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/';
|
348 |
+
$this->_replace['rewrite'][] = true;
|
349 |
+
|
350 |
+
}
|
351 |
+
|
352 |
+
//Modify uploads
|
353 |
+
if ( ! defined( 'UPLOADS' ) ) {
|
354 |
+
if ( HMW_Classes_Tools::$default['hmw_upload_url'] <> HMW_Classes_Tools::getOption( 'hmw_upload_url' ) ) {
|
355 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
356 |
+
foreach ( $this->paths as $path ) {
|
357 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_upload_url'] . '/';
|
358 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_upload_url' ) . '/';
|
359 |
+
$this->_replace['rewrite'][] = false;
|
360 |
+
}
|
361 |
+
}
|
362 |
+
|
363 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' . HMW_Classes_Tools::$default['hmw_upload_url'] . '/';
|
364 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_upload_url' ) . '/';
|
365 |
+
$this->_replace['rewrite'][] = true;
|
366 |
+
|
367 |
+
}
|
368 |
+
}
|
369 |
+
|
370 |
+
//Modify wp-content
|
371 |
+
if ( HMW_Classes_Tools::$default['hmw_wp-content_url'] <> HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) ) {
|
372 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
373 |
+
foreach ( $this->paths as $path ) {
|
374 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/';
|
375 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) . '/';
|
376 |
+
$this->_replace['rewrite'][] = false;
|
377 |
+
}
|
378 |
+
}
|
379 |
+
|
380 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/';
|
381 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) . '/';
|
382 |
+
$this->_replace['rewrite'][] = true;
|
383 |
+
}
|
384 |
+
|
385 |
+
//Modify wp-includes
|
386 |
+
if ( HMW_Classes_Tools::$default['hmw_wp-includes_url'] <> HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ) ) {
|
387 |
+
if ( HMW_Classes_Tools::isMultisites() ) {
|
388 |
+
foreach ( $this->paths as $path ) {
|
389 |
+
$this->_replace['from'][] = $path . HMW_Classes_Tools::$default['hmw_wp-includes_url'] . '/';
|
390 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ) . '/';
|
391 |
+
$this->_replace['rewrite'][] = false;
|
392 |
+
}
|
393 |
+
}
|
394 |
+
|
395 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-includes_url'] . '/';
|
396 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ) . '/';
|
397 |
+
$this->_replace['rewrite'][] = true;
|
398 |
+
|
399 |
+
}
|
400 |
+
|
401 |
+
//Modify wp-comments-post
|
402 |
+
if ( HMW_Classes_Tools::$default['hmw_wp-comments-post'] <> HMW_Classes_Tools::getOption( 'hmw_wp-comments-post' ) ) {
|
403 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_wp-comments-post'];
|
404 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_wp-comments-post' ) . '/';
|
405 |
+
$this->_replace['rewrite'][] = true;
|
406 |
+
}
|
407 |
+
|
408 |
+
//Modify the author link
|
409 |
+
if ( HMW_Classes_Tools::$default['hmw_author_url'] <> HMW_Classes_Tools::getOption( 'hmw_author_url' ) ) {
|
410 |
+
$this->_replace['from'][] = HMW_Classes_Tools::$default['hmw_author_url'] . '/';
|
411 |
+
$this->_replace['to'][] = HMW_Classes_Tools::getOption( 'hmw_author_url' ) . '/';
|
412 |
+
$this->_replace['rewrite'][] = true;
|
413 |
+
}
|
414 |
+
|
415 |
+
}
|
416 |
+
|
417 |
+
return $this;
|
418 |
+
|
419 |
+
}
|
420 |
+
|
421 |
+
/**
|
422 |
+
* Rename all the plugin names with a hash
|
423 |
+
*/
|
424 |
+
public function hidePluginNames() {
|
425 |
+
$dbplugins = array();
|
426 |
+
|
427 |
+
$all_plugins = HMW_Classes_Tools::getAllPlugins();
|
428 |
+
|
429 |
+
foreach ( $all_plugins as $plugin ) {
|
430 |
+
if ( is_plugin_active( $plugin ) ) {
|
431 |
+
$dbplugins['to'][] = substr( md5( $plugin ), 0, 10 );
|
432 |
+
$dbplugins['from'][] = str_replace( ' ', '+', plugin_dir_path( $plugin ) );
|
433 |
+
}
|
434 |
+
}
|
435 |
+
|
436 |
+
HMW_Classes_Tools::saveOptions( 'hmw_plugins', $dbplugins );
|
437 |
+
}
|
438 |
+
|
439 |
+
/**
|
440 |
+
* Rename all the themes name with a hash
|
441 |
+
*/
|
442 |
+
public function hideThemeNames() {
|
443 |
+
$dbthemes = array();
|
444 |
+
|
445 |
+
$all_themes = HMW_Classes_Tools::getAllThemes();
|
446 |
+
|
447 |
+
foreach ( $all_themes as $theme => $value ) {
|
448 |
+
if ( is_dir( $value['theme_root'] ) ) {
|
449 |
+
$dbthemes['to'][] = substr( md5( $theme ), 0, 10 );
|
450 |
+
$dbthemes['from'][] = str_replace( ' ', '+', $theme ) . '/';
|
451 |
+
}
|
452 |
+
}
|
453 |
+
|
454 |
+
HMW_Classes_Tools::saveOptions( 'hmw_themes', $dbthemes );
|
455 |
+
}
|
456 |
+
|
457 |
+
/**
|
458 |
+
* ADMIN_PATH is the new path and set in /config.php
|
459 |
+
* @return $this
|
460 |
+
*/
|
461 |
+
public function setRewriteRules() {
|
462 |
+
$this->_rewrites = array();
|
463 |
+
require_once ABSPATH . 'wp-admin/includes/misc.php';
|
464 |
+
require_once ABSPATH . 'wp-admin/includes/file.php';
|
465 |
+
|
466 |
+
//Build the redirects
|
467 |
+
$this->buildRedirect();
|
468 |
+
|
469 |
+
if ( ! empty( $this->_replace ) ) {
|
470 |
+
//form the IIS rewrite
|
471 |
+
if ( HMW_Classes_Tools::isIIS() ) {
|
472 |
+
foreach ( $this->_replace['to'] as $key => $row ) {
|
473 |
+
if ( $this->_replace['rewrite'][ $key ] ) {
|
474 |
+
$this->_rewrites[] = array(
|
475 |
+
'from' => '([_0-9a-zA-Z-]+/)?' . $this->_replace['to'][ $key ] . ( substr( $this->_replace['to'][ $key ], - 1 ) == '/' ? "(.*)" : "$" ),
|
476 |
+
'to' => $this->_replace['from'][ $key ] . "{R:" . ( substr_count( $this->_replace['to'][ $key ], '(' ) + 2 ) . '}',
|
477 |
+
);
|
478 |
+
}
|
479 |
+
}
|
480 |
+
|
481 |
+
add_filter( 'iis7_url_rewrite_rules', array( $this, 'getIISRules' ) );
|
482 |
+
} else {
|
483 |
+
|
484 |
+
if ( HMW_RULES_IN_CONFIG ) { //if the user uses the rules to rewrite the paths
|
485 |
+
foreach ( $this->_replace['to'] as $key => $row ) {
|
486 |
+
if ( $this->_replace['rewrite'][ $key ] ) {
|
487 |
+
$this->_rewrites[] = array(
|
488 |
+
'from' => '([_0-9a-zA-Z-]+/)?' . $this->_replace['to'][ $key ] . ( substr( $this->_replace['to'][ $key ], - 1 ) == '/' ? "(.*)" : "$" ),
|
489 |
+
'to' => $this->_replace['from'][ $key ] . ( substr( $this->_replace['to'][ $key ], - 1 ) == '/' ? "$" . ( substr_count( $this->_replace['to'][ $key ], '(' ) + 2 ) : "" ),
|
490 |
+
);
|
491 |
+
}
|
492 |
+
}
|
493 |
+
}
|
494 |
+
|
495 |
+
if ( HMW_RULES_IN_WP_RULES ) { //if set to add the HMW rules into WP rules area
|
496 |
+
foreach ( $this->_rewrites as $rewrite ) {
|
497 |
+
add_rewrite_rule( $rewrite['from'], $rewrite['to'], 'top' );
|
498 |
+
}
|
499 |
+
}
|
500 |
+
}
|
501 |
+
}
|
502 |
+
|
503 |
+
|
504 |
+
return $this;
|
505 |
+
}
|
506 |
+
|
507 |
+
/******** IIS **********/
|
508 |
+
/**
|
509 |
+
* @param string $wrules
|
510 |
+
*
|
511 |
+
* @return string
|
512 |
+
*/
|
513 |
+
public function getIISRules( $wrules ) {
|
514 |
+
$rules = '';
|
515 |
+
$path = parse_url( site_url(), PHP_URL_PATH );
|
516 |
+
if ( $path ) {
|
517 |
+
$home_root = trailingslashit( $path );
|
518 |
+
} else {
|
519 |
+
$home_root = '/';
|
520 |
+
}
|
521 |
+
|
522 |
+
$rewrites = array();
|
523 |
+
|
524 |
+
|
525 |
+
if ( ! empty( $this->_replace ) ) {
|
526 |
+
foreach ( $this->_replace['to'] as $key => $row ) {
|
527 |
+
if ( $this->_replace['rewrite'][ $key ] ) {
|
528 |
+
$rewrites[] = array(
|
529 |
+
'from' => '([_0-9a-zA-Z-]+/)?' . $this->_replace['to'][ $key ] . ( substr( $this->_replace['to'][ $key ], - 1 ) == '/' ? "(.*)" : "$" ),
|
530 |
+
'to' => $this->_replace['from'][ $key ] . ( substr( $this->_replace['to'][ $key ], - 1 ) == '/' ? "{R:" . ( substr_count( $this->_replace['to'][ $key ], '(' ) + 2 ) . '}' : "" ),
|
531 |
+
);
|
532 |
+
}
|
533 |
+
}
|
534 |
+
}
|
535 |
+
|
536 |
+
if ( ! empty( $rewrites ) ) {
|
537 |
+
foreach ( $rewrites as $rewrite ) {
|
538 |
+
if ( strpos( $rewrite['to'], 'index.php' ) === false ) {
|
539 |
+
$rules .= '
|
540 |
+
<rule name="HideMyWp: ' . md5( $home_root . $rewrite['from'] ) . '" stopProcessing="true">
|
541 |
+
<match url="^' . $rewrite['from'] . '" ignoreCase="false" />
|
542 |
+
<action type="Rewrite" url="' . $home_root . $rewrite['to'] . '" />
|
543 |
+
</rule>';
|
544 |
+
|
545 |
+
|
546 |
+
}
|
547 |
+
}
|
548 |
+
}
|
549 |
+
|
550 |
+
return $rules . $wrules;
|
551 |
+
}
|
552 |
+
|
553 |
+
/**
|
554 |
+
* @param $config_file
|
555 |
+
*
|
556 |
+
* @return bool
|
557 |
+
*/
|
558 |
+
public function deleteIISRules( $config_file ) {
|
559 |
+
// If configuration file does not exist then rules also do not exist so there is nothing to delete
|
560 |
+
if ( ! file_exists( $config_file ) ) {
|
561 |
+
return true;
|
562 |
+
}
|
563 |
+
|
564 |
+
if ( ! class_exists( 'DOMDocument', false ) ) {
|
565 |
+
return false;
|
566 |
+
}
|
567 |
+
|
568 |
+
if ( ! HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->isConfigWritable() ) {
|
569 |
+
return false;
|
570 |
+
}
|
571 |
+
|
572 |
+
$doc = new DOMDocument();
|
573 |
+
$doc->preserveWhiteSpace = false;
|
574 |
+
|
575 |
+
if ( $doc->load( $config_file ) === false ) {
|
576 |
+
return false;
|
577 |
+
}
|
578 |
+
|
579 |
+
$xpath = new DOMXPath( $doc );
|
580 |
+
$rules = $xpath->query( '/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'HideMyWp\')]' );
|
581 |
+
|
582 |
+
if ( $rules->length > 0 ) {
|
583 |
+
foreach ( $rules as $item ) {
|
584 |
+
$parent = $item->parentNode;
|
585 |
+
if ( method_exists( $parent, 'removeChild' ) ) {
|
586 |
+
$parent->removeChild( $item );
|
587 |
+
}
|
588 |
+
}
|
589 |
+
}
|
590 |
+
|
591 |
+
if ( ! is_multisite() ) {
|
592 |
+
$rules = $xpath->query( '/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')] | /configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'WordPress\')]' );
|
593 |
+
|
594 |
+
if ( $rules->length > 0 ) {
|
595 |
+
foreach ( $rules as $item ) {
|
596 |
+
|
597 |
+
$parent = $item->parentNode;
|
598 |
+
if ( method_exists( $parent, 'removeChild' ) ) {
|
599 |
+
$parent->removeChild( $item );
|
600 |
+
}
|
601 |
+
}
|
602 |
+
}
|
603 |
+
}
|
604 |
+
|
605 |
+
$doc->formatOutput = true;
|
606 |
+
saveDomDocument( $doc, $config_file );
|
607 |
+
|
608 |
+
return true;
|
609 |
+
}
|
610 |
+
/***************************/
|
611 |
+
|
612 |
+
/**
|
613 |
+
* Flush the Rules and write in htaccess or web.config
|
614 |
+
* @return bool
|
615 |
+
*/
|
616 |
+
public function flushRewrites() {
|
617 |
+
$rewritecode = '';
|
618 |
+
$config_file = HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->getConfFile();
|
619 |
+
|
620 |
+
$form = '<br />
|
621 |
+
<form method="POST" style="margin: 8px 0;">
|
622 |
+
' . wp_nonce_field( 'hmw_manualrewrite', 'hmw_nonce', true, false ) . '
|
623 |
+
<input type="hidden" name="action" value="hmw_manualrewrite" />
|
624 |
+
<input type="submit" class="btn rounded-0 btn-success save" value="Okay, I set it up" />
|
625 |
+
</form>
|
626 |
+
';
|
627 |
+
|
628 |
+
|
629 |
+
$path = parse_url( site_url(), PHP_URL_PATH );
|
630 |
+
if ( $path ) {
|
631 |
+
$home_root = trailingslashit( $path );
|
632 |
+
} else {
|
633 |
+
$home_root = '/';
|
634 |
+
}
|
635 |
+
|
636 |
+
//If Windows Server
|
637 |
+
if ( HMW_Classes_Tools::isIIS() ) {
|
638 |
+
$this->deleteIISRules( $config_file );
|
639 |
+
if ( ! iis7_save_url_rewrite_rules() ) {
|
640 |
+
$rewritecode .= $this->getIISRules( '' );
|
641 |
+
if ( $rewritecode <> '' ) {
|
642 |
+
HMW_Classes_Error::setError( sprintf( __( 'IIS detected. You need to update your %s file by adding the following lines after <rules> tag: %s', _HMW_PLUGIN_NAME_ ), '<strong>' . $config_file . '</strong>', '<br /><br /><pre><strong>' . htmlentities( str_replace( ' ', ' ', $rewritecode ) ) . '</strong></pre>' . $form ) );
|
643 |
+
|
644 |
+
return false;
|
645 |
+
}
|
646 |
+
|
647 |
+
}
|
648 |
+
} elseif ( HMW_Classes_Tools::isWpengine() ) {
|
649 |
+
$success = true;
|
650 |
+
if ( ! empty( $this->_rewrites ) ) {
|
651 |
+
$rewritecode .= "<IfModule mod_rewrite.c>\n\n";
|
652 |
+
$rewritecode .= "RewriteEngine On\n";
|
653 |
+
$rewritecode .= "RewriteBase $home_root\n";
|
654 |
+
foreach ( $this->_rewrites as $rewrite ) {
|
655 |
+
if ( strpos( $rewrite['to'], 'index.php' ) === false ) {
|
656 |
+
$rewritecode .= 'RewriteRule ^' . $rewrite['from'] . ' ' . $home_root . $rewrite['to'] . " [QSA,L]" . "\n";
|
657 |
+
}
|
658 |
+
}
|
659 |
+
$rewritecode .= "</IfModule>\n\n";
|
660 |
+
}
|
661 |
+
if ( $rewritecode <> '' ) {
|
662 |
+
if ( ! HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeInHtaccess( $rewritecode, 'HMWP_RULES' ) ) {
|
663 |
+
HMW_Classes_Error::setError( sprintf( __( 'Config file is not writable. You need to update your %s file by adding the following lines at the beginning of the file: %s', _HMW_PLUGIN_NAME_ ), '<strong>' . $config_file . '</strong>', '<br /><br /><pre><strong>' . htmlentities( str_replace( ' ', ' ', $rewritecode ) ) . '</strong></pre>' . $form ) );
|
664 |
+
$success = false;
|
665 |
+
}
|
666 |
+
} else {
|
667 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeInHtaccess( '', 'HMWP_RULES' );
|
668 |
+
}
|
669 |
+
|
670 |
+
$rewritecode = '';
|
671 |
+
if ( ! empty( $this->_rewrites ) ) {
|
672 |
+
foreach ( $this->_rewrites as $rewrite ) {
|
673 |
+
if ( PHP_VERSION_ID >= 70400 || ( strpos( $rewrite['to'], 'index.php' ) === false && ( strpos( $rewrite['to'], HMW_Classes_Tools::$default['hmw_wp-content_url'] ) !== false || strpos( $rewrite['to'], HMW_Classes_Tools::$default['hmw_wp-includes_url'] ) !== false ) ) ) {
|
674 |
+
if ( strpos( $rewrite['to'], HMW_Classes_Tools::$default['hmw_login_url'] ) === false && strpos( $rewrite['to'], HMW_Classes_Tools::$default['hmw_admin_url'] ) === false ) {
|
675 |
+
$rewritecode .= 'Source: <strong>^/' . str_replace( array( '.css', '.js' ), array(
|
676 |
+
'\.css',
|
677 |
+
'\.js'
|
678 |
+
), $rewrite['from'] ) . '</strong> Destination: <strong>' . $home_root . $rewrite['to'] . "</strong> Redirect type: Break;<br />";
|
679 |
+
}
|
680 |
+
}
|
681 |
+
}
|
682 |
+
}
|
683 |
+
|
684 |
+
if ( $rewritecode <> '' ) {
|
685 |
+
HMW_Classes_Error::setError( sprintf( __( 'WpEngine detected. Add the redirects in the WpEngine Redirect rules panel %s', _HMW_PLUGIN_NAME_ ), '<strong><a href="https://wpengine.com/support/redirect/" target="_blank" style="color: red">' . __( "Learn How To Add the Code", _HMW_PLUGIN_NAME_ ) . '</a></strong> <br /><br /><pre>' . $rewritecode . '</pre>' . $form . '<br />' ) );
|
686 |
+
$success = false;
|
687 |
+
}
|
688 |
+
|
689 |
+
return $success;
|
690 |
+
} elseif ( ( HMW_Classes_Tools::isApache() || HMW_Classes_Tools::isLitespeed() ) ) {
|
691 |
+
if ( ! empty( $this->_rewrites ) ) {
|
692 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_file_cache' ) ) {
|
693 |
+
$rewritecode .= '<IfModule mod_headers.c>' . "\n";
|
694 |
+
$rewritecode .= '<FilesMatch ".(js|css|xml|gz|html)$">' . "\n";
|
695 |
+
$rewritecode .= 'Header append Vary: Accept-Encoding' . "\n";
|
696 |
+
$rewritecode .= '</FilesMatch>' . "\n";
|
697 |
+
$rewritecode .= '</IfModule>' . "\n";
|
698 |
+
|
699 |
+
$rewritecode .= '<IfModule mod_expires.c>' . "\n";
|
700 |
+
$rewritecode .= 'ExpiresActive On' . "\n";
|
701 |
+
$rewritecode .= '# CSS, JavaScript' . "\n";
|
702 |
+
$rewritecode .= 'ExpiresByType text/css "access plus 1 month"' . "\n";
|
703 |
+
$rewritecode .= 'ExpiresByType text/javascript "access plus 1 month"' . "\n";
|
704 |
+
$rewritecode .= 'ExpiresByType application/javascript "access plus 1 month"' . "\n\n";
|
705 |
+
$rewritecode .= '# Images' . "\n";
|
706 |
+
$rewritecode .= 'ExpiresByType image/jpeg "access plus 1 year"' . "\n";
|
707 |
+
$rewritecode .= 'ExpiresByType image/gif "access plus 1 year"' . "\n";
|
708 |
+
$rewritecode .= 'ExpiresByType image/png "access plus 1 year"' . "\n";
|
709 |
+
$rewritecode .= 'ExpiresByType image/webp "access plus 1 year"' . "\n";
|
710 |
+
$rewritecode .= 'ExpiresByType image/svg+xml "access plus 1 year"' . "\n";
|
711 |
+
$rewritecode .= 'ExpiresByType image/x-icon "access plus 1 year"' . "\n\n";
|
712 |
+
$rewritecode .= '# Video' . "\n";
|
713 |
+
$rewritecode .= 'ExpiresByType video/mp4 "access plus 1 year"' . "\n";
|
714 |
+
$rewritecode .= 'ExpiresByType video/mpeg "access plus 1 year"' . "\n";
|
715 |
+
$rewritecode .= "</IfModule>\n\n";
|
716 |
+
}
|
717 |
+
|
718 |
+
$rewritecode .= "<IfModule mod_rewrite.c>\n";
|
719 |
+
$rewritecode .= "RewriteEngine On\n";
|
720 |
+
$rewritecode .= "RewriteBase $home_root\n";
|
721 |
+
foreach ( $this->_rewrites as $rewrite ) {
|
722 |
+
if ( strpos( $rewrite['to'], 'index.php' ) === false ) {
|
723 |
+
$rewritecode .= 'RewriteRule ^' . $rewrite['from'] . ' ' . $home_root . $rewrite['to'] . " [QSA,L]" . "\n";
|
724 |
+
}
|
725 |
+
}
|
726 |
+
$rewritecode .= "</IfModule>\n\n";
|
727 |
+
}
|
728 |
+
|
729 |
+
if ( $rewritecode <> '' ) {
|
730 |
+
if ( HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeInHtaccess( $rewritecode, 'HMWP_RULES' ) ) {
|
731 |
+
return true;
|
732 |
+
} else {
|
733 |
+
HMW_Classes_Error::setError( sprintf( __( 'Config file is not writable. You need to update your %s file by adding the following lines at the beginning of the file: %s', _HMW_PLUGIN_NAME_ ), '<strong>' . $config_file . '</strong>', '<br /><br /><pre><strong>' . htmlentities( str_replace( ' ', ' ', $rewritecode ) ) . '</strong></pre>' . $form ) );
|
734 |
+
|
735 |
+
return false;
|
736 |
+
}
|
737 |
+
} else {
|
738 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeInHtaccess( '', 'HMWP_RULES' );
|
739 |
+
}
|
740 |
+
|
741 |
+
} elseif ( HMW_Classes_Tools::isNginx() ) {
|
742 |
+
$cachecode = '';
|
743 |
+
if ( ! empty( $this->_rewrites ) ) {
|
744 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_file_cache' ) ) {
|
745 |
+
$cachecode .= 'location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {' . "\n";
|
746 |
+
$cachecode .= 'expires 365d;' . "\n";
|
747 |
+
$cachecode .= 'add_header Pragma public;' . "\n";
|
748 |
+
$cachecode .= 'add_header Cache-Control "public";' . "\n";
|
749 |
+
$cachecode .= '}' . "\n\n";
|
750 |
+
}
|
751 |
+
|
752 |
+
foreach ( $this->_rewrites as $rewrite ) {
|
753 |
+
if ( strpos( $rewrite['to'], 'index.php' ) === false ) {
|
754 |
+
$rewritecode .= 'rewrite ^/' . $rewrite['from'] . ' ' . $home_root . $rewrite['to'] . " last;<br />";
|
755 |
+
}
|
756 |
+
}
|
757 |
+
if ( $rewritecode <> '' ) {
|
758 |
+
$rewritecode = str_replace( '<br />', "\n", $rewritecode );
|
759 |
+
$rewritecode = $cachecode . 'if (!-e $request_filename) {' . "\n" . $rewritecode . '}';
|
760 |
+
}
|
761 |
+
}
|
762 |
+
|
763 |
+
if ( $rewritecode <> '' ) {
|
764 |
+
if ( ! HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeInNginx( $rewritecode, 'HMWP_RULES' ) ) {
|
765 |
+
HMW_Classes_Error::setError( sprintf( __( 'Config file is not writable. You have to added it manually at the beginning of the %s file: %s', _HMW_PLUGIN_NAME_ ), '<strong>' . $config_file . '</strong>', '<br /><br /><pre><strong># BEGIN HMWP_RULES<br />' . htmlentities( str_replace( ' ', ' ', $rewritecode ) ) . '# END HMW_RULES</strong></pre>' ) );
|
766 |
+
}
|
767 |
+
} else {
|
768 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Rules' )->writeInNginx( '', 'HMWP_RULES' );
|
769 |
+
}
|
770 |
+
|
771 |
+
return false;
|
772 |
+
|
773 |
+
}
|
774 |
+
|
775 |
+
return true;
|
776 |
+
}
|
777 |
+
|
778 |
+
/**
|
779 |
+
* Not used yet
|
780 |
+
*
|
781 |
+
* @param $wp_rewrite
|
782 |
+
*
|
783 |
+
* @return mixed
|
784 |
+
*/
|
785 |
+
public function setRewriteIndexRules( $wp_rewrite ) {
|
786 |
+
return $wp_rewrite;
|
787 |
+
}
|
788 |
+
|
789 |
+
/**
|
790 |
+
* Flush the changes in htaccess
|
791 |
+
*/
|
792 |
+
public function flushChanges() {
|
793 |
+
|
794 |
+
if ( ! did_action( 'wp_loaded' ) ) {
|
795 |
+
add_action( 'wp_loaded', array( $this, 'flushChanges' ) );
|
796 |
+
}
|
797 |
+
|
798 |
+
//Build the redirect table
|
799 |
+
$this->clearRedirect()->buildRedirect()->setRewriteRules()->flushRewrites();
|
800 |
+
|
801 |
+
flush_rewrite_rules( true );
|
802 |
+
}
|
803 |
+
|
804 |
+
/**
|
805 |
+
* Send the email notification
|
806 |
+
*/
|
807 |
+
public function sendEmail() {
|
808 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_send_email' ) ) {
|
809 |
+
$options = HMW_Classes_Tools::getOptions();
|
810 |
+
$lastsafeoptions = HMW_Classes_Tools::getOptions( true );
|
811 |
+
|
812 |
+
if ( $lastsafeoptions['hmw_admin_url'] <> $options['hmw_admin_url'] ||
|
813 |
+
$lastsafeoptions['hmw_login_url'] <> $options['hmw_login_url']
|
814 |
+
) {
|
815 |
+
HMW_Classes_Tools::sendEmail();
|
816 |
+
}
|
817 |
+
}
|
818 |
+
}
|
819 |
+
|
820 |
+
|
821 |
+
/**
|
822 |
+
* Add the custom param vars for: disable hide my wp and admin tabs
|
823 |
+
*
|
824 |
+
* @param $vars
|
825 |
+
*
|
826 |
+
* @return array
|
827 |
+
*/
|
828 |
+
public function addParams( $vars ) {
|
829 |
+
$vars[] = HMW_Classes_Tools::getOption( 'hmw_disable_name' );
|
830 |
+
$vars[] = 'tab';
|
831 |
+
|
832 |
+
return $vars;
|
833 |
+
}
|
834 |
+
|
835 |
+
/******************************* RENAME URLS **************************************************/
|
836 |
+
|
837 |
+
public function home_url( $url ) {
|
838 |
+
$scheme = ( ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == "on" ) || ( defined( 'FORCE_SSL_ADMIN' ) && FORCE_SSL_ADMIN ) || ( function_exists( 'is_ssl' ) && is_ssl() ) ) ? 'https' : 'http' );
|
839 |
+
$url = set_url_scheme( $url, $scheme );
|
840 |
+
|
841 |
+
return $url;
|
842 |
+
}
|
843 |
+
|
844 |
+
/**
|
845 |
+
* Get the new admin URL
|
846 |
+
*
|
847 |
+
* @param string $url
|
848 |
+
* @param string $path
|
849 |
+
* @param integer | null $blog_id
|
850 |
+
*
|
851 |
+
* @return mixed|string
|
852 |
+
*/
|
853 |
+
public function admin_url( $url, $path = '', $blog_id = null ) {
|
854 |
+
$find = $replace = array();
|
855 |
+
|
856 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
857 |
+
return $url;
|
858 |
+
}
|
859 |
+
|
860 |
+
if ( ! defined( 'ADMIN_COOKIE_PATH' ) ) {
|
861 |
+
return $url;
|
862 |
+
}
|
863 |
+
|
864 |
+
|
865 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
866 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
867 |
+
return add_query_arg( array( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) => HMW_Classes_Tools::getOption( 'hmw_disable' ) ), $url );
|
868 |
+
}
|
869 |
+
}
|
870 |
+
|
871 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_loggedusers' ) || ( function_exists( 'is_user_logged_in' ) && ! is_user_logged_in() ) ) {
|
872 |
+
if ( HMW_Classes_Tools::$default['hmw_admin-ajax_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) ) {
|
873 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hideajax_admin' ) ) {
|
874 |
+
$find[] = '/' . HMW_Classes_Tools::$default['hmw_admin_url'] . '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'];
|
875 |
+
} else {
|
876 |
+
$find[] = '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'];
|
877 |
+
}
|
878 |
+
$replace[] = '/' . HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' );
|
879 |
+
}
|
880 |
+
}
|
881 |
+
|
882 |
+
|
883 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
884 |
+
$find[] = '/' . HMW_Classes_Tools::$default['hmw_admin_url'] . '/';
|
885 |
+
$replace[] = '/' . HMW_Classes_Tools::getOption( 'hmw_admin_url' ) . '/';
|
886 |
+
}
|
887 |
+
|
888 |
+
$url = str_replace( $find, $replace, $url );
|
889 |
+
|
890 |
+
return $url;
|
891 |
+
}
|
892 |
+
|
893 |
+
/**
|
894 |
+
* Change the admin URL for multisites
|
895 |
+
*
|
896 |
+
* @param string $url
|
897 |
+
* @param string $path
|
898 |
+
*
|
899 |
+
* @return mixed|string
|
900 |
+
*/
|
901 |
+
public function network_admin_url( $url, $path = '' ) {
|
902 |
+
$find = $replace = array();
|
903 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
904 |
+
return $url;
|
905 |
+
}
|
906 |
+
|
907 |
+
if ( ! defined( 'ADMIN_COOKIE_PATH' ) ) {
|
908 |
+
return $url;
|
909 |
+
}
|
910 |
+
|
911 |
+
|
912 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_admin_url' ) == 'wp-admin' ) {
|
913 |
+
return $url;
|
914 |
+
}
|
915 |
+
|
916 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
917 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
918 |
+
return add_query_arg( array( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) => HMW_Classes_Tools::getOption( 'hmw_disable' ) ), $url );
|
919 |
+
}
|
920 |
+
}
|
921 |
+
|
922 |
+
|
923 |
+
$from = HMW_Classes_Tools::$default['hmw_admin_url'];
|
924 |
+
$to = HMW_Classes_Tools::getOption( 'hmw_admin_url' );
|
925 |
+
|
926 |
+
$find[] = network_site_url( $from . '/', $to );
|
927 |
+
$replace[] = network_site_url( '/' . HMW_Classes_Tools::getOption( 'hmw_admin_url' ) . '/', $to );
|
928 |
+
|
929 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_loggedusers' ) || ( function_exists( 'is_user_logged_in' ) && ! is_user_logged_in() ) ) {
|
930 |
+
if ( HMW_Classes_Tools::$default['hmw_admin-ajax_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) ) {
|
931 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hideajax_admin' ) ) {
|
932 |
+
$find[] = '/' . HMW_Classes_Tools::$default['hmw_admin_url'] . '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'];
|
933 |
+
} else {
|
934 |
+
$find[] = '/' . HMW_Classes_Tools::$default['hmw_admin-ajax_url'];
|
935 |
+
}
|
936 |
+
$replace[] = '/' . HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' );
|
937 |
+
}
|
938 |
+
}
|
939 |
+
|
940 |
+
$url = str_replace( $find, $replace, $url );
|
941 |
+
|
942 |
+
return $url;
|
943 |
+
}
|
944 |
+
|
945 |
+
/**
|
946 |
+
* Get the new Site URL
|
947 |
+
*
|
948 |
+
* @param string $url
|
949 |
+
* @param string $path
|
950 |
+
*
|
951 |
+
* @return string
|
952 |
+
*/
|
953 |
+
public function site_url( $url, $path = '' ) {
|
954 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) || $url == '' ) {
|
955 |
+
return $url;
|
956 |
+
}
|
957 |
+
|
958 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
959 |
+
//echo $url . '<br />';
|
960 |
+
if ( strpos( $url, 'wp-login' ) !== false ) {
|
961 |
+
//check if disable and do not redirect to login
|
962 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
963 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
964 |
+
//add the disabled param in order to work without issues
|
965 |
+
return add_query_arg( array( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) => HMW_Classes_Tools::getOption( 'hmw_disable' ) ), $url );
|
966 |
+
}
|
967 |
+
}
|
968 |
+
|
969 |
+
$query = '';
|
970 |
+
if ( $path <> '' ) {
|
971 |
+
$parsed = @parse_url( $path );
|
972 |
+
if ( isset( $parsed['query'] ) && $parsed['query'] <> '' ) {
|
973 |
+
$query = '?' . $parsed['query'];
|
974 |
+
}
|
975 |
+
}
|
976 |
+
|
977 |
+
if ( $query == '?action=lostpassword' && HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) <> '' ) {
|
978 |
+
$url = site_url( HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) );
|
979 |
+
} elseif ( $query == '?action=register' && HMW_Classes_Tools::getOption( 'hmw_register_url' ) <> '' ) {
|
980 |
+
$url = site_url( HMW_Classes_Tools::getOption( 'hmw_register_url' ) );
|
981 |
+
} else {
|
982 |
+
$url = site_url() . '/' . HMW_Classes_Tools::getOption( 'hmw_login_url' ) . $query;
|
983 |
+
|
984 |
+
if ( HMW_Classes_Tools::getValue( 'noredirect', false ) ) {
|
985 |
+
$url = add_query_arg( array( 'noredirect' => true ), $url );
|
986 |
+
}
|
987 |
+
}
|
988 |
+
}
|
989 |
+
}
|
990 |
+
|
991 |
+
if ( HMW_Classes_Tools::$default['hmw_activate_url'] <> HMW_Classes_Tools::getOption( 'hmw_activate_url' ) ) {
|
992 |
+
if ( strpos( $url, 'wp-activate.php' ) !== false ) {
|
993 |
+
$query = '';
|
994 |
+
if ( $path <> '' ) {
|
995 |
+
$parsed = @parse_url( $path );
|
996 |
+
if ( isset( $parsed['query'] ) && $parsed['query'] <> '' ) {
|
997 |
+
$query = '?' . $parsed['query'];
|
998 |
+
}
|
999 |
+
}
|
1000 |
+
$url = site_url() . '/' . HMW_Classes_Tools::getOption( 'hmw_activate_url' ) . $query;
|
1001 |
+
}
|
1002 |
+
}
|
1003 |
+
|
1004 |
+
|
1005 |
+
return $url;
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
/**
|
1009 |
+
* Login Header Hook
|
1010 |
+
*/
|
1011 |
+
public function login_head() {
|
1012 |
+
add_filter( 'login_headerurl', array( $this, 'login_url' ), 99, 1 );
|
1013 |
+
}
|
1014 |
+
|
1015 |
+
/**
|
1016 |
+
* Get the new Login URL
|
1017 |
+
*
|
1018 |
+
* @param $url
|
1019 |
+
*
|
1020 |
+
* @return string
|
1021 |
+
*/
|
1022 |
+
public function login_url( $url ) {
|
1023 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1024 |
+
return $url;
|
1025 |
+
}
|
1026 |
+
|
1027 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
1028 |
+
//check if disable and do not redirect to login
|
1029 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
1030 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
1031 |
+
//add the disabled param in order to work without issues
|
1032 |
+
return add_query_arg( array( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) => HMW_Classes_Tools::getOption( 'hmw_disable' ) ), $url );
|
1033 |
+
}
|
1034 |
+
}
|
1035 |
+
|
1036 |
+
$url = site_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ) );
|
1037 |
+
|
1038 |
+
}
|
1039 |
+
|
1040 |
+
|
1041 |
+
return $url;
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
/**
|
1045 |
+
* Hook the Login Init from wp-login.php
|
1046 |
+
*/
|
1047 |
+
public function login_init() {
|
1048 |
+
add_filter( 'wp_safe_redirect_fallback', array( $this, 'loopCheck' ), 99, 1 );
|
1049 |
+
add_filter( 'wp_redirect', array( $this, 'loopCheck' ), 99, 1 );
|
1050 |
+
|
1051 |
+
|
1052 |
+
//////////////////////////////// Rewrite the login style
|
1053 |
+
wp_deregister_script( 'password-strength-meter' );
|
1054 |
+
wp_deregister_script( 'user-profile' );
|
1055 |
+
wp_deregister_style( 'forms' );
|
1056 |
+
wp_deregister_style( 'l10n' );
|
1057 |
+
wp_deregister_style( 'login' );
|
1058 |
+
|
1059 |
+
wp_register_style( 'login', _HMW_THEME_URL_ . 'wplogin/css/login.min.css', array(
|
1060 |
+
'dashicons',
|
1061 |
+
'buttons',
|
1062 |
+
'forms',
|
1063 |
+
'l10n'
|
1064 |
+
), HMW_VERSION_ID, false );
|
1065 |
+
wp_register_style( 'forms', _HMW_THEME_URL_ . 'wplogin/css/forms.min.css', null, HMW_VERSION_ID, false );
|
1066 |
+
wp_register_style( 'l10n', _HMW_THEME_URL_ . 'wplogin/css/l10n.min.css', null, HMW_VERSION_ID, false );
|
1067 |
+
wp_register_script( 'password-strength-meter', _HMW_THEME_URL_ . 'wplogin/js/password-strength-meter.min.js', array(
|
1068 |
+
'jquery',
|
1069 |
+
'zxcvbn-async'
|
1070 |
+
), HMW_VERSION_ID, true );
|
1071 |
+
wp_register_script( 'user-profile', _HMW_THEME_URL_ . 'wplogin/js/user-profile.min.js', array(
|
1072 |
+
'jquery',
|
1073 |
+
'password-strength-meter',
|
1074 |
+
'wp-util'
|
1075 |
+
), HMW_VERSION_ID, true );
|
1076 |
+
/////////////////////////////////////////////////////////
|
1077 |
+
|
1078 |
+
|
1079 |
+
//remove clasiera theme loop
|
1080 |
+
remove_action( 'login_init', 'classiera_cubiq_login_init' );
|
1081 |
+
remove_filter( 'login_redirect', 'buddyboss_redirect_previous_page' );
|
1082 |
+
remove_filter( "login_redirect", "loginstyle_login_redirect" );
|
1083 |
+
|
1084 |
+
if ( HMW_Classes_Tools::getValue( 'noredirect', false ) || HMW_Classes_Tools::getOption( 'hmw_remove_third_hooks' ) ) {
|
1085 |
+
remove_all_actions( 'login_init' );
|
1086 |
+
remove_all_actions( 'login_redirect' );
|
1087 |
+
add_filter( 'login_headerurl', array( $this, 'login_url' ) );
|
1088 |
+
add_filter( 'login_redirect', array( $this, 'sanitize_login_redirect' ), 1, 3 );
|
1089 |
+
}
|
1090 |
+
|
1091 |
+
|
1092 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1093 |
+
return;
|
1094 |
+
}
|
1095 |
+
|
1096 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
1097 |
+
add_filter( 'lostpassword_redirect', array( $this, 'lostpassword_redirect' ), 1 );
|
1098 |
+
add_filter( 'registration_redirect', array( $this, 'registration_redirect' ), 1 );
|
1099 |
+
|
1100 |
+
HMW_Classes_ObjController::getClass( 'HMW_Models_Cookies' )->setTestCookie();
|
1101 |
+
}
|
1102 |
+
}
|
1103 |
+
|
1104 |
+
/**
|
1105 |
+
* Change the password confirm URL with the new URL
|
1106 |
+
* @return string
|
1107 |
+
*/
|
1108 |
+
public function lostpassword_redirect() {
|
1109 |
+
return site_url( 'wp-login.php?checkemail=confirm' );
|
1110 |
+
}
|
1111 |
+
|
1112 |
+
/**
|
1113 |
+
* Change the register confirmation URL with the new URL
|
1114 |
+
* @return string
|
1115 |
+
*/
|
1116 |
+
public function registration_redirect() {
|
1117 |
+
return site_url( 'wp-login.php?checkemail=registered' );
|
1118 |
+
}
|
1119 |
+
|
1120 |
+
/**
|
1121 |
+
* Called from WP hook to change the lost password URL
|
1122 |
+
*
|
1123 |
+
* @param $url
|
1124 |
+
*
|
1125 |
+
* @return mixed
|
1126 |
+
*/
|
1127 |
+
public function lostpassword_url( $url ) {
|
1128 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) <> '' ) {
|
1129 |
+
$url = str_ireplace( $this->_replace['from'], $this->_replace['to'], $url );
|
1130 |
+
}
|
1131 |
+
|
1132 |
+
return $url;
|
1133 |
+
}
|
1134 |
+
|
1135 |
+
/**
|
1136 |
+
* Called from WP hook to change the register URL
|
1137 |
+
*
|
1138 |
+
* @param $url
|
1139 |
+
*
|
1140 |
+
* @return mixed
|
1141 |
+
*/
|
1142 |
+
public function register_url( $url ) {
|
1143 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_register_url' ) <> '' ) {
|
1144 |
+
$url = str_ireplace( $this->_replace['from'], $this->_replace['to'], $url );
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
return $url;
|
1148 |
+
}
|
1149 |
+
|
1150 |
+
/**
|
1151 |
+
* Get the new Logout URL
|
1152 |
+
*
|
1153 |
+
* @param string $url
|
1154 |
+
* @param string $redirect
|
1155 |
+
*
|
1156 |
+
* @return string
|
1157 |
+
*/
|
1158 |
+
public function logout_url( $url, $redirect = '' ) {
|
1159 |
+
$args = array();
|
1160 |
+
if ( $url <> '' ) {
|
1161 |
+
$parsed = @parse_url( $url );
|
1162 |
+
if ( $parsed['query'] <> '' ) {
|
1163 |
+
@parse_str( html_entity_decode( $parsed['query'] ), $args );
|
1164 |
+
}
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
if ( isset( $args['_wpnonce'] ) && HMW_Classes_Tools::getOption( 'hmw_logout_url' ) <> '' ) {
|
1168 |
+
$url = site_url() . '/' . add_query_arg( array( '_wpnonce' => $args['_wpnonce'] ), HMW_Classes_Tools::getOption( 'hmw_logout_url' ) );
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
return $url;
|
1172 |
+
}
|
1173 |
+
|
1174 |
+
/**
|
1175 |
+
* Get the new Author URL
|
1176 |
+
*
|
1177 |
+
* @param array $rewrite
|
1178 |
+
*
|
1179 |
+
* @return mixed
|
1180 |
+
*/
|
1181 |
+
public function author_url( $rewrite ) {
|
1182 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1183 |
+
return $rewrite;
|
1184 |
+
}
|
1185 |
+
|
1186 |
+
if ( HMW_Classes_Tools::$default['hmw_author_url'] <> HMW_Classes_Tools::getOption( 'hmw_author_url' ) ) {
|
1187 |
+
foreach ( $rewrite as $from => $to ) {
|
1188 |
+
$newfrom = str_replace( HMW_Classes_Tools::$default['hmw_author_url'], HMW_Classes_Tools::getOption( 'hmw_author_url' ), $from );
|
1189 |
+
$rewrite[ $newfrom ] = $to;
|
1190 |
+
}
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
return $rewrite;
|
1194 |
+
}
|
1195 |
+
|
1196 |
+
/******************************** HOOK REDIRECTS *************************************************/
|
1197 |
+
|
1198 |
+
/**
|
1199 |
+
* Hook the logout to flush the changes set in admin
|
1200 |
+
*/
|
1201 |
+
public function wp_logout() {
|
1202 |
+
$_REQUEST['redirect_to'] = $redirect_to = site_url();
|
1203 |
+
|
1204 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_logout_redirect' ) ) {
|
1205 |
+
$_REQUEST['redirect_to'] = HMW_Classes_Tools::getOption( 'hmw_logout_redirect' );
|
1206 |
+
}
|
1207 |
+
}
|
1208 |
+
|
1209 |
+
/**
|
1210 |
+
* In case of redirects, correct the redirect links
|
1211 |
+
*
|
1212 |
+
* @param string $redirect The path or URL to redirect to.
|
1213 |
+
* @param string $status The HTTP response status code to use
|
1214 |
+
*
|
1215 |
+
* @return string
|
1216 |
+
* @throws Exception
|
1217 |
+
*/
|
1218 |
+
public function sanitize_redirect( $redirect, $status = '' ) {
|
1219 |
+
|
1220 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1221 |
+
return $redirect;
|
1222 |
+
}
|
1223 |
+
|
1224 |
+
$parsed = parse_url( $redirect );
|
1225 |
+
//Check if there is the safe parameter in the url
|
1226 |
+
if ( isset( $parsed['query'] ) && ! empty( $parsed['query'] ) ) {
|
1227 |
+
@parse_str( $parsed['query'] );
|
1228 |
+
if ( isset( $hmw_disable ) ) {
|
1229 |
+
if ( $hmw_disable == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
1230 |
+
$_GET[ HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ] = HMW_Classes_Tools::getOption( 'hmw_disable' );
|
1231 |
+
}
|
1232 |
+
}
|
1233 |
+
}
|
1234 |
+
|
1235 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
1236 |
+
if ( strpos( $redirect, 'wp-admin' ) !== false ) {
|
1237 |
+
$redirect = $this->admin_url( $redirect );
|
1238 |
+
}
|
1239 |
+
|
1240 |
+
}
|
1241 |
+
|
1242 |
+
return $redirect;
|
1243 |
+
|
1244 |
+
}
|
1245 |
+
|
1246 |
+
/**
|
1247 |
+
* In case of login redirects, correct the redirect links
|
1248 |
+
*
|
1249 |
+
* @param string $redirect The path or URL to redirect to.
|
1250 |
+
* @param string $path
|
1251 |
+
* @param string $user
|
1252 |
+
*
|
1253 |
+
* @return string
|
1254 |
+
* @throws Exception
|
1255 |
+
*/
|
1256 |
+
public function sanitize_login_redirect( $redirect, $path = '', $user ) {
|
1257 |
+
|
1258 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1259 |
+
return $redirect;
|
1260 |
+
}
|
1261 |
+
|
1262 |
+
$parsed = parse_url( $redirect );
|
1263 |
+
//Check if there is the safe parameter in the url
|
1264 |
+
if ( isset( $parsed['query'] ) && ! empty( $parsed['query'] ) ) {
|
1265 |
+
@parse_str( $parsed['query'] );
|
1266 |
+
if ( isset( $hmw_disable ) ) {
|
1267 |
+
if ( $hmw_disable == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
1268 |
+
$_GET[ HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ] = HMW_Classes_Tools::getOption( 'hmw_disable' );
|
1269 |
+
}
|
1270 |
+
}
|
1271 |
+
}
|
1272 |
+
|
1273 |
+
//check if disable and do not redirect to login
|
1274 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
1275 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
1276 |
+
HMW_Classes_Tools::$options = array_merge( HMW_Classes_Tools::$options, HMW_Classes_Tools::$default );
|
1277 |
+
HMW_Classes_Tools::saveOptions();
|
1278 |
+
delete_option( HMW_OPTION_SAFE );
|
1279 |
+
HMW_Classes_ObjController::getClass( 'HMW_Controllers_Brute' )->clearBlockedIPs();
|
1280 |
+
HMW_Classes_Tools::saveOptions( 'banlist_ip', json_encode( array() ) );
|
1281 |
+
|
1282 |
+
return site_url( HMW_Classes_Tools::$default['hmw_admin_url'] );
|
1283 |
+
}
|
1284 |
+
}
|
1285 |
+
|
1286 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
1287 |
+
if ( strpos( $redirect, 'wp-login' ) !== false ) {
|
1288 |
+
$redirect = site_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ) );
|
1289 |
+
}
|
1290 |
+
}
|
1291 |
+
|
1292 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
1293 |
+
if ( strpos( $redirect, 'wp-admin' ) !== false ) {
|
1294 |
+
$redirect = $this->admin_url( $redirect );
|
1295 |
+
}
|
1296 |
+
}
|
1297 |
+
|
1298 |
+
if ( HMW_Classes_Tools::getValue( 'noredirect', false ) || HMW_Classes_Tools::getOption( 'hmw_remove_third_hooks' ) ) {
|
1299 |
+
remove_all_actions( 'login_redirect' );
|
1300 |
+
|
1301 |
+
if ( isset( $user ) && isset( $user->ID ) ) {
|
1302 |
+
if ( ! is_wp_error( $user ) && empty( $_REQUEST['reauth'] ) ) {
|
1303 |
+
if ( ( empty( $redirect ) || $redirect == 'wp-admin/' || $redirect == admin_url() ) ) {
|
1304 |
+
// If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
|
1305 |
+
if ( is_multisite() && ! get_active_blog_for_user( $user->ID ) && ! is_super_admin( $user->ID ) ) {
|
1306 |
+
$redirect = user_admin_url();
|
1307 |
+
} elseif ( method_exists( $user, 'has_cap' ) ) {
|
1308 |
+
if ( is_multisite() && ! $user->has_cap( 'read' ) ) {
|
1309 |
+
$redirect = get_dashboard_url( $user->ID );
|
1310 |
+
} elseif ( ! $user->has_cap( 'edit_posts' ) ) {
|
1311 |
+
$redirect = $user->has_cap( 'read' ) ? admin_url( 'profile.php' ) : site_url();
|
1312 |
+
}
|
1313 |
+
}
|
1314 |
+
|
1315 |
+
remove_all_actions( 'wp_redirect' );
|
1316 |
+
|
1317 |
+
wp_validate_redirect( $redirect );
|
1318 |
+
wp_redirect( $redirect );
|
1319 |
+
exit();
|
1320 |
+
}
|
1321 |
+
|
1322 |
+
remove_all_actions( 'wp_redirect' );
|
1323 |
+
|
1324 |
+
wp_validate_redirect( $redirect );
|
1325 |
+
wp_safe_redirect( $redirect );
|
1326 |
+
exit();
|
1327 |
+
}
|
1328 |
+
}
|
1329 |
+
}
|
1330 |
+
|
1331 |
+
return $redirect;
|
1332 |
+
}
|
1333 |
+
|
1334 |
+
/**
|
1335 |
+
* Check if the current URL is the same with the redirect URL
|
1336 |
+
*
|
1337 |
+
* @param $url
|
1338 |
+
*
|
1339 |
+
* @return string
|
1340 |
+
*/
|
1341 |
+
public function loopCheck( $url ) {
|
1342 |
+
if ( isset( $_SERVER['HTTP_HOST'] ) && isset( $_SERVER['REQUEST_URI'] ) && $url <> '' ) {
|
1343 |
+
$current_url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
1344 |
+
$redirect_url = parse_url( $url, PHP_URL_HOST ) . parse_url( $url, PHP_URL_PATH );
|
1345 |
+
if ( $current_url <> '' && $redirect_url <> '' ) {
|
1346 |
+
if ( $current_url == $redirect_url ) {
|
1347 |
+
return add_query_arg( array( 'noredirect' => true ), $url );
|
1348 |
+
}
|
1349 |
+
}
|
1350 |
+
|
1351 |
+
}
|
1352 |
+
|
1353 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_wplogin' ) || HMW_Classes_Tools::getOption( 'hmw_hide_login' ) ) {
|
1354 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
1355 |
+
if ( is_user_logged_in() ) {
|
1356 |
+
$paths = array(
|
1357 |
+
site_url( 'wp-login.php', 'relative' ),
|
1358 |
+
site_url( 'wp-login', 'relative' ),
|
1359 |
+
);
|
1360 |
+
} else {
|
1361 |
+
$paths = array(
|
1362 |
+
home_url( 'wp-login.php', 'relative' ),
|
1363 |
+
home_url( 'wp-login', 'relative' ),
|
1364 |
+
site_url( 'wp-login.php', 'relative' ),
|
1365 |
+
site_url( 'wp-login', 'relative' ),
|
1366 |
+
);
|
1367 |
+
|
1368 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_login' ) ) {
|
1369 |
+
|
1370 |
+
array_push( $paths, home_url( 'login', 'relative' ) );
|
1371 |
+
array_push( $paths, site_url( 'login', 'relative' ) );
|
1372 |
+
|
1373 |
+
}
|
1374 |
+
|
1375 |
+
$paths = array_unique( $paths );
|
1376 |
+
}
|
1377 |
+
|
1378 |
+
if ( $this->searchInString( $url, $paths ) ) {
|
1379 |
+
if ( site_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ), 'relative' ) <> $url) {
|
1380 |
+
return add_query_arg( array( 'noredirect' => true ), site_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) );
|
1381 |
+
}
|
1382 |
+
}
|
1383 |
+
}
|
1384 |
+
}
|
1385 |
+
|
1386 |
+
return $url;
|
1387 |
+
}
|
1388 |
+
|
1389 |
+
/**
|
1390 |
+
* Check Hidden pages and return 404 if needed
|
1391 |
+
*/
|
1392 |
+
public function hideUrls() {
|
1393 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) || HMW_Classes_Tools::getOption( 'logout' ) ) {
|
1394 |
+
return;
|
1395 |
+
}
|
1396 |
+
|
1397 |
+
if ( HMW_Classes_Tools::getIsset( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) ) {
|
1398 |
+
if ( HMW_Classes_Tools::getValue( HMW_Classes_Tools::getOption( 'hmw_disable_name' ) ) == HMW_Classes_Tools::getOption( 'hmw_disable' ) ) {
|
1399 |
+
return;
|
1400 |
+
}
|
1401 |
+
}
|
1402 |
+
|
1403 |
+
if ( isset( $_SERVER['SERVER_NAME'] ) && isset( $_SERVER["REQUEST_URI"] ) ) {
|
1404 |
+
$url = untrailingslashit( strtok( $_SERVER["REQUEST_URI"], '?' ) );
|
1405 |
+
$http_post = ( 'POST' == $_SERVER['REQUEST_METHOD'] );
|
1406 |
+
|
1407 |
+
//if user is logged in and is not set to hide the admin urls
|
1408 |
+
if ( is_user_logged_in() ) {
|
1409 |
+
//redirect if no final slash is added
|
1410 |
+
if ( $_SERVER['REQUEST_URI'] == site_url( HMW_Classes_Tools::getOption( 'hmw_admin_url' ), 'relative' ) ) {
|
1411 |
+
wp_safe_redirect( $url . '/' );
|
1412 |
+
exit();
|
1413 |
+
}
|
1414 |
+
} else if ( HMW_Classes_Tools::getValue( 'action' ) == 'itsec-check-loopback' ) { //IThemes Security check
|
1415 |
+
$exp = HMW_Classes_Tools::getValue( 'exp', false );
|
1416 |
+
$action = 'itsec-check-loopback';
|
1417 |
+
$hash = hash_hmac( 'sha1', "{$action}|{$exp}", wp_salt() );
|
1418 |
+
|
1419 |
+
if ( $hash <> HMW_Classes_Tools::getValue( 'hash', '' ) ) {
|
1420 |
+
wp_safe_redirect( $url . '/' );
|
1421 |
+
exit();
|
1422 |
+
}
|
1423 |
+
} else {
|
1424 |
+
//if is set to hide the urls or not logged in
|
1425 |
+
if ( $url <> '' ) {
|
1426 |
+
/////////////////////////////////////////////////////
|
1427 |
+
//Hide Admin URL when changed
|
1428 |
+
if ( HMW_Classes_Tools::$default['hmw_admin_url'] <> HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ) {
|
1429 |
+
if ( is_user_logged_in() ) { //if user is logged in
|
1430 |
+
$paths = array(
|
1431 |
+
home_url( 'wp-admin', 'relative' ),
|
1432 |
+
site_url( 'wp-admin', 'relative' )
|
1433 |
+
);
|
1434 |
+
} else { //if not logged in
|
1435 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_newadmin' ) ) {
|
1436 |
+
if ( strpos( $url . '/', '/' . HMW_Classes_Tools::getOption( 'hmw_admin_url' ) . '/' ) !== false && HMW_Classes_Tools::getOption( 'hmw_hide_admin' ) ) {
|
1437 |
+
if ( strpos( $url . '/', '/' . HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) . '/' ) === false ) {
|
1438 |
+
$this->getNotFound( $url );
|
1439 |
+
}
|
1440 |
+
}
|
1441 |
+
} else {
|
1442 |
+
if ( $_SERVER['REQUEST_URI'] == site_url( HMW_Classes_Tools::getOption( 'hmw_admin_url' ), 'relative' ) ) {
|
1443 |
+
wp_safe_redirect( $url . '/' );
|
1444 |
+
exit();
|
1445 |
+
}
|
1446 |
+
}
|
1447 |
+
|
1448 |
+
$paths = array(
|
1449 |
+
home_url( 'wp-admin', 'relative' ),
|
1450 |
+
home_url( 'dashboard', 'relative' ),
|
1451 |
+
home_url( 'admin', 'relative' ),
|
1452 |
+
site_url( 'wp-admin', 'relative' ),
|
1453 |
+
site_url( 'dashboard', 'relative' ),
|
1454 |
+
site_url( 'admin', 'relative' ),
|
1455 |
+
);
|
1456 |
+
$paths = array_unique( $paths );
|
1457 |
+
}
|
1458 |
+
|
1459 |
+
if ( $this->searchInString( $url, $paths ) ) {
|
1460 |
+
if ( site_url( HMW_Classes_Tools::getOption( 'hmw_admin_url' ), 'relative' ) <> $url && HMW_Classes_Tools::getOption( 'hmw_hide_admin' ) ) {
|
1461 |
+
$this->getNotFound( $url );
|
1462 |
+
}
|
1463 |
+
}
|
1464 |
+
} elseif ( ! is_user_logged_in() ) {
|
1465 |
+
if ( strpos( $url, '/wp-admin' ) !== false && strpos( $url, admin_url( 'admin-ajax.php', 'relative' ) ) === false && HMW_Classes_Tools::getOption( 'hmw_hide_admin' ) ) {
|
1466 |
+
$this->getNotFound( $url );
|
1467 |
+
}
|
1468 |
+
}
|
1469 |
+
|
1470 |
+
if ( $http_post ) {
|
1471 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) <> '' ) {
|
1472 |
+
if ( strpos( $url, '/' . HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) ) !== false ) {
|
1473 |
+
$_REQUEST['action'] = 'lostpassword';
|
1474 |
+
}
|
1475 |
+
}
|
1476 |
+
|
1477 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_register_url' ) <> '' ) {
|
1478 |
+
if ( strpos( $url, '/' . HMW_Classes_Tools::getOption( 'hmw_register_url' ) ) !== false ) {
|
1479 |
+
$_REQUEST['action'] = 'register';
|
1480 |
+
}
|
1481 |
+
}
|
1482 |
+
}
|
1483 |
+
|
1484 |
+
/////////////////////////////////////////////////////
|
1485 |
+
//Hide Login URL when changed
|
1486 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_wplogin' ) || HMW_Classes_Tools::getOption( 'hmw_hide_login' ) ) {
|
1487 |
+
if ( HMW_Classes_Tools::$default['hmw_login_url'] <> HMW_Classes_Tools::getOption( 'hmw_login_url' ) ) {
|
1488 |
+
if ( is_user_logged_in() ) {
|
1489 |
+
$paths = array(
|
1490 |
+
site_url( 'wp-login.php', 'relative' ),
|
1491 |
+
site_url( 'wp-login', 'relative' ),
|
1492 |
+
);
|
1493 |
+
} else {
|
1494 |
+
$paths = array(
|
1495 |
+
home_url( 'wp-login.php', 'relative' ),
|
1496 |
+
home_url( 'wp-login', 'relative' ),
|
1497 |
+
site_url( 'wp-login.php', 'relative' ),
|
1498 |
+
site_url( 'wp-login', 'relative' ),
|
1499 |
+
);
|
1500 |
+
|
1501 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_login' ) ) {
|
1502 |
+
|
1503 |
+
array_push( $paths, home_url( 'login', 'relative' ) );
|
1504 |
+
array_push( $paths, site_url( 'login', 'relative' ) );
|
1505 |
+
|
1506 |
+
}
|
1507 |
+
|
1508 |
+
$paths = array_unique( $paths );
|
1509 |
+
|
1510 |
+
}
|
1511 |
+
|
1512 |
+
if ( $this->searchInString( $url, $paths ) ) {
|
1513 |
+
|
1514 |
+
if ( site_url( HMW_Classes_Tools::getOption( 'hmw_login_url' ), 'relative' ) <> $url) {
|
1515 |
+
$this->getNotFound( $url );
|
1516 |
+
}
|
1517 |
+
}
|
1518 |
+
}
|
1519 |
+
}
|
1520 |
+
|
1521 |
+
/////////////////////////////////////////////////////
|
1522 |
+
//Hide the author url when changed
|
1523 |
+
if ( HMW_Classes_Tools::$default['hmw_author_url'] <> HMW_Classes_Tools::getOption( 'hmw_author_url' ) ) {
|
1524 |
+
$paths = array(
|
1525 |
+
home_url( 'author', 'relative' ),
|
1526 |
+
site_url( 'author', 'relative' ),
|
1527 |
+
);
|
1528 |
+
if ( $this->searchInString( $url, $paths ) ) {
|
1529 |
+
$this->getNotFound( $url );
|
1530 |
+
}
|
1531 |
+
}
|
1532 |
+
|
1533 |
+
/////////////////////////////////////////////////////
|
1534 |
+
//Hide the common php file in case of other servers
|
1535 |
+
$paths = array(
|
1536 |
+
home_url( 'install.php', 'relative' ),
|
1537 |
+
home_url( 'upgrade.php', 'relative' ),
|
1538 |
+
home_url( 'wp-signup.php', 'relative' ),
|
1539 |
+
home_url( 'wp-config.php', 'relative' ),
|
1540 |
+
home_url( 'bb-config.php', 'relative' ),
|
1541 |
+
site_url( 'install.php', 'relative' ),
|
1542 |
+
site_url( 'upgrade.php', 'relative' ),
|
1543 |
+
site_url( 'wp-signup.php', 'relative' ),
|
1544 |
+
site_url( 'wp-config.php', 'relative' ),
|
1545 |
+
site_url( 'bb-config.php', 'relative' ),
|
1546 |
+
);
|
1547 |
+
if ( $this->searchInString( $url, $paths ) ) {
|
1548 |
+
$this->getNotFound( $url );
|
1549 |
+
}
|
1550 |
+
/////////////////////////////////////////////////////
|
1551 |
+
|
1552 |
+
}
|
1553 |
+
}
|
1554 |
+
}
|
1555 |
+
|
1556 |
+
}
|
1557 |
+
|
1558 |
+
/**
|
1559 |
+
* Search part of string in array
|
1560 |
+
*
|
1561 |
+
* @param $needle
|
1562 |
+
* @param $haystack
|
1563 |
+
*
|
1564 |
+
* @return bool
|
1565 |
+
*/
|
1566 |
+
public function searchInString( $needle, $haystack ) {
|
1567 |
+
foreach ( $haystack as $value ) {
|
1568 |
+
if ( stripos( $needle . '/', $value . '/' ) !== false ) {
|
1569 |
+
return true;
|
1570 |
+
}
|
1571 |
+
}
|
1572 |
+
|
1573 |
+
return false;
|
1574 |
+
}
|
1575 |
+
|
1576 |
+
/**
|
1577 |
+
* Return 404 page or redirect
|
1578 |
+
*
|
1579 |
+
* @param string $url
|
1580 |
+
*/
|
1581 |
+
public function getNotFound( $url ) {
|
1582 |
+
HMW_Debug::dump( $url );
|
1583 |
+
|
1584 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_url_redirect' ) == '404' ) {
|
1585 |
+
global $wp_query;
|
1586 |
+
$wp_query->is_404 = true;
|
1587 |
+
|
1588 |
+
wp_validate_redirect( site_url( '404' ) );
|
1589 |
+
wp_safe_redirect( site_url( '404' ) );
|
1590 |
+
} elseif ( HMW_Classes_Tools::getOption( 'hmw_url_redirect' ) == '.' ) {
|
1591 |
+
//redirect to front page
|
1592 |
+
wp_redirect( site_url() );
|
1593 |
+
} else {
|
1594 |
+
//redirect to custom page
|
1595 |
+
wp_validate_redirect( HMW_Classes_Tools::getOption( 'hmw_url_redirect' ) );
|
1596 |
+
wp_redirect( site_url( HMW_Classes_Tools::getOption( 'hmw_url_redirect' ) ) );
|
1597 |
+
}
|
1598 |
+
|
1599 |
+
die();
|
1600 |
+
}
|
1601 |
+
|
1602 |
+
/************************************* FIND AND REPLACE *****************************************/
|
1603 |
+
/**
|
1604 |
+
* Prepare the replace function
|
1605 |
+
*
|
1606 |
+
* @param string $content
|
1607 |
+
*/
|
1608 |
+
public function prepareFindReplace( $content = '' ) {
|
1609 |
+
$findencoded = $findencodedfinal = $replaceencoded = $replaceencodedfinal = $findcdns = $replacecdns = array();
|
1610 |
+
|
1611 |
+
if ( $cdns = HMW_Classes_ObjController::getClass( 'HMW_Models_Compatibility' )->findCDNServers() ) {
|
1612 |
+
foreach ( $cdns as $cdn ) {
|
1613 |
+
$cdn = parse_url( $cdn, PHP_URL_HOST ) . parse_url( site_url(), PHP_URL_PATH ) . '/';
|
1614 |
+
|
1615 |
+
$findcdn = preg_replace( '/^/', $cdn, (array) $this->_replace['from'] );
|
1616 |
+
$replacecdn = preg_replace( '/^/', $cdn, (array) $this->_replace['to'] );
|
1617 |
+
|
1618 |
+
//merge the urls
|
1619 |
+
$findcdns = array_merge( $findcdns, $findcdn );
|
1620 |
+
$replacecdns = array_merge( $replacecdns, $replacecdn );
|
1621 |
+
|
1622 |
+
//HMW_Debug::dump($cdn, $findcdns, $replacecdns);
|
1623 |
+
}
|
1624 |
+
}
|
1625 |
+
|
1626 |
+
if ( isset( $this->_replace['from'] ) && isset( $this->_replace['to'] ) && ! empty( $this->_replace['from'] ) && ! empty( $this->_replace['to'] ) ) {
|
1627 |
+
//make sure the paths are without schema
|
1628 |
+
$find = array_map( array( $this, 'addDomainUrl' ), (array) $this->_replace['from'] );
|
1629 |
+
$replace = array_map( array( $this, 'addDomainUrl' ), (array) $this->_replace['to'] );
|
1630 |
+
|
1631 |
+
//change the javascript urls
|
1632 |
+
$findencoded = array_map( array( $this, 'changeEncodedURL' ), (array) $this->_replace['from'] );
|
1633 |
+
$replaceencoded = array_map( array( $this, 'changeEncodedURL' ), (array) $this->_replace['to'] );
|
1634 |
+
//change the javascript urls
|
1635 |
+
$findencodedfinal = array_map( array(
|
1636 |
+
$this,
|
1637 |
+
'changeEncodedURLFinal'
|
1638 |
+
), (array) $this->_replace['from'] );
|
1639 |
+
$replaceencodedfinal = array_map( array( $this, 'changeEncodedURLFinal' ), (array) $this->_replace['to'] );
|
1640 |
+
}
|
1641 |
+
|
1642 |
+
//merge the urls
|
1643 |
+
$this->_replace['from'] = array_merge( $findcdns, $find, $findencoded, $findencodedfinal );
|
1644 |
+
$this->_replace['to'] = array_merge( $replacecdns, $replace, $replaceencoded, $replaceencodedfinal );
|
1645 |
+
|
1646 |
+
|
1647 |
+
}
|
1648 |
+
|
1649 |
+
/**
|
1650 |
+
* Remove the Schema from url
|
1651 |
+
*
|
1652 |
+
* @param $url
|
1653 |
+
*
|
1654 |
+
* @return string
|
1655 |
+
*/
|
1656 |
+
public function addDomainUrl( $url ) {
|
1657 |
+
if ( strpos( $url, $this->_blogurl ) === false ) {
|
1658 |
+
return $this->_blogurl . '/' . $url;
|
1659 |
+
}
|
1660 |
+
}
|
1661 |
+
|
1662 |
+
/**
|
1663 |
+
* Remove the Schema from url
|
1664 |
+
* Return slashed urls for javascript urls
|
1665 |
+
*
|
1666 |
+
* @param $url
|
1667 |
+
*
|
1668 |
+
* @return string
|
1669 |
+
*/
|
1670 |
+
public function changeEncodedURL( $url ) {
|
1671 |
+
if ( strpos( $url, $this->_blogurl ) === false ) {
|
1672 |
+
return str_replace( '/', '\/', $this->_blogurl . '/' . $url );
|
1673 |
+
}
|
1674 |
+
}
|
1675 |
+
|
1676 |
+
/**
|
1677 |
+
* @param $url
|
1678 |
+
*
|
1679 |
+
* @return mixed
|
1680 |
+
*/
|
1681 |
+
public function changeEncodedURLFinal( $url ) {
|
1682 |
+
if ( strpos( $url, $this->_blogurl ) === false ) {
|
1683 |
+
return str_replace( '/', '\/', rtrim( $this->_blogurl . '/' . $url, '/' ) );
|
1684 |
+
}
|
1685 |
+
}
|
1686 |
+
|
1687 |
+
/**
|
1688 |
+
* Change content
|
1689 |
+
*
|
1690 |
+
* @param string $content
|
1691 |
+
*
|
1692 |
+
* @return mixed
|
1693 |
+
*/
|
1694 |
+
public function find_replace( $content ) {
|
1695 |
+
if ( HMW_Classes_Tools::getOption( 'error' ) ) {
|
1696 |
+
return $content;
|
1697 |
+
}
|
1698 |
+
|
1699 |
+
if ( is_string( $content ) ) {
|
1700 |
+
|
1701 |
+
//if the changes were made already, return
|
1702 |
+
if ( strpos( $content, HMW_Classes_Tools::$default['hmw_wp-content_url'] ) === false && $this->_replaced ) {
|
1703 |
+
return $content;
|
1704 |
+
}
|
1705 |
+
|
1706 |
+
//remove source commets
|
1707 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_comments' ) ) {
|
1708 |
+
$content = preg_replace_callback( '/<!--([\\s\\S]*?)-->/', array( $this, '_commentRemove' ), $content );
|
1709 |
+
}
|
1710 |
+
|
1711 |
+
//remove versions
|
1712 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_version' ) ) {
|
1713 |
+
$content = preg_replace( array(
|
1714 |
+
'/[\?|&]ver=[0-9a-zA-Z._-]+/',
|
1715 |
+
'/<meta[^>]*name=[\'"]generator[\'"][^>]*>/i',
|
1716 |
+
'/<link[^>]*rel=[\'"]dns-prefetch[\'"][^>]*>/i'
|
1717 |
+
), '', $content );
|
1718 |
+
if ( defined( 'JETPACK__VERSION' ) ) {
|
1719 |
+
$content = preg_replace( '/<script[^>]*src=[\'"]https:\/\/s0.wp.com\/wp-content\/js\/devicepx-jetpack.js[\'"][^>]*><\/script>/i', '<script type="text/javascript" src="' . _HMW_THEME_URL_ . 'js/jptraffic.js' . '"></script>', $content );
|
1720 |
+
}
|
1721 |
+
}
|
1722 |
+
|
1723 |
+
//if it wasn't replaced before
|
1724 |
+
if ( ! $this->_replaced ) {
|
1725 |
+
if ( ! isset( $this->_replace['from'] ) && ! isset( $this->_replace['to'] ) ) {
|
1726 |
+
$this->buildRedirect();
|
1727 |
+
}
|
1728 |
+
|
1729 |
+
//fix the relative links if not in safe mode
|
1730 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_fix_relative' ) ) {
|
1731 |
+
$content = $this->fixRelativeLinks( $content );
|
1732 |
+
}
|
1733 |
+
|
1734 |
+
//make sure to include the blog url
|
1735 |
+
$this->prepareFindReplace( $content );
|
1736 |
+
}
|
1737 |
+
|
1738 |
+
if ( isset( $this->_replace['from'] ) && isset( $this->_replace['to'] ) && ! empty( $this->_replace['from'] ) && ! empty( $this->_replace['to'] ) ) {
|
1739 |
+
$content = str_ireplace( $this->_replace['from'], $this->_replace['to'], $content );
|
1740 |
+
}
|
1741 |
+
|
1742 |
+
//Replace custom classes
|
1743 |
+
$content = $this->replaceTextMapping( $content );
|
1744 |
+
|
1745 |
+
}
|
1746 |
+
|
1747 |
+
//Remove Powered-By header and link
|
1748 |
+
if ( function_exists( 'header_remove' ) ) {
|
1749 |
+
@header_remove( "X-Powered-By" );
|
1750 |
+
@header_remove( "x-cf-powered-by" );
|
1751 |
+
@header_remove( "Server" );
|
1752 |
+
}
|
1753 |
+
|
1754 |
+
$this->_replaced = true;
|
1755 |
+
|
1756 |
+
return $content;
|
1757 |
+
}
|
1758 |
+
|
1759 |
+
/**
|
1760 |
+
* Rename the paths in URL with the new ones
|
1761 |
+
*
|
1762 |
+
* @param $url
|
1763 |
+
*
|
1764 |
+
* @return string
|
1765 |
+
*/
|
1766 |
+
public function find_replace_url( $url ) {
|
1767 |
+
if ( strpos( $url, '/' . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' ) !== false || strpos( $url, '/' . HMW_Classes_Tools::$default['hmw_wp-includes_url'] . '/' ) !== false ) {
|
1768 |
+
//change and replace paths
|
1769 |
+
if ( ! isset( $this->_replace['from'] ) && ! isset( $this->_replace['to'] ) ) {
|
1770 |
+
$this->buildRedirect();
|
1771 |
+
}
|
1772 |
+
|
1773 |
+
if ( isset( $this->_replace['from'] ) && isset( $this->_replace['to'] ) && ! empty( $this->_replace['from'] ) && ! empty( $this->_replace['to'] ) ) {
|
1774 |
+
$rewrite = $this->_replace['rewrite'];
|
1775 |
+
$rewrite_from = $this->_replace['from'];
|
1776 |
+
$rewrite_to = $this->_replace['to'];
|
1777 |
+
foreach ( $rewrite as $index => $value ) {
|
1778 |
+
//add only the paths or the design path
|
1779 |
+
if ( ( $index && isset( $rewrite_to[ $index ] ) && substr( $rewrite_to[ $index ], - 1 ) == '/' ) ||
|
1780 |
+
strpos( $rewrite_to[ $index ], '/' . HMW_Classes_Tools::getOption( 'hmw_themes_style' ) ) ) {
|
1781 |
+
$this->_replace['from'][] = $rewrite_from[ $index ];
|
1782 |
+
$this->_replace['to'][] = $rewrite_to[ $index ];
|
1783 |
+
}
|
1784 |
+
}
|
1785 |
+
|
1786 |
+
unset( $rewrite );
|
1787 |
+
unset( $rewrite_from );
|
1788 |
+
unset( $rewrite_to );
|
1789 |
+
|
1790 |
+
//Don't replace include if content was already replaced
|
1791 |
+
$url = str_ireplace( $this->_replace['from'], $this->_replace['to'], $url );
|
1792 |
+
}
|
1793 |
+
}
|
1794 |
+
|
1795 |
+
return $url;
|
1796 |
+
}
|
1797 |
+
|
1798 |
+
/**
|
1799 |
+
* Find the text from Text Mapping in the source code
|
1800 |
+
*
|
1801 |
+
* @param $content
|
1802 |
+
*
|
1803 |
+
* @return mixed|string|string[]|null
|
1804 |
+
*/
|
1805 |
+
public function replaceTextMapping( $content ) {
|
1806 |
+
$findtextmapping = array();
|
1807 |
+
|
1808 |
+
//Replace custom classes
|
1809 |
+
$hmw_text_mapping = json_decode( HMW_Classes_Tools::getOption( 'hmw_text_mapping' ), true );
|
1810 |
+
if ( isset( $hmw_text_mapping['from'] ) && ! empty( $hmw_text_mapping['from'] ) &&
|
1811 |
+
isset( $hmw_text_mapping['to'] ) && ! empty( $hmw_text_mapping['to'] ) ) {
|
1812 |
+
$this->_findtextmapping = $hmw_text_mapping['from'];
|
1813 |
+
$this->_replacetextmapping = $hmw_text_mapping['to'];
|
1814 |
+
|
1815 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_mapping_classes' ) ) {
|
1816 |
+
foreach ( $this->_findtextmapping as $index => $from ) {
|
1817 |
+
$findtextmapping[] = '/\s(class|id|aria-labelledby|aria-controls)=[\'"][^\'"]*(' . addslashes( $from ) . ')[^\'"]*[\'"]/';
|
1818 |
+
$findtextmapping[] = "'<(style|script)((?!src|>).)*>.*?</(style|script)>'is";
|
1819 |
+
$findtextmapping[] = "'<(a|div)[^>]*data-" . addslashes( $from ) . "[^>]*[^/]>'is";
|
1820 |
+
}
|
1821 |
+
|
1822 |
+
if ( ! empty( $findtextmapping ) ) {
|
1823 |
+
$content = preg_replace_callback( $findtextmapping, array(
|
1824 |
+
$this,
|
1825 |
+
'replaceText'
|
1826 |
+
), $content );
|
1827 |
+
}
|
1828 |
+
|
1829 |
+
|
1830 |
+
} else {
|
1831 |
+
$content = str_ireplace( $this->_findtextmapping, $this->_replacetextmapping, $content );
|
1832 |
+
}
|
1833 |
+
|
1834 |
+
unset( $hmw_text_mapping );
|
1835 |
+
}
|
1836 |
+
|
1837 |
+
return $content;
|
1838 |
+
}
|
1839 |
+
|
1840 |
+
/**
|
1841 |
+
* Callback for Text Mapping
|
1842 |
+
*
|
1843 |
+
* @param $found
|
1844 |
+
*
|
1845 |
+
* @return mixed
|
1846 |
+
*/
|
1847 |
+
public function replaceText( $found ) {
|
1848 |
+
$content = $found[0];
|
1849 |
+
if ( $content <> '' ) {
|
1850 |
+
$content = str_ireplace( $this->_findtextmapping, $this->_replacetextmapping, $content );
|
1851 |
+
}
|
1852 |
+
|
1853 |
+
return $content;
|
1854 |
+
}
|
1855 |
+
|
1856 |
+
/**
|
1857 |
+
* Replace the author URL is changed
|
1858 |
+
*
|
1859 |
+
* @param $url
|
1860 |
+
*
|
1861 |
+
* @return mixed
|
1862 |
+
*/
|
1863 |
+
public function replace_author_url( $url ) {
|
1864 |
+
//Modify rest-api wp-json
|
1865 |
+
if ( HMW_Classes_Tools::$default['hmw_author_url'] <> HMW_Classes_Tools::getOption( 'hmw_author_url' ) ) {
|
1866 |
+
return str_replace( HMW_Classes_Tools::$default['hmw_author_url'], HMW_Classes_Tools::getOption( 'hmw_author_url' ), $url );
|
1867 |
+
}
|
1868 |
+
|
1869 |
+
return $url;
|
1870 |
+
}
|
1871 |
+
|
1872 |
+
/**
|
1873 |
+
* Fix for Wp-Rocket plugin. Remove deferred option from Jquery
|
1874 |
+
*
|
1875 |
+
* @param $content
|
1876 |
+
*
|
1877 |
+
* @return null|string|string[]
|
1878 |
+
*/
|
1879 |
+
public function remove_jquery_deferred( $content ) {
|
1880 |
+
$content = preg_replace( '/<script[^>]*src=[\'"]([^\'"]*jquery.js)[\'"][^>]*defer[^>]*><\/script>/i', '<script type="text/javascript" src="$1"></script>', $content );
|
1881 |
+
|
1882 |
+
return $content;
|
1883 |
+
}
|
1884 |
+
|
1885 |
+
/**
|
1886 |
+
* Change the image path to absolute when in feed
|
1887 |
+
*
|
1888 |
+
* @param string $content
|
1889 |
+
*
|
1890 |
+
* @return string
|
1891 |
+
*/
|
1892 |
+
public function fixRelativeLinks( $content ) {
|
1893 |
+
$content = preg_replace_callback(
|
1894 |
+
'~(\s(href|src)\s*[=|:]\s*[\"\'])([^\"\']+)([\"\'])~i',
|
1895 |
+
array( $this, 'replaceLinks' ),
|
1896 |
+
$content );
|
1897 |
+
$content = preg_replace_callback(
|
1898 |
+
'~(\W(url\s*)[\(\"\']+)([^\)\"\']+)([\)\"\']+)~i',
|
1899 |
+
array( $this, 'replaceLinks' ),
|
1900 |
+
$content );
|
1901 |
+
$content = preg_replace_callback(
|
1902 |
+
'~(([\"\']url[\"\']\s*\:)\s*[\"\'])([^\"\']+)([\"\'])~i',
|
1903 |
+
array( $this, 'replaceLinks' ),
|
1904 |
+
$content );
|
1905 |
+
|
1906 |
+
return $content;
|
1907 |
+
}
|
1908 |
+
|
1909 |
+
/**
|
1910 |
+
* If relative links then transform them to absolute
|
1911 |
+
*
|
1912 |
+
* @param $found
|
1913 |
+
*
|
1914 |
+
* @return string
|
1915 |
+
*/
|
1916 |
+
public function replaceLinks( $found ) {
|
1917 |
+
$url = $found[3];
|
1918 |
+
|
1919 |
+
if ( strpos( $url, '//' ) === false && strpos( $url, '\/\/' ) === false ) {
|
1920 |
+
if ( strpos( $url, '/' . HMW_Classes_Tools::$default['hmw_wp-content_url'] . '/' ) !== false
|
1921 |
+
|| strpos( $url, '/' . HMW_Classes_Tools::$default['hmw_wp-includes_url'] . '/' ) !== false
|
1922 |
+
|| strpos( $url, '/' . HMW_Classes_Tools::$default['hmw_admin_url'] ) !== false
|
1923 |
+
|| strpos( $url, '/' . HMW_Classes_Tools::$default['hmw_login_url'] ) !== false
|
1924 |
+
) {
|
1925 |
+
HMW_Debug::dump( $url );
|
1926 |
+
|
1927 |
+
return $found[1] . $this->_rel2abs( $url ) . $found[4];
|
1928 |
+
}
|
1929 |
+
}
|
1930 |
+
|
1931 |
+
|
1932 |
+
return $found[0];
|
1933 |
+
}
|
1934 |
+
|
1935 |
+
/**
|
1936 |
+
* Change Relative links to Absolute links
|
1937 |
+
*
|
1938 |
+
* @param $rel
|
1939 |
+
*
|
1940 |
+
* @return string
|
1941 |
+
*/
|
1942 |
+
protected function _rel2abs( $rel ) {
|
1943 |
+
$scheme = $host = $path = '';
|
1944 |
+
$backslash = false;
|
1945 |
+
|
1946 |
+
// parse base URL and convert to local variables: $scheme, $host, $path
|
1947 |
+
extract( parse_url( site_url() ) );
|
1948 |
+
|
1949 |
+
if ( strpos( $rel, "//" ) === 0 ) {
|
1950 |
+
return $scheme . ':' . $rel;
|
1951 |
+
}
|
1952 |
+
|
1953 |
+
if ( strpos( $rel, '\/' ) !== false ) {
|
1954 |
+
//if backslashes then change the URLs to normal
|
1955 |
+
$backslash = true;
|
1956 |
+
$rel = str_replace( '\/', '/', $rel );
|
1957 |
+
}
|
1958 |
+
|
1959 |
+
// return if already absolute URL
|
1960 |
+
if ( parse_url( $rel, PHP_URL_SCHEME ) != '' ) {
|
1961 |
+
return $rel;
|
1962 |
+
}
|
1963 |
+
|
1964 |
+
// queries and anchors
|
1965 |
+
if ( $rel[0] == '#' || $rel[0] == '?' ) {
|
1966 |
+
return site_url() . $rel;
|
1967 |
+
}
|
1968 |
+
|
1969 |
+
// dirty absolute URL
|
1970 |
+
if ( $path <> '' && ( strpos( $rel, $path . '/' ) === false || strpos( $rel, $path . '/' ) > 0 ) ) {
|
1971 |
+
$abs = $host . $path . "/" . $rel;
|
1972 |
+
} else {
|
1973 |
+
$abs = $host . "/" . $rel;
|
1974 |
+
}
|
1975 |
+
|
1976 |
+
// replace '//' or '/./' or '/foo/../' with '/'
|
1977 |
+
$abs = preg_replace( "/(\/\.?\/)/", "/", $abs );
|
1978 |
+
$abs = preg_replace( "/\/(?!\.\.)[^\/]+\/\.\.\//", "/", $abs );
|
1979 |
+
|
1980 |
+
// absolute URL is ready!
|
1981 |
+
if ( $backslash ) {
|
1982 |
+
return str_replace( '/', '\/', $scheme . '://' . $abs );
|
1983 |
+
} else {
|
1984 |
+
return $scheme . '://' . $abs;
|
1985 |
+
|
1986 |
+
}
|
1987 |
+
}
|
1988 |
+
|
1989 |
+
/**
|
1990 |
+
* Remove the comments from source code
|
1991 |
+
*
|
1992 |
+
* @param $m
|
1993 |
+
*
|
1994 |
+
* @return string
|
1995 |
+
*/
|
1996 |
+
protected function _commentRemove( $m ) {
|
1997 |
+
return ( 0 === strpos( $m[1], '[' ) || false !== strpos( $m[1], '<![' ) )
|
1998 |
+
? $m[0]
|
1999 |
+
: '';
|
2000 |
+
}
|
2001 |
+
|
2002 |
+
/**
|
2003 |
+
* Remove the page headers
|
2004 |
+
*/
|
2005 |
+
public function hideHeaders() {
|
2006 |
+
//Remove the Link from HTTP Header
|
2007 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_hide_header' ) ) {
|
2008 |
+
header( sprintf( '%s: %s', 'Link', '<' . site_url() . '>; rel=shortlink' ) );
|
2009 |
+
|
2010 |
+
if ( function_exists( 'header_remove' ) ) {
|
2011 |
+
@header_remove( 'x-cf-powered-by' );
|
2012 |
+
@header_remove( "x-powered-by" );
|
2013 |
+
@header_remove( "server" );
|
2014 |
+
}
|
2015 |
+
}
|
2016 |
+
}
|
2017 |
+
|
2018 |
+
/**
|
2019 |
+
* Replace the robotx file fo rsecurity
|
2020 |
+
*
|
2021 |
+
* @param string $content
|
2022 |
+
*/
|
2023 |
+
public function replace_robots( $content ) {
|
2024 |
+
$robots = '';
|
2025 |
+
if ( $content && $content <> '' ) {
|
2026 |
+
$rows = preg_split( '/\n/', $content );
|
2027 |
+
|
2028 |
+
foreach ( $rows as $row ) {
|
2029 |
+
if ( strpos( $row, 'Sitemap:' ) !== false ) {
|
2030 |
+
$robots .= $row . "\n";
|
2031 |
+
|
2032 |
+
}
|
2033 |
+
}
|
2034 |
+
}
|
2035 |
+
|
2036 |
+
$robots .= "\n" . 'User-agent: *' . "\n";
|
2037 |
+
|
2038 |
+
if ( HMW_Classes_Tools::getOption( 'hmw_upload_url' ) <> HMW_Classes_Tools::$default['hmw_upload_url'] ) {
|
2039 |
+
$robots .= 'Allow: */' . HMW_Classes_Tools::getOption( 'hmw_upload_url' ) . '/';
|
2040 |
+
} else {
|
2041 |
+
$robots .= 'Allow: */' . HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) . '/' . HMW_Classes_Tools::$default['hmw_upload_url'] . '/';
|
2042 |
+
}
|
2043 |
+
|
2044 |
+
header( 'Status: 200 OK', true, 200 );
|
2045 |
+
header( 'Content-type: text/plain; charset=' . get_bloginfo( 'charset' ) );
|
2046 |
+
|
2047 |
+
echo $robots;
|
2048 |
+
exit();
|
2049 |
+
|
2050 |
+
}
|
2051 |
+
|
2052 |
+
/**
|
2053 |
+
* Replace the Error Message that contains WordPress
|
2054 |
+
*
|
2055 |
+
* @param $message
|
2056 |
+
* @param $error
|
2057 |
+
*
|
2058 |
+
* @return string|void
|
2059 |
+
*/
|
2060 |
+
public function replace_error_message( $message, $error ) {
|
2061 |
+
if ( is_protected_endpoint() ) {
|
2062 |
+
$message = __( 'There has been a critical error on your website. Please check your site admin email inbox for instructions.' );
|
2063 |
+
} else {
|
2064 |
+
$message = __( 'There has been a critical error on your website.' );
|
2065 |
+
}
|
2066 |
+
|
2067 |
+
return $message;
|
2068 |
+
}
|
2069 |
+
|
2070 |
+
}
|
models/Rules.php
ADDED
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Rules {
|
5 |
+
public $root_path;
|
6 |
+
public $config_file;
|
7 |
+
|
8 |
+
public function __construct() {
|
9 |
+
$this->root_path = HMW_Classes_Tools::getRootPath();
|
10 |
+
|
11 |
+
if (HMW_Classes_Tools::isNginx()) {
|
12 |
+
$this->config_file = $this->root_path . 'hidemywpghost.conf';
|
13 |
+
} elseif (HMW_Classes_Tools::isIIS()) {
|
14 |
+
$this->config_file = $this->root_path . 'web.config';
|
15 |
+
} elseif (HMW_Classes_Tools::isApache() || HMW_Classes_Tools::isLitespeed()) {
|
16 |
+
$this->config_file = $this->root_path . '.htaccess';
|
17 |
+
} else {
|
18 |
+
$this->config_file = false;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
public function getConfFile() {
|
23 |
+
return $this->config_file;
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Check if the config file is writable
|
28 |
+
* @param string $config_file
|
29 |
+
* @return bool
|
30 |
+
*/
|
31 |
+
public function isConfigWritable($config_file = null) {
|
32 |
+
//get the global config file if not specified
|
33 |
+
if (!isset($config_file)) {
|
34 |
+
$config_file = $this->getConfFile();
|
35 |
+
}
|
36 |
+
|
37 |
+
if ($config_file) {
|
38 |
+
if (!file_exists($config_file)) {
|
39 |
+
if (!is_writable(dirname($config_file))) {
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
if (!touch($config_file)) {
|
43 |
+
return false;
|
44 |
+
}
|
45 |
+
} elseif (!is_writeable($config_file)) {
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
return true;
|
50 |
+
}
|
51 |
+
|
52 |
+
public function writeToFile($rules, $header = 'HMWP_RULES') {
|
53 |
+
if ($this->getConfFile()) {
|
54 |
+
if (HMW_Classes_Tools::isNginx()) {
|
55 |
+
return $this->writeInNginx($rules, $header);
|
56 |
+
} elseif (HMW_Classes_Tools::isIIS() && !HMW_Classes_Tools::getOption('logout')) {
|
57 |
+
return HMW_Classes_ObjController::getClass('HMW_Models_Rewrite')->flushRewrites();
|
58 |
+
} elseif (HMW_Classes_Tools::isApache() || HMW_Classes_Tools::isLitespeed()) {
|
59 |
+
return $this->writeInHtaccess($rules, $header);
|
60 |
+
}
|
61 |
+
}
|
62 |
+
return false;
|
63 |
+
}
|
64 |
+
|
65 |
+
public function replaceToFile($old, $new, $file) {
|
66 |
+
if (!$this->isConfigWritable($file)) {
|
67 |
+
return false;
|
68 |
+
}
|
69 |
+
|
70 |
+
$found = false;
|
71 |
+
$lines = file($file);
|
72 |
+
|
73 |
+
foreach ((array)$lines as $line) {
|
74 |
+
if (preg_match("/$old/", $line)) {
|
75 |
+
$found = true;
|
76 |
+
break;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
|
81 |
+
if ($found) {
|
82 |
+
$fd = fopen($file, 'w');
|
83 |
+
foreach ((array)$lines as $line) {
|
84 |
+
if (!preg_match("/$old/", $line)) {
|
85 |
+
fputs($fd, $line);
|
86 |
+
} elseif ($new <> '') {
|
87 |
+
fputs($fd, $new);
|
88 |
+
}
|
89 |
+
}
|
90 |
+
fclose($fd);
|
91 |
+
}
|
92 |
+
|
93 |
+
return $found;
|
94 |
+
}
|
95 |
+
|
96 |
+
public function writeInNginx($rules, $header = 'HMWP_RULES') {
|
97 |
+
return $this->insertWithMarkers($header, $rules);
|
98 |
+
}
|
99 |
+
|
100 |
+
public function writeInHtaccess($rules, $header = 'HMWP_RULES') {
|
101 |
+
if (HMW_Classes_Tools::isModeRewrite()) {
|
102 |
+
return $this->insertWithMarkers($header, $rules);
|
103 |
+
}
|
104 |
+
return false;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Inserts an array of strings into a file (.htaccess ), placing it between
|
109 |
+
* BEGIN and END markers.
|
110 |
+
*
|
111 |
+
* Replaces existing marked info. Retains surrounding
|
112 |
+
* data. Creates file if none exists.
|
113 |
+
*
|
114 |
+
* @param string $marker The marker to alter.
|
115 |
+
* @param array|string $insertion The new content to insert.
|
116 |
+
* @return bool True on write success, false on failure.
|
117 |
+
*/
|
118 |
+
public function insertWithMarkers($marker, $insertion) {
|
119 |
+
|
120 |
+
if (!$this->isConfigWritable()) {
|
121 |
+
return false;
|
122 |
+
}
|
123 |
+
|
124 |
+
if (!is_array($insertion)) {
|
125 |
+
$insertion = explode("\n", $insertion);
|
126 |
+
}
|
127 |
+
|
128 |
+
$start_marker = "# BEGIN {$marker}";
|
129 |
+
$end_marker = "# END {$marker}";
|
130 |
+
|
131 |
+
$fp = fopen($this->getConfFile(), 'r+');
|
132 |
+
if (!$fp) {
|
133 |
+
return false;
|
134 |
+
}
|
135 |
+
|
136 |
+
// Attempt to get a lock. If the filesystem supports locking, this will block until the lock is acquired.
|
137 |
+
flock($fp, LOCK_EX);
|
138 |
+
|
139 |
+
$lines = array();
|
140 |
+
while (!feof($fp)) {
|
141 |
+
$lines[] = rtrim(fgets($fp), "\r\n");
|
142 |
+
}
|
143 |
+
|
144 |
+
// Split out the existing file into the preceding lines, and those that appear after the marker
|
145 |
+
$pre_lines = $post_lines = $existing_lines = array();
|
146 |
+
$found_marker = $found_end_marker = false;
|
147 |
+
foreach ($lines as $line) {
|
148 |
+
if (!$found_marker && false !== strpos($line, $start_marker)) {
|
149 |
+
$found_marker = true;
|
150 |
+
continue;
|
151 |
+
} elseif (!$found_end_marker && false !== strpos($line, $end_marker)) {
|
152 |
+
$found_end_marker = true;
|
153 |
+
continue;
|
154 |
+
}
|
155 |
+
if (!$found_marker) {
|
156 |
+
$pre_lines[] = $line;
|
157 |
+
} elseif ($found_marker && $found_end_marker) {
|
158 |
+
$post_lines[] = $line;
|
159 |
+
} else {
|
160 |
+
$existing_lines[] = $line;
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
+
// Check to see if there was a change
|
165 |
+
if ($existing_lines === $insertion) {
|
166 |
+
flock($fp, LOCK_UN);
|
167 |
+
fclose($fp);
|
168 |
+
|
169 |
+
return true;
|
170 |
+
}
|
171 |
+
|
172 |
+
// Generate the new file data
|
173 |
+
if (!$found_marker) {
|
174 |
+
$new_file_data = implode("\n", array_merge(
|
175 |
+
array($start_marker),
|
176 |
+
$insertion,
|
177 |
+
array($end_marker),
|
178 |
+
$pre_lines
|
179 |
+
));
|
180 |
+
} else {
|
181 |
+
$new_file_data = implode("\n", array_merge(
|
182 |
+
$pre_lines,
|
183 |
+
array($start_marker),
|
184 |
+
$insertion,
|
185 |
+
array($end_marker),
|
186 |
+
$post_lines
|
187 |
+
));
|
188 |
+
}
|
189 |
+
|
190 |
+
// Write to the start of the file, and truncate it to that length
|
191 |
+
fseek($fp, 0);
|
192 |
+
$bytes = fwrite($fp, $new_file_data);
|
193 |
+
if ($bytes) {
|
194 |
+
ftruncate($fp, ftell($fp));
|
195 |
+
}
|
196 |
+
fflush($fp);
|
197 |
+
flock($fp, LOCK_UN);
|
198 |
+
fclose($fp);
|
199 |
+
|
200 |
+
return (bool)$bytes;
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Hide the Old Paths like /wp-content, /wp-includes
|
205 |
+
* Requires Hide My WP Ghost
|
206 |
+
*/
|
207 |
+
public function getHideOldPathRewrite() {
|
208 |
+
|
209 |
+
return '';
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Add rules to protect the website from sql injection
|
214 |
+
* Requires Hide My WP Ghost
|
215 |
+
* @return string
|
216 |
+
*/
|
217 |
+
public function getInjectionRewrite() {
|
218 |
+
return '';
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Check if the ADMIN_COOKIE_PATH is present in wp-config.php
|
223 |
+
* @return bool
|
224 |
+
*/
|
225 |
+
public function isConfigAdminCookie() {
|
226 |
+
if (file_exists(ABSPATH . 'wp-config.php')) {
|
227 |
+
$global_config_file = ABSPATH . 'wp-config.php';
|
228 |
+
} else {
|
229 |
+
$global_config_file = dirname(ABSPATH) . '/wp-config.php';
|
230 |
+
}
|
231 |
+
|
232 |
+
$lines = file($global_config_file);
|
233 |
+
|
234 |
+
foreach ((array)$lines as $line) {
|
235 |
+
if (preg_match("/ADMIN_COOKIE_PATH/", $line)) {
|
236 |
+
return true;
|
237 |
+
}
|
238 |
+
}
|
239 |
+
|
240 |
+
return false;
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Remove the config cookie in case another plugin add this
|
247 |
+
* @return bool
|
248 |
+
*/
|
249 |
+
public function removeConfigCookie() {
|
250 |
+
if (file_exists(ABSPATH . 'wp-config.php')) {
|
251 |
+
$global_config_file = ABSPATH . 'wp-config.php';
|
252 |
+
} else {
|
253 |
+
$global_config_file = dirname(ABSPATH) . '/wp-config.php';
|
254 |
+
}
|
255 |
+
|
256 |
+
if (!$this->replaceToFile('define *\( *[\'|\"]ADMIN_COOKIE_PATH[\'|\"]', '', $global_config_file)) {
|
257 |
+
return false;
|
258 |
+
}
|
259 |
+
|
260 |
+
return true;
|
261 |
+
}
|
262 |
+
|
263 |
+
}
|
models/Settings.php
ADDED
@@ -0,0 +1,347 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Settings {
|
5 |
+
/**
|
6 |
+
* Get the admin Menu Tabs
|
7 |
+
* @return array
|
8 |
+
*/
|
9 |
+
public function getTabs() {
|
10 |
+
return array(
|
11 |
+
'hmw_permalinks' => array(
|
12 |
+
'title' => __("Permalinks", _HMW_PLUGIN_NAME_),
|
13 |
+
'description' => __("Change common paths", _HMW_PLUGIN_NAME_),
|
14 |
+
'icon' => 'link'
|
15 |
+
),
|
16 |
+
'hmw_mapping' => array(
|
17 |
+
'title' => __("Mapping", _HMW_PLUGIN_NAME_),
|
18 |
+
'description' => __("Text and URL mapping", _HMW_PLUGIN_NAME_),
|
19 |
+
'icon' => 'arrows-h'
|
20 |
+
),
|
21 |
+
'hmw_tweaks' => array(
|
22 |
+
'title' => __("Tweaks", _HMW_PLUGIN_NAME_),
|
23 |
+
'description' => __("Add WordPress Tweaks", _HMW_PLUGIN_NAME_),
|
24 |
+
'icon' => 'puzzle-piece'
|
25 |
+
),
|
26 |
+
'hmw_brute' => array(
|
27 |
+
'title' => __("Brute Force", _HMW_PLUGIN_NAME_),
|
28 |
+
'description' => __("Add Login Protection", _HMW_PLUGIN_NAME_),
|
29 |
+
'icon' => 'user-secret'
|
30 |
+
),
|
31 |
+
'hmw_log' => array(
|
32 |
+
'title' => __("Log Events", _HMW_PLUGIN_NAME_),
|
33 |
+
'description' => __("Website Events Log", _HMW_PLUGIN_NAME_),
|
34 |
+
'icon' => 'database'
|
35 |
+
),
|
36 |
+
'hmw_securitycheck' => array(
|
37 |
+
'title' => __("Security Check", _HMW_PLUGIN_NAME_),
|
38 |
+
'description' => __('Test Your Website', _HMW_PLUGIN_NAME_),
|
39 |
+
'icon' => ' fa fa-search',
|
40 |
+
'class' => 'HMW_Controllers_SecurityCheck'
|
41 |
+
),
|
42 |
+
'hmw_plugins' => array(
|
43 |
+
'title' => __("Plugins", _HMW_PLUGIN_NAME_),
|
44 |
+
'description' => 'Compatible Free Plugins',
|
45 |
+
'icon' => 'plug'
|
46 |
+
),
|
47 |
+
'hmw_backup' => array(
|
48 |
+
'title' => __("Backup/Restore", _HMW_PLUGIN_NAME_),
|
49 |
+
'description' => __('Save your settings', _HMW_PLUGIN_NAME_),
|
50 |
+
'icon' => 'save'
|
51 |
+
),
|
52 |
+
'hmw_advanced' => array(
|
53 |
+
'title' => __("Advanced", _HMW_PLUGIN_NAME_),
|
54 |
+
'description' => '',
|
55 |
+
'icon' => 'cogs'
|
56 |
+
),
|
57 |
+
);
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Get the known plugins and themes
|
62 |
+
* @return array
|
63 |
+
*/
|
64 |
+
public function getPlugins() {
|
65 |
+
return array(
|
66 |
+
'squirrly-seo' => array(
|
67 |
+
'title' => __("SEO SQUIRRLY"),
|
68 |
+
'banner' => '//ps.w.org/squirrly-seo/assets/banner-772x250.png?rev=2302934',
|
69 |
+
'description' => __("A.I.-based Private SEO Consultant. In a Plugin. Powered by Machine Learning and Cloud Services. Over 300 functionalities for SEO now available when you need them.") . '<div class="text-success my-2">' . 'SEO Plugin' . '</div>',
|
70 |
+
'path' => 'squirrly-seo/squirrly.php',
|
71 |
+
'url' => 'https://wpplugins.tips/plugin/squirrly-seo'
|
72 |
+
),
|
73 |
+
'wp-rocket' => array(
|
74 |
+
'title' => __("WP-Rocket"),
|
75 |
+
'banner' => _HMW_THEME_URL_ . 'img/wp-rocket-banner.jpg',
|
76 |
+
'description' => __("WP Rocket is in fact the only cache plugin which integrates more than 80% of web performance best practices even without any options activated. ") . '<div class="text-success my-2">' . 'SEO Plugin' . '</div>',
|
77 |
+
'path' => 'wp-rocket/wp-rocket.php',
|
78 |
+
'url' => 'https://wpplugins.tips/plugin/wp-rocket'
|
79 |
+
),
|
80 |
+
'autoptimize' => array(
|
81 |
+
'title' => __("Autoptimize"),
|
82 |
+
'banner' => '//ps.w.org/autoptimize/assets/banner-772x250.jpg?rev=1315920',
|
83 |
+
'description' => __("Autoptimize speeds up your website by optimizing JS, CSS and HTML, async-ing JavaScript, removing emoji cruft, optimizing Google Fonts and more.") . '<div class="text-success my-2">' . 'Cache plugin' . '</div>',
|
84 |
+
'path' => 'autoptimize/autoptimize.php',
|
85 |
+
'url' => 'https://wordpress.org/plugins/autoptimize/'
|
86 |
+
),
|
87 |
+
'minify-html-markup' => array(
|
88 |
+
'title' => __("Minify HTML"),
|
89 |
+
'banner' => '//ps.w.org/minify-html-markup/assets/banner-772x250.png?rev=1354339',
|
90 |
+
'description' => __("Minify HTML output for clean looking markup and faster downloading. Minify HTML also has optional specialized minification for JS and internal CSS.") . '<div class="text-success my-2">' . 'Minify content (works with other cache plugins)' . '</div>',
|
91 |
+
'path' => 'minify-html-markup/minify-html.php',
|
92 |
+
'url' => 'https://wordpress.org/plugins/minify-html-markup/'
|
93 |
+
),
|
94 |
+
'better-wp-security' => array(
|
95 |
+
'title' => __("iThemes Security"),
|
96 |
+
'banner' => '//ps.w.org/better-wp-security/assets/banner-772x250.png?rev=881897',
|
97 |
+
'description' => __("iThemes Security gives you over 30+ ways to secure and protect your WP site. WP sites can be an easy target for attacks because of plugin vulnerabilities, weak passwords and obsolete software.") . '<div class="text-success my-2">' . 'Security Plugin' . '</div>',
|
98 |
+
'path' => 'better-wp-security/better-wp-security.php',
|
99 |
+
'url' => 'https://wordpress.org/plugins/better-wp-security/'
|
100 |
+
),
|
101 |
+
'sucuri-scanner' => array(
|
102 |
+
'title' => __("Sucuri Security"),
|
103 |
+
'banner' => '//ps.w.org/sucuri-scanner/assets/banner-772x250.png?rev=1235419',
|
104 |
+
'description' => __("The Sucuri WordPress Security plugin is a security toolset for security integrity monitoring, malware detection and security hardening.") . '<div class="text-success my-2">' . 'Security Plugin' . '</div>',
|
105 |
+
'path' => 'sucuri-scanner/sucuri.php',
|
106 |
+
'url' => 'https://wordpress.org/plugins/sucuri-scanner/'
|
107 |
+
),
|
108 |
+
'backupwordpress' => array(
|
109 |
+
'title' => __("Back Up WordPress"),
|
110 |
+
'banner' => '//ps.w.org/backupwordpress/assets/banner-772x250.jpg?rev=904756',
|
111 |
+
'description' => __("Simple automated backups of your WordPress-powered website. Back Up WordPress will back up your entire site including your database and all your files on a schedule that suits you.") . '<div class="text-success my-2">' . 'Backup Plugin' . '</div>',
|
112 |
+
'path' => 'backupwordpress/backupwordpress.php',
|
113 |
+
'url' => 'https://wordpress.org/plugins/backupwordpress/'
|
114 |
+
),
|
115 |
+
|
116 |
+
'elementor' => array(
|
117 |
+
'title' => __("Elementor Builder"),
|
118 |
+
'banner' => '//ps.w.org/elementor/assets/banner-772x250.png?rev=1475479',
|
119 |
+
'description' => __("The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design.") . '<div class="text-success my-2">' . 'Page Builder' . '</div>',
|
120 |
+
'path' => 'elementor/elementor.php',
|
121 |
+
'url' => 'https://wordpress.org/plugins/elementor/'
|
122 |
+
),
|
123 |
+
'weglot' => array(
|
124 |
+
'title' => __("Weglot Translate"),
|
125 |
+
'banner' => '//ps.w.org/weglot/assets/banner-772x250.png?rev=2186774',
|
126 |
+
'description' => __("Translate your website into multiple languages without any code. Weglot Translate is fully SEO compatible and follows Google's best practices.") . '<div class="text-success my-2">' . 'Multilingual' . '</div>',
|
127 |
+
'path' => 'weglot/weglot.php',
|
128 |
+
'url' => 'https://wordpress.org/plugins/weglot/'
|
129 |
+
),
|
130 |
+
'add-to-any' => array(
|
131 |
+
'title' => __("AddToAny Share Btn"),
|
132 |
+
'banner' => '//ps.w.org/add-to-any/assets/banner-772x250.png?rev=1629680',
|
133 |
+
'description' => __("Share buttons for WordPress including the AddToAny sharing button, Facebook, Twitter, Google+, Pinterest, WhatsApp, many more, and follow icons too.") . '<div class="text-success my-2">' . 'Share Buttons' . '</div>',
|
134 |
+
'path' => 'add-to-any/add-to-any.php',
|
135 |
+
'url' => 'https://wordpress.org/plugins/add-to-any/'
|
136 |
+
),
|
137 |
+
);
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
public function savePermalinks($params) {
|
142 |
+
HMW_Classes_Tools::saveOptions('error', false);
|
143 |
+
HMW_Classes_Tools::saveOptions('changes', false);
|
144 |
+
|
145 |
+
if ($params['hmw_admin_url'] == $params['hmw_login_url'] && $params['hmw_admin_url'] <> '') {
|
146 |
+
HMW_Classes_Tools::saveOptions('error', true);
|
147 |
+
HMW_Classes_Error::setError(__("You can't set both ADMIN and LOGIN with the same name. Please use different names", _HMW_PLUGIN_NAME_));
|
148 |
+
return;
|
149 |
+
}
|
150 |
+
|
151 |
+
//send email when the admin is changed
|
152 |
+
if (isset($params['hmw_send_email'])) {
|
153 |
+
HMW_Classes_Tools::$default['hmw_send_email'] = $params['hmw_send_email'];
|
154 |
+
}
|
155 |
+
|
156 |
+
if ($params['hmw_mode'] == 'default') {
|
157 |
+
$params = HMW_Classes_Tools::$default;
|
158 |
+
//remove the custom rules
|
159 |
+
HMW_Classes_ObjController::getClass('HMW_Models_Rules')->writeToFile('');
|
160 |
+
HMW_Classes_ObjController::getClass('HMW_Models_Rules')->writeToFile('', 'HMWP_RULES');
|
161 |
+
}
|
162 |
+
|
163 |
+
////////////////////////////////////////////
|
164 |
+
//Set the Category and Tags dirs
|
165 |
+
global $wp_rewrite;
|
166 |
+
$blog_prefix = '';
|
167 |
+
if (is_multisite() && !is_subdomain_install() && is_main_site() && 0 === strpos(get_option('permalink_structure'), '/blog/')) {
|
168 |
+
$blog_prefix = '/blog';
|
169 |
+
}
|
170 |
+
|
171 |
+
if (isset($params['hmw_category_base']) && method_exists($wp_rewrite, 'set_category_base')) {
|
172 |
+
$category_base = $params['hmw_category_base'];
|
173 |
+
if (!empty($category_base))
|
174 |
+
$category_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace('#', '', $category_base));
|
175 |
+
$wp_rewrite->set_category_base($category_base);
|
176 |
+
}
|
177 |
+
|
178 |
+
if (isset($params['hmw_tag_base']) && method_exists($wp_rewrite, 'set_tag_base')) {
|
179 |
+
$tag_base = $params['hmw_tag_base'];
|
180 |
+
if (!empty($tag_base))
|
181 |
+
$tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace('#', '', $tag_base));
|
182 |
+
$wp_rewrite->set_tag_base($tag_base);
|
183 |
+
}
|
184 |
+
////////////////////////////////////////////
|
185 |
+
|
186 |
+
//If the admin is changed, require a logout
|
187 |
+
$lastsafeoptions = HMW_Classes_Tools::getOptions(true);
|
188 |
+
if ($lastsafeoptions['hmw_admin_url'] <> $params['hmw_admin_url']) {
|
189 |
+
HMW_Classes_Tools::saveOptions('logout', true);
|
190 |
+
} elseif ($lastsafeoptions['hmw_login_url'] <> $params['hmw_login_url']) {
|
191 |
+
HMW_Classes_Tools::saveOptions('logout', true);
|
192 |
+
}
|
193 |
+
|
194 |
+
//Save all values
|
195 |
+
$this->saveValues($params, true);
|
196 |
+
|
197 |
+
//Some values need to be save as blank is case no data is received
|
198 |
+
//Set them to blank or value
|
199 |
+
HMW_Classes_Tools::saveOptions('hmw_lostpassword_url', HMW_Classes_Tools::getValue('hmw_lostpassword_url', ''));
|
200 |
+
HMW_Classes_Tools::saveOptions('hmw_register_url', HMW_Classes_Tools::getValue('hmw_register_url', ''));
|
201 |
+
HMW_Classes_Tools::saveOptions('hmw_logout_url', HMW_Classes_Tools::getValue('hmw_logout_url', ''));
|
202 |
+
|
203 |
+
//generate unique names for plugins if needed
|
204 |
+
if (HMW_Classes_Tools::getOption('hmw_hide_plugins')) {
|
205 |
+
HMW_Classes_ObjController::getClass('HMW_Models_Rewrite')->hidePluginNames();
|
206 |
+
}
|
207 |
+
if (HMW_Classes_Tools::getOption('hmw_hide_themes')) {
|
208 |
+
HMW_Classes_ObjController::getClass('HMW_Models_Rewrite')->hideThemeNames();
|
209 |
+
}
|
210 |
+
|
211 |
+
//check if the config file is writable
|
212 |
+
if (!HMW_Classes_ObjController::getClass('HMW_Models_Rules')->isConfigWritable() || HMW_Classes_Tools::isWpengine()) {
|
213 |
+
//if not writeable, call the rules to show manually changes
|
214 |
+
if (!HMW_Classes_ObjController::getClass('HMW_Models_Rewrite')->clearRedirect()
|
215 |
+
->setRewriteRules()
|
216 |
+
->flushRewrites() //show rules to be added manually
|
217 |
+
) {
|
218 |
+
HMW_Classes_Tools::saveOptions('error', true);
|
219 |
+
}
|
220 |
+
}
|
221 |
+
|
222 |
+
}
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Save the Values in database
|
226 |
+
* @param $params
|
227 |
+
* @param bool $validate
|
228 |
+
*/
|
229 |
+
public function saveValues($params, $validate = false) {
|
230 |
+
//Save the option values
|
231 |
+
foreach ($params as $key => $value) {
|
232 |
+
if (in_array($key, array_keys(HMW_Classes_Tools::$options))) {
|
233 |
+
//Make sure is set in POST
|
234 |
+
if (HMW_Classes_Tools::getIsset($key)) {
|
235 |
+
//sanitize the value first
|
236 |
+
$value = HMW_Classes_Tools::getValue($key);
|
237 |
+
|
238 |
+
//set the default value in case of nothing to prevent empty paths and errors
|
239 |
+
if ($value == '') {
|
240 |
+
if (isset(HMW_Classes_Tools::$default[$key])) {
|
241 |
+
$value = HMW_Classes_Tools::$default[$key];
|
242 |
+
} elseif (isset(HMW_Classes_Tools::$init[$key])) {
|
243 |
+
$value = HMW_Classes_Tools::$init[$key];
|
244 |
+
}
|
245 |
+
}
|
246 |
+
|
247 |
+
//Detect Invalid Names
|
248 |
+
if ($validate) {
|
249 |
+
if (!$this->invalidName($value)) { //if the name is valid
|
250 |
+
//Detect Weak Names
|
251 |
+
$this->weakName($value); //show weak names
|
252 |
+
HMW_Classes_Tools::saveOptions($key, $value);
|
253 |
+
}
|
254 |
+
} else {
|
255 |
+
HMW_Classes_Tools::saveOptions($key, $value);
|
256 |
+
}
|
257 |
+
}
|
258 |
+
}
|
259 |
+
}
|
260 |
+
}
|
261 |
+
|
262 |
+
/**
|
263 |
+
* Check invalid name and avoid errors
|
264 |
+
* @param $name
|
265 |
+
* @return bool
|
266 |
+
*/
|
267 |
+
public function invalidName($name) {
|
268 |
+
$invalid_paths = array(
|
269 |
+
'index.php',
|
270 |
+
'readme.html',
|
271 |
+
'sitemap.xml',
|
272 |
+
'.htaccess',
|
273 |
+
'license.txt',
|
274 |
+
'wp-blog-header.php',
|
275 |
+
'wp-config.php',
|
276 |
+
'wp-config-sample.php',
|
277 |
+
'wp-activate.php',
|
278 |
+
'wp-cron.php',
|
279 |
+
'wp-mail.php',
|
280 |
+
'wp-load.php',
|
281 |
+
'wp-links-opml.php',
|
282 |
+
'wp-settings.php',
|
283 |
+
'wp-signup.php',
|
284 |
+
'wp-trackback.php',
|
285 |
+
'xmlrpc.php',
|
286 |
+
'content',
|
287 |
+
'includes',
|
288 |
+
'plugins',
|
289 |
+
'themes',
|
290 |
+
'css',
|
291 |
+
'js',
|
292 |
+
'font',
|
293 |
+
'assets',
|
294 |
+
);
|
295 |
+
if (is_string($name) && strlen($name) > 1 && strlen($name) < 3) {
|
296 |
+
HMW_Classes_Error::setError(sprintf(__("Short name detected: %s. You need to use unique paths with more than 4 chars to avoid WordPress errors.", _HMW_PLUGIN_NAME_), '<strong>' . $name . '</strong>'));
|
297 |
+
return true;
|
298 |
+
}
|
299 |
+
|
300 |
+
if (in_array($name, $invalid_paths)) {
|
301 |
+
HMW_Classes_Error::setError(sprintf(__("Invalid name detected: %s. You need to use another name to avoid WordPress errors.", _HMW_PLUGIN_NAME_), '<strong>' . $name . '</strong>'));
|
302 |
+
return true;
|
303 |
+
}
|
304 |
+
|
305 |
+
if (strpos($name, '//') !== false) {
|
306 |
+
HMW_Classes_Error::setError(sprintf(__("Invalid name detected: %s. Add only the final path name to avoid WordPress errors.", _HMW_PLUGIN_NAME_), '<strong>' . $name . '</strong>'));
|
307 |
+
return true;
|
308 |
+
}
|
309 |
+
if (strpos($name, '/') !== false && strpos($name, '/') == 0) {
|
310 |
+
HMW_Classes_Error::setError(sprintf(__("Invalid name detected: %s. The name can't start with / to avoid WordPress errors.", _HMW_PLUGIN_NAME_), '<strong>' . $name . '</strong>'));
|
311 |
+
return true;
|
312 |
+
}
|
313 |
+
$array = explode('/', $name);
|
314 |
+
if (!empty($array)) {
|
315 |
+
foreach ($array as $row) {
|
316 |
+
if (substr($row, -1) == '.') {
|
317 |
+
HMW_Classes_Error::setError(sprintf(__("Invalid name detected: %s. The paths can't end with . to avoid WordPress errors.", _HMW_PLUGIN_NAME_), '<strong>' . $name . '</strong>'));
|
318 |
+
return true;
|
319 |
+
}
|
320 |
+
}
|
321 |
+
}
|
322 |
+
return false;
|
323 |
+
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* Check if the name is week for security
|
327 |
+
* @param $name
|
328 |
+
*/
|
329 |
+
public function weakName($name) {
|
330 |
+
$invalit_paths = array(
|
331 |
+
'login',
|
332 |
+
'mylogin',
|
333 |
+
'wp-login',
|
334 |
+
'admin',
|
335 |
+
'wp-mail.php',
|
336 |
+
'wp-settings.php',
|
337 |
+
'wp-signup.php',
|
338 |
+
'wp-trackback.php',
|
339 |
+
'xmlrpc.php',
|
340 |
+
'wp-include',
|
341 |
+
);
|
342 |
+
|
343 |
+
if (in_array($name, $invalit_paths)) {
|
344 |
+
HMW_Classes_Error::setError(sprintf(__("Weak name detected: %s. You need to use another name to increase your website security.", _HMW_PLUGIN_NAME_), '<strong>' . $name . '</strong>'));
|
345 |
+
}
|
346 |
+
}
|
347 |
+
}
|
models/Woocommerce.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined('ABSPATH') || die('Cheatin\' uh?');
|
3 |
+
|
4 |
+
class HMW_Models_Woocommerce {
|
5 |
+
|
6 |
+
public function __construct() {
|
7 |
+
add_action('wp_default_scripts', array($this, 'remove_password_strength_meter'));
|
8 |
+
}
|
9 |
+
|
10 |
+
public function remove_password_strength_meter($scripts) {
|
11 |
+
if (!is_user_logged_in()) {
|
12 |
+
if (method_exists($scripts, 'remove')) {
|
13 |
+
$scripts->remove('password-strength-meter');
|
14 |
+
}
|
15 |
+
}
|
16 |
+
return $scripts;
|
17 |
+
}
|
18 |
+
|
19 |
+
|
20 |
+
}
|
readme.txt
ADDED
@@ -0,0 +1,745 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Hide My WP Ghost - Security Plugin ===
|
2 |
+
Contributors: johndarrel
|
3 |
+
Tags: security, firewall, hide my wp, hide wp-admin, hide wp-login, hide wordpress, admin, ocultar mi wp, hide my site, hide my wordpress
|
4 |
+
Requires at least: 4.3
|
5 |
+
Tested up to: 5.5
|
6 |
+
Requires PHP: 5.6
|
7 |
+
Stable tag: trunk
|
8 |
+
Donate link: https://wpplugins.tips/wordpress
|
9 |
+
License: GPLv2 or later
|
10 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
+
|
12 |
+
Hide all common paths, wp-admin, wp-login, wp-content, plugins, themes, authors, comments, xml-rpc, etc. Add Firewall, Brute Force protection & more.
|
13 |
+
|
14 |
+
== Description ==
|
15 |
+
|
16 |
+
**Hide My WP Ghost** is a **WordPress Security plugin**. It **changes and hides** WP common paths for the Best WP Security against hacker bots.
|
17 |
+
|
18 |
+
All the WordPress common paths can be changed together with the plugins and themes names.
|
19 |
+
|
20 |
+
**No file or directory is physically changed**. All the changes are made by WordPress redirects. All the actions are done automatically by the plugin.
|
21 |
+
|
22 |
+
After the common paths are changed, **all the common paths are hidden from hackers** to protect all the plugins and themes.
|
23 |
+
|
24 |
+
[youtube https://www.youtube.com/watch?v=gwRKHQTNkh0]
|
25 |
+
|
26 |
+
> Check the Demo Website source code:
|
27 |
+
> <a href="https://demo.wpplugins.tips/">https://demo.wpplugins.tips/</a>
|
28 |
+
> (the elementor is changed in files and classes using the PRO version)
|
29 |
+
|
30 |
+
|
31 |
+
> Check the Redirected URLs in Demo Website (all are redirected to Front Page):
|
32 |
+
> <a href="https://demo.wpplugins.tips/wp-admin/">https://demo.wpplugins.tips/wp-admin</a>
|
33 |
+
> <a href="https://demo.wpplugins.tips/wp-login/">https://demo.wpplugins.tips/wp-login</a>
|
34 |
+
|
35 |
+
|
36 |
+
> Check the Hidden Common Paths in Demo Website (all show 404 Page Not Found):
|
37 |
+
> <a href="https://demo.wpplugins.tips/wp-content/">https://demo.wpplugins.tips/wp-content</a>
|
38 |
+
> <a href="https://demo.wpplugins.tips/wp-content/plugins/">https://demo.wpplugins.tips/wp-content/plugins</a>
|
39 |
+
> <a href="https://demo.wpplugins.tips/wp-content/themes/">https://demo.wpplugins.tips/wp-content/themes</a>
|
40 |
+
|
41 |
+
|
42 |
+
The plugin works as security through obscurity solution for WordPress websites.
|
43 |
+
|
44 |
+
Security through obscurity is one of the best solutions against hacker bots and one of the best ways to protect vulnerable plugins and themes.
|
45 |
+
|
46 |
+
Over 90,000 hacking attacks per minute strike WordPress sites and WordPress hosting around the world, hitting not only large corporate websites packed with sensitive data, but also sites belonging to small businesses, independent entrepreneurs, and individuals running personal blogs.
|
47 |
+
|
48 |
+
Security of WordPress sites typically tops the list of concerns for new and experienced website owners alike.
|
49 |
+
|
50 |
+
For owners of WordPress sites, statistics like that one raises particular worries about the security not just of individual WordPress sites, but of WordPress itself.
|
51 |
+
|
52 |
+
**Is your website secure?** Check your website with <a href="https://wpplugins.tips/wordpress-vulnerability-detector/" >Free Website Security Check</a>
|
53 |
+
|
54 |
+
Protect your WordPress website by hiding the authentication paths like wp-admin, wp-login.php and wp-login and change the common WordPress paths like wp-content, wp-includes, uploads and more.
|
55 |
+
|
56 |
+
Please support us and **translate the plugin in your language**:
|
57 |
+
<a href="https://translate.wordpress.org/projects/wp-plugins/hide-my-wp">https://translate.wordpress.org/projects/wp-plugins/hide-my-wp</a>
|
58 |
+
|
59 |
+
Thank you all for your trust, support and positive reviews!
|
60 |
+
|
61 |
+
> **Hide My WP Ghost Lite Security Features**:
|
62 |
+
>
|
63 |
+
> * <strong>Hide WordPress wp-admin</strong> URL and redirect it to 404 page or a custom page
|
64 |
+
> * <strong>Hide WordPress wp-login.php</strong> and redirect it to 404 page or a custom page
|
65 |
+
> * <strong>Change the wp-admin and wp-login</strong> URLs
|
66 |
+
> * <strong>Change lost password</strong> URL
|
67 |
+
> * <strong>Change register</strong> URL
|
68 |
+
> * <strong>Change logout</strong> URL
|
69 |
+
> * <strong>Change admin-ajax</strong> URL
|
70 |
+
> * <strong>Change wp-content</strong> URL
|
71 |
+
> * <strong>Change wp-includes</strong> URL
|
72 |
+
> * <strong>Change comments</strong> URL
|
73 |
+
> * <strong>Change author</strong> URL
|
74 |
+
> * <strong>Change plugins name</strong> URL
|
75 |
+
> * <strong>Change themes name</strong> URL
|
76 |
+
> * <strong>Change category</strong> URL
|
77 |
+
> * <strong>Change tags</strong> URL
|
78 |
+
>
|
79 |
+
> **Hidden Paths: **
|
80 |
+
>
|
81 |
+
> * <strong>Hide WordPress HTML comments</strong>
|
82 |
+
> * <strong>Hide Version and WordPress Tags</strong>
|
83 |
+
> * <strong>Hide DNS Prefetch WordPress link</strong>
|
84 |
+
> * <strong>Hide WordPress Generator Meta</strong>
|
85 |
+
> * <strong>Hide RSD (Really Simple Directory) header</strong>
|
86 |
+
> * <strong>Hide Emojicons if you don't use them</strong>
|
87 |
+
>
|
88 |
+
> **Disable Paths: **
|
89 |
+
>
|
90 |
+
> * <strong>Disable XML-RPC access</strong>
|
91 |
+
> * <strong>Disable Embed scripts</strong>
|
92 |
+
> * <strong>Disable DB-Debug in Frontend</strong>
|
93 |
+
> * <strong>Disable WLW Manifest scripts</strong>
|
94 |
+
>
|
95 |
+
> **Brute Force Protection: **
|
96 |
+
>
|
97 |
+
> * <strong>Brute Force</strong> with Math Captcha
|
98 |
+
>
|
99 |
+
> **Extra Features: **
|
100 |
+
>
|
101 |
+
> * <strong>Backup and Restore</strong> settings
|
102 |
+
> * <strong>Fix relative URLs</strong>
|
103 |
+
> * <strong>Change classes using Text Mapping</strong> from HTML code
|
104 |
+
> * <strong>Cache CSS, JS and Images</strong> to optimize the loading speed
|
105 |
+
> * <strong>Weekly security check and reports</strong>
|
106 |
+
>
|
107 |
+
|
108 |
+
Compatible with: <strong>WP Multisite, Apache, Litespeed, Nginx and IIS</strong>.
|
109 |
+
|
110 |
+
Plugins Compatibility updates: **WPML, W3 Total Cache, WP Super Cache, WP Fastest Cache, Hummingbird Cache, Cachify Cache, Litespeed Cache,
|
111 |
+
Cache Enabler, CDN Enabler, WOT Cache, Autoptimize, Jetpack by WordPress, Contact Form 7, bbPress,
|
112 |
+
All In One SEO, Yoast SEO, Squirrly SEO, WP-Rocket, Minify HTML, iThemes Security, Sucuri Security,
|
113 |
+
Back-Up WordPress, Elementor Page Builder, Weglot Translate, AddToAny Share Btn, WordFence Security, Sucuri Security, Asset CleanUp**
|
114 |
+
|
115 |
+
Hosting Compatibility checked: **WP Engine, Inmotion Hosting, Hostgator Hosting, Godaddy Hosting, Host1plus,
|
116 |
+
Payperhost, Fastcomet, Dreamhost, Bitnami Apache, Bitnami Nginx, Google Cloud Hosting, Litespeed Hosting**
|
117 |
+
|
118 |
+
|
119 |
+
To **hide all the common WordPress paths** you need Hide My WP Ghost version. Check all the Ghost security features below.
|
120 |
+
|
121 |
+
The admin URL is the most common path that hackers use to break your WordPress site.
|
122 |
+
|
123 |
+
Being able to cover up the common paths is critical because you get to keep intruders away from sensitive website data.
|
124 |
+
|
125 |
+
This is crucial, and it will provide you with a great experience and really good results in the long term.
|
126 |
+
|
127 |
+
It will surely be worth it, not to mention that hiding the common paths will make hacking a lot harder as well.
|
128 |
+
|
129 |
+
If you don't protect yourself, you will end up having a hacked website sooner or later.
|
130 |
+
|
131 |
+
|
132 |
+
**This is a free version of the plugin so you can use it for all your blogs without any restrictions.**
|
133 |
+
|
134 |
+
No theme or other plugins functionality will be blocked, everything will function the same
|
135 |
+
|
136 |
+
Note: The plugin requires custom permalinks. Make sure you have it activated at Settings > Permalinks
|
137 |
+
|
138 |
+
<hr />
|
139 |
+
|
140 |
+
> **Hide My WP Ghost Premium security features**:
|
141 |
+
>
|
142 |
+
> * Hide WordPress /wp-admin
|
143 |
+
> * Hide WordPress /wp-login.php
|
144 |
+
> * Hide WordPress /wp-login/
|
145 |
+
> * Hide WordPress /login URL
|
146 |
+
> * Custom wp-admin and wp-login URLs
|
147 |
+
> * Custom admin-ajax.php URLs
|
148 |
+
> * Custom lost password URL
|
149 |
+
> * Custom register URL
|
150 |
+
> * Custom activate URL
|
151 |
+
> * Custom logout URL
|
152 |
+
> * Custom wp-includes path
|
153 |
+
> * Custom wp-content path
|
154 |
+
> * Custom wp-json API path
|
155 |
+
> * Custom plugins name
|
156 |
+
> * Custom themes name
|
157 |
+
> * Custom themes style name
|
158 |
+
> * Custom plugins path
|
159 |
+
> * Custom uploads path
|
160 |
+
> * Custom authors path
|
161 |
+
> * Custom comment URL
|
162 |
+
> * Custom category path
|
163 |
+
> * Custom tags path
|
164 |
+
>
|
165 |
+
> **Hidden Paths: **
|
166 |
+
>
|
167 |
+
> * Hide plugins name
|
168 |
+
> * Hide themes name
|
169 |
+
> * Hide style IDs and META IDs
|
170 |
+
> * Hide author by ID URL
|
171 |
+
> * Hide WordPress common paths like: wp-content, wp-includes, /plugins, /themes,upgrade.php
|
172 |
+
> * Hide WordPress common files like: upgrade.php, install.php, activate.php, wp-config.php, etc.
|
173 |
+
> * Hide RSD (Really Simple Directory) header
|
174 |
+
> * Hide DNS Prefetch WordPress link
|
175 |
+
> * Hide WordPress Generator Meta
|
176 |
+
> * Add Firewall against SQL/Script injection
|
177 |
+
> * Hide wp-image and wp-post classes
|
178 |
+
> * Hide Emojicons if you don't use them
|
179 |
+
> * Change URLs in ajax calls
|
180 |
+
> * Change URLs in all caches files
|
181 |
+
>
|
182 |
+
> **Mapping Text and URLs: **
|
183 |
+
>
|
184 |
+
> * Change URLs using URL Mapping
|
185 |
+
> * Change classes using Text Mapping
|
186 |
+
> * Change text in CSS and JS files
|
187 |
+
> * Change CDN URLs using CDN Mapping
|
188 |
+
> * Change paths in the cache files
|
189 |
+
> * Change paths in the Sitemap XML
|
190 |
+
> * Change paths in the Robots.txt
|
191 |
+
>
|
192 |
+
> **Disable Paths: **
|
193 |
+
>
|
194 |
+
> * Disable XML-RPC access
|
195 |
+
> * Disable Rest API access
|
196 |
+
> * Disable Embed scripts
|
197 |
+
> * Disable DB-Debug in Frontend
|
198 |
+
> * Disable WLW Manifest scripts
|
199 |
+
> * Disable directory browsing
|
200 |
+
>
|
201 |
+
> **Brute Force Protection: **
|
202 |
+
>
|
203 |
+
> * Brute Force Protection with Math Captcha
|
204 |
+
> * Brute Force Protection with Google reCaptcha
|
205 |
+
> * Custom attempts, timeout, message
|
206 |
+
> * Manage Blacklist and Whitelist IPs
|
207 |
+
>
|
208 |
+
> **Log Activity: **
|
209 |
+
>
|
210 |
+
> * Log user activity
|
211 |
+
> * Set security alerts by email if users login from different IPs
|
212 |
+
> * Set security alerts by email on Brute Force attacks
|
213 |
+
> * Set security alerts by email if users delete articles
|
214 |
+
> * Set security alerts by email if users delete articles
|
215 |
+
> * Security Check with over 30 check points
|
216 |
+
>
|
217 |
+
> **Integrations: **
|
218 |
+
>
|
219 |
+
> * Support for WP Multisite
|
220 |
+
> * Support for Nginx
|
221 |
+
> * Support for IIS
|
222 |
+
> * Support for LiteSpeed
|
223 |
+
> * Support for Apache
|
224 |
+
> * Support for Bitnami Servers
|
225 |
+
> * Support for Inmotion Servers
|
226 |
+
>
|
227 |
+
> * Recommended by Wp Rocket plugin
|
228 |
+
> https://goo.gl/VTPYWV
|
229 |
+
>
|
230 |
+
> **Protection against: **
|
231 |
+
>
|
232 |
+
> * Brute Force Attacks,
|
233 |
+
> * SQL Injection Attacks
|
234 |
+
> * Script Injection Attacks
|
235 |
+
> * Cross Site Scripting (XSS)
|
236 |
+
> * and more
|
237 |
+
>
|
238 |
+
> See all the **Ghost features**:
|
239 |
+
> <a href="https://hidemywpghost.com/wordpress">https://hidemywpghost.com/wordpress</a>
|
240 |
+
>
|
241 |
+
> Hide My WP Ghost **Knowledge Base**:
|
242 |
+
> <a href="https://hidemywpghost.com/knowledge-base/">https://hidemywpghost.com</a>
|
243 |
+
>
|
244 |
+
> Check the Demo Website:
|
245 |
+
> <a href="https://demo.wpplugins.tips/">https://demo.wpplugins.tips/</a>
|
246 |
+
>
|
247 |
+
> Other websites:
|
248 |
+
> <a href="https://hidemywp.app">https://hidemywp.app</a>
|
249 |
+
|
250 |
+
|
251 |
+
Once you use the Hide My WP Ghost plugin you will get custom upload paths, author paths, plugin paths and so on.
|
252 |
+
|
253 |
+
You will also have the ability to remove unwanted classes, hide content, disable scripts and so on.
|
254 |
+
|
255 |
+
Hide My WP Ghost does an exceptional job at helping you get support for WP Multisite, for Bitnami Servers, Apache, LiteSpeed, Nginx, IIS, WP Rocket Plugin and many others.
|
256 |
+
|
257 |
+
It is worth it, so you may want to check it out.
|
258 |
+
|
259 |
+
|
260 |
+
Also, just because you want to add a WordPress Security plugin that hides the common paths, doesn't mean the plugin has to be slow.
|
261 |
+
|
262 |
+
Hide my WP Ghost is very fast, and it won't impact your website in any negative way.
|
263 |
+
|
264 |
+
On the contrary, it will hide the common paths, deliver all the WordPress Security features above and much more while also keeping the site faster at all times!
|
265 |
+
|
266 |
+
<strong>Important!</strong> This is not the Hide My WP Nulled version of the Hide My Wp Codecanyon plugin.
|
267 |
+
|
268 |
+
<strong>Ready To Protect Your Website From Hackers With The Most USER-FRIENDLY WordPress Security Plugin?</strong>
|
269 |
+
|
270 |
+
== Installation ==
|
271 |
+
Manually install the Hide My WP Ghost Lite plugin:
|
272 |
+
Step 1. Log In as an Administrator on your WordPress site.
|
273 |
+
Step 2. In the menu displayed on the left, there is a “Plugins” tab. Click it.
|
274 |
+
Step 3. Now click “Add New”.
|
275 |
+
Step 4. There, you have the “Upload” button. Click the "Upload" button
|
276 |
+
Step 5. Upload the hide-my-wp.zip file.
|
277 |
+
Step 6. After the upload it’s finished, click Activate Plugin.
|
278 |
+
Step 7. Connect the plugin using your email to get a free access token
|
279 |
+
Step 8. Follow the setup guide from: https://hidemywpghost.com/article/how-to-install-hide-my-wp-ghost-lite/
|
280 |
+
Enjoy!
|
281 |
+
|
282 |
+
Install Hide My WP Ghost Lite directly from WordPress directory:
|
283 |
+
Step 1. Log In as an Administrator on your WordPress site.
|
284 |
+
Step 2. In the menu displayed on the left, there is a “Plugins” tab. Click it.
|
285 |
+
Step 3. Search for "Hide My WP".
|
286 |
+
Step 4. After the plugin is shown, click Activate Hide My WP Ghost
|
287 |
+
Step 5. Connect the plugin using your email to get a free access token
|
288 |
+
Step 6. Follow the setup guide from: https://hidemywpghost.com/article/how-to-install-hide-my-wp-ghost-lite/
|
289 |
+
Enjoy!
|
290 |
+
|
291 |
+
[youtube https://youtu.be/zhvRGHMjKic]
|
292 |
+
|
293 |
+
> Hide My WP Ghost **Knowledge Base**:
|
294 |
+
> <a href="https://hidemywpghost.com/knowledge-base/">https://hidemywpghost.com</a>
|
295 |
+
|
296 |
+
|
297 |
+
== Screenshots ==
|
298 |
+
1. Choose the desired level of Security for your site
|
299 |
+
2. Change the URLs wp-admin and wp-login.php to different URLs. This is a very important WordPress Security step.
|
300 |
+
3. Choose to hide the wp-admin and wp-login.php to increase the WordPress Security and hackers will get 404 errors
|
301 |
+
4. Login to your site with the new Hide My WP login URL
|
302 |
+
5. You'll be redirected to the new Hide My WP admin URL
|
303 |
+
6. Activate the Brute Force Protection with Math reCaptcha
|
304 |
+
7. Add custom paths for wp-content, wp-includes, plugins, themes and more
|
305 |
+
8. Run a security check for your website and see all the vulnerabilities
|
306 |
+
|
307 |
+
== Changelog ==
|
308 |
+
= 4.0.10 (31 Aug 2020 ) =
|
309 |
+
* Fixed some errors cause by the last version
|
310 |
+
|
311 |
+
= 4.0.09 (27 Aug 2020 ) =
|
312 |
+
* Update - Added the version hook to remove the versions from CSS and JS
|
313 |
+
* Update - Load the login on WPEngine server with PHP7.4 when the login is set as /login
|
314 |
+
* Update - Detect Flywheel server and add the rules accordingly
|
315 |
+
* Update - Compatibility with IThemes Security on custom login
|
316 |
+
|
317 |
+
= 4.0.08 (13 Aug 2020 ) =
|
318 |
+
* Update - WordPress Security Updates for WP 5.5
|
319 |
+
* Update - Compatibility with WPML
|
320 |
+
* Update - Compatibility with the last versions of the popular plugins
|
321 |
+
|
322 |
+
= 4.0.07 (06 Aug 2020 ) =
|
323 |
+
* Update - Added the option to hide /login and /wp-login individually
|
324 |
+
* Update - Added the option to redirect to a custom URL on logout
|
325 |
+
* Small Bugs Fix
|
326 |
+
|
327 |
+
= 4.0.06 (09 July 2020 ) =
|
328 |
+
* Update - Compatibility with WPEngine + PHP 7
|
329 |
+
* Update - Compatibility with Absolutely Glamorous Custom Admin plugin
|
330 |
+
* Update - Compatibility with Admin Menu Editor Pro plugin
|
331 |
+
* Fix - Small CSS & Warning issues
|
332 |
+
|
333 |
+
= 4.0.05 (30 June 2020 ) =
|
334 |
+
* Update - Compatibility with WPEngine with PHP 7.4
|
335 |
+
* Update - Compatibility with the cache plugins (tested the latest versions)
|
336 |
+
* Update - The Security Check report task
|
337 |
+
* Update - Plugin security on Security Check
|
338 |
+
* Update - The plugins list in Hide My WP
|
339 |
+
* Fixed - Removed the map URL from bootstrap css and js
|
340 |
+
* Fixed - CSS in Hide My WP Settings
|
341 |
+
|
342 |
+
= 4.0.04 (16 June 2020 ) =
|
343 |
+
* Update - Added HMW_RULES_IN_CONFIG and HMW_RULES_IN_WP_RULES to control the rules in the config file
|
344 |
+
* HMW_RULES_IN_CONFIG will add the rules in the top of the config file (default true)
|
345 |
+
* HMW_RULES_IN_WP_RULES will add the ruls in the WordPress config area (default true)
|
346 |
+
* Update - Change the rewrite hook to make sure the rules are added in the WordPress rewrites before flushing them
|
347 |
+
* Update - Compatibility with IThemes Security plugin
|
348 |
+
|
349 |
+
|
350 |
+
= 4.0.03 (04 June 2020) =
|
351 |
+
* Update - RTL Support
|
352 |
+
* Update - Brute Force Protection Filter
|
353 |
+
* Update - Compatibility with more cache plugins like Hummingbird and Cachify
|
354 |
+
* Update - Alert when the rewrites are not added correctly in the config file
|
355 |
+
* Update - WordPress Security Updates for WP 5.4.1
|
356 |
+
* Fixed - Small CSS fixes
|
357 |
+
|
358 |
+
= 4.0.02 (04 May 2020) =
|
359 |
+
* Fix - login redirect for nginx server
|
360 |
+
* Fix - constant warning NONCE_KEY in confi.php
|
361 |
+
* Update - Compatibility with WordFence
|
362 |
+
|
363 |
+
= 4.0.01 (29 April 2020) =
|
364 |
+
* Update - Show the Hide My WP menu only on Network if WP Multisite
|
365 |
+
* Update - Prevent from loading the style from wp-admin in the custom login page
|
366 |
+
* Update - WPEngine 2020 rewrites compatibility
|
367 |
+
* Update - Added option to hide only the IDs and Classes in Hide My WP > Text Mapping
|
368 |
+
* Update - Added the option to remove the WordPress common paths in /robots.txt file
|
369 |
+
* Update - Added the option to remove the WordPress common paths in /sitemap.xml
|
370 |
+
* Update - Compatibility with the most populat plugins and WordPress 5.4.1
|
371 |
+
* Fix - Show 404 files in case the rewrites are not working or Allowoverride is OFF
|
372 |
+
* Fix - Detect correct https or http sheme for Login Preview and validation
|
373 |
+
* Fix - Save the Hide My WP rewrites when other plugin are updating the config file to prevent rewrite errors
|
374 |
+
|
375 |
+
= 3.5.03 (12 March 2020) =
|
376 |
+
* Update - WordPress Security Updates for WP 5.4
|
377 |
+
* Update - Compatibility with Asset CleanUp PRO: Page Speed Booster
|
378 |
+
|
379 |
+
= 3.5.02 (20 Feb 2020) =
|
380 |
+
* Update - Compatibility with more plugins
|
381 |
+
* Update - Compatibility with Asset CleanUp: Page Speed Booster
|
382 |
+
|
383 |
+
= 3.5.01 (20 Ian 2020) =
|
384 |
+
* Update - Remove the toolbar Security Check text - The test is made every when Dashboard
|
385 |
+
* Update - Settings style update
|
386 |
+
* Update - Compatibility with more plugins for Webp compression
|
387 |
+
|
388 |
+
= 3.5.00 (02 Dec 2019) =
|
389 |
+
* Happy New Year! We are happy to present you many new great features.
|
390 |
+
* Update - Compatibility with Flatsome theme
|
391 |
+
* Update - Compatibility with WP Maintenance Mode plugin
|
392 |
+
* Update - WordPress Security Updates for WP 5.3.2
|
393 |
+
* Update - Checked and Updated compatibility with other plugins
|
394 |
+
* Update - Added the Mapping feature in the menu
|
395 |
+
* Update - Added Hide RSD (Really Simple Directory) header
|
396 |
+
* Update - Hide Emojicons
|
397 |
+
* Update - Disable authentification for XML-RPC
|
398 |
+
* Update - Disable Embed Script WP library
|
399 |
+
* Update - Disable WLW Manifest scripts
|
400 |
+
* Update - Disable DB Debug in Frontend
|
401 |
+
|
402 |
+
= 3.4.03 (12 Dec 2019) =
|
403 |
+
* Update - WordPress Security Updates for WP 5.3.1
|
404 |
+
* Fix - Login redirect issue for themes line Classipress, Maxplore
|
405 |
+
* Fix - Restore backup popup visibility
|
406 |
+
|
407 |
+
= 3.4.02 (06 Nov 2019) =
|
408 |
+
* Update - WordPress Security Updates for WP 5.2.4
|
409 |
+
* Update - Checked and Updated compatibility with other plugins
|
410 |
+
* Fix - Fixed the IIS rewrites for login page and ajax
|
411 |
+
|
412 |
+
= 3.4.01 (15 Oct 2019) =
|
413 |
+
* Fix - Update the extension list of files while in Safe Mode
|
414 |
+
* Fix - Fix the Brute Force login with Woocommerce paths
|
415 |
+
* Updated compatibility with the lastest version of the other plugins
|
416 |
+
|
417 |
+
= 3.4.00 (24 Sept 2019) =
|
418 |
+
* Update - Skip activation option
|
419 |
+
* Update - Add monitor option for registered websites
|
420 |
+
* Updated compatibility with more hosting servers
|
421 |
+
* Updated compatibility with more cache plugins
|
422 |
+
* Updated/Fixed compatibility with other security plugins
|
423 |
+
|
424 |
+
= 3.3.10 (09 Sept 2019) =
|
425 |
+
* Update - WordPress Security Updates for WP 5.2.3
|
426 |
+
* Update - Working with custom wordpress cookie names
|
427 |
+
* Update - Checked and Updated compatibility with other plugins
|
428 |
+
* Fix - Add the hmwp cookie in the config to work with custom cookies on hidden paths
|
429 |
+
|
430 |
+
= 3.3.05 (16 Aug 2019) =
|
431 |
+
* Update - Remove Power By header from cache plugins
|
432 |
+
* Update - Compatibility with more themes and plugins
|
433 |
+
* Update - Update the notification bar
|
434 |
+
* Fixed - Hide My WP Menu for WP Mutlisite when it's configured from network
|
435 |
+
|
436 |
+
= 3.3.04 (07 Aug 2019) =
|
437 |
+
* Update - Change active plugins order to change admin_url and login_url before other plugins use it
|
438 |
+
* Update - Fix initial settings for Safe and Ghost modes
|
439 |
+
* Update - Compatibility with Google Cloud Hosting
|
440 |
+
|
441 |
+
= 3.3.03 (31 July 2019) =
|
442 |
+
* Update - compatibility style with Autoptimizer
|
443 |
+
* Update - compatibility with Godaddy Hosting
|
444 |
+
* Update - Added support for webp files
|
445 |
+
* Fixed - wp-admin issue on Godaddy hostin plan
|
446 |
+
* Fixed - cache issue with Autoptimizer plugin
|
447 |
+
|
448 |
+
= 3.3.02 (05 July 2019) =
|
449 |
+
* Update - added new paths into the restricted list to avoid rewrite errors
|
450 |
+
* Update - compatibility style with Wordfence
|
451 |
+
* Update - compatibility style with IP2Location Country Blocker
|
452 |
+
* Update - compatibility style with Autoptimizer
|
453 |
+
* Update - compatibility style with Squirrly SEO
|
454 |
+
* Update - compatibility style with Yoast SEO
|
455 |
+
* Update - add login URL check in Security Checking tool
|
456 |
+
* Update - add admin URL check in Security Checking tool
|
457 |
+
|
458 |
+
= 3.3.01 (15 Jun 2019) =
|
459 |
+
* Update - Added the define('HMW_RULES_IN_WP_RULES', false); if you want to remove HMW Rules from WordPress rewrit definition in htaccess
|
460 |
+
* Don't show HMW update when new plugins and themes are added if the themes names and plugins names are not changed
|
461 |
+
* Show 100% security status if all the security tasks are completed
|
462 |
+
* Don't show the speedometer if the security check didn't run yet
|
463 |
+
|
464 |
+
= 3.3.00 (14 Jun 2019) =
|
465 |
+
* Update - Added the option to change all the plugins name
|
466 |
+
* Update - Added the option to change all the themes name
|
467 |
+
* Update - Added Dashboard Security Widget
|
468 |
+
* Update - Show the security level and the list of tasks to fix the security issues
|
469 |
+
* Update - Added the option to check the security after the settings are saved
|
470 |
+
* Update - Added help link for each plugin section
|
471 |
+
* Update - Prevent other plugins to load the style in Hide My Wp
|
472 |
+
|
473 |
+
= 3.2.02 (06 Jun 2019) =
|
474 |
+
* Update - Empty the wordpress_logged_address cookie on user logout
|
475 |
+
|
476 |
+
= 3.2.01 (24 May 2019) =
|
477 |
+
* Update - WordPress Security Updates for WP 5.2.1
|
478 |
+
* Fixed small bugs
|
479 |
+
|
480 |
+
= 3.2.00 (10 May 2019) =
|
481 |
+
* Update - Updated Hide My WP Advanced options
|
482 |
+
* Update - Added Fix XML files in Advanced Options
|
483 |
+
* Update - Compatible with Gutenberg
|
484 |
+
* Update - Compatible with All In One WP Security & Firewall
|
485 |
+
* Update - Compatible with iThemes Security
|
486 |
+
* Update - Compatible with Sucuri Security
|
487 |
+
* Update - Compatible with Wordfence Security
|
488 |
+
* Update - Compatible with BulletProof Security
|
489 |
+
* Update - Compatible with BruteProtect
|
490 |
+
* Update - Compatible with Beaver Builder
|
491 |
+
* Update - Compatible with Elementor Editor
|
492 |
+
* Update - Compatible with Thrive Architect
|
493 |
+
* Update - Compatible with Woocommerce
|
494 |
+
* Update - Compatible with Yoast SEO
|
495 |
+
* Update - Compatible with Squirrly SEO
|
496 |
+
* Fix - Don't load the buffer for files
|
497 |
+
* Fix - Relative to Absolute URL fix in CSS style
|
498 |
+
|
499 |
+
= 3.1.01 (03 May 2019) =
|
500 |
+
* Update - Added the option to change the paths in ajax calls in Hide My WP > Permalinks
|
501 |
+
* Update - WordPress Security Updates for WP 5.2
|
502 |
+
* Fix - Remove comments from source code without affecting the IE and CDATA
|
503 |
+
|
504 |
+
= 3.1.00 (24 Apr 2019) =
|
505 |
+
* Fix - Rewrite paths in ajax when custom wp-content set
|
506 |
+
* Fix - htaccess rules fix when use set custom wp-content outside Hide My WP
|
507 |
+
|
508 |
+
= 3.0.08 (08 Apr 2019) =
|
509 |
+
* Update - Hide the custom wp-content set with WP_CONTENT_DIR constant in wp-config.php
|
510 |
+
* Update - Hide the custom uploads directory set with UPLOADS constant in wp-config.php
|
511 |
+
* Update - Set Stict Login for the custom login path by default to prevent unusual redirects
|
512 |
+
* Fix - Hide the old admin ajax after customization
|
513 |
+
|
514 |
+
= 3.0.07 (28 Mar 2019) =
|
515 |
+
* Update - WordPress Security Updates for WP 5.1.1
|
516 |
+
* Update - Checked/Updated compatibility check with more plugins and themes
|
517 |
+
|
518 |
+
= 3.0.06 (23 Feb 2019) =
|
519 |
+
* Update - WordPress Security Updates for WP 5.1
|
520 |
+
* Fix - Config file for Nginx servers
|
521 |
+
|
522 |
+
= 3.0.05 (07 Feb 2019) =
|
523 |
+
* Update - Security Updates
|
524 |
+
* Update - Compatibility check with other plugins and themes
|
525 |
+
* Fix - Compatibility with Wp-Rocket last version
|
526 |
+
* Fix - Compatibility with Avada Theme last version
|
527 |
+
|
528 |
+
= 3.0.04 (18 Jan 2019) =
|
529 |
+
* Update - Security updates for 2019 Jan
|
530 |
+
* Fix - Remove the wp-image from Mapping feature to prevent breaking the banner for some WP Themes
|
531 |
+
* Fix - Update rewrite rules when settings are saved
|
532 |
+
|
533 |
+
= 3.0.03 (12 Jan 2019) =
|
534 |
+
* Fix - Hide My WP Hidden Notifications
|
535 |
+
|
536 |
+
= 3.0.02 (10 Jan 2019) =
|
537 |
+
* Update - WordPress Security Updates for WP 5.0.3
|
538 |
+
* Fix - Prevent adding cache options when a cache plugin is already installed
|
539 |
+
|
540 |
+
= 3.0.01 (29 Dec 2018) =
|
541 |
+
* Update - WordPress Security Updates for WP 5.0.2
|
542 |
+
* Fix - Loading the theme style for Nginx serves when the rules can't be set
|
543 |
+
* Fix - Compatibility with the last version of WP-Rocket
|
544 |
+
* Fix - Compatibility with Avada theme
|
545 |
+
* Fix - When defining the UPLOADS constant in wp-config.php
|
546 |
+
|
547 |
+
= 3.0.00 (08 Dec 2018) =
|
548 |
+
* Update - WordPress Security Updates for WP 5.0
|
549 |
+
* Update - Hide My WP is compatible with WordPress 5.0
|
550 |
+
|
551 |
+
= 2.0.16 (04 Dec 2018) =
|
552 |
+
* Fix - Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'return false;'
|
553 |
+
* Fix - Woocommerce frontpage login
|
554 |
+
* Fix - Multiple subfolders install issue
|
555 |
+
* Fix - Replacing the paths in javascript and styles
|
556 |
+
* Fix - Optimizing the rewrite rules when going in safe mode
|
557 |
+
|
558 |
+
= 2.0.15 (25 Nov 2018) =
|
559 |
+
* Update - Added FORCEPATH option to rename the images paths in post editor and builders
|
560 |
+
* Fix - Font loading problem while in safe mode rewrite
|
561 |
+
* Fix - Prevent removing the Woocommerce rules on setting save proccess
|
562 |
+
* Fix - Broken URLs when the paths are similar and can create confusion
|
563 |
+
* Fix - Prevent adding short paths and braking the website frontend
|
564 |
+
|
565 |
+
= 2.0.14 (12 Nov 2018) =
|
566 |
+
* Update - Compatible with the last version of WP-Rocket
|
567 |
+
* Update - Tested and Fixed compatibility with WP Engine hosting server
|
568 |
+
* Update - Compatible with Woodmart theme
|
569 |
+
|
570 |
+
= 2.0.12 (10 Nov 2018) =
|
571 |
+
* Update - Reload the Nginx config on settings save if possible
|
572 |
+
* Update - Compatible with more themes and plugins
|
573 |
+
* Fix - small bugs
|
574 |
+
|
575 |
+
= 2.0.11 (02 Nov 2018) =
|
576 |
+
* Update - Rewrite option for Nginx, Apache and IIS without config
|
577 |
+
* Update - Added the Safe Mode option on rewrite errors
|
578 |
+
* Update - Text Mapping to change texts in source code
|
579 |
+
* Update - Security updates for WP 5
|
580 |
+
|
581 |
+
= 2.0.10 (30 Oct 2018) =
|
582 |
+
* Update - Compatible with Gutenberg 4
|
583 |
+
* Fix - jQuery Deferrer on WP-Rocket
|
584 |
+
* Fix - Email signup validation
|
585 |
+
|
586 |
+
= 2.0.09 (20 Oct 2018) =
|
587 |
+
* Fix - Corrected the Tools loading
|
588 |
+
* Fix - Add decoded trail slash on plugin rewrites
|
589 |
+
|
590 |
+
= 2.0.08 (15 Oct 2018) =
|
591 |
+
* Fix - Compatibility with WP Fastest Cache
|
592 |
+
* Fix - Add decoded trail slash on plugin rewrites
|
593 |
+
|
594 |
+
= 2.0.07 (9 Oct 2018) =
|
595 |
+
* Fix - Memory check error when the memory is over 1G
|
596 |
+
* Fix - Htaccess error when the plugin has spaces in the name
|
597 |
+
|
598 |
+
= 2.0.06 (1 Oct 2018) =
|
599 |
+
* Update - Compatibility with top WordPress cache plugins
|
600 |
+
* Update - Compatibility with top WordPress themes
|
601 |
+
* Update - Compatibility with other WordPress security plugins
|
602 |
+
* Fix - Minor bugs
|
603 |
+
|
604 |
+
= 2.0.05 (25 Sept 2018) =
|
605 |
+
* Fix - Memory limit error wne the memory is under 64MB
|
606 |
+
* Fix - Setting other paths when the admin or login paths are already set by other plugins or theme
|
607 |
+
* Update - Security Check table
|
608 |
+
* Update - Compatibility check with top WordPress plugins
|
609 |
+
|
610 |
+
= 2.0.04 (21 Sept 2018) =
|
611 |
+
* Update - Compatible with Gutenberg 3.8
|
612 |
+
* Update - Compatible with WP Super Cache 1.6
|
613 |
+
* Update - Compatible with All In One WP Security & Firewall 4.3
|
614 |
+
* Update - Compatible with iThemes Security 7.1
|
615 |
+
* Update - Compatible with Beaver Builder 2.1
|
616 |
+
* Update - Compatible with Elementor Editor 2.2
|
617 |
+
* Update - Compatible with Thrive Architect 2
|
618 |
+
* Update - Compatible with Woocommerce 3.4
|
619 |
+
* Fix - Compatibility with WP-Rocket
|
620 |
+
* Fix - Compatibility with Autoptimize
|
621 |
+
* Fix - Rewrite paths when moving from Lite mode to Default in Apache, Nginx and IIS
|
622 |
+
* Fix - Restore settings didn't save the config rewrites
|
623 |
+
|
624 |
+
= 2.0.03 (15 Sept 2018) =
|
625 |
+
* Update - Compatibility with WP Super Cache CDN
|
626 |
+
* Update - Checked and fixed the compatibility with Woocommerce
|
627 |
+
* Update - Cookie Test for WP Multisite
|
628 |
+
* Update - Security updates for SQL Injection and Script Injection
|
629 |
+
|
630 |
+
|
631 |
+
= 2.0.02 (03 Sept 2018) =
|
632 |
+
* Update - Made Security Check Notification optional
|
633 |
+
* Fixed - Don't change the paths on update from version 1 to 2
|
634 |
+
* Fixed - remove wp-config.php admin cookie line if it remains from other plugins
|
635 |
+
|
636 |
+
= 2.0.01 (10 Aug 2018) =
|
637 |
+
* Update - New Settings design
|
638 |
+
* Update - Works with WP Multisite
|
639 |
+
* Update - Works with Apache, Nginx, IIS, and Litespeed
|
640 |
+
* Update - Firewall Against Script Injection
|
641 |
+
* Update - Customize the Hide My Wp safe link
|
642 |
+
* Update - Security Check and options to fix the issues
|
643 |
+
* Update - Install and Activate recommended plugins
|
644 |
+
|
645 |
+
Security
|
646 |
+
Ocultar Mi WP - Plugin de seguridad de WordPress
|
647 |
+
Ocultar meu WP - Segurança do WordPress
|
648 |
+
Cacher mon WordPress - Plugin de sécurité WordPress
|
649 |
+
Verstecken Sie mein WordPress - WordPress Sicherheits-Plugin
|
650 |
+
Hide My WP - WordPress Security Plugin
|
651 |
+
Security Plugin
|
652 |
+
Hide my wp free download
|
653 |
+
Hide my wp login url
|
654 |
+
|
655 |
+
== Frequently Asked Questions ==
|
656 |
+
= Does this plugin work on WP Multisite? =
|
657 |
+
|
658 |
+
Yes, the plugin works on WP Multisite and you will configure it for the entire network.
|
659 |
+
|
660 |
+
The plugin also works with Apache, Nginx, IIS and LiteSpeed servers
|
661 |
+
|
662 |
+
= Is Hide My WP Ghost working on Nginx Server? =
|
663 |
+
|
664 |
+
Yes, the plugin works on Nginx Server and you will be guided for the redirects and nginx.conf settings.
|
665 |
+
|
666 |
+
The plugin also works with Apache, IIS and LiteSpeed servers
|
667 |
+
|
668 |
+
= My website theme is not loading correctly after I change the paths. What should I do? =
|
669 |
+
|
670 |
+
This issue is most likely from setting the rewrite rules.
|
671 |
+
|
672 |
+
1. Make sure you purge the cache if you have cache plugins after you save the Hide My WP Ghost settings.
|
673 |
+
2. In case the .htaccess (for apache) or nginx.conf (for Nginx) or web.config (for IIS) are not writable you need to add the rewrites manually.
|
674 |
+
3. If you have Nginx server make sure you reload the Nginx after you save the settings.
|
675 |
+
4. If the theme is still not loading okay, contact us and we can set up the plugin for you for free.
|
676 |
+
|
677 |
+
You can find useful information here: https://hidemywpghost.com/knowledge-base/
|
678 |
+
|
679 |
+
= I forgot the custom login and admin URLs. What now? =
|
680 |
+
|
681 |
+
Don't panic.
|
682 |
+
|
683 |
+
You can still access your site with the secure parameter
|
684 |
+
http://domainname/wp-login.php?hmw_disable=[your_code]
|
685 |
+
|
686 |
+
= Locked out of my site! I set the plugin, and after I logged out I couldn't get back in =
|
687 |
+
|
688 |
+
Rename the plugin directory /wp-content/plugins/hide-my-wp so that the plugins won't hide the wp-login.php path anymore
|
689 |
+
|
690 |
+
Login using http://domainname/wp-login.php and activate the plugin again.
|
691 |
+
|
692 |
+
Make sure you remember the secure parameter and it will be much easier.
|
693 |
+
|
694 |
+
= Does Hide My WP Ghost work for WordPress.com website? =
|
695 |
+
|
696 |
+
Because of the Jetpack security in WordPress.com website, Hide My WP Ghost can't change the admin and login paths.
|
697 |
+
|
698 |
+
If you already activated Hide My Wp on WordPress.com, remove the directory /wp-content/plugins/hide-my-wp to disable the plugin.
|
699 |
+
|
700 |
+
= Will this plugin work if I don't have custom permalinks on my site? =
|
701 |
+
|
702 |
+
No. You need to have custom permalinks set to 'on' in Settings > Permalinks.
|
703 |
+
|
704 |
+
You will get a notification in the Settings page if something is not setup right.
|
705 |
+
|
706 |
+
|
707 |
+
= What do I need to do before I deactivate the plugin? =
|
708 |
+
|
709 |
+
It's better to switch to Default Mode in Settings > Hide My WP.
|
710 |
+
|
711 |
+
If you don't, the plugin will automatically change your site back to the safe URLs and it will tell you what to do if you don't have write permission for the config files
|
712 |
+
|
713 |
+
_______________________________________________________________________
|
714 |
+
|
715 |
+
= Is this Plugin free of charge? =
|
716 |
+
|
717 |
+
Yes. The Lite features of Hide My WP Ghost plugin will always be free.
|
718 |
+
|
719 |
+
We will include all the required WordPress Security updates.
|
720 |
+
|
721 |
+
To unlock all the features, please visit: <a href="https://wpplugins.tips/wordpress">https://wpplugins.tips/wordpress</a>
|
722 |
+
|
723 |
+
= How to set the plugin on Nginx server? =
|
724 |
+
|
725 |
+
Please follow this tutorial step by step to set up the Hide My WP Ghost for Nginx server:
|
726 |
+
|
727 |
+
<a href="https://hidemywpghost.com/how-to-setup-hide-my-wp-on-nginx-server/" target="_blank">Setup Hide My WP Ghost on Nginx Server</a>
|
728 |
+
<a href="https://hidemywpghost.com/how-to-configure-hide-my-wp-on-nginx-web-server-with-virtual-private-server/" target="_blank">Configure Hide My Wp Ghost On Nginx Web Server With Virtual Private Server</a>
|
729 |
+
|
730 |
+
= How to Hide Your Site From WordPress Theme Detectors? =
|
731 |
+
|
732 |
+
Changing the common WordPress paths will not guarantee that the WordPress CMS is completely hidden.
|
733 |
+
|
734 |
+
The old paths are still accessible and hackers are still able to inject SQL and Javascript into vulnerable installed plugins and themes.
|
735 |
+
|
736 |
+
Read more: <a href="https://hidemywpghost.com/how-to-hide-from-wordpress-theme-detectors/" target="_blank">How to Hide Your Site From WordPress Theme Detectors</a>
|
737 |
+
|
738 |
+
= Is this plugin enough to protect my website from all hackers? =
|
739 |
+
|
740 |
+
The Free version of Hide My WP Ghost hides the wp-admin and wp-login as described but will not protect you from all hacker attacks.
|
741 |
+
|
742 |
+
|
743 |
+
Hide My WP Ghost hides all the common paths and patterns used but bots to detect that you are using WordPress.
|
744 |
+
|
745 |
+
We also recommend you to install Premium Themes and Plugins and not just any WordPress plugin because the free plugins are usually made by beginners and they don't have security knowledge.
|
uninstall.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Called on plugin uninstall
|
5 |
+
*/
|
6 |
+
if (!defined('ABSPATH') && !defined('WP_UNINSTALL_PLUGIN')) {
|
7 |
+
exit();
|
8 |
+
}
|
9 |
+
|
10 |
+
/* Call config files */
|
11 |
+
require(dirname(__FILE__) . '/config/config.php');
|
12 |
+
|
13 |
+
/* Delete the record from database */
|
14 |
+
delete_option(HMW_OPTION);
|
15 |
+
delete_option(HMW_OPTION_SAFE);
|
view/Advanced.php
ADDED
@@ -0,0 +1,245 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if (HMW_Classes_Tools::isPermalinkStructure()) { ?>
|
2 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
3 |
+
<?php echo $view->getAdminTabs(HMW_Classes_Tools::getValue('tab', 'hmw_permalinks')); ?>
|
4 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
5 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
6 |
+
<form method="POST">
|
7 |
+
<?php wp_nonce_field('hmw_advsettings', 'hmw_nonce') ?>
|
8 |
+
<input type="hidden" name="action" value="hmw_advsettings"/>
|
9 |
+
|
10 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
11 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('Redirect Settings', _HMW_PLUGIN_NAME_); ?>:</h3>
|
12 |
+
<div class="card-body">
|
13 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
14 |
+
<div class="col-sm-4 p-1">
|
15 |
+
<div class="font-weight-bold"><?php _e('Redirect hidden paths', _HMW_PLUGIN_NAME_); ?>:</div>
|
16 |
+
</div>
|
17 |
+
<div class="col-sm-8 p-0 input-group">
|
18 |
+
<select name="hmw_url_redirect" class="form-control bg-input mb-1">
|
19 |
+
<option value="." <?php selected('.', HMW_Classes_Tools::getOption('hmw_url_redirect'), true) ?>><?php _e("Front page", _HMW_PLUGIN_NAME_) ?></option>
|
20 |
+
<option value="404" <?php selected('404', HMW_Classes_Tools::getOption('hmw_url_redirect'), true) ?> ><?php _e("404 page", _HMW_PLUGIN_NAME_) ?></option>
|
21 |
+
<?php
|
22 |
+
$pages = get_pages();
|
23 |
+
foreach ($pages as $page) {
|
24 |
+
$option = '<option value="' . $page->post_name . '" ' . selected($page->post_name, HMW_Classes_Tools::getOption('hmw_url_redirect'), true) . '>';
|
25 |
+
$option .= $page->post_title;
|
26 |
+
$option .= '</option>';
|
27 |
+
echo $option;
|
28 |
+
} ?>
|
29 |
+
</select>
|
30 |
+
</div>
|
31 |
+
<div class="p-1">
|
32 |
+
<div class="text-black-50"><?php echo __('Redirect the protected paths /wp-admin, /wp-login to Front Page or 404 page.', _HMW_PLUGIN_NAME_); ?></div>
|
33 |
+
<div class="text-black-50"><?php echo __('You can create a new page and come back to choose to redirect to that page', _HMW_PLUGIN_NAME_); ?></div>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
|
37 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
38 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
39 |
+
<?php _e('Custom Safe URL Param', _HMW_PLUGIN_NAME_); ?>:
|
40 |
+
<div class="small text-black-50"><?php _e("eg. disable_url, safe_url", _HMW_PLUGIN_NAME_); ?></div>
|
41 |
+
</div>
|
42 |
+
<div class="col-sm-8 p-0 input-group">
|
43 |
+
<input type="text" class="form-control bg-input" name="hmw_disable_name" value="<?php echo HMW_Classes_Tools::getOption('hmw_disable_name') ?>" placeholder="<?php echo HMW_Classes_Tools::getOption('hmw_disable_name') ?>"/>
|
44 |
+
</div>
|
45 |
+
<div class="col-sm-12 pt-4">
|
46 |
+
<div class="small text-black-50 text-center"><?php _e("The Safe URL will set all the settings to default. Use it only if you're locked out", _HMW_PLUGIN_NAME_); ?></div>
|
47 |
+
<div class="text-danger text-center"><?php echo '<strong>' . __("Safe URL:", _HMW_PLUGIN_NAME_) . '</strong>' . ' ' . site_url() . "/wp-login.php?" . HMW_Classes_Tools::getOption('hmw_disable_name') . "=" . HMW_Classes_Tools::getOption('hmw_disable') ?></div>
|
48 |
+
</div>
|
49 |
+
</div>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
53 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('Compatibility Settings', _HMW_PLUGIN_NAME_); ?>:</h3>
|
54 |
+
<div class="card-body">
|
55 |
+
|
56 |
+
<div class="col-sm-12 row mb-1 ml-2">
|
57 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
58 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
59 |
+
<input type="hidden" name="hmw_fix_relative" value="0"/>
|
60 |
+
<input type="checkbox" id="hmw_fix_relative" name="hmw_fix_relative" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_fix_relative') ? 'checked="checked"' : '') ?> value="1"/>
|
61 |
+
<label for="hmw_fix_relative"><?php _e('Fix Relative URLs', _HMW_PLUGIN_NAME_); ?></label>
|
62 |
+
<a href="https://hidemywpghost.com/kb/advanced-wp-security/#fix_relative_urls" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
63 |
+
<div class="offset-1 text-black-50"><?php echo sprintf(__('Convert links like /wp-content/* into %s/wp-content/*.', _HMW_PLUGIN_NAME_), site_url()); ?></div>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
</div>
|
67 |
+
|
68 |
+
<div class="col-sm-12 row mb-1 ml-2">
|
69 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
70 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
71 |
+
<input type="hidden" name="hmw_shutdown_load" value="0"/>
|
72 |
+
<input type="checkbox" id="hmw_shutdown_load" name="hmw_shutdown_load" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_shutdown_load') ? 'checked="checked"' : '') ?> value="1"/>
|
73 |
+
<label for="hmw_shutdown_load"><?php _e('Fix Sitemaps XML', _HMW_PLUGIN_NAME_); ?></label>
|
74 |
+
<a href="https://hidemywpghost.com/kb/advanced-wp-security/#fix_sitemap_xml" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
75 |
+
<div class="offset-1 text-black-50"><?php echo sprintf(__('Double check the Sitemap XML files and make sure the paths are changed.', _HMW_PLUGIN_NAME_), site_url()); ?></div>
|
76 |
+
</div>
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
+
|
80 |
+
<div class="col-sm-12 row mb-1 ml-2">
|
81 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
82 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
83 |
+
<input type="hidden" name="hmw_robots" value="0"/>
|
84 |
+
<input type="checkbox" id="hmw_robots" name="hmw_robots" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_robots' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
85 |
+
<label for="hmw_robots"><?php _e( 'Fix Robots.txt', _HMW_PLUGIN_NAME_ ); ?></label>
|
86 |
+
<a href="https://hidemywpghost.com/kb/advanced-wp-security/#fix_robots_txt" target="_blank" class="d-inline-block ml-2"><i class="fa fa-question-circle"></i></a>
|
87 |
+
<div class="offset-1 text-black-50"><?php echo __( 'Hide WordPress paths from robots.txt file', _HMW_PLUGIN_NAME_ ); ?></div>
|
88 |
+
</div>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
|
92 |
+
<div class="col-sm-12 row mb-1 ml-2">
|
93 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
94 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
95 |
+
<input type="hidden" name="hmw_laterload" value="0"/>
|
96 |
+
<input type="checkbox" id="hmw_laterload" name="hmw_laterload" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_laterload') ? 'checked="checked"' : '') ?> value="1"/>
|
97 |
+
<label for="hmw_laterload"><?php _e('Late Loading', _HMW_PLUGIN_NAME_); ?></label>
|
98 |
+
<a href="https://hidemywpghost.com/kb/advanced-wp-security/#late_loading" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
99 |
+
<div class="offset-1 text-black-50"><?php echo __('Load HMW after all plugins are loaded. Useful for CDN plugins (eg. CDN Enabler).', _HMW_PLUGIN_NAME_); ?></div>
|
100 |
+
<div class="offset-1 text-black-50"><?php echo __('(only if other cache plugins request this)', _HMW_PLUGIN_NAME_); ?></div>
|
101 |
+
</div>
|
102 |
+
</div>
|
103 |
+
</div>
|
104 |
+
|
105 |
+
<div class="col-sm-12 row mb-1 ml-2">
|
106 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
107 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
108 |
+
<input type="hidden" name="hmw_remove_third_hooks" value="0"/>
|
109 |
+
<input type="checkbox" id="hmw_remove_third_hooks" name="hmw_remove_third_hooks" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_remove_third_hooks') ? 'checked="checked"' : '') ?> value="1"/>
|
110 |
+
<label for="hmw_remove_third_hooks"><?php _e('Clean Login Page', _HMW_PLUGIN_NAME_); ?></label>
|
111 |
+
<a href="https://hidemywpghost.com/kb/advanced-wp-security/#clean_login_page" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
112 |
+
<div class="offset-1 text-black-50"><?php _e('Cancel the login hooks from other plugins and themes to prevent them from changing the Hide My WordPress redirects.', _HMW_PLUGIN_NAME_); ?><?php _e('(not recommended)', _HMW_PLUGIN_NAME_); ?></div>
|
113 |
+
</div>
|
114 |
+
</div>
|
115 |
+
</div>
|
116 |
+
|
117 |
+
|
118 |
+
</div>
|
119 |
+
</div>
|
120 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
121 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('Cache Settings', _HMW_PLUGIN_NAME_); ?>:</h3>
|
122 |
+
<div class="card-body">
|
123 |
+
|
124 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
125 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
126 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
127 |
+
<input type="hidden" name="hmw_security_alert" value="0"/>
|
128 |
+
<input type="checkbox" id="hmw_security_alert" name="hmw_security_alert" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_security_alert') ? 'checked="checked"' : '') ?> value="1"/>
|
129 |
+
<label for="hmw_security_alert"><?php _e('Security Check Notification', _HMW_PLUGIN_NAME_); ?></label>
|
130 |
+
<a href="https://hidemywpghost.com/kb/advanced-wp-security/#email_notification" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
131 |
+
<div class="offset-1 text-black-50"><?php echo __("Show Security Check notification when it's not checked every week.", _HMW_PLUGIN_NAME_); ?></div>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
</div>
|
135 |
+
|
136 |
+
<?php if (!HMW_Classes_Tools::isPluginActive('wp-rocket/wp-rocket.php') &&
|
137 |
+
!HMW_Classes_Tools::isPluginActive('wp-super-cache/wp-cache.php') &&
|
138 |
+
!HMW_Classes_Tools::isPluginActive('wp-fastest-cache/wpFastestCache.php') &&
|
139 |
+
!HMW_Classes_Tools::isPluginActive('powered-cache/powered-cache.php') &&
|
140 |
+
!HMW_Classes_Tools::isPluginActive('w3-total-cache/w3-total-cache.php') &&
|
141 |
+
!HMW_Classes_Tools::isPluginActive('autoptimize/autoptimize.php')) { ?>
|
142 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
143 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
144 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
145 |
+
<input type="hidden" name="hmw_file_cache" value="0"/>
|
146 |
+
<input type="checkbox" id="hmw_file_cache" name="hmw_file_cache" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_file_cache') ? 'checked="checked"' : '') ?> value="1"/>
|
147 |
+
<label for="hmw_file_cache"><?php _e('Optimize CSS and JS files', _HMW_PLUGIN_NAME_); ?></label>
|
148 |
+
<div class="offset-1 text-black-50"><?php echo __('Cache CSS, JS and Images to increase the frontend loading speed.', _HMW_PLUGIN_NAME_); ?></div>
|
149 |
+
<div class="offset-1 text-black-50"><?php echo sprintf(__('Check the website loading speed with %sPingdom Tool%s', _HMW_PLUGIN_NAME_), '<a href="https://tools.pingdom.com/" target="_blank">', '</a>'); ?></div>
|
150 |
+
</div>
|
151 |
+
</div>
|
152 |
+
</div>
|
153 |
+
<?php } ?>
|
154 |
+
</div>
|
155 |
+
</div>
|
156 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
157 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('Notification Settings', _HMW_PLUGIN_NAME_); ?>:</h3>
|
158 |
+
<div class="card-body">
|
159 |
+
|
160 |
+
<div class="col-sm-12 row mb-1 ml-2">
|
161 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
162 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
163 |
+
<input type="hidden" name="hmw_send_email" value="0"/>
|
164 |
+
<input type="checkbox" id="hmw_send_email" name="hmw_send_email" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_send_email') ? 'checked="checked"' : '') ?> value="1"/>
|
165 |
+
<label for="hmw_send_email"><?php _e('Email notification', _HMW_PLUGIN_NAME_); ?></label>
|
166 |
+
<div class="offset-1 text-black-50"><?php _e('Send me an email with the changed admin and login URLs', _HMW_PLUGIN_NAME_); ?></div>
|
167 |
+
</div>
|
168 |
+
</div>
|
169 |
+
|
170 |
+
|
171 |
+
</div>
|
172 |
+
|
173 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
174 |
+
<div class="col-sm-4 p-1 font-weight-bold">
|
175 |
+
<?php _e('Email Address', _HMW_PLUGIN_NAME_); ?>:
|
176 |
+
</div>
|
177 |
+
<div class="col-sm-8 p-0 input-group input-group">
|
178 |
+
<?php
|
179 |
+
$email = HMW_Classes_Tools::getOption('hmw_email_address');
|
180 |
+
if ($email == '') {
|
181 |
+
global $current_user;
|
182 |
+
$email = $current_user->user_email;
|
183 |
+
}
|
184 |
+
?>
|
185 |
+
<input type="text" class="form-control bg-input" name="hmw_email_address" value="<?php echo $email ?>" placeholder="Email address ..."/>
|
186 |
+
</div>
|
187 |
+
</div>
|
188 |
+
</div>
|
189 |
+
</div>
|
190 |
+
<div class="col-sm-12 m-0 p-2 bg-light text-center" style="position: fixed; bottom: 0; right: 0; z-index: 100; box-shadow: 0px 0px 8px -3px #444;">
|
191 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e('Save', _HMW_PLUGIN_NAME_); ?></button>
|
192 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
193 |
+
</div>
|
194 |
+
</form>
|
195 |
+
</div>
|
196 |
+
<div class="hmw_col hmw_col_side">
|
197 |
+
<div class="card col-sm-12 p-0">
|
198 |
+
<div class="card-body f-gray-dark text-center">
|
199 |
+
<h3 class="card-title"><?php echo __('Love Hide My WP?', _HMW_PLUGIN_NAME_); ?></h3>
|
200 |
+
<div class="card-text text-muted">
|
201 |
+
<h1>
|
202 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="font-size: 80px"><i class="fa fa-heart text-danger"></i></a>
|
203 |
+
</h1>
|
204 |
+
<?php echo __('Please help us and support our plugin on WordPress.org', _HMW_PLUGIN_NAME_) ?>
|
205 |
+
</div>
|
206 |
+
<div class="card-text text-info m-3">
|
207 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" class="btn rounded-0 btn-success btn-lg px-4"><?php echo __('Rate Hide My WP', _HMW_PLUGIN_NAME_); ?></a>
|
208 |
+
</div>
|
209 |
+
<div class="card-text text-muted">
|
210 |
+
<?php echo __('Contact us after you left the review cause we have a surprise for you.', _HMW_PLUGIN_NAME_) ?>
|
211 |
+
<h1>
|
212 |
+
<a href="https://hidemywpghost.com/contact/" target="_blank" style="font-size: 80px"><i class="fa fa-gift text-info"></i></a>
|
213 |
+
</h1>
|
214 |
+
</div>
|
215 |
+
</div>
|
216 |
+
</div>
|
217 |
+
|
218 |
+
<div class="hmw_col hmw_col_side">
|
219 |
+
<div class="card col-sm-12 p-0">
|
220 |
+
<div class="card-body f-gray-dark text-center">
|
221 |
+
<h3 class="card-title"><?php _e('Check Your Website', _HMW_PLUGIN_NAME_); ?></h3>
|
222 |
+
<div class="card-text text-muted">
|
223 |
+
<?php echo __('Check if your website is secured with the current settings.', _HMW_PLUGIN_NAME_) ?>
|
224 |
+
</div>
|
225 |
+
<div class="card-text text-info m-3">
|
226 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl('hmw_securitycheck') ?>" class="btn rounded-0 btn-warning btn-lg text-white px-5 securitycheck"><?php _e('Security Check', _HMW_PLUGIN_NAME_); ?></a>
|
227 |
+
</div>
|
228 |
+
<div class="card-text text-muted small">
|
229 |
+
<?php echo __('Make sure you save the settings and empty the cache before checking your website with our tool.', _HMW_PLUGIN_NAME_) ?>
|
230 |
+
</div>
|
231 |
+
|
232 |
+
<div class="card-text m-3 ">
|
233 |
+
<a class="bigbutton text-center" href="https://hidemywpghost.com/knowledge-base/" target="_blank"><?php echo __("Learn more about Hide My WP", _HMW_PLUGIN_NAME_); ?></a>
|
234 |
+
</div>
|
235 |
+
</div>
|
236 |
+
</div>
|
237 |
+
|
238 |
+
|
239 |
+
<?php echo $view->getView('Support') ?>
|
240 |
+
|
241 |
+
</div>
|
242 |
+
</div>
|
243 |
+
</div>
|
244 |
+
</div>
|
245 |
+
<?php }
|
view/Backup.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs(HMW_Classes_Tools::getValue('tab', 'hmw_permalinks')); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
5 |
+
|
6 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
7 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('Backup/Restore Settings', _HMW_PLUGIN_NAME_); ?>:</h3>
|
8 |
+
<div class="card-body">
|
9 |
+
<div class="text-black-50 mb-2"><?php _e('Click Backup and the download will start automatically. You can use the Backup for all your websites.', _HMW_PLUGIN_NAME_); ?></div>
|
10 |
+
|
11 |
+
<div class="hmw_settings_backup">
|
12 |
+
<form action="" target="_blank" method="POST">
|
13 |
+
<?php wp_nonce_field('hmw_backup', 'hmw_nonce'); ?>
|
14 |
+
<input type="hidden" name="action" value="hmw_backup"/>
|
15 |
+
<input type="submit" class="btn rounded-0 btn-default" name="hmw_backup" value="<?php _e('Backup Settings', _HMW_PLUGIN_NAME_) ?>"/>
|
16 |
+
<input type="button" class="btn rounded-0 btn-default hmw_restore" onclick="jQuery('.hmw_settings_restore').modal()" name="hmw_restore" value="<?php _e('Restore Settings', _HMW_PLUGIN_NAME_) ?>"/>
|
17 |
+
</form>
|
18 |
+
</div>
|
19 |
+
|
20 |
+
|
21 |
+
<!-- Modal -->
|
22 |
+
<div class="modal hmw_settings_restore" tabindex="-1" role="dialog" aria-hidden="true">
|
23 |
+
<div class="modal-dialog modal-dialog-centered" role="document">
|
24 |
+
<div class="modal-content">
|
25 |
+
<div class="modal-header">
|
26 |
+
<h5 class="modal-title" ><?php _e('Hide My Wp Restore', _HMW_PLUGIN_NAME_) ?></h5>
|
27 |
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
28 |
+
<span aria-hidden="true">×</span>
|
29 |
+
</button>
|
30 |
+
</div>
|
31 |
+
<div class="modal-body">
|
32 |
+
<div><?php _e('Upload the file with the saved Hide My Wp Settings', _HMW_PLUGIN_NAME_) ?></div>
|
33 |
+
<form action="" method="POST" enctype="multipart/form-data">
|
34 |
+
<?php wp_nonce_field('hmw_restore', 'hmw_nonce'); ?>
|
35 |
+
<input type="hidden" name="action" value="hmw_restore"/>
|
36 |
+
<div class="py-2">
|
37 |
+
<input type="file" name="hmw_options" id="favicon"/>
|
38 |
+
</div>
|
39 |
+
|
40 |
+
<input type="submit" style="margin-top: 10px;" class="btn rounded-0 btn-success" name="hmw_restore" value="<?php _e('Restore Backup', _HMW_PLUGIN_NAME_) ?>"/>
|
41 |
+
</form>
|
42 |
+
</div>
|
43 |
+
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
|
48 |
+
|
49 |
+
</div>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
<div class="hmw_col hmw_col_side">
|
53 |
+
<div class="card col-sm-12 p-0">
|
54 |
+
<div class="card-body f-gray-dark text-left">
|
55 |
+
<h3 class="panel-title"><?php _e('Backup Settings', _HMW_PLUGIN_NAME_); ?></h3>
|
56 |
+
<div class="text-info mt-3"><?php echo sprintf(__("It's important to <strong>save your settings every time you change them</strong>. You can use the backup to configure other websites you own.", _HMW_PLUGIN_NAME_), site_url()); ?>
|
57 |
+
</div>
|
58 |
+
</div>
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<?php echo $view->getView('Support') ?>
|
62 |
+
|
63 |
+
</div>
|
64 |
+
</div>
|
65 |
+
</div>
|
view/Brute.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs(HMW_Classes_Tools::getValue('tab', 'hmw_permalinks')); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
5 |
+
<form method="POST">
|
6 |
+
<?php wp_nonce_field('hmw_brutesettings', 'hmw_nonce') ?>
|
7 |
+
<input type="hidden" name="action" value="hmw_brutesettings"/>
|
8 |
+
|
9 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
10 |
+
<div class="card-body">
|
11 |
+
<div class="col-sm-12 row mb-1 py-3 mx-2 ">
|
12 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
13 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
14 |
+
<input type="checkbox" id="hmw_bruteforce" name="hmw_bruteforce" class="switch" <?php echo(HMW_Classes_Tools::getOption('hmw_bruteforce') ? 'checked="checked"' : '') ?> value="1"/>
|
15 |
+
<label for="hmw_bruteforce"><?php _e('Use Brute Force Protection', _HMW_PLUGIN_NAME_); ?></label>
|
16 |
+
<a href="https://hidemywpghost.com/kb/brute-force-attack-protection/#activate_brute_force" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
17 |
+
<div class="offset-1 text-black-50"><?php _e('Protects your website against brute force login attacks', _HMW_PLUGIN_NAME_); ?></div>
|
18 |
+
</div>
|
19 |
+
</div>
|
20 |
+
</div>
|
21 |
+
|
22 |
+
<div class="hmw_brute_enabled" <?php echo(!HMW_Classes_Tools::getOption('hmw_bruteforce') ? 'style="display:none"' : '') ?> >
|
23 |
+
|
24 |
+
<div class="border-top"></div>
|
25 |
+
<input type="hidden" value="1" name="brute_use_math">
|
26 |
+
|
27 |
+
<div class="group_autoload col-sm-12 d-flex justify-content-center btn-group mt-3" role="group" data-toggle="button">
|
28 |
+
<button type="button" class="btn btn-lg btn-outline-info brute_use_math m-1 py-3 px-4 active"><?php _e('Math Check protection', _HMW_PLUGIN_NAME_); ?></button>
|
29 |
+
|
30 |
+
<div class="hmw_pro mt-1" style="position: relative" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf(__('This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>") ?>">
|
31 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf(__('This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>") ?>">
|
32 |
+
<div class="ribbon"><span><?php echo __('PRO', _HMW_PLUGIN_NAME_) ?></span>
|
33 |
+
</div>
|
34 |
+
</div>
|
35 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro_captcha.png' ?>">
|
36 |
+
</div>
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<script>
|
40 |
+
(function ($) {
|
41 |
+
$(document).ready(function () {
|
42 |
+
$("button.brute_use_math").on('click', function () {
|
43 |
+
$('input[name=brute_use_math]').val(1);
|
44 |
+
$('.group_autoload button').removeClass('active');
|
45 |
+
$('.tab-panel.brute_use_math').show();
|
46 |
+
});
|
47 |
+
});
|
48 |
+
})(jQuery);
|
49 |
+
</script>
|
50 |
+
<div class="tab-panel brute_use_math">
|
51 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
52 |
+
<div class="col-md-4 p-0 font-weight-bold">
|
53 |
+
<?php _e('Max fail attempts', _HMW_PLUGIN_NAME_); ?>:
|
54 |
+
<div class="small text-black-50"><?php _e('Block IP on login page', _HMW_PLUGIN_NAME_); ?></div>
|
55 |
+
</div>
|
56 |
+
<div class="col-md-2 p-0 input-group">
|
57 |
+
<input type="text" class="form-control bg-input" name="brute_max_attempts" value="<?php echo HMW_Classes_Tools::getOption('brute_max_attempts') ?>"/>
|
58 |
+
</div>
|
59 |
+
</div>
|
60 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
61 |
+
<div class="col-md-4 p-0 font-weight-bold">
|
62 |
+
<?php _e('Ban duration', _HMW_PLUGIN_NAME_); ?>:
|
63 |
+
<div class="small text-black-50"><?php _e('No. of seconds', _HMW_PLUGIN_NAME_); ?></div>
|
64 |
+
</div>
|
65 |
+
<div class="col-md-2 p-0 input-group input-group">
|
66 |
+
<input type="text" class="form-control bg-input" name="brute_max_timeout" value="<?php echo HMW_Classes_Tools::getOption('brute_max_timeout') ?>"/>
|
67 |
+
</div>
|
68 |
+
</div>
|
69 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
70 |
+
<div class="col-md-4 p-0 font-weight-bold">
|
71 |
+
<?php _e('Lockout Message', _HMW_PLUGIN_NAME_); ?>:
|
72 |
+
<div class="small text-black-50"><?php _e('Show message instead of login form', _HMW_PLUGIN_NAME_); ?></div>
|
73 |
+
</div>
|
74 |
+
<div class="col-md-8 p-0 input-group input-group">
|
75 |
+
<textarea type="text" class="form-control bg-input" name="hmw_brute_message" style="height: 80px"><?php echo HMW_Classes_Tools::getOption('hmw_brute_message') ?></textarea>
|
76 |
+
</div>
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
+
<div class="border-top">
|
80 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
81 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf(__('This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>") ?>">
|
82 |
+
<div class="ribbon"><span><?php echo __('PRO', _HMW_PLUGIN_NAME_) ?></span>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
<div class="col-md-4 p-0 font-weight-bold" style="opacity: 0.3;">
|
86 |
+
<?php _e('Whitelist IPs', _HMW_PLUGIN_NAME_); ?>:
|
87 |
+
<div class="small text-black-50"><?php echo sprintf(__('You can white-list a single IP like 192.168.0.1 or a range of 245 IPs like 192.168.0.*. Find your IP with %s', _HMW_PLUGIN_NAME_), '<a href="https://whatismyipaddress.com/" target="_blank">https://whatismyipaddress.com/</a>') ?></div>
|
88 |
+
</div>
|
89 |
+
<div class="col-md-8 p-0 input-group input-group" style="opacity: 0.3;">
|
90 |
+
<textarea type="text" class="form-control bg-input" name="whitelist_ip" style="height: 100px"></textarea>
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
94 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf(__('This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>") ?>">
|
95 |
+
<div class="ribbon"><span><?php echo __('PRO', _HMW_PLUGIN_NAME_) ?></span>
|
96 |
+
</div>
|
97 |
+
</div>
|
98 |
+
|
99 |
+
<div class="col-md-4 p-0 font-weight-bold" style="opacity: 0.3;">
|
100 |
+
<?php _e('Ban IPs', _HMW_PLUGIN_NAME_); ?>:
|
101 |
+
<div class="small text-black-50"><?php echo __('You can ban a single IP like 192.168.0.1 or a range of 245 IPs like 192.168.0.*. These IPs will not be able to access the login page.', _HMW_PLUGIN_NAME_) ?></div>
|
102 |
+
</div>
|
103 |
+
<div class="col-md-8 p-0 input-group input-group" style="opacity: 0.3;">
|
104 |
+
<textarea type="text" class="form-control bg-input" name="banlist_ip" style="height: 100px"></textarea>
|
105 |
+
</div>
|
106 |
+
</div>
|
107 |
+
</div>
|
108 |
+
</div>
|
109 |
+
|
110 |
+
</div>
|
111 |
+
|
112 |
+
</div>
|
113 |
+
|
114 |
+
<div class="col-sm-12 m-0 p-2 bg-light text-center" style="position: fixed; bottom: 0; right: 0; z-index: 100; box-shadow: 0px 0px 8px -3px #444;">
|
115 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e('Save', _HMW_PLUGIN_NAME_); ?></button>
|
116 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
117 |
+
</div>
|
118 |
+
</form>
|
119 |
+
|
120 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
121 |
+
<div class="card-body">
|
122 |
+
<h3 class="card-title"><?php _e('Blocked IPs', _HMW_PLUGIN_NAME_); ?>:</h3>
|
123 |
+
<div class="mt-3 mb-1" style="display: block;">
|
124 |
+
<div class="offset-10 col-md-2 py-1">
|
125 |
+
<form method="POST">
|
126 |
+
<?php wp_nonce_field('hmw_deleteallips', 'hmw_nonce') ?>
|
127 |
+
<input type="hidden" name="action" value="hmw_deleteallips"/>
|
128 |
+
<button type="submit" class="btn rounded-0 btn-default save py-0"><?php _e('Unlock all', _HMW_PLUGIN_NAME_); ?></button>
|
129 |
+
</form>
|
130 |
+
</div>
|
131 |
+
<div id="hmw_blockedips" class="col-sm-12 p-0"></div>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
</div>
|
135 |
+
</div>
|
136 |
+
<div class="hmw_col hmw_col_side">
|
137 |
+
<div class="card col-sm-12 p-0">
|
138 |
+
<div class="card-body f-gray-dark text-left border-bottom">
|
139 |
+
<h3 class="card-title"><?php _e('Brute Force Login Protection', _HMW_PLUGIN_NAME_); ?></h3>
|
140 |
+
<div class="text-info"><?php echo __("Protects your website against brute force login attacks using Hide My WordPress <br /><br /> A common threat web developers face is a password-guessing attack known as a brute force attack. A brute-force attack is an attempt to discover a password by systematically trying every possible combination of letters, numbers, and symbols until you discover the one correct combination that works. ", _HMW_PLUGIN_NAME_); ?>
|
141 |
+
</div>
|
142 |
+
</div>
|
143 |
+
</div>
|
144 |
+
<div class="card col-sm-12 p-0">
|
145 |
+
<div class="card-body f-gray-dark text-left border-bottom">
|
146 |
+
<h3 class="card-title"><?php _e('Features', _HMW_PLUGIN_NAME_); ?></h3>
|
147 |
+
<ul class="text-info" style="margin-left: 16px; list-style: circle;">
|
148 |
+
<li><?php echo __("Limit the number of allowed login attempts using normal login form", _HMW_PLUGIN_NAME_); ?></li>
|
149 |
+
<li><?php echo __("Math problem verification while logging in", _HMW_PLUGIN_NAME_); ?></li>
|
150 |
+
<li><?php echo __("Manually block/unblock IP addresses", _HMW_PLUGIN_NAME_); ?></li>
|
151 |
+
<li><?php echo __("Manually whitelist trusted IP addresses", _HMW_PLUGIN_NAME_); ?></li>
|
152 |
+
<li><?php echo __("Option to inform user about remaining attempts on login page", _HMW_PLUGIN_NAME_); ?></li>
|
153 |
+
<li><?php echo __("Custom message to show to blocked users", _HMW_PLUGIN_NAME_); ?></li>
|
154 |
+
</ul>
|
155 |
+
</div>
|
156 |
+
</div>
|
157 |
+
|
158 |
+
</div>
|
159 |
+
</div>
|
160 |
+
</div>
|
view/Connect.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs( HMW_Classes_Tools::getValue( 'tab', 'hmw_permalinks' ) ); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<?php do_action( 'hmw_notices' ); ?>
|
5 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
6 |
+
<form method="POST">
|
7 |
+
<?php wp_nonce_field( 'hmw_connect', 'hmw_nonce' ) ?>
|
8 |
+
<input type="hidden" name="action" value="hmw_connect"/>
|
9 |
+
|
10 |
+
<?php do_action( 'hmw_form_notices' ); ?>
|
11 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
12 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Activate Free version', _HMW_PLUGIN_NAME_ ); ?></h3>
|
13 |
+
<div class="card-body">
|
14 |
+
|
15 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
16 |
+
<div class="col-sm-4 p-1 font-weight-bold">
|
17 |
+
<?php _e( 'Email Address', _HMW_PLUGIN_NAME_ ); ?>:
|
18 |
+
<div class="small text-black-50"><?php echo __( 'Enter your email address to get security alerts and How To Lessons', _HMW_PLUGIN_NAME_ ); ?></div>
|
19 |
+
</div>
|
20 |
+
<div class="col-sm-8 p-0 input-group ">
|
21 |
+
<?php
|
22 |
+
$email = HMW_Classes_Tools::getOption( 'hmw_email_address' );
|
23 |
+
if ( $email == '' ) {
|
24 |
+
global $current_user;
|
25 |
+
$email = $current_user->user_email;
|
26 |
+
}
|
27 |
+
?>
|
28 |
+
<input type="text" class="form-control" name="hmw_email" value="<?php echo $email ?>" placeholder="<?php echo $email ?>"/>
|
29 |
+
</div>
|
30 |
+
</div>
|
31 |
+
|
32 |
+
<div class="col-sm-12 row mb-1 ml-1 hmw_howtolessons_div">
|
33 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
34 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
35 |
+
<input type="hidden" name="hmw_monitor" value="0"/>
|
36 |
+
<input type="checkbox" id="hmw_monitor" name="hmw_monitor" class="switch" checked="checked" value="1"/>
|
37 |
+
<label for="hmw_monitor"><?php _e( 'Monitor my website, send me security alerts and vulnerability reports', _HMW_PLUGIN_NAME_ ); ?></label>
|
38 |
+
</div>
|
39 |
+
</div>
|
40 |
+
</div>
|
41 |
+
|
42 |
+
<div class="col-sm-12 row mb-1 ml-1 hmw_howtolessons_div">
|
43 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
44 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
45 |
+
<input type="hidden" name="hmw_howtolessons" value="0"/>
|
46 |
+
<input type="checkbox" id="hmw_howtolessons" name="hmw_howtolessons" class="switch" value="1"/>
|
47 |
+
<label for="hmw_howtolessons"><?php _e( 'I want to receive How To lessons for Hide My WP Ghost by email', _HMW_PLUGIN_NAME_ ); ?></label>
|
48 |
+
</div>
|
49 |
+
</div>
|
50 |
+
</div>
|
51 |
+
|
52 |
+
|
53 |
+
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
|
57 |
+
<div class="col-sm-12 my-3 p-0">
|
58 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 save"><?php _e( 'Activate', _HMW_PLUGIN_NAME_ ); ?></button>
|
59 |
+
</div>
|
60 |
+
</form>
|
61 |
+
<form method="POST">
|
62 |
+
<?php wp_nonce_field( 'hmw_dont_connect', 'hmw_nonce' ) ?>
|
63 |
+
<input type="hidden" name="action" value="hmw_dont_connect"/>
|
64 |
+
<button type="submit" class="btn rounded-0 float-left btn-link btn-lg px-5" style="position: relative;margin-top: -65px;margin-left: 164px;"><?php _e( 'Skip Activation', _HMW_PLUGIN_NAME_ ); ?></button>
|
65 |
+
</form>
|
66 |
+
<div class="card col-sm-12 p-3 tab-panel_tutorial embed-responsive embed-responsive-16by9 text-center">
|
67 |
+
<iframe width="853" height="480" style="max-width: 100%" src="https://www.youtube.com/embed/zhvRGHMjKic" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
<div class="hmw_col hmw_col_side">
|
71 |
+
<div class="card col-sm-12 p-0">
|
72 |
+
<div class="card-body f-gray-dark text-left border-bottom">
|
73 |
+
<h3 class="card-title"><?php _e( 'Activate Hide My WP', _HMW_PLUGIN_NAME_ ); ?></h3>
|
74 |
+
<div class="text-info">
|
75 |
+
<?php echo sprintf( __( "By activating the Free version of Hide My WP you agree with our %sTerms of Use%s and %sPrivacy Policy%s", _HMW_PLUGIN_NAME_ ), '<a href="https://wpplugins.tips/terms-of-use/" target="_blank">', '</a>', '<a href="https://wpplugins.tips/privacy-policy/" target="_blank">', '</a>' ); ?>
|
76 |
+
</div>
|
77 |
+
<div class="text-info mt-3">
|
78 |
+
<?php echo __( 'Note! If you add your email you will receive a free token which will activate the plugin.', _HMW_PLUGIN_NAME_ ); ?>
|
79 |
+
</div>
|
80 |
+
<div class="text-danger mt-2">
|
81 |
+
<?php echo sprintf( __( "If you bought Hide My WP Ghost please remove this plugin and install the one from %sYour Account%s", _HMW_PLUGIN_NAME_ ), '<a href="https://account.wpplugins.tips/user/" target="_blank">', '</a>' ); ?>
|
82 |
+
</div>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
|
86 |
+
<?php echo $view->getView( 'Support' ) ?>
|
87 |
+
|
88 |
+
</div>
|
89 |
+
</div>
|
90 |
+
|
91 |
+
</div>
|
view/Dashboard.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$do_check = false;
|
3 |
+
//Set the alert if security wasn't check
|
4 |
+
if (HMW_Classes_Tools::getOption('hmw_security_alert')) {
|
5 |
+
if (!get_option('hmw_securitycheck')) {
|
6 |
+
$do_check = true;
|
7 |
+
} elseif ($securitycheck_time = get_option('hmw_securitycheck_time')) {
|
8 |
+
if ((isset($securitycheck_time['timestamp']) && time() - $securitycheck_time['timestamp'] > (3600 * 24 * 7))) {
|
9 |
+
$do_check = true;
|
10 |
+
}
|
11 |
+
} else {
|
12 |
+
$do_check = true;
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
?>
|
17 |
+
<div class="hmw_widget_content" style="position: relative;">
|
18 |
+
<div style="font-size: 18px; text-align: center; font-weight: bold"><?php echo __('Security Level', _HMW_PLUGIN_NAME_) ?></div>
|
19 |
+
<?php if (!$do_check) { ?>
|
20 |
+
<div style="text-align: center">
|
21 |
+
<?php if (((count($view->riskreport) * 100) / count($view->risktasks)) > 90) { ?>
|
22 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl('hmw_securitycheck') ?>"><img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_danger.png' ?>" style="max-width: 60%; margin: 10px auto;"/></a>
|
23 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: red;"><?php echo sprintf(__("Your website security %sis extremely weak%s. %sMany hacking doors are available.", _HMW_PLUGIN_NAME_), '<strong>', '</strong>', '<br />') ?></div>
|
24 |
+
<?php } elseif (((count($view->riskreport) * 100) / count($view->risktasks)) > 50) { ?>
|
25 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl('hmw_securitycheck') ?>"><img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_low.png' ?>" style="max-width: 60%; margin: 10px auto;"/></a>
|
26 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: red;"><?php echo sprintf(__("Your website security %sis very weak%s. %sMany hacking doors are available.", _HMW_PLUGIN_NAME_), '<strong>', '</strong>', '<br />') ?></div>
|
27 |
+
<?php } elseif (((count($view->riskreport) * 100) / count($view->risktasks)) > 0) { ?>
|
28 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl('hmw_securitycheck') ?>"><img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_medium.png' ?>" style="max-width: 60%; margin: 10px auto;"/></a>
|
29 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: orangered;"><?php echo sprintf(__("Your website security is still weak. %sSome of the main hacking doors are still available.", _HMW_PLUGIN_NAME_), '<br />') ?></div>
|
30 |
+
<?php } else { ?>
|
31 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl('hmw_securitycheck') ?>"><img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_high.png' ?>" style="max-width: 60%; margin: 10px auto;"/></a>
|
32 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: green;"><?php echo sprintf(__("Your website security is strong. %sKeep checking the security every week.", _HMW_PLUGIN_NAME_), '<br />') ?></div>
|
33 |
+
<?php } ?>
|
34 |
+
</div>
|
35 |
+
<?php if (((count($view->riskreport) * 100) / count($view->risktasks)) > 0) { ?>
|
36 |
+
<div style="margin: 20px 0;">
|
37 |
+
<div style="font-size: 18px; text-align: left;"><?php echo __('Urgent Security Actions Required', _HMW_PLUGIN_NAME_) ?>:</div>
|
38 |
+
<ul style="margin: 10px 0 10px 20px; list-style: initial;">
|
39 |
+
<?php foreach ($view->riskreport as $function => $row) { ?>
|
40 |
+
<li style="margin: 10px 0; line-height: 20px"> <?php echo $row['solution'] ?></li>
|
41 |
+
<?php } ?>
|
42 |
+
</ul>
|
43 |
+
|
44 |
+
<div style="margin-top: 20px; text-align: center; font-weight: bold;">
|
45 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl('hmw_securitycheck') ?>" style="color: orangered; font-size: 16px; margin-right: 10px;"><?php echo __('Check Security Report', _HMW_PLUGIN_NAME_) ?></a>
|
46 |
+
| <a href="https://hidemywpghost.com/hide-my-wp-pricing/" target="_blank" style="color: green; font-size: 16px; margin-left: 10px;">
|
47 |
+
<?php _e('Upgrade Your Security', _HMW_PLUGIN_NAME_); ?>
|
48 |
+
</a>
|
49 |
+
</div>
|
50 |
+
|
51 |
+
</div>
|
52 |
+
<?php } ?>
|
53 |
+
<?php } ?>
|
54 |
+
|
55 |
+
|
56 |
+
</div>
|
57 |
+
|
58 |
+
<style>
|
59 |
+
.wp_loading {
|
60 |
+
border: 16px solid #f3f3f3;
|
61 |
+
border-top: 16px solid #b0794a;
|
62 |
+
border-radius: 50%;
|
63 |
+
width: 80px;
|
64 |
+
height: 80px;
|
65 |
+
animation: spin 2s linear infinite;
|
66 |
+
margin: 20px auto 0 auto;
|
67 |
+
}
|
68 |
+
|
69 |
+
.wp_button {
|
70 |
+
display: block;
|
71 |
+
font-weight: 400;
|
72 |
+
text-align: center;
|
73 |
+
white-space: nowrap;
|
74 |
+
vertical-align: middle;
|
75 |
+
-webkit-user-select: none;
|
76 |
+
-moz-user-select: none;
|
77 |
+
-ms-user-select: none;
|
78 |
+
user-select: none;
|
79 |
+
border: 1px solid transparent;
|
80 |
+
border-radius: .25rem;
|
81 |
+
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
|
82 |
+
padding: .5rem 1rem;
|
83 |
+
font-size: 1.25rem;
|
84 |
+
line-height: 1;
|
85 |
+
color: #fff !important;
|
86 |
+
background-color: #ddaa00;
|
87 |
+
border-color: #ddaa00;
|
88 |
+
margin: 7px auto;
|
89 |
+
}
|
90 |
+
|
91 |
+
@keyframes spin {
|
92 |
+
0% {
|
93 |
+
transform: rotate(0deg);
|
94 |
+
}
|
95 |
+
100% {
|
96 |
+
transform: rotate(360deg);
|
97 |
+
}
|
98 |
+
}
|
99 |
+
</style>
|
100 |
+
<script>
|
101 |
+
(function ($) {
|
102 |
+
$.fn.hmw_widget_recheck = function () {
|
103 |
+
var $this = this;
|
104 |
+
var $div = $this.find('.inside');
|
105 |
+
|
106 |
+
$div.find('.hmw_widget_content').html('<div style="font-size: 18px; text-align: center; font-weight: bold"><?php echo __("Checking Website Security ...", _HMW_PLUGIN_NAME_) ?></div><div class="wp_loading"></div>');
|
107 |
+
$.post(
|
108 |
+
hmwQuery.ajaxurl,
|
109 |
+
{
|
110 |
+
action: 'hmw_widget_securitycheck',
|
111 |
+
hmw_nonce: hmwQuery.nonce
|
112 |
+
}
|
113 |
+
).done(function (response) {
|
114 |
+
if (typeof response.data !== 'undefined') {
|
115 |
+
$div.html(response.data);
|
116 |
+
}
|
117 |
+
}).error(function () {
|
118 |
+
$div.html('');
|
119 |
+
});
|
120 |
+
};
|
121 |
+
|
122 |
+
$(document).ready(function () {
|
123 |
+
$('#hmw_dashboard_widget').find('.recheck_security').on('click', function () {
|
124 |
+
$('#hmw_dashboard_widget').hmw_widget_recheck();
|
125 |
+
});
|
126 |
+
|
127 |
+
<?php if($do_check){ ?>
|
128 |
+
$('#hmw_dashboard_widget').hmw_widget_recheck();
|
129 |
+
<?php }?>
|
130 |
+
});
|
131 |
+
})(jQuery);
|
132 |
+
|
133 |
+
</script>
|
view/FrontendCheck.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ( HMW_Classes_Tools::getOption( 'test_frontend' ) && HMW_Classes_Tools::getOption( 'hmw_mode' ) <> 'default' ) {
|
2 |
+
add_action( 'home_url', array(HMW_Classes_ObjController::getClass( 'HMW_Models_Rewrite' ), 'home_url'), PHP_INT_MAX, 1 );
|
3 |
+
?>
|
4 |
+
<div class="col-sm-12 border-bottom border-light py-3 mx-0 my-3">
|
5 |
+
|
6 |
+
<div class="col-sm-12 border-warning bg-light border py-3 mx-0 my-0">
|
7 |
+
<h4><?php _e( 'Next Steps', _HMW_PLUGIN_NAME_ ); ?></h4>
|
8 |
+
<div class="col-sm-12 text-center my-2">
|
9 |
+
<button type="button" class="btn btn-lg btn-success frontend_test" data-remote="<?php echo home_url() . '/' . HMW_Classes_Tools::getOption( 'hmw_login_url' ) ?>" data-target="#frontend_test_modal" data-toggle="modal"><?php _e( 'Frontend Login Test', _HMW_PLUGIN_NAME_ ); ?></button>
|
10 |
+
</div>
|
11 |
+
|
12 |
+
<ol>
|
13 |
+
<li><?php echo sprintf( __( "Run %sFrontend Login Test%s and login inside the pupop. ", _HMW_PLUGIN_NAME_ ), '<strong>', '</strong>' ); ?></li>
|
14 |
+
<li><?php _e( "If you're able to login, you've set the new paths correctly.", _HMW_PLUGIN_NAME_ ); ?></li>
|
15 |
+
<li><?php _e( 'If the Login Page displays any error, please make sure you follow the Hide My WP Ghost instructions before moving forward.', _HMW_PLUGIN_NAME_ ); ?></li>
|
16 |
+
<li><?php _e( 'Do not log out from this browser until you are confident that the Frontend is working and you will be able to log in again.', _HMW_PLUGIN_NAME_ ); ?></li>
|
17 |
+
<li><?php echo sprintf( __( "If you can't configure Hide My WP Ghost, switch to Default mode and %scontact us%s.", _HMW_PLUGIN_NAME_ ), '<a href="https://hidemywpghost.com/contact/" target="_blank" >', '</a>' ); ?></li>
|
18 |
+
</ol>
|
19 |
+
|
20 |
+
<div class="wp-admin_warning col-sm-12 my-2 mt-4 text-danger p-0 text-center">
|
21 |
+
<div class="my-1"><?php echo sprintf( __( "%sWARNING:%s Use the custom login URL to login to admin.", _HMW_PLUGIN_NAME_ ), '<span class="font-weight-bold">', '</span>' ); ?></div>
|
22 |
+
<div class="mb-3"><?php echo sprintf( __( "Your login URL will be: %s In case you can't re-login, use the safe URL: %s", _HMW_PLUGIN_NAME_ ), '<strong>' . home_url() . '/' . HMW_Classes_Tools::getOption( 'hmw_login_url' ) . '</strong><br /><br />', "<strong><br />" . site_url() . "/wp-login.php?" . HMW_Classes_Tools::getOption( 'hmw_disable_name' ) . "=" . HMW_Classes_Tools::getOption( 'hmw_disable' ) . "</strong>" ); ?></div>
|
23 |
+
</div>
|
24 |
+
|
25 |
+
<div class="hmw_logout">
|
26 |
+
<form method="POST">
|
27 |
+
<?php wp_nonce_field( 'hmw_confirm', 'hmw_nonce' ); ?>
|
28 |
+
<input type="hidden" name="action" value="hmw_confirm"/>
|
29 |
+
<input type="submit" class="hmw_btn hmw_btn-success" value="<?php echo __( "Yes, it's working", _HMW_PLUGIN_NAME_ ) ?>"/>
|
30 |
+
</form>
|
31 |
+
</div>
|
32 |
+
<div class="hmw_abort" style="display: inline-block; margin-left: 5px;">
|
33 |
+
<form method="POST">
|
34 |
+
<?php wp_nonce_field( 'hmw_abort', 'hmw_nonce' ); ?>
|
35 |
+
<input type="hidden" name="action" value="hmw_abort"/>
|
36 |
+
<input type="submit" class="hmw_btn hmw_btn-warning" value="<?php echo __( "No, abort", _HMW_PLUGIN_NAME_ ) ?>"/>
|
37 |
+
</form>
|
38 |
+
</div>
|
39 |
+
</div>
|
40 |
+
<div class="modal fade" id="frontend_test_modal" tabindex="-1" role="dialog" aria-hidden="true">
|
41 |
+
<div class="modal-dialog modal-lg" role="document">
|
42 |
+
<div class="modal-content">
|
43 |
+
<div class="modal-header">
|
44 |
+
<h5 class="modal-title" id="exampleModalLabel"><?php _e( 'Frontend login Test', _HMW_PLUGIN_NAME_ ); ?></h5>
|
45 |
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
46 |
+
<span aria-hidden="true">×</span>
|
47 |
+
</button>
|
48 |
+
</div>
|
49 |
+
<iframe class="modal-body" style="min-height: 500px;"></iframe>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
</div>
|
53 |
+
<script>
|
54 |
+
(function ($) {
|
55 |
+
$('button.frontend_test').on('click', function () {
|
56 |
+
$($(this).data("target") + ' .modal-body').attr('src', $(this).data("remote"));
|
57 |
+
});
|
58 |
+
})(jQuery);
|
59 |
+
|
60 |
+
</script>
|
61 |
+
|
62 |
+
</div>
|
63 |
+
<?php } ?>
|
view/Log.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs(HMW_Classes_Tools::getValue('tab', 'hmw_permalinks')); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
5 |
+
<form method="POST">
|
6 |
+
<?php wp_nonce_field('hmw_logsettings', 'hmw_nonce') ?>
|
7 |
+
<input type="hidden" name="action" value="hmw_logsettings"/>
|
8 |
+
|
9 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
10 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('Events Settings', _HMW_PLUGIN_NAME_); ?>:</h3>
|
11 |
+
<div class="card-body">
|
12 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf(__('This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>") ?>">
|
13 |
+
<div class="ribbon"><span><?php echo __('PRO', _HMW_PLUGIN_NAME_) ?></span></div>
|
14 |
+
</div>
|
15 |
+
|
16 |
+
<div style="opacity: 0.3">
|
17 |
+
<div class="col-sm-12 row mb-1 py-3 mx-2 ">
|
18 |
+
<div class="checker col-md-12 row my-2 py-1">
|
19 |
+
<div class="col-md-12 p-0 switch switch-sm">
|
20 |
+
<div class="hmw_pro">
|
21 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>">
|
22 |
+
</div>
|
23 |
+
<label for="hmw_activity_log"><?php _e('Log Users Events', _HMW_PLUGIN_NAME_); ?></label>
|
24 |
+
<div class="offset-1 text-black-50"><?php _e('Track and Log events that happens on your WordPress site!', _HMW_PLUGIN_NAME_); ?></div>
|
25 |
+
</div>
|
26 |
+
</div>
|
27 |
+
</div>
|
28 |
+
|
29 |
+
|
30 |
+
<?php if (HMW_Classes_Tools::getOption('hmw_bruteforce')) { ?>
|
31 |
+
<div class="col-sm-12 row mb-1 py-3 mx-2 ">
|
32 |
+
<div class="checker col-md-12 row my-2 py-1">
|
33 |
+
<div class="col-md-12 p-0 switch switch-sm">
|
34 |
+
<div class="hmw_pro">
|
35 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>">
|
36 |
+
</div>
|
37 |
+
<label for="hmw_bruteforce_log"><?php _e('Log Brute Force Attempts', _HMW_PLUGIN_NAME_); ?></label>
|
38 |
+
<div class="offset-1 text-black-50"><?php _e('Track and Log brute force attempts', _HMW_PLUGIN_NAME_); ?></div>
|
39 |
+
</div>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
<?php } ?>
|
43 |
+
|
44 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
45 |
+
<div class="col-sm-4 p-1">
|
46 |
+
<div class="font-weight-bold"><?php _e('Log Use Roles', _HMW_PLUGIN_NAME_); ?>:</div>
|
47 |
+
<div class="text-black-50"><?php _e('Hold Control key to select multiple user roles', _HMW_PLUGIN_NAME_); ?></div>
|
48 |
+
<div class="text-black-50"><?php _e("Don't select any role if you want to log all user roles", _HMW_PLUGIN_NAME_); ?></div>
|
49 |
+
</div>
|
50 |
+
<div class="col-sm-8 p-0 input-group" style="opacity: 0.3;">
|
51 |
+
<select multiple name="hmw_activity_log_roles[]" class="form-control bg-input mb-1">
|
52 |
+
<?php
|
53 |
+
global $wp_roles;
|
54 |
+
$roles = $wp_roles->get_names();
|
55 |
+
foreach ($roles as $key => $role) {
|
56 |
+
echo '<option value="' . $key . '" ' . (in_array($key, (array)HMW_Classes_Tools::getOption('hmw_activity_log_roles')) ? 'selected="selected"' : '') . '>' . $role . '</option>';
|
57 |
+
} ?>
|
58 |
+
</select>
|
59 |
+
</div>
|
60 |
+
|
61 |
+
</div>
|
62 |
+
</div>
|
63 |
+
</div>
|
64 |
+
</div>
|
65 |
+
</form>
|
66 |
+
</div>
|
67 |
+
<div class="hmw_col hmw_col_side">
|
68 |
+
<div class="card col-md-12 p-0">
|
69 |
+
<div class="card-body f-gray-dark text-left border-bottom">
|
70 |
+
<h3 class="card-title"><?php _e('Log Events', _HMW_PLUGIN_NAME_); ?></h3>
|
71 |
+
<div class="text-info mb-3"><?php echo __("Monitor everything that happens on your WordPress site!", _HMW_PLUGIN_NAME_); ?></div>
|
72 |
+
<div class="text-info mb-3"><?php echo __("It's safe to know what happened on your website at any time, in admin and on frontend.", _HMW_PLUGIN_NAME_); ?></div>
|
73 |
+
<div class="text-info mb-3"><?php echo __("All the logs are saved on our Cloud Servers and your data is safe in case you reinstall the plugin", _HMW_PLUGIN_NAME_); ?></div>
|
74 |
+
</div>
|
75 |
+
</div>
|
76 |
+
<div class="card col-md-12 p-0">
|
77 |
+
<div class="card-body f-gray-dark text-left border-bottom">
|
78 |
+
<h3 class="card-title"><?php _e('Features', _HMW_PLUGIN_NAME_); ?></h3>
|
79 |
+
<ul class="text-info" style="margin-left: 16px; list-style: circle;">
|
80 |
+
<li class="mb-2"><?php echo __("Monitor, track and log events on your website", _HMW_PLUGIN_NAME_); ?></li>
|
81 |
+
<li class="mb-2"><?php echo __("Know what the other users are doing on your website and when", _HMW_PLUGIN_NAME_); ?></li>
|
82 |
+
<li class="mb-2"><?php echo __("You can set to receive email with alerts for one or more actions", _HMW_PLUGIN_NAME_); ?></li>
|
83 |
+
<li class="mb-2"><?php echo __("Filter events and users", _HMW_PLUGIN_NAME_); ?></li>
|
84 |
+
<li><?php echo __("Compatible with all themes and plugins", _HMW_PLUGIN_NAME_); ?></li>
|
85 |
+
</ul>
|
86 |
+
</div>
|
87 |
+
</div>
|
88 |
+
|
89 |
+
<?php echo $view->getView('Support') ?>
|
90 |
+
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
+
</div>
|
view/Mapping.php
ADDED
@@ -0,0 +1,257 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs( HMW_Classes_Tools::getValue( 'tab', 'hmw_permalinks' ) ); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
5 |
+
<?php echo $view->getView( 'FrontendCheck' ); ?>
|
6 |
+
|
7 |
+
<form method="POST">
|
8 |
+
<?php wp_nonce_field( 'hmw_mappsettings', 'hmw_nonce' ) ?>
|
9 |
+
<input type="hidden" name="action" value="hmw_mappsettings"/>
|
10 |
+
|
11 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
12 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Text Mapping', _HMW_PLUGIN_NAME_ ); ?>:
|
13 |
+
<a href="https://hidemywpghost.com/kb/url-mapping-text-mapping/#text_mapping" target="_blank" class="d-inline-block ml-2" style="color: white"><i class="fa fa-question-circle"></i></a>
|
14 |
+
</h3>
|
15 |
+
<div class="card-body">
|
16 |
+
|
17 |
+
<?php if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) { ?>
|
18 |
+
<div class="col-sm-12 border-bottom border-light py-3 mx-0 my-3 text-black-50 text-center">
|
19 |
+
<?php echo __( 'First, you need to switch Hide My Wp from Default mode to Safe Mode or Ghost Mode.', _HMW_PLUGIN_NAME_ ) ?>
|
20 |
+
</div>
|
21 |
+
<?php } else { ?>
|
22 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 ">
|
23 |
+
<div class="p-0">
|
24 |
+
<div class="text-black-50"><?php _e( 'Replace the text in tags and classes to hide any WordPress footprint.', _HMW_PLUGIN_NAME_ ); ?>:</div>
|
25 |
+
<div class="text-black-50"><?php _e( "Note! Your plugins and themes may use these and it will affect the design and functionality.", _HMW_PLUGIN_NAME_ ); ?></div>
|
26 |
+
</div>
|
27 |
+
|
28 |
+
</div>
|
29 |
+
|
30 |
+
|
31 |
+
<div class="hmw_text_mapping_group py-3">
|
32 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
33 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
34 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
35 |
+
<input type="hidden" name="hmw_mapping_classes" value="0"/>
|
36 |
+
<input type="checkbox" id="hmw_mapping_classes" name="hmw_mapping_classes" class="switch" <?php echo(HMW_Classes_Tools::getOption( 'hmw_mapping_classes' ) ? 'checked="checked"' : '') ?> value="1"/>
|
37 |
+
<label for="hmw_mapping_classes"><?php _e( 'Text Mapping only Classes, IDs, JS variables', _HMW_PLUGIN_NAME_ ); ?></label>
|
38 |
+
<a href="https://hidemywpghost.com/kb/url-mapping-text-mapping/#text_mapping_style" target="_blank" class="d-inline-block ml-2"><i class="fa fa-question-circle"></i></a>
|
39 |
+
<div class="offset-1 text-black-50"><?php _e( "Change the text only in classes, styles & scrips. (Recommended ON)", _HMW_PLUGIN_NAME_ ); ?></div>
|
40 |
+
<div class="offset-1 text-black-50"><?php _e( "If this option is switched off, the text is changed in all page", _HMW_PLUGIN_NAME_ ); ?></div>
|
41 |
+
</div>
|
42 |
+
</div>
|
43 |
+
</div>
|
44 |
+
|
45 |
+
<?php
|
46 |
+
$hmw_text_mapping = json_decode( HMW_Classes_Tools::getOption( 'hmw_text_mapping' ), true );
|
47 |
+
if ( isset( $hmw_text_mapping['from'] ) && ! empty( $hmw_text_mapping['from'] ) ) {
|
48 |
+
foreach ( $hmw_text_mapping['from'] as $index => $row ) {
|
49 |
+
?>
|
50 |
+
<div class="col-sm-12 hmw_text_mapping row border-bottom border-light py-1 px-0 mx-0 my-0">
|
51 |
+
<div class="hmw_text_mapping_remove" onclick="jQuery(this).parent().remove()" title="<?php echo __( 'Remove Text Map', _HMW_PLUGIN_NAME_ ) ?>">x</div>
|
52 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
53 |
+
<input type="text" class="form-control bg-input" name="hmw_text_mapping_from[]" value="<?php echo $hmw_text_mapping['from'][ $index ] ?>" placeholder="Current Text ..."/>
|
54 |
+
<div class="col-sm-1 py-2 px-0 text-center text-black-50" style="max-width: 30px"><?php echo '=>' ?></div>
|
55 |
+
</div>
|
56 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
57 |
+
<input type="text" class="form-control bg-input" name="hmw_text_mapping_to[]" value="<?php echo $hmw_text_mapping['to'][ $index ] ?>" placeholder="New Text ..."/>
|
58 |
+
</div>
|
59 |
+
</div>
|
60 |
+
<?php
|
61 |
+
}
|
62 |
+
} ?>
|
63 |
+
<div class="col-sm-12 hmw_text_mapping row border-bottom border-light py-1 px-0 mx-0 my-0">
|
64 |
+
<div class="hmw_text_mapping_remove" style="display: none" onclick="jQuery(this).parent().remove()" title="<?php echo __( 'Remove Text Map', _HMW_PLUGIN_NAME_ ) ?>">x</div>
|
65 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
66 |
+
<input type="text" class="form-control bg-input" name="hmw_text_mapping_from[]" value="" placeholder="Current Text ..."/>
|
67 |
+
<div class="col-sm-1 py-2 px-0 text-center text-black-50" style="max-width: 30px"><?php echo '=>' ?></div>
|
68 |
+
</div>
|
69 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
70 |
+
<input type="text" class="form-control bg-input" name="hmw_text_mapping_to[]" value="" placeholder="New Text ..."/>
|
71 |
+
</div>
|
72 |
+
</div>
|
73 |
+
</div>
|
74 |
+
<div class="col-sm-12 row border-bottom border-light p-0 m-0">
|
75 |
+
<div class="col-sm-4 p-0 offset-4">
|
76 |
+
<button type="button" class="col-sm-12 btn btn-sm btn-warning text-white" onclick="jQuery('div.hmw_text_mapping:last').clone().appendTo('div.hmw_text_mapping_group'); jQuery('div.hmw_text_mapping_remove').show(); jQuery('div.hmw_text_mapping:last').find('div.hmw_text_mapping_remove').hide()"><?php echo __( 'Add another text', _HMW_PLUGIN_NAME_ ) ?></button>
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
+
|
80 |
+
<?php } ?>
|
81 |
+
</div>
|
82 |
+
</div>
|
83 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
84 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'URL Mapping', _HMW_PLUGIN_NAME_ ); ?>:
|
85 |
+
<a href="https://hidemywpghost.com/kb/url-mapping-text-mapping/#url_mapping" target="_blank" class="d-inline-block ml-2" style="color: white"><i class="fa fa-question-circle"></i></a>
|
86 |
+
</h3>
|
87 |
+
<div class="card-body">
|
88 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) ?>">
|
89 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span></div>
|
90 |
+
</div>
|
91 |
+
<div style="opacity: 0.3">
|
92 |
+
|
93 |
+
<?php if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) { ?>
|
94 |
+
<div class="col-sm-12 border-bottom border-light py-3 mx-0 my-3 text-black-50 text-center">
|
95 |
+
<?php echo __( 'First, you need to switch Hide My Wp from Default mode to Safe Mode or Ghost Mode.', _HMW_PLUGIN_NAME_ ) ?>
|
96 |
+
</div>
|
97 |
+
<?php } else { ?>
|
98 |
+
<div class="text-black-50"><?php echo __( "You can add a list of URLs you want to change into new ones. ", _HMW_PLUGIN_NAME_ ); ?></div>
|
99 |
+
<div class="text-black-50"><?php echo __( "It's important to include only internal URLs from Frontend source code after you activate the plugin in Safe Mode or Ghost Mode.", _HMW_PLUGIN_NAME_ ); ?></div>
|
100 |
+
<div class="text-black-50 mt-4 font-weight-bold"><?php echo __( "Example:", _HMW_PLUGIN_NAME_ ); ?></div>
|
101 |
+
<div class="text-black-50 row">
|
102 |
+
<div class="col-sm-1 font-weight-bold mr-0 pr-0" style="min-width: 70px;"><?php echo __( 'from', _HMW_PLUGIN_NAME_ ) ?>:</div>
|
103 |
+
<div class="col-sm-10 m-0 p-0"><?php echo home_url() . '/' . HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/' . substr( md5( str_replace( '%2F', '/', rawurlencode( get_template() ) ) ), 0, 10 ) . '/' . HMW_Classes_Tools::getOption( 'hmw_themes_style' ); ?></div>
|
104 |
+
</div>
|
105 |
+
<div class="text-black-50 row">
|
106 |
+
<div class="col-sm-1 font-weight-bold mr-0 pr-0" style="min-width: 70px;"><?php echo __( 'to', _HMW_PLUGIN_NAME_ ) ?>:</div>
|
107 |
+
<div class="col-sm-10 m-0 p-0"><?php echo home_url( 'mystyle.css' ); ?></div>
|
108 |
+
</div>
|
109 |
+
<div class="text-black-50 my-2"><?php echo __( "or", _HMW_PLUGIN_NAME_ ); ?></div>
|
110 |
+
<div class="text-black-50 row">
|
111 |
+
<div class="col-sm-1 font-weight-bold mr-0 pr-0" style="min-width: 70px;"><?php echo __( 'from', _HMW_PLUGIN_NAME_ ) ?>:</div>
|
112 |
+
<div class="col-sm-10 m-0 p-0"><?php echo home_url() . '/' . HMW_Classes_Tools::getOption( 'hmw_themes_url' ) . '/'; ?></div>
|
113 |
+
</div>
|
114 |
+
<div class="text-black-50 row">
|
115 |
+
<div class="col-sm-1 font-weight-bold mr-0 pr-0" style="min-width: 70px;"><?php echo __( 'to', _HMW_PLUGIN_NAME_ ) ?>:</div>
|
116 |
+
<div class="col-sm-10 m-0 p-0"><?php echo home_url( 'myassets/' ); ?></div>
|
117 |
+
</div>
|
118 |
+
<div class="hmw_url_mapping_group py-3">
|
119 |
+
<?php
|
120 |
+
$hmw_url_mapping = json_decode( HMW_Classes_Tools::getOption( 'hmw_url_mapping' ), true );
|
121 |
+
if ( isset( $hmw_url_mapping['from'] ) && ! empty( $hmw_url_mapping['from'] ) ) {
|
122 |
+
foreach ( $hmw_url_mapping['from'] as $index => $row ) {
|
123 |
+
?>
|
124 |
+
<div class="col-sm-12 hmw_url_mapping row border-bottom border-light py-1 px-0 mx-0 my-0">
|
125 |
+
<div class="hmw_url_mapping_remove" onclick="jQuery(this).parent().remove()" title="<?php echo __( 'Remove URL Map', _HMW_PLUGIN_NAME_ ) ?>">x</div>
|
126 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
127 |
+
<input type="text" class="form-control bg-input" name="hmw_url_mapping_from[]" value="<?php echo $hmw_url_mapping['from'][ $index ] ?>" placeholder="Current URL ..."/>
|
128 |
+
<div class="col-sm-1 py-2 px-0 text-center text-black-50" style="max-width: 30px"><?php echo '=>' ?></div>
|
129 |
+
</div>
|
130 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
131 |
+
<input type="text" class="form-control bg-input" name="hmw_url_mapping_to[]" value="<?php echo $hmw_url_mapping['to'][ $index ] ?>" placeholder="New URL ..."/>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
<?php
|
135 |
+
}
|
136 |
+
} ?>
|
137 |
+
<div class="col-sm-12 hmw_url_mapping row border-bottom border-light py-1 px-0 mx-0 my-0">
|
138 |
+
<div class="hmw_url_mapping_remove" style="display: none" onclick="jQuery(this).parent().remove()" title="<?php echo __( 'Remove URL Map', _HMW_PLUGIN_NAME_ ) ?>">x</div>
|
139 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
140 |
+
<input type="text" class="form-control bg-input" name="hmw_url_mapping_from[]" value="" placeholder="Current URL ..."/>
|
141 |
+
<div class="col-sm-1 py-2 px-0 text-center text-black-50" style="max-width: 30px"><?php echo '=>' ?></div>
|
142 |
+
</div>
|
143 |
+
<div class="col-sm-6 py-1 px-0 input-group input-group">
|
144 |
+
<input type="text" class="form-control bg-input" name="hmw_url_mapping_to[]" value="" placeholder="New URL ..."/>
|
145 |
+
</div>
|
146 |
+
</div>
|
147 |
+
</div>
|
148 |
+
<div class="col-sm-12 row border-bottom border-light p-0 m-0">
|
149 |
+
<div class="col-sm-4 p-0 offset-4">
|
150 |
+
<button type="button" class="col-sm-12 btn btn-sm btn-warning text-white" onclick="jQuery('div.hmw_url_mapping:last').clone().appendTo('div.hmw_url_mapping_group'); jQuery('div.hmw_url_mapping_remove').show(); jQuery('div.hmw_url_mapping:last').find('div.hmw_url_mapping_remove').hide()"><?php echo __( 'Add another URL', _HMW_PLUGIN_NAME_ ) ?></button>
|
151 |
+
</div>
|
152 |
+
</div>
|
153 |
+
<?php } ?>
|
154 |
+
</div>
|
155 |
+
</div>
|
156 |
+
</div>
|
157 |
+
<div class="card p-0 col-sm-12 tab-panel">
|
158 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'CDN URLs', _HMW_PLUGIN_NAME_ ); ?>:
|
159 |
+
<a href="https://hidemywpghost.com/kb/url-mapping-text-mapping/#cdn_urls" target="_blank" class="d-inline-block ml-2" style="color: white"><i class="fa fa-question-circle"></i></a>
|
160 |
+
</h3>
|
161 |
+
<div class="card-body">
|
162 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) ?>">
|
163 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span></div>
|
164 |
+
</div>
|
165 |
+
<div style="opacity: 0.3">
|
166 |
+
<?php if ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) { ?>
|
167 |
+
<div class="col-sm-12 border-bottom border-light py-3 mx-0 my-3 text-black-50 text-center">
|
168 |
+
<?php echo __( 'First, you need to switch Hide My Wp from Default mode to Safe Mode or Ghost Mode.', _HMW_PLUGIN_NAME_ ) ?>
|
169 |
+
</div>
|
170 |
+
<?php } else { ?>
|
171 |
+
<div class="text-black-50"><?php echo __( "You can add one or more CDN URLs you use.", _HMW_PLUGIN_NAME_ ); ?></div>
|
172 |
+
<div class="text-black-50"><?php echo __( "This option will not activate the CDN option for your website but it will change the custom paths in case you already set a CDN URL with another plugin.", _HMW_PLUGIN_NAME_ ); ?></div>
|
173 |
+
|
174 |
+
<div class="hmw_cdn_mapping_group py-3">
|
175 |
+
<?php
|
176 |
+
$hmw_cdn_urls = json_decode( HMW_Classes_Tools::getOption( 'hmw_cdn_urls' ), true );
|
177 |
+
if ( ! empty( $hmw_cdn_urls ) ) {
|
178 |
+
foreach ( $hmw_cdn_urls as $index => $row ) {
|
179 |
+
?>
|
180 |
+
<div class="col-sm-12 hmw_cdn_mapping row border-bottom border-light py-1 px-0 mx-0 my-0">
|
181 |
+
<div class="hmw_cdn_mapping_remove" onclick="jQuery(this).parent().remove()" title="<?php echo __( 'Remove CDN', _HMW_PLUGIN_NAME_ ) ?>">x</div>
|
182 |
+
<div class="col-sm-12 py-1 px-0 input-group input-group">
|
183 |
+
<input type="text" class="form-control bg-input" name="hmw_cdn_urls[]" value="<?php echo $row ?>" placeholder="CDN URL ..."/>
|
184 |
+
</div>
|
185 |
+
</div>
|
186 |
+
<?php
|
187 |
+
}
|
188 |
+
} ?>
|
189 |
+
<div class="col-sm-12 hmw_cdn_mapping row border-bottom border-light py-1 px-0 mx-0 my-0">
|
190 |
+
<div class="hmw_cdn_mapping_remove" style="display: none" onclick="jQuery(this).parent().remove()" title="<?php echo __( 'Remove CDN', _HMW_PLUGIN_NAME_ ) ?>">x</div>
|
191 |
+
<div class="col-sm-12 py-1 px-0 input-group input-group">
|
192 |
+
<input type="text" class="form-control bg-input" name="hmw_cdn_urls[]" value="" placeholder="CDN URL ..."/>
|
193 |
+
</div>
|
194 |
+
|
195 |
+
</div>
|
196 |
+
</div>
|
197 |
+
<div class="col-sm-12 row border-bottom border-light p-0 m-0">
|
198 |
+
<div class="col-sm-4 p-0 offset-4">
|
199 |
+
<button type="button" class="col-sm-12 btn btn-sm btn-warning text-white" onclick="jQuery('div.hmw_cdn_mapping:last').clone().appendTo('div.hmw_cdn_mapping_group'); jQuery('div.hmw_cdn_mapping_remove').show(); jQuery('div.hmw_cdn_mapping:last').find('div.hmw_cdn_mapping_remove').hide()"><?php echo __( 'Add another CDN URL', _HMW_PLUGIN_NAME_ ) ?></button>
|
200 |
+
</div>
|
201 |
+
</div>
|
202 |
+
<?php } ?>
|
203 |
+
</div>
|
204 |
+
</div>
|
205 |
+
</div>
|
206 |
+
|
207 |
+
|
208 |
+
<?php if ( HMW_Classes_Tools::getOption( 'test_frontend' ) || HMW_Classes_Tools::getOption( 'logout' ) || HMW_Classes_Tools::getOption( 'error' ) ) { ?>
|
209 |
+
<div class="col-sm-12 m-0 p-2">
|
210 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e( 'Save', _HMW_PLUGIN_NAME_ ); ?></button>
|
211 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
212 |
+
</div>
|
213 |
+
<?php } else { ?>
|
214 |
+
<div class="col-sm-12 m-0 p-2 bg-light text-center" style="position: fixed; bottom: 0; right: 0; z-index: 100; box-shadow: 0px 0px 8px -3px #444;">
|
215 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e('Save', _HMW_PLUGIN_NAME_); ?></button>
|
216 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
217 |
+
</div>
|
218 |
+
<?php } ?>
|
219 |
+
</form>
|
220 |
+
</div>
|
221 |
+
<div class="hmw_col hmw_col_side">
|
222 |
+
<div class="card col-sm-12 p-0">
|
223 |
+
<div class="card-body f-gray-dark text-center">
|
224 |
+
<h3 class="card-title"><?php _e( 'Check Your Website', _HMW_PLUGIN_NAME_ ); ?></h3>
|
225 |
+
<div class="card-text text-muted">
|
226 |
+
<?php echo __( 'Check if your website is secured with the current settings.', _HMW_PLUGIN_NAME_ ) ?>
|
227 |
+
</div>
|
228 |
+
<div class="card-text text-info m-3">
|
229 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl( 'hmw_securitycheck' ) ?>" class="btn rounded-0 btn-warning btn-lg text-white px-5 securitycheck"><?php _e( 'Security Check', _HMW_PLUGIN_NAME_ ); ?></a>
|
230 |
+
</div>
|
231 |
+
<div class="card-text text-muted small">
|
232 |
+
<?php echo __( 'Make sure you save the settings and empty the cache before checking your website with our tool.', _HMW_PLUGIN_NAME_ ) ?>
|
233 |
+
</div>
|
234 |
+
|
235 |
+
<div class="card-text m-3 ">
|
236 |
+
<a class="bigbutton text-center" href="https://hidemywpghost.com/" target="_blank"><?php echo __( "Learn more about Hide My WP", _HMW_PLUGIN_NAME_ ); ?></a>
|
237 |
+
</div>
|
238 |
+
</div>
|
239 |
+
</div>
|
240 |
+
|
241 |
+
<div class="card col-sm-12 p-0">
|
242 |
+
<div class="card-body f-gray-dark text-center">
|
243 |
+
<h3 class="card-title"><?php echo __( 'Love Hide My WP?', _HMW_PLUGIN_NAME_ ); ?></h3>
|
244 |
+
<div class="card-text text-muted">
|
245 |
+
<h1><i class="fa fa-heart text-danger"></i></h1>
|
246 |
+
<?php echo __( 'Give us 5 stars on WordPress.org', _HMW_PLUGIN_NAME_ ) ?>
|
247 |
+
</div>
|
248 |
+
<div class="card-text text-info m-3">
|
249 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" class="btn rounded-0 btn-success btn-lg px-4"><?php echo __( 'Rate Hide My WP', _HMW_PLUGIN_NAME_ ); ?></a>
|
250 |
+
</div>
|
251 |
+
|
252 |
+
</div>
|
253 |
+
</div>
|
254 |
+
</div>
|
255 |
+
|
256 |
+
</div>
|
257 |
+
</div>
|
view/Notices.php
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
<div class="hmw_notice <?php echo $type ?>"><?php echo $message ?></div>
|
2 |
+
|
view/Permalinks.php
ADDED
@@ -0,0 +1,611 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( defined( 'HMW_DISABLE' ) && HMW_DISABLE ) {
|
4 |
+
//don't run if disable
|
5 |
+
} elseif ( HMW_Classes_Tools::isPermalinkStructure() && ! HMW_Classes_Tools::isPHPPermalink() ) {
|
6 |
+
if ( is_multisite() && ! is_plugin_active_for_network( _HMW_PLUGIN_NAME_ . '/index.php' ) ) {
|
7 |
+
?>
|
8 |
+
<div class="error notice">
|
9 |
+
<p><?php echo __( "Hide My WordPress requires to be activated on the entire network to prevent login issues!", _HMW_PLUGIN_NAME_ ); ?></p>
|
10 |
+
</div>
|
11 |
+
<?php
|
12 |
+
return;
|
13 |
+
}
|
14 |
+
?>
|
15 |
+
|
16 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
17 |
+
<?php echo $view->getAdminTabs( HMW_Classes_Tools::getValue( 'tab', 'hmw_permalinks' ) ); ?>
|
18 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
19 |
+
<?php do_action( 'hmw_notices' ); ?>
|
20 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
21 |
+
<?php echo $view->getView( 'FrontendCheck' ); ?>
|
22 |
+
|
23 |
+
<form method="POST">
|
24 |
+
<?php wp_nonce_field( 'hmw_settings', 'hmw_nonce' ); ?>
|
25 |
+
<input type="hidden" name="action" value="hmw_settings"/>
|
26 |
+
<input type="hidden" name="hmw_mode" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_mode' ) ?>"/>
|
27 |
+
|
28 |
+
<?php do_action( 'hmw_form_notices' ); ?>
|
29 |
+
|
30 |
+
<div class="card col-sm-12">
|
31 |
+
<div class="card-body py-2 px-0">
|
32 |
+
<h3 class="card-title"><?php _e( 'Levels of security', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
33 |
+
<div class="group_autoload d-flex justify-content-center btn-group mt-3" role="group" data-toggle="button">
|
34 |
+
<button type="button" class="btn btn-lg btn-outline-info default_autoload m-1 py-3 px-4 <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'active' : '' ) ?>"><?php echo __( "Default (unsafe)", _HMW_PLUGIN_NAME_ ) ?></button>
|
35 |
+
<button type="button" class="btn btn-lg btn-outline-info lite_autoload m-1 py-3 px-4 <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'lite' ) ? 'active' : '' ) ?>"><?php echo __( "Lite mode", _HMW_PLUGIN_NAME_ ) ?></button>
|
36 |
+
|
37 |
+
<div style="position: relative; margin: .23rem!important;">
|
38 |
+
<div class="box" style="border: none" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'Upgrade Your Website Security. Add Firewall, Hide WordPress Completely. %sUnlock this feature%s', _HMW_PLUGIN_NAME_ ), "<br /><a href='https://hidemywpghost.com/wordpress_update' target='_blank'>", "</a>" ) ?>">
|
39 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
<button type="button" class="btn btn-lg btn-outline-info m-1 py-3 px-4" style="opacity: 0.7;"><?php echo __( "Ghost mode", _HMW_PLUGIN_NAME_ ) ?></button>
|
43 |
+
</div>
|
44 |
+
</div>
|
45 |
+
<div class="wp-admin_warning col-sm-12 my-2 text-danger p-0 text-center" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_hide_admin' ) ) ? '' : 'style="display: none;"' ) ?> >
|
46 |
+
<div class="my-2 small"><?php echo sprintf( __( "%sWARNING:%s The admin path is hidden from visitors. Use the custom login URL to login to admin", _HMW_PLUGIN_NAME_ ), '<span class="font-weight-bold">', '</span>' ); ?></div>
|
47 |
+
<div class="my-3 small"><?php echo sprintf( __( "If you can't login, use this URL: %s and all your changes are roll back to default", _HMW_PLUGIN_NAME_ ), "<strong>" . site_url() . "/wp-login.php?" . HMW_Classes_Tools::getOption( 'hmw_disable_name' ) . "=" . HMW_Classes_Tools::getOption( 'hmw_disable' ) . "</strong><br />" ); ?></div>
|
48 |
+
</div>
|
49 |
+
|
50 |
+
<script>
|
51 |
+
(function ($) {
|
52 |
+
$(document).ready(function () {
|
53 |
+
$(".default_autoload").on('click', function () {
|
54 |
+
$('input[name=hmw_mode]').val('default');
|
55 |
+
$('.group_autoload button').removeClass('active');
|
56 |
+
<?php
|
57 |
+
foreach ( HMW_Classes_Tools::$default as $name => $value ) {
|
58 |
+
if ( is_string( $value ) && $value <> "0" && $value <> "1" ) {
|
59 |
+
echo '$("input[type=text][name=' . $name . ']").val("' . str_replace( '"', '\\"', $value ) . '");' . "\n";
|
60 |
+
} elseif ( $value == "0" || $value == "1" ) {
|
61 |
+
echo '$("input[name=' . $name . ']").prop("checked", ' . (int) $value . '); $("input[name=' . $name . ']").trigger("change");';
|
62 |
+
}
|
63 |
+
}
|
64 |
+
?>
|
65 |
+
$('input[name=hmw_admin_url]').trigger('keyup');
|
66 |
+
$('.tab-panel').hide();
|
67 |
+
$('.tab-panel_tutorial').show();
|
68 |
+
});
|
69 |
+
$(".lite_autoload").on('click', function () {
|
70 |
+
$('input[name=hmw_mode]').val('lite');
|
71 |
+
$('.group_autoload button').removeClass('active');
|
72 |
+
<?php
|
73 |
+
$lite = @array_merge( HMW_Classes_Tools::$default, HMW_Classes_Tools::$lite );
|
74 |
+
foreach ( $lite as $name => $value ) {
|
75 |
+
if ( is_string( $value ) && $value <> "0" && $value <> "1" ) {
|
76 |
+
echo '$("input[type=text][name=' . $name . ']").val("' . str_replace( '"', '\\"', $value ) . '");' . "\n";
|
77 |
+
} elseif ( $value == "0" || $value == "1" ) {
|
78 |
+
echo '$("input[name=' . $name . ']").prop("checked", ' . (int) $value . '); $("input[name=' . $name . ']").trigger("change");';
|
79 |
+
|
80 |
+
}
|
81 |
+
}
|
82 |
+
?>
|
83 |
+
$('input[name=hmw_admin_url]').trigger('keyup');
|
84 |
+
$('.tab-panel').show();
|
85 |
+
$('.tab-panel_tutorial').hide();
|
86 |
+
|
87 |
+
});
|
88 |
+
$(".ninja_autoload").on('click', function () {
|
89 |
+
$('input[name=hmw_mode]').val('ninja');
|
90 |
+
$('.group_autoload button').removeClass('active');
|
91 |
+
<?php
|
92 |
+
$ninja = @array_merge( HMW_Classes_Tools::$default, HMW_Classes_Tools::$ninja );
|
93 |
+
foreach ( $ninja as $name => $value ) {
|
94 |
+
if ( is_string( $value ) && $value <> "0" && $value <> "1" ) {
|
95 |
+
echo '$("input[type=text][name=' . $name . ']").val("' . str_replace( '"', '\\"', $value ) . '");' . "\n";
|
96 |
+
} elseif ( $value == "0" || $value == "1" ) {
|
97 |
+
echo '$("input[name=' . $name . ']").prop("checked", ' . (int) $value . '); $("input[name=' . $name . ']").trigger("change");';
|
98 |
+
|
99 |
+
}
|
100 |
+
}
|
101 |
+
?>
|
102 |
+
$('input[name=hmw_admin_url]').trigger('keyup');
|
103 |
+
$('.tab-panel').show();
|
104 |
+
$('.tab-panel_tutorial').hide();
|
105 |
+
|
106 |
+
});
|
107 |
+
|
108 |
+
|
109 |
+
});
|
110 |
+
})(jQuery);
|
111 |
+
</script>
|
112 |
+
|
113 |
+
</div>
|
114 |
+
</div>
|
115 |
+
<div class="card col-sm-12 p-0 tab-panel_tutorial embed-responsive embed-responsive-16by9 text-center" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'lite' ) ? 'style="display:none"' : '' ) ?>>
|
116 |
+
<iframe width="853" height="480" style="max-width: 100%" src="https://www.youtube.com/embed/VGUs1dL611I?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
|
117 |
+
</div>
|
118 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
119 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Admin Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
120 |
+
<div class="card-body">
|
121 |
+
<?php if ( defined( 'HMW_DEFAULT_ADMIN' ) && HMW_DEFAULT_ADMIN ) {
|
122 |
+
echo ' <div class="text-danger col-sm-12 border-bottom border-light py-3 mx-0 my-3">' . sprintf( __( 'Your admin URL is changed by another plugin/theme in %s. To activate this option, disable the custom admin in the other plugin or deativate it.', _HMW_PLUGIN_NAME_ ), '<strong>' . HMW_DEFAULT_ADMIN . '</strong>' ) . '</div>';
|
123 |
+
echo '<input type="hidden" name="hmw_admin_url" value="' . HMW_Classes_Tools::$default['hmw_admin_url'] . '"/>';
|
124 |
+
} else {
|
125 |
+
if ( HMW_Classes_Tools::isGodaddy() ) {
|
126 |
+
echo ' <div class="text-danger col-sm-12 border-bottom border-light py-3 mx-0 my-3">' . sprintf( __( "Your admin URL can't be changed on %s hosting because of the %s security terms.", _HMW_PLUGIN_NAME_ ), '<strong>Godaddy</strong>', '<strong>Godaddy</strong>' ) . '</div>';
|
127 |
+
echo '<input type="hidden" name="hmw_admin_url" value="' . HMW_Classes_Tools::$default['hmw_admin_url'] . '"/>';
|
128 |
+
} elseif (PHP_VERSION_ID >= 70400 && HMW_Classes_Tools::isWpengine()) {
|
129 |
+
echo ' <div class="text-danger col-sm-12 border-bottom border-light py-3 mx-0 my-3">' . sprintf( __( "Your admin URL can't be changed on %s because of the %s rules are no longer used.", _HMW_PLUGIN_NAME_ ), '<strong>Wpengine with PHP 7 or greater</strong>' , '<strong>.htaccess</strong>') . '</div>';
|
130 |
+
echo '<input type="hidden" name="hmw_admin_url" value="' . HMW_Classes_Tools::$default['hmw_admin_url'] . '"/>';
|
131 |
+
}else{ ?>
|
132 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
133 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
134 |
+
<?php _e( 'Custom Admin Path', _HMW_PLUGIN_NAME_ ); ?>:
|
135 |
+
<div class="small text-black-50"><?php _e( 'eg. adm, back', _HMW_PLUGIN_NAME_ ); ?></div>
|
136 |
+
</div>
|
137 |
+
<div class="col-sm-8 p-0 input-grou p input-group-lg">
|
138 |
+
<input type="text" class="form-control bg-input" name="hmw_admin_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_admin_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_admin_url'] ?>"/>
|
139 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_admin" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
140 |
+
</div>
|
141 |
+
</div>
|
142 |
+
<?php } ?>
|
143 |
+
|
144 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
145 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
146 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
147 |
+
<input type="hidden" name="hmw_hide_admin" value="0"/>
|
148 |
+
<input type="checkbox" id="hmw_hide_admin" name="hmw_hide_admin" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_admin' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
149 |
+
<label for="hmw_hide_admin"><?php _e( 'Hide "wp-admin"', _HMW_PLUGIN_NAME_ ); ?></label>
|
150 |
+
<div class="offset-1 text-black-50"><?php _e( 'Show 404 Not Found Error when visitors access /wp-admin', _HMW_PLUGIN_NAME_ ); ?></div>
|
151 |
+
</div>
|
152 |
+
</div>
|
153 |
+
</div>
|
154 |
+
<div class="col-sm-12 row mb-1 ml-1 hmw_hide_newadmin_div" <?php echo( HMW_Classes_Tools::getOption( 'hmw_admin_url' ) == HMW_Classes_Tools::$default['hmw_admin_url'] ? 'style="display:none;"' : '' ) ?>>
|
155 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
156 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
157 |
+
<input type="hidden" name="hmw_hide_newadmin" value="0"/>
|
158 |
+
<input type="checkbox" id="hmw_hide_newadmin" name="hmw_hide_newadmin" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_newadmin' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
159 |
+
<label for="hmw_hide_newadmin"><?php _e( 'Hide the new admin path', _HMW_PLUGIN_NAME_ ); ?></label>
|
160 |
+
<div class="offset-1 text-black-50"><?php _e( 'Let only the new login be accessible and redirect me to admin after logging in', _HMW_PLUGIN_NAME_ ); ?></div>
|
161 |
+
</div>
|
162 |
+
</div>
|
163 |
+
</div>
|
164 |
+
<div class="admin_warning col-sm-12 my-3 text-danger p-0 text-center small" style="display: none">
|
165 |
+
<?php echo sprintf( __( "Some Themes don't work with custom Admin and Ajax paths. In case of ajax errors, switch back to wp-admin and admin-ajax.php.", _HMW_PLUGIN_NAME_ ) ); ?>
|
166 |
+
</div>
|
167 |
+
<?php } ?>
|
168 |
+
</div>
|
169 |
+
</div>
|
170 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
171 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Login Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
172 |
+
<div class="card-body">
|
173 |
+
<?php if ( defined( 'HMW_DEFAULT_LOGIN' ) && HMW_DEFAULT_LOGIN ) {
|
174 |
+
echo ' <div class="text-danger col-sm-12 border-bottom border-light py-3 mx-0 my-3">' . sprintf( __( 'Your login URL is changed by another plugin/theme in %s. To activate this option, disable the custom login in the other plugin or deativate it.', _HMW_PLUGIN_NAME_ ), '<strong>' . HMW_DEFAULT_LOGIN . '</strong>' ) . '</div>';
|
175 |
+
} else {
|
176 |
+
?>
|
177 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
178 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
179 |
+
<?php _e( 'Custom Login Path', _HMW_PLUGIN_NAME_ ); ?>:
|
180 |
+
<div class="small text-black-50"><?php _e( 'eg. login or signin', _HMW_PLUGIN_NAME_ ); ?></div>
|
181 |
+
</div>
|
182 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
183 |
+
<input type="text" class="form-control bg-input" name="hmw_login_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_login_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_login_url'] ?>"/>
|
184 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_login" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
185 |
+
</div>
|
186 |
+
</div>
|
187 |
+
|
188 |
+
<div class="col-sm-12 row mb-1 ml-1 hmw_hide_wplogin_div">
|
189 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
190 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
191 |
+
<input type="hidden" name="hmw_hide_wplogin" value="0"/>
|
192 |
+
<input type="checkbox" id="hmw_hide_wplogin" name="hmw_hide_wplogin" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_wplogin' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
193 |
+
<label for="hmw_hide_wplogin"><?php _e( 'Hide "wp-login.php"', _HMW_PLUGIN_NAME_ ); ?></label>
|
194 |
+
<div class="offset-1 text-black-50"><?php _e( 'Show 404 Not Found Error when visitors access /wp-login.php', _HMW_PLUGIN_NAME_ ); ?></div>
|
195 |
+
</div>
|
196 |
+
</div>
|
197 |
+
</div>
|
198 |
+
|
199 |
+
<div class="col-sm-12 row mb-1 ml-1 hmw_hide_login_div">
|
200 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
201 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
202 |
+
<input type="hidden" name="hmw_hide_login" value="0"/>
|
203 |
+
<input type="checkbox" id="hmw_hide_login" name="hmw_hide_login" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_login' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
204 |
+
<label for="hmw_hide_login"><?php _e( 'Hide /login', _HMW_PLUGIN_NAME_ ); ?></label>
|
205 |
+
<div class="offset-1 text-black-50"><?php _e( 'Show 404 Not Found Error when visitors access /login', _HMW_PLUGIN_NAME_ ); ?></div>
|
206 |
+
</div>
|
207 |
+
</div>
|
208 |
+
</div>
|
209 |
+
|
210 |
+
<div class="border-bottom border-gray"></div>
|
211 |
+
|
212 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
213 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
214 |
+
<?php _e( 'Custom Lost Password Path', _HMW_PLUGIN_NAME_ ); ?>:
|
215 |
+
<div class="small text-black-50"><?php _e( 'eg. lostpass or forgotpass', _HMW_PLUGIN_NAME_ ); ?></div>
|
216 |
+
</div>
|
217 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
218 |
+
<input type="text" class="form-control bg-input" name="hmw_lostpassword_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_lostpassword_url' ) ?>" placeholder="?action=lostpassword"/>
|
219 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_lost_password" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
220 |
+
</div>
|
221 |
+
</div>
|
222 |
+
|
223 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
224 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
225 |
+
<?php _e( 'Custom Register Path', _HMW_PLUGIN_NAME_ ); ?>:
|
226 |
+
<div class="small text-black-50"><?php _e( 'eg. newuser or register', _HMW_PLUGIN_NAME_ ); ?></div>
|
227 |
+
</div>
|
228 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
229 |
+
<input type="text" class="form-control bg-input" name="hmw_register_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_register_url' ) ?>" placeholder="?action=register"/>
|
230 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_register" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
231 |
+
</div>
|
232 |
+
</div>
|
233 |
+
|
234 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
235 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
236 |
+
<?php _e( 'Custom Logout Path', _HMW_PLUGIN_NAME_ ); ?>:
|
237 |
+
<div class="small text-black-50"><?php _e( 'eg. logout or disconnect', _HMW_PLUGIN_NAME_ ); ?></div>
|
238 |
+
</div>
|
239 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
240 |
+
<input type="text" class="form-control bg-input" name="hmw_logout_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_logout_url' ) ?>" placeholder="?action=logout"/>
|
241 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_logout" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
242 |
+
</div>
|
243 |
+
</div>
|
244 |
+
|
245 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-0 my-3">
|
246 |
+
<div class="col-sm-4 p-0 py-2 font-weight-bold">
|
247 |
+
<?php _e( 'Logout Redirect Page', _HMW_PLUGIN_NAME_ ); ?>:
|
248 |
+
</div>
|
249 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
250 |
+
<input type="text" class="form-control bg-input" name="hmw_logout_redirect" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_logout_redirect' ) ?>"/>
|
251 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_logout" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
252 |
+
</div>
|
253 |
+
</div>
|
254 |
+
|
255 |
+
<?php if ( is_multisite() ) { ?>
|
256 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
257 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
258 |
+
<?php _e( 'Custom Activation Path', _HMW_PLUGIN_NAME_ ); ?>:
|
259 |
+
<div class="small text-black-50"><?php _e( 'eg. multisite activation link', _HMW_PLUGIN_NAME_ ); ?></div>
|
260 |
+
</div>
|
261 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
262 |
+
<input type="text" class="form-control bg-input" name="hmw_activate_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_activate_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_activate_url'] ?>"/>
|
263 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_register" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
264 |
+
</div>
|
265 |
+
</div>
|
266 |
+
<?php } ?>
|
267 |
+
<?php } ?>
|
268 |
+
|
269 |
+
</div>
|
270 |
+
</div>
|
271 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
272 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Common Paths', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
273 |
+
<div class="card-body">
|
274 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
275 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
276 |
+
<?php _e( 'Custom admin-ajax Path', _HMW_PLUGIN_NAME_ ); ?>:
|
277 |
+
<div class="small text-black-50"><?php _e( 'eg. ajax, json', _HMW_PLUGIN_NAME_ ); ?></div>
|
278 |
+
</div>
|
279 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
280 |
+
<input type="text" class="form-control bg-input" name="hmw_admin-ajax_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_admin-ajax_url'] ?>"/>
|
281 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_ajax" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
282 |
+
</div>
|
283 |
+
</div>
|
284 |
+
|
285 |
+
<div class="col-sm-12 row mb-1 ml-1 hmw_hideajax_admin_div">
|
286 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
287 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
288 |
+
<input type="hidden" name="hmw_hideajax_admin" value="0"/>
|
289 |
+
<input type="checkbox" id="hmw_hideajax_admin" name="hmw_hideajax_admin" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hideajax_admin' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
290 |
+
<label for="hmw_hideajax_admin"><?php _e( 'Hide wp-admin from ajax URL', _HMW_PLUGIN_NAME_ ); ?></label>
|
291 |
+
<div class="offset-1 text-black-50"><?php echo sprintf( __( 'Show /%s instead of /%s', _HMW_PLUGIN_NAME_ ), HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ), HMW_Classes_Tools::getOption( 'hmw_admin_url' ) . '/' . HMW_Classes_Tools::getOption( 'hmw_admin-ajax_url' ) ); ?></div>
|
292 |
+
<div class="offset-1 text-danger"><?php _e( 'Works only with the custom admin-ajax path to avoid infinite loops.', _HMW_PLUGIN_NAME_ ); ?></div>
|
293 |
+
</div>
|
294 |
+
</div>
|
295 |
+
</div>
|
296 |
+
|
297 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
298 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
299 |
+
<?php _e( 'Custom wp-content Path', _HMW_PLUGIN_NAME_ ); ?>:
|
300 |
+
<div class="small text-black-50"><?php _e( 'eg. core, inc, include', _HMW_PLUGIN_NAME_ ); ?></div>
|
301 |
+
</div>
|
302 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
303 |
+
<input type="text" class="form-control bg-input" name="hmw_wp-content_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_wp-content_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_wp-content_url'] ?>"/>
|
304 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_wpcontent" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
305 |
+
</div>
|
306 |
+
</div>
|
307 |
+
|
308 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
309 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
310 |
+
<?php _e( 'Custom wp-includes Path', _HMW_PLUGIN_NAME_ ); ?>:
|
311 |
+
<div class="small text-black-50"><?php _e( 'eg. lib, library', _HMW_PLUGIN_NAME_ ); ?></div>
|
312 |
+
</div>
|
313 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
314 |
+
<input type="text" class="form-control bg-input" name="hmw_wp-includes_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_wp-includes_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_wp-includes_url'] ?>"/>
|
315 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_wpincludes" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
316 |
+
</div>
|
317 |
+
</div>
|
318 |
+
|
319 |
+
|
320 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
321 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
322 |
+
<?php _e( 'Custom uploads Path', _HMW_PLUGIN_NAME_ ); ?>:
|
323 |
+
<div class="small text-black-50"><?php _e( 'eg. images, files', _HMW_PLUGIN_NAME_ ); ?></div>
|
324 |
+
</div>
|
325 |
+
<?php if ( ! defined( 'UPLOADS' ) ) { ?>
|
326 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
327 |
+
<input type="text" class="form-control bg-input" name="hmw_upload_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_upload_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_upload_url'] ?>"/>
|
328 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_uloads" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
329 |
+
</div>
|
330 |
+
<?php } else { ?>
|
331 |
+
<div class="col-sm-8 text-danger p-0">
|
332 |
+
<?php echo sprintf( __( "You already defined a different wp-content/uploads directory in wp-config.php %s", _HMW_PLUGIN_NAME_ ), ': <strong>' . UPLOADS . '</strong>' ); ?>
|
333 |
+
</div>
|
334 |
+
<?php } ?>
|
335 |
+
</div>
|
336 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
337 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
338 |
+
<?php _e( 'Custom comment Path', _HMW_PLUGIN_NAME_ ); ?>:
|
339 |
+
<div class="small text-black-50"><?php _e( 'eg. comments, discussion', _HMW_PLUGIN_NAME_ ); ?></div>
|
340 |
+
</div>
|
341 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
342 |
+
<input type="text" class="form-control bg-input" name="hmw_wp-comments-post" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_wp-comments-post' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_wp-comments-post'] ?>"/>
|
343 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_comments" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
344 |
+
</div>
|
345 |
+
</div>
|
346 |
+
|
347 |
+
<?php if ( ! HMW_Classes_Tools::isMultisites() && ! HMW_Classes_Tools::isNginx() && ! HMW_Classes_Tools::isWpengine() ) { ?>
|
348 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
349 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
350 |
+
<?php _e( 'Custom author Path', _HMW_PLUGIN_NAME_ ); ?>:
|
351 |
+
<div class="small text-black-50"><?php _e( 'eg. profile, usr, writer', _HMW_PLUGIN_NAME_ ); ?></div>
|
352 |
+
</div>
|
353 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
354 |
+
<input type="text" class="form-control bg-input" name="hmw_author_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_author_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_author_url'] ?>"/>
|
355 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_author" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
356 |
+
</div>
|
357 |
+
</div>
|
358 |
+
<?php } else { ?>
|
359 |
+
<input type="hidden" name="hmw_author_url" value="<?php echo HMW_Classes_Tools::$default['hmw_author_url'] ?>"/>
|
360 |
+
<?php } ?>
|
361 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
362 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) ?>">
|
363 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span></div>
|
364 |
+
</div>
|
365 |
+
<div class="checker col-sm-12 row my-2 py-1" style="opacity: 0.3">
|
366 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
367 |
+
<div class="hmw_pro"><img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>">
|
368 |
+
</div>
|
369 |
+
<label for="hmw_hide_authors"><?php _e( 'Hide Author ID URL', _HMW_PLUGIN_NAME_ ); ?></label>
|
370 |
+
<div class="offset-1 text-black-50"><?php _e( "Don't let URLs like domain.com?author=1 show the user login name", _HMW_PLUGIN_NAME_ ); ?></div>
|
371 |
+
</div>
|
372 |
+
</div>
|
373 |
+
</div>
|
374 |
+
|
375 |
+
</div>
|
376 |
+
</div>
|
377 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
378 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Plugin Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
379 |
+
<div class="card-body">
|
380 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
381 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
382 |
+
<?php _e( 'Custom plugins Path', _HMW_PLUGIN_NAME_ ); ?>:
|
383 |
+
<div class="small text-black-50"><?php _e( 'eg. modules', _HMW_PLUGIN_NAME_ ); ?></div>
|
384 |
+
</div>
|
385 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
386 |
+
<input type="text" class="form-control bg-input" name="hmw_plugin_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_plugin_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_plugin_url'] ?>"/>
|
387 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_plugins" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
388 |
+
</div>
|
389 |
+
</div>
|
390 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
391 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
392 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
393 |
+
<input type="hidden" name="hmw_hide_plugins" value="0"/>
|
394 |
+
<input type="checkbox" id="hmw_hide_plugins" name="hmw_hide_plugins" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_plugins' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
395 |
+
<label for="hmw_hide_plugins"><?php _e( 'Hide plugin names', _HMW_PLUGIN_NAME_ ); ?></label>
|
396 |
+
<div class="offset-1 text-black-50"><?php _e( 'Give random names to each plugin', _HMW_PLUGIN_NAME_ ); ?></div>
|
397 |
+
</div>
|
398 |
+
</div>
|
399 |
+
</div>
|
400 |
+
</div>
|
401 |
+
</div>
|
402 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
403 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Theme Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
404 |
+
<div class="card-body">
|
405 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
406 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
407 |
+
<?php _e( 'Custom themes Path', _HMW_PLUGIN_NAME_ ); ?>:
|
408 |
+
<div class="small text-black-50"><?php _e( 'eg. assets, templates, styles', _HMW_PLUGIN_NAME_ ); ?></div>
|
409 |
+
</div>
|
410 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
411 |
+
<input type="text" class="form-control bg-input" name="hmw_themes_url" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_themes_url' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_themes_url'] ?>"/>
|
412 |
+
<a href="https://hidemywpghost.com/kb/customize-paths-in-hide-my-wp-ghost/#customize_themes" target="_blank" class="position-absolute float-right" style="right: 7px;top: 25%;"><i class="fa fa-question-circle"></i></a>
|
413 |
+
</div>
|
414 |
+
</div>
|
415 |
+
|
416 |
+
<div style="position: relative">
|
417 |
+
<div>
|
418 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
419 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
420 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
421 |
+
<input type="hidden" name="hmw_hide_themes" value="0"/>
|
422 |
+
<input type="checkbox" id="hmw_hide_themes" name="hmw_hide_themes" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_themes' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
423 |
+
<label for="hmw_hide_themes"><?php _e( 'Hide theme names', _HMW_PLUGIN_NAME_ ); ?></label>
|
424 |
+
<div class="offset-1 text-black-50"><?php _e( 'Give random names to each theme (works in WP multisite)', _HMW_PLUGIN_NAME_ ); ?></div>
|
425 |
+
</div>
|
426 |
+
</div>
|
427 |
+
</div>
|
428 |
+
|
429 |
+
|
430 |
+
</div>
|
431 |
+
</div>
|
432 |
+
</div>
|
433 |
+
</div>
|
434 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
435 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'REST API Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
436 |
+
<div class="card-body">
|
437 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) ?>">
|
438 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span></div>
|
439 |
+
</div>
|
440 |
+
<div style="opacity: 0.3">
|
441 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
442 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
443 |
+
<?php _e( 'Custom wp-json Path', _HMW_PLUGIN_NAME_ ); ?>:
|
444 |
+
<div class="small text-black-50"><?php _e( 'eg. json, api, call', _HMW_PLUGIN_NAME_ ); ?></div>
|
445 |
+
</div>
|
446 |
+
<div class="col-sm-8 p-0 input-group input-group-lg" style="opacity: 0.3">
|
447 |
+
<input type="text" class="form-control bg-input"/>
|
448 |
+
</div>
|
449 |
+
</div>
|
450 |
+
|
451 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
452 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
453 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
454 |
+
<div class="hmw_pro">
|
455 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>">
|
456 |
+
</div>
|
457 |
+
<label for="hmw_disable_rest_api"><?php _e( 'Disable Rest API access', _HMW_PLUGIN_NAME_ ); ?></label>
|
458 |
+
<div class="offset-1 text-black-50"><?php _e( "Disable Rest API access if you don't use your website for API calls", _HMW_PLUGIN_NAME_ ); ?></div>
|
459 |
+
</div>
|
460 |
+
</div>
|
461 |
+
</div>
|
462 |
+
</div>
|
463 |
+
</div>
|
464 |
+
</div>
|
465 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
466 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Security Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
467 |
+
<div class="card-body">
|
468 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) ?>">
|
469 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span></div>
|
470 |
+
</div>
|
471 |
+
<div style="opacity: 0.3">
|
472 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
473 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
474 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
475 |
+
<div class="hmw_pro">
|
476 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>">
|
477 |
+
</div>
|
478 |
+
<label for="hmw_hide_oldpaths"><?php _e( 'Hide WordPress Common Paths', _HMW_PLUGIN_NAME_ ); ?></label>
|
479 |
+
<div class="offset-1 text-black-50"><?php _e( 'Hide /wp-content, /wp-include, /plugins, /themes paths', _HMW_PLUGIN_NAME_ ); ?></div>
|
480 |
+
<div class="offset-1 text-black-50"><?php _e( 'Hide upgrade.php and install.php for visitors', _HMW_PLUGIN_NAME_ ); ?></div>
|
481 |
+
<div class="offset-1 text-black-50"><?php _e( '(this may affect the fonts and images loaded through CSS)', _HMW_PLUGIN_NAME_ ); ?></div>
|
482 |
+
</div>
|
483 |
+
</div>
|
484 |
+
</div>
|
485 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
486 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
487 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
488 |
+
<div class="hmw_pro">
|
489 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>">
|
490 |
+
</div>
|
491 |
+
<label for="hmw_hide_commonfiles"><?php _e( 'Hide WordPress Common Files', _HMW_PLUGIN_NAME_ ); ?></label>
|
492 |
+
<div class="offset-1 text-black-50"><?php _e( 'Hide wp-config.php , wp-config-sample.php, readme.html, license.txt files', _HMW_PLUGIN_NAME_ ); ?></div>
|
493 |
+
</div>
|
494 |
+
</div>
|
495 |
+
</div>
|
496 |
+
|
497 |
+
<?php if ( HMW_Classes_Tools::isNginx() || HMW_Classes_Tools::isApache() || HMW_Classes_Tools::isLitespeed() ) { ?>
|
498 |
+
|
499 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
500 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
501 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
502 |
+
<div class="hmw_pro">
|
503 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>"></div>
|
504 |
+
<label for="hmw_sqlinjection"><?php _e( 'Firewall Against Script Injection', _HMW_PLUGIN_NAME_ ); ?></label>
|
505 |
+
<div class="offset-1 text-black-50"><?php echo __( 'Most WordPress installations are hosted on the popular Apache, Nginx and IIS web servers.', _HMW_PLUGIN_NAME_ ); ?></div>
|
506 |
+
<div class="offset-1 text-black-50"><?php echo __( 'A thorough set of rules can prevent many types of SQL Injection and URL hacks from being interpreted.', _HMW_PLUGIN_NAME_ ); ?></div>
|
507 |
+
</div>
|
508 |
+
</div>
|
509 |
+
</div>
|
510 |
+
|
511 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
512 |
+
<?php $uploads = wp_upload_dir(); ?>
|
513 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
514 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
515 |
+
<div class="hmw_pro">
|
516 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>"></div>
|
517 |
+
<label for="hmw_disable_browsing"><?php _e( 'Disable Directory Browsing', _HMW_PLUGIN_NAME_ ); ?></label>
|
518 |
+
<div class="offset-1 text-black-50"><?php echo sprintf( __( "Don't let hackers see any directory content. See %sUploads Directory%s", _HMW_PLUGIN_NAME_ ), '<a href="' . $uploads['baseurl'] . '" target="_blank">', '</a>' ); ?></div>
|
519 |
+
</div>
|
520 |
+
</div>
|
521 |
+
</div>
|
522 |
+
|
523 |
+
<?php } ?>
|
524 |
+
</div>
|
525 |
+
</div>
|
526 |
+
</div>
|
527 |
+
<div class="card col-sm-12 p-0 tab-panel" <?php echo( ( HMW_Classes_Tools::getOption( 'hmw_mode' ) == 'default' ) ? 'style="display:none"' : '' ) ?>>
|
528 |
+
<div class="card-body">
|
529 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
530 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
531 |
+
<?php _e( 'Custom category Path', _HMW_PLUGIN_NAME_ ); ?>:
|
532 |
+
<div class="small text-black-50"><?php _e( 'eg. cat, dir, list', _HMW_PLUGIN_NAME_ ); ?></div>
|
533 |
+
</div>
|
534 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
535 |
+
<input type="text" class="form-control bg-input" name="hmw_category_base" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_category_base' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_category_base'] ?>"/>
|
536 |
+
</div>
|
537 |
+
</div>
|
538 |
+
|
539 |
+
<div class="col-sm-12 row border-bottom border-light py-3 mx-1 my-3">
|
540 |
+
<div class="col-sm-4 p-0 font-weight-bold">
|
541 |
+
<?php _e( 'Custom tags Path', _HMW_PLUGIN_NAME_ ); ?>:
|
542 |
+
<div class="small text-black-50"><?php _e( 'eg. keyword, topic', _HMW_PLUGIN_NAME_ ); ?></div>
|
543 |
+
</div>
|
544 |
+
<div class="col-sm-8 p-0 input-group input-group-lg">
|
545 |
+
<input type="text" class="form-control" name="hmw_tag_base" value="<?php echo HMW_Classes_Tools::getOption( 'hmw_tag_base' ) ?>" placeholder="<?php echo HMW_Classes_Tools::$default['hmw_tag_base'] ?>"/>
|
546 |
+
</div>
|
547 |
+
</div>
|
548 |
+
</div>
|
549 |
+
</div>
|
550 |
+
|
551 |
+
|
552 |
+
<?php if ( HMW_Classes_Tools::getOption( 'test_frontend' ) || HMW_Classes_Tools::getOption( 'logout' ) || HMW_Classes_Tools::getOption( 'error' ) ) { ?>
|
553 |
+
<div class="col-sm-12 m-0 p-2">
|
554 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e( 'Save', _HMW_PLUGIN_NAME_ ); ?></button>
|
555 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
556 |
+
</div>
|
557 |
+
<?php } else { ?>
|
558 |
+
<div class="col-sm-12 m-0 p-2 bg-light text-center" style="position: fixed; bottom: 0; right: 0; z-index: 100; box-shadow: 0px 0px 8px -3px #444;">
|
559 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e( 'Save', _HMW_PLUGIN_NAME_ ); ?></button>
|
560 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
561 |
+
</div>
|
562 |
+
<?php } ?>
|
563 |
+
</form>
|
564 |
+
</div>
|
565 |
+
<div class="hmw_col hmw_col_side">
|
566 |
+
<div class="card col-sm-12 p-0">
|
567 |
+
<div class="card-body f-gray-dark text-center">
|
568 |
+
<h3 class="card-title"><?php _e( 'Check Your Website', _HMW_PLUGIN_NAME_ ); ?></h3>
|
569 |
+
<div class="card-text text-muted">
|
570 |
+
<?php echo __( 'Check if your website is secured with the current settings.', _HMW_PLUGIN_NAME_ ) ?>
|
571 |
+
</div>
|
572 |
+
<div class="card-text text-info m-3">
|
573 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl( 'hmw_securitycheck' ) ?>" class="btn rounded-0 btn-warning btn-lg text-white px-5 securitycheck"><?php _e( 'Security Check', _HMW_PLUGIN_NAME_ ); ?></a>
|
574 |
+
</div>
|
575 |
+
<div class="card-text text-muted small">
|
576 |
+
<?php echo __( 'Make sure you save the settings and empty the cache before checking your website with our tool.', _HMW_PLUGIN_NAME_ ) ?>
|
577 |
+
</div>
|
578 |
+
|
579 |
+
<div class="card-text m-3 ">
|
580 |
+
<a class="bigbutton text-center" href="https://hidemywpghost.com/knowledge-base/" target="_blank"><?php echo __( "Learn more about Hide My WP", _HMW_PLUGIN_NAME_ ); ?></a>
|
581 |
+
</div>
|
582 |
+
</div>
|
583 |
+
</div>
|
584 |
+
|
585 |
+
<div class="card col-sm-12 p-0">
|
586 |
+
<div class="card-body f-gray-dark text-center">
|
587 |
+
<h3 class="card-title"><?php echo __( 'Love Hide My WP?', _HMW_PLUGIN_NAME_ ); ?></h3>
|
588 |
+
<div class="card-text text-muted">
|
589 |
+
<h1>
|
590 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="font-size: 80px"><i class="fa fa-heart text-danger"></i></a>
|
591 |
+
</h1>
|
592 |
+
<?php echo __( 'Please help us and support our plugin on WordPress.org', _HMW_PLUGIN_NAME_ ) ?>
|
593 |
+
</div>
|
594 |
+
<div class="card-text text-info m-3">
|
595 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" class="btn rounded-0 btn-success btn-lg px-4"><?php echo __( 'Rate Hide My WP', _HMW_PLUGIN_NAME_ ); ?></a>
|
596 |
+
</div>
|
597 |
+
<div class="card-text text-muted">
|
598 |
+
<?php echo __( 'Contact us after you left the review cause we have a surprise for you.', _HMW_PLUGIN_NAME_ ) ?>
|
599 |
+
<h1>
|
600 |
+
<a href="https://hidemywpghost.com/contact/" target="_blank" style="font-size: 80px"><i class="fa fa-gift text-info"></i></a>
|
601 |
+
</h1>
|
602 |
+
</div>
|
603 |
+
</div>
|
604 |
+
</div>
|
605 |
+
|
606 |
+
<?php echo $view->getView( 'Support' ) ?>
|
607 |
+
|
608 |
+
</div>
|
609 |
+
</div>
|
610 |
+
</div>
|
611 |
+
<?php }
|
view/Plugins.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs(HMW_Classes_Tools::getValue('tab', 'hmw_permalinks')); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col row justify-content-center flex-grow-1">
|
5 |
+
<?php foreach ($view->plugins as $name => $plugin) { ?>
|
6 |
+
<div class="card p-0 col-sm-5 mt-3 m-1">
|
7 |
+
<div class="card-body pt-3 px-3 pb-0">
|
8 |
+
<h3 class="card-title my-2"><a href="<?php echo $plugin['url']; ?>" class="text-link" target="_blank"><?php echo $plugin['title']; ?></a></h3>
|
9 |
+
<div class="card-text">
|
10 |
+
<a href="<?php echo $plugin['url']; ?>" target="_blank">
|
11 |
+
<img class="col-sm-12 p-0" src="<?php echo $plugin['banner']; ?>" style="max-height: 94px;">
|
12 |
+
</a>
|
13 |
+
</div>
|
14 |
+
<div class="card-text small text-secondary my-2" style="min-height: 120px;"><?php echo $plugin['description']; ?></div>
|
15 |
+
<div class="card-footer row text-right">
|
16 |
+
<a href="<?php echo $plugin['url']; ?>" class="btn rounded-0 btn-light" target="_blank"><?php _e('More details', _HMW_PLUGIN_NAME_) ?></a>
|
17 |
+
<?php if (!HMW_Classes_Tools::isPluginActive($plugin['path'])) { ?>
|
18 |
+
<a href="<?php echo $plugin['url']; ?>" target="_blank" class="btn rounded-0 btn-info"><?php _e('Go To Plugin', _HMW_PLUGIN_NAME_) ?></a>
|
19 |
+
<?php } else { ?>
|
20 |
+
<button class="btn rounded-0 plugin btn-default" disabled><?php _e('Plugin Installed', _HMW_PLUGIN_NAME_) ?></button>
|
21 |
+
<?php } ?>
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
<?php } ?>
|
26 |
+
|
27 |
+
</div>
|
28 |
+
<div class="hmw_col hmw_col_side">
|
29 |
+
<div class="card col-sm-12 p-0 mt-3">
|
30 |
+
<div class="card-body f-gray-dark text-left">
|
31 |
+
<h3 class="panel-title"><?php _e('Plugins', _HMW_PLUGIN_NAME_); ?></h3>
|
32 |
+
<div class="text-info mt-3"><?php echo __("We are testing every week the latest version of these plugins and <strong>we make sure they are working with Hide My WP</strong> plugin.
|
33 |
+
<br /><br />You don't need to install all these plugin in your website. If you're already using a cache plugin you don't need to install another one. <strong>We recommend using only one cache plugin</strong>.
|
34 |
+
<br /><br />You can also install either <strong>iThemes Security</strong> plugin or <strong>Sucuri Security</strong> plugin to work with Hide My Wp plugin.
|
35 |
+
<br /><br />If your plugins directory is not writable you will need to install the plugins manually.", _HMW_PLUGIN_NAME_); ?>
|
36 |
+
</div>
|
37 |
+
</div>
|
38 |
+
</div>
|
39 |
+
|
40 |
+
<?php echo $view->getView('Support') ?>
|
41 |
+
|
42 |
+
</div>
|
43 |
+
</div>
|
44 |
+
</div>
|
view/SecurityCheck.php
ADDED
@@ -0,0 +1,142 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo HMW_Classes_ObjController::getClass('HMW_Controllers_Settings')->getAdminTabs('hmw_securitycheck'); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
5 |
+
<div class="card col-sm-12 p-0">
|
6 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e('WordPress Security Check', _HMW_PLUGIN_NAME_); ?>:</h3>
|
7 |
+
<div class="card-body">
|
8 |
+
<?php if (HMW_Classes_Tools::getOption('api_token') <> '') { ?>
|
9 |
+
<div class="col-sm-12 my-0 text-center">
|
10 |
+
<a href="<?php echo _HMW_ACCOUNT_SITE_ . '/api/auth/' . HMW_Classes_Tools::getOption('api_token') ?>" target="_blank"><img src="<?php echo _HMW_THEME_URL_ . 'img/monitor_panel.png' ?>" style="width: 100%; max-width: 800px;"/></a>
|
11 |
+
</div>
|
12 |
+
<?php } ?>
|
13 |
+
<div class="col-sm-12 border-bottom border-light py-3 m-0">
|
14 |
+
<div class="card col-sm-12 p-4 bg-light ">
|
15 |
+
<div class="card-body text-center p-0">
|
16 |
+
<div class="start_securitycheck">
|
17 |
+
<?php if(!empty($view->riskreport)) { ?>
|
18 |
+
<div class="row">
|
19 |
+
<div class="col-sm-5" style="text-align: center">
|
20 |
+
<?php if (((count($view->riskreport) * 100) / count($view->risktasks)) > 90) { ?>
|
21 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_danger.png' ?>" style="max-width: 60%; margin: 10px auto;"/>
|
22 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: red;"><?php echo sprintf(__("Your website security %sis extremely weak%s. %sMany hacking doors are available.", _HMW_PLUGIN_NAME_), '<strong>', '</strong>', '<br />') ?></div>
|
23 |
+
<?php } elseif (((count($view->riskreport) * 100) / count($view->risktasks)) > 50) { ?>
|
24 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_low.png' ?>" style="max-width: 60%; margin: 10px auto;"/>
|
25 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: red;"><?php echo sprintf(__("Your website security %sis very weak%s. %sMany hacking doors are available.", _HMW_PLUGIN_NAME_), '<strong>', '</strong>', '<br />') ?></div>
|
26 |
+
<?php } elseif (((count($view->riskreport) * 100) / count($view->risktasks)) > 0) { ?>
|
27 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_medium.png' ?>" style="max-width: 60%; margin: 10px auto;"/>
|
28 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: orangered;"><?php echo sprintf(__("Your website security is still weak. %sSome of the main hacking doors are still available.", _HMW_PLUGIN_NAME_), '<br />') ?></div>
|
29 |
+
<?php } else { ?>
|
30 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/speedometer_high.png' ?>" style="max-width: 60%; margin: 10px auto;"/>
|
31 |
+
<div style="font-size: 14px; font-style: italic; text-align: center; color: green;"><?php echo sprintf(__("Your website security is strong. %sKeep checking the security every week.", _HMW_PLUGIN_NAME_), '<br />') ?></div>
|
32 |
+
<?php } ?>
|
33 |
+
</div>
|
34 |
+
<div class="col-sm-7 my-4">
|
35 |
+
<button type="button" class="btn rounded-0 btn-warning btn-lg text-white px-5 "><?php _e('Start Scan', _HMW_PLUGIN_NAME_); ?></button>
|
36 |
+
<?php
|
37 |
+
if (!empty($view->report)) {
|
38 |
+
$overview = array('success' => 0, 'warning' => 0, 'total' => 0);
|
39 |
+
foreach ($view->report as $row) {
|
40 |
+
$overview['success'] += (int)$row['valid'];
|
41 |
+
$overview['warning'] += (int)$row['warning'];
|
42 |
+
$overview['total'] += 1;
|
43 |
+
}
|
44 |
+
echo '<table class="offset-2 col-sm-8 mt-3 mb-0">';
|
45 |
+
echo '<tbody>';
|
46 |
+
echo '
|
47 |
+
<tr>
|
48 |
+
<td class="text-success border-right"><h6>' . __('Passed', _HMW_PLUGIN_NAME_) . '</h6><h2>' . $overview['success'] . '</h2></td>
|
49 |
+
<td class="text-danger"><h6>' . __('Failed', _HMW_PLUGIN_NAME_) . '</h6><h2>' . ($overview['total'] - $overview['success']) . '</h2></td>
|
50 |
+
</tr>';
|
51 |
+
echo '</tbody>';
|
52 |
+
echo '</table>';
|
53 |
+
|
54 |
+
if (($overview['total'] - $overview['success']) == 0) { ?>
|
55 |
+
<div class="text-center text-success font-weight-bold mt-4"><?php echo __("Congratulations! You completed all the security tasks. Make sure you check your site once a week.", _HMW_PLUGIN_NAME_) ?></div>
|
56 |
+
<?php
|
57 |
+
}
|
58 |
+
}
|
59 |
+
?>
|
60 |
+
</div>
|
61 |
+
</div>
|
62 |
+
<?php }else{?>
|
63 |
+
<button type="button" class="btn rounded-0 btn-warning btn-lg text-white px-5 "><?php _e('Start Scan', _HMW_PLUGIN_NAME_); ?></button>
|
64 |
+
<?php }?>
|
65 |
+
|
66 |
+
<div class="text-center small text-black-50 mt-4"><?php echo sprintf(__("According to %sGoogle latest stats%s, over %s20k websites are hacked every week%s and over %s30% of them are made in WordPress%s. <br />It's %sbetter to prevent an attack%s than to spend a lot of money and time to recover your data after an attack not to mention the situation when your clients' data are stollen.", _HMW_PLUGIN_NAME_), '<a href="https://transparencyreport.google.com/safe-browsing/overview" target="_blank">', '</a>','<strong>','</strong>','<strong>','</strong>','<strong>','</strong>') ?></div>
|
67 |
+
<?php if (isset($view->securitycheck_time['timestamp'])) { ?>
|
68 |
+
<div class="text-center text-info my-2 font-italic" style="font-size: 12px">
|
69 |
+
<strong><?php _e('Last check:', _HMW_PLUGIN_NAME_); ?></strong> <?php echo date(get_option('date_format') . ' ' . get_option('time_format'), ($view->securitycheck_time['timestamp'] + (get_option('gmt_offset') * HOUR_IN_SECONDS))); ?>
|
70 |
+
</div>
|
71 |
+
<?php } ?>
|
72 |
+
</div>
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
+
<div class="col-sm-12 mt-3 p-0 input-group">
|
76 |
+
<?php
|
77 |
+
if (!empty($view->report)) {
|
78 |
+
echo '<table class="table table-striped table_securitycheck">';
|
79 |
+
echo '
|
80 |
+
<thead>
|
81 |
+
<tr>
|
82 |
+
<th scope="col">' . __('Name', _HMW_PLUGIN_NAME_) . '</th>
|
83 |
+
<th scope="col">' . __('Value', _HMW_PLUGIN_NAME_) . '</th>
|
84 |
+
<th scope="col">' . __('Valid', _HMW_PLUGIN_NAME_) . '</th>
|
85 |
+
<th scope="col">' . __('Action', _HMW_PLUGIN_NAME_) . '</th>
|
86 |
+
</tr>
|
87 |
+
</thead>';
|
88 |
+
|
89 |
+
echo '<tbody>';
|
90 |
+
foreach ($view->report as $index => $row) {
|
91 |
+
echo '
|
92 |
+
<tr>
|
93 |
+
<td style="min-width: 250px">' . $row['name'] . '</td>
|
94 |
+
<td style="min-width: 200px; max-width: 250px; font-weight: bold">' . $row['value'] . '</td>
|
95 |
+
<td class="' . ($row['valid'] ? 'text-success' : 'text-danger') . '">' . ($row['valid'] ? '<i class="fa fa-check mx-2"></i>' : '<i class="fa fa-times mx-2"></i>' . (isset($row['solution']) ? $row['solution'] : '')) . '</td>
|
96 |
+
<td style="min-width: 180px; padding-right: 0!important;" >
|
97 |
+
<div class="modal fade" id="hmw_securitydetail' . $index . '" tabindex="-1" role="dialog" aria-hidden="true">
|
98 |
+
<div class="modal-dialog modal-lg" role="document">
|
99 |
+
<div class="modal-content">
|
100 |
+
<div class="modal-header">
|
101 |
+
<h5 class="modal-title" id="exampleModalLabel">' . $row['name'] . '</h5>
|
102 |
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
103 |
+
<span aria-hidden="true">×</span>
|
104 |
+
</button>
|
105 |
+
</div>
|
106 |
+
<div class="modal-body">' . $row['message'] . '</div>
|
107 |
+
</div>
|
108 |
+
</div>
|
109 |
+
</div>
|
110 |
+
<button class="btn btn-default" type="button" data-toggle="modal" data-target="#hmw_securitydetail' . $index . '">' . __('Info', _HMW_PLUGIN_NAME_) . '</button>
|
111 |
+
' . ((!$row['valid'] && isset($row['javascript']) && $row['javascript'] <> '') ? (isset($row['pro']) ? $row['pro'] : '<button class="btn btn-success mx-0" onclick="' . $row['javascript'] . '">' . __('Fix it', _HMW_PLUGIN_NAME_) . '</button>') : '') . '
|
112 |
+
<button type="button" class="close m-1" aria-label="Close" style="display: none" onclick="if (confirm(\'' . __('Are you sure you want to ignore this task in the future?') . '\')) {jQuery(this).hmw_securityExclude(\'' . $index . '\');}">
|
113 |
+
<span aria-hidden="true">×</span>
|
114 |
+
</button>
|
115 |
+
</td>
|
116 |
+
</tr>';
|
117 |
+
}
|
118 |
+
echo '</tbody>';
|
119 |
+
echo '</table>';
|
120 |
+
|
121 |
+
}
|
122 |
+
?>
|
123 |
+
</div>
|
124 |
+
<div class="col-sm-12 text-right">
|
125 |
+
<button class="btn btn-default hmw_resetexclude" type="button"><?php echo __('Reset all ingnored tasks', _HMW_PLUGIN_NAME_) ?></button>
|
126 |
+
</div>
|
127 |
+
</div>
|
128 |
+
<?php if (!HMW_Classes_Tools::getOption('api_token') <> '') { ?>
|
129 |
+
<div class="col-sm-12 border-bottom border-light py-3 mx-0 my-3">
|
130 |
+
<div class="card col-sm-12 p-0 input-group">
|
131 |
+
<div class="card-body text-center">
|
132 |
+
<a href="https://wpplugins.tips/wordpress-vulnerability-detector/?url=<?php echo urlencode(home_url()) ?>" target="_blank"><img src="<?php echo _HMW_THEME_URL_ . 'img/security_check.png' ?>" style="width: 100%"></a>
|
133 |
+
</div>
|
134 |
+
</div>
|
135 |
+
</div>
|
136 |
+
<?php } ?>
|
137 |
+
</div>
|
138 |
+
</div>
|
139 |
+
</div>
|
140 |
+
|
141 |
+
</div>
|
142 |
+
</div>
|
view/Support.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="card col-sm-12 p-0">
|
2 |
+
<div class="card-body f-gray-dark text-center">
|
3 |
+
<h3 class="card-title"><?php _e('Need Help?', _HMW_PLUGIN_NAME_); ?></h3>
|
4 |
+
<form id="hmw_support">
|
5 |
+
<div class="card-text my-2 text-muted">
|
6 |
+
<?php echo sprintf(__("Read the plugin tutorial and how to setup every feature %sRead Hide My WP Tutorial%s", _HMW_PLUGIN_NAME_),'<br /><a href="https://hidemywpghost.com/kb/hide-my-wp-ghost-tutorial/" target="_blank"><strong>','</strong></a>') ?>
|
7 |
+
<br /><br />
|
8 |
+
<?php echo sprintf(__("You can also email us on %scontact@wpplugins.tips%s and we are happy to answer any question or suggestion you may have and we aim to respond within 24 hours.", _HMW_PLUGIN_NAME_),'<a href="mailto:contact@wpplugins.tips" target="_blank">','</a>') ?>
|
9 |
+
</div>
|
10 |
+
|
11 |
+
</form>
|
12 |
+
|
13 |
+
</div>
|
14 |
+
</div>
|
view/Tweaks.php
ADDED
@@ -0,0 +1,213 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="hmw_wrap" class="d-flex flex-row my-3 bg-light">
|
2 |
+
<?php echo $view->getAdminTabs( HMW_Classes_Tools::getValue( 'tab', 'hmw_permalinks' ) ); ?>
|
3 |
+
<div class="hmw_row d-flex flex-row bg-white px-3">
|
4 |
+
<div class="hmw_col flex-grow-1 mr-3">
|
5 |
+
<form method="POST">
|
6 |
+
<?php wp_nonce_field( 'hmw_tweakssettings', 'hmw_nonce' ) ?>
|
7 |
+
<input type="hidden" name="action" value="hmw_tweakssettings"/>
|
8 |
+
|
9 |
+
<div class="card col-sm-12 p-0 tab-panel">
|
10 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Change Options', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
11 |
+
<div class="card-body">
|
12 |
+
|
13 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
14 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
15 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
16 |
+
<input type="hidden" name="hmw_hide_loggedusers" value="0"/>
|
17 |
+
<input type="checkbox" id="hmw_hide_loggedusers" name="hmw_hide_loggedusers" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hide_loggedusers' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
18 |
+
<label for="hmw_hide_loggedusers"><?php _e( 'Change Paths for Logged Users', _HMW_PLUGIN_NAME_ ); ?></label>
|
19 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#change_paths_logged_users" target="_blank" class="d-inline-block ml-2"><i class="fa fa-question-circle"></i></a>
|
20 |
+
<div class="offset-1 text-black-50"><?php _e( "Change WordPress paths while you're logged in", _HMW_PLUGIN_NAME_ ); ?></div>
|
21 |
+
<div class="offset-1 text-black-50"><?php _e( "(not recommended, may affect other plugins functionality in admin)", _HMW_PLUGIN_NAME_ ); ?></div>
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
|
26 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
27 |
+
<div class="box" data-toggle="popover" data-html="true" data-placement="top" data-content="<?php echo sprintf( __( 'This feature requires %sHide My WP Ghost%s.', _HMW_PLUGIN_NAME_ ), "<a href='https://hidemywpghost.com/hide-my-wp-pricing/' target='_blank'>", "</a>" ) ?>">
|
28 |
+
<div class="ribbon"><span><?php echo __( 'PRO', _HMW_PLUGIN_NAME_ ) ?></span></div>
|
29 |
+
</div>
|
30 |
+
<div class="checker col-sm-12 row my-2 py-1" style="opacity: 0.3">
|
31 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
32 |
+
<div class="hmw_pro">
|
33 |
+
<img src="<?php echo _HMW_THEME_URL_ . 'img/pro.png' ?>"></div>
|
34 |
+
|
35 |
+
<label for="hmw_in_dashboard"><?php _e( 'Change Paths in Cached Files', _HMW_PLUGIN_NAME_ ); ?></label>
|
36 |
+
<div class="offset-1 text-black-50"><?php _e( 'Change the WordPress common paths in the cached files from /wp-content/cache directory', _HMW_PLUGIN_NAME_ ); ?></div>
|
37 |
+
<div class="offset-1 text-black-50"><?php _e( '(this feature runs in background and needs up to one minute after every cache purged)', _HMW_PLUGIN_NAME_ ); ?></div>
|
38 |
+
</div>
|
39 |
+
</div>
|
40 |
+
</div>
|
41 |
+
|
42 |
+
|
43 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
44 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
45 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
46 |
+
<input type="hidden" name="hmw_hideajax_paths" value="0"/>
|
47 |
+
<input type="checkbox" id="hmw_hideajax_paths" name="hmw_hideajax_paths" class="switch" <?php echo( HMW_Classes_Tools::getOption( 'hmw_hideajax_paths' ) ? 'checked="checked"' : '' ) ?> value="1"/>
|
48 |
+
<label for="hmw_hideajax_paths"><?php _e( 'Change Paths in Ajax Calls', _HMW_PLUGIN_NAME_ ); ?></label>
|
49 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#change_paths_ajax" target="_blank" class="d-inline-block ml-2"><i class="fa fa-question-circle"></i></a>
|
50 |
+
<div class="offset-1 text-black-50"><?php echo __( 'This will prevent from showing the old paths when an image or font is called through ajax', _HMW_PLUGIN_NAME_ ); ?></div>
|
51 |
+
</div>
|
52 |
+
</div>
|
53 |
+
</div>
|
54 |
+
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
<div class="card col-sm-12 p-0 tab-panel">
|
58 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Hide/Show Options', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
59 |
+
<div class="card-body">
|
60 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
61 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
62 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
63 |
+
<input type="hidden" name="hmw_hide_version" value="0"/>
|
64 |
+
<input type="checkbox" id="hmw_hide_version" name="hmw_hide_version" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_hide_version') ? 'checked="checked"' : '') ?>value="1"/>
|
65 |
+
<label for="hmw_hide_version"><?php _e('Hide Versions and WordPress Tags', _HMW_PLUGIN_NAME_); ?></label>
|
66 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#hide_wordpress_version" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
67 |
+
<div class="offset-1 text-black-50"><?php _e("Hide WordPress and Plugin versions from the end of any image, css and js files", _HMW_PLUGIN_NAME_); ?></div>
|
68 |
+
<div class="offset-1 text-black-50"><?php _e("Hide the WP Generator META", _HMW_PLUGIN_NAME_); ?></div>
|
69 |
+
<div class="offset-1 text-black-50"><?php _e("Hide the WP DNS Prefetch META", _HMW_PLUGIN_NAME_); ?></div>
|
70 |
+
</div>
|
71 |
+
</div>
|
72 |
+
</div>
|
73 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
74 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
75 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
76 |
+
<input type="hidden" name="hmw_hide_header" value="0"/>
|
77 |
+
<input type="checkbox" id="hmw_hide_header" name="hmw_hide_header" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_hide_header') ? 'checked="checked"' : '') ?> value="1"/>
|
78 |
+
<label for="hmw_hide_header"><?php _e('Hide RSD (Really Simple Discovery) header', _HMW_PLUGIN_NAME_); ?></label>
|
79 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#hide_rsd" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
80 |
+
<div class="offset-1 text-black-50"><?php _e("Don't show any WordPress information in HTTP header request", _HMW_PLUGIN_NAME_); ?></div>
|
81 |
+
</div>
|
82 |
+
</div>
|
83 |
+
</div>
|
84 |
+
|
85 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
86 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
87 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
88 |
+
<input type="hidden" name="hmw_hide_comments" value="0"/>
|
89 |
+
<input type="checkbox" id="hmw_hide_comments" name="hmw_hide_comments" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_hide_comments') ? 'checked="checked"' : '') ?> value="1"/>
|
90 |
+
<label for="hmw_hide_comments"><?php _e('Hide WordPress HTML Comments', _HMW_PLUGIN_NAME_); ?></label>
|
91 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#hide_comments" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
92 |
+
<div class="offset-1 text-black-50"><?php _e("Hide the HTML Comments left by theme and plugins", _HMW_PLUGIN_NAME_); ?></div>
|
93 |
+
</div>
|
94 |
+
</div>
|
95 |
+
</div>
|
96 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
97 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
98 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
99 |
+
<input type="hidden" name="hmw_disable_emojicons" value="0"/>
|
100 |
+
<input type="checkbox" id="hmw_disable_emojicons" name="hmw_disable_emojicons" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_disable_emojicons') ? 'checked="checked"' : '') ?> value="1"/>
|
101 |
+
<label for="hmw_disable_emojicons"><?php _e('Hide Emojicons', _HMW_PLUGIN_NAME_); ?></label>
|
102 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#hide_emojicons" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
103 |
+
<div class="offset-1 text-black-50"><?php _e("Don't load Emoji Icons if you don't use them", _HMW_PLUGIN_NAME_); ?></div>
|
104 |
+
</div>
|
105 |
+
</div>
|
106 |
+
</div>
|
107 |
+
</div>
|
108 |
+
</div>
|
109 |
+
<div class="card col-sm-12 p-0 tab-panel">
|
110 |
+
<h3 class="card-title bg-brown text-white p-2"><?php _e( 'Other Settings', _HMW_PLUGIN_NAME_ ); ?>:</h3>
|
111 |
+
<div class="card-body">
|
112 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
113 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
114 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
115 |
+
<input type="hidden" name="hmw_disable_xmlrpc" value="0"/>
|
116 |
+
<input type="checkbox" id="hmw_disable_xmlrpc" name="hmw_disable_xmlrpc" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_disable_xmlrpc') ? 'checked="checked"' : '') ?> value="1"/>
|
117 |
+
<label for="hmw_disable_xmlrpc"><?php _e('Disable XML-RPC authentication', _HMW_PLUGIN_NAME_); ?></label>
|
118 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#disable_xml_rpc_access" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
119 |
+
<div class="offset-1 text-black-50"><?php echo sprintf(__("Don't load XML-RPC to prevent %sBrute force attacks via XML-RPC%s", _HMW_PLUGIN_NAME_), '<a href="https://hidemywpghost.com/should-you-disable-xml-rpc-on-wordpress/" target="_blank">', '</a>'); ?></div>
|
120 |
+
</div>
|
121 |
+
</div>
|
122 |
+
</div>
|
123 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
124 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
125 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
126 |
+
<input type="hidden" name="hmw_disable_embeds" value="0"/>
|
127 |
+
<input type="checkbox" id="hmw_disable_embeds" name="hmw_disable_embeds" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_disable_embeds') ? 'checked="checked"' : '') ?> value="1"/>
|
128 |
+
<label for="hmw_disable_embeds"><?php _e('Disable Embed scripts', _HMW_PLUGIN_NAME_); ?></label>
|
129 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#disable_embed_scripts" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
130 |
+
<div class="offset-1 text-black-50"><?php _e("Don't load oEmbed service if you don't use oEmbed videos", _HMW_PLUGIN_NAME_); ?></div>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
|
135 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
136 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
137 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
138 |
+
<input type="hidden" name="hmw_disable_manifest" value="0"/>
|
139 |
+
<input type="checkbox" id="hmw_disable_manifest" name="hmw_disable_manifest" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_disable_manifest') ? 'checked="checked"' : '') ?> value="1"/>
|
140 |
+
<label for="hmw_disable_manifest"><?php _e('Disable WLW Manifest scripts', _HMW_PLUGIN_NAME_); ?></label>
|
141 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#disable_wlw_scripts" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
142 |
+
<div class="offset-1 text-black-50"><?php _e("Don't load WLW if you didn't configure Windows Live Writer for your site", _HMW_PLUGIN_NAME_); ?></div>
|
143 |
+
</div>
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
|
147 |
+
<div class="col-sm-12 row mb-1 ml-1">
|
148 |
+
<div class="checker col-sm-12 row my-2 py-1">
|
149 |
+
<div class="col-sm-12 p-0 switch switch-sm">
|
150 |
+
<input type="hidden" name="hmw_disable_debug" value="0"/>
|
151 |
+
<input type="checkbox" id="hmw_disable_debug" name="hmw_disable_debug" class="js-switch pull-right fixed-sidebar-check" <?php echo(HMW_Classes_Tools::getOption('hmw_disable_debug') ? 'checked="checked"' : '') ?> value="1"/>
|
152 |
+
<label for="hmw_disable_debug"><?php _e('Disable DB Debug in Frontent', _HMW_PLUGIN_NAME_); ?></label>
|
153 |
+
<a href="https://hidemywpghost.com/kb/activate-security-tweaks/#disable_db_debug" target="_blank" class="d-inline-block ml-2" ><i class="fa fa-question-circle"></i></a>
|
154 |
+
<div class="offset-1 text-black-50"><?php _e("Don't load DB Debug if your website is live", _HMW_PLUGIN_NAME_); ?></div>
|
155 |
+
</div>
|
156 |
+
</div>
|
157 |
+
</div>
|
158 |
+
</div>
|
159 |
+
|
160 |
+
</div>
|
161 |
+
<div class="col-sm-12 m-0 p-2 bg-light text-center" style="position: fixed; bottom: 0; right: 0; z-index: 100; box-shadow: 0px 0px 8px -3px #444;">
|
162 |
+
<button type="submit" class="btn rounded-0 btn-success btn-lg px-5 mr-5 save"><?php _e('Save', _HMW_PLUGIN_NAME_); ?></button>
|
163 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="color: #ff005e;"><?php echo sprintf( __( 'Love Hide My WP %s? Show us ;)', _HMW_PLUGIN_NAME_ ), _HMW_VER_NAME_ ); ?></a>
|
164 |
+
</div>
|
165 |
+
</form>
|
166 |
+
</div>
|
167 |
+
<div class="hmw_col hmw_col_side">
|
168 |
+
<?php echo $view->getView( 'Support' ) ?>
|
169 |
+
|
170 |
+
|
171 |
+
<div class="card col-sm-12 p-0">
|
172 |
+
<div class="card-body f-gray-dark text-center">
|
173 |
+
<h3 class="card-title"><?php _e( 'Check Your Website', _HMW_PLUGIN_NAME_ ); ?></h3>
|
174 |
+
<div class="card-text text-muted">
|
175 |
+
<?php echo __( 'Check if your website is secured with the current settings.', _HMW_PLUGIN_NAME_ ) ?>
|
176 |
+
</div>
|
177 |
+
<div class="card-text text-info m-3">
|
178 |
+
<a href="<?php echo HMW_Classes_Tools::getSettingsUrl( 'hmw_securitycheck' ) ?>" class="btn rounded-0 btn-warning btn-lg text-white px-5 securitycheck"><?php _e( 'Security Check', _HMW_PLUGIN_NAME_ ); ?></a>
|
179 |
+
</div>
|
180 |
+
<div class="card-text text-muted small">
|
181 |
+
<?php echo __( 'Make sure you save the settings and empty the cache before checking your website with our tool.', _HMW_PLUGIN_NAME_ ) ?>
|
182 |
+
</div>
|
183 |
+
|
184 |
+
<div class="card-text m-3 ">
|
185 |
+
<a class="bigbutton text-center" href="https://hidemywpghost.com/knowledge-base/" target="_blank"><?php echo __( "Learn more about Hide My WP", _HMW_PLUGIN_NAME_ ); ?></a>
|
186 |
+
</div>
|
187 |
+
</div>
|
188 |
+
</div>
|
189 |
+
|
190 |
+
<div class="card col-sm-12 p-0">
|
191 |
+
<div class="card-body f-gray-dark text-center">
|
192 |
+
<h3 class="card-title"><?php echo __( 'Love Hide My WP?', _HMW_PLUGIN_NAME_ ); ?></h3>
|
193 |
+
<div class="card-text text-muted">
|
194 |
+
<h1>
|
195 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" style="font-size: 80px"><i class="fa fa-heart text-danger"></i></a>
|
196 |
+
</h1>
|
197 |
+
<?php echo __( 'Please help us and support our plugin on WordPress.org', _HMW_PLUGIN_NAME_ ) ?>
|
198 |
+
</div>
|
199 |
+
<div class="card-text text-info m-3">
|
200 |
+
<a href="https://wordpress.org/support/plugin/hide-my-wp/reviews/?rate=5#new-post" target="_blank" class="btn rounded-0 btn-success btn-lg px-4"><?php echo __( 'Rate Hide My WP', _HMW_PLUGIN_NAME_ ); ?></a>
|
201 |
+
</div>
|
202 |
+
<div class="card-text text-muted">
|
203 |
+
<?php echo __( 'Contact us after you left the review cause we have a surprise for you.', _HMW_PLUGIN_NAME_ ) ?>
|
204 |
+
<h1>
|
205 |
+
<a href="https://hidemywpghost.com/contact/" target="_blank" style="font-size: 80px"><i class="fa fa-gift text-info"></i></a>
|
206 |
+
</h1>
|
207 |
+
</div>
|
208 |
+
</div>
|
209 |
+
</div>
|
210 |
+
</div>
|
211 |
+
|
212 |
+
</div>
|
213 |
+
</div>
|
view/css/alert.css
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.hmw_notice {
|
2 |
+
background: #ffffe2 !important;
|
3 |
+
padding: 1em;
|
4 |
+
margin: 0;
|
5 |
+
color: #444;
|
6 |
+
border-left: 2px solid #ffffe2;
|
7 |
+
border-bottom: 2px solid #e5765c;
|
8 |
+
}
|
9 |
+
|
10 |
+
.hmw_notice.success {
|
11 |
+
background: #188a18 !important;
|
12 |
+
color: white;
|
13 |
+
}
|
14 |
+
|
15 |
+
.hmw_notice.notice {
|
16 |
+
background: #ffffe2 !important;
|
17 |
+
color: #444;
|
18 |
+
border-left: 2px solid #ffffe2;
|
19 |
+
border-bottom: 2px solid #e5765c;
|
20 |
+
}
|
21 |
+
|
22 |
+
.hmw_notice p {
|
23 |
+
|
24 |
+
display: block;
|
25 |
+
font-size: 14px;
|
26 |
+
font-weight: normal;
|
27 |
+
letter-spacing: normal;
|
28 |
+
line-height: 30px;
|
29 |
+
margin: 0 0 10px 0;
|
30 |
+
font-style: normal;
|
31 |
+
white-space: normal;
|
32 |
+
}
|
33 |
+
|
34 |
+
.hmw_logout {
|
35 |
+
display: inline-block;
|
36 |
+
margin-left: 10px;
|
37 |
+
}
|
38 |
+
|
39 |
+
.hmw_btn {
|
40 |
+
font-size: 18px;
|
41 |
+
border: 1px solid transparent;
|
42 |
+
border-radius: 0;
|
43 |
+
outline: none !important;
|
44 |
+
display: inline-block;
|
45 |
+
padding: 6px 12px;
|
46 |
+
margin-bottom: 0;
|
47 |
+
font-weight: normal;
|
48 |
+
line-height: 1.42857143;
|
49 |
+
text-align: center;
|
50 |
+
white-space: nowrap;
|
51 |
+
vertical-align: middle;
|
52 |
+
-ms-touch-action: manipulation;
|
53 |
+
touch-action: manipulation;
|
54 |
+
cursor: pointer;
|
55 |
+
-webkit-user-select: none;
|
56 |
+
-moz-user-select: none;
|
57 |
+
-ms-user-select: none;
|
58 |
+
user-select: none;
|
59 |
+
background-image: none;
|
60 |
+
}
|
61 |
+
|
62 |
+
.hmw_btn-success {
|
63 |
+
color: #fff;
|
64 |
+
background-color: green;
|
65 |
+
border-color: transparent;
|
66 |
+
}
|
67 |
+
|
68 |
+
.hmw_btn-warning {
|
69 |
+
color: #fff;
|
70 |
+
background-color: #e8bf40;
|
71 |
+
border-color: transparent;
|
72 |
+
}
|
view/css/bootstrap.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-l
|