Version Description
Current Release = Released: 22nd March, 2018 - Release Notes
(v.1-2) FIXED: Various small fixes and improvements
(v.0) NEW: [PRO] Keyless Activation of Pro licenses.
(v.0) ADDED: WordPress Password Policies.
(v.0) ADDED: Pwned Passwords Detection.
(v.0) IMPROVED: Major rewrite of plugin AJAX handling.
(v.0) IMPROVED: Notices to indicate the time of the last scans.
(v.0) FIXED: A few bugs
Download this release
Release Info
Developer | paultgoodchild |
Plugin | Shield Security for WordPress |
Version | 6.6.2 |
Comparing to | |
See all releases |
Code changes from version 6.6.0 to 6.6.2
- changelog.html +5028 -0
- changelog.txt +1075 -0
- icwp-wpsf.php +1 -1
- plugin-spec.php +2 -2
- readme.txt +33 -1129
- src/common/icwp-optionsvo.php +29 -4
- src/common/icwp-wpfilesystem.php +1 -0
- src/common/lib/composer.lock +12 -12
- src/common/lib/vendor/composer/installed.json +80 -80
- src/common/lib/vendor/nesbot/carbon/src/Carbon/Carbon.php +435 -207
- src/common/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php +133 -29
- src/common/lib/vendor/nesbot/carbon/src/Carbon/Lang/gu.php +31 -0
- src/common/lib/vendor/nesbot/carbon/src/Carbon/Translator.php +143 -0
- src/common/lib/vendor/twig/twig/lib/Twig/Environment.php +3 -3
- src/common/lib/vendor/twig/twig/lib/Twig/Extension/Core.php +8 -0
- src/common/lib/vendor/twig/twig/lib/Twig/Lexer.php +3 -0
- src/common/lib/vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.php +5 -0
- src/common/lib/vendor/twig/twig/lib/Twig/Parser.php +1 -1
- src/config/feature-admin_access_restriction.php +5 -0
- src/config/feature-license.php +12 -3
- src/features/base.php +11 -17
- src/features/license.php +59 -2
- templates/php/access_restricted.php +1 -1
- templates/php/snippets/options_form.php +1 -1
- templates/php/snippets/pro.php +43 -13
changelog.html
ADDED
@@ -0,0 +1,5028 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Untitled Document.md</title>
|
2 |
+
<style>@charset "UTF-8";
|
3 |
+
@import 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.9.0-alpha2/katex.min.css';
|
4 |
+
code {
|
5 |
+
color: #c7254e;
|
6 |
+
background-color: #f9f2f4;
|
7 |
+
border-radius: 4px
|
8 |
+
}
|
9 |
+
code, kbd {
|
10 |
+
padding: 2px 4px
|
11 |
+
}
|
12 |
+
kbd {
|
13 |
+
color: #ffffff;
|
14 |
+
background-color: #333333;
|
15 |
+
border-radius: 3px;
|
16 |
+
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25)
|
17 |
+
}
|
18 |
+
kbd kbd {
|
19 |
+
padding: 0;
|
20 |
+
font-size: 100%;
|
21 |
+
box-shadow: none
|
22 |
+
}
|
23 |
+
pre {
|
24 |
+
display: block;
|
25 |
+
margin: 0 0 10px;
|
26 |
+
word-break: break-all;
|
27 |
+
word-wrap: break-word;
|
28 |
+
color: #333333;
|
29 |
+
background-color: #f5f5f5;
|
30 |
+
border: 1px solid #cccccc;
|
31 |
+
border-radius: 4px
|
32 |
+
}
|
33 |
+
pre code {
|
34 |
+
padding: 0;
|
35 |
+
font-size: inherit;
|
36 |
+
color: inherit;
|
37 |
+
white-space: pre-wrap;
|
38 |
+
background-color: transparent;
|
39 |
+
border-radius: 0
|
40 |
+
}
|
41 |
+
.pre-scrollable {
|
42 |
+
max-height: 340px;
|
43 |
+
overflow-y: scroll
|
44 |
+
}
|
45 |
+
table {
|
46 |
+
background-color: transparent
|
47 |
+
}
|
48 |
+
th {
|
49 |
+
text-align: left
|
50 |
+
}
|
51 |
+
.table {
|
52 |
+
width: 100%;
|
53 |
+
max-width: 100%;
|
54 |
+
margin-bottom: 20px
|
55 |
+
}
|
56 |
+
.table > thead > tr > th {
|
57 |
+
padding: 8px;
|
58 |
+
line-height: 1.4285714;
|
59 |
+
border-top: 1px solid #dddddd
|
60 |
+
}
|
61 |
+
.table > thead > tr > td, .table > tbody > tr > th, .table > tbody > tr > td, .table > tfoot > tr > th, .table > tfoot > tr > td {
|
62 |
+
padding: 8px;
|
63 |
+
line-height: 1.4285714;
|
64 |
+
vertical-align: top;
|
65 |
+
border-top: 1px solid #dddddd
|
66 |
+
}
|
67 |
+
.table > thead > tr > th {
|
68 |
+
vertical-align: bottom;
|
69 |
+
border-bottom: 2px solid #dddddd
|
70 |
+
}
|
71 |
+
.table > caption + thead > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > th, .table > thead:first-child > tr:first-child > td {
|
72 |
+
border-top: 0
|
73 |
+
}
|
74 |
+
.table > tbody + tbody {
|
75 |
+
border-top: 2px solid #dddddd
|
76 |
+
}
|
77 |
+
.table .table {
|
78 |
+
background-color: #ffffff
|
79 |
+
}
|
80 |
+
.table-condensed > thead > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > th, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > th, .table-condensed > tfoot > tr > td {
|
81 |
+
padding: 5px
|
82 |
+
}
|
83 |
+
.table-bordered, .table-bordered > thead > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > th, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > th, .table-bordered > tfoot > tr > td {
|
84 |
+
border: 1px solid #dddddd
|
85 |
+
}
|
86 |
+
.table-bordered > thead > tr > th, .table-bordered > thead > tr > td {
|
87 |
+
border-bottom-width: 2px
|
88 |
+
}
|
89 |
+
.table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {
|
90 |
+
background-color: #f9f9f9
|
91 |
+
}
|
92 |
+
.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
|
93 |
+
background-color: #f5f5f5
|
94 |
+
}
|
95 |
+
table col[class*="col-"] {
|
96 |
+
position: static;
|
97 |
+
float: none;
|
98 |
+
display: table-column
|
99 |
+
}
|
100 |
+
table td[class*="col-"], table th[class*="col-"] {
|
101 |
+
position: static;
|
102 |
+
float: none;
|
103 |
+
display: table-cell
|
104 |
+
}
|
105 |
+
.table > thead > tr > td.active, .table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr > td.active, .table > tbody > tr > th.active, .table > tbody > tr.active > td, .table > tbody > tr.active > th, .table > tfoot > tr > td.active, .table > tfoot > tr > th.active, .table > tfoot > tr.active > td, .table > tfoot > tr.active > th {
|
106 |
+
background-color: #f5f5f5
|
107 |
+
}
|
108 |
+
.table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th {
|
109 |
+
background-color: #e8e8e8
|
110 |
+
}
|
111 |
+
.table > thead > tr > td.success, .table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr > td.success, .table > tbody > tr > th.success, .table > tbody > tr.success > td, .table > tbody > tr.success > th, .table > tfoot > tr > td.success, .table > tfoot > tr > th.success, .table > tfoot > tr.success > td, .table > tfoot > tr.success > th {
|
112 |
+
background-color: #dff0d8
|
113 |
+
}
|
114 |
+
.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th {
|
115 |
+
background-color: #d0e9c6
|
116 |
+
}
|
117 |
+
.table > thead > tr > td.info, .table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr > td.info, .table > tbody > tr > th.info, .table > tbody > tr.info > td, .table > tbody > tr.info > th, .table > tfoot > tr > td.info, .table > tfoot > tr > th.info, .table > tfoot > tr.info > td, .table > tfoot > tr.info > th {
|
118 |
+
background-color: #d9edf7
|
119 |
+
}
|
120 |
+
.table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th {
|
121 |
+
background-color: #c4e3f3
|
122 |
+
}
|
123 |
+
.table > thead > tr > td.warning, .table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr > td.warning, .table > tbody > tr > th.warning, .table > tbody > tr.warning > td, .table > tbody > tr.warning > th, .table > tfoot > tr > td.warning, .table > tfoot > tr > th.warning, .table > tfoot > tr.warning > td, .table > tfoot > tr.warning > th {
|
124 |
+
background-color: #fcf8e3
|
125 |
+
}
|
126 |
+
.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th {
|
127 |
+
background-color: #faf2cc
|
128 |
+
}
|
129 |
+
.table > thead > tr > td.danger, .table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr > td.danger, .table > tbody > tr > th.danger, .table > tbody > tr.danger > td, .table > tbody > tr.danger > th, .table > tfoot > tr > td.danger, .table > tfoot > tr > th.danger, .table > tfoot > tr.danger > td, .table > tfoot > tr.danger > th {
|
130 |
+
background-color: #f2dede
|
131 |
+
}
|
132 |
+
.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th {
|
133 |
+
background-color: #ebcccc
|
134 |
+
}
|
135 |
+
fieldset {
|
136 |
+
border: 0;
|
137 |
+
min-width: 0
|
138 |
+
}
|
139 |
+
legend {
|
140 |
+
display: block;
|
141 |
+
width: 100%;
|
142 |
+
margin-bottom: 20px;
|
143 |
+
font-size: 21px;
|
144 |
+
line-height: inherit;
|
145 |
+
color: #333333;
|
146 |
+
border-bottom: 1px solid #e5e5e5
|
147 |
+
}
|
148 |
+
label {
|
149 |
+
display: inline-block;
|
150 |
+
max-width: 100%;
|
151 |
+
margin-bottom: 5px;
|
152 |
+
font-weight: 700
|
153 |
+
}
|
154 |
+
input[type="radio"], input[type="checkbox"] {
|
155 |
+
margin: 4px 0 0;
|
156 |
+
margin-top: 1px \9;
|
157 |
+
line-height: normal
|
158 |
+
}
|
159 |
+
input[type="file"] {
|
160 |
+
display: block
|
161 |
+
}
|
162 |
+
input[type="range"] {
|
163 |
+
display: block;
|
164 |
+
width: 100%
|
165 |
+
}
|
166 |
+
select[multiple], select[size] {
|
167 |
+
height: auto
|
168 |
+
}
|
169 |
+
input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus {
|
170 |
+
outline: thin dotted;
|
171 |
+
outline: 5px auto -webkit-focus-ring-color;
|
172 |
+
outline-offset: -2px
|
173 |
+
}
|
174 |
+
output {
|
175 |
+
padding-top: 7px
|
176 |
+
}
|
177 |
+
output, .form-control {
|
178 |
+
display: block;
|
179 |
+
font-size: 14px;
|
180 |
+
line-height: 1.4285714;
|
181 |
+
color: #555555
|
182 |
+
}
|
183 |
+
.form-control {
|
184 |
+
width: 100%;
|
185 |
+
height: 34px;
|
186 |
+
padding: 6px 12px;
|
187 |
+
background-color: #ffffff;
|
188 |
+
background-image: none;
|
189 |
+
border: 1px solid #cccccc;
|
190 |
+
border-radius: 4px;
|
191 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
192 |
+
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
193 |
+
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s
|
194 |
+
}
|
195 |
+
.form-control:focus {
|
196 |
+
border-color: #66afe9;
|
197 |
+
outline: 0;
|
198 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
|
199 |
+
}
|
200 |
+
.form-control::-moz-placeholder {
|
201 |
+
color: #777777;
|
202 |
+
opacity: 1
|
203 |
+
}
|
204 |
+
.form-control:-ms-input-placeholder {
|
205 |
+
color: #777777
|
206 |
+
}
|
207 |
+
.form-control::-webkit-input-placeholder {
|
208 |
+
color: #777777
|
209 |
+
}
|
210 |
+
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
|
211 |
+
cursor: not-allowed;
|
212 |
+
background-color: #eeeeee;
|
213 |
+
opacity: 1
|
214 |
+
}
|
215 |
+
textarea.form-control {
|
216 |
+
height: auto
|
217 |
+
}
|
218 |
+
input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] {
|
219 |
+
line-height: 34px;
|
220 |
+
line-height: 1.4285714 \0
|
221 |
+
}
|
222 |
+
input[type="date"].input-sm, .form-horizontal .form-group-sm input[type="date"].form-control, .input-group-sm > input[type="date"].form-control, .input-group-sm > input[type="date"].input-group-addon, .input-group-sm > .input-group-btn > input[type="date"].btn, input[type="time"].input-sm, .form-horizontal .form-group-sm input[type="time"].form-control, .input-group-sm > input[type="time"].form-control, .input-group-sm > input[type="time"].input-group-addon, .input-group-sm > .input-group-btn > input[type="time"].btn, input[type="datetime-local"].input-sm, .form-horizontal .form-group-sm input[type="datetime-local"].form-control, .input-group-sm > input[type="datetime-local"].form-control, .input-group-sm > input[type="datetime-local"].input-group-addon, .input-group-sm > .input-group-btn > input[type="datetime-local"].btn, input[type="month"].input-sm, .form-horizontal .form-group-sm input[type="month"].form-control, .input-group-sm > input[type="month"].form-control, .input-group-sm > input[type="month"].input-group-addon, .input-group-sm > .input-group-btn > input[type="month"].btn {
|
223 |
+
line-height: 30px
|
224 |
+
}
|
225 |
+
input[type="date"].input-lg, .form-horizontal .form-group-lg input[type="date"].form-control, .input-group-lg > input[type="date"].form-control, .input-group-lg > input[type="date"].input-group-addon, .input-group-lg > .input-group-btn > input[type="date"].btn, input[type="time"].input-lg, .form-horizontal .form-group-lg input[type="time"].form-control, .input-group-lg > input[type="time"].form-control, .input-group-lg > input[type="time"].input-group-addon, .input-group-lg > .input-group-btn > input[type="time"].btn, input[type="datetime-local"].input-lg, .form-horizontal .form-group-lg input[type="datetime-local"].form-control, .input-group-lg > input[type="datetime-local"].form-control, .input-group-lg > input[type="datetime-local"].input-group-addon, .input-group-lg > .input-group-btn > input[type="datetime-local"].btn, input[type="month"].input-lg, .form-horizontal .form-group-lg input[type="month"].form-control, .input-group-lg > input[type="month"].form-control, .input-group-lg > input[type="month"].input-group-addon, .input-group-lg > .input-group-btn > input[type="month"].btn {
|
226 |
+
line-height: 46px
|
227 |
+
}
|
228 |
+
.form-group {
|
229 |
+
margin-bottom: 15px
|
230 |
+
}
|
231 |
+
.radio, .checkbox {
|
232 |
+
position: relative;
|
233 |
+
display: block;
|
234 |
+
min-height: 20px;
|
235 |
+
margin-top: 10px;
|
236 |
+
margin-bottom: 10px
|
237 |
+
}
|
238 |
+
.radio label, .checkbox label {
|
239 |
+
padding-left: 20px;
|
240 |
+
margin-bottom: 0;
|
241 |
+
font-weight: 400;
|
242 |
+
cursor: pointer
|
243 |
+
}
|
244 |
+
.radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] {
|
245 |
+
position: absolute;
|
246 |
+
margin-left: -20px;
|
247 |
+
margin-top: 4px \9
|
248 |
+
}
|
249 |
+
.radio + .radio, .checkbox + .checkbox {
|
250 |
+
margin-top: -5px
|
251 |
+
}
|
252 |
+
.radio-inline, .checkbox-inline {
|
253 |
+
display: inline-block;
|
254 |
+
padding-left: 20px;
|
255 |
+
margin-bottom: 0;
|
256 |
+
vertical-align: middle;
|
257 |
+
font-weight: 400;
|
258 |
+
cursor: pointer
|
259 |
+
}
|
260 |
+
.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline {
|
261 |
+
margin-top: 0;
|
262 |
+
margin-left: 10px
|
263 |
+
}
|
264 |
+
input[type="radio"][disabled], input[type="radio"].disabled, fieldset[disabled] input[type="radio"], input[type="checkbox"][disabled], input[type="checkbox"].disabled, fieldset[disabled] input[type="checkbox"], .radio-inline.disabled, fieldset[disabled] .radio-inline, .checkbox-inline.disabled, fieldset[disabled] .checkbox-inline, .radio.disabled label, fieldset[disabled] .radio label, .checkbox.disabled label, fieldset[disabled] .checkbox label {
|
265 |
+
cursor: not-allowed
|
266 |
+
}
|
267 |
+
.form-control-static {
|
268 |
+
padding-top: 7px;
|
269 |
+
padding-bottom: 7px;
|
270 |
+
margin-bottom: 0
|
271 |
+
}
|
272 |
+
.form-control-static.input-lg, .form-horizontal .form-group-lg .form-control-static.form-control, .input-group-lg > .form-control-static.form-control, .input-group-lg > .form-control-static.input-group-addon, .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .form-horizontal .form-group-sm .form-control-static.form-control, .input-group-sm > .form-control-static.form-control, .input-group-sm > .form-control-static.input-group-addon, .input-group-sm > .input-group-btn > .form-control-static.btn {
|
273 |
+
padding-left: 0;
|
274 |
+
padding-right: 0
|
275 |
+
}
|
276 |
+
.input-sm, .form-horizontal .form-group-sm .form-control, .input-group-sm > .form-control {
|
277 |
+
height: 30px;
|
278 |
+
padding: 5px 10px;
|
279 |
+
font-size: 12px;
|
280 |
+
line-height: 1.5;
|
281 |
+
border-radius: 3px
|
282 |
+
}
|
283 |
+
.input-group-sm > .input-group-addon {
|
284 |
+
height: 30px;
|
285 |
+
line-height: 1.5
|
286 |
+
}
|
287 |
+
.input-group-sm > .input-group-btn > .btn {
|
288 |
+
height: 30px;
|
289 |
+
padding: 5px 10px;
|
290 |
+
font-size: 12px;
|
291 |
+
line-height: 1.5;
|
292 |
+
border-radius: 3px
|
293 |
+
}
|
294 |
+
select.input-sm, .form-horizontal .form-group-sm select.form-control, .input-group-sm > select.form-control, .input-group-sm > select.input-group-addon, .input-group-sm > .input-group-btn > select.btn {
|
295 |
+
height: 30px;
|
296 |
+
line-height: 30px
|
297 |
+
}
|
298 |
+
textarea.input-sm, .form-horizontal .form-group-sm textarea.form-control, .input-group-sm > textarea.form-control, .input-group-sm > textarea.input-group-addon, .input-group-sm > .input-group-btn > textarea.btn, select[multiple].input-sm, .form-horizontal .form-group-sm select[multiple].form-control, .input-group-sm > select[multiple].form-control, .input-group-sm > select[multiple].input-group-addon, .input-group-sm > .input-group-btn > select[multiple].btn {
|
299 |
+
height: auto
|
300 |
+
}
|
301 |
+
.input-lg, .form-horizontal .form-group-lg .form-control, .input-group-lg > .form-control {
|
302 |
+
height: 46px;
|
303 |
+
padding: 10px 16px;
|
304 |
+
font-size: 18px;
|
305 |
+
line-height: 1.33;
|
306 |
+
border-radius: 6px
|
307 |
+
}
|
308 |
+
.input-group-lg > .input-group-addon {
|
309 |
+
height: 46px;
|
310 |
+
line-height: 1.33
|
311 |
+
}
|
312 |
+
.input-group-lg > .input-group-btn > .btn {
|
313 |
+
height: 46px;
|
314 |
+
padding: 10px 16px;
|
315 |
+
font-size: 18px;
|
316 |
+
line-height: 1.33;
|
317 |
+
border-radius: 6px
|
318 |
+
}
|
319 |
+
select.input-lg, .form-horizontal .form-group-lg select.form-control, .input-group-lg > select.form-control, .input-group-lg > select.input-group-addon, .input-group-lg > .input-group-btn > select.btn {
|
320 |
+
height: 46px;
|
321 |
+
line-height: 46px
|
322 |
+
}
|
323 |
+
textarea.input-lg, .form-horizontal .form-group-lg textarea.form-control, .input-group-lg > textarea.form-control, .input-group-lg > textarea.input-group-addon, .input-group-lg > .input-group-btn > textarea.btn, select[multiple].input-lg, .form-horizontal .form-group-lg select[multiple].form-control, .input-group-lg > select[multiple].form-control, .input-group-lg > select[multiple].input-group-addon, .input-group-lg > .input-group-btn > select[multiple].btn {
|
324 |
+
height: auto
|
325 |
+
}
|
326 |
+
.has-feedback {
|
327 |
+
position: relative
|
328 |
+
}
|
329 |
+
.has-feedback .form-control {
|
330 |
+
padding-right: 42.5px
|
331 |
+
}
|
332 |
+
.form-control-feedback {
|
333 |
+
position: absolute;
|
334 |
+
top: 25px;
|
335 |
+
right: 0;
|
336 |
+
z-index: 2;
|
337 |
+
display: block;
|
338 |
+
width: 34px;
|
339 |
+
height: 34px;
|
340 |
+
line-height: 34px;
|
341 |
+
text-align: center
|
342 |
+
}
|
343 |
+
.input-lg + .form-control-feedback, .form-horizontal .form-group-lg .form-control + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, .input-group-lg > .input-group-addon + .form-control-feedback, .input-group-lg > .input-group-btn > .btn + .form-control-feedback {
|
344 |
+
width: 46px;
|
345 |
+
height: 46px;
|
346 |
+
line-height: 46px
|
347 |
+
}
|
348 |
+
.input-sm + .form-control-feedback, .form-horizontal .form-group-sm .form-control + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, .input-group-sm > .input-group-addon + .form-control-feedback, .input-group-sm > .input-group-btn > .btn + .form-control-feedback {
|
349 |
+
width: 30px;
|
350 |
+
height: 30px;
|
351 |
+
line-height: 30px
|
352 |
+
}
|
353 |
+
.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline {
|
354 |
+
color: #3c763d
|
355 |
+
}
|
356 |
+
.has-success .form-control {
|
357 |
+
border-color: #3c763d;
|
358 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
|
359 |
+
}
|
360 |
+
.has-success .form-control:focus {
|
361 |
+
border-color: #2b542c;
|
362 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168
|
363 |
+
}
|
364 |
+
.has-success .input-group-addon {
|
365 |
+
color: #3c763d;
|
366 |
+
border-color: #3c763d;
|
367 |
+
background-color: #dff0d8
|
368 |
+
}
|
369 |
+
.has-success .form-control-feedback {
|
370 |
+
color: #3c763d
|
371 |
+
}
|
372 |
+
.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline {
|
373 |
+
color: #8a6d3b
|
374 |
+
}
|
375 |
+
.has-warning .form-control {
|
376 |
+
border-color: #8a6d3b;
|
377 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
|
378 |
+
}
|
379 |
+
.has-warning .form-control:focus {
|
380 |
+
border-color: #66512c;
|
381 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b
|
382 |
+
}
|
383 |
+
.has-warning .input-group-addon {
|
384 |
+
color: #8a6d3b;
|
385 |
+
border-color: #8a6d3b;
|
386 |
+
background-color: #fcf8e3
|
387 |
+
}
|
388 |
+
.has-warning .form-control-feedback {
|
389 |
+
color: #8a6d3b
|
390 |
+
}
|
391 |
+
.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline {
|
392 |
+
color: #a94442
|
393 |
+
}
|
394 |
+
.has-error .form-control {
|
395 |
+
border-color: #a94442;
|
396 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
|
397 |
+
}
|
398 |
+
.has-error .form-control:focus {
|
399 |
+
border-color: #843534;
|
400 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483
|
401 |
+
}
|
402 |
+
.has-error .input-group-addon {
|
403 |
+
color: #a94442;
|
404 |
+
border-color: #a94442;
|
405 |
+
background-color: #f2dede
|
406 |
+
}
|
407 |
+
.has-error .form-control-feedback {
|
408 |
+
color: #a94442
|
409 |
+
}
|
410 |
+
.has-feedback label.sr-only ~ .form-control-feedback {
|
411 |
+
top: 0
|
412 |
+
}
|
413 |
+
.help-block {
|
414 |
+
display: block;
|
415 |
+
margin-top: 5px;
|
416 |
+
margin-bottom: 10px;
|
417 |
+
color: #737373
|
418 |
+
}
|
419 |
+
.form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline {
|
420 |
+
margin-top: 0;
|
421 |
+
margin-bottom: 0;
|
422 |
+
padding-top: 7px
|
423 |
+
}
|
424 |
+
.form-horizontal .radio, .form-horizontal .checkbox {
|
425 |
+
min-height: 27px
|
426 |
+
}
|
427 |
+
.form-horizontal .form-group {
|
428 |
+
margin-left: -15px;
|
429 |
+
margin-right: -15px
|
430 |
+
}
|
431 |
+
.form-horizontal .form-group:before {
|
432 |
+
content: " ";
|
433 |
+
display: table
|
434 |
+
}
|
435 |
+
.form-horizontal .form-group:after {
|
436 |
+
content: " ";
|
437 |
+
display: table;
|
438 |
+
clear: both
|
439 |
+
}
|
440 |
+
.form-horizontal .has-feedback .form-control-feedback {
|
441 |
+
top: 0;
|
442 |
+
right: 15px
|
443 |
+
}
|
444 |
+
.btn {
|
445 |
+
display: inline-block;
|
446 |
+
vertical-align: middle;
|
447 |
+
cursor: pointer;
|
448 |
+
background-image: none;
|
449 |
+
border: 1px solid transparent;
|
450 |
+
white-space: nowrap;
|
451 |
+
-webkit-user-select: none;
|
452 |
+
-moz-user-select: none;
|
453 |
+
-ms-user-select: none;
|
454 |
+
user-select: none
|
455 |
+
}
|
456 |
+
.btn:focus, .btn:active:focus, .btn.active:focus {
|
457 |
+
outline: thin dotted;
|
458 |
+
outline: 5px auto -webkit-focus-ring-color;
|
459 |
+
outline-offset: -2px
|
460 |
+
}
|
461 |
+
.btn:hover, .btn:focus {
|
462 |
+
color: #333333;
|
463 |
+
text-decoration: none
|
464 |
+
}
|
465 |
+
.btn:active, .btn.active {
|
466 |
+
outline: 0;
|
467 |
+
background-image: none;
|
468 |
+
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
|
469 |
+
}
|
470 |
+
.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
|
471 |
+
cursor: not-allowed;
|
472 |
+
pointer-events: none;
|
473 |
+
opacity: .65;
|
474 |
+
filter: alpha(opacity=65);
|
475 |
+
box-shadow: none
|
476 |
+
}
|
477 |
+
.btn-default {
|
478 |
+
color: #333333;
|
479 |
+
background-color: #ffffff;
|
480 |
+
border-color: #cccccc
|
481 |
+
}
|
482 |
+
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle {
|
483 |
+
color: #333333;
|
484 |
+
background-color: #e6e6e6;
|
485 |
+
border-color: #adadad
|
486 |
+
}
|
487 |
+
.btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle {
|
488 |
+
background-image: none
|
489 |
+
}
|
490 |
+
.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
|
491 |
+
background-color: #ffffff;
|
492 |
+
border-color: #cccccc
|
493 |
+
}
|
494 |
+
.btn-default .badge {
|
495 |
+
color: #ffffff;
|
496 |
+
background-color: #333333
|
497 |
+
}
|
498 |
+
.btn-primary {
|
499 |
+
color: #ffffff;
|
500 |
+
background-color: #428bca;
|
501 |
+
border-color: #357ebd
|
502 |
+
}
|
503 |
+
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle {
|
504 |
+
color: #ffffff;
|
505 |
+
background-color: #3071a9;
|
506 |
+
border-color: #285e8e
|
507 |
+
}
|
508 |
+
.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle {
|
509 |
+
background-image: none
|
510 |
+
}
|
511 |
+
.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
|
512 |
+
background-color: #428bca;
|
513 |
+
border-color: #357ebd
|
514 |
+
}
|
515 |
+
.btn-primary .badge {
|
516 |
+
color: #428bca;
|
517 |
+
background-color: #ffffff
|
518 |
+
}
|
519 |
+
.btn-success {
|
520 |
+
color: #ffffff;
|
521 |
+
background-color: #5cb85c;
|
522 |
+
border-color: #4cae4c
|
523 |
+
}
|
524 |
+
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle {
|
525 |
+
color: #ffffff;
|
526 |
+
background-color: #449d44;
|
527 |
+
border-color: #398439
|
528 |
+
}
|
529 |
+
.btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle {
|
530 |
+
background-image: none
|
531 |
+
}
|
532 |
+
.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
|
533 |
+
background-color: #5cb85c;
|
534 |
+
border-color: #4cae4c
|
535 |
+
}
|
536 |
+
.btn-success .badge {
|
537 |
+
color: #5cb85c;
|
538 |
+
background-color: #ffffff
|
539 |
+
}
|
540 |
+
.btn-info {
|
541 |
+
color: #ffffff;
|
542 |
+
background-color: #5bc0de;
|
543 |
+
border-color: #46b8da
|
544 |
+
}
|
545 |
+
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle {
|
546 |
+
color: #ffffff;
|
547 |
+
background-color: #31b0d5;
|
548 |
+
border-color: #269abc
|
549 |
+
}
|
550 |
+
.btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle {
|
551 |
+
background-image: none
|
552 |
+
}
|
553 |
+
.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
|
554 |
+
background-color: #5bc0de;
|
555 |
+
border-color: #46b8da
|
556 |
+
}
|
557 |
+
.btn-info .badge {
|
558 |
+
color: #5bc0de;
|
559 |
+
background-color: #ffffff
|
560 |
+
}
|
561 |
+
.btn-warning {
|
562 |
+
color: #ffffff;
|
563 |
+
background-color: #f0ad4e;
|
564 |
+
border-color: #eea236
|
565 |
+
}
|
566 |
+
.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle {
|
567 |
+
color: #ffffff;
|
568 |
+
background-color: #ec971f;
|
569 |
+
border-color: #d58512
|
570 |
+
}
|
571 |
+
.btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle {
|
572 |
+
background-image: none
|
573 |
+
}
|
574 |
+
.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
|
575 |
+
background-color: #f0ad4e;
|
576 |
+
border-color: #eea236
|
577 |
+
}
|
578 |
+
.btn-warning .badge {
|
579 |
+
color: #f0ad4e;
|
580 |
+
background-color: #ffffff
|
581 |
+
}
|
582 |
+
.btn-danger {
|
583 |
+
color: #ffffff;
|
584 |
+
background-color: #d9534f;
|
585 |
+
border-color: #d43f3a
|
586 |
+
}
|
587 |
+
.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle {
|
588 |
+
color: #ffffff;
|
589 |
+
background-color: #c9302c;
|
590 |
+
border-color: #ac2925
|
591 |
+
}
|
592 |
+
.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle {
|
593 |
+
background-image: none
|
594 |
+
}
|
595 |
+
.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
|
596 |
+
background-color: #d9534f;
|
597 |
+
border-color: #d43f3a
|
598 |
+
}
|
599 |
+
.btn-danger .badge {
|
600 |
+
color: #d9534f;
|
601 |
+
background-color: #ffffff
|
602 |
+
}
|
603 |
+
.btn-link {
|
604 |
+
color: #428bca;
|
605 |
+
font-weight: 400;
|
606 |
+
cursor: pointer;
|
607 |
+
border-radius: 0
|
608 |
+
}
|
609 |
+
.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
|
610 |
+
background-color: transparent;
|
611 |
+
box-shadow: none
|
612 |
+
}
|
613 |
+
.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
|
614 |
+
border-color: transparent
|
615 |
+
}
|
616 |
+
.btn-link:hover, .btn-link:focus {
|
617 |
+
color: #2a6496;
|
618 |
+
text-decoration: underline;
|
619 |
+
background-color: transparent
|
620 |
+
}
|
621 |
+
.btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus {
|
622 |
+
color: #777777;
|
623 |
+
text-decoration: none
|
624 |
+
}
|
625 |
+
.btn-lg {
|
626 |
+
padding: 10px 16px;
|
627 |
+
font-size: 18px;
|
628 |
+
line-height: 1.33;
|
629 |
+
border-radius: 6px
|
630 |
+
}
|
631 |
+
.btn-sm {
|
632 |
+
padding: 5px 10px
|
633 |
+
}
|
634 |
+
.btn-sm, .btn-xs {
|
635 |
+
font-size: 12px;
|
636 |
+
line-height: 1.5;
|
637 |
+
border-radius: 3px
|
638 |
+
}
|
639 |
+
.btn-xs {
|
640 |
+
padding: 1px 5px
|
641 |
+
}
|
642 |
+
.btn-block {
|
643 |
+
display: block;
|
644 |
+
width: 100%
|
645 |
+
}
|
646 |
+
.btn-block + .btn-block {
|
647 |
+
margin-top: 5px
|
648 |
+
}
|
649 |
+
input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
|
650 |
+
width: 100%
|
651 |
+
}
|
652 |
+
.fade {
|
653 |
+
opacity: 0;
|
654 |
+
-webkit-transition: opacity .15s linear;
|
655 |
+
transition: opacity .15s linear
|
656 |
+
}
|
657 |
+
.fade.in {
|
658 |
+
opacity: 1
|
659 |
+
}
|
660 |
+
.collapse {
|
661 |
+
display: none
|
662 |
+
}
|
663 |
+
.collapse.in {
|
664 |
+
display: block
|
665 |
+
}
|
666 |
+
tr.collapse.in {
|
667 |
+
display: table-row
|
668 |
+
}
|
669 |
+
tbody.collapse.in {
|
670 |
+
display: table-row-group
|
671 |
+
}
|
672 |
+
.collapsing {
|
673 |
+
position: relative;
|
674 |
+
height: 0;
|
675 |
+
overflow: hidden;
|
676 |
+
-webkit-transition: height .35s ease;
|
677 |
+
transition: height .35s ease
|
678 |
+
}
|
679 |
+
.input-group {
|
680 |
+
position: relative;
|
681 |
+
display: table;
|
682 |
+
border-collapse: separate
|
683 |
+
}
|
684 |
+
.input-group[class*="col-"] {
|
685 |
+
float: none;
|
686 |
+
padding-left: 0;
|
687 |
+
padding-right: 0
|
688 |
+
}
|
689 |
+
.input-group .form-control {
|
690 |
+
position: relative;
|
691 |
+
z-index: 2;
|
692 |
+
float: left;
|
693 |
+
width: 100%;
|
694 |
+
margin-bottom: 0
|
695 |
+
}
|
696 |
+
.input-group-addon, .input-group-btn, .input-group .form-control {
|
697 |
+
display: table-cell
|
698 |
+
}
|
699 |
+
.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) {
|
700 |
+
border-radius: 0
|
701 |
+
}
|
702 |
+
.input-group-addon {
|
703 |
+
white-space: nowrap
|
704 |
+
}
|
705 |
+
.input-group-addon, .input-group-btn {
|
706 |
+
width: 1%;
|
707 |
+
vertical-align: middle
|
708 |
+
}
|
709 |
+
.input-group-addon {
|
710 |
+
padding: 6px 12px;
|
711 |
+
font-size: 14px;
|
712 |
+
font-weight: 400;
|
713 |
+
line-height: 1;
|
714 |
+
color: #555555;
|
715 |
+
text-align: center;
|
716 |
+
background-color: #eeeeee;
|
717 |
+
border: 1px solid #cccccc;
|
718 |
+
border-radius: 4px
|
719 |
+
}
|
720 |
+
.input-group-addon.input-sm, .form-horizontal .form-group-sm .input-group-addon.form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .input-group-addon.btn {
|
721 |
+
padding: 5px 10px;
|
722 |
+
font-size: 12px;
|
723 |
+
border-radius: 3px
|
724 |
+
}
|
725 |
+
.input-group-addon.input-lg, .form-horizontal .form-group-lg .input-group-addon.form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .input-group-addon.btn {
|
726 |
+
padding: 10px 16px;
|
727 |
+
font-size: 18px;
|
728 |
+
border-radius: 6px
|
729 |
+
}
|
730 |
+
.input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] {
|
731 |
+
margin-top: 0
|
732 |
+
}
|
733 |
+
.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
|
734 |
+
border-bottom-right-radius: 0;
|
735 |
+
border-top-right-radius: 0
|
736 |
+
}
|
737 |
+
.input-group-addon:first-child {
|
738 |
+
border-right: 0
|
739 |
+
}
|
740 |
+
.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
|
741 |
+
border-bottom-left-radius: 0;
|
742 |
+
border-top-left-radius: 0
|
743 |
+
}
|
744 |
+
.input-group-addon:last-child {
|
745 |
+
border-left: 0
|
746 |
+
}
|
747 |
+
.input-group-btn {
|
748 |
+
font-size: 0;
|
749 |
+
white-space: nowrap
|
750 |
+
}
|
751 |
+
.input-group-btn, .input-group-btn > .btn {
|
752 |
+
position: relative
|
753 |
+
}
|
754 |
+
.input-group-btn > .btn + .btn {
|
755 |
+
margin-left: -1px
|
756 |
+
}
|
757 |
+
.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {
|
758 |
+
z-index: 2
|
759 |
+
}
|
760 |
+
.input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group {
|
761 |
+
margin-right: -1px
|
762 |
+
}
|
763 |
+
.input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group {
|
764 |
+
margin-left: -1px
|
765 |
+
}
|
766 |
+
.pagination {
|
767 |
+
display: inline-block;
|
768 |
+
padding-left: 0;
|
769 |
+
margin: 20px 0;
|
770 |
+
border-radius: 4px
|
771 |
+
}
|
772 |
+
.pagination > li {
|
773 |
+
display: inline
|
774 |
+
}
|
775 |
+
.pagination > li > a, .pagination > li > span {
|
776 |
+
position: relative;
|
777 |
+
float: left;
|
778 |
+
padding: 6px 12px;
|
779 |
+
line-height: 1.4285714;
|
780 |
+
text-decoration: none;
|
781 |
+
color: #428bca;
|
782 |
+
background-color: #ffffff;
|
783 |
+
border: 1px solid #dddddd;
|
784 |
+
margin-left: -1px
|
785 |
+
}
|
786 |
+
.pagination > li:first-child > a, .pagination > li:first-child > span {
|
787 |
+
margin-left: 0;
|
788 |
+
border-bottom-left-radius: 4px;
|
789 |
+
border-top-left-radius: 4px
|
790 |
+
}
|
791 |
+
.pagination > li:last-child > a, .pagination > li:last-child > span {
|
792 |
+
border-bottom-right-radius: 4px;
|
793 |
+
border-top-right-radius: 4px
|
794 |
+
}
|
795 |
+
.pagination > li > a:hover, .pagination > li > a:focus, .pagination > li > span:hover, .pagination > li > span:focus {
|
796 |
+
color: #2a6496;
|
797 |
+
background-color: #eeeeee;
|
798 |
+
border-color: #dddddd
|
799 |
+
}
|
800 |
+
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
|
801 |
+
z-index: 2;
|
802 |
+
color: #ffffff;
|
803 |
+
background-color: #428bca;
|
804 |
+
border-color: #428bca;
|
805 |
+
cursor: default
|
806 |
+
}
|
807 |
+
.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus {
|
808 |
+
color: #777777;
|
809 |
+
background-color: #ffffff;
|
810 |
+
border-color: #dddddd;
|
811 |
+
cursor: not-allowed
|
812 |
+
}
|
813 |
+
.pagination-lg > li > a, .pagination-lg > li > span {
|
814 |
+
padding: 10px 16px;
|
815 |
+
font-size: 18px
|
816 |
+
}
|
817 |
+
.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span {
|
818 |
+
border-bottom-left-radius: 6px;
|
819 |
+
border-top-left-radius: 6px
|
820 |
+
}
|
821 |
+
.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span {
|
822 |
+
border-bottom-right-radius: 6px;
|
823 |
+
border-top-right-radius: 6px
|
824 |
+
}
|
825 |
+
.pagination-sm > li > a, .pagination-sm > li > span {
|
826 |
+
padding: 5px 10px;
|
827 |
+
font-size: 12px
|
828 |
+
}
|
829 |
+
.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span {
|
830 |
+
border-bottom-left-radius: 3px;
|
831 |
+
border-top-left-radius: 3px
|
832 |
+
}
|
833 |
+
.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span {
|
834 |
+
border-bottom-right-radius: 3px;
|
835 |
+
border-top-right-radius: 3px
|
836 |
+
}
|
837 |
+
.close {
|
838 |
+
float: right;
|
839 |
+
font-size: 21px;
|
840 |
+
font-weight: 700;
|
841 |
+
line-height: 1;
|
842 |
+
color: #000000;
|
843 |
+
text-shadow: 0 1px 0 #ffffff;
|
844 |
+
opacity: .2;
|
845 |
+
filter: alpha(opacity=20)
|
846 |
+
}
|
847 |
+
.close:hover, .close:focus {
|
848 |
+
color: #000000;
|
849 |
+
text-decoration: none;
|
850 |
+
cursor: pointer;
|
851 |
+
opacity: .5;
|
852 |
+
filter: alpha(opacity=50)
|
853 |
+
}
|
854 |
+
button.close {
|
855 |
+
padding: 0;
|
856 |
+
cursor: pointer;
|
857 |
+
background: 0 0;
|
858 |
+
border: 0;
|
859 |
+
-webkit-appearance: none
|
860 |
+
}
|
861 |
+
.modal-open, .modal {
|
862 |
+
overflow: hidden
|
863 |
+
}
|
864 |
+
.modal {
|
865 |
+
display: none;
|
866 |
+
position: fixed;
|
867 |
+
top: 0;
|
868 |
+
right: 0;
|
869 |
+
bottom: 0;
|
870 |
+
left: 0;
|
871 |
+
z-index: 1050;
|
872 |
+
-webkit-overflow-scrolling: touch;
|
873 |
+
outline: 0
|
874 |
+
}
|
875 |
+
.modal.fade .modal-dialog {
|
876 |
+
-webkit-transform: translate3d(0, -25%, 0);
|
877 |
+
transform: translate3d(0, -25%, 0);
|
878 |
+
-webkit-transition: -webkit-transform .3s ease-out;
|
879 |
+
transition: transform .3s ease-out;
|
880 |
+
transition: transform .3s ease-out, -webkit-transform .3s ease-out
|
881 |
+
}
|
882 |
+
.modal.in .modal-dialog {
|
883 |
+
-webkit-transform: translate3d(0, 0, 0);
|
884 |
+
transform: translate3d(0, 0, 0)
|
885 |
+
}
|
886 |
+
.modal-open .modal {
|
887 |
+
overflow-x: hidden;
|
888 |
+
overflow-y: auto
|
889 |
+
}
|
890 |
+
.modal-dialog {
|
891 |
+
position: relative;
|
892 |
+
width: auto;
|
893 |
+
margin: 10px
|
894 |
+
}
|
895 |
+
.modal-content {
|
896 |
+
position: relative;
|
897 |
+
background-color: #ffffff;
|
898 |
+
border: 1px solid #999999;
|
899 |
+
border: 1px solid rgba(0, 0, 0, .2);
|
900 |
+
border-radius: 6px;
|
901 |
+
box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
|
902 |
+
background-clip: padding-box;
|
903 |
+
outline: 0
|
904 |
+
}
|
905 |
+
.modal-backdrop {
|
906 |
+
position: fixed;
|
907 |
+
top: 0;
|
908 |
+
right: 0;
|
909 |
+
bottom: 0;
|
910 |
+
left: 0;
|
911 |
+
z-index: 1040;
|
912 |
+
background-color: #000000
|
913 |
+
}
|
914 |
+
.modal-backdrop.fade {
|
915 |
+
opacity: 0;
|
916 |
+
filter: alpha(opacity=0)
|
917 |
+
}
|
918 |
+
.modal-backdrop.in {
|
919 |
+
opacity: .5;
|
920 |
+
filter: alpha(opacity=50)
|
921 |
+
}
|
922 |
+
.modal-header {
|
923 |
+
padding: 15px;
|
924 |
+
border-bottom: 1px solid #e5e5e5;
|
925 |
+
min-height: 16.4285714px
|
926 |
+
}
|
927 |
+
.modal-header .close {
|
928 |
+
margin-top: -2px
|
929 |
+
}
|
930 |
+
.modal-title {
|
931 |
+
margin: 0;
|
932 |
+
line-height: 1.4285714
|
933 |
+
}
|
934 |
+
.modal-body {
|
935 |
+
position: relative;
|
936 |
+
padding: 15px
|
937 |
+
}
|
938 |
+
.modal-footer {
|
939 |
+
padding: 15px;
|
940 |
+
text-align: right;
|
941 |
+
border-top: 1px solid #e5e5e5
|
942 |
+
}
|
943 |
+
.modal-footer:before, .modal-footer:after {
|
944 |
+
content: " ";
|
945 |
+
display: table
|
946 |
+
}
|
947 |
+
.modal-footer:after {
|
948 |
+
clear: both
|
949 |
+
}
|
950 |
+
.modal-footer .btn + .btn {
|
951 |
+
margin-left: 5px;
|
952 |
+
margin-bottom: 0
|
953 |
+
}
|
954 |
+
.modal-footer .btn-group .btn + .btn {
|
955 |
+
margin-left: -1px
|
956 |
+
}
|
957 |
+
.modal-footer .btn-block + .btn-block {
|
958 |
+
margin-left: 0
|
959 |
+
}
|
960 |
+
.modal-scrollbar-measure {
|
961 |
+
position: absolute;
|
962 |
+
top: -9999px;
|
963 |
+
width: 50px;
|
964 |
+
height: 50px;
|
965 |
+
overflow: scroll
|
966 |
+
}
|
967 |
+
.clearfix:before, .clearfix:after {
|
968 |
+
content: " ";
|
969 |
+
display: table
|
970 |
+
}
|
971 |
+
.clearfix:after {
|
972 |
+
clear: both
|
973 |
+
}
|
974 |
+
.center-block {
|
975 |
+
display: block;
|
976 |
+
margin-left: auto;
|
977 |
+
margin-right: auto
|
978 |
+
}
|
979 |
+
.pull-right {
|
980 |
+
float: right !important
|
981 |
+
}
|
982 |
+
.pull-left {
|
983 |
+
float: left !important
|
984 |
+
}
|
985 |
+
.hide {
|
986 |
+
display: none !important
|
987 |
+
}
|
988 |
+
.show {
|
989 |
+
display: block !important
|
990 |
+
}
|
991 |
+
.invisible {
|
992 |
+
visibility: hidden
|
993 |
+
}
|
994 |
+
.text-hide {
|
995 |
+
font: 0/0 a;
|
996 |
+
color: transparent;
|
997 |
+
text-shadow: none;
|
998 |
+
background-color: transparent;
|
999 |
+
border: 0
|
1000 |
+
}
|
1001 |
+
.hidden {
|
1002 |
+
display: none !important;
|
1003 |
+
visibility: hidden !important
|
1004 |
+
}
|
1005 |
+
.affix {
|
1006 |
+
position: fixed;
|
1007 |
+
-webkit-transform: translate3d(0, 0, 0);
|
1008 |
+
transform: translate3d(0, 0, 0)
|
1009 |
+
}
|
1010 |
+
.hljs {
|
1011 |
+
display: block;
|
1012 |
+
overflow-x: auto;
|
1013 |
+
padding: .5em;
|
1014 |
+
background: #002b36;
|
1015 |
+
color: #839496;
|
1016 |
+
-webkit-text-size-adjust: none
|
1017 |
+
}
|
1018 |
+
.hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-doctype, .hljs-pi, .lisp .hljs-string, .hljs-javadoc {
|
1019 |
+
color: #586e75
|
1020 |
+
}
|
1021 |
+
.hljs-keyword, .hljs-winutils, .method, .hljs-addition, .css .hljs-tag, .hljs-request, .hljs-status, .nginx .hljs-title {
|
1022 |
+
color: #859900
|
1023 |
+
}
|
1024 |
+
.hljs-number, .hljs-command, .hljs-string, .hljs-tag .hljs-value, .hljs-rules .hljs-value, .hljs-phpdoc, .hljs-dartdoc, .tex .hljs-formula, .hljs-regexp, .hljs-hexcolor, .hljs-link_url {
|
1025 |
+
color: #2aa198
|
1026 |
+
}
|
1027 |
+
.hljs-title, .hljs-localvars, .hljs-chunk, .hljs-decorator, .hljs-built_in, .hljs-identifier, .vhdl .hljs-literal, .hljs-id, .css .hljs-function {
|
1028 |
+
color: #268bd2
|
1029 |
+
}
|
1030 |
+
.hljs-attribute, .hljs-variable, .lisp .hljs-body, .smalltalk .hljs-number, .hljs-constant, .hljs-class .hljs-title, .hljs-parent, .hljs-type, .hljs-link_reference {
|
1031 |
+
color: #b58900
|
1032 |
+
}
|
1033 |
+
.hljs-preprocessor, .hljs-preprocessor .hljs-keyword, .hljs-pragma, .hljs-shebang, .hljs-symbol, .hljs-symbol .hljs-string, .diff .hljs-change, .hljs-special, .hljs-attr_selector, .hljs-subst, .hljs-cdata, .css .hljs-pseudo, .hljs-header {
|
1034 |
+
color: #cb4b16
|
1035 |
+
}
|
1036 |
+
.hljs-deletion, .hljs-important {
|
1037 |
+
color: #dc322f
|
1038 |
+
}
|
1039 |
+
.hljs-link_label {
|
1040 |
+
color: #6c71c4
|
1041 |
+
}
|
1042 |
+
.tex .hljs-formula {
|
1043 |
+
background: #073642
|
1044 |
+
}
|
1045 |
+
*, *:before, *:after {
|
1046 |
+
box-sizing: border-box
|
1047 |
+
}
|
1048 |
+
html {
|
1049 |
+
-ms-text-size-adjust: 100%;
|
1050 |
+
-webkit-text-size-adjust: 100%
|
1051 |
+
}
|
1052 |
+
body {
|
1053 |
+
margin: 0
|
1054 |
+
}
|
1055 |
+
article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
|
1056 |
+
display: block
|
1057 |
+
}
|
1058 |
+
audio, canvas, progress, video {
|
1059 |
+
display: inline-block;
|
1060 |
+
vertical-align: baseline
|
1061 |
+
}
|
1062 |
+
audio:not([controls]) {
|
1063 |
+
display: none;
|
1064 |
+
height: 0
|
1065 |
+
}
|
1066 |
+
[hidden], template {
|
1067 |
+
display: none
|
1068 |
+
}
|
1069 |
+
a {
|
1070 |
+
background: 0 0
|
1071 |
+
}
|
1072 |
+
a:active, a:hover {
|
1073 |
+
outline: 0
|
1074 |
+
}
|
1075 |
+
abbr[title] {
|
1076 |
+
border-bottom: 1px dotted
|
1077 |
+
}
|
1078 |
+
b, strong {
|
1079 |
+
font-weight: 700
|
1080 |
+
}
|
1081 |
+
dfn {
|
1082 |
+
font-style: italic
|
1083 |
+
}
|
1084 |
+
h1 {
|
1085 |
+
margin: .67em 0
|
1086 |
+
}
|
1087 |
+
mark {
|
1088 |
+
background: #ffff00;
|
1089 |
+
color: #000000
|
1090 |
+
}
|
1091 |
+
small {
|
1092 |
+
font-size: 80%
|
1093 |
+
}
|
1094 |
+
sub, sup {
|
1095 |
+
font-size: 75%;
|
1096 |
+
line-height: 0;
|
1097 |
+
position: relative;
|
1098 |
+
vertical-align: baseline
|
1099 |
+
}
|
1100 |
+
sup {
|
1101 |
+
top: -.5em
|
1102 |
+
}
|
1103 |
+
sub {
|
1104 |
+
bottom: -.25em
|
1105 |
+
}
|
1106 |
+
images {
|
1107 |
+
border: 0
|
1108 |
+
}
|
1109 |
+
svg:not(:root) {
|
1110 |
+
overflow: hidden
|
1111 |
+
}
|
1112 |
+
figure {
|
1113 |
+
margin: 1em 40px
|
1114 |
+
}
|
1115 |
+
hr {
|
1116 |
+
box-sizing: content-box;
|
1117 |
+
height: 0
|
1118 |
+
}
|
1119 |
+
pre {
|
1120 |
+
overflow: auto
|
1121 |
+
}
|
1122 |
+
code, kbd {
|
1123 |
+
font-size: 1em
|
1124 |
+
}
|
1125 |
+
code, kbd, pre, samp {
|
1126 |
+
font-family: monospace, monospace
|
1127 |
+
}
|
1128 |
+
samp {
|
1129 |
+
font-size: 1em
|
1130 |
+
}
|
1131 |
+
button, input, optgroup, select, textarea {
|
1132 |
+
color: inherit;
|
1133 |
+
font: inherit;
|
1134 |
+
margin: 0
|
1135 |
+
}
|
1136 |
+
button {
|
1137 |
+
overflow: visible
|
1138 |
+
}
|
1139 |
+
button, select {
|
1140 |
+
text-transform: none
|
1141 |
+
}
|
1142 |
+
button, html input[type="button"], input[type="reset"], input[type="submit"] {
|
1143 |
+
-webkit-appearance: button;
|
1144 |
+
cursor: pointer
|
1145 |
+
}
|
1146 |
+
button[disabled], html input[disabled] {
|
1147 |
+
cursor: default
|
1148 |
+
}
|
1149 |
+
button::-moz-focus-inner, input::-moz-focus-inner {
|
1150 |
+
border: 0;
|
1151 |
+
padding: 0
|
1152 |
+
}
|
1153 |
+
input {
|
1154 |
+
line-height: normal
|
1155 |
+
}
|
1156 |
+
input[type="checkbox"], input[type="radio"] {
|
1157 |
+
box-sizing: border-box;
|
1158 |
+
padding: 0
|
1159 |
+
}
|
1160 |
+
input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button {
|
1161 |
+
height: auto
|
1162 |
+
}
|
1163 |
+
input[type="search"] {
|
1164 |
+
-webkit-appearance: textfield;
|
1165 |
+
box-sizing: content-box
|
1166 |
+
}
|
1167 |
+
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
|
1168 |
+
-webkit-appearance: none
|
1169 |
+
}
|
1170 |
+
fieldset {
|
1171 |
+
border: 1px solid silver;
|
1172 |
+
margin: 0 2px;
|
1173 |
+
padding: .35em .625em .75em
|
1174 |
+
}
|
1175 |
+
legend {
|
1176 |
+
border: 0;
|
1177 |
+
padding: 0
|
1178 |
+
}
|
1179 |
+
textarea {
|
1180 |
+
overflow: auto
|
1181 |
+
}
|
1182 |
+
optgroup {
|
1183 |
+
font-weight: 700
|
1184 |
+
}
|
1185 |
+
table {
|
1186 |
+
border-collapse: collapse;
|
1187 |
+
border-spacing: 0
|
1188 |
+
}
|
1189 |
+
.debug {
|
1190 |
+
background-color: #ffc0cb !important
|
1191 |
+
}
|
1192 |
+
.ellipsis {
|
1193 |
+
overflow: hidden;
|
1194 |
+
text-overflow: ellipsis;
|
1195 |
+
white-space: nowrap
|
1196 |
+
}
|
1197 |
+
.ir {
|
1198 |
+
background-color: transparent;
|
1199 |
+
border: 0;
|
1200 |
+
overflow: hidden
|
1201 |
+
}
|
1202 |
+
.ir::before {
|
1203 |
+
content: '';
|
1204 |
+
display: block;
|
1205 |
+
height: 150%;
|
1206 |
+
width: 0
|
1207 |
+
}
|
1208 |
+
html {
|
1209 |
+
font-size: .875em;
|
1210 |
+
background: #ffffff;
|
1211 |
+
color: #373d49
|
1212 |
+
}
|
1213 |
+
html, body {
|
1214 |
+
font-family: Georgia, Cambria, serif;
|
1215 |
+
height: 100%
|
1216 |
+
}
|
1217 |
+
body {
|
1218 |
+
font-size: 1rem;
|
1219 |
+
font-weight: 400;
|
1220 |
+
line-height: 2rem
|
1221 |
+
}
|
1222 |
+
ul, ol {
|
1223 |
+
margin-bottom: .83999rem;
|
1224 |
+
padding-top: .16001rem
|
1225 |
+
}
|
1226 |
+
li {
|
1227 |
+
-webkit-font-feature-settings: 'kern' 1, 'onum' 1, 'liga' 1;
|
1228 |
+
font-feature-settings: 'kern' 1, 'onum' 1, 'liga' 1;
|
1229 |
+
margin-left: 1rem
|
1230 |
+
}
|
1231 |
+
li > ul, li > ol {
|
1232 |
+
margin-bottom: 0
|
1233 |
+
}
|
1234 |
+
p {
|
1235 |
+
padding-top: .66001rem;
|
1236 |
+
-webkit-font-feature-settings: 'kern' 1, 'onum' 1, 'liga' 1;
|
1237 |
+
font-feature-settings: 'kern' 1, 'onum' 1, 'liga' 1;
|
1238 |
+
margin-top: 0
|
1239 |
+
}
|
1240 |
+
p, pre {
|
1241 |
+
margin-bottom: 1.33999rem
|
1242 |
+
}
|
1243 |
+
pre {
|
1244 |
+
font-size: 1rem;
|
1245 |
+
padding: .66001rem 9.5px 9.5px;
|
1246 |
+
line-height: 2rem;
|
1247 |
+
background: -webkit-linear-gradient(top, #ffffff 0, #ffffff .75rem, #f5f7fa .75rem, #f5f7fa 2.75rem, #ffffff 2.75rem, #ffffff 4rem);
|
1248 |
+
background: linear-gradient(to bottom, #ffffff 0, #ffffff .75rem, #f5f7fa .75rem, #f5f7fa 2.75rem, #ffffff 2.75rem, #ffffff 4rem);
|
1249 |
+
background-size: 100% 4rem;
|
1250 |
+
border-color: #d3daea
|
1251 |
+
}
|
1252 |
+
blockquote {
|
1253 |
+
margin: 0
|
1254 |
+
}
|
1255 |
+
blockquote p {
|
1256 |
+
font-size: 1rem;
|
1257 |
+
margin-bottom: .33999rem;
|
1258 |
+
font-style: italic;
|
1259 |
+
padding: .66001rem 1rem 1rem;
|
1260 |
+
border-left: 3px solid #a0aabf
|
1261 |
+
}
|
1262 |
+
th, td {
|
1263 |
+
padding: 12px
|
1264 |
+
}
|
1265 |
+
h1, h2, h3, h4, h5, h6 {
|
1266 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
1267 |
+
-webkit-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1;
|
1268 |
+
font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1;
|
1269 |
+
font-style: normal;
|
1270 |
+
font-weight: 600;
|
1271 |
+
margin-top: 0
|
1272 |
+
}
|
1273 |
+
h1 {
|
1274 |
+
line-height: 3rem;
|
1275 |
+
font-size: 2.0571429rem;
|
1276 |
+
margin-bottom: .21999rem;
|
1277 |
+
padding-top: .78001rem
|
1278 |
+
}
|
1279 |
+
h2 {
|
1280 |
+
font-size: 1.953125rem;
|
1281 |
+
margin-bottom: .1835837rem;
|
1282 |
+
padding-top: .8164163rem
|
1283 |
+
}
|
1284 |
+
h2, h3 {
|
1285 |
+
line-height: 3rem
|
1286 |
+
}
|
1287 |
+
h3 {
|
1288 |
+
font-size: 1.6457143rem;
|
1289 |
+
margin-bottom: .07599rem;
|
1290 |
+
padding-top: .92401rem
|
1291 |
+
}
|
1292 |
+
h4 {
|
1293 |
+
font-size: 1.5625rem;
|
1294 |
+
margin-bottom: .546865rem;
|
1295 |
+
padding-top: .453135rem
|
1296 |
+
}
|
1297 |
+
h5 {
|
1298 |
+
font-size: 1.25rem;
|
1299 |
+
margin-bottom: -.56251rem;
|
1300 |
+
padding-top: .56251rem
|
1301 |
+
}
|
1302 |
+
h6 {
|
1303 |
+
font-size: 1rem;
|
1304 |
+
margin-bottom: -.65001rem;
|
1305 |
+
padding-top: .65001rem
|
1306 |
+
}
|
1307 |
+
a {
|
1308 |
+
cursor: pointer;
|
1309 |
+
color: #15b748;
|
1310 |
+
text-decoration: none
|
1311 |
+
}
|
1312 |
+
a:hover, a:focus {
|
1313 |
+
border-bottom-color: #15b748;
|
1314 |
+
color: #17c1a1
|
1315 |
+
}
|
1316 |
+
img {
|
1317 |
+
height: auto;
|
1318 |
+
max-width: 100%
|
1319 |
+
}
|
1320 |
+
.g {
|
1321 |
+
display: block
|
1322 |
+
}
|
1323 |
+
.g:after {
|
1324 |
+
clear: both;
|
1325 |
+
content: '';
|
1326 |
+
display: table
|
1327 |
+
}
|
1328 |
+
.g-b {
|
1329 |
+
float: left;
|
1330 |
+
margin: 0;
|
1331 |
+
width: 100%
|
1332 |
+
}
|
1333 |
+
.g {
|
1334 |
+
margin-left: -16px;
|
1335 |
+
margin-right: -16px
|
1336 |
+
}
|
1337 |
+
.g-b {
|
1338 |
+
padding-left: 16px;
|
1339 |
+
padding-right: 16px
|
1340 |
+
}
|
1341 |
+
.g-b--center {
|
1342 |
+
display: block;
|
1343 |
+
float: none;
|
1344 |
+
margin: 0 auto
|
1345 |
+
}
|
1346 |
+
.g-b--right {
|
1347 |
+
float: right
|
1348 |
+
}
|
1349 |
+
.g-b--1of1 {
|
1350 |
+
width: 100%
|
1351 |
+
}
|
1352 |
+
.g-b--1of2, .g-b--2of4, .g-b--3of6, .g-b--4of8, .g-b--5of10, .g-b--6of12 {
|
1353 |
+
width: 50%
|
1354 |
+
}
|
1355 |
+
.g-b--1of3, .g-b--2of6, .g-b--4of12 {
|
1356 |
+
width: 33.333%
|
1357 |
+
}
|
1358 |
+
.g-b--2of3, .g-b--4of6, .g-b--8of12 {
|
1359 |
+
width: 66.666%
|
1360 |
+
}
|
1361 |
+
.g-b--1of4, .g-b--2of8, .g-b--3of12 {
|
1362 |
+
width: 25%
|
1363 |
+
}
|
1364 |
+
.g-b--3of4, .g-b--6of8, .g-b--9of12 {
|
1365 |
+
width: 75%
|
1366 |
+
}
|
1367 |
+
.g-b--1of5, .g-b--2of10 {
|
1368 |
+
width: 20%
|
1369 |
+
}
|
1370 |
+
.g-b--2of5, .g-b--4of10 {
|
1371 |
+
width: 40%
|
1372 |
+
}
|
1373 |
+
.g-b--3of5, .g-b--6of10 {
|
1374 |
+
width: 60%
|
1375 |
+
}
|
1376 |
+
.g-b--4of5, .g-b--8of10 {
|
1377 |
+
width: 80%
|
1378 |
+
}
|
1379 |
+
.g-b--1of6, .g-b--2of12 {
|
1380 |
+
width: 16.666%
|
1381 |
+
}
|
1382 |
+
.g-b--5of6, .g-b--10of12 {
|
1383 |
+
width: 83.333%
|
1384 |
+
}
|
1385 |
+
.g-b--1of8 {
|
1386 |
+
width: 12.5%
|
1387 |
+
}
|
1388 |
+
.g-b--3of8 {
|
1389 |
+
width: 37.5%
|
1390 |
+
}
|
1391 |
+
.g-b--5of8 {
|
1392 |
+
width: 62.5%
|
1393 |
+
}
|
1394 |
+
.g-b--7of8 {
|
1395 |
+
width: 87.5%
|
1396 |
+
}
|
1397 |
+
.g-b--1of10 {
|
1398 |
+
width: 10%
|
1399 |
+
}
|
1400 |
+
.g-b--3of10 {
|
1401 |
+
width: 30%
|
1402 |
+
}
|
1403 |
+
.g-b--7of10 {
|
1404 |
+
width: 70%
|
1405 |
+
}
|
1406 |
+
.g-b--9of10 {
|
1407 |
+
width: 90%
|
1408 |
+
}
|
1409 |
+
.g-b--1of12 {
|
1410 |
+
width: 8.333%
|
1411 |
+
}
|
1412 |
+
.g-b--5of12 {
|
1413 |
+
width: 41.666%
|
1414 |
+
}
|
1415 |
+
.g-b--7of12 {
|
1416 |
+
width: 58.333%
|
1417 |
+
}
|
1418 |
+
.g-b--11of12 {
|
1419 |
+
width: 91.666%
|
1420 |
+
}
|
1421 |
+
.g-b--push--1of1 {
|
1422 |
+
margin-left: 100%
|
1423 |
+
}
|
1424 |
+
.g-b--push--1of2, .g-b--push--2of4, .g-b--push--3of6, .g-b--push--4of8, .g-b--push--5of10, .g-b--push--6of12 {
|
1425 |
+
margin-left: 50%
|
1426 |
+
}
|
1427 |
+
.g-b--push--1of3, .g-b--push--2of6, .g-b--push--4of12 {
|
1428 |
+
margin-left: 33.333%
|
1429 |
+
}
|
1430 |
+
.g-b--push--2of3, .g-b--push--4of6, .g-b--push--8of12 {
|
1431 |
+
margin-left: 66.666%
|
1432 |
+
}
|
1433 |
+
.g-b--push--1of4, .g-b--push--2of8, .g-b--push--3of12 {
|
1434 |
+
margin-left: 25%
|
1435 |
+
}
|
1436 |
+
.g-b--push--3of4, .g-b--push--6of8, .g-b--push--9of12 {
|
1437 |
+
margin-left: 75%
|
1438 |
+
}
|
1439 |
+
.g-b--push--1of5, .g-b--push--2of10 {
|
1440 |
+
margin-left: 20%
|
1441 |
+
}
|
1442 |
+
.g-b--push--2of5, .g-b--push--4of10 {
|
1443 |
+
margin-left: 40%
|
1444 |
+
}
|
1445 |
+
.g-b--push--3of5, .g-b--push--6of10 {
|
1446 |
+
margin-left: 60%
|
1447 |
+
}
|
1448 |
+
.g-b--push--4of5, .g-b--push--8of10 {
|
1449 |
+
margin-left: 80%
|
1450 |
+
}
|
1451 |
+
.g-b--push--1of6, .g-b--push--2of12 {
|
1452 |
+
margin-left: 16.666%
|
1453 |
+
}
|
1454 |
+
.g-b--push--5of6, .g-b--push--10of12 {
|
1455 |
+
margin-left: 83.333%
|
1456 |
+
}
|
1457 |
+
.g-b--push--1of8 {
|
1458 |
+
margin-left: 12.5%
|
1459 |
+
}
|
1460 |
+
.g-b--push--3of8 {
|
1461 |
+
margin-left: 37.5%
|
1462 |
+
}
|
1463 |
+
.g-b--push--5of8 {
|
1464 |
+
margin-left: 62.5%
|
1465 |
+
}
|
1466 |
+
.g-b--push--7of8 {
|
1467 |
+
margin-left: 87.5%
|
1468 |
+
}
|
1469 |
+
.g-b--push--1of10 {
|
1470 |
+
margin-left: 10%
|
1471 |
+
}
|
1472 |
+
.g-b--push--3of10 {
|
1473 |
+
margin-left: 30%
|
1474 |
+
}
|
1475 |
+
.g-b--push--7of10 {
|
1476 |
+
margin-left: 70%
|
1477 |
+
}
|
1478 |
+
.g-b--push--9of10 {
|
1479 |
+
margin-left: 90%
|
1480 |
+
}
|
1481 |
+
.g-b--push--1of12 {
|
1482 |
+
margin-left: 8.333%
|
1483 |
+
}
|
1484 |
+
.g-b--push--5of12 {
|
1485 |
+
margin-left: 41.666%
|
1486 |
+
}
|
1487 |
+
.g-b--push--7of12 {
|
1488 |
+
margin-left: 58.333%
|
1489 |
+
}
|
1490 |
+
.g-b--push--11of12 {
|
1491 |
+
margin-left: 91.666%
|
1492 |
+
}
|
1493 |
+
.g-b--pull--1of1 {
|
1494 |
+
margin-right: 100%
|
1495 |
+
}
|
1496 |
+
.g-b--pull--1of2, .g-b--pull--2of4, .g-b--pull--3of6, .g-b--pull--4of8, .g-b--pull--5of10, .g-b--pull--6of12 {
|
1497 |
+
margin-right: 50%
|
1498 |
+
}
|
1499 |
+
.g-b--pull--1of3, .g-b--pull--2of6, .g-b--pull--4of12 {
|
1500 |
+
margin-right: 33.333%
|
1501 |
+
}
|
1502 |
+
.g-b--pull--2of3, .g-b--pull--4of6, .g-b--pull--8of12 {
|
1503 |
+
margin-right: 66.666%
|
1504 |
+
}
|
1505 |
+
.g-b--pull--1of4, .g-b--pull--2of8, .g-b--pull--3of12 {
|
1506 |
+
margin-right: 25%
|
1507 |
+
}
|
1508 |
+
.g-b--pull--3of4, .g-b--pull--6of8, .g-b--pull--9of12 {
|
1509 |
+
margin-right: 75%
|
1510 |
+
}
|
1511 |
+
.g-b--pull--1of5, .g-b--pull--2of10 {
|
1512 |
+
margin-right: 20%
|
1513 |
+
}
|
1514 |
+
.g-b--pull--2of5, .g-b--pull--4of10 {
|
1515 |
+
margin-right: 40%
|
1516 |
+
}
|
1517 |
+
.g-b--pull--3of5, .g-b--pull--6of10 {
|
1518 |
+
margin-right: 60%
|
1519 |
+
}
|
1520 |
+
.g-b--pull--4of5, .g-b--pull--8of10 {
|
1521 |
+
margin-right: 80%
|
1522 |
+
}
|
1523 |
+
.g-b--pull--1of6, .g-b--pull--2of12 {
|
1524 |
+
margin-right: 16.666%
|
1525 |
+
}
|
1526 |
+
.g-b--pull--5of6, .g-b--pull--10of12 {
|
1527 |
+
margin-right: 83.333%
|
1528 |
+
}
|
1529 |
+
.g-b--pull--1of8 {
|
1530 |
+
margin-right: 12.5%
|
1531 |
+
}
|
1532 |
+
.g-b--pull--3of8 {
|
1533 |
+
margin-right: 37.5%
|
1534 |
+
}
|
1535 |
+
.g-b--pull--5of8 {
|
1536 |
+
margin-right: 62.5%
|
1537 |
+
}
|
1538 |
+
.g-b--pull--7of8 {
|
1539 |
+
margin-right: 87.5%
|
1540 |
+
}
|
1541 |
+
.g-b--pull--1of10 {
|
1542 |
+
margin-right: 10%
|
1543 |
+
}
|
1544 |
+
.g-b--pull--3of10 {
|
1545 |
+
margin-right: 30%
|
1546 |
+
}
|
1547 |
+
.g-b--pull--7of10 {
|
1548 |
+
margin-right: 70%
|
1549 |
+
}
|
1550 |
+
.g-b--pull--9of10 {
|
1551 |
+
margin-right: 90%
|
1552 |
+
}
|
1553 |
+
.g-b--pull--1of12 {
|
1554 |
+
margin-right: 8.333%
|
1555 |
+
}
|
1556 |
+
.g-b--pull--5of12 {
|
1557 |
+
margin-right: 41.666%
|
1558 |
+
}
|
1559 |
+
.g-b--pull--7of12 {
|
1560 |
+
margin-right: 58.333%
|
1561 |
+
}
|
1562 |
+
.g-b--pull--11of12 {
|
1563 |
+
margin-right: 91.666%
|
1564 |
+
}
|
1565 |
+
.splashscreen {
|
1566 |
+
position: fixed;
|
1567 |
+
top: 0;
|
1568 |
+
left: 0;
|
1569 |
+
width: 100%;
|
1570 |
+
height: 100%;
|
1571 |
+
background-color: #373d49;
|
1572 |
+
z-index: 22
|
1573 |
+
}
|
1574 |
+
.splashscreen-dillinger {
|
1575 |
+
width: 260px;
|
1576 |
+
height: auto;
|
1577 |
+
display: block;
|
1578 |
+
margin: 0 auto;
|
1579 |
+
padding-bottom: 3rem
|
1580 |
+
}
|
1581 |
+
.splashscreen p {
|
1582 |
+
font-size: 1.25rem;
|
1583 |
+
padding-top: .56251rem;
|
1584 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
1585 |
+
font-weight: 400;
|
1586 |
+
text-align: center;
|
1587 |
+
max-width: 500px;
|
1588 |
+
margin: 0 auto;
|
1589 |
+
color: #ffffff
|
1590 |
+
}
|
1591 |
+
.sp-center {
|
1592 |
+
position: relative;
|
1593 |
+
-webkit-transform: translateY(-50%);
|
1594 |
+
transform: translateY(-50%);
|
1595 |
+
top: 50%
|
1596 |
+
}
|
1597 |
+
.open-menu > .wrapper {
|
1598 |
+
overflow-x: hidden
|
1599 |
+
}
|
1600 |
+
.page {
|
1601 |
+
margin: 0 auto;
|
1602 |
+
position: relative;
|
1603 |
+
top: 0;
|
1604 |
+
left: 0;
|
1605 |
+
width: 100%;
|
1606 |
+
height: 100%;
|
1607 |
+
z-index: 2;
|
1608 |
+
-webkit-transition: all .25s ease-in-out;
|
1609 |
+
transition: all .25s ease-in-out;
|
1610 |
+
background-color: #ffffff;
|
1611 |
+
padding-top: 51px;
|
1612 |
+
will-change: left
|
1613 |
+
}
|
1614 |
+
.open-menu .page {
|
1615 |
+
left: 270px
|
1616 |
+
}
|
1617 |
+
.title {
|
1618 |
+
line-height: 1rem;
|
1619 |
+
font-size: .8rem;
|
1620 |
+
margin-bottom: .77999rem;
|
1621 |
+
padding-top: .22001rem;
|
1622 |
+
font-weight: 500;
|
1623 |
+
color: #a0aabf;
|
1624 |
+
letter-spacing: 1px;
|
1625 |
+
text-transform: uppercase;
|
1626 |
+
padding-left: 16px;
|
1627 |
+
padding-right: 16px;
|
1628 |
+
margin-top: 1rem
|
1629 |
+
}
|
1630 |
+
.split-preview .title {
|
1631 |
+
padding-left: 0
|
1632 |
+
}
|
1633 |
+
.title-document {
|
1634 |
+
line-height: 1rem;
|
1635 |
+
font-size: 1.25rem;
|
1636 |
+
margin-bottom: .89999rem;
|
1637 |
+
padding-top: .10001rem;
|
1638 |
+
font-weight: 400;
|
1639 |
+
font-family: "Ubuntu Mono", Monaco;
|
1640 |
+
color: #373d49;
|
1641 |
+
padding-left: 16px;
|
1642 |
+
padding-right: 16px;
|
1643 |
+
width: 80%;
|
1644 |
+
min-width: 300px;
|
1645 |
+
outline: 0;
|
1646 |
+
border: none
|
1647 |
+
}
|
1648 |
+
.icon {
|
1649 |
+
display: block;
|
1650 |
+
margin: 0 auto;
|
1651 |
+
width: 36px;
|
1652 |
+
height: 36px;
|
1653 |
+
border-radius: 3px;
|
1654 |
+
text-align: center
|
1655 |
+
}
|
1656 |
+
.icon svg {
|
1657 |
+
display: inline-block;
|
1658 |
+
margin-left: auto;
|
1659 |
+
margin-right: auto
|
1660 |
+
}
|
1661 |
+
.icon-preview {
|
1662 |
+
background-color: #373d49;
|
1663 |
+
line-height: 40px
|
1664 |
+
}
|
1665 |
+
.icon-preview svg {
|
1666 |
+
width: 19px;
|
1667 |
+
height: 12px
|
1668 |
+
}
|
1669 |
+
.icon-settings {
|
1670 |
+
background-color: #373d49;
|
1671 |
+
line-height: 44px
|
1672 |
+
}
|
1673 |
+
.icon-settings svg {
|
1674 |
+
width: 18px;
|
1675 |
+
height: 18px
|
1676 |
+
}
|
1677 |
+
.icon-link {
|
1678 |
+
width: 16px;
|
1679 |
+
height: 16px;
|
1680 |
+
line-height: 1;
|
1681 |
+
margin-right: 24px;
|
1682 |
+
text-align: right
|
1683 |
+
}
|
1684 |
+
.navbar {
|
1685 |
+
background-color: #373d49;
|
1686 |
+
height: 51px;
|
1687 |
+
width: 100%;
|
1688 |
+
position: fixed;
|
1689 |
+
top: 0;
|
1690 |
+
left: 0;
|
1691 |
+
z-index: 6;
|
1692 |
+
-webkit-transition: all .25s ease-in-out;
|
1693 |
+
transition: all .25s ease-in-out;
|
1694 |
+
will-change: left
|
1695 |
+
}
|
1696 |
+
.navbar:after {
|
1697 |
+
content: "";
|
1698 |
+
display: table;
|
1699 |
+
clear: both
|
1700 |
+
}
|
1701 |
+
.open-menu .navbar {
|
1702 |
+
left: 270px
|
1703 |
+
}
|
1704 |
+
.navbar-brand {
|
1705 |
+
float: left;
|
1706 |
+
margin: 0 0 0 24px;
|
1707 |
+
padding: 0;
|
1708 |
+
line-height: 42px
|
1709 |
+
}
|
1710 |
+
.navbar-brand svg {
|
1711 |
+
width: 85px;
|
1712 |
+
height: 11px
|
1713 |
+
}
|
1714 |
+
.nav-left {
|
1715 |
+
float: left
|
1716 |
+
}
|
1717 |
+
.nav-right {
|
1718 |
+
float: right
|
1719 |
+
}
|
1720 |
+
.nav-sidebar {
|
1721 |
+
width: 100%
|
1722 |
+
}
|
1723 |
+
.menu {
|
1724 |
+
list-style: none;
|
1725 |
+
margin: 0;
|
1726 |
+
padding: 0
|
1727 |
+
}
|
1728 |
+
.menu a {
|
1729 |
+
border: 0;
|
1730 |
+
color: #a0aabf;
|
1731 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
1732 |
+
outline: none;
|
1733 |
+
text-transform: uppercase
|
1734 |
+
}
|
1735 |
+
.menu a:hover {
|
1736 |
+
color: #15b748
|
1737 |
+
}
|
1738 |
+
.menu .menu-item {
|
1739 |
+
border: 0;
|
1740 |
+
display: none;
|
1741 |
+
float: left;
|
1742 |
+
margin: 0;
|
1743 |
+
position: relative
|
1744 |
+
}
|
1745 |
+
.menu .menu-item > a {
|
1746 |
+
display: block;
|
1747 |
+
font-size: 12px;
|
1748 |
+
height: 51px;
|
1749 |
+
letter-spacing: 1px;
|
1750 |
+
line-height: 51px;
|
1751 |
+
padding: 0 24px
|
1752 |
+
}
|
1753 |
+
.menu .menu-item--settings, .menu .menu-item--preview, .menu .menu-item--save-to.in-sidebar, .menu .menu-item--import-from.in-sidebar, .menu .menu-item--link-unlink.in-sidebar, .menu .menu-item--documents.in-sidebar {
|
1754 |
+
display: block
|
1755 |
+
}
|
1756 |
+
.menu .menu-item--documents {
|
1757 |
+
padding-bottom: 1rem
|
1758 |
+
}
|
1759 |
+
.menu .menu-item.open > a {
|
1760 |
+
background-color: #1d212a
|
1761 |
+
}
|
1762 |
+
.menu .menu-item-icon > a {
|
1763 |
+
height: auto;
|
1764 |
+
padding: 0
|
1765 |
+
}
|
1766 |
+
.menu .menu-item-icon:hover > a {
|
1767 |
+
background-color: transparent
|
1768 |
+
}
|
1769 |
+
.menu .menu-link.open i {
|
1770 |
+
background-color: #1d212a
|
1771 |
+
}
|
1772 |
+
.menu .menu-link.open g {
|
1773 |
+
fill: #15b748
|
1774 |
+
}
|
1775 |
+
.menu .menu-link-preview, .menu .menu-link-settings {
|
1776 |
+
margin-top: 8px;
|
1777 |
+
width: 51px
|
1778 |
+
}
|
1779 |
+
.menu-sidebar {
|
1780 |
+
width: 100%
|
1781 |
+
}
|
1782 |
+
.menu-sidebar .menu-item {
|
1783 |
+
float: none;
|
1784 |
+
margin-bottom: 1px;
|
1785 |
+
width: 100%
|
1786 |
+
}
|
1787 |
+
.menu-sidebar .menu-item.open > a {
|
1788 |
+
background-color: #373d49
|
1789 |
+
}
|
1790 |
+
.menu-sidebar .open .caret {
|
1791 |
+
-webkit-transform: rotate(180deg);
|
1792 |
+
transform: rotate(180deg)
|
1793 |
+
}
|
1794 |
+
.menu-sidebar > .menu-item:hover .dropdown a, .menu-sidebar > .menu-item:hover .settings a {
|
1795 |
+
background-color: transparent
|
1796 |
+
}
|
1797 |
+
.menu-sidebar .menu-link {
|
1798 |
+
background-color: #373d49;
|
1799 |
+
font-weight: 600
|
1800 |
+
}
|
1801 |
+
.menu-sidebar .menu-link:after {
|
1802 |
+
content: "";
|
1803 |
+
display: table;
|
1804 |
+
clear: both
|
1805 |
+
}
|
1806 |
+
.menu-sidebar .menu-link > span {
|
1807 |
+
float: left
|
1808 |
+
}
|
1809 |
+
.menu-sidebar .menu-link > .caret {
|
1810 |
+
float: right;
|
1811 |
+
text-align: right;
|
1812 |
+
top: 22px
|
1813 |
+
}
|
1814 |
+
.menu-sidebar .dropdown, .menu-sidebar .settings {
|
1815 |
+
background-color: transparent;
|
1816 |
+
position: static;
|
1817 |
+
width: 100%
|
1818 |
+
}
|
1819 |
+
.dropdown {
|
1820 |
+
position: absolute;
|
1821 |
+
right: 0;
|
1822 |
+
top: 51px;
|
1823 |
+
width: 188px
|
1824 |
+
}
|
1825 |
+
.dropdown, .settings {
|
1826 |
+
display: none;
|
1827 |
+
background-color: #1d212a
|
1828 |
+
}
|
1829 |
+
.dropdown {
|
1830 |
+
padding: 0
|
1831 |
+
}
|
1832 |
+
.dropdown, .settings, .sidebar-list {
|
1833 |
+
list-style: none;
|
1834 |
+
margin: 0
|
1835 |
+
}
|
1836 |
+
.sidebar-list {
|
1837 |
+
padding: 0
|
1838 |
+
}
|
1839 |
+
.dropdown li {
|
1840 |
+
margin: 32px 0;
|
1841 |
+
padding: 0 0 0 32px
|
1842 |
+
}
|
1843 |
+
.dropdown li, .settings li {
|
1844 |
+
line-height: 1
|
1845 |
+
}
|
1846 |
+
.sidebar-list li {
|
1847 |
+
line-height: 1;
|
1848 |
+
margin: 32px 0;
|
1849 |
+
padding: 0 0 0 32px
|
1850 |
+
}
|
1851 |
+
.dropdown a {
|
1852 |
+
color: #d0d6e2
|
1853 |
+
}
|
1854 |
+
.dropdown a, .settings a, .sidebar-list a {
|
1855 |
+
display: block;
|
1856 |
+
text-transform: none
|
1857 |
+
}
|
1858 |
+
.sidebar-list a {
|
1859 |
+
color: #d0d6e2
|
1860 |
+
}
|
1861 |
+
.dropdown a:after, .settings a:after, .sidebar-list a:after {
|
1862 |
+
content: "";
|
1863 |
+
display: table;
|
1864 |
+
clear: both
|
1865 |
+
}
|
1866 |
+
.dropdown .icon, .settings .icon, .sidebar-list .icon {
|
1867 |
+
float: right
|
1868 |
+
}
|
1869 |
+
.open .dropdown, .open .settings, .open .sidebar-list {
|
1870 |
+
display: block
|
1871 |
+
}
|
1872 |
+
.open .dropdown.collapse, .open .collapse.settings, .open .sidebar-list.collapse {
|
1873 |
+
display: none
|
1874 |
+
}
|
1875 |
+
.open .dropdown.collapse.in, .open .collapse.in.settings, .open .sidebar-list.collapse.in {
|
1876 |
+
display: block
|
1877 |
+
}
|
1878 |
+
.dropdown .unlinked .icon, .settings .unlinked .icon, .sidebar-list .unlinked .icon {
|
1879 |
+
opacity: .3
|
1880 |
+
}
|
1881 |
+
.dropdown.documents li, .documents.settings li, .sidebar-list.documents li {
|
1882 |
+
background-image: url("../img/icons/file.svg");
|
1883 |
+
background-position: 240px center;
|
1884 |
+
background-repeat: no-repeat;
|
1885 |
+
background-size: 14px 16px;
|
1886 |
+
padding: 3px 32px
|
1887 |
+
}
|
1888 |
+
.dropdown.documents li.octocat, .documents.settings li.octocat, .sidebar-list.documents li.octocat {
|
1889 |
+
background-image: url("../img/icons/octocat.svg");
|
1890 |
+
background-position: 234px center;
|
1891 |
+
background-size: 24px 24px
|
1892 |
+
}
|
1893 |
+
.dropdown.documents li:last-child, .documents.settings li:last-child, .sidebar-list.documents li:last-child {
|
1894 |
+
margin-bottom: 1rem
|
1895 |
+
}
|
1896 |
+
.dropdown.documents li.active a, .documents.settings li.active a, .sidebar-list.documents li.active a {
|
1897 |
+
color: #15b748
|
1898 |
+
}
|
1899 |
+
.settings {
|
1900 |
+
position: fixed;
|
1901 |
+
top: 67px;
|
1902 |
+
right: 16px;
|
1903 |
+
border-radius: 3px;
|
1904 |
+
width: 288px;
|
1905 |
+
background-color: #373d49;
|
1906 |
+
padding: 16px;
|
1907 |
+
z-index: 7
|
1908 |
+
}
|
1909 |
+
.show-settings .settings {
|
1910 |
+
display: block
|
1911 |
+
}
|
1912 |
+
.settings .has-checkbox {
|
1913 |
+
float: left
|
1914 |
+
}
|
1915 |
+
.settings a {
|
1916 |
+
font-size: 1.25rem;
|
1917 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
1918 |
+
font-weight: 400;
|
1919 |
+
-webkit-font-smoothing: antialiased;
|
1920 |
+
line-height: 28px;
|
1921 |
+
color: #d0d6e2
|
1922 |
+
}
|
1923 |
+
.settings a:after {
|
1924 |
+
content: "";
|
1925 |
+
display: table;
|
1926 |
+
clear: both
|
1927 |
+
}
|
1928 |
+
.settings a:hover {
|
1929 |
+
color: #15b748
|
1930 |
+
}
|
1931 |
+
.settings li {
|
1932 |
+
border-bottom: 1px solid #4f535b;
|
1933 |
+
margin: 0;
|
1934 |
+
padding: 16px 0
|
1935 |
+
}
|
1936 |
+
.settings li:last-child {
|
1937 |
+
border-bottom: none
|
1938 |
+
}
|
1939 |
+
.brand {
|
1940 |
+
border: none;
|
1941 |
+
display: block
|
1942 |
+
}
|
1943 |
+
.brand:hover g {
|
1944 |
+
fill: #15b748
|
1945 |
+
}
|
1946 |
+
.toggle {
|
1947 |
+
display: block;
|
1948 |
+
float: left;
|
1949 |
+
height: 16px;
|
1950 |
+
padding: 25px 16px 26px;
|
1951 |
+
width: 40px
|
1952 |
+
}
|
1953 |
+
.toggle span:after, .toggle span:before {
|
1954 |
+
content: '';
|
1955 |
+
left: 0;
|
1956 |
+
position: absolute;
|
1957 |
+
top: -6px
|
1958 |
+
}
|
1959 |
+
.toggle span:after {
|
1960 |
+
top: 6px
|
1961 |
+
}
|
1962 |
+
.toggle span {
|
1963 |
+
display: block;
|
1964 |
+
position: relative
|
1965 |
+
}
|
1966 |
+
.toggle span, .toggle span:after, .toggle span:before {
|
1967 |
+
-webkit-backface-visibility: hidden;
|
1968 |
+
backface-visibility: hidden;
|
1969 |
+
background-color: #d3daea;
|
1970 |
+
height: 2px;
|
1971 |
+
-webkit-transition: all .3s;
|
1972 |
+
transition: all .3s;
|
1973 |
+
width: 20px
|
1974 |
+
}
|
1975 |
+
.open-menu .toggle span {
|
1976 |
+
background-color: transparent
|
1977 |
+
}
|
1978 |
+
.open-menu .toggle span:before {
|
1979 |
+
-webkit-transform: rotate(45deg) translate(3px, 3px);
|
1980 |
+
transform: rotate(45deg) translate(3px, 3px)
|
1981 |
+
}
|
1982 |
+
.open-menu .toggle span:after {
|
1983 |
+
-webkit-transform: rotate(-45deg) translate(5px, -6px);
|
1984 |
+
transform: rotate(-45deg) translate(5px, -6px)
|
1985 |
+
}
|
1986 |
+
.caret {
|
1987 |
+
display: inline-block;
|
1988 |
+
width: 0;
|
1989 |
+
height: 0;
|
1990 |
+
margin-left: 6px;
|
1991 |
+
vertical-align: middle;
|
1992 |
+
position: relative;
|
1993 |
+
top: -1px;
|
1994 |
+
border-top: 4px solid;
|
1995 |
+
border-right: 4px solid transparent;
|
1996 |
+
border-left: 4px solid transparent
|
1997 |
+
}
|
1998 |
+
.sidebar {
|
1999 |
+
overflow: auto;
|
2000 |
+
height: 100%;
|
2001 |
+
padding-right: 15px;
|
2002 |
+
padding-bottom: 15px;
|
2003 |
+
width: 285px
|
2004 |
+
}
|
2005 |
+
.sidebar-wrapper {
|
2006 |
+
-webkit-overflow-scrolling: touch;
|
2007 |
+
background-color: #2b2f36;
|
2008 |
+
left: 0;
|
2009 |
+
height: 100%;
|
2010 |
+
overflow-y: hidden;
|
2011 |
+
position: fixed;
|
2012 |
+
top: 0;
|
2013 |
+
width: 285px;
|
2014 |
+
z-index: 1
|
2015 |
+
}
|
2016 |
+
.sidebar-branding {
|
2017 |
+
width: 160px;
|
2018 |
+
padding: 0;
|
2019 |
+
margin: 16px auto
|
2020 |
+
}
|
2021 |
+
.header {
|
2022 |
+
border-bottom: 1px solid #e8e8e8;
|
2023 |
+
position: relative
|
2024 |
+
}
|
2025 |
+
.words, .characters {
|
2026 |
+
line-height: 1rem;
|
2027 |
+
font-size: .8rem;
|
2028 |
+
margin-bottom: .77999rem;
|
2029 |
+
padding-top: .22001rem;
|
2030 |
+
font-weight: 500;
|
2031 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
2032 |
+
color: #a0aabf;
|
2033 |
+
letter-spacing: 1px;
|
2034 |
+
text-transform: uppercase;
|
2035 |
+
z-index: 5;
|
2036 |
+
position: absolute;
|
2037 |
+
right: 16px;
|
2038 |
+
top: 0
|
2039 |
+
}
|
2040 |
+
.words span, .characters span {
|
2041 |
+
color: #000000
|
2042 |
+
}
|
2043 |
+
.words + .characters {
|
2044 |
+
top: 22px
|
2045 |
+
}
|
2046 |
+
.btn {
|
2047 |
+
text-align: center;
|
2048 |
+
display: inline-block;
|
2049 |
+
width: 100%;
|
2050 |
+
text-transform: uppercase;
|
2051 |
+
font-weight: 600;
|
2052 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
2053 |
+
font-size: 14px;
|
2054 |
+
text-shadow: 0 1px 0 #1b8b77;
|
2055 |
+
padding: 16px 24px;
|
2056 |
+
background-color: #15b748;
|
2057 |
+
border-radius: 3px;
|
2058 |
+
margin: 0 auto 16px;
|
2059 |
+
line-height: 1;
|
2060 |
+
color: #ffffff;
|
2061 |
+
-webkit-transition: all .15s linear;
|
2062 |
+
transition: all .15s linear;
|
2063 |
+
-webkit-font-smoothing: antialiased
|
2064 |
+
}
|
2065 |
+
.btn--new, .btn--save {
|
2066 |
+
display: block;
|
2067 |
+
width: 238px
|
2068 |
+
}
|
2069 |
+
.btn--new:hover, .btn--new:focus, .btn--save:hover, .btn--save:focus {
|
2070 |
+
color: #ffffff;
|
2071 |
+
border-bottom-color: transparent;
|
2072 |
+
box-shadow: 0 1px 3px #24b59c;
|
2073 |
+
text-shadow: 0 1px 0 #24b59c
|
2074 |
+
}
|
2075 |
+
.btn--save {
|
2076 |
+
background-color: #4a5261;
|
2077 |
+
text-shadow: 0 1px 1px #1e2127
|
2078 |
+
}
|
2079 |
+
.btn--save:hover, .btn--save:focus {
|
2080 |
+
color: #ffffff;
|
2081 |
+
border-bottom-color: transparent;
|
2082 |
+
box-shadow: 0 1px 5px #08090a;
|
2083 |
+
text-shadow: none
|
2084 |
+
}
|
2085 |
+
.btn--delete {
|
2086 |
+
display: block;
|
2087 |
+
width: 238px;
|
2088 |
+
background-color: transparent;
|
2089 |
+
font-size: 12px;
|
2090 |
+
text-shadow: none
|
2091 |
+
}
|
2092 |
+
.btn--delete:hover, .btn--delete:focus {
|
2093 |
+
color: #ffffff;
|
2094 |
+
border-bottom-color: transparent;
|
2095 |
+
text-shadow: 0 1px 0 #08090a;
|
2096 |
+
opacity: .8
|
2097 |
+
}
|
2098 |
+
.btn--delete-modal, .btn--ok, .btn--close {
|
2099 |
+
border-top: 0;
|
2100 |
+
background-color: #4a5261;
|
2101 |
+
text-shadow: 0 1px 0 #08090a;
|
2102 |
+
margin: 0
|
2103 |
+
}
|
2104 |
+
.btn--delete-modal:hover, .btn--delete-modal:focus, .btn--ok:hover, .btn--ok:focus, .btn--close:hover, .btn--close:focus {
|
2105 |
+
color: #ffffff;
|
2106 |
+
background-color: #292d36;
|
2107 |
+
text-shadow: none
|
2108 |
+
}
|
2109 |
+
.btn--delete-modal {
|
2110 |
+
display: inline;
|
2111 |
+
width: auto
|
2112 |
+
}
|
2113 |
+
.overlay {
|
2114 |
+
position: absolute;
|
2115 |
+
top: 0;
|
2116 |
+
left: 0;
|
2117 |
+
width: 100%;
|
2118 |
+
height: 100%;
|
2119 |
+
background-color: rgba(55, 61, 73, .8);
|
2120 |
+
-webkit-transition: all .25s ease-in-out;
|
2121 |
+
transition: all .25s ease-in-out;
|
2122 |
+
-webkit-transition-timing-function: ease-out;
|
2123 |
+
transition-timing-function: ease-out;
|
2124 |
+
will-change: left, opacity, visibility;
|
2125 |
+
z-index: 5;
|
2126 |
+
opacity: 0;
|
2127 |
+
visibility: hidden
|
2128 |
+
}
|
2129 |
+
.show-settings .overlay {
|
2130 |
+
visibility: visible;
|
2131 |
+
opacity: 1
|
2132 |
+
}
|
2133 |
+
.switch {
|
2134 |
+
float: right;
|
2135 |
+
line-height: 1
|
2136 |
+
}
|
2137 |
+
.switch input {
|
2138 |
+
display: none
|
2139 |
+
}
|
2140 |
+
.switch small {
|
2141 |
+
display: inline-block;
|
2142 |
+
cursor: pointer;
|
2143 |
+
padding: 0 24px 0 0;
|
2144 |
+
-webkit-transition: all ease .2s;
|
2145 |
+
transition: all ease .2s;
|
2146 |
+
background-color: #2b2f36;
|
2147 |
+
border-color: #2b2f36
|
2148 |
+
}
|
2149 |
+
.switch small, .switch small:before {
|
2150 |
+
border-radius: 30px;
|
2151 |
+
box-shadow: inset 0 0 2px 0 #14171f
|
2152 |
+
}
|
2153 |
+
.switch small:before {
|
2154 |
+
display: block;
|
2155 |
+
content: '';
|
2156 |
+
width: 28px;
|
2157 |
+
height: 28px;
|
2158 |
+
background: #ffffff
|
2159 |
+
}
|
2160 |
+
.switch.checked small {
|
2161 |
+
padding-right: 0;
|
2162 |
+
padding-left: 24px;
|
2163 |
+
background-color: #15b748;
|
2164 |
+
box-shadow: none
|
2165 |
+
}
|
2166 |
+
.modal--dillinger.about .modal-dialog {
|
2167 |
+
font-size: 1.25rem;
|
2168 |
+
max-width: 500px
|
2169 |
+
}
|
2170 |
+
.modal--dillinger.scope .modal-dialog {
|
2171 |
+
max-width: 300px;
|
2172 |
+
margin: 5rem auto
|
2173 |
+
}
|
2174 |
+
.modal--dillinger .modal-dialog {
|
2175 |
+
max-width: 600px;
|
2176 |
+
width: auto;
|
2177 |
+
margin: 5rem auto
|
2178 |
+
}
|
2179 |
+
.modal--dillinger .modal-content {
|
2180 |
+
background: #373d49;
|
2181 |
+
border-radius: 3px;
|
2182 |
+
box-shadow: 0 2px 5px 0 #2c3b59;
|
2183 |
+
color: #ffffff;
|
2184 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
2185 |
+
font-weight: 400;
|
2186 |
+
padding: 2rem
|
2187 |
+
}
|
2188 |
+
.modal--dillinger ul {
|
2189 |
+
list-style-type: disc;
|
2190 |
+
margin: 1rem 0;
|
2191 |
+
padding: 0 0 0 1rem
|
2192 |
+
}
|
2193 |
+
.modal--dillinger li {
|
2194 |
+
padding: 0;
|
2195 |
+
margin: 0
|
2196 |
+
}
|
2197 |
+
.modal--dillinger .modal-header {
|
2198 |
+
border: 0;
|
2199 |
+
padding: 0
|
2200 |
+
}
|
2201 |
+
.modal--dillinger .modal-body {
|
2202 |
+
padding: 0
|
2203 |
+
}
|
2204 |
+
.modal--dillinger .modal-footer {
|
2205 |
+
border: 0;
|
2206 |
+
padding: 0
|
2207 |
+
}
|
2208 |
+
.modal--dillinger .close {
|
2209 |
+
color: #ffffff;
|
2210 |
+
opacity: 1
|
2211 |
+
}
|
2212 |
+
.modal-backdrop {
|
2213 |
+
background-color: #373d49
|
2214 |
+
}
|
2215 |
+
.pagination--dillinger {
|
2216 |
+
padding: 0 !important;
|
2217 |
+
margin: 1.5rem 0 !important;
|
2218 |
+
-webkit-box-pack: justify;
|
2219 |
+
-ms-flex-pack: justify;
|
2220 |
+
justify-content: space-between;
|
2221 |
+
-webkit-box-orient: horizontal;
|
2222 |
+
-webkit-box-direction: normal;
|
2223 |
+
-ms-flex-direction: row;
|
2224 |
+
flex-direction: row;
|
2225 |
+
-webkit-box-align: center;
|
2226 |
+
-ms-flex-align: center;
|
2227 |
+
align-items: center;
|
2228 |
+
-ms-flex-line-pack: stretch;
|
2229 |
+
align-content: stretch
|
2230 |
+
}
|
2231 |
+
.pagination--dillinger, .pagination--dillinger li {
|
2232 |
+
display: -webkit-box;
|
2233 |
+
display: -ms-flexbox;
|
2234 |
+
display: flex
|
2235 |
+
}
|
2236 |
+
.pagination--dillinger li {
|
2237 |
+
-webkit-box-flex: 1;
|
2238 |
+
-ms-flex-positive: 1;
|
2239 |
+
flex-grow: 1;
|
2240 |
+
text-align: center
|
2241 |
+
}
|
2242 |
+
.pagination--dillinger li:first-child > a, .pagination--dillinger li.disabled > a, .pagination--dillinger li.disabled > a:hover, .pagination--dillinger li.disabled > a:focus, .pagination--dillinger li > a {
|
2243 |
+
background-color: transparent;
|
2244 |
+
border-color: #4f535b;
|
2245 |
+
border-right-color: transparent
|
2246 |
+
}
|
2247 |
+
.pagination--dillinger li.active > a, .pagination--dillinger li.active > a:hover, .pagination--dillinger li.active > a:focus {
|
2248 |
+
border-color: #4a5261;
|
2249 |
+
background-color: #4a5261;
|
2250 |
+
color: #ffffff
|
2251 |
+
}
|
2252 |
+
.pagination--dillinger li > a {
|
2253 |
+
float: none;
|
2254 |
+
color: #ffffff;
|
2255 |
+
width: 100%;
|
2256 |
+
display: block;
|
2257 |
+
text-align: center;
|
2258 |
+
margin: 0;
|
2259 |
+
border-right-color: transparent;
|
2260 |
+
padding: 6px
|
2261 |
+
}
|
2262 |
+
.pagination--dillinger li > a:hover, .pagination--dillinger li > a:focus {
|
2263 |
+
border-color: #15b748;
|
2264 |
+
background-color: #15b748;
|
2265 |
+
color: #ffffff
|
2266 |
+
}
|
2267 |
+
.pagination--dillinger li:last-child a {
|
2268 |
+
border-color: #4f535b
|
2269 |
+
}
|
2270 |
+
.pagination--dillinger li:first-child a {
|
2271 |
+
border-right-color: transparent
|
2272 |
+
}
|
2273 |
+
.diNotify {
|
2274 |
+
position: absolute;
|
2275 |
+
z-index: 9999;
|
2276 |
+
left: 0;
|
2277 |
+
right: 0;
|
2278 |
+
top: 0;
|
2279 |
+
margin: 0 auto;
|
2280 |
+
max-width: 400px;
|
2281 |
+
text-align: center;
|
2282 |
+
-webkit-transition: top .5s ease-in-out, opacity .5s ease-in-out;
|
2283 |
+
transition: top .5s ease-in-out, opacity .5s ease-in-out;
|
2284 |
+
visibility: hidden
|
2285 |
+
}
|
2286 |
+
.diNotify-body {
|
2287 |
+
-webkit-font-smoothing: antialiased;
|
2288 |
+
background-color: #15b748;
|
2289 |
+
background: #666e7f;
|
2290 |
+
border-radius: 3px;
|
2291 |
+
color: #ffffff;
|
2292 |
+
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
2293 |
+
font-weight: 400;
|
2294 |
+
overflow: hidden;
|
2295 |
+
padding: 1rem 2rem .5rem;
|
2296 |
+
display: -webkit-box;
|
2297 |
+
display: -ms-flexbox;
|
2298 |
+
display: flex;
|
2299 |
+
-webkit-box-align: baseline;
|
2300 |
+
-ms-flex-align: baseline;
|
2301 |
+
align-items: baseline;
|
2302 |
+
-webkit-box-pack: center;
|
2303 |
+
-ms-flex-pack: center;
|
2304 |
+
justify-content: center
|
2305 |
+
}
|
2306 |
+
.diNotify-icon {
|
2307 |
+
display: block;
|
2308 |
+
width: 16px;
|
2309 |
+
height: 16px;
|
2310 |
+
line-height: 16px;
|
2311 |
+
position: relative;
|
2312 |
+
top: 3px
|
2313 |
+
}
|
2314 |
+
.diNotify-message {
|
2315 |
+
padding-left: 1rem
|
2316 |
+
}
|
2317 |
+
.zen-wrapper {
|
2318 |
+
position: fixed;
|
2319 |
+
top: 0;
|
2320 |
+
left: 0;
|
2321 |
+
right: 0;
|
2322 |
+
bottom: 0;
|
2323 |
+
width: 100%;
|
2324 |
+
height: 100%;
|
2325 |
+
z-index: 10;
|
2326 |
+
background-color: #ffffff;
|
2327 |
+
opacity: 0;
|
2328 |
+
-webkit-transition: opacity .25s ease-in-out;
|
2329 |
+
transition: opacity .25s ease-in-out
|
2330 |
+
}
|
2331 |
+
.zen-wrapper.on {
|
2332 |
+
opacity: 1
|
2333 |
+
}
|
2334 |
+
.enter-zen-mode {
|
2335 |
+
background-image: url("../img/icons/enter-zen.svg");
|
2336 |
+
right: .5rem;
|
2337 |
+
top: .313rem;
|
2338 |
+
display: none
|
2339 |
+
}
|
2340 |
+
.enter-zen-mode, .close-zen-mode {
|
2341 |
+
font: 0/0 a;
|
2342 |
+
color: transparent;
|
2343 |
+
text-shadow: none;
|
2344 |
+
background-color: transparent;
|
2345 |
+
border: 0;
|
2346 |
+
background-repeat: no-repeat;
|
2347 |
+
width: 32px;
|
2348 |
+
height: 32px;
|
2349 |
+
display: block;
|
2350 |
+
position: absolute
|
2351 |
+
}
|
2352 |
+
.close-zen-mode {
|
2353 |
+
background-image: url("../img/icons/exit-zen.svg");
|
2354 |
+
right: 1rem;
|
2355 |
+
top: 1rem
|
2356 |
+
}
|
2357 |
+
.zen-page {
|
2358 |
+
position: relative;
|
2359 |
+
top: 0;
|
2360 |
+
bottom: 0;
|
2361 |
+
z-index: 11;
|
2362 |
+
height: 100%;
|
2363 |
+
width: 100%
|
2364 |
+
}
|
2365 |
+
#zen {
|
2366 |
+
font-size: 1.25rem;
|
2367 |
+
width: 300px;
|
2368 |
+
height: 80%;
|
2369 |
+
margin: 0 auto;
|
2370 |
+
position: relative;
|
2371 |
+
top: 10%
|
2372 |
+
}
|
2373 |
+
#zen:before, #zen:after {
|
2374 |
+
content: "";
|
2375 |
+
position: absolute;
|
2376 |
+
height: 10%;
|
2377 |
+
width: 100%;
|
2378 |
+
z-index: 12;
|
2379 |
+
pointer-events: none
|
2380 |
+
}
|
2381 |
+
#preview .table {
|
2382 |
+
width: auto
|
2383 |
+
}
|
2384 |
+
.ui-resizable {
|
2385 |
+
position: relative
|
2386 |
+
}
|
2387 |
+
.ui-resizable-handle {
|
2388 |
+
position: absolute;
|
2389 |
+
font-size: .1px;
|
2390 |
+
z-index: 99999;
|
2391 |
+
display: block
|
2392 |
+
}
|
2393 |
+
.ui-resizable-e {
|
2394 |
+
background-color: #666666;
|
2395 |
+
border-right: 8px solid #e8e8e8;
|
2396 |
+
border-left: 1px solid #222222;
|
2397 |
+
width: 10px;
|
2398 |
+
z-index: 88 !important;
|
2399 |
+
position: relative
|
2400 |
+
}
|
2401 |
+
.ui-resizable-e:after {
|
2402 |
+
content: "-";
|
2403 |
+
display: block;
|
2404 |
+
position: absolute;
|
2405 |
+
top: calc(50% - 16px);
|
2406 |
+
left: 0;
|
2407 |
+
height: 25px;
|
2408 |
+
width: 2px;
|
2409 |
+
background-color: rgba(0, 0, 0, .4);
|
2410 |
+
margin: 3px
|
2411 |
+
}
|
2412 |
+
#editor {
|
2413 |
+
cursor: ew-resize;
|
2414 |
+
position: relative;
|
2415 |
+
z-index: auto
|
2416 |
+
}
|
2417 |
+
.profile-pic {
|
2418 |
+
float: left;
|
2419 |
+
width: 250px
|
2420 |
+
}
|
2421 |
+
#_default_ a::before {
|
2422 |
+
color: #a0aabf
|
2423 |
+
}
|
2424 |
+
#_default_ img {
|
2425 |
+
display: none
|
2426 |
+
}
|
2427 |
+
#_default_ #_default_ {
|
2428 |
+
display: block;
|
2429 |
+
float: left;
|
2430 |
+
max-width: 38%;
|
2431 |
+
word-wrap: break-word
|
2432 |
+
}
|
2433 |
+
#_default_ .default-ad {
|
2434 |
+
display: none
|
2435 |
+
}
|
2436 |
+
#_default_ ._default_ {
|
2437 |
+
display: block
|
2438 |
+
}
|
2439 |
+
#_default_ a {
|
2440 |
+
color: #15b748;
|
2441 |
+
text-decoration: none
|
2442 |
+
}
|
2443 |
+
#_default_ a:hover {
|
2444 |
+
color: #8ae8d8
|
2445 |
+
}
|
2446 |
+
#_default_ .default-image {
|
2447 |
+
display: none
|
2448 |
+
}
|
2449 |
+
#_default_ .default-title:after {
|
2450 |
+
content: " — "
|
2451 |
+
}
|
2452 |
+
#_default_ .default-title, #_default_ .default-description {
|
2453 |
+
display: inline
|
2454 |
+
}
|
2455 |
+
#_default_ .default-title {
|
2456 |
+
position: relative;
|
2457 |
+
font-weight: 600;
|
2458 |
+
display: none
|
2459 |
+
}
|
2460 |
+
#_default_ a:before {
|
2461 |
+
position: relative;
|
2462 |
+
top: 0;
|
2463 |
+
padding: 5px;
|
2464 |
+
color: #a0aabf;
|
2465 |
+
content: "Ad";
|
2466 |
+
text-transform: uppercase;
|
2467 |
+
font-size: 8px;
|
2468 |
+
font-family: Verdana, sans-serif
|
2469 |
+
}
|
2470 |
+
#_default_ {
|
2471 |
+
display: block;
|
2472 |
+
float: left;
|
2473 |
+
max-width: 38%;
|
2474 |
+
word-wrap: break-word
|
2475 |
+
}
|
2476 |
+
#_default_ ._default_ {
|
2477 |
+
display: block;
|
2478 |
+
font-size: .75rem;
|
2479 |
+
height: 51px;
|
2480 |
+
letter-spacing: 1px;
|
2481 |
+
line-height: 1rem;
|
2482 |
+
padding: 18px 24px
|
2483 |
+
}
|
2484 |
+
.split {
|
2485 |
+
overflow: scroll;
|
2486 |
+
padding: 0 !important
|
2487 |
+
}
|
2488 |
+
.split-editor {
|
2489 |
+
padding-left: 0;
|
2490 |
+
padding-right: 0;
|
2491 |
+
position: relative;
|
2492 |
+
z-index: 3
|
2493 |
+
}
|
2494 |
+
.show-preview .split-editor {
|
2495 |
+
display: none
|
2496 |
+
}
|
2497 |
+
.split-preview {
|
2498 |
+
background-color: #ffffff;
|
2499 |
+
display: none;
|
2500 |
+
top: 0;
|
2501 |
+
position: relative;
|
2502 |
+
z-index: 4
|
2503 |
+
}
|
2504 |
+
.show-preview .split-preview {
|
2505 |
+
display: block
|
2506 |
+
}
|
2507 |
+
#editor {
|
2508 |
+
font-size: 1rem;
|
2509 |
+
font-family: "Ubuntu Mono", Monaco;
|
2510 |
+
font-weight: 400;
|
2511 |
+
line-height: 2rem;
|
2512 |
+
width: 100%;
|
2513 |
+
height: 100%
|
2514 |
+
}
|
2515 |
+
#editor .ace_gutter {
|
2516 |
+
-webkit-font-smoothing: antialiased
|
2517 |
+
}
|
2518 |
+
.editor-header {
|
2519 |
+
width: 50%;
|
2520 |
+
float: left;
|
2521 |
+
border-bottom: 1px solid #e8e8e8;
|
2522 |
+
position: relative
|
2523 |
+
}
|
2524 |
+
.editor-header--first {
|
2525 |
+
border-right: 1px solid #e8e8e8
|
2526 |
+
}
|
2527 |
+
.editor-header .title {
|
2528 |
+
display: inline-block
|
2529 |
+
}
|
2530 |
+
.preview-html {
|
2531 |
+
padding: 15px
|
2532 |
+
}
|
2533 |
+
.preview-html a {
|
2534 |
+
color: #a0aabf;
|
2535 |
+
text-decoration: underline
|
2536 |
+
}
|
2537 |
+
.preview-src {
|
2538 |
+
white-space: normal
|
2539 |
+
}
|
2540 |
+
.preview-mode-toggle-src {
|
2541 |
+
background-image: url("../img/icons/code.svg")
|
2542 |
+
}
|
2543 |
+
.preview-mode-toggle-src, .preview-mode-toggle-html {
|
2544 |
+
font: 0/0 a;
|
2545 |
+
color: transparent;
|
2546 |
+
text-shadow: none;
|
2547 |
+
background-color: transparent;
|
2548 |
+
border: 0;
|
2549 |
+
background-repeat: no-repeat;
|
2550 |
+
width: 32px;
|
2551 |
+
height: 32px;
|
2552 |
+
display: block;
|
2553 |
+
position: absolute;
|
2554 |
+
right: .5rem;
|
2555 |
+
top: .5rem;
|
2556 |
+
display: none
|
2557 |
+
}
|
2558 |
+
.preview-mode-toggle-html {
|
2559 |
+
background-image: url("../img/icons/eye.svg")
|
2560 |
+
}
|
2561 |
+
.sr-only {
|
2562 |
+
visibility: hidden;
|
2563 |
+
text-overflow: 110%;
|
2564 |
+
overflow: hidden;
|
2565 |
+
top: -100px;
|
2566 |
+
position: absolute
|
2567 |
+
}
|
2568 |
+
.mnone {
|
2569 |
+
margin: 0 !important
|
2570 |
+
}
|
2571 |
+
@media screen and (min-width: 27.5em) {
|
2572 |
+
html {
|
2573 |
+
font-size: .875em
|
2574 |
+
}
|
2575 |
+
body {
|
2576 |
+
font-size: 1rem
|
2577 |
+
}
|
2578 |
+
ul, ol {
|
2579 |
+
margin-bottom: .83999rem;
|
2580 |
+
padding-top: .16001rem
|
2581 |
+
}
|
2582 |
+
p {
|
2583 |
+
padding-top: .66001rem
|
2584 |
+
}
|
2585 |
+
p, pre {
|
2586 |
+
margin-bottom: 1.33999rem
|
2587 |
+
}
|
2588 |
+
pre, blockquote p {
|
2589 |
+
font-size: 1rem;
|
2590 |
+
padding-top: .66001rem
|
2591 |
+
}
|
2592 |
+
blockquote p {
|
2593 |
+
margin-bottom: .33999rem
|
2594 |
+
}
|
2595 |
+
h1 {
|
2596 |
+
font-size: 2.0571429rem;
|
2597 |
+
margin-bottom: .21999rem;
|
2598 |
+
padding-top: .78001rem
|
2599 |
+
}
|
2600 |
+
h2 {
|
2601 |
+
font-size: 1.953125rem;
|
2602 |
+
margin-bottom: .1835837rem;
|
2603 |
+
padding-top: .8164163rem
|
2604 |
+
}
|
2605 |
+
h3 {
|
2606 |
+
font-size: 1.6457143rem;
|
2607 |
+
margin-bottom: .07599rem;
|
2608 |
+
padding-top: .92401rem
|
2609 |
+
}
|
2610 |
+
h4 {
|
2611 |
+
font-size: 1.5625rem;
|
2612 |
+
margin-bottom: .546865rem;
|
2613 |
+
padding-top: .453135rem
|
2614 |
+
}
|
2615 |
+
h5 {
|
2616 |
+
font-size: 1.25rem;
|
2617 |
+
margin-bottom: -.56251rem;
|
2618 |
+
padding-top: .56251rem
|
2619 |
+
}
|
2620 |
+
h6 {
|
2621 |
+
font-size: 1rem;
|
2622 |
+
margin-bottom: -.65001rem;
|
2623 |
+
padding-top: .65001rem
|
2624 |
+
}
|
2625 |
+
.g {
|
2626 |
+
margin-left: -16px;
|
2627 |
+
margin-right: -16px
|
2628 |
+
}
|
2629 |
+
.g-b {
|
2630 |
+
padding-left: 16px;
|
2631 |
+
padding-right: 16px
|
2632 |
+
}
|
2633 |
+
.g-b--m1of1 {
|
2634 |
+
width: 100%
|
2635 |
+
}
|
2636 |
+
.g-b--m1of2, .g-b--m2of4, .g-b--m3of6, .g-b--m4of8, .g-b--m5of10, .g-b--m6of12 {
|
2637 |
+
width: 50%
|
2638 |
+
}
|
2639 |
+
.g-b--m1of3, .g-b--m2of6, .g-b--m4of12 {
|
2640 |
+
width: 33.333%
|
2641 |
+
}
|
2642 |
+
.g-b--m2of3, .g-b--m4of6, .g-b--m8of12 {
|
2643 |
+
width: 66.666%
|
2644 |
+
}
|
2645 |
+
.g-b--m1of4, .g-b--m2of8, .g-b--m3of12 {
|
2646 |
+
width: 25%
|
2647 |
+
}
|
2648 |
+
.g-b--m3of4, .g-b--m6of8, .g-b--m9of12 {
|
2649 |
+
width: 75%
|
2650 |
+
}
|
2651 |
+
.g-b--m1of5, .g-b--m2of10 {
|
2652 |
+
width: 20%
|
2653 |
+
}
|
2654 |
+
.g-b--m2of5, .g-b--m4of10 {
|
2655 |
+
width: 40%
|
2656 |
+
}
|
2657 |
+
.g-b--m3of5, .g-b--m6of10 {
|
2658 |
+
width: 60%
|
2659 |
+
}
|
2660 |
+
.g-b--m4of5, .g-b--m8of10 {
|
2661 |
+
width: 80%
|
2662 |
+
}
|
2663 |
+
.g-b--m1of6, .g-b--m2of12 {
|
2664 |
+
width: 16.666%
|
2665 |
+
}
|
2666 |
+
.g-b--m5of6, .g-b--m10of12 {
|
2667 |
+
width: 83.333%
|
2668 |
+
}
|
2669 |
+
.g-b--m1of8 {
|
2670 |
+
width: 12.5%
|
2671 |
+
}
|
2672 |
+
.g-b--m3of8 {
|
2673 |
+
width: 37.5%
|
2674 |
+
}
|
2675 |
+
.g-b--m5of8 {
|
2676 |
+
width: 62.5%
|
2677 |
+
}
|
2678 |
+
.g-b--m7of8 {
|
2679 |
+
width: 87.5%
|
2680 |
+
}
|
2681 |
+
.g-b--m1of10 {
|
2682 |
+
width: 10%
|
2683 |
+
}
|
2684 |
+
.g-b--m3of10 {
|
2685 |
+
width: 30%
|
2686 |
+
}
|
2687 |
+
.g-b--m7of10 {
|
2688 |
+
width: 70%
|
2689 |
+
}
|
2690 |
+
.g-b--m9of10 {
|
2691 |
+
width: 90%
|
2692 |
+
}
|
2693 |
+
.g-b--m1of12 {
|
2694 |
+
width: 8.333%
|
2695 |
+
}
|
2696 |
+
.g-b--m5of12 {
|
2697 |
+
width: 41.666%
|
2698 |
+
}
|
2699 |
+
.g-b--m7of12 {
|
2700 |
+
width: 58.333%
|
2701 |
+
}
|
2702 |
+
.g-b--m11of12 {
|
2703 |
+
width: 91.666%
|
2704 |
+
}
|
2705 |
+
.g-b--push--m1of1 {
|
2706 |
+
margin-left: 100%
|
2707 |
+
}
|
2708 |
+
.g-b--push--m1of2, .g-b--push--m2of4, .g-b--push--m3of6, .g-b--push--m4of8, .g-b--push--m5of10, .g-b--push--m6of12 {
|
2709 |
+
margin-left: 50%
|
2710 |
+
}
|
2711 |
+
.g-b--push--m1of3, .g-b--push--m2of6, .g-b--push--m4of12 {
|
2712 |
+
margin-left: 33.333%
|
2713 |
+
}
|
2714 |
+
.g-b--push--m2of3, .g-b--push--m4of6, .g-b--push--m8of12 {
|
2715 |
+
margin-left: 66.666%
|
2716 |
+
}
|
2717 |
+
.g-b--push--m1of4, .g-b--push--m2of8, .g-b--push--m3of12 {
|
2718 |
+
margin-left: 25%
|
2719 |
+
}
|
2720 |
+
.g-b--push--m3of4, .g-b--push--m6of8, .g-b--push--m9of12 {
|
2721 |
+
margin-left: 75%
|
2722 |
+
}
|
2723 |
+
.g-b--push--m1of5, .g-b--push--m2of10 {
|
2724 |
+
margin-left: 20%
|
2725 |
+
}
|
2726 |
+
.g-b--push--m2of5, .g-b--push--m4of10 {
|
2727 |
+
margin-left: 40%
|
2728 |
+
}
|
2729 |
+
.g-b--push--m3of5, .g-b--push--m6of10 {
|
2730 |
+
margin-left: 60%
|
2731 |
+
}
|
2732 |
+
.g-b--push--m4of5, .g-b--push--m8of10 {
|
2733 |
+
margin-left: 80%
|
2734 |
+
}
|
2735 |
+
.g-b--push--m1of6, .g-b--push--m2of12 {
|
2736 |
+
margin-left: 16.666%
|
2737 |
+
}
|
2738 |
+
.g-b--push--m5of6, .g-b--push--m10of12 {
|
2739 |
+
margin-left: 83.333%
|
2740 |
+
}
|
2741 |
+
.g-b--push--m1of8 {
|
2742 |
+
margin-left: 12.5%
|
2743 |
+
}
|
2744 |
+
.g-b--push--m3of8 {
|
2745 |
+
margin-left: 37.5%
|
2746 |
+
}
|
2747 |
+
.g-b--push--m5of8 {
|
2748 |
+
margin-left: 62.5%
|
2749 |
+
}
|
2750 |
+
.g-b--push--m7of8 {
|
2751 |
+
margin-left: 87.5%
|
2752 |
+
}
|
2753 |
+
.g-b--push--m1of10 {
|
2754 |
+
margin-left: 10%
|
2755 |
+
}
|
2756 |
+
.g-b--push--m3of10 {
|
2757 |
+
margin-left: 30%
|
2758 |
+
}
|
2759 |
+
.g-b--push--m7of10 {
|
2760 |
+
margin-left: 70%
|
2761 |
+
}
|
2762 |
+
.g-b--push--m9of10 {
|
2763 |
+
margin-left: 90%
|
2764 |
+
}
|
2765 |
+
.g-b--push--m1of12 {
|
2766 |
+
margin-left: 8.333%
|
2767 |
+
}
|
2768 |
+
.g-b--push--m5of12 {
|
2769 |
+
margin-left: 41.666%
|
2770 |
+
}
|
2771 |
+
.g-b--push--m7of12 {
|
2772 |
+
margin-left: 58.333%
|
2773 |
+
}
|
2774 |
+
.g-b--push--m11of12 {
|
2775 |
+
margin-left: 91.666%
|
2776 |
+
}
|
2777 |
+
.g-b--pull--m1of1 {
|
2778 |
+
margin-right: 100%
|
2779 |
+
}
|
2780 |
+
.g-b--pull--m1of2, .g-b--pull--m2of4, .g-b--pull--m3of6, .g-b--pull--m4of8, .g-b--pull--m5of10, .g-b--pull--m6of12 {
|
2781 |
+
margin-right: 50%
|
2782 |
+
}
|
2783 |
+
.g-b--pull--m1of3, .g-b--pull--m2of6, .g-b--pull--m4of12 {
|
2784 |
+
margin-right: 33.333%
|
2785 |
+
}
|
2786 |
+
.g-b--pull--m2of3, .g-b--pull--m4of6, .g-b--pull--m8of12 {
|
2787 |
+
margin-right: 66.666%
|
2788 |
+
}
|
2789 |
+
.g-b--pull--m1of4, .g-b--pull--m2of8, .g-b--pull--m3of12 {
|
2790 |
+
margin-right: 25%
|
2791 |
+
}
|
2792 |
+
.g-b--pull--m3of4, .g-b--pull--m6of8, .g-b--pull--m9of12 {
|
2793 |
+
margin-right: 75%
|
2794 |
+
}
|
2795 |
+
.g-b--pull--m1of5, .g-b--pull--m2of10 {
|
2796 |
+
margin-right: 20%
|
2797 |
+
}
|
2798 |
+
.g-b--pull--m2of5, .g-b--pull--m4of10 {
|
2799 |
+
margin-right: 40%
|
2800 |
+
}
|
2801 |
+
.g-b--pull--m3of5, .g-b--pull--m6of10 {
|
2802 |
+
margin-right: 60%
|
2803 |
+
}
|
2804 |
+
.g-b--pull--m4of5, .g-b--pull--m8of10 {
|
2805 |
+
margin-right: 80%
|
2806 |
+
}
|
2807 |
+
.g-b--pull--m1of6, .g-b--pull--m2of12 {
|
2808 |
+
margin-right: 16.666%
|
2809 |
+
}
|
2810 |
+
.g-b--pull--m5of6, .g-b--pull--m10of12 {
|
2811 |
+
margin-right: 83.333%
|
2812 |
+
}
|
2813 |
+
.g-b--pull--m1of8 {
|
2814 |
+
margin-right: 12.5%
|
2815 |
+
}
|
2816 |
+
.g-b--pull--m3of8 {
|
2817 |
+
margin-right: 37.5%
|
2818 |
+
}
|
2819 |
+
.g-b--pull--m5of8 {
|
2820 |
+
margin-right: 62.5%
|
2821 |
+
}
|
2822 |
+
.g-b--pull--m7of8 {
|
2823 |
+
margin-right: 87.5%
|
2824 |
+
}
|
2825 |
+
.g-b--pull--m1of10 {
|
2826 |
+
margin-right: 10%
|
2827 |
+
}
|
2828 |
+
.g-b--pull--m3of10 {
|
2829 |
+
margin-right: 30%
|
2830 |
+
}
|
2831 |
+
.g-b--pull--m7of10 {
|
2832 |
+
margin-right: 70%
|
2833 |
+
}
|
2834 |
+
.g-b--pull--m9of10 {
|
2835 |
+
margin-right: 90%
|
2836 |
+
}
|
2837 |
+
.g-b--pull--m1of12 {
|
2838 |
+
margin-right: 8.333%
|
2839 |
+
}
|
2840 |
+
.g-b--pull--m5of12 {
|
2841 |
+
margin-right: 41.666%
|
2842 |
+
}
|
2843 |
+
.g-b--pull--m7of12 {
|
2844 |
+
margin-right: 58.333%
|
2845 |
+
}
|
2846 |
+
.g-b--pull--m11of12 {
|
2847 |
+
margin-right: 91.666%
|
2848 |
+
}
|
2849 |
+
.splashscreen p {
|
2850 |
+
font-size: 1.25rem;
|
2851 |
+
margin-bottom: 1.43749rem;
|
2852 |
+
padding-top: .56251rem
|
2853 |
+
}
|
2854 |
+
.title {
|
2855 |
+
font-size: .8rem;
|
2856 |
+
margin-bottom: .77999rem;
|
2857 |
+
padding-top: .22001rem
|
2858 |
+
}
|
2859 |
+
.title-document {
|
2860 |
+
margin-bottom: .89999rem;
|
2861 |
+
padding-top: .10001rem
|
2862 |
+
}
|
2863 |
+
.title-document, .settings a {
|
2864 |
+
font-size: 1.25rem
|
2865 |
+
}
|
2866 |
+
.words, .characters {
|
2867 |
+
font-size: .8rem;
|
2868 |
+
margin-bottom: .77999rem;
|
2869 |
+
padding-top: .22001rem
|
2870 |
+
}
|
2871 |
+
.modal--dillinger.about .modal-dialog, #zen {
|
2872 |
+
font-size: 1.25rem
|
2873 |
+
}
|
2874 |
+
#zen {
|
2875 |
+
width: 400px
|
2876 |
+
}
|
2877 |
+
#editor {
|
2878 |
+
font-size: 1rem
|
2879 |
+
}
|
2880 |
+
}
|
2881 |
+
@media screen and (min-width: 46.25em) {
|
2882 |
+
html {
|
2883 |
+
font-size: .875em
|
2884 |
+
}
|
2885 |
+
body {
|
2886 |
+
font-size: 1rem
|
2887 |
+
}
|
2888 |
+
ul, ol {
|
2889 |
+
margin-bottom: .83999rem;
|
2890 |
+
padding-top: .16001rem
|
2891 |
+
}
|
2892 |
+
p {
|
2893 |
+
padding-top: .66001rem
|
2894 |
+
}
|
2895 |
+
p, pre {
|
2896 |
+
margin-bottom: 1.33999rem
|
2897 |
+
}
|
2898 |
+
pre, blockquote p {
|
2899 |
+
font-size: 1rem;
|
2900 |
+
padding-top: .66001rem
|
2901 |
+
}
|
2902 |
+
blockquote p {
|
2903 |
+
margin-bottom: .33999rem
|
2904 |
+
}
|
2905 |
+
h1 {
|
2906 |
+
font-size: 2.0571429rem;
|
2907 |
+
margin-bottom: .21999rem;
|
2908 |
+
padding-top: .78001rem
|
2909 |
+
}
|
2910 |
+
h2 {
|
2911 |
+
font-size: 1.953125rem;
|
2912 |
+
margin-bottom: .1835837rem;
|
2913 |
+
padding-top: .8164163rem
|
2914 |
+
}
|
2915 |
+
h3 {
|
2916 |
+
font-size: 1.6457143rem;
|
2917 |
+
margin-bottom: .07599rem;
|
2918 |
+
padding-top: .92401rem
|
2919 |
+
}
|
2920 |
+
h4 {
|
2921 |
+
font-size: 1.5625rem;
|
2922 |
+
margin-bottom: .546865rem;
|
2923 |
+
padding-top: .453135rem
|
2924 |
+
}
|
2925 |
+
h5 {
|
2926 |
+
font-size: 1.25rem;
|
2927 |
+
margin-bottom: -.56251rem;
|
2928 |
+
padding-top: .56251rem
|
2929 |
+
}
|
2930 |
+
h6 {
|
2931 |
+
font-size: 1rem;
|
2932 |
+
margin-bottom: -.65001rem;
|
2933 |
+
padding-top: .65001rem
|
2934 |
+
}
|
2935 |
+
.g {
|
2936 |
+
margin-left: -16px;
|
2937 |
+
margin-right: -16px
|
2938 |
+
}
|
2939 |
+
.g-b {
|
2940 |
+
padding-left: 16px;
|
2941 |
+
padding-right: 16px
|
2942 |
+
}
|
2943 |
+
.g-b--t1of1 {
|
2944 |
+
width: 100%
|
2945 |
+
}
|
2946 |
+
.g-b--t1of2, .g-b--t2of4, .g-b--t3of6, .g-b--t4of8, .g-b--t5of10, .g-b--t6of12 {
|
2947 |
+
width: 50%
|
2948 |
+
}
|
2949 |
+
.g-b--t1of3, .g-b--t2of6, .g-b--t4of12 {
|
2950 |
+
width: 33.333%
|
2951 |
+
}
|
2952 |
+
.g-b--t2of3, .g-b--t4of6, .g-b--t8of12 {
|
2953 |
+
width: 66.666%
|
2954 |
+
}
|
2955 |
+
.g-b--t1of4, .g-b--t2of8, .g-b--t3of12 {
|
2956 |
+
width: 25%
|
2957 |
+
}
|
2958 |
+
.g-b--t3of4, .g-b--t6of8, .g-b--t9of12 {
|
2959 |
+
width: 75%
|
2960 |
+
}
|
2961 |
+
.g-b--t1of5, .g-b--t2of10 {
|
2962 |
+
width: 20%
|
2963 |
+
}
|
2964 |
+
.g-b--t2of5, .g-b--t4of10 {
|
2965 |
+
width: 40%
|
2966 |
+
}
|
2967 |
+
.g-b--t3of5, .g-b--t6of10 {
|
2968 |
+
width: 60%
|
2969 |
+
}
|
2970 |
+
.g-b--t4of5, .g-b--t8of10 {
|
2971 |
+
width: 80%
|
2972 |
+
}
|
2973 |
+
.g-b--t1of6, .g-b--t2of12 {
|
2974 |
+
width: 16.666%
|
2975 |
+
}
|
2976 |
+
.g-b--t5of6, .g-b--t10of12 {
|
2977 |
+
width: 83.333%
|
2978 |
+
}
|
2979 |
+
.g-b--t1of8 {
|
2980 |
+
width: 12.5%
|
2981 |
+
}
|
2982 |
+
.g-b--t3of8 {
|
2983 |
+
width: 37.5%
|
2984 |
+
}
|
2985 |
+
.g-b--t5of8 {
|
2986 |
+
width: 62.5%
|
2987 |
+
}
|
2988 |
+
.g-b--t7of8 {
|
2989 |
+
width: 87.5%
|
2990 |
+
}
|
2991 |
+
.g-b--t1of10 {
|
2992 |
+
width: 10%
|
2993 |
+
}
|
2994 |
+
.g-b--t3of10 {
|
2995 |
+
width: 30%
|
2996 |
+
}
|
2997 |
+
.g-b--t7of10 {
|
2998 |
+
width: 70%
|
2999 |
+
}
|
3000 |
+
.g-b--t9of10 {
|
3001 |
+
width: 90%
|
3002 |
+
}
|
3003 |
+
.g-b--t1of12 {
|
3004 |
+
width: 8.333%
|
3005 |
+
}
|
3006 |
+
.g-b--t5of12 {
|
3007 |
+
width: 41.666%
|
3008 |
+
}
|
3009 |
+
.g-b--t7of12 {
|
3010 |
+
width: 58.333%
|
3011 |
+
}
|
3012 |
+
.g-b--t11of12 {
|
3013 |
+
width: 91.666%
|
3014 |
+
}
|
3015 |
+
.g-b--push--t1of1 {
|
3016 |
+
margin-left: 100%
|
3017 |
+
}
|
3018 |
+
.g-b--push--t1of2, .g-b--push--t2of4, .g-b--push--t3of6, .g-b--push--t4of8, .g-b--push--t5of10, .g-b--push--t6of12 {
|
3019 |
+
margin-left: 50%
|
3020 |
+
}
|
3021 |
+
.g-b--push--t1of3, .g-b--push--t2of6, .g-b--push--t4of12 {
|
3022 |
+
margin-left: 33.333%
|
3023 |
+
}
|
3024 |
+
.g-b--push--t2of3, .g-b--push--t4of6, .g-b--push--t8of12 {
|
3025 |
+
margin-left: 66.666%
|
3026 |
+
}
|
3027 |
+
.g-b--push--t1of4, .g-b--push--t2of8, .g-b--push--t3of12 {
|
3028 |
+
margin-left: 25%
|
3029 |
+
}
|
3030 |
+
.g-b--push--t3of4, .g-b--push--t6of8, .g-b--push--t9of12 {
|
3031 |
+
margin-left: 75%
|
3032 |
+
}
|
3033 |
+
.g-b--push--t1of5, .g-b--push--t2of10 {
|
3034 |
+
margin-left: 20%
|
3035 |
+
}
|
3036 |
+
.g-b--push--t2of5, .g-b--push--t4of10 {
|
3037 |
+
margin-left: 40%
|
3038 |
+
}
|
3039 |
+
.g-b--push--t3of5, .g-b--push--t6of10 {
|
3040 |
+
margin-left: 60%
|
3041 |
+
}
|
3042 |
+
.g-b--push--t4of5, .g-b--push--t8of10 {
|
3043 |
+
margin-left: 80%
|
3044 |
+
}
|
3045 |
+
.g-b--push--t1of6, .g-b--push--t2of12 {
|
3046 |
+
margin-left: 16.666%
|
3047 |
+
}
|
3048 |
+
.g-b--push--t5of6, .g-b--push--t10of12 {
|
3049 |
+
margin-left: 83.333%
|
3050 |
+
}
|
3051 |
+
.g-b--push--t1of8 {
|
3052 |
+
margin-left: 12.5%
|
3053 |
+
}
|
3054 |
+
.g-b--push--t3of8 {
|
3055 |
+
margin-left: 37.5%
|
3056 |
+
}
|
3057 |
+
.g-b--push--t5of8 {
|
3058 |
+
margin-left: 62.5%
|
3059 |
+
}
|
3060 |
+
.g-b--push--t7of8 {
|
3061 |
+
margin-left: 87.5%
|
3062 |
+
}
|
3063 |
+
.g-b--push--t1of10 {
|
3064 |
+
margin-left: 10%
|
3065 |
+
}
|
3066 |
+
.g-b--push--t3of10 {
|
3067 |
+
margin-left: 30%
|
3068 |
+
}
|
3069 |
+
.g-b--push--t7of10 {
|
3070 |
+
margin-left: 70%
|
3071 |
+
}
|
3072 |
+
.g-b--push--t9of10 {
|
3073 |
+
margin-left: 90%
|
3074 |
+
}
|
3075 |
+
.g-b--push--t1of12 {
|
3076 |
+
margin-left: 8.333%
|
3077 |
+
}
|
3078 |
+
.g-b--push--t5of12 {
|
3079 |
+
margin-left: 41.666%
|
3080 |
+
}
|
3081 |
+
.g-b--push--t7of12 {
|
3082 |
+
margin-left: 58.333%
|
3083 |
+
}
|
3084 |
+
.g-b--push--t11of12 {
|
3085 |
+
margin-left: 91.666%
|
3086 |
+
}
|
3087 |
+
.g-b--pull--t1of1 {
|
3088 |
+
margin-right: 100%
|
3089 |
+
}
|
3090 |
+
.g-b--pull--t1of2, .g-b--pull--t2of4, .g-b--pull--t3of6, .g-b--pull--t4of8, .g-b--pull--t5of10, .g-b--pull--t6of12 {
|
3091 |
+
margin-right: 50%
|
3092 |
+
}
|
3093 |
+
.g-b--pull--t1of3, .g-b--pull--t2of6, .g-b--pull--t4of12 {
|
3094 |
+
margin-right: 33.333%
|
3095 |
+
}
|
3096 |
+
.g-b--pull--t2of3, .g-b--pull--t4of6, .g-b--pull--t8of12 {
|
3097 |
+
margin-right: 66.666%
|
3098 |
+
}
|
3099 |
+
.g-b--pull--t1of4, .g-b--pull--t2of8, .g-b--pull--t3of12 {
|
3100 |
+
margin-right: 25%
|
3101 |
+
}
|
3102 |
+
.g-b--pull--t3of4, .g-b--pull--t6of8, .g-b--pull--t9of12 {
|
3103 |
+
margin-right: 75%
|
3104 |
+
}
|
3105 |
+
.g-b--pull--t1of5, .g-b--pull--t2of10 {
|
3106 |
+
margin-right: 20%
|
3107 |
+
}
|
3108 |
+
.g-b--pull--t2of5, .g-b--pull--t4of10 {
|
3109 |
+
margin-right: 40%
|
3110 |
+
}
|
3111 |
+
.g-b--pull--t3of5, .g-b--pull--t6of10 {
|
3112 |
+
margin-right: 60%
|
3113 |
+
}
|
3114 |
+
.g-b--pull--t4of5, .g-b--pull--t8of10 {
|
3115 |
+
margin-right: 80%
|
3116 |
+
}
|
3117 |
+
.g-b--pull--t1of6, .g-b--pull--t2of12 {
|
3118 |
+
margin-right: 16.666%
|
3119 |
+
}
|
3120 |
+
.g-b--pull--t5of6, .g-b--pull--t10of12 {
|
3121 |
+
margin-right: 83.333%
|
3122 |
+
}
|
3123 |
+
.g-b--pull--t1of8 {
|
3124 |
+
margin-right: 12.5%
|
3125 |
+
}
|
3126 |
+
.g-b--pull--t3of8 {
|
3127 |
+
margin-right: 37.5%
|
3128 |
+
}
|
3129 |
+
.g-b--pull--t5of8 {
|
3130 |
+
margin-right: 62.5%
|
3131 |
+
}
|
3132 |
+
.g-b--pull--t7of8 {
|
3133 |
+
margin-right: 87.5%
|
3134 |
+
}
|
3135 |
+
.g-b--pull--t1of10 {
|
3136 |
+
margin-right: 10%
|
3137 |
+
}
|
3138 |
+
.g-b--pull--t3of10 {
|
3139 |
+
margin-right: 30%
|
3140 |
+
}
|
3141 |
+
.g-b--pull--t7of10 {
|
3142 |
+
margin-right: 70%
|
3143 |
+
}
|
3144 |
+
.g-b--pull--t9of10 {
|
3145 |
+
margin-right: 90%
|
3146 |
+
}
|
3147 |
+
.g-b--pull--t1of12 {
|
3148 |
+
margin-right: 8.333%
|
3149 |
+
}
|
3150 |
+
.g-b--pull--t5of12 {
|
3151 |
+
margin-right: 41.666%
|
3152 |
+
}
|
3153 |
+
.g-b--pull--t7of12 {
|
3154 |
+
margin-right: 58.333%
|
3155 |
+
}
|
3156 |
+
.g-b--pull--t11of12 {
|
3157 |
+
margin-right: 91.666%
|
3158 |
+
}
|
3159 |
+
.splashscreen-dillinger {
|
3160 |
+
width: 500px
|
3161 |
+
}
|
3162 |
+
.splashscreen p {
|
3163 |
+
font-size: 1.25rem;
|
3164 |
+
margin-bottom: 1.43749rem;
|
3165 |
+
padding-top: .56251rem
|
3166 |
+
}
|
3167 |
+
.title {
|
3168 |
+
font-size: .8rem;
|
3169 |
+
margin-bottom: .77999rem;
|
3170 |
+
padding-top: .22001rem
|
3171 |
+
}
|
3172 |
+
.title-document {
|
3173 |
+
font-size: 1.25rem;
|
3174 |
+
margin-bottom: .89999rem;
|
3175 |
+
padding-top: .10001rem
|
3176 |
+
}
|
3177 |
+
.menu .menu-item--save-to, .menu .menu-item--import-from {
|
3178 |
+
display: block
|
3179 |
+
}
|
3180 |
+
.menu .menu-item--preview, .menu .menu-item--save-to.in-sidebar, .menu .menu-item--import-from.in-sidebar {
|
3181 |
+
display: none
|
3182 |
+
}
|
3183 |
+
.settings a {
|
3184 |
+
font-size: 1.25rem
|
3185 |
+
}
|
3186 |
+
.words, .characters {
|
3187 |
+
font-size: .8rem;
|
3188 |
+
margin-bottom: .77999rem;
|
3189 |
+
padding-top: .22001rem
|
3190 |
+
}
|
3191 |
+
.modal--dillinger.about .modal-dialog {
|
3192 |
+
font-size: 1.25rem
|
3193 |
+
}
|
3194 |
+
.enter-zen-mode {
|
3195 |
+
display: block
|
3196 |
+
}
|
3197 |
+
.close-zen-mode {
|
3198 |
+
right: 3rem;
|
3199 |
+
top: 3rem
|
3200 |
+
}
|
3201 |
+
#zen {
|
3202 |
+
font-size: 1.25rem;
|
3203 |
+
width: 500px
|
3204 |
+
}
|
3205 |
+
.split-editor {
|
3206 |
+
border-right: 1px solid #e8e8e8;
|
3207 |
+
float: left;
|
3208 |
+
height: calc(100vh - 172px);
|
3209 |
+
-webkit-overflow-scrolling: touch;
|
3210 |
+
padding-right: 16px;
|
3211 |
+
width: 50%
|
3212 |
+
}
|
3213 |
+
.show-preview .split-editor {
|
3214 |
+
display: block
|
3215 |
+
}
|
3216 |
+
.split-preview {
|
3217 |
+
display: block;
|
3218 |
+
float: right;
|
3219 |
+
height: calc(100vh - 172px);
|
3220 |
+
-webkit-overflow-scrolling: touch;
|
3221 |
+
position: relative;
|
3222 |
+
top: 0;
|
3223 |
+
width: 50%
|
3224 |
+
}
|
3225 |
+
#editor {
|
3226 |
+
font-size: 1rem
|
3227 |
+
}
|
3228 |
+
.preview-mode-toggle-src, .preview-mode-toggle-html {
|
3229 |
+
display: block
|
3230 |
+
}
|
3231 |
+
}
|
3232 |
+
@media screen and (min-width: 62.5em) {
|
3233 |
+
html {
|
3234 |
+
font-size: .875em
|
3235 |
+
}
|
3236 |
+
body {
|
3237 |
+
font-size: 1rem
|
3238 |
+
}
|
3239 |
+
ul, ol {
|
3240 |
+
margin-bottom: .83999rem;
|
3241 |
+
padding-top: .16001rem
|
3242 |
+
}
|
3243 |
+
p {
|
3244 |
+
padding-top: .66001rem
|
3245 |
+
}
|
3246 |
+
p, pre {
|
3247 |
+
margin-bottom: 1.33999rem
|
3248 |
+
}
|
3249 |
+
pre, blockquote p {
|
3250 |
+
font-size: 1rem;
|
3251 |
+
padding-top: .66001rem
|
3252 |
+
}
|
3253 |
+
blockquote p {
|
3254 |
+
margin-bottom: .33999rem
|
3255 |
+
}
|
3256 |
+
h1 {
|
3257 |
+
font-size: 2.0571429rem;
|
3258 |
+
margin-bottom: .21999rem;
|
3259 |
+
padding-top: .78001rem
|
3260 |
+
}
|
3261 |
+
h2 {
|
3262 |
+
font-size: 1.953125rem;
|
3263 |
+
margin-bottom: .1835837rem;
|
3264 |
+
padding-top: .8164163rem
|
3265 |
+
}
|
3266 |
+
h3 {
|
3267 |
+
font-size: 1.6457143rem;
|
3268 |
+
margin-bottom: .07599rem;
|
3269 |
+
padding-top: .92401rem
|
3270 |
+
}
|
3271 |
+
h4 {
|
3272 |
+
font-size: 1.5625rem;
|
3273 |
+
margin-bottom: .546865rem;
|
3274 |
+
padding-top: .453135rem
|
3275 |
+
}
|
3276 |
+
h5 {
|
3277 |
+
font-size: 1.25rem;
|
3278 |
+
margin-bottom: -.56251rem;
|
3279 |
+
padding-top: .56251rem
|
3280 |
+
}
|
3281 |
+
h6 {
|
3282 |
+
font-size: 1rem;
|
3283 |
+
margin-bottom: -.65001rem;
|
3284 |
+
padding-top: .65001rem
|
3285 |
+
}
|
3286 |
+
.g {
|
3287 |
+
margin-left: -16px;
|
3288 |
+
margin-right: -16px
|
3289 |
+
}
|
3290 |
+
.g-b {
|
3291 |
+
padding-left: 16px;
|
3292 |
+
padding-right: 16px
|
3293 |
+
}
|
3294 |
+
.g-b--d1of1 {
|
3295 |
+
width: 100%
|
3296 |
+
}
|
3297 |
+
.g-b--d1of2, .g-b--d2of4, .g-b--d3of6, .g-b--d4of8, .g-b--d5of10, .g-b--d6of12 {
|
3298 |
+
width: 50%
|
3299 |
+
}
|
3300 |
+
.g-b--d1of3, .g-b--d2of6, .g-b--d4of12 {
|
3301 |
+
width: 33.333%
|
3302 |
+
}
|
3303 |
+
.g-b--d2of3, .g-b--d4of6, .g-b--d8of12 {
|
3304 |
+
width: 66.666%
|
3305 |
+
}
|
3306 |
+
.g-b--d1of4, .g-b--d2of8, .g-b--d3of12 {
|
3307 |
+
width: 25%
|
3308 |
+
}
|
3309 |
+
.g-b--d3of4, .g-b--d6of8, .g-b--d9of12 {
|
3310 |
+
width: 75%
|
3311 |
+
}
|
3312 |
+
.g-b--d1of5, .g-b--d2of10 {
|
3313 |
+
width: 20%
|
3314 |
+
}
|
3315 |
+
.g-b--d2of5, .g-b--d4of10 {
|
3316 |
+
width: 40%
|
3317 |
+
}
|
3318 |
+
.g-b--d3of5, .g-b--d6of10 {
|
3319 |
+
width: 60%
|
3320 |
+
}
|
3321 |
+
.g-b--d4of5, .g-b--d8of10 {
|
3322 |
+
width: 80%
|
3323 |
+
}
|
3324 |
+
.g-b--d1of6, .g-b--d2of12 {
|
3325 |
+
width: 16.666%
|
3326 |
+
}
|
3327 |
+
.g-b--d5of6, .g-b--d10of12 {
|
3328 |
+
width: 83.333%
|
3329 |
+
}
|
3330 |
+
.g-b--d1of8 {
|
3331 |
+
width: 12.5%
|
3332 |
+
}
|
3333 |
+
.g-b--d3of8 {
|
3334 |
+
width: 37.5%
|
3335 |
+
}
|
3336 |
+
.g-b--d5of8 {
|
3337 |
+
width: 62.5%
|
3338 |
+
}
|
3339 |
+
.g-b--d7of8 {
|
3340 |
+
width: 87.5%
|
3341 |
+
}
|
3342 |
+
.g-b--d1of10 {
|
3343 |
+
width: 10%
|
3344 |
+
}
|
3345 |
+
.g-b--d3of10 {
|
3346 |
+
width: 30%
|
3347 |
+
}
|
3348 |
+
.g-b--d7of10 {
|
3349 |
+
width: 70%
|
3350 |
+
}
|
3351 |
+
.g-b--d9of10 {
|
3352 |
+
width: 90%
|
3353 |
+
}
|
3354 |
+
.g-b--d1of12 {
|
3355 |
+
width: 8.333%
|
3356 |
+
}
|
3357 |
+
.g-b--d5of12 {
|
3358 |
+
width: 41.666%
|
3359 |
+
}
|
3360 |
+
.g-b--d7of12 {
|
3361 |
+
width: 58.333%
|
3362 |
+
}
|
3363 |
+
.g-b--d11of12 {
|
3364 |
+
width: 91.666%
|
3365 |
+
}
|
3366 |
+
.g-b--push--d1of1 {
|
3367 |
+
margin-left: 100%
|
3368 |
+
}
|
3369 |
+
.g-b--push--d1of2, .g-b--push--d2of4, .g-b--push--d3of6, .g-b--push--d4of8, .g-b--push--d5of10, .g-b--push--d6of12 {
|
3370 |
+
margin-left: 50%
|
3371 |
+
}
|
3372 |
+
.g-b--push--d1of3, .g-b--push--d2of6, .g-b--push--d4of12 {
|
3373 |
+
margin-left: 33.333%
|
3374 |
+
}
|
3375 |
+
.g-b--push--d2of3, .g-b--push--d4of6, .g-b--push--d8of12 {
|
3376 |
+
margin-left: 66.666%
|
3377 |
+
}
|
3378 |
+
.g-b--push--d1of4, .g-b--push--d2of8, .g-b--push--d3of12 {
|
3379 |
+
margin-left: 25%
|
3380 |
+
}
|
3381 |
+
.g-b--push--d3of4, .g-b--push--d6of8, .g-b--push--d9of12 {
|
3382 |
+
margin-left: 75%
|
3383 |
+
}
|
3384 |
+
.g-b--push--d1of5, .g-b--push--d2of10 {
|
3385 |
+
margin-left: 20%
|
3386 |
+
}
|
3387 |
+
.g-b--push--d2of5, .g-b--push--d4of10 {
|
3388 |
+
margin-left: 40%
|
3389 |
+
}
|
3390 |
+
.g-b--push--d3of5, .g-b--push--d6of10 {
|
3391 |
+
margin-left: 60%
|
3392 |
+
}
|
3393 |
+
.g-b--push--d4of5, .g-b--push--d8of10 {
|
3394 |
+
margin-left: 80%
|
3395 |
+
}
|
3396 |
+
.g-b--push--d1of6, .g-b--push--d2of12 {
|
3397 |
+
margin-left: 16.666%
|
3398 |
+
}
|
3399 |
+
.g-b--push--d5of6, .g-b--push--d10of12 {
|
3400 |
+
margin-left: 83.333%
|
3401 |
+
}
|
3402 |
+
.g-b--push--d1of8 {
|
3403 |
+
margin-left: 12.5%
|
3404 |
+
}
|
3405 |
+
.g-b--push--d3of8 {
|
3406 |
+
margin-left: 37.5%
|
3407 |
+
}
|
3408 |
+
.g-b--push--d5of8 {
|
3409 |
+
margin-left: 62.5%
|
3410 |
+
}
|
3411 |
+
.g-b--push--d7of8 {
|
3412 |
+
margin-left: 87.5%
|
3413 |
+
}
|
3414 |
+
.g-b--push--d1of10 {
|
3415 |
+
margin-left: 10%
|
3416 |
+
}
|
3417 |
+
.g-b--push--d3of10 {
|
3418 |
+
margin-left: 30%
|
3419 |
+
}
|
3420 |
+
.g-b--push--d7of10 {
|
3421 |
+
margin-left: 70%
|
3422 |
+
}
|
3423 |
+
.g-b--push--d9of10 {
|
3424 |
+
margin-left: 90%
|
3425 |
+
}
|
3426 |
+
.g-b--push--d1of12 {
|
3427 |
+
margin-left: 8.333%
|
3428 |
+
}
|
3429 |
+
.g-b--push--d5of12 {
|
3430 |
+
margin-left: 41.666%
|
3431 |
+
}
|
3432 |
+
.g-b--push--d7of12 {
|
3433 |
+
margin-left: 58.333%
|
3434 |
+
}
|
3435 |
+
.g-b--push--d11of12 {
|
3436 |
+
margin-left: 91.666%
|
3437 |
+
}
|
3438 |
+
.g-b--pull--d1of1 {
|
3439 |
+
margin-right: 100%
|
3440 |
+
}
|
3441 |
+
.g-b--pull--d1of2, .g-b--pull--d2of4, .g-b--pull--d3of6, .g-b--pull--d4of8, .g-b--pull--d5of10, .g-b--pull--d6of12 {
|
3442 |
+
margin-right: 50%
|
3443 |
+
}
|
3444 |
+
.g-b--pull--d1of3, .g-b--pull--d2of6, .g-b--pull--d4of12 {
|
3445 |
+
margin-right: 33.333%
|
3446 |
+
}
|
3447 |
+
.g-b--pull--d2of3, .g-b--pull--d4of6, .g-b--pull--d8of12 {
|
3448 |
+
margin-right: 66.666%
|
3449 |
+
}
|
3450 |
+
.g-b--pull--d1of4, .g-b--pull--d2of8, .g-b--pull--d3of12 {
|
3451 |
+
margin-right: 25%
|
3452 |
+
}
|
3453 |
+
.g-b--pull--d3of4, .g-b--pull--d6of8, .g-b--pull--d9of12 {
|
3454 |
+
margin-right: 75%
|
3455 |
+
}
|
3456 |
+
.g-b--pull--d1of5, .g-b--pull--d2of10 {
|
3457 |
+
margin-right: 20%
|
3458 |
+
}
|
3459 |
+
.g-b--pull--d2of5, .g-b--pull--d4of10 {
|
3460 |
+
margin-right: 40%
|
3461 |
+
}
|
3462 |
+
.g-b--pull--d3of5, .g-b--pull--d6of10 {
|
3463 |
+
margin-right: 60%
|
3464 |
+
}
|
3465 |
+
.g-b--pull--d4of5, .g-b--pull--d8of10 {
|
3466 |
+
margin-right: 80%
|
3467 |
+
}
|
3468 |
+
.g-b--pull--d1of6, .g-b--pull--d2of12 {
|
3469 |
+
margin-right: 16.666%
|
3470 |
+
}
|
3471 |
+
.g-b--pull--d5of6, .g-b--pull--d10of12 {
|
3472 |
+
margin-right: 83.333%
|
3473 |
+
}
|
3474 |
+
.g-b--pull--d1of8 {
|
3475 |
+
margin-right: 12.5%
|
3476 |
+
}
|
3477 |
+
.g-b--pull--d3of8 {
|
3478 |
+
margin-right: 37.5%
|
3479 |
+
}
|
3480 |
+
.g-b--pull--d5of8 {
|
3481 |
+
margin-right: 62.5%
|
3482 |
+
}
|
3483 |
+
.g-b--pull--d7of8 {
|
3484 |
+
margin-right: 87.5%
|
3485 |
+
}
|
3486 |
+
.g-b--pull--d1of10 {
|
3487 |
+
margin-right: 10%
|
3488 |
+
}
|
3489 |
+
.g-b--pull--d3of10 {
|
3490 |
+
margin-right: 30%
|
3491 |
+
}
|
3492 |
+
.g-b--pull--d7of10 {
|
3493 |
+
margin-right: 70%
|
3494 |
+
}
|
3495 |
+
.g-b--pull--d9of10 {
|
3496 |
+
margin-right: 90%
|
3497 |
+
}
|
3498 |
+
.g-b--pull--d1of12 {
|
3499 |
+
margin-right: 8.333%
|
3500 |
+
}
|
3501 |
+
.g-b--pull--d5of12 {
|
3502 |
+
margin-right: 41.666%
|
3503 |
+
}
|
3504 |
+
.g-b--pull--d7of12 {
|
3505 |
+
margin-right: 58.333%
|
3506 |
+
}
|
3507 |
+
.g-b--pull--d11of12 {
|
3508 |
+
margin-right: 91.666%
|
3509 |
+
}
|
3510 |
+
.splashscreen-dillinger {
|
3511 |
+
width: 700px
|
3512 |
+
}
|
3513 |
+
.splashscreen p {
|
3514 |
+
font-size: 1.25rem;
|
3515 |
+
margin-bottom: 1.43749rem;
|
3516 |
+
padding-top: .56251rem
|
3517 |
+
}
|
3518 |
+
.title {
|
3519 |
+
font-size: .8rem;
|
3520 |
+
margin-bottom: .77999rem;
|
3521 |
+
padding-top: .22001rem
|
3522 |
+
}
|
3523 |
+
.title-document {
|
3524 |
+
font-size: 1.25rem;
|
3525 |
+
margin-bottom: .89999rem;
|
3526 |
+
padding-top: .10001rem
|
3527 |
+
}
|
3528 |
+
.menu .menu-item--export-as {
|
3529 |
+
display: block
|
3530 |
+
}
|
3531 |
+
.menu .menu-item--preview {
|
3532 |
+
display: none
|
3533 |
+
}
|
3534 |
+
.settings a {
|
3535 |
+
font-size: 1.25rem
|
3536 |
+
}
|
3537 |
+
.words, .characters {
|
3538 |
+
font-size: .8rem;
|
3539 |
+
margin-bottom: .77999rem;
|
3540 |
+
padding-top: .22001rem
|
3541 |
+
}
|
3542 |
+
.modal--dillinger.about .modal-dialog, #zen {
|
3543 |
+
font-size: 1.25rem
|
3544 |
+
}
|
3545 |
+
#zen {
|
3546 |
+
width: 700px
|
3547 |
+
}
|
3548 |
+
#editor {
|
3549 |
+
font-size: 1rem
|
3550 |
+
}
|
3551 |
+
}
|
3552 |
+
@media screen and (min-width: 87.5em) {
|
3553 |
+
html {
|
3554 |
+
font-size: .875em
|
3555 |
+
}
|
3556 |
+
body {
|
3557 |
+
font-size: 1rem
|
3558 |
+
}
|
3559 |
+
ul, ol {
|
3560 |
+
margin-bottom: .83999rem;
|
3561 |
+
padding-top: .16001rem
|
3562 |
+
}
|
3563 |
+
p {
|
3564 |
+
padding-top: .66001rem
|
3565 |
+
}
|
3566 |
+
p, pre {
|
3567 |
+
margin-bottom: 1.33999rem
|
3568 |
+
}
|
3569 |
+
pre, blockquote p {
|
3570 |
+
font-size: 1rem;
|
3571 |
+
padding-top: .66001rem
|
3572 |
+
}
|
3573 |
+
blockquote p {
|
3574 |
+
margin-bottom: .33999rem
|
3575 |
+
}
|
3576 |
+
h1 {
|
3577 |
+
font-size: 2.0571429rem;
|
3578 |
+
margin-bottom: .21999rem;
|
3579 |
+
padding-top: .78001rem
|
3580 |
+
}
|
3581 |
+
h2 {
|
3582 |
+
font-size: 1.953125rem;
|
3583 |
+
margin-bottom: .1835837rem;
|
3584 |
+
padding-top: .8164163rem
|
3585 |
+
}
|
3586 |
+
h3 {
|
3587 |
+
font-size: 1.6457143rem;
|
3588 |
+
margin-bottom: .07599rem;
|
3589 |
+
padding-top: .92401rem
|
3590 |
+
}
|
3591 |
+
h4 {
|
3592 |
+
font-size: 1.5625rem;
|
3593 |
+
margin-bottom: .546865rem;
|
3594 |
+
padding-top: .453135rem
|
3595 |
+
}
|
3596 |
+
h5 {
|
3597 |
+
font-size: 1.25rem;
|
3598 |
+
margin-bottom: -.56251rem;
|
3599 |
+
padding-top: .56251rem
|
3600 |
+
}
|
3601 |
+
h6 {
|
3602 |
+
font-size: 1rem;
|
3603 |
+
margin-bottom: -.65001rem;
|
3604 |
+
padding-top: .65001rem
|
3605 |
+
}
|
3606 |
+
.splashscreen-dillinger {
|
3607 |
+
width: 800px
|
3608 |
+
}
|
3609 |
+
.splashscreen p {
|
3610 |
+
font-size: 1.25rem;
|
3611 |
+
margin-bottom: 1.43749rem;
|
3612 |
+
padding-top: .56251rem
|
3613 |
+
}
|
3614 |
+
.title {
|
3615 |
+
font-size: .8rem;
|
3616 |
+
margin-bottom: .77999rem;
|
3617 |
+
padding-top: .22001rem
|
3618 |
+
}
|
3619 |
+
.title-document {
|
3620 |
+
margin-bottom: .89999rem;
|
3621 |
+
padding-top: .10001rem
|
3622 |
+
}
|
3623 |
+
.title-document, .settings a {
|
3624 |
+
font-size: 1.25rem
|
3625 |
+
}
|
3626 |
+
.words, .characters {
|
3627 |
+
font-size: .8rem;
|
3628 |
+
margin-bottom: .77999rem;
|
3629 |
+
padding-top: .22001rem
|
3630 |
+
}
|
3631 |
+
.modal--dillinger.about .modal-dialog, #zen {
|
3632 |
+
font-size: 1.25rem
|
3633 |
+
}
|
3634 |
+
#editor {
|
3635 |
+
font-size: 1rem
|
3636 |
+
}
|
3637 |
+
}
|
3638 |
+
@media (min-width: 768px) {
|
3639 |
+
.form-inline .form-group {
|
3640 |
+
display: inline-block;
|
3641 |
+
margin-bottom: 0;
|
3642 |
+
vertical-align: middle
|
3643 |
+
}
|
3644 |
+
.form-inline .form-control {
|
3645 |
+
display: inline-block;
|
3646 |
+
width: auto;
|
3647 |
+
vertical-align: middle
|
3648 |
+
}
|
3649 |
+
.form-inline .input-group {
|
3650 |
+
display: inline-table;
|
3651 |
+
vertical-align: middle
|
3652 |
+
}
|
3653 |
+
.form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control {
|
3654 |
+
width: auto
|
3655 |
+
}
|
3656 |
+
.form-inline .input-group > .form-control {
|
3657 |
+
width: 100%
|
3658 |
+
}
|
3659 |
+
.form-inline .control-label {
|
3660 |
+
margin-bottom: 0;
|
3661 |
+
vertical-align: middle
|
3662 |
+
}
|
3663 |
+
.form-inline .radio, .form-inline .checkbox {
|
3664 |
+
display: inline-block;
|
3665 |
+
margin-top: 0;
|
3666 |
+
margin-bottom: 0;
|
3667 |
+
vertical-align: middle
|
3668 |
+
}
|
3669 |
+
.form-inline .radio label, .form-inline .checkbox label {
|
3670 |
+
padding-left: 0
|
3671 |
+
}
|
3672 |
+
.form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] {
|
3673 |
+
position: relative;
|
3674 |
+
margin-left: 0
|
3675 |
+
}
|
3676 |
+
.form-inline .has-feedback .form-control-feedback {
|
3677 |
+
top: 0
|
3678 |
+
}
|
3679 |
+
.form-horizontal .control-label {
|
3680 |
+
text-align: right;
|
3681 |
+
margin-bottom: 0;
|
3682 |
+
padding-top: 7px
|
3683 |
+
}
|
3684 |
+
.form-horizontal .form-group-lg .control-label {
|
3685 |
+
padding-top: 14.3px
|
3686 |
+
}
|
3687 |
+
.form-horizontal .form-group-sm .control-label {
|
3688 |
+
padding-top: 6px
|
3689 |
+
}
|
3690 |
+
.modal-dialog {
|
3691 |
+
width: 600px;
|
3692 |
+
margin: 30px auto
|
3693 |
+
}
|
3694 |
+
.modal-content {
|
3695 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
|
3696 |
+
}
|
3697 |
+
.modal-sm {
|
3698 |
+
width: 300px
|
3699 |
+
}
|
3700 |
+
}
|
3701 |
+
@media (min-width: 992px) {
|
3702 |
+
.modal-lg {
|
3703 |
+
width: 900px
|
3704 |
+
}
|
3705 |
+
}
|
3706 |
+
@media screen and (max-width: 1200px) {
|
3707 |
+
#_default_ {
|
3708 |
+
max-width: 30%
|
3709 |
+
}
|
3710 |
+
#_default_ ._default_ {
|
3711 |
+
font-size: .825rem;
|
3712 |
+
line-height: .875rem;
|
3713 |
+
padding: 12px 12px 6px 24px;
|
3714 |
+
text-align: justify
|
3715 |
+
}
|
3716 |
+
}
|
3717 |
+
@media screen and (max-width: 1100px) {
|
3718 |
+
#_default_ {
|
3719 |
+
max-width: 27%
|
3720 |
+
}
|
3721 |
+
#_default_ ._default_ {
|
3722 |
+
font-size: .8rem;
|
3723 |
+
line-height: .85rem;
|
3724 |
+
padding: 12px 6px 6px 24px;
|
3725 |
+
text-align: justify
|
3726 |
+
}
|
3727 |
+
}
|
3728 |
+
@media screen and (max-width: 1000px) {
|
3729 |
+
#_default_ {
|
3730 |
+
max-width: 24%
|
3731 |
+
}
|
3732 |
+
#_default_ ._default_ {
|
3733 |
+
font-size: .775rem;
|
3734 |
+
line-height: .8rem;
|
3735 |
+
padding: 12px 6px 6px 24px;
|
3736 |
+
text-align: justify
|
3737 |
+
}
|
3738 |
+
}
|
3739 |
+
@media screen and (max-width: 900px) {
|
3740 |
+
#_default_ {
|
3741 |
+
max-width: 30%
|
3742 |
+
}
|
3743 |
+
}
|
3744 |
+
@media screen and (max-width: 767px) {
|
3745 |
+
.table-responsive {
|
3746 |
+
width: 100%;
|
3747 |
+
margin-bottom: 15px;
|
3748 |
+
overflow-y: hidden;
|
3749 |
+
overflow-x: auto;
|
3750 |
+
-ms-overflow-style: -ms-autohiding-scrollbar;
|
3751 |
+
border: 1px solid #dddddd;
|
3752 |
+
-webkit-overflow-scrolling: touch
|
3753 |
+
}
|
3754 |
+
.table-responsive > .table {
|
3755 |
+
margin-bottom: 0
|
3756 |
+
}
|
3757 |
+
.table-responsive > .table > thead > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > tfoot > tr > td {
|
3758 |
+
white-space: nowrap
|
3759 |
+
}
|
3760 |
+
.table-responsive > .table-bordered {
|
3761 |
+
border: 0
|
3762 |
+
}
|
3763 |
+
.table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child {
|
3764 |
+
border-left: 0
|
3765 |
+
}
|
3766 |
+
.table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child {
|
3767 |
+
border-right: 0
|
3768 |
+
}
|
3769 |
+
.table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > td {
|
3770 |
+
border-bottom: 0
|
3771 |
+
}
|
3772 |
+
}
|
3773 |
+
@media screen and (max-width: 720px) {
|
3774 |
+
#_default_ {
|
3775 |
+
max-width: 60%
|
3776 |
+
}
|
3777 |
+
#_default_ ._default_ {
|
3778 |
+
font-size: .75rem;
|
3779 |
+
line-height: 1rem;
|
3780 |
+
padding: 12px 24px
|
3781 |
+
}
|
3782 |
+
}
|
3783 |
+
@media screen and (max-width: 620px) {
|
3784 |
+
#_default_ {
|
3785 |
+
max-width: 50%
|
3786 |
+
}
|
3787 |
+
#_default_ ._default_ {
|
3788 |
+
font-size: .66rem;
|
3789 |
+
letter-spacing: 1px;
|
3790 |
+
line-height: 1rem;
|
3791 |
+
padding: 10px 24px
|
3792 |
+
}
|
3793 |
+
}
|
3794 |
+
@media screen and (max-width: 520px) {
|
3795 |
+
#_default_ ._default_ {
|
3796 |
+
font-size: .4rem;
|
3797 |
+
line-height: .875rem;
|
3798 |
+
padding: 6px 12px 6px 24px;
|
3799 |
+
text-align: justify
|
3800 |
+
}
|
3801 |
+
}
|
3802 |
+
@media screen and (max-width: 460px) {
|
3803 |
+
#_default_ {
|
3804 |
+
display: none
|
3805 |
+
}
|
3806 |
+
}
|
3807 |
+
@media screen and (max-width: 46.1875em) {
|
3808 |
+
.editor-header {
|
3809 |
+
display: none
|
3810 |
+
}
|
3811 |
+
.editor-header--first {
|
3812 |
+
display: block;
|
3813 |
+
width: 100%
|
3814 |
+
}
|
3815 |
+
}</style></head>
|
3816 |
+
<body id="preview">
|
3817 |
+
<style>
|
3818 |
+
#preview {
|
3819 |
+
padding-left: 20px;
|
3820 |
+
}
|
3821 |
+
</style>
|
3822 |
+
<h2>Changelog: Shield Security for WordPress</h2>
|
3823 |
+
<p>= 6.5 Series =<br>
|
3824 |
+
<em>Released: 5th March, 2018</em> - <a href="http://icwp.io/bu">Release Notes</a></p>
|
3825 |
+
<ul>
|
3826 |
+
<li><strong>(v.0)</strong> IMPROVED: <a href="http://icwp.io/bq">Plugin Guard</a> better handles the case where a plugin/theme has been entirely renamed/removed.</li>
|
3827 |
+
<li><strong>(v.0)</strong> IMPROVED: Attempts to access the XML-RPC system when it’s disabled will now result in a transgression increment in the IP Black List</li>
|
3828 |
+
<li><strong>(v.0)</strong> IMPROVED: Try to prevent black listing the server’s own public IP address where visitor IP address detection is not correctly configured.</li>
|
3829 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Provisional support for not processing 2FA logins for Woocommerce Social Login plugin.</li>
|
3830 |
+
<li><strong>(v.0)</strong> FIXED: Plugin Guard better handles ignoring <a href="http://non-WordPress.org">non-WordPress.org</a> Plugins/Themes</li>
|
3831 |
+
<li><strong>(v.0)</strong> FIXED: A few small bugs</li>
|
3832 |
+
</ul>
|
3833 |
+
<p>= 6.4 Series =<br>
|
3834 |
+
<em>Released: 26th February, 2018</em> - <a href="http://icwp.io/br">Release Notes</a></p>
|
3835 |
+
<ul>
|
3836 |
+
<li><strong>(v.1-4)</strong> FIXED: Various Fixes</li>
|
3837 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] New Scanner to <a href="http://icwp.io/bq">detect file changes for active plugins and themes</a></li>
|
3838 |
+
<li><strong>(v.0)</strong> IMPROVED: Automatic updates for vulnerable plugins ignores <a href="http://icwp.io/bc">automatic updates delay setting</a></li>
|
3839 |
+
<li><strong>(v.0)</strong> CHANGED: Email notifications for scanners will now link to the Wizard where possible, instead of listing files.</li>
|
3840 |
+
</ul>
|
3841 |
+
<p>= 6.3 Series =<br>
|
3842 |
+
<em>Released: 12th February, 2018</em> - <a href="http://icwp.io/bc">Release Notes</a></p>
|
3843 |
+
<ul>
|
3844 |
+
<li><strong>(v.3)</strong> FIXED: Bug with automatic updates delay setting</li>
|
3845 |
+
<li><strong>(v.2)</strong> CHANGED: Changed a text that seems to cause servers to swallow-up emails. <a
|
3846 |
+
href="http://icwp.io/bi">See here for more reliable email</a></li>
|
3847 |
+
<li><strong>(v.1)</strong> FIXED: Options page javascript to work around conflicts.</li>
|
3848 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] <a href="http://icwp.io/bc">Automatic updates stability delay</a></li>
|
3849 |
+
<li><strong>(v.0)</strong> IMPROVED: Complete <a href="http://icwp.io/bd">plugin UI rebuild</a>, using the new Bootstrap 4.</li>
|
3850 |
+
<li><strong>(v.0)</strong> FIXED: A few bugs with Google Authenticator.</li>
|
3851 |
+
</ul>
|
3852 |
+
<p>= 6.2 Series =<br>
|
3853 |
+
<em>Released: 31st January, 2018</em> - <a href="http://icwp.io/b6">Release Notes</a></p>
|
3854 |
+
<ul>
|
3855 |
+
<li><strong>(v.2)</strong> FIXED: Fix for IP Manager PHP error.</li>
|
3856 |
+
<li><strong>(v.2)</strong> IMPROVED: Two-factor verification email.</li>
|
3857 |
+
<li><strong>(v.1)</strong> FIXED: Bug where administrator login email notification setting is not being honoured.</li>
|
3858 |
+
<li><strong>(v.1)</strong> IMPROVED: If a site is having trouble with database creation, User Sessions wont lock you out.</li>
|
3859 |
+
<li><strong>(v.0)</strong> IMPROVED: Major overhaul of the Shield User Sessions system.</li>
|
3860 |
+
<li><strong>(v.0)</strong> IMPROVED: Link the Security Admin authentication with the new Sessions system.</li>
|
3861 |
+
<li><strong>(v.0)</strong> IMPROVED: Major overhaul to plugin’s user meta data storage, limiting to a single DB entry for all data.</li>
|
3862 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Ability to increase frequency of file system scans up to once every hour.</li>
|
3863 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Add a “remember me” option, to allow users to skip Multi-factor authentication for a set number of days.</li>
|
3864 |
+
</ul>
|
3865 |
+
<p>= 6.1 Series =<br>
|
3866 |
+
<em>Released: 15th January, 2018</em> - <a href="http://icwp.io/ay">Release Notes</a></p>
|
3867 |
+
<ul>
|
3868 |
+
<li><strong>(v.1)</strong> FIXED: Verify link missing from the two-factor authentication verification email.</li>
|
3869 |
+
<li><strong>(v.0)</strong> ADDED: 3x more Shield Wizards: Multi-factor Authentication, Core File Scanning, Unrecognised File Scanning.</li>
|
3870 |
+
<li><strong>(v.0)</strong> ADDED: You can now use regular expressions for file exclusions in the ‘Unrecognised File Scanner’.</li>
|
3871 |
+
<li><strong>(v.0)</strong> CHANGED: File Scanner email notifications now link to the appropriate scanner wizard directly.</li>
|
3872 |
+
<li><strong>(v.0)</strong> IMPROVED: Plugin options pages restyling.</li>
|
3873 |
+
<li><strong>(v.0)</strong> IMPROVED: Plugin refactoring and improvements.</li>
|
3874 |
+
</ul>
|
3875 |
+
<p>= 6.0 Series =<br>
|
3876 |
+
<em>Released: 18th December, 2017</em></p>
|
3877 |
+
<ul>
|
3878 |
+
<li><strong>(v.0)</strong> ADDED: All-new Shield Welcome and Setup Wizard - more helpful guided wizards to come.</li>
|
3879 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] <a href="http://icwp.io/at">Shield options import and export</a></li>
|
3880 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] In conjunction with import/export - Shield Security Network: automated options syncing.</li>
|
3881 |
+
<li><strong>(v.0)</strong> CHANGED: Going forward, new features and options will <a href="http://icwp.io/au">support only PHP 5.4+</a>. Existing features will remain unaffected.</li>
|
3882 |
+
</ul>
|
3883 |
+
<p>= 5.20 Series =<br>
|
3884 |
+
<em>Released: 11th December, 2017</em></p>
|
3885 |
+
<ul>
|
3886 |
+
<li><strong>(v.0)</strong> IMPROVED: [<strong>PRO</strong>] Audit Trail length are configurable. Length for free is 50 entries (the original unpaginated limit)</li>
|
3887 |
+
<li><strong>(v.0)</strong> IMPROVED: Large redesign of options sections to be more intuitive and cleaner</li>
|
3888 |
+
<li><strong>(v.0)</strong> IMPROVED: Added dedicated help section for each module.</li>
|
3889 |
+
<li><strong>(v.0)</strong> IMPROVED: Certain modules have an new <em>Actions</em> centre, such a Audit Trail viewer and User Sessions manager</li>
|
3890 |
+
<li><strong>(v.0)</strong> IMPROVED: Audit Trails are now ajax-paginated. You can browse through all your audit trail entries</li>
|
3891 |
+
<li><strong>(v.0)</strong> IMPROVED: User session tables are also ajax-paginated.</li>
|
3892 |
+
</ul>
|
3893 |
+
<p>= 5.19 Series =<br>
|
3894 |
+
<em>Released: 4th December, 2017</em></p>
|
3895 |
+
<ul>
|
3896 |
+
<li><strong>(v.1)</strong> FIXED: Plugin Vulnerabilities scan for premium plugins.</li>
|
3897 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Automated WordPress plugins vulnerability scanner with auto updates email notifications</li>
|
3898 |
+
<li><strong>(v.0)</strong> ADDED: Added Google reCAPTCHA support for register/forget password pages.</li>
|
3899 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Support for Multi-Factor Authentication for WooCommerce and other 3rd party plugins.</li>
|
3900 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Bot-protection/Google reCAPTCHA support for BuddyPress register pages.</li>
|
3901 |
+
</ul>
|
3902 |
+
<p>= 5.18 Series =<br>
|
3903 |
+
<em>Released: 27th November, 2017</em></p>
|
3904 |
+
<ul>
|
3905 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Invisible Google reCAPTCHA option.</li>
|
3906 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Support for Google reCAPTCHA themes - light and dark.</li>
|
3907 |
+
<li><strong>(v.0)</strong> IMPROVEMENT: Google reCAPTCHA is more reliable and configurable.</li>
|
3908 |
+
</ul>
|
3909 |
+
<p>= 5.17 Series =<br>
|
3910 |
+
<em>Released: 23rd November, 2017</em></p>
|
3911 |
+
<ul>
|
3912 |
+
<li><strong>(v.0)</strong> ADDED: Shield Security goes Pro! Added new options and extras to premium clients.</li>
|
3913 |
+
<li><strong>(v.0)</strong> IMPROVEMENT: Fix and improvement to Google reCAPTCHA.</li>
|
3914 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Support for Woocommerce and Easy Digital Downloads login/registration form protection.</li>
|
3915 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Ability to customise most user-facing texts.</li>
|
3916 |
+
<li><strong>(v.0)</strong> ADDED: [<strong>PRO</strong>] Extra IP Transgression signal.</li>
|
3917 |
+
</ul>
|
3918 |
+
<p>= 5.16 Series =<br>
|
3919 |
+
<em>Released: 16th October, 2017</em></p>
|
3920 |
+
<p>With this release, we fixed a clash of options for Google reCAPTCHA. Every attempt was made to ensure no interruption to your existing settings, but please check to ensure your reCAPTCHA settings are as you expect them to be.</p>
|
3921 |
+
<ul>
|
3922 |
+
<li><strong>(v.4)</strong> FIX: Error with incorrect/unprefixed database table name used in SQL query.</li>
|
3923 |
+
<li><strong>(v.3)</strong> IMPROVEMENT: Tweak to the Visitor IP Auto-detection to better ensure CloudFlare IP addresses are ignored.</li>
|
3924 |
+
<li><strong>(v.3)</strong> IMPROVEMENT: Plugin Badge will now stay closed when a visitor closes it.</li>
|
3925 |
+
<li><strong>(v.2)</strong> FIX: Removed some namespace parsing that broke on sites with PHP 5.2.</li>
|
3926 |
+
<li><strong>(v.1)</strong> FIX: 404 page displayed for password reset request when Login URL is renamed.</li>
|
3927 |
+
<li><strong>(v.0)</strong> IMPROVEMENT: Much better auto-detection of valid request/visitor IP addresses.</li>
|
3928 |
+
<li><strong>(v.0)</strong> FIX: Clashing of reCAPTCHA options for Comments and Login Protection.</li>
|
3929 |
+
<li><strong>(v.0)</strong> IMPROVEMENT: Statistic Reporting database management and pruning.</li>
|
3930 |
+
<li><strong>(v.0)</strong> FIX: Various system fixes and improvements.</li>
|
3931 |
+
</ul>
|
3932 |
+
<p>= 5.15 Series =<br>
|
3933 |
+
<em>Released: 21st September, 2017</em></p>
|
3934 |
+
<ul>
|
3935 |
+
<li><strong>(v.1)</strong> FIX: Processing AJAX requests from the Network Admin side of WordPress.</li>
|
3936 |
+
<li><strong>(v.1)</strong> IMPROVEMENTS: Better handling of file exclusions in the Hack Guard module.</li>
|
3937 |
+
<li><strong>(v.1)</strong> IMPROVEMENTS: Better handling of fatal errors in loading Shield where some core files are missing.</li>
|
3938 |
+
<li><strong>(v.0)</strong> ADDED: New HTTP Security Header: Referrer Policy.</li>
|
3939 |
+
<li><strong>(v.0)</strong> ADDED: Supports paths for file exclusions in the Unrecognised File Scanner.</li>
|
3940 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Better interception of unintentional redirects to the hidden Login URL (e.g. /wp-admin/customize.php).</li>
|
3941 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Better handling of email sending entries in the Audit Trail.</li>
|
3942 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Improved (tabbed) display of Audit Trail.</li>
|
3943 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Better generation & handling of the One Time Password for email-based two-factor authentication.</li>
|
3944 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Some code clean up and refactoring.</li>
|
3945 |
+
</ul>
|
3946 |
+
<p>= 5.14 Series =<br>
|
3947 |
+
<em>Released: 9th September, 2017</em></p>
|
3948 |
+
<ul>
|
3949 |
+
<li><strong>(v.0)</strong> ADDED: Option for administrators to manually override and set the source of the visitor IP address.</li>
|
3950 |
+
<li><strong>(v.0)</strong> UPDATED: In-plugin documentation links to updated and revised helpdesk articles/blogs.</li>
|
3951 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Strip out any non-alphanumeric characters uses in the generation of Google Authenticator URLs.</li>
|
3952 |
+
<li><strong>(v.0)</strong> FIX: Shield now ignores any requests sent to Rest API URIs with respect to Shield user sessions.</li>
|
3953 |
+
</ul>
|
3954 |
+
<p>= 5.13 Series =<br>
|
3955 |
+
<em>Released: 15th August, 2017</em></p>
|
3956 |
+
<ul>
|
3957 |
+
<li><strong>(v.2)</strong> IMPROVEMENTS: Small adjustment to handling of Shield User sessions in conjunction with WordPress sessions.</li>
|
3958 |
+
<li><strong>(v.2)</strong> FIX: Restore display of help links for options.</li>
|
3959 |
+
<li><strong>(v.1)</strong> FIX: PHP 5.2 incompatibility.</li>
|
3960 |
+
<li><strong>(v.0)</strong> ADDED: New option for <a href="http://icwp.io/94">Unrecognised File Scanner</a> to scan the Uploads folder for JS and PHP files.</li>
|
3961 |
+
<li><strong>(v.0)</strong> ADDED: Option to provide custom list of files to be excluded from the <a
|
3962 |
+
href="http://icwp.io/94">Unrecognised File Scanner</a>.</li>
|
3963 |
+
</ul>
|
3964 |
+
<p>= 5.12 Series =<br>
|
3965 |
+
<em>Released: 3rd August, 2017</em></p>
|
3966 |
+
<ul>
|
3967 |
+
<li><strong>(v.2)</strong> IMPROVEMENTS: Improved support for Windows IIS hosting for <a href="http://icwp.io/94">Unrecognised File Scanner</a></li>
|
3968 |
+
<li><strong>(v.2)</strong> CHANGED: Removed the email-based 2FA automatic login link.</li>
|
3969 |
+
<li><strong>(v.2)</strong> FIX: Potential bug with Shield not recognising plugin configuration updates and not rebuilding options accordingly.</li>
|
3970 |
+
<li><strong>(v.1)</strong> ADDED: A few more exclusions for the <a href="http://icwp.io/94">Unrecognised File Scanner</a></li>
|
3971 |
+
<li><strong>(v.1)</strong> FIX: Fix for Fatal error.</li>
|
3972 |
+
<li><strong>(v.0)</strong> ADDED: <a href="http://icwp.io/94">Unrecognised File Scanner</a> release. Automatically detect and delete<br>
|
3973 |
+
any files present in core WordPress directories that aren’t part of your core installation.</li>
|
3974 |
+
<li><strong>(v.0)</strong> ADDED: Updated Firewall rules for SQL under the ‘Aggressive’ rule set.</li>
|
3975 |
+
</ul>
|
3976 |
+
<p>= 5.11 Series =<br>
|
3977 |
+
<em>Released: 26th July, 2017</em></p>
|
3978 |
+
<ul>
|
3979 |
+
<li><strong>(v.1)</strong> FIX: JSON syntax</li>
|
3980 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Final preparation for <a href="http://icwp.io/83">Shield Central</a> release.</li>
|
3981 |
+
</ul>
|
3982 |
+
<p>= 5.10 Series =<br>
|
3983 |
+
<em>Released: 19th June, 2017</em></p>
|
3984 |
+
<ul>
|
3985 |
+
<li><strong>(v.2)</strong> FIXED: Fatal error with GASP + Password Reset.</li>
|
3986 |
+
<li><strong>(v.2)</strong> FIXED: Fatal error with failing reCAPTCHA HTTP requests.</li>
|
3987 |
+
<li><strong>(v.1)</strong> IMPROVEMENTS: Further preparation for <a href="http://icwp.io/83">Shield Central</a> release.</li>
|
3988 |
+
<li><strong>(v.0)</strong> ADDED: More in-depth reporting and statistics gathering - options for reports will be made available<br>
|
3989 |
+
in a later release.</li>
|
3990 |
+
</ul>
|
3991 |
+
<p>= 5.9 Series =<br>
|
3992 |
+
<em>Released: 31st May, 2017</em></p>
|
3993 |
+
<ul>
|
3994 |
+
<li><strong>(v.0)</strong> ADDED: Help Videos for 1 or 2 modules. More to come and just testing format and uptake.</li>
|
3995 |
+
<li><strong>(v.0)</strong> ADDED: Special handling for WP Fastest Cache.</li>
|
3996 |
+
<li><strong>(v.0)</strong> CHANGE: Configuration for automatic self-update for the Shield plugin has been removed.</li>
|
3997 |
+
<li><strong>(v.0)</strong> CHANGE: No longer remove an existing user session when accessed from another IP address. Just redirect.<br>
|
3998 |
+
Protects existing, legitimate sessions from being forcefully expired.</li>
|
3999 |
+
<li><strong>(v.0)</strong> FIXED: Danish string translation.</li>
|
4000 |
+
</ul>
|
4001 |
+
<p>= 5.8 Series =<br>
|
4002 |
+
<em>Released: 7th April, 2017</em></p>
|
4003 |
+
<ul>
|
4004 |
+
<li><strong>(v.2)</strong> IMPROVEMENTS: The core file scanner now works more reliably for international WordPress installations.</li>
|
4005 |
+
<li><strong>(v.2)</strong> CHANGE: Login Cooldown now uses only the flag file as an indicator of login times.</li>
|
4006 |
+
<li><strong>(v.2)</strong> CHANGE: Filter to allow for changing the two factor timeout period, from 5 (minutes). Filter: <code>icwp-wpsf-login_intent_timeout</code></li>
|
4007 |
+
<li><strong>(v.2)</strong> CHANGE: Changed timeout for two-factor authentication email to 5 minutes to account for slower email-sending providers.</li>
|
4008 |
+
<li><strong>(v.2)</strong> CHANGE: Added further clarification to the Login Notification email indicating that two-factor authentication was pending.</li>
|
4009 |
+
<li><strong>(v.1)</strong> FIXED: Fixed a couple of bugs with the Login Authentication Portal, for certain edge cases.</li>
|
4010 |
+
<li><strong>(v.0)</strong> CHANGE: Major overhaul of <a href="http://icwp.io/87">Two-Factor / Multi-Factor Login Authentication</a>.</li>
|
4011 |
+
<li><strong>(v.0)</strong> CHANGE: <a href="http://icwp.io/86">Introduction of Login Authentication Portal</a> for improved Multi-Factor Authentication.</li>
|
4012 |
+
<li><strong>(v.0)</strong> ADDED: Option to choose between two-factor or multi-factor login authentication.</li>
|
4013 |
+
<li><strong>(v.0)</strong> ADDED: Administrators can remove Google Authenticator from another user’s profile.</li>
|
4014 |
+
<li><strong>(v.0)</strong> ADDED: When Security Admin is active, only Security Admins may remove Google Authenticator from other admins.</li>
|
4015 |
+
<li><strong>(v.0)</strong> CHANGE: Yubikey login authentication is now managed directly from the User Profile screen, as with Google Authenticator.</li>
|
4016 |
+
<li><strong>(v.0)</strong> CHANGE: Email-based login authentication no longer uses a separate database table.</li>
|
4017 |
+
<li><strong>(v.0)</strong> FIXED: Core file scanning now adequately handles Windows/Unix new lines during scan.</li>
|
4018 |
+
<li><strong>(v.0)</strong> FIXED: Certain crons weren’t setup correctly.</li>
|
4019 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Further preparation for <a href="http://icwp.io/83">Shield Central</a> release.</li>
|
4020 |
+
</ul>
|
4021 |
+
<p>= 5.7 Series =</p>
|
4022 |
+
<ul>
|
4023 |
+
<li><strong>(v.3)</strong> FIXED: Attempt to improve the Google Authenticator flow for more reliable activation.</li>
|
4024 |
+
<li><strong>(v.2)</strong> IMPROVEMENTS: More admin notices when saving Google Authenticator settings.</li>
|
4025 |
+
<li><strong>(v.2)</strong> IMPROVEMENTS: Further preparation for <a href="http://icwp.io/83">Shield Central</a> release.</li>
|
4026 |
+
<li><strong>(v.1)</strong> Skipped</li>
|
4027 |
+
<li><strong>(v.0)</strong> ADDED: Shortcode for displaying plugin badge in pages/posts.</li>
|
4028 |
+
<li><strong>(v.0)</strong> CHANGE: Enabled JS eval() for the Content Security Policy by default.</li>
|
4029 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Replace YAML configuration files with JSON.</li>
|
4030 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Preparation for <a href="http://icwp.io/83">Shield Central</a> release.</li>
|
4031 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Security Admin notices are more refined and optimized.</li>
|
4032 |
+
<li><strong>(v.0)</strong> IMPROVEMENTS: Removed unnecessary files/code.</li>
|
4033 |
+
</ul>
|
4034 |
+
<p>= 5.6 Series =</p>
|
4035 |
+
<ul>
|
4036 |
+
<li>
|
4037 |
+
<p><strong>(v.2)</strong> CHANGE: Fix an instance where the hidden Login URL would be leaded.</p>
|
4038 |
+
</li>
|
4039 |
+
<li>
|
4040 |
+
<p><strong>(v.1)</strong> CHANGE: Replaying of Yubikey one-time-passwords is no longer permitted.</p>
|
4041 |
+
</li>
|
4042 |
+
<li>
|
4043 |
+
<p><strong>(v.1)</strong> ADDED: Filter for login form GASP fields.</p>
|
4044 |
+
</li>
|
4045 |
+
<li>
|
4046 |
+
<p><strong>(v.1)</strong> ADDED: Filter for comment form GASP fields.</p>
|
4047 |
+
</li>
|
4048 |
+
<li>
|
4049 |
+
<p><strong>(v.1)</strong> CHANGE: Improved compatibility of HTTP Headers with WP Super Cache.</p>
|
4050 |
+
</li>
|
4051 |
+
<li>
|
4052 |
+
<p><strong>(v.0)</strong> ADDED: Option to disable anonymous Rest API access. WordPress v4.7+ only. Note that if another plugin<br>
|
4053 |
+
or service authenticates the request it will be honoured, whether anonymous or not.<br>
|
4054 |
+
= 5.5 Series =</p>
|
4055 |
+
</li>
|
4056 |
+
<li>
|
4057 |
+
<p><strong>(v.6)</strong> IMPROVED: Fixed possible leak of the Login URL from the ‘Hide WP Login URL’ feature.</p>
|
4058 |
+
</li>
|
4059 |
+
<li>
|
4060 |
+
<p><strong>(v.5)</strong> ADDED: Ability to add custom protocols to the domains (apart from http/s) to the Content Security Policy</p>
|
4061 |
+
</li>
|
4062 |
+
<li>
|
4063 |
+
<p><strong>(v.5)</strong> FIXED: Bug where automatic update emails would contain empty plugins.</p>
|
4064 |
+
</li>
|
4065 |
+
<li>
|
4066 |
+
<p><strong>(v.5)</strong> FIXED: Javascript scope on GASP form elements.</p>
|
4067 |
+
</li>
|
4068 |
+
<li>
|
4069 |
+
<p><strong>(v.5)</strong> FIXED: Various fixes and code improvements.</p>
|
4070 |
+
</li>
|
4071 |
+
<li>
|
4072 |
+
<p><strong>(v.4)</strong> FIXED: Bug with data cleaning/storage that caused stored options to balloon resulting in database timeouts. (only certain options affected)</p>
|
4073 |
+
</li>
|
4074 |
+
<li>
|
4075 |
+
<p><strong>(v.4)</strong> IMPROVED: Sometimes “anti-virus” scanners scared normal, everyday hard-working folk by identifying a Shield file as being a virus, because they’re not very clever - reduced chances of this.</p>
|
4076 |
+
</li>
|
4077 |
+
<li>
|
4078 |
+
<p><strong>(v.3)</strong> ADDED: Fix for WordPress Multisite where the correct database prefix wasn’t being used.</p>
|
4079 |
+
</li>
|
4080 |
+
<li>
|
4081 |
+
<p><strong>(v.2)</strong> ADDED: Filter to allow modification of the email footer</p>
|
4082 |
+
</li>
|
4083 |
+
<li>
|
4084 |
+
<p><strong>(v.2)</strong> ADDED: Block auto-updates on Shield itself if PHP < 5.3 and new version is v6.0+</p>
|
4085 |
+
</li>
|
4086 |
+
<li>
|
4087 |
+
<p><strong>(v.2)</strong> FIXED: Missing Link</p>
|
4088 |
+
</li>
|
4089 |
+
<li>
|
4090 |
+
<p><strong>(v.2)</strong> FIXED: Plugin Installation ID wasn’t always being set</p>
|
4091 |
+
</li>
|
4092 |
+
<li>
|
4093 |
+
<p><strong>(v.2)</strong> TRANSLATIONS: Dutch (56%)</p>
|
4094 |
+
</li>
|
4095 |
+
<li>
|
4096 |
+
<p><strong>(v.1)</strong> ADDED: Built-in forceful protection in the form of a wp_die() against the (currently) un-patched W3 Total Cache XSS vulnerability <a
|
4097 |
+
href="http://icwp.io/7j">more info</a></p>
|
4098 |
+
</li>
|
4099 |
+
<li>
|
4100 |
+
<p><strong>(v.1)</strong> IMPROVED: Better XMLRPC Lockdown - prevents ANY XMLRPC command processing.</p>
|
4101 |
+
</li>
|
4102 |
+
<li>
|
4103 |
+
<p><strong>(v.1)</strong> IMPROVED: Make certain strings translatable</p>
|
4104 |
+
</li>
|
4105 |
+
<li>
|
4106 |
+
<p><strong>(v.1)</strong> IMPROVED: Wrap-up certain login form elements into spans/divs to allow styling etc.</p>
|
4107 |
+
</li>
|
4108 |
+
<li>
|
4109 |
+
<p><strong>(v.1)</strong> IMPROVED: PHP Version number cleaning during stats tracking.</p>
|
4110 |
+
</li>
|
4111 |
+
<li>
|
4112 |
+
<p><strong>(v.0)</strong> ADDED: Options and statistics tracking ability. Over time we are looking to share statistics and performance metrics of Shield.</p>
|
4113 |
+
</li>
|
4114 |
+
<li>
|
4115 |
+
<p><strong>(v.0)</strong> IMPROVED: Performance for options loading, especially for web hosts that don’t permit file writing</p>
|
4116 |
+
</li>
|
4117 |
+
<li>
|
4118 |
+
<p><strong>(v.0)</strong> CHANGED: Numerous fixes and code improvements.</p>
|
4119 |
+
</li>
|
4120 |
+
<li>
|
4121 |
+
<p><strong>(v.0)</strong> CHANGED: Removed query that deletes old GASP comment tokens on normal page loads.</p>
|
4122 |
+
</li>
|
4123 |
+
<li>
|
4124 |
+
<p><strong>(v.0)</strong> CHANGED: Google reCAPTCHA is now based on the locale of the website, not auto-detected.</p>
|
4125 |
+
</li>
|
4126 |
+
<li>
|
4127 |
+
<p><strong>(v.0)</strong> FIXED: Now URL encodes the username in the link for two-factor authentication by email.</p>
|
4128 |
+
</li>
|
4129 |
+
<li>
|
4130 |
+
<p><strong>(v.0)</strong> FIXED: If the xmlrpc.php has been deleted, this is now ignore by the file scanner</p>
|
4131 |
+
</li>
|
4132 |
+
<li>
|
4133 |
+
<p><strong>(v.0)</strong> TRANSLATIONS: Dutch (38%), Portuguese (32%)</p>
|
4134 |
+
</li>
|
4135 |
+
</ul>
|
4136 |
+
<p>= 5.4 Series =</p>
|
4137 |
+
<ul>
|
4138 |
+
<li><strong>(v.5)</strong> CHANGED: User Management module is no-longer enabled by default on clean installations</li>
|
4139 |
+
<li><strong>(v.5)</strong> CHANGED: Made the GASP checkbox for Login protection clickable by label. <a
|
4140 |
+
href="https://github.com/FernleafSystems/Shield/pull/22">Thanks Aubrey!</a></li>
|
4141 |
+
<li><strong>(v.5)</strong> CHANGED: Shield Statistics only shows for WordPress admins (instead of all users)</li>
|
4142 |
+
<li><strong>(v.5)</strong> FIXED: Added a couple of guards to ensure data is of the correct format to prevent spurious errors</li>
|
4143 |
+
<li><strong>(v.5)</strong> FIXED: Bug where automatic file repair links from emails we’re not working.</li>
|
4144 |
+
<li><strong>(v.4)</strong> SKIPPED.</li>
|
4145 |
+
<li><strong>(v.3)</strong> FIXED: Various fixes and improvements</li>
|
4146 |
+
<li><strong>(v.3)</strong> CHANGED: Lots of cleaning of old code.</li>
|
4147 |
+
<li><strong>(v.3)</strong> REMOVED: Various old, unused options, and the force_ssl_login option as it’s deprecated by WordPress Core</li>
|
4148 |
+
<li><strong>(v.3)</strong> TRANSLATIONS: Dutch (36%), Swedish (35%)</li>
|
4149 |
+
<li><strong>(v.3)</strong> FIXED: Various fixes and improvements</li>
|
4150 |
+
<li><strong>(v.3)</strong> CHANGED: Lots of cleaning of old code.</li>
|
4151 |
+
<li><strong>(v.3)</strong> REMOVED: Various old, unused options, and the force_ssl_login option as it’s deprecated by WordPress Core</li>
|
4152 |
+
<li><strong>(v.3)</strong> TRANSLATIONS: Dutch (36%), Swedish (35%)</li>
|
4153 |
+
<li><strong>(v.2)</strong> ADDED: A guard around certain modules like, User Sessions, to ensure the DB has been initiated properly before use.</li>
|
4154 |
+
<li><strong>(v.2)</strong> ADDED: Exclusion for Swedish license files that don’t exist in the SVN repo.</li>
|
4155 |
+
<li><strong>(v.2)</strong> ADDED: Parameter exclusion for reCAPTCHA.</li>
|
4156 |
+
<li><strong>(v.2)</strong> CHANGED: <a href="http://icwp.io/7b">HTTP Security Headers</a> module is enabled by default on new installs.</li>
|
4157 |
+
<li><strong>(v.1)</strong> FIXED: Nasty bug that caused an infinite loop bug in some configurations.</li>
|
4158 |
+
<li><strong>(v.0)</strong> ADDED: Per-site plugin statistics gathering - summary display on admin dashboard.</li>
|
4159 |
+
<li><strong>(v.0)</strong> ADDED: HTML class to the “I’m a human” checkbox field.</li>
|
4160 |
+
<li><strong>(v.0)</strong> ADDED: Ability to change minimum user role for login notification emails with use of <code>add_filter()</code>. See FAQs.</li>
|
4161 |
+
<li><strong>(v.0)</strong> REMOVED: Option ‘Prevent Remote Login’ causes more trouble with than it’s worth with too many hosting configurations.</li>
|
4162 |
+
<li><strong>(v.0)</strong> CHANGED: For websites that don’t run WP Crons correctly, added code for automatic database cleaning.</li>
|
4163 |
+
<li><strong>(v.0)</strong> CLEANED: Removed Twig render code as it was never being used.</li>
|
4164 |
+
</ul>
|
4165 |
+
<p>= 5.3 Series =</p>
|
4166 |
+
<ul>
|
4167 |
+
<li><strong>(v.2)</strong> IMPROVED: <a href="http://icwp.io/7b">HTTP Security Headers</a> Content Security Policy now supports specifying HTTPS for domains/hosts.</li>
|
4168 |
+
<li><strong>(v.2)</strong> FIXED: Human Comment SPAM Feature didn’t fire under certain circumstances.</li>
|
4169 |
+
<li><strong>(v.2)</strong> FIXED: Fixed parsing of Human Comment SPAM dictionary words.</li>
|
4170 |
+
<li><strong>(v.1)</strong> TRANSLATIONS: Dutch (32%)</li>
|
4171 |
+
<li><strong>(v.0)</strong> ADDED: New Feature - <a href="http://icwp.io/7b">HTTP Security Headers</a>.</li>
|
4172 |
+
<li><strong>(v.0)</strong> FIXED: Prevent renaming WP Login to “/login”</li>
|
4173 |
+
</ul>
|
4174 |
+
<p>= 5.2 Series =</p>
|
4175 |
+
<ul>
|
4176 |
+
<li><strong>(v.0)</strong> ADDED: Guard against core file scanner and automatic WordPress updates clashing.</li>
|
4177 |
+
<li><strong>(v.0)</strong> CHANGED: Logic for brute force login checking is improved - they all run before username/password checking</li>
|
4178 |
+
<li><strong>(v.0)</strong> FIXED: Certain older versions of PHP don’t like combined IPv4 and IPv6 filter flags</li>
|
4179 |
+
<li><strong>(v.0)</strong> FIXED: Google reCAPTCHA for WordPress sites that have restrictive settings for sockets etc.</li>
|
4180 |
+
<li><strong>(v.0)</strong> REMOVED: <a href="http://icwp.io/75">Plugin vulnerabilities scanner</a>. It’s out-of-date and unsuitable.</li>
|
4181 |
+
</ul>
|
4182 |
+
<p>= 5.1 Series =</p>
|
4183 |
+
<ul>
|
4184 |
+
<li><strong>(v.0)</strong> FIXED: Improved compatibility with bbPress.</li>
|
4185 |
+
<li><strong>(v.0)</strong> CHANGED: Optimizations around options and definitions (storing fewer options data)</li>
|
4186 |
+
<li><strong>(v.0)</strong> CHANGED: Improved styling and responsiveness of plugin badge.</li>
|
4187 |
+
<li><strong>(v.0)</strong> ADDED: Ability to programmatically export/import options - further preparation for iControlWP+Shield integration.</li>
|
4188 |
+
<li><strong>(v.0)</strong> FIXED: Issue where Core automatic updates would fail, but notification email was sent anyway</li>
|
4189 |
+
</ul>
|
4190 |
+
<p>= 5.0 Series =</p>
|
4191 |
+
<ul>
|
4192 |
+
<li><strong>(v.3)</strong> FIXED: Issue with setting session cookies with PHP 7</li>
|
4193 |
+
<li><strong>(v.2)</strong> FIXED: <a href="http://icwp.io/5s">Rename WordPress Login URL</a> bug</li>
|
4194 |
+
<li><strong>(v.2)</strong> CHANGED: reCAPTCHA text usage corrected throughout plugin.</li>
|
4195 |
+
<li><strong>(v.1)</strong> CHANGED: Removed the whole ‘wp-content’ directory from the <a
|
4196 |
+
href="http://icwp.io/wpsf40">Core File Scanner</a> feature.</li>
|
4197 |
+
<li><strong>(v.1)</strong> CHANGED: A WordPress filter to change the plugin badge text content (see FAQ)</li>
|
4198 |
+
<li><strong>(v.1)</strong> CHANGED: Tweaked the plugin badge styling.</li>
|
4199 |
+
<li><strong>(v.1)</strong> CHANGED: All emails sent by the plugin contain the name of the site and the current plugin version in the email footer.</li>
|
4200 |
+
<li><strong>(v.1)</strong> ADDED: In-plugin links to blogs and info articles for Google ReCaptcha and <a
|
4201 |
+
href="http://icwp.io/wpsf43">Google Authenticator</a></li>
|
4202 |
+
<li><strong>(v.0)</strong> NEW: WordPress Simple Firewall plugin has been re-branded and is called <strong>Shield</strong></li>
|
4203 |
+
<li><strong>(v.0)</strong> ADDED: NEW feature - <a href="http://icwp.io/shld2">Google ReCaptcha</a> for Comment SPAM and Login protection.</li>
|
4204 |
+
<li><strong>(v.0)</strong> ADDED: Support for this plugin is now Premium. Added Premium Support page that links to Helpdesk.</li>
|
4205 |
+
<li><strong>(v.0)</strong> CHANGED: Refactor of comment spam code.</li>
|
4206 |
+
<li><strong>(v.0)</strong> CHANGED: Core File Scanner now handles the odd Hungarian distribution.</li>
|
4207 |
+
</ul>
|
4208 |
+
<p>= 4.17 Series =<br>
|
4209 |
+
<em>Released: 17th February, 2016</em></p>
|
4210 |
+
<ul>
|
4211 |
+
<li><strong>(v.0)</strong> ADDED: NEW feature - <a href="http://icwp.io/wpsf43">Google Authenticator Login option</a>.</li>
|
4212 |
+
<li><strong>(v.0)</strong> ADDED: <a href="http://icwp.io/wpsf40">Core File Scanner</a> now includes an automatic link to repair files (you must be logged in as admin for this link to work!).</li>
|
4213 |
+
<li><strong>(v.0)</strong> ADDED: NEW - if you already have a logged-in session and you open the login screen, you’ll be provided with a link to go straight to the admin area.</li>
|
4214 |
+
<li><strong>(v.0)</strong> CHANGED: Email-based Two-Factor Authentication is now stateless/session-less - it will not check validity per-page load.</li>
|
4215 |
+
<li><strong>(v.0)</strong> CHANGED: Changes to the email-based authentication system - now only 1 option and it no longer locks to IP or browser.</li>
|
4216 |
+
<li><strong>(v.0)</strong> CHANGED: Various efficiency improvements including reduced SQL updates.</li>
|
4217 |
+
<li><strong>(v.0)</strong> CHANGED: Email system is improved and now send emails from the default WordPress sender. This may be <a
|
4218 |
+
href="https://icontrolwp.freshdesk.com/support/solutions/articles/3000048723">changed with filter</a>.</li>
|
4219 |
+
</ul>
|
4220 |
+
<p>= 4.16 Series =<br>
|
4221 |
+
<em>Released: 20th January, 2016</em></p>
|
4222 |
+
<ul>
|
4223 |
+
<li><strong>(v.2)</strong> CHANGED: Further changes and improvements to the <a href="http://icwp.io/wpsf40">Core File Scanner</a>.</li>
|
4224 |
+
<li><strong>(v.2)</strong> CHANGED: Improvements to the <a href="http://icwp.io/wpsf27">automatic black list system</a> for failed login attempts.</li>
|
4225 |
+
<li><strong>(v.2)</strong> TRANSLATIONS: Turkish (100%)</li>
|
4226 |
+
<li><strong>(v.1)</strong> CHANGED: Improved the contents of the <a href="http://icwp.io/wpsf40">Core File Scanner</a> notification email with links to original source files.</li>
|
4227 |
+
<li><strong>(v.1)</strong> CHANGED: Now also excluding the /wp-content/languages/ directory since translations may update independently.</li>
|
4228 |
+
<li><strong>(v.1)</strong> CHANGED: Handles the special case of <a
|
4229 |
+
href="https://wordpress.org/support/topic/problem-with-checksum-hashes">old index.php files</a></li>
|
4230 |
+
<li><strong>(v.0)</strong> ADDED: Feature: <a href="http://icwp.io/wpsf40">Automatically scans WordPress Core files</a> and detects alterations from the default WordPress Core File data</li>
|
4231 |
+
<li><strong>(v.0)</strong> ADDED: Feature: to automatically attempt to repair/replace WordPress Core files that are discovered which have been altered.</li>
|
4232 |
+
<li><strong>(v.0)</strong> ADDED: Option to toggle the <a href="http://icwp.io/wpsf41">Plugin Vulnerabilities cron</a>.</li>
|
4233 |
+
<li><strong>(v.0)</strong> ADDED: Two-Factor Authentication links now honour the WordPress ‘redirect_to’ parameter.</li>
|
4234 |
+
</ul>
|
4235 |
+
<p>= 4.15 Series =<br>
|
4236 |
+
<em>Released: 6th January, 2016</em></p>
|
4237 |
+
<ul>
|
4238 |
+
<li><strong>(v.0)</strong> ADDED: New and updated Firewall rules as well as a new ‘Aggressive’ option that looks for additional request data. Disabled by default, but may cause an increase in false positives.</li>
|
4239 |
+
<li><strong>(v.0)</strong> CHANGED: Improved and optimized Firewall processing.</li>
|
4240 |
+
<li><strong>(v.0)</strong> FIXED: <a href="https://github.com/FernleafSystems/wp-simple-firewall/issues/3">Issue</a> where automatic update notification emails are sent out without any update notices (probably due to failed updates).</li>
|
4241 |
+
<li><strong>(v.0)</strong> FIXED: Small conflict with WP Login Rename and other security plugins.</li>
|
4242 |
+
<li><strong>(v.0)</strong> TRANSLATIONS: Czech (91%), Finnish (98%), Turkish (98%).</li>
|
4243 |
+
</ul>
|
4244 |
+
<p>= 4.14 Series =<br>
|
4245 |
+
<em>Released: 20th November, 2015</em></p>
|
4246 |
+
<ul>
|
4247 |
+
<li><strong>(v.2)</strong> ADDED: User notice message displayed when the ‘Theme My Login’ plugin is active and you try to rename your login URL - It is not compatible.</li>
|
4248 |
+
<li><strong>(v.1)</strong> ADDED: Added WordPress filter option to specify URL instead of present a 404 when Rename WP Login is active. <a
|
4249 |
+
href="https://icontrolwp.freshdesk.com/solution/articles/3000044812">more info</a></li>
|
4250 |
+
<li><strong>(v.1)</strong> ADDED: Added ‘Unique Plugin Installation ID’ to be utilized in the future.</li>
|
4251 |
+
<li><strong>(v.1)</strong> FIXED: WordPress Comments bug where some comments didn’t pass through the SPAM filters in a certain scenario.</li>
|
4252 |
+
<li><strong>(v.0)</strong> ADDED: <a
|
4253 |
+
href="http://icwp.io/wpsf33">Custom Automatic Update Notifications Email</a> that runs separately to the in-built WordPress core notification email.</li>
|
4254 |
+
<li><strong>(v.0)</strong> ADDED: Filter to remove the admin area IP address footer text</li>
|
4255 |
+
<li><strong>(v.0)</strong> CHANGED: Added native support for PayPal return links - whitelisting “verify_sign” parameter.</li>
|
4256 |
+
<li><strong>(v.0)</strong> CHANGED: Tweak patterns for matching on ‘WordPress terms’.</li>
|
4257 |
+
<li><strong>(v.0)</strong> TRANSLATIONS: Danish (100%), Czech (92%), Turkish (92%), Finnish (88%),</li>
|
4258 |
+
<li><strong>(v.0)</strong> FIXED: Small bugs and readying for WordPress 4.4</li>
|
4259 |
+
</ul>
|
4260 |
+
<p>= 4.13 Series =<br>
|
4261 |
+
<em>Released: 22nd October, 2015</em></p>
|
4262 |
+
<ul>
|
4263 |
+
<li><strong>(v.0)</strong> NEW: Added option to block the modification, addition/promotion and deletion of WordPress administrators users within the ‘Security Admin’ module.</li>
|
4264 |
+
<li><strong>(v.0)</strong> NEW: Renamed ‘Admin Access’ module to ‘Security Admin’.</li>
|
4265 |
+
<li><strong>(v.0)</strong> CHANGED: Simplified and consolidated the use of cookies for User Session - sets and removes cookies better to reduce their usage.</li>
|
4266 |
+
<li><strong>(v.0)</strong> CHANGED: Simplified and consolidated the use of cookies for Two Factor Login Authentication.</li>
|
4267 |
+
<li><strong>(v.0)</strong> CHANGED: Cleaned up some Comment SPAM filtering code.</li>
|
4268 |
+
<li><strong>(v.0)</strong> CHANGED: Comments Filter doesn’t use cookies unless a session cookie for the visitor already exists.</li>
|
4269 |
+
<li><strong>(v.0)</strong> CHANGED: IP Manager Automatic Black List - default black list duration is now 1 minute & default transgressions limit is 10</li>
|
4270 |
+
<li><strong>(v.0)</strong> CHANGED: Improvements to the database create queries: use MySQL Engine defaults (instead of MyISAM); use WordPress dbDelta() for updates.</li>
|
4271 |
+
<li><strong>(v.0)</strong> CHANGED: Various code optimizations and cleaning.</li>
|
4272 |
+
</ul>
|
4273 |
+
<p>= 4.12 Series =<br>
|
4274 |
+
<em>Released: 10th October, 2015</em></p>
|
4275 |
+
<ul>
|
4276 |
+
<li><strong>(v.0)</strong> NEW: Option to completely disable the XML-RPC system. <a
|
4277 |
+
href="http://icwp.io/wpsf31">more info</a></li>
|
4278 |
+
<li><strong>(v.0)</strong> CHANGED: Logged-in users are automatically forwarded to the WordPress admin only if they are Administrators.</li>
|
4279 |
+
</ul>
|
4280 |
+
<p>= 4.11 Series =<br>
|
4281 |
+
<em>Released: 5th October, 2015</em></p>
|
4282 |
+
<ul>
|
4283 |
+
<li><strong>(v.0)</strong> NEW: Ability to now completely block the update/changing of certain WordPress site options. <a
|
4284 |
+
href="http://icwp.io/wpsf30">more info</a></li>
|
4285 |
+
<li><strong>(v.0)</strong> FIXED: Various small bugs with the IP Manager UI ajax.</li>
|
4286 |
+
<li><strong>(v.0)</strong> FIXED: Uncaught PHP Exception when a site’s hosting isn’t properly configured to handle IPv6 addresses.</li>
|
4287 |
+
<li><strong>(v.0)</strong> TRANSLATIONS: Danish - 57%, Czech - 100%, Finnish - 94%</li>
|
4288 |
+
</ul>
|
4289 |
+
<p>= 4.10 Series =<br>
|
4290 |
+
<em>Released: 23rd August, 2015</em></p>
|
4291 |
+
<ul>
|
4292 |
+
<li>
|
4293 |
+
<p><strong>(v.4)</strong> REFACTOR: Notifications system is more reliable and most notices can be hidden/closed (at least for the current page load as some notices are persistent).</p>
|
4294 |
+
</li>
|
4295 |
+
<li>
|
4296 |
+
<p><strong>(v.4)</strong> REMOVED: The old manual black list option has been completely removed - in favour of the automatic black list system.</p>
|
4297 |
+
</li>
|
4298 |
+
<li>
|
4299 |
+
<p><strong>(v.4)</strong> CHANGED: Revised the order of certain hooks being created to avoid the possibility of pluggable.php not being loaded for PHP Shutdown.</p>
|
4300 |
+
</li>
|
4301 |
+
<li>
|
4302 |
+
<p><strong>(v.4)</strong> CHANGED: The presence of IP addresses in the IP Whitelist will force the IP Manager feature to be enabled.</p>
|
4303 |
+
</li>
|
4304 |
+
<li>
|
4305 |
+
<p><strong>(v.4)</strong> CHANGED: We now make an attempt to prevent the caching of WordPress wp_die() pages that we generate. (compatible with at least W3TC, Super Cache)</p>
|
4306 |
+
</li>
|
4307 |
+
<li>
|
4308 |
+
<p><strong>(v.4)</strong> TRANSLATIONS: Turkish - 100%, Danish - 3%</p>
|
4309 |
+
</li>
|
4310 |
+
<li>
|
4311 |
+
<p><strong>(v.3)</strong> FIXED: Another PHP 5.2 incompatibility.</p>
|
4312 |
+
</li>
|
4313 |
+
<li>
|
4314 |
+
<p><strong>(v.2)</strong> ADDED: White Listing UI to the IP Manager - CIDR ranges are supported (also automatically migrates IPs, except ranges, from legacy to new)</p>
|
4315 |
+
</li>
|
4316 |
+
<li>
|
4317 |
+
<p><strong>(v.2)</strong> ADDED: Returned the black marking of failed WP login attempts to the automatic black list system</p>
|
4318 |
+
</li>
|
4319 |
+
<li>
|
4320 |
+
<p><strong>(v.2)</strong> ADDED: Using a 3rd party API service: <a href="https://www.ipify.org/">ipify.org</a> - to find the server’s own IP address so we can ensure it’s not used in the black lists</p>
|
4321 |
+
</li>
|
4322 |
+
<li>
|
4323 |
+
<p><strong>(v.2)</strong> CHANGED: AJAX calls are handled more robustly with actual error messages where possible.</p>
|
4324 |
+
</li>
|
4325 |
+
<li>
|
4326 |
+
<p><strong>(v.2)</strong> FIXED: A few black list processing bugs.</p>
|
4327 |
+
</li>
|
4328 |
+
<li>
|
4329 |
+
<p><strong>(v.1)</strong> ADDED: UI to view and remove IP address from Automatic Black List Engine.</p>
|
4330 |
+
</li>
|
4331 |
+
<li>
|
4332 |
+
<p><strong>(v.1)</strong> FIX: Removed transgression counting on failed logins - WP data is inconsistent.</p>
|
4333 |
+
</li>
|
4334 |
+
<li>
|
4335 |
+
<p><strong>(v.1)</strong> CHANGED: Original legacy white list now takes priority over new auto black list</p>
|
4336 |
+
</li>
|
4337 |
+
<li>
|
4338 |
+
<p><strong>(v.1)</strong> CHANGED: Default transgressions limit is now 7</p>
|
4339 |
+
</li>
|
4340 |
+
<li>
|
4341 |
+
<p><strong>(v.1)</strong> ADDED: Ability to reset plugin options to default using ‘reset’ flag file. <a
|
4342 |
+
href="http://icwp.io/wpsf28">more info</a></p>
|
4343 |
+
</li>
|
4344 |
+
<li>
|
4345 |
+
<p><strong>(v.0)</strong> NEW FEATURE: ‘FABLE’ - <a
|
4346 |
+
href="http://icwp.io/wpsf27">Fully Automatic Black Listing Engine</a>.</p>
|
4347 |
+
</li>
|
4348 |
+
</ul>
|
4349 |
+
<p>Simply put, FABLE will automatically block all malicious traffic by IP, based on their activity. This Security Plugin will track malicious behaviour<br>
|
4350 |
+
and count all transgressions that visitors make against the site. Once a particular visitor exceeds the specified number transgressions, FABLE<br>
|
4351 |
+
will outright block any access they have to your WordPress site.</p>
|
4352 |
+
<p>What makes the FABLE system better?</p>
|
4353 |
+
<ul>
|
4354 |
+
<li>Hands Free - Automatic. No more need for maintaining manual black lists.</li>
|
4355 |
+
<li>Loads first before other plugins.</li>
|
4356 |
+
<li>Automatic pruning. Based on expiration time you specify, older IP address will be removed.</li>
|
4357 |
+
<li>Increased Performance. With automatic pruning, IP look-up tables remain small and concise so page load times for legitimate visitors is minimally affected.</li>
|
4358 |
+
<li>Adaptive. It wont just block based on 1 misdemeanour - instead you may allow any given visitor grace to legitimately get things wrong (like login passwords).</li>
|
4359 |
+
<li>Intelligent. With an fully integrated plugin such as this, it uses login failure attempts, spam comment attempts, login brute force attempts to capture malicious visitors.</li>
|
4360 |
+
</ul>
|
4361 |
+
<p>Which actions will trigger an ABLE transgression?</p>
|
4362 |
+
<ul>
|
4363 |
+
<li>Attempt to login with an invalid username/password combination</li>
|
4364 |
+
<li>Any attempt to login while the login cooldown system is in-effect</li>
|
4365 |
+
<li>Any login attempt that trips the GASP Login protection system</li>
|
4366 |
+
<li>Any login attempt with a username that doesn’t exist</li>
|
4367 |
+
<li>Any attempt to access /wp-admin/, /login/, or wp-login.php while the Rename WP Login setting is active</li>
|
4368 |
+
<li>Any comment that gets labelled as SPAM by the plugin</li>
|
4369 |
+
<li>Failed attempt to authenticate with the plugin’s Admin Access Protection module</li>
|
4370 |
+
<li>Any trigger of a Firewall block rule</li>
|
4371 |
+
</ul>
|
4372 |
+
<p>= 4.9 Series =<br>
|
4373 |
+
<em>Released: 7th July, 2015</em></p>
|
4374 |
+
<ul>
|
4375 |
+
<li><strong>(v.8)</strong> CHANGED: Firewall, User Sessions and Lockdown Feature Modules are now enabled by default for new installations.</li>
|
4376 |
+
<li><strong>(v.8)</strong> FIX: Some server email programs can’t handle colons (:) in the email subject (because supporting all characters would be waaay too radical man).</li>
|
4377 |
+
<li><strong>(v.8)</strong> ADDED: Function to better get the WordPress home URL to prevent interference from other plugins.</li>
|
4378 |
+
<li><strong>(v.8)</strong> CHANGED: Updated Text For <a
|
4379 |
+
href="http://icwp.io/6e">Author Scan Block</a> feature.</li>
|
4380 |
+
<li><strong>(v.7)</strong> CHANGED: How author query blocking works to be more reliable and stricter - only runs when users are not logged in, and it will DIE instead of redirect.</li>
|
4381 |
+
<li><strong>(v.6)</strong> ADDED: New Option: prevent detection of usernames using the ?author=N query. (location under section: Lockdown -> Obscurity)</li>
|
4382 |
+
<li><strong>(v.6)</strong> FIXED: Infinite redirect loop logic prevents redirect for rejected comment SPAM that’s posted in bulk. This results in email notifications for spam comments.</li>
|
4383 |
+
<li><strong>(v.5)</strong> ADDED: The plugin will load itself first before all other plugins</li>
|
4384 |
+
<li><strong>(v.5)</strong> FIXED: No longer using parse_url() to determine the request URL as it’s too inconsistent and unreliable.</li>
|
4385 |
+
<li><strong>(v.4)</strong> FIX: Audit Trail Viewer display issue with non-escaped HTML (Thanks Chris!)</li>
|
4386 |
+
<li><strong>(v.4)</strong> ADDED: An admin warning for sites with PHP version less than 5.3.2 (future versions will require this as a minimum)</li>
|
4387 |
+
<li><strong>(v.4)</strong> TRANSLATIONS: Danish - 6%, Spanish - 76%</li>
|
4388 |
+
<li><strong>(v.3)</strong> ADDED: Further checking for availability of certain PHP/server data before enabling the rename WordPress login feature</li>
|
4389 |
+
<li><strong>(v.3)</strong> ADDED: Option to add the Plugin Badge as a Widget to your side-bar or page footer, or any other widget area.</li>
|
4390 |
+
<li><strong>(v.3)</strong> TRANSLATIONS: Polish - 100%</li>
|
4391 |
+
<li><strong>(v.2)</strong> ADDED: Email notifications sent out to report email address on a daily cron. <a
|
4392 |
+
href="https://www.icontrolwp.com/2015/07/plugin-vulnerability-email-notifications/">more info</a></li>
|
4393 |
+
<li><strong>(v.2)</strong> FIX: Work around a WordPress inline plugin update Javascript bug.</li>
|
4394 |
+
<li><strong>(v.1)</strong> FIX: Fix syntax support for earlier versions of PHP.</li>
|
4395 |
+
<li><strong>(v.0)</strong> FEATURE: Plugin Vulnerabilities Detection: If you’re running plugins with known vulnerabilities you will be warned - <a
|
4396 |
+
href="http://icwp.io/wpsf22">more info</a></li>
|
4397 |
+
</ul>
|
4398 |
+
<p>= 4.8 Series =<br>
|
4399 |
+
<em>Released: 21st June, 2015</em></p>
|
4400 |
+
<ul>
|
4401 |
+
<li><strong>(v.0)</strong> FEATURE: Admin Access Restriction Areas - Restrict access to certain WordPress areas and functionality to <strong>Administrators</strong> with the Admin Access key.</li>
|
4402 |
+
<li><strong>(v.0)</strong> ADDED: Admin Access Restriction Area - Plugins. You can now restrict access to certain Plugin actions - activate, install, update, delete.</li>
|
4403 |
+
<li><strong>(v.0)</strong> ADDED: Admin Access Restriction Area - Themes. You can now restrict access to certain Theme actions - activate, install, update, delete.</li>
|
4404 |
+
<li><strong>(v.0)</strong> ADDED: Admin Access Restriction Area - Pages/Post. You can now restrict access to certain Page/Post actions - Create/Edit, Publish, Delete.</li>
|
4405 |
+
</ul>
|
4406 |
+
<p>= 4.7 Series =<br>
|
4407 |
+
<em>Released: 29th April, 2015</em></p>
|
4408 |
+
<ul>
|
4409 |
+
<li><strong>(v.7)</strong> FIXED: The text used to explain why some comments were marked as spam was broken.</li>
|
4410 |
+
<li><strong>(v.7)</strong> FIXED: Group sign-up form now honours your SSL setting.</li>
|
4411 |
+
<li><strong>(v.7)</strong> TRANSLATIONS: Spanish - 74%, Russian - 91%, Turkish - 94%, Polish- 95%, Finnish - 100%</li>
|
4412 |
+
<li><strong>(v.6)</strong> FIXED: Verifying ability to send/receive email doesn’t complete if Admin Access Protection is turned on.</li>
|
4413 |
+
<li><strong>(v.6)</strong> FIXED: GASP Login Protection feature breaks because certain key options aren’t initialized when the feature is enabled.</li>
|
4414 |
+
<li><strong>(v.6)</strong> FIXED: Some “more info” links were empty.</li>
|
4415 |
+
<li><strong>(v.4)</strong> ADDED: Email Sending Verification when enabling two-factor authentication - this ensures your site can send (and you can receive) emails.</li>
|
4416 |
+
<li><strong>(v.4)</strong> ADDED: Section Summaries - each option tab contains a small text summary outlining the purpose and recommendation for each.</li>
|
4417 |
+
<li><strong>(v.4)</strong> CHANGED: The Admin Access Key input is now a password field.</li>
|
4418 |
+
<li><strong>(v.4)</strong> CHANGED: Custom Login URL now works with or without trailing slash.</li>
|
4419 |
+
<li><strong>(v.4)</strong> CHANGED: Streamlining and improvement of PHP UI templates</li>
|
4420 |
+
<li><strong>(v.4)</strong> ADDED: Implemented TWIG for templates (not yet activated)</li>
|
4421 |
+
<li><strong>(v.4)</strong> TRANSLATIONS: Romanian (100%), Spanish-Spain (63%)</li>
|
4422 |
+
<li><strong>(v.3)</strong> ADDED: Integrated protection against 2x RevSlider vulnerabilities (Local File Include and Arbitrary File Upload)</li>
|
4423 |
+
<li><strong>(v.3)</strong> CHANGED: Reverted the addition of Permalinks/Rewrite rules flushing, in case this is a problem for some.</li>
|
4424 |
+
<li><strong>(v.2)</strong> UPDATED/FIX: Major fixes and improvements to the rename wp-login.php feature.</li>
|
4425 |
+
<li><strong>(v.2)</strong> TRANSLATIONS: Mexican-Spanish (61%), Arabic (38%)</li>
|
4426 |
+
<li><strong>(v.1)</strong> FIX: Silence warnings from filesystem touch() command.</li>
|
4427 |
+
<li><strong>(v.1)</strong> TRANSLATIONS: Polish (100%), Finnish (100%), Czech (73%), Arabic (34%)</li>
|
4428 |
+
<li><strong>(v.0)</strong> UPDATED: Options page user interface re-design.</li>
|
4429 |
+
<li><strong>(v.0)</strong> FIX: Audit trail time now reflects the user’s timezone correctly.</li>
|
4430 |
+
<li><strong>(v.0)</strong> FIX: Better compatibility with BBPress.</li>
|
4431 |
+
<li><strong>(v.0)</strong> UPDATED: Underlying plugin code improvements.</li>
|
4432 |
+
<li><strong>(v.0)</strong> TRANSLATIONS: Russian (100%), Czech (70%), Polish (97%)</li>
|
4433 |
+
</ul>
|
4434 |
+
<p>= 4.6 Series =<br>
|
4435 |
+
<em>Released: 10th April, 2015</em></p>
|
4436 |
+
<ul>
|
4437 |
+
<li><strong>(v.3)</strong> SECURITY: Added protection against XSS vulnerability in WordPress comments. <a
|
4438 |
+
href="http://icwp.io/63">Learn More</a> - Note: This is not a vulnerability with the Firewall plugin.</li>
|
4439 |
+
<li><strong>(v.3)</strong> SECURITY: Added extra precautions to WordPress URL redirects. <a href="http://icwp.io/64">Learn More</a>.</li>
|
4440 |
+
<li><strong>(v.3)</strong> TRANSLATIONS: Russian (70%), Czech (67%)</li>
|
4441 |
+
<li><strong>(v.2)</strong> FIX: Bug with the database table verification logic.</li>
|
4442 |
+
<li><strong>(v.2)</strong> TRANSLATIONS: Russian (New- 54%), Romanian (100%), Turkish (89%), Czech (53%)</li>
|
4443 |
+
<li><strong>(v.1)</strong> FIX: XMLRPC compatibility logic was preventing other non-XMLRPC related code from running.</li>
|
4444 |
+
<li><strong>(v.1)</strong> UPDATED: Plugin Badge styling</li>
|
4445 |
+
<li><strong>(v.1)</strong> UPDATED: Updated Czech(41%) and Spanish (60%) translations</li>
|
4446 |
+
<li><strong>(v.0)</strong> ADDED: New feature that displays the last login time for all users on the users listing page (User Management feature must be enabled).</li>
|
4447 |
+
<li><strong>(v.0)</strong> ADDED: <strong>Completely optional</strong> promotional Plugin Badge option - help us promote the plugin and reassure your site visitors at the same time. <a
|
4448 |
+
href="http://icwp.io/5x">Learn More</a></li>
|
4449 |
+
<li><strong>(v.0)</strong> UPDATED: Updated Czech(38%) translations</li>
|
4450 |
+
</ul>
|
4451 |
+
<p>= 4.5 Series =<br>
|
4452 |
+
<em>Released: 6th March, 2015</em></p>
|
4453 |
+
<ul>
|
4454 |
+
<li><strong>(v.5)</strong> CHANGED: Updated Finnish (100%), Czech (16%) translations</li>
|
4455 |
+
<li><strong>(v.5)</strong> CHANGED: Change logs now more clearly display changes between versions</li>
|
4456 |
+
<li><strong>(v.5)</strong> FIX: Small translation coverage</li>
|
4457 |
+
<li><strong>(v.4)</strong> ADDED: New and updated language translations including Polish (100%), Finnish</li>
|
4458 |
+
<li><strong>(v.4)</strong> FIX: Better string translation coverage for menus etc.</li>
|
4459 |
+
<li><strong>(v.3)</strong> ADDED: New and updated language translations including Polish, Czech and German</li>
|
4460 |
+
<li><strong>(v.3)</strong> CHANGED: Only set the plugin cookie if necessary</li>
|
4461 |
+
<li><strong>(v.2)</strong> CHANGED: Attempt to resolve DB errors related to transient options reported on WP Engine</li>
|
4462 |
+
<li><strong>(v.1)</strong> ADDED: New feature- GASP Login Protection can now be applied to lost password form - enabled by default</li>
|
4463 |
+
<li><strong>(v.0)</strong> ADDED: New feature- GASP Login Protection can now be applied to user registrations - enabled by default</li>
|
4464 |
+
</ul>
|
4465 |
+
<p>= 4.4 Series =<br>
|
4466 |
+
<em>Released: 21st February, 2015</em></p>
|
4467 |
+
<ul>
|
4468 |
+
<li><strong>(v.2)</strong> ADDED: Romanian Translation.</li>
|
4469 |
+
<li><strong>(v.2)</strong> ADDED: A plugin minimum-requirements processing system.</li>
|
4470 |
+
<li><strong>(v.2)</strong> IMPROVED: The WordPress admin-UI code is simpler and cleaner.</li>
|
4471 |
+
<li><strong>(v.1)</strong> ADDED: <strong>Significant</strong> performance enhancement in plugin loading times (up to 50% reduction).</li>
|
4472 |
+
<li><strong>(v.0)</strong> CHANGED: The ‘Prevent Remote Login’ option now tries to detect web hosting server compatibility before allowing it to be enabled.</li>
|
4473 |
+
<li><strong>(v.0)</strong> CHANGED: More lax in finding the ‘forceOff’ file when users are trying to turn off the firewall.</li>
|
4474 |
+
<li><strong>(v.0)</strong> CHANGED: Parsing the URL no longer outputs warnings that might interfere with response headers.</li>
|
4475 |
+
</ul>
|
4476 |
+
<p>= 4.3 Series =<br>
|
4477 |
+
<em>Released: 15th January, 2015</em></p>
|
4478 |
+
<ul>
|
4479 |
+
<li><strong>(v.6)</strong> FIXES: More thorough validation of whitelisted IP addresses</li>
|
4480 |
+
<li><strong>(v.5)</strong> FIXES: Some hosting environments need absolute file paths for PHP include()/require()</li>
|
4481 |
+
<li><strong>(v.5)</strong> CHANGED: Streamlined the detection of whitelisting and added in-plugin notification if <strong>you</strong> are whitelisted</li>
|
4482 |
+
<li><strong>(v.4)</strong> FIXES: Work around for cases where PHP can’t successfully run parse_url()</li>
|
4483 |
+
<li><strong>(v.2)</strong> IMPROVED: Refactoring for better code organisation</li>
|
4484 |
+
<li>ADDED: New Feature - <a href="http://icwp.io/5s">Rename WP Login Page</a>.</li>
|
4485 |
+
<li>ADDED: UI indicators on whether plugins will be automatically updated in the plugins listing.</li>
|
4486 |
+
<li>CHANGED: IP Address WhiteList is now global for the whole plugin, and can be accessed under the “Dashboard” area</li>
|
4487 |
+
<li>IMPROVED: Firewall processing code is simplified and more efficient.</li>
|
4488 |
+
</ul>
|
4489 |
+
<p>= 4.2.1 =<br>
|
4490 |
+
<em>Released: 22th December, 2014</em></p>
|
4491 |
+
<ul>
|
4492 |
+
<li>FIXED: Changes to how feature specifications are read from disk to prevent .tmp file build up.</li>
|
4493 |
+
</ul>
|
4494 |
+
<p>= 4.2.0 =<br>
|
4495 |
+
<em>Released: 12th December, 2014</em></p>
|
4496 |
+
<ul>
|
4497 |
+
<li>ADDED: Audit Trail Auto Cleaning - default cleans out entries older than 30 days.</li>
|
4498 |
+
<li>FIXED: Various small bug fixes and code cleaning.</li>
|
4499 |
+
</ul>
|
4500 |
+
<p>= 4.1.4 =<br>
|
4501 |
+
<em>Released: 24th November, 2014</em></p>
|
4502 |
+
<ul>
|
4503 |
+
<li>FIXED: Fixed small logic bug which prevented deactivation of the plugin on the UI.</li>
|
4504 |
+
</ul>
|
4505 |
+
<p>= 4.1.3 =<br>
|
4506 |
+
<em>Released: 19th November, 2014</em></p>
|
4507 |
+
<ul>
|
4508 |
+
<li>IMPROVED: User Sessions are simplified.</li>
|
4509 |
+
<li>UPDATED: a few translation files based on the latest available contributions.</li>
|
4510 |
+
</ul>
|
4511 |
+
<p>= 4.1.2 =</p>
|
4512 |
+
<ul>
|
4513 |
+
<li>ADDED: Self-correcting database table validation - if the structure of a database table isn’t what is expected, it’ll be re-created.</li>
|
4514 |
+
</ul>
|
4515 |
+
<p>= 4.1.1 =</p>
|
4516 |
+
<ul>
|
4517 |
+
<li>WARNING: Due to new IPv6 support, all databases tables will be rebuilt - all active user sessions will be destroyed.</li>
|
4518 |
+
<li>ADDED: Preliminary support for IPv6 addresses throughout. We don’t support whitelist ranges but IPv6 addresses are handled much more reliably in general.</li>
|
4519 |
+
<li>ADDED: New audit trail concept added called “immutable” that represents entries that will never be deleted - such entries would usually involve actions taken on the audit trail itself.</li>
|
4520 |
+
<li>FIXED: Support for audit trail events with longer names.</li>
|
4521 |
+
<li>IMPROVED: Comments Filtering - It now honours the WordPress settings for previously approved comment authors and never filters such comments.</li>
|
4522 |
+
<li>REMOVED: Option to enable GASP Comments Filtering for logged-in users has been completely removed - this reduces plugin options complexity. All logged-in users by-pass <strong>all</strong> comments filtering.</li>
|
4523 |
+
<li>FIXED: Prevention against plugin redirect loops under certain conditions.</li>
|
4524 |
+
<li>FIXED: IP whitelisting wasn’t working under certain cases.</li>
|
4525 |
+
</ul>
|
4526 |
+
<p>= 4.0.0 =</p>
|
4527 |
+
<ul>
|
4528 |
+
<li>ADDED: New Feature - Audit Trail</li>
|
4529 |
+
<li>ADDED: Audit Trail options include: Plugins, Themes, Email, WordPress Core, Posts/Pages, Shield plugin</li>
|
4530 |
+
<li>FIXED: Full and proper cleanup of plugin options, crons, and databases upon deactivation.</li>
|
4531 |
+
<li>REMOVED: Firewall Log. This is no longer an option and is instead integrated into the “Shield” Audit Trail.</li>
|
4532 |
+
</ul>
|
4533 |
+
<p>= 3.5.5 =</p>
|
4534 |
+
<ul>
|
4535 |
+
<li>ADDED: Better admin notifications for events such as options saving etc.</li>
|
4536 |
+
<li>CHANGE: Some plugin styling to highlight features and options better.</li>
|
4537 |
+
<li>FIXED: Small bug with options default values.</li>
|
4538 |
+
</ul>
|
4539 |
+
<p>= 3.5.3 =</p>
|
4540 |
+
<ul>
|
4541 |
+
<li>ADDED: A warning message on the WordPress admin if the “forceOff” override is active.</li>
|
4542 |
+
<li>CHANGED: The ‘forceOff’ system is now temporary - i.e. it doesn’t save the configuration, and so once this file is removed, the plugin returns to the settings specified.</li>
|
4543 |
+
<li>CHANGED: The ‘forceOn’ option is now removed.</li>
|
4544 |
+
<li>FIXED: Problems with certain hosting environments reading in files with the “.yaml” extension - <a
|
4545 |
+
href="https://wordpress.org/support/topic/yaml-breaks-plugin">support ref</a></li>
|
4546 |
+
<li>FIXED: Small issue where when the file system paths change, some variables don’t update properly.</li>
|
4547 |
+
</ul>
|
4548 |
+
<p>= 3.5.0 =</p>
|
4549 |
+
<ul>
|
4550 |
+
<li>CHANGED: Plugin features are now configured <a href="https://github.com/mustangostang/spyc/">using YAML</a> - no more in-PHP configuration.</li>
|
4551 |
+
<li>REMOVED: A few options from User Sessions Management as they were unnecessary.</li>
|
4552 |
+
<li>CHANGED: Database storing tables now have consistent naming.</li>
|
4553 |
+
<li>FIXED: Issue with User Sessions Management where ‘0’ was specified for session length, resulting in lock out.</li>
|
4554 |
+
<li>FIXED: Firewall log gathering.</li>
|
4555 |
+
<li>FIXED: Various PHP warning notices.</li>
|
4556 |
+
</ul>
|
4557 |
+
<p>= 3.4.0 =</p>
|
4558 |
+
<ul>
|
4559 |
+
<li>ADDED: Option to limit number of simultaneous sessions per WordPress user login name (User Management section)</li>
|
4560 |
+
</ul>
|
4561 |
+
<p>= 3.3.0 =</p>
|
4562 |
+
<ul>
|
4563 |
+
<li>ADDED: Option to send notification when an administrator user logs in successfully (under User Management menu).</li>
|
4564 |
+
<li>CHANGED: Refactoring for how GET and POST data is retrieved</li>
|
4565 |
+
</ul>
|
4566 |
+
<p>= 3.2.1 =</p>
|
4567 |
+
<ul>
|
4568 |
+
<li>FIXED: Custom Comment Filter message problem when using more than one substitution. <a
|
4569 |
+
href="https://wordpress.org/support/topic/warning-sprintf-too-few-arguments-in-hometnrastropublic_htmlwpwp-conten?replies=8#post-5927337">ref</a></li>
|
4570 |
+
</ul>
|
4571 |
+
<p>= 3.2.0 =</p>
|
4572 |
+
<ul>
|
4573 |
+
<li>ADDED: Options to allow by-pass XML-RPC so as to be compatible with WordPress iPhone/Android apps.</li>
|
4574 |
+
<li>UPDATED: Login screen message when you’re forced logged-out due to 2-factor auth failure on IP or cookie.</li>
|
4575 |
+
<li>CHANGED: Tweaked method for setting admin access protection on/off</li>
|
4576 |
+
<li>CHANGED: comment filtering code refactoring.</li>
|
4577 |
+
<li>FIXED: Options that were “multiple selects” weren’t saving correctly</li>
|
4578 |
+
</ul>
|
4579 |
+
<p>= 3.1.5 =</p>
|
4580 |
+
<ul>
|
4581 |
+
<li>FIX: Where some comments would fail GASP comment token checking.</li>
|
4582 |
+
</ul>
|
4583 |
+
<p>= 3.1.4 =</p>
|
4584 |
+
<ul>
|
4585 |
+
<li>FIX: Logout URL parameters are now generated correctly so that the correct messages are shown.</li>
|
4586 |
+
<li>CHANGED: small optimizations and code refactoring.</li>
|
4587 |
+
<li>UPDATED: a few translation files based on the latest available contributions.</li>
|
4588 |
+
</ul>
|
4589 |
+
<p>= 3.1.3 =</p>
|
4590 |
+
<ul>
|
4591 |
+
<li>FIX: issue with login cooldown timeouts not being updated where admin access restriction is in place.</li>
|
4592 |
+
</ul>
|
4593 |
+
<p>= 3.1.2 =</p>
|
4594 |
+
<ul>
|
4595 |
+
<li>FIX: auto-updates feature not loading</li>
|
4596 |
+
<li>FIX: simplified implementation of login protection feature to reduce possibility for bugs/lock-outs</li>
|
4597 |
+
<li>FIX: auto-forwarding for wp-login.php was preventing user logout</li>
|
4598 |
+
</ul>
|
4599 |
+
<p>= 3.1.0 =</p>
|
4600 |
+
<ul>
|
4601 |
+
<li>ADDED: option to check the logged-in user session only on WordPress admin pages (now the default setting)</li>
|
4602 |
+
<li>ADDED: option to auto-forward to the WordPress dashboard when you go to wp-login.php and you’re already logged in.</li>
|
4603 |
+
<li>ADDED: message to login screen when no user session is found</li>
|
4604 |
+
<li>CHANGED: does not verify session when performing AJAX request. (need to build appropriate AJAX response)</li>
|
4605 |
+
<li>FIX: for wp_login action not passing second argument</li>
|
4606 |
+
</ul>
|
4607 |
+
<p>= 3.0.0 =</p>
|
4608 |
+
<ul>
|
4609 |
+
<li>FEATURE: User Management. Phase 1 - create user sessions to track current and attempted logged in users.</li>
|
4610 |
+
<li>CHANGED: MASSIVE plugin refactoring for better performance and faster, more reliable future development of features</li>
|
4611 |
+
<li>ADDED: Obscurity Feature - ability to remove the WP Generator meta tag.</li>
|
4612 |
+
<li>ADDED: ability to change user login session length in days</li>
|
4613 |
+
<li>ADDED: ability to set session idle timeout in hours</li>
|
4614 |
+
<li>ADDED: ability to lock session to a particular IP address (2-factor auth by IP is separate)</li>
|
4615 |
+
<li>ADDED: ability to view active user sessions</li>
|
4616 |
+
<li>ADDED: ability to view last page visited for active sessions</li>
|
4617 |
+
<li>ADDED: ability to view last active time for active sessions</li>
|
4618 |
+
<li>ADDED: ability to view failed or attempted logins in the past 48hrs</li>
|
4619 |
+
<li>ADDED: Support for GASP login using WooCommerce</li>
|
4620 |
+
<li>CHANGED: Admin Access Restriction now has a separate options/feature page</li>
|
4621 |
+
<li>CHANGED: Admin styling to better see some selected options</li>
|
4622 |
+
<li>ADDED: Support for WP Wall shoutbox plugin (does no GASP comment checks)</li>
|
4623 |
+
<li>CHANGED: Removed support for upgrading from versions prior to 2.0</li>
|
4624 |
+
<li>CHANGED: Removed support for importing from Firewall 2 plugin - to import, manually install plugin v2.6.6, import settings, then upgrade.</li>
|
4625 |
+
</ul>
|
4626 |
+
<p>= 2.6.6 =</p>
|
4627 |
+
<ul>
|
4628 |
+
<li>FIX: Improved compatibility with bbPress.</li>
|
4629 |
+
</ul>
|
4630 |
+
<p>= 2.6.5 =</p>
|
4631 |
+
<ul>
|
4632 |
+
<li>FIX: Could not enable Admin Access Protection feature on new installs due to too aggressive testing on security.</li>
|
4633 |
+
</ul>
|
4634 |
+
<p>= 2.6.4 =</p>
|
4635 |
+
<ul>
|
4636 |
+
<li>ENHANCED: Dashboard now shows a more visual summary of settings and removes duplicate options settings with links to sections.</li>
|
4637 |
+
<li>ENHANCED: WordPress Lock Down options now also set the corresponding WordPress defines if they’re not already.</li>
|
4638 |
+
</ul>
|
4639 |
+
<p>= 2.6.3 =</p>
|
4640 |
+
<ul>
|
4641 |
+
<li>ADDED: More in-line plugin links to help/blog resources</li>
|
4642 |
+
<li>ENHANCED: <a href="http://icwp.io/5b">Admin Access Protection</a> is further enhanced in 3 ways:</li>
|
4643 |
+
</ul>
|
4644 |
+
<ol>
|
4645 |
+
<li>More robust cookie values using MD5s</li>
|
4646 |
+
<li>Blocks plugin options updating right at the point of WordPress options update so nothing can rewrite the actual plugin options.</li>
|
4647 |
+
<li>Locks the current Admin Access session to your IP address - effectively only 1 Shield admin allowed at a time.</li>
|
4648 |
+
</ol>
|
4649 |
+
<p>= 2.6.2 =</p>
|
4650 |
+
<ul>
|
4651 |
+
<li>ENHANCED: Added option to completely reject a SPAM comment and redirect to the home page (so it doesn’t fill up your database with rubbish)</li>
|
4652 |
+
<li>ADDED: Plugin now has an internal stats counter for spam and other significant plugin events.</li>
|
4653 |
+
</ul>
|
4654 |
+
<p>= 2.6.1 =</p>
|
4655 |
+
<ul>
|
4656 |
+
<li>ADDED: Plugin now installs with default SPAM blacklist.</li>
|
4657 |
+
<li>ADDED: Now automatically checks and updates the SPAM blacklist when it’s older than 48hrs.</li>
|
4658 |
+
<li>ENHANCED: Comment messages indicate where the SPAM content was found when marking human-based spam messages.</li>
|
4659 |
+
</ul>
|
4660 |
+
<p>= 2.6.0 =</p>
|
4661 |
+
<p><strong>Major Features Release: Please review SPAM comments filtering options to determine where SPAM goes</strong></p>
|
4662 |
+
<ul>
|
4663 |
+
<li>FEATURE: Added Human SPAM comments filtering - replacement for Akismet that doesn’t use or send any data to 3rd party services. Uses <a
|
4664 |
+
href="https://github.com/splorp/wordpress-comment-blacklist">Blacklist provided and maintained by Grant Hutchinson</a></li>
|
4665 |
+
<li>ENHANCED: Two-Factor Login now automatically logs in the user to the admin area without them having to re-login again.</li>
|
4666 |
+
<li>ENHANCED: Added ability to terminate all currently (two-factor) verified logins.</li>
|
4667 |
+
<li>ENHANCED: Spam filter/scanning adds an explanation to the SPAM content to show why a message was filtered.</li>
|
4668 |
+
<li>FIXES: For PHP warnings while in php strict mode.</li>
|
4669 |
+
<li>CLEAN: Much cleaning up of code.</li>
|
4670 |
+
</ul>
|
4671 |
+
<p>= 2.5.9 =</p>
|
4672 |
+
<ul>
|
4673 |
+
<li>FEATURE: Added option to try and exclude search engine bots from firewall checking option - OFF by default.</li>
|
4674 |
+
</ul>
|
4675 |
+
<p>= 2.5.8 =</p>
|
4676 |
+
<ul>
|
4677 |
+
<li>FEATURE: Added ‘PHP Code’ Firewall checking option.</li>
|
4678 |
+
</ul>
|
4679 |
+
<p>= 2.5.7 =</p>
|
4680 |
+
<ul>
|
4681 |
+
<li>IMPROVED: Handling and logic of two-factor authentication and user roles/levels</li>
|
4682 |
+
</ul>
|
4683 |
+
<p>= 2.5.6 =</p>
|
4684 |
+
<ul>
|
4685 |
+
<li>FEATURE: Added ability to specify the particular WordPress user roles that are subject to 2-factor authentication. (Default: Contributors, Authors, Editors and Administrators)</li>
|
4686 |
+
</ul>
|
4687 |
+
<p>= 2.5.5 =</p>
|
4688 |
+
<ul>
|
4689 |
+
<li>FEATURE: Added ‘Lockdown’ feature to force login to WordPress over SSL.</li>
|
4690 |
+
<li>FEATURE: Added ‘Lockdown’ feature to force WordPress Admin dashboard to be delivered over SSL.</li>
|
4691 |
+
<li>FIX: Admin restricted access feature wasn’t disabled with the “forceOff” option.</li>
|
4692 |
+
</ul>
|
4693 |
+
<p>= 2.5.4 =</p>
|
4694 |
+
<ul>
|
4695 |
+
<li>FIX: How WordPress Automatic/Background Updates filters worked was changed with WordPress 3.8.2.</li>
|
4696 |
+
</ul>
|
4697 |
+
<p>= 2.5.3 =</p>
|
4698 |
+
<ul>
|
4699 |
+
<li>UPDATED: Translations. And confirmed compatibility with WordPress 3.9</li>
|
4700 |
+
</ul>
|
4701 |
+
<p>= 2.5.2 =</p>
|
4702 |
+
<ul>
|
4703 |
+
<li>FEATURE: Option to Prevent Remote Posting to the WordPress Login system. Will check that the login form was submitted from the same site.</li>
|
4704 |
+
</ul>
|
4705 |
+
<p>= 2.5.1 =</p>
|
4706 |
+
<ul>
|
4707 |
+
<li>UPDATED: Translations and added some partials (Catalan, Persian)</li>
|
4708 |
+
<li>FIX: for cleanup cron running on non-existent tables.</li>
|
4709 |
+
</ul>
|
4710 |
+
<p>= 2.5.0 =</p>
|
4711 |
+
<ul>
|
4712 |
+
<li>FEATURE: Two-Factor Authenticated Login using <a
|
4713 |
+
href="http://icwp.io/4i">Yubikey</a> One Time Passwords (OTP).</li>
|
4714 |
+
</ul>
|
4715 |
+
<p>= 2.4.3 =</p>
|
4716 |
+
<ul>
|
4717 |
+
<li>ADDED: Translations: Spanish, Italian, Turkish. (~15% complete)</li>
|
4718 |
+
<li>UPDATED: Hebrew Translations (100%)</li>
|
4719 |
+
</ul>
|
4720 |
+
<p>= 2.4.2 =</p>
|
4721 |
+
<ul>
|
4722 |
+
<li>ADDED: Contextual help links for many options. More to come…</li>
|
4723 |
+
<li>ADDED: More Portuguese (Brazil) translations (~80%)</li>
|
4724 |
+
</ul>
|
4725 |
+
<p>= 2.4.1 =</p>
|
4726 |
+
<ul>
|
4727 |
+
<li>ADDED: More strings to the translation set for better multilingual support</li>
|
4728 |
+
<li>ADDED: Portuguese (Brazil) translations (~40%)</li>
|
4729 |
+
<li>UPDATED: Hebrew Translations</li>
|
4730 |
+
<li>FIXED: Automatic cleaning of database logs wasn’t actually working as expected. Should now be fixed.</li>
|
4731 |
+
</ul>
|
4732 |
+
<p>= 2.4.0 =</p>
|
4733 |
+
<ul>
|
4734 |
+
<li>NEW: Option to enable Two-Factor Authentication based on Cookie. In this way you can tie a user session to a single browser.</li>
|
4735 |
+
<li>FIX: Better WordPress Multisite (WPMS) Support.</li>
|
4736 |
+
</ul>
|
4737 |
+
<p>= 2.3.4 =</p>
|
4738 |
+
<ul>
|
4739 |
+
<li>FIX: Automatic updating of itself.</li>
|
4740 |
+
</ul>
|
4741 |
+
<p>= 2.3.3 =</p>
|
4742 |
+
<ul>
|
4743 |
+
<li>ADDED: Hebrew Translations. Thanks <a href="http://atar4u.com">Ahrale</a>!</li>
|
4744 |
+
<li>ADDED: Automatic trimming of the Firewall access log to 7 days - it just grows too large otherwise.</li>
|
4745 |
+
<li>FIX: The previously added automatic clean up of old comments and login protect database entries was wiping out the valid login protect<br>
|
4746 |
+
entries and was forcing users to re-login every 24hrs.</li>
|
4747 |
+
<li>FIX: Some small bugs, errors, and PHPDoc Comments.</li>
|
4748 |
+
</ul>
|
4749 |
+
<p>= 2.3.2 =</p>
|
4750 |
+
<ul>
|
4751 |
+
<li>ADDED: Automatic cleaning of GASP Comments Filter and Login Protection database entries (older than 24hrs) using WordPress Cron (everyday @ 6am)</li>
|
4752 |
+
<li>CHANGED: Huge code refactoring to allow for more easily use with other WordPress plugins.</li>
|
4753 |
+
</ul>
|
4754 |
+
<p>= 2.2.5 =</p>
|
4755 |
+
<ul>
|
4756 |
+
<li>ADDED: Email sending options for automatic update notifications - options to change the notification email address, or turn it off completely.</li>
|
4757 |
+
</ul>
|
4758 |
+
<p>= 2.2.4 =</p>
|
4759 |
+
<ul>
|
4760 |
+
<li>FIX: Small bug fix.</li>
|
4761 |
+
<li>CHANGED: When running a force automatic updates process, tries to remove influence from other plugins and uses only this plugin’s automatic updates settings.</li>
|
4762 |
+
<li>CHANGED: A bit of automatic updates code refactoring.</li>
|
4763 |
+
</ul>
|
4764 |
+
<p>= 2.2.2 =</p>
|
4765 |
+
<ul>
|
4766 |
+
<li>CHANGED: Changed all options to be disabled by default.</li>
|
4767 |
+
<li>CHANGED: The option for admin notices will turn off all main admin notices except after you update options.</li>
|
4768 |
+
</ul>
|
4769 |
+
<p>= 2.2.1 =</p>
|
4770 |
+
<ul>
|
4771 |
+
<li>ADDED: Verified compatibility with WordPress 3.8</li>
|
4772 |
+
</ul>
|
4773 |
+
<p>= 2.2.0 =</p>
|
4774 |
+
<ul>
|
4775 |
+
<li>CHANGED: Certain filesystem calls are more compatible with restrictive hosting environments.</li>
|
4776 |
+
<li>CHANGED: Plugin is now ready to integate with <a
|
4777 |
+
href="http://www.icontrolwp.com/2013/11/manage-wordpress-automatic-background-updates-icontrolwp/">iControlWP automatic background updates system</a>.</li>
|
4778 |
+
<li>FIX: Login Protection Cooldown feature may not operate properly in certain scenarios.</li>
|
4779 |
+
</ul>
|
4780 |
+
<p>= 2.1.5 =</p>
|
4781 |
+
<ul>
|
4782 |
+
<li>IMPROVED: Improved logic for Firewall whitelisting for pages and parameters to ensure whitelisting rules are followed.</li>
|
4783 |
+
<li>CHANGED: The whitelisting rule for posting pages/posts is only for the “content” and the firewall checking will apply to all other page parameters.</li>
|
4784 |
+
</ul>
|
4785 |
+
<p>= 2.1.4 =</p>
|
4786 |
+
<ul>
|
4787 |
+
<li>FIX: When you run the Force Automatic Background Updates, it disables the plugins. This problem is now fixed.</li>
|
4788 |
+
</ul>
|
4789 |
+
<p>= 2.1.2 =</p>
|
4790 |
+
<ul>
|
4791 |
+
<li>FIX: A bug that prevented auto-updates of this plugin.</li>
|
4792 |
+
<li>FIX: Not being able to hide translations and upgrade notices.</li>
|
4793 |
+
<li>ADDED: Tweaks to auto-update feature to allow interfacing with the iControlWP service to customize the auto update system.</li>
|
4794 |
+
</ul>
|
4795 |
+
<p>= 2.1.0 =</p>
|
4796 |
+
<ul>
|
4797 |
+
<li>ADDED: A button that lets you run the WordPress Automatic Updates process on-demand (so you don’t have to wait for WordPress cron).</li>
|
4798 |
+
<li>CHANGED: The plugin now sets more options to be turned on by default when the plugin is first activated.</li>
|
4799 |
+
<li>CHANGED: A lot of optimizations and code refactoring.</li>
|
4800 |
+
</ul>
|
4801 |
+
<p>= 2.0.3 =</p>
|
4802 |
+
<ul>
|
4803 |
+
<li>FIX: Whoops, sorry, accidentally removed the option to toggle “disable file editing”. It’s back now.</li>
|
4804 |
+
</ul>
|
4805 |
+
<p>= 2.0.2 =</p>
|
4806 |
+
<ul>
|
4807 |
+
<li>CHANGED: WordPress filters used to programmatically update whitelists now update the Login Protection IP whitelist</li>
|
4808 |
+
</ul>
|
4809 |
+
<p>= 2.0.1 =</p>
|
4810 |
+
<ul>
|
4811 |
+
<li>ADDED: Localization capabilities. All we need now are translators! <a href="http://translate.icontrolwp.com/">Go here to get started</a>.</li>
|
4812 |
+
<li>ADDED: Option to mask the WordPress version so the real version is never publicly visible.</li>
|
4813 |
+
</ul>
|
4814 |
+
<p>= 1.9.2 =</p>
|
4815 |
+
<ul>
|
4816 |
+
<li>CHANGED: Simplified the automatic WordPress Plugin updates into 1 filter for consistency</li>
|
4817 |
+
</ul>
|
4818 |
+
<p>= 1.9.1 =</p>
|
4819 |
+
<ul>
|
4820 |
+
<li>ADDED: Increased admin access security features - blocks the deactivation of itself if you’re not authenticated fully with the plugin.</li>
|
4821 |
+
<li>ADDED: If you’re not authenticated with the plugin, the plugin listing view wont have ‘Deactivate’ or ‘Edit’ links.</li>
|
4822 |
+
</ul>
|
4823 |
+
<p>= 1.9.0 =</p>
|
4824 |
+
<ul>
|
4825 |
+
<li>ADDED: New WordPress Automatic Updates Configuration settings</li>
|
4826 |
+
</ul>
|
4827 |
+
<p>= 1.8.2 =</p>
|
4828 |
+
<ul>
|
4829 |
+
<li>ADDED: Notification of available plugin upgrade is now an option under the ‘Dashboard’</li>
|
4830 |
+
<li>CHANGED: Certain admin and upgrade notices now only appear when you’re authenticated with the plugin (if this is enabled)</li>
|
4831 |
+
<li>FIXED: PHP Notice with undefined index.</li>
|
4832 |
+
</ul>
|
4833 |
+
<p>= 1.8.1 =</p>
|
4834 |
+
<ul>
|
4835 |
+
<li>ADDED: Feature- Access Key Restriction <a href="http://icwp.io/2s">more info</a>.</li>
|
4836 |
+
<li>ADDED: Feature- WordPress Lockdown. Currently only provides 1 option, but more to come.</li>
|
4837 |
+
</ul>
|
4838 |
+
<p>= 1.7.3 =</p>
|
4839 |
+
<ul>
|
4840 |
+
<li>CHANGED: Reworked a lot of the plugin to optimize for further performance.</li>
|
4841 |
+
<li>FIX: Potential infinite loop in processing firewall.</li>
|
4842 |
+
</ul>
|
4843 |
+
<p>= 1.7.1 =</p>
|
4844 |
+
<ul>
|
4845 |
+
<li>ADDED: Much more efficiency yet again in the loading/saving of the plugin options.</li>
|
4846 |
+
</ul>
|
4847 |
+
<p>= 1.7.0 =</p>
|
4848 |
+
<ul>
|
4849 |
+
<li>ADDED: Preliminary WordPress Multisite (WPMS/WPMU) Support.</li>
|
4850 |
+
<li>CHANGED: The Firewall now kicks in on the ‘plugins_loaded’ hook instead of as the actual firewall plugin is initialized (as a result<br>
|
4851 |
+
of WP Multisite support).</li>
|
4852 |
+
</ul>
|
4853 |
+
<p>= 1.6.2 =</p>
|
4854 |
+
<ul>
|
4855 |
+
<li>REMOVED: Automatic upgrade option until I can ascertain what caused the plugin to auto-disable.</li>
|
4856 |
+
</ul>
|
4857 |
+
<p>= 1.6.1 =</p>
|
4858 |
+
<ul>
|
4859 |
+
<li>ADDED: Options to fully customize the text displayed by the GASP comments section.</li>
|
4860 |
+
<li>ADDED: Option to include logged-in users in the GASP Comments Filter.</li>
|
4861 |
+
</ul>
|
4862 |
+
<p>= 1.6.0 =</p>
|
4863 |
+
<ul>
|
4864 |
+
<li>ADDED: A new section - ‘Comments Filtering’ that will form the basis for filtering comments with SPAM etc.</li>
|
4865 |
+
<li>ADDED: Option to add enhanced GASP based comments filtering to prevent SPAM bots posting comments to your site.</li>
|
4866 |
+
</ul>
|
4867 |
+
<p>= 1.5.6 =</p>
|
4868 |
+
<ul>
|
4869 |
+
<li>IMPROVED: Whitelist/Blacklist IP range processing to better cater for ranges when saving, with more thorough checking.</li>
|
4870 |
+
<li>IMPROVED: Whitelist/Blacklist IP range processing for 32-bit systems.</li>
|
4871 |
+
<li>FIXED: A bug with Whitelist/Blacklist IP checking.</li>
|
4872 |
+
</ul>
|
4873 |
+
<p>= 1.5.5 =</p>
|
4874 |
+
<ul>
|
4875 |
+
<li>FIXED: Quite a few bugs fixed.</li>
|
4876 |
+
</ul>
|
4877 |
+
<p>= 1.5.4 =</p>
|
4878 |
+
<ul>
|
4879 |
+
<li>FIXED: Typo error.</li>
|
4880 |
+
</ul>
|
4881 |
+
<p>= 1.5.3 =</p>
|
4882 |
+
<ul>
|
4883 |
+
<li>FIXED: Some of the firewall processors were saving unnecessary data.</li>
|
4884 |
+
</ul>
|
4885 |
+
<p>= 1.5.2 =</p>
|
4886 |
+
<ul>
|
4887 |
+
<li>CHANGED: The method for finding the client IP address is more thorough, in a bid to work with Proxy servers etc.</li>
|
4888 |
+
<li>FIXED: PHP notice reported here: <a href="https://wordpress.org/support/topic/getting-errors-when-logged-in">http://wordpress.org/support/topic/getting-errors-when-logged-in</a></li>
|
4889 |
+
</ul>
|
4890 |
+
<p>= 1.5.1 =</p>
|
4891 |
+
<ul>
|
4892 |
+
<li>FIXED: Bug fix where IP address didn’t show in email.</li>
|
4893 |
+
<li>FIXED: Attempt to fix problem where update message never hides.</li>
|
4894 |
+
</ul>
|
4895 |
+
<p>= 1.5.0 =</p>
|
4896 |
+
<ul>
|
4897 |
+
<li>ADDED: A new IP whitelist on the Login Protect that lets you by-pass login protect rules for given IP addresses.</li>
|
4898 |
+
<li>REMOVED: Firewall rule for wp-login.php and whitelisted IPs.</li>
|
4899 |
+
</ul>
|
4900 |
+
<p>= 1.4.2 =</p>
|
4901 |
+
<ul>
|
4902 |
+
<li>ADDED: The plugin now has an option to automatically upgrade itself when an update is detected - enabled by default.</li>
|
4903 |
+
</ul>
|
4904 |
+
<p>= 1.4.1 =</p>
|
4905 |
+
<ul>
|
4906 |
+
<li>ADDED: The plugin will now displays an admin notice when a plugin upgrade is available with a link to immediately update.</li>
|
4907 |
+
<li>ADDED: Plugin collision: removes the main hook by ‘All In One WordPress Security’. No need to have both plugins running.</li>
|
4908 |
+
<li>ADDED: Improved Login Cooldown Feature- works more like email throttling as it now uses an extra filesystem-based level of protection.</li>
|
4909 |
+
<li>FIXED: Login Cooldown Feature didn’t take effect in certain circumstances.</li>
|
4910 |
+
</ul>
|
4911 |
+
<p>= 1.4.0 =</p>
|
4912 |
+
<ul>
|
4913 |
+
<li>ADDED: All-new plugin options handling making them more efficient, easier to manage/update, using far fewer WordPress database options.</li>
|
4914 |
+
<li>CHANGED: Huge improvements on database calls and efficiency in loading plugin options.</li>
|
4915 |
+
<li>FIXED: Nonce implementation.</li>
|
4916 |
+
</ul>
|
4917 |
+
<p>= 1.3.2 =</p>
|
4918 |
+
<ul>
|
4919 |
+
<li>FIXED: Small compatibility issue with Quick Cache menu not showing.</li>
|
4920 |
+
</ul>
|
4921 |
+
<p>= 1.3.0 =</p>
|
4922 |
+
<ul>
|
4923 |
+
<li>ADDED: Email Throttle Feature - this will prevent you getting bombarded by 1000s of emails in case you’re hit by a bot.</li>
|
4924 |
+
<li>ADDED: Another Firewall die() option. New option will print a message and uses the wp_die() function instead.</li>
|
4925 |
+
<li>ADDED: Refactored and improved the logging system (upgrading will delete your current logs!).</li>
|
4926 |
+
<li>ADDED: Option to separately log Login Protect features.</li>
|
4927 |
+
<li>ADDED: Option to by-pass 2-factor authentication in the case sending the verification email fails<br>
|
4928 |
+
(so you don’t get locked out if your hosting doesn’t support email!).</li>
|
4929 |
+
<li>CHANGED: Login Protect checking now better logs out users immediately with a redirect.</li>
|
4930 |
+
<li>CHANGED: We now escape the log data being printed - just in case there’s any HTML/JS etc in there we don’t want.</li>
|
4931 |
+
<li>CHANGED: Optimized and cleaned a lot of the option caching code to improve reliability and performance (more to come).</li>
|
4932 |
+
</ul>
|
4933 |
+
<p>= 1.2.7 =</p>
|
4934 |
+
<ul>
|
4935 |
+
<li>FIX: Bug where the GASP Login protection was only working when you had 2-factor authentication enabled.</li>
|
4936 |
+
</ul>
|
4937 |
+
<p>= 1.2.6 =</p>
|
4938 |
+
<ul>
|
4939 |
+
<li>ADDED: Ability to import settings from WordPress Firewall 2 plugin options - note, doesn’t import page and variables whitelisting.</li>
|
4940 |
+
<li>FIX: A reported bug - parameter values could also be arrays.</li>
|
4941 |
+
</ul>
|
4942 |
+
<p>= 1.2.5 =</p>
|
4943 |
+
<ul>
|
4944 |
+
<li>ADDED: New Feature - Option to add a checkbox that blocks automated SPAM Bots trying to log into your site.</li>
|
4945 |
+
<li>ADDED: Added a clear user message when they verify their 2-factor authentication.</li>
|
4946 |
+
<li>FIX: A few bugfixes and logic corrections.</li>
|
4947 |
+
</ul>
|
4948 |
+
<p>= 1.2.4 =</p>
|
4949 |
+
<ul>
|
4950 |
+
<li>CHANGED: Documentation on the dashboard, and the message after installing the firewall have been updated to be clearer and more informative.</li>
|
4951 |
+
<li>FIX: A few bugfixes and logic corrections.</li>
|
4952 |
+
</ul>
|
4953 |
+
<p>= 1.2.3 =</p>
|
4954 |
+
<ul>
|
4955 |
+
<li>FIX: bugfix.</li>
|
4956 |
+
</ul>
|
4957 |
+
<p>= 1.2.2 =</p>
|
4958 |
+
<ul>
|
4959 |
+
<li>FIX: Some warnings and display bugs.</li>
|
4960 |
+
</ul>
|
4961 |
+
<p>= 1.2.1 =</p>
|
4962 |
+
<ul>
|
4963 |
+
<li>ADDED: New Feature - Login Wait Interval. To reduce the effectiveness of brute force login attacks, you can add an interval by<br>
|
4964 |
+
which WordPress will wait before processing any more login attempts on a site.</li>
|
4965 |
+
<li>CHANGED: Optimized some settings for performance.</li>
|
4966 |
+
<li>CHANGED: Cleaned up the UI when the Firewall / Login Protect features are disabled (more to come).</li>
|
4967 |
+
<li>CHANGED: Further code improvements (more to come).</li>
|
4968 |
+
</ul>
|
4969 |
+
<p>= 1.2.0 =</p>
|
4970 |
+
<ul>
|
4971 |
+
<li>ADDED: New Feature - <strong>Login Protect</strong>. Added 2-Factor Login Authentication for all users and their associated IP addresses.</li>
|
4972 |
+
<li>CHANGED: The method for processing the IP address lists is improved.</li>
|
4973 |
+
<li>CHANGED: Improved .htaccess rules (thanks MickeyRoush)</li>
|
4974 |
+
<li>CHANGED: Mailing method now uses WP_MAIL</li>
|
4975 |
+
<li>CHANGED: Lot’s of code improvements.</li>
|
4976 |
+
</ul>
|
4977 |
+
<p>= 1.1.6 =</p>
|
4978 |
+
<ul>
|
4979 |
+
<li>ADDED: Option to include Cookies in the firewall checking.</li>
|
4980 |
+
</ul>
|
4981 |
+
<p>= 1.1.5 =</p>
|
4982 |
+
<ul>
|
4983 |
+
<li>ADDED: Ability to whitelist particular pages and their parameters (see FAQ)</li>
|
4984 |
+
<li>CHANGED: Quite a few improvements made to the reliability of the firewall processing.</li>
|
4985 |
+
</ul>
|
4986 |
+
<p>= 1.1.4 =</p>
|
4987 |
+
<ul>
|
4988 |
+
<li>FIX: Left test path in plugin.</li>
|
4989 |
+
</ul>
|
4990 |
+
<p>= 1.1.3 =</p>
|
4991 |
+
<ul>
|
4992 |
+
<li>ADDED: Option to completely ignore logged-in Administrators from the Firewall processing (they wont even trigger logging etc).</li>
|
4993 |
+
<li>ADDED: Ability to (un)blacklist and (un)whitelist IP addresses directly from within the log.</li>
|
4994 |
+
<li>ADDED: helpful link to IP WHOIS from within the log.</li>
|
4995 |
+
</ul>
|
4996 |
+
<p>= 1.1.2 =</p>
|
4997 |
+
<ul>
|
4998 |
+
<li>CHANGED: Logging now has its own dedicated database table.</li>
|
4999 |
+
</ul>
|
5000 |
+
<p>= 1.1.1 =</p>
|
5001 |
+
<ul>
|
5002 |
+
<li>Fix: Block notification emails weren’t showing the user-friendly IP Address format.</li>
|
5003 |
+
</ul>
|
5004 |
+
<p>= 1.1.0 =</p>
|
5005 |
+
<ul>
|
5006 |
+
<li>You can now specify IP ranges in whitelists and blacklists. To do this separate the start and end address with a hyphen (-) E.g. For everything between 1.2.3.4 and 1.2.3.10, you would do: 1.2.3.4-1.2.3.10</li>
|
5007 |
+
<li>You can now specify which email address to send the notification emails.</li>
|
5008 |
+
<li>You can now add a comment to IP addresses in the whitelist/blacklist. To do this, write your IP address then type a SPACE and write whatever you want (don’t take a new line).</li>
|
5009 |
+
<li>You can now set to delete ALL firewall settings when you deactivate the plugin.</li>
|
5010 |
+
<li>Improved formatting of the firewall log.</li>
|
5011 |
+
</ul>
|
5012 |
+
<p>= 1.0.2 =</p>
|
5013 |
+
<ul>
|
5014 |
+
<li>First Release</li>
|
5015 |
+
</ul>
|
5016 |
+
<p>== Upgrade Notice ==</p>
|
5017 |
+
<p>= 1.1.2 =</p>
|
5018 |
+
<ul>
|
5019 |
+
<li>CHANGED: Logging now has its own dedicated database table.</li>
|
5020 |
+
<li>Fix: Block notification emails weren’t showing the user-friendly IP Address format.</li>
|
5021 |
+
<li>You can now specify IP ranges in whitelists and blacklists. To do this separate the start and end address with a hyphen (-) E.g. For everything between 1.2.3.4 and 1.2.3.10, you would do: 1.2.3.4-1.2.3.10</li>
|
5022 |
+
<li>You can now specify which email address to send the notification emails.</li>
|
5023 |
+
<li>You can now add a comment to IP addresses in the whitelist/blacklist. To do this, write your IP address then type a SPACE and write whatever you want (don’t take a new line).</li>
|
5024 |
+
<li>You can now set to delete ALL firewall settings when you deactivate the plugin.</li>
|
5025 |
+
<li>Improved formatting of the firewall log.</li>
|
5026 |
+
</ul>
|
5027 |
+
|
5028 |
+
</body></html>
|
changelog.txt
ADDED
@@ -0,0 +1,1075 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
= 6.4 Series =
|
3 |
+
*Released: 26th February, 2018* - [Release Notes](http://icwp.io/br)
|
4 |
+
|
5 |
+
* **(v.1-4)** FIXED: Various Fixes
|
6 |
+
* **(v.0)** ADDED: [**PRO**] New Scanner to [detect file changes for active plugins and themes](http://icwp.io/bq)
|
7 |
+
* **(v.0)** IMPROVED: Automatic updates for vulnerable plugins ignores [automatic updates delay setting](http://icwp.io/bc)
|
8 |
+
* **(v.0)** CHANGED: Email notifications for scanners will now link to the Wizard where possible, instead of listing files.
|
9 |
+
|
10 |
+
= 6.3 Series =
|
11 |
+
*Released: 12th February, 2018* - [Release Notes](http://icwp.io/bc)
|
12 |
+
|
13 |
+
* **(v.3)** FIXED: Bug with automatic updates delay setting
|
14 |
+
* **(v.2)** CHANGED: Changed a text that seems to cause servers to swallow-up emails. [See here for more reliable email](http://icwp.io/bi)
|
15 |
+
* **(v.1)** FIXED: Options page javascript to work around conflicts.
|
16 |
+
* **(v.0)** ADDED: [**PRO**] [Automatic updates stability delay](http://icwp.io/bc)
|
17 |
+
* **(v.0)** IMPROVED: Complete [plugin UI rebuild](http://icwp.io/bd), using the new Bootstrap 4.
|
18 |
+
* **(v.0)** FIXED: A few bugs with Google Authenticator.
|
19 |
+
|
20 |
+
= 6.2 Series =
|
21 |
+
*Released: 31st January, 2018* - [Release Notes](http://icwp.io/b6)
|
22 |
+
|
23 |
+
* **(v.2)** FIXED: Fix for IP Manager PHP error.
|
24 |
+
* **(v.2)** IMPROVED: Two-factor verification email.
|
25 |
+
* **(v.1)** FIXED: Bug where administrator login email notification setting is not being honoured.
|
26 |
+
* **(v.1)** IMPROVED: If a site is having trouble with database creation, User Sessions wont lock you out.
|
27 |
+
* **(v.0)** IMPROVED: Major overhaul of the Shield User Sessions system.
|
28 |
+
* **(v.0)** IMPROVED: Link the Security Admin authentication with the new Sessions system.
|
29 |
+
* **(v.0)** IMPROVED: Major overhaul to plugin's user meta data storage, limiting to a single DB entry for all data.
|
30 |
+
* **(v.0)** ADDED: [**PRO**] Ability to increase frequency of file system scans up to once every hour.
|
31 |
+
* **(v.0)** ADDED: [**PRO**] Add a "remember me" option, to allow users to skip Multi-factor authentication for a set number of days.
|
32 |
+
|
33 |
+
= 6.1 Series =
|
34 |
+
*Released: 15th January, 2018* - [Release Notes](http://icwp.io/ay)
|
35 |
+
|
36 |
+
* **(v.1)** FIXED: Verify link missing from the two-factor authentication verification email.
|
37 |
+
* **(v.0)** ADDED: 3x more Shield Wizards: Multi-factor Authentication, Core File Scanning, Unrecognised File Scanning.
|
38 |
+
* **(v.0)** ADDED: You can now use regular expressions for file exclusions in the 'Unrecognised File Scanner'.
|
39 |
+
* **(v.0)** CHANGED: File Scanner email notifications now link to the appropriate scanner wizard directly.
|
40 |
+
* **(v.0)** IMPROVED: Plugin options pages restyling.
|
41 |
+
* **(v.0)** IMPROVED: Plugin refactoring and improvements.
|
42 |
+
|
43 |
+
= 6.0 Series =
|
44 |
+
*Released: 18th December, 2017*
|
45 |
+
|
46 |
+
* **(v.0)** ADDED: All-new Shield Welcome and Setup Wizard - more helpful guided wizards to come.
|
47 |
+
* **(v.0)** ADDED: [**PRO**] [Shield options import and export](http://icwp.io/at)
|
48 |
+
* **(v.0)** ADDED: [**PRO**] In conjunction with import/export - Shield Security Network: automated options syncing.
|
49 |
+
* **(v.0)** CHANGED: Going forward, new features and options will [support only PHP 5.4+](http://icwp.io/au). Existing features will remain unaffected.
|
50 |
+
|
51 |
+
= 5.20 Series =
|
52 |
+
*Released: 11th December, 2017*
|
53 |
+
|
54 |
+
* **(v.0)** IMPROVED: [**PRO**] Audit Trail length are configurable. Length for free is 50 entries (the original unpaginated limit)
|
55 |
+
* **(v.0)** IMPROVED: Large redesign of options sections to be more intuitive and cleaner
|
56 |
+
* **(v.0)** IMPROVED: Added dedicated help section for each module.
|
57 |
+
* **(v.0)** IMPROVED: Certain modules have an new *Actions* centre, such a Audit Trail viewer and User Sessions manager
|
58 |
+
* **(v.0)** IMPROVED: Audit Trails are now ajax-paginated. You can browse through all your audit trail entries
|
59 |
+
* **(v.0)** IMPROVED: User session tables are also ajax-paginated.
|
60 |
+
|
61 |
+
= 5.19 Series =
|
62 |
+
*Released: 4th December, 2017*
|
63 |
+
|
64 |
+
* **(v.1)** FIXED: Plugin Vulnerabilities scan for premium plugins.
|
65 |
+
* **(v.0)** ADDED: [**PRO**] Automated WordPress plugins vulnerability scanner with auto updates email notifications
|
66 |
+
* **(v.0)** ADDED: Added Google reCAPTCHA support for register/forget password pages.
|
67 |
+
* **(v.0)** ADDED: [**PRO**] Support for Multi-Factor Authentication for WooCommerce and other 3rd party plugins.
|
68 |
+
* **(v.0)** ADDED: [**PRO**] Bot-protection/Google reCAPTCHA support for BuddyPress register pages.
|
69 |
+
|
70 |
+
= 5.18 Series =
|
71 |
+
*Released: 27th November, 2017*
|
72 |
+
|
73 |
+
* **(v.0)** ADDED: [**PRO**] Invisible Google reCAPTCHA option.
|
74 |
+
* **(v.0)** ADDED: [**PRO**] Support for Google reCAPTCHA themes - light and dark.
|
75 |
+
* **(v.0)** IMPROVEMENT: Google reCAPTCHA is more reliable and configurable.
|
76 |
+
|
77 |
+
= 5.17 Series =
|
78 |
+
*Released: 23rd November, 2017*
|
79 |
+
|
80 |
+
* **(v.0)** ADDED: Shield Security goes Pro! Added new options and extras to premium clients.
|
81 |
+
* **(v.0)** IMPROVEMENT: Fix and improvement to Google reCAPTCHA.
|
82 |
+
* **(v.0)** ADDED: [**PRO**] Support for Woocommerce and Easy Digital Downloads login/registration form protection.
|
83 |
+
* **(v.0)** ADDED: [**PRO**] Ability to customise most user-facing texts.
|
84 |
+
* **(v.0)** ADDED: [**PRO**] Extra IP Transgression signal.
|
85 |
+
|
86 |
+
= 5.16 Series =
|
87 |
+
*Released: 16th October, 2017*
|
88 |
+
|
89 |
+
With this release, we fixed a clash of options for Google reCAPTCHA. Every attempt was made to ensure no interruption to your existing settings, but please check to ensure your reCAPTCHA settings are as you expect them to be.
|
90 |
+
|
91 |
+
* **(v.4)** FIX: Error with incorrect/unprefixed database table name used in SQL query.
|
92 |
+
* **(v.3)** IMPROVEMENT: Tweak to the Visitor IP Auto-detection to better ensure CloudFlare IP addresses are ignored.
|
93 |
+
* **(v.3)** IMPROVEMENT: Plugin Badge will now stay closed when a visitor closes it.
|
94 |
+
* **(v.2)** FIX: Removed some namespace parsing that broke on sites with PHP 5.2.
|
95 |
+
* **(v.1)** FIX: 404 page displayed for password reset request when Login URL is renamed.
|
96 |
+
* **(v.0)** IMPROVEMENT: Much better auto-detection of valid request/visitor IP addresses.
|
97 |
+
* **(v.0)** FIX: Clashing of reCAPTCHA options for Comments and Login Protection.
|
98 |
+
* **(v.0)** IMPROVEMENT: Statistic Reporting database management and pruning.
|
99 |
+
* **(v.0)** FIX: Various system fixes and improvements.
|
100 |
+
|
101 |
+
= 5.15 Series =
|
102 |
+
*Released: 21st September, 2017*
|
103 |
+
|
104 |
+
* **(v.1)** FIX: Processing AJAX requests from the Network Admin side of WordPress.
|
105 |
+
* **(v.1)** IMPROVEMENTS: Better handling of file exclusions in the Hack Guard module.
|
106 |
+
* **(v.1)** IMPROVEMENTS: Better handling of fatal errors in loading Shield where some core files are missing.
|
107 |
+
* **(v.0)** ADDED: New HTTP Security Header: Referrer Policy.
|
108 |
+
* **(v.0)** ADDED: Supports paths for file exclusions in the Unrecognised File Scanner.
|
109 |
+
* **(v.0)** IMPROVEMENTS: Better interception of unintentional redirects to the hidden Login URL (e.g. /wp-admin/customize.php).
|
110 |
+
* **(v.0)** IMPROVEMENTS: Better handling of email sending entries in the Audit Trail.
|
111 |
+
* **(v.0)** IMPROVEMENTS: Improved (tabbed) display of Audit Trail.
|
112 |
+
* **(v.0)** IMPROVEMENTS: Better generation & handling of the One Time Password for email-based two-factor authentication.
|
113 |
+
* **(v.0)** IMPROVEMENTS: Some code clean up and refactoring.
|
114 |
+
|
115 |
+
= 5.14 Series =
|
116 |
+
*Released: 9th September, 2017*
|
117 |
+
|
118 |
+
* **(v.0)** ADDED: Option for administrators to manually override and set the source of the visitor IP address.
|
119 |
+
* **(v.0)** UPDATED: In-plugin documentation links to updated and revised helpdesk articles/blogs.
|
120 |
+
* **(v.0)** IMPROVEMENTS: Strip out any non-alphanumeric characters uses in the generation of Google Authenticator URLs.
|
121 |
+
* **(v.0)** FIX: Shield now ignores any requests sent to Rest API URIs with respect to Shield user sessions.
|
122 |
+
|
123 |
+
= 5.13 Series =
|
124 |
+
*Released: 15th August, 2017*
|
125 |
+
|
126 |
+
* **(v.2)** IMPROVEMENTS: Small adjustment to handling of Shield User sessions in conjunction with WordPress sessions.
|
127 |
+
* **(v.2)** FIX: Restore display of help links for options.
|
128 |
+
* **(v.1)** FIX: PHP 5.2 incompatibility.
|
129 |
+
* **(v.0)** ADDED: New option for [Unrecognised File Scanner](http://icwp.io/94) to scan the Uploads folder for JS and PHP files.
|
130 |
+
* **(v.0)** ADDED: Option to provide custom list of files to be excluded from the [Unrecognised File Scanner](http://icwp.io/94).
|
131 |
+
|
132 |
+
= 5.12 Series =
|
133 |
+
*Released: 3rd August, 2017*
|
134 |
+
|
135 |
+
* **(v.2)** IMPROVEMENTS: Improved support for Windows IIS hosting for [Unrecognised File Scanner](http://icwp.io/94)
|
136 |
+
* **(v.2)** CHANGED: Removed the email-based 2FA automatic login link.
|
137 |
+
* **(v.2)** FIX: Potential bug with Shield not recognising plugin configuration updates and not rebuilding options accordingly.
|
138 |
+
* **(v.1)** ADDED: A few more exclusions for the [Unrecognised File Scanner](http://icwp.io/94)
|
139 |
+
* **(v.1)** FIX: Fix for Fatal error.
|
140 |
+
* **(v.0)** ADDED: [Unrecognised File Scanner](http://icwp.io/94) release. Automatically detect and delete
|
141 |
+
any files present in core WordPress directories that aren't part of your core installation.
|
142 |
+
* **(v.0)** ADDED: Updated Firewall rules for SQL under the 'Aggressive' rule set.
|
143 |
+
|
144 |
+
= 5.11 Series =
|
145 |
+
*Released: 26th July, 2017*
|
146 |
+
|
147 |
+
* **(v.1)** FIX: JSON syntax
|
148 |
+
* **(v.0)** IMPROVEMENTS: Final preparation for [Shield Central](http://icwp.io/83) release.
|
149 |
+
|
150 |
+
= 5.10 Series =
|
151 |
+
*Released: 19th June, 2017*
|
152 |
+
|
153 |
+
* **(v.2)** FIXED: Fatal error with GASP + Password Reset.
|
154 |
+
* **(v.2)** FIXED: Fatal error with failing reCAPTCHA HTTP requests.
|
155 |
+
* **(v.1)** IMPROVEMENTS: Further preparation for [Shield Central](http://icwp.io/83) release.
|
156 |
+
* **(v.0)** ADDED: More in-depth reporting and statistics gathering - options for reports will be made available
|
157 |
+
in a later release.
|
158 |
+
|
159 |
+
= 5.9 Series =
|
160 |
+
*Released: 31st May, 2017*
|
161 |
+
|
162 |
+
* **(v.0)** ADDED: Help Videos for 1 or 2 modules. More to come and just testing format and uptake.
|
163 |
+
* **(v.0)** ADDED: Special handling for WP Fastest Cache.
|
164 |
+
* **(v.0)** CHANGE: Configuration for automatic self-update for the Shield plugin has been removed.
|
165 |
+
* **(v.0)** CHANGE: No longer remove an existing user session when accessed from another IP address. Just redirect.
|
166 |
+
Protects existing, legitimate sessions from being forcefully expired.
|
167 |
+
* **(v.0)** FIXED: Danish string translation.
|
168 |
+
|
169 |
+
= 5.8 Series =
|
170 |
+
*Released: 7th April, 2017*
|
171 |
+
|
172 |
+
* **(v.2)** IMPROVEMENTS: The core file scanner now works more reliably for international WordPress installations.
|
173 |
+
* **(v.2)** CHANGE: Login Cooldown now uses only the flag file as an indicator of login times.
|
174 |
+
* **(v.2)** CHANGE: Filter to allow for changing the two factor timeout period, from 5 (minutes). Filter: `icwp-wpsf-login_intent_timeout`
|
175 |
+
* **(v.2)** CHANGE: Changed timeout for two-factor authentication email to 5 minutes to account for slower email-sending providers.
|
176 |
+
* **(v.2)** CHANGE: Added further clarification to the Login Notification email indicating that two-factor authentication was pending.
|
177 |
+
* **(v.1)** FIXED: Fixed a couple of bugs with the Login Authentication Portal, for certain edge cases.
|
178 |
+
* **(v.0)** CHANGE: Major overhaul of [Two-Factor / Multi-Factor Login Authentication](http://icwp.io/87).
|
179 |
+
* **(v.0)** CHANGE: [Introduction of Login Authentication Portal](http://icwp.io/86) for improved Multi-Factor Authentication.
|
180 |
+
* **(v.0)** ADDED: Option to choose between two-factor or multi-factor login authentication.
|
181 |
+
* **(v.0)** ADDED: Administrators can remove Google Authenticator from another user's profile.
|
182 |
+
* **(v.0)** ADDED: When Security Admin is active, only Security Admins may remove Google Authenticator from other admins.
|
183 |
+
* **(v.0)** CHANGE: Yubikey login authentication is now managed directly from the User Profile screen, as with Google Authenticator.
|
184 |
+
* **(v.0)** CHANGE: Email-based login authentication no longer uses a separate database table.
|
185 |
+
* **(v.0)** FIXED: Core file scanning now adequately handles Windows/Unix new lines during scan.
|
186 |
+
* **(v.0)** FIXED: Certain crons weren't setup correctly.
|
187 |
+
* **(v.0)** IMPROVEMENTS: Further preparation for [Shield Central](http://icwp.io/83) release.
|
188 |
+
|
189 |
+
= 5.7 Series =
|
190 |
+
|
191 |
+
* **(v.3)** FIXED: Attempt to improve the Google Authenticator flow for more reliable activation.
|
192 |
+
* **(v.2)** IMPROVEMENTS: More admin notices when saving Google Authenticator settings.
|
193 |
+
* **(v.2)** IMPROVEMENTS: Further preparation for [Shield Central](http://icwp.io/83) release.
|
194 |
+
* **(v.1)** Skipped
|
195 |
+
* **(v.0)** ADDED: Shortcode for displaying plugin badge in pages/posts.
|
196 |
+
* **(v.0)** CHANGE: Enabled JS eval() for the Content Security Policy by default.
|
197 |
+
* **(v.0)** IMPROVEMENTS: Replace YAML configuration files with JSON.
|
198 |
+
* **(v.0)** IMPROVEMENTS: Preparation for [Shield Central](http://icwp.io/83) release.
|
199 |
+
* **(v.0)** IMPROVEMENTS: Security Admin notices are more refined and optimized.
|
200 |
+
* **(v.0)** IMPROVEMENTS: Removed unnecessary files/code.
|
201 |
+
|
202 |
+
= 5.6 Series =
|
203 |
+
|
204 |
+
* **(v.2)** CHANGE: Fix an instance where the hidden Login URL would be leaded.
|
205 |
+
* **(v.1)** CHANGE: Replaying of Yubikey one-time-passwords is no longer permitted.
|
206 |
+
* **(v.1)** ADDED: Filter for login form GASP fields.
|
207 |
+
* **(v.1)** ADDED: Filter for comment form GASP fields.
|
208 |
+
* **(v.1)** CHANGE: Improved compatibility of HTTP Headers with WP Super Cache.
|
209 |
+
* **(v.0)** ADDED: Option to disable anonymous Rest API access. WordPress v4.7+ only. Note that if another plugin
|
210 |
+
or service authenticates the request it will be honoured, whether anonymous or not.
|
211 |
+
= 5.5 Series =
|
212 |
+
|
213 |
+
* **(v.6)** IMPROVED: Fixed possible leak of the Login URL from the 'Hide WP Login URL' feature.
|
214 |
+
* **(v.5)** ADDED: Ability to add custom protocols to the domains (apart from http/s) to the Content Security Policy
|
215 |
+
* **(v.5)** FIXED: Bug where automatic update emails would contain empty plugins.
|
216 |
+
* **(v.5)** FIXED: Javascript scope on GASP form elements.
|
217 |
+
* **(v.5)** FIXED: Various fixes and code improvements.
|
218 |
+
* **(v.4)** FIXED: Bug with data cleaning/storage that caused stored options to balloon resulting in database timeouts. (only certain options affected)
|
219 |
+
* **(v.4)** IMPROVED: Sometimes "anti-virus" scanners scared normal, everyday hard-working folk by identifying a Shield file as being a virus, because they're not very clever - reduced chances of this.
|
220 |
+
* **(v.3)** ADDED: Fix for WordPress Multisite where the correct database prefix wasn't being used.
|
221 |
+
* **(v.2)** ADDED: Filter to allow modification of the email footer
|
222 |
+
* **(v.2)** ADDED: Block auto-updates on Shield itself if PHP < 5.3 and new version is v6.0+
|
223 |
+
* **(v.2)** FIXED: Missing Link
|
224 |
+
* **(v.2)** FIXED: Plugin Installation ID wasn't always being set
|
225 |
+
* **(v.2)** TRANSLATIONS: Dutch (56%)
|
226 |
+
* **(v.1)** ADDED: Built-in forceful protection in the form of a wp_die() against the (currently) un-patched W3 Total Cache XSS vulnerability [more info](http://icwp.io/7j)
|
227 |
+
* **(v.1)** IMPROVED: Better XMLRPC Lockdown - prevents ANY XMLRPC command processing.
|
228 |
+
* **(v.1)** IMPROVED: Make certain strings translatable
|
229 |
+
* **(v.1)** IMPROVED: Wrap-up certain login form elements into spans/divs to allow styling etc.
|
230 |
+
* **(v.1)** IMPROVED: PHP Version number cleaning during stats tracking.
|
231 |
+
* **(v.0)** ADDED: Options and statistics tracking ability. Over time we are looking to share statistics and performance metrics of Shield.
|
232 |
+
* **(v.0)** IMPROVED: Performance for options loading, especially for web hosts that don't permit file writing
|
233 |
+
* **(v.0)** CHANGED: Numerous fixes and code improvements.
|
234 |
+
* **(v.0)** CHANGED: Removed query that deletes old GASP comment tokens on normal page loads.
|
235 |
+
* **(v.0)** CHANGED: Google reCAPTCHA is now based on the locale of the website, not auto-detected.
|
236 |
+
* **(v.0)** FIXED: Now URL encodes the username in the link for two-factor authentication by email.
|
237 |
+
* **(v.0)** FIXED: If the xmlrpc.php has been deleted, this is now ignore by the file scanner
|
238 |
+
* **(v.0)** TRANSLATIONS: Dutch (38%), Portuguese (32%)
|
239 |
+
|
240 |
+
= 5.4 Series =
|
241 |
+
|
242 |
+
* **(v.5)** CHANGED: User Management module is no-longer enabled by default on clean installations
|
243 |
+
* **(v.5)** CHANGED: Made the GASP checkbox for Login protection clickable by label. [Thanks Aubrey!](https://github.com/FernleafSystems/Shield/pull/22)
|
244 |
+
* **(v.5)** CHANGED: Shield Statistics only shows for WordPress admins (instead of all users)
|
245 |
+
* **(v.5)** FIXED: Added a couple of guards to ensure data is of the correct format to prevent spurious errors
|
246 |
+
* **(v.5)** FIXED: Bug where automatic file repair links from emails we're not working.
|
247 |
+
* **(v.4)** SKIPPED.
|
248 |
+
* **(v.3)** FIXED: Various fixes and improvements
|
249 |
+
* **(v.3)** CHANGED: Lots of cleaning of old code.
|
250 |
+
* **(v.3)** REMOVED: Various old, unused options, and the force_ssl_login option as it's deprecated by WordPress Core
|
251 |
+
* **(v.3)** TRANSLATIONS: Dutch (36%), Swedish (35%)
|
252 |
+
* **(v.3)** FIXED: Various fixes and improvements
|
253 |
+
* **(v.3)** CHANGED: Lots of cleaning of old code.
|
254 |
+
* **(v.3)** REMOVED: Various old, unused options, and the force_ssl_login option as it's deprecated by WordPress Core
|
255 |
+
* **(v.3)** TRANSLATIONS: Dutch (36%), Swedish (35%)
|
256 |
+
* **(v.2)** ADDED: A guard around certain modules like, User Sessions, to ensure the DB has been initiated properly before use.
|
257 |
+
* **(v.2)** ADDED: Exclusion for Swedish license files that don't exist in the SVN repo.
|
258 |
+
* **(v.2)** ADDED: Parameter exclusion for reCAPTCHA.
|
259 |
+
* **(v.2)** CHANGED: [HTTP Security Headers](http://icwp.io/7b) module is enabled by default on new installs.
|
260 |
+
* **(v.1)** FIXED: Nasty bug that caused an infinite loop bug in some configurations.
|
261 |
+
* **(v.0)** ADDED: Per-site plugin statistics gathering - summary display on admin dashboard.
|
262 |
+
* **(v.0)** ADDED: HTML class to the "I'm a human" checkbox field.
|
263 |
+
* **(v.0)** ADDED: Ability to change minimum user role for login notification emails with use of `add_filter()`. See FAQs.
|
264 |
+
* **(v.0)** REMOVED: Option 'Prevent Remote Login' causes more trouble with than it's worth with too many hosting configurations.
|
265 |
+
* **(v.0)** CHANGED: For websites that don't run WP Crons correctly, added code for automatic database cleaning.
|
266 |
+
* **(v.0)** CLEANED: Removed Twig render code as it was never being used.
|
267 |
+
|
268 |
+
= 5.3 Series =
|
269 |
+
|
270 |
+
* **(v.2)** IMPROVED: [HTTP Security Headers](http://icwp.io/7b) Content Security Policy now supports specifying HTTPS for domains/hosts.
|
271 |
+
* **(v.2)** FIXED: Human Comment SPAM Feature didn't fire under certain circumstances.
|
272 |
+
* **(v.2)** FIXED: Fixed parsing of Human Comment SPAM dictionary words.
|
273 |
+
* **(v.1)** TRANSLATIONS: Dutch (32%)
|
274 |
+
* **(v.0)** ADDED: New Feature - [HTTP Security Headers](http://icwp.io/7b).
|
275 |
+
* **(v.0)** FIXED: Prevent renaming WP Login to "/login"
|
276 |
+
|
277 |
+
= 5.2 Series =
|
278 |
+
|
279 |
+
* **(v.0)** ADDED: Guard against core file scanner and automatic WordPress updates clashing.
|
280 |
+
* **(v.0)** CHANGED: Logic for brute force login checking is improved - they all run before username/password checking
|
281 |
+
* **(v.0)** FIXED: Certain older versions of PHP don't like combined IPv4 and IPv6 filter flags
|
282 |
+
* **(v.0)** FIXED: Google reCAPTCHA for WordPress sites that have restrictive settings for sockets etc.
|
283 |
+
* **(v.0)** REMOVED: [Plugin vulnerabilities scanner](http://icwp.io/75). It's out-of-date and unsuitable.
|
284 |
+
|
285 |
+
= 5.1 Series =
|
286 |
+
|
287 |
+
* **(v.0)** FIXED: Improved compatibility with bbPress.
|
288 |
+
* **(v.0)** CHANGED: Optimizations around options and definitions (storing fewer options data)
|
289 |
+
* **(v.0)** CHANGED: Improved styling and responsiveness of plugin badge.
|
290 |
+
* **(v.0)** ADDED: Ability to programmatically export/import options - further preparation for iControlWP+Shield integration.
|
291 |
+
* **(v.0)** FIXED: Issue where Core automatic updates would fail, but notification email was sent anyway
|
292 |
+
|
293 |
+
= 5.0 Series =
|
294 |
+
|
295 |
+
* **(v.3)** FIXED: Issue with setting session cookies with PHP 7
|
296 |
+
* **(v.2)** FIXED: [Rename WordPress Login URL](http://icwp.io/5s) bug
|
297 |
+
* **(v.2)** CHANGED: reCAPTCHA text usage corrected throughout plugin.
|
298 |
+
* **(v.1)** CHANGED: Removed the whole 'wp-content' directory from the [Core File Scanner](http://icwp.io/wpsf40) feature.
|
299 |
+
* **(v.1)** CHANGED: A WordPress filter to change the plugin badge text content (see FAQ)
|
300 |
+
* **(v.1)** CHANGED: Tweaked the plugin badge styling.
|
301 |
+
* **(v.1)** CHANGED: All emails sent by the plugin contain the name of the site and the current plugin version in the email footer.
|
302 |
+
* **(v.1)** ADDED: In-plugin links to blogs and info articles for Google ReCaptcha and [Google Authenticator](http://icwp.io/wpsf43)
|
303 |
+
* **(v.0)** NEW: WordPress Simple Firewall plugin has been re-branded and is called **Shield**
|
304 |
+
* **(v.0)** ADDED: NEW feature - [Google ReCaptcha](http://icwp.io/shld2) for Comment SPAM and Login protection.
|
305 |
+
* **(v.0)** ADDED: Support for this plugin is now Premium. Added Premium Support page that links to Helpdesk.
|
306 |
+
* **(v.0)** CHANGED: Refactor of comment spam code.
|
307 |
+
* **(v.0)** CHANGED: Core File Scanner now handles the odd Hungarian distribution.
|
308 |
+
|
309 |
+
= 4.17 Series =
|
310 |
+
*Released: 17th February, 2016*
|
311 |
+
|
312 |
+
* **(v.0)** ADDED: NEW feature - [Google Authenticator Login option](http://icwp.io/wpsf43).
|
313 |
+
* **(v.0)** ADDED: [Core File Scanner](http://icwp.io/wpsf40) now includes an automatic link to repair files (you must be logged in as admin for this link to work!).
|
314 |
+
* **(v.0)** ADDED: NEW - if you already have a logged-in session and you open the login screen, you'll be provided with a link to go straight to the admin area.
|
315 |
+
* **(v.0)** CHANGED: Email-based Two-Factor Authentication is now stateless/session-less - it will not check validity per-page load.
|
316 |
+
* **(v.0)** CHANGED: Changes to the email-based authentication system - now only 1 option and it no longer locks to IP or browser.
|
317 |
+
* **(v.0)** CHANGED: Various efficiency improvements including reduced SQL updates.
|
318 |
+
* **(v.0)** CHANGED: Email system is improved and now send emails from the default WordPress sender. This may be [changed with filter](https://icontrolwp.freshdesk.com/support/solutions/articles/3000048723).
|
319 |
+
|
320 |
+
= 4.16 Series =
|
321 |
+
*Released: 20th January, 2016*
|
322 |
+
|
323 |
+
* **(v.2)** CHANGED: Further changes and improvements to the [Core File Scanner](http://icwp.io/wpsf40).
|
324 |
+
* **(v.2)** CHANGED: Improvements to the [automatic black list system](http://icwp.io/wpsf27) for failed login attempts.
|
325 |
+
* **(v.2)** TRANSLATIONS: Turkish (100%)
|
326 |
+
* **(v.1)** CHANGED: Improved the contents of the [Core File Scanner](http://icwp.io/wpsf40) notification email with links to original source files.
|
327 |
+
* **(v.1)** CHANGED: Now also excluding the /wp-content/languages/ directory since translations may update independently.
|
328 |
+
* **(v.1)** CHANGED: Handles the special case of [old index.php files](https://wordpress.org/support/topic/problem-with-checksum-hashes)
|
329 |
+
* **(v.0)** ADDED: Feature: [Automatically scans WordPress Core files](http://icwp.io/wpsf40) and detects alterations from the default WordPress Core File data
|
330 |
+
* **(v.0)** ADDED: Feature: to automatically attempt to repair/replace WordPress Core files that are discovered which have been altered.
|
331 |
+
* **(v.0)** ADDED: Option to toggle the [Plugin Vulnerabilities cron](http://icwp.io/wpsf41).
|
332 |
+
* **(v.0)** ADDED: Two-Factor Authentication links now honour the WordPress 'redirect_to' parameter.
|
333 |
+
|
334 |
+
= 4.15 Series =
|
335 |
+
*Released: 6th January, 2016*
|
336 |
+
|
337 |
+
* **(v.0)** ADDED: New and updated Firewall rules as well as a new 'Aggressive' option that looks for additional request data. Disabled by default, but may cause an increase in false positives.
|
338 |
+
* **(v.0)** CHANGED: Improved and optimized Firewall processing.
|
339 |
+
* **(v.0)** FIXED: [Issue](https://github.com/FernleafSystems/wp-simple-firewall/issues/3) where automatic update notification emails are sent out without any update notices (probably due to failed updates).
|
340 |
+
* **(v.0)** FIXED: Small conflict with WP Login Rename and other security plugins.
|
341 |
+
* **(v.0)** TRANSLATIONS: Czech (91%), Finnish (98%), Turkish (98%).
|
342 |
+
|
343 |
+
= 4.14 Series =
|
344 |
+
*Released: 20th November, 2015*
|
345 |
+
|
346 |
+
* **(v.2)** ADDED: User notice message displayed when the 'Theme My Login' plugin is active and you try to rename your login URL - It is not compatible.
|
347 |
+
* **(v.1)** ADDED: Added WordPress filter option to specify URL instead of present a 404 when Rename WP Login is active. [more info](https://icontrolwp.freshdesk.com/solution/articles/3000044812)
|
348 |
+
* **(v.1)** ADDED: Added 'Unique Plugin Installation ID' to be utilized in the future.
|
349 |
+
* **(v.1)** FIXED: WordPress Comments bug where some comments didn't pass through the SPAM filters in a certain scenario.
|
350 |
+
* **(v.0)** ADDED: [Custom Automatic Update Notifications Email](http://icwp.io/wpsf33) that runs separately to the in-built WordPress core notification email.
|
351 |
+
* **(v.0)** ADDED: Filter to remove the admin area IP address footer text
|
352 |
+
* **(v.0)** CHANGED: Added native support for PayPal return links - whitelisting "verify_sign" parameter.
|
353 |
+
* **(v.0)** CHANGED: Tweak patterns for matching on 'WordPress terms'.
|
354 |
+
* **(v.0)** TRANSLATIONS: Danish (100%), Czech (92%), Turkish (92%), Finnish (88%),
|
355 |
+
* **(v.0)** FIXED: Small bugs and readying for WordPress 4.4
|
356 |
+
|
357 |
+
= 4.13 Series =
|
358 |
+
*Released: 22nd October, 2015*
|
359 |
+
|
360 |
+
* **(v.0)** NEW: Added option to block the modification, addition/promotion and deletion of WordPress administrators users within the 'Security Admin' module.
|
361 |
+
* **(v.0)** NEW: Renamed 'Admin Access' module to 'Security Admin'.
|
362 |
+
* **(v.0)** CHANGED: Simplified and consolidated the use of cookies for User Session - sets and removes cookies better to reduce their usage.
|
363 |
+
* **(v.0)** CHANGED: Simplified and consolidated the use of cookies for Two Factor Login Authentication.
|
364 |
+
* **(v.0)** CHANGED: Cleaned up some Comment SPAM filtering code.
|
365 |
+
* **(v.0)** CHANGED: Comments Filter doesn't use cookies unless a session cookie for the visitor already exists.
|
366 |
+
* **(v.0)** CHANGED: IP Manager Automatic Black List - default black list duration is now 1 minute & default transgressions limit is 10
|
367 |
+
* **(v.0)** CHANGED: Improvements to the database create queries: use MySQL Engine defaults (instead of MyISAM); use WordPress dbDelta() for updates.
|
368 |
+
* **(v.0)** CHANGED: Various code optimizations and cleaning.
|
369 |
+
|
370 |
+
= 4.12 Series =
|
371 |
+
*Released: 10th October, 2015*
|
372 |
+
|
373 |
+
* **(v.0)** NEW: Option to completely disable the XML-RPC system. [more info](http://icwp.io/wpsf31)
|
374 |
+
* **(v.0)** CHANGED: Logged-in users are automatically forwarded to the WordPress admin only if they are Administrators.
|
375 |
+
|
376 |
+
= 4.11 Series =
|
377 |
+
*Released: 5th October, 2015*
|
378 |
+
|
379 |
+
* **(v.0)** NEW: Ability to now completely block the update/changing of certain WordPress site options. [more info](http://icwp.io/wpsf30)
|
380 |
+
* **(v.0)** FIXED: Various small bugs with the IP Manager UI ajax.
|
381 |
+
* **(v.0)** FIXED: Uncaught PHP Exception when a site's hosting isn't properly configured to handle IPv6 addresses.
|
382 |
+
* **(v.0)** TRANSLATIONS: Danish - 57%, Czech - 100%, Finnish - 94%
|
383 |
+
|
384 |
+
= 4.10 Series =
|
385 |
+
*Released: 23rd August, 2015*
|
386 |
+
|
387 |
+
* **(v.4)** REFACTOR: Notifications system is more reliable and most notices can be hidden/closed (at least for the current page load as some notices are persistent).
|
388 |
+
* **(v.4)** REMOVED: The old manual black list option has been completely removed - in favour of the automatic black list system.
|
389 |
+
* **(v.4)** CHANGED: Revised the order of certain hooks being created to avoid the possibility of pluggable.php not being loaded for PHP Shutdown.
|
390 |
+
* **(v.4)** CHANGED: The presence of IP addresses in the IP Whitelist will force the IP Manager feature to be enabled.
|
391 |
+
* **(v.4)** CHANGED: We now make an attempt to prevent the caching of WordPress wp_die() pages that we generate. (compatible with at least W3TC, Super Cache)
|
392 |
+
* **(v.4)** TRANSLATIONS: Turkish - 100%, Danish - 3%
|
393 |
+
|
394 |
+
* **(v.3)** FIXED: Another PHP 5.2 incompatibility.
|
395 |
+
* **(v.2)** ADDED: White Listing UI to the IP Manager - CIDR ranges are supported (also automatically migrates IPs, except ranges, from legacy to new)
|
396 |
+
* **(v.2)** ADDED: Returned the black marking of failed WP login attempts to the automatic black list system
|
397 |
+
* **(v.2)** ADDED: Using a 3rd party API service: [ipify.org](https://www.ipify.org/) - to find the server's own IP address so we can ensure it's not used in the black lists
|
398 |
+
* **(v.2)** CHANGED: AJAX calls are handled more robustly with actual error messages where possible.
|
399 |
+
* **(v.2)** FIXED: A few black list processing bugs.
|
400 |
+
|
401 |
+
* **(v.1)** ADDED: UI to view and remove IP address from Automatic Black List Engine.
|
402 |
+
* **(v.1)** FIX: Removed transgression counting on failed logins - WP data is inconsistent.
|
403 |
+
* **(v.1)** CHANGED: Original legacy white list now takes priority over new auto black list
|
404 |
+
* **(v.1)** CHANGED: Default transgressions limit is now 7
|
405 |
+
* **(v.1)** ADDED: Ability to reset plugin options to default using 'reset' flag file. [more info](http://icwp.io/wpsf28)
|
406 |
+
* **(v.0)** NEW FEATURE: 'FABLE' - [Fully Automatic Black Listing Engine](http://icwp.io/wpsf27).
|
407 |
+
|
408 |
+
Simply put, FABLE will automatically block all malicious traffic by IP, based on their activity. This Security Plugin will track malicious behaviour
|
409 |
+
and count all transgressions that visitors make against the site. Once a particular visitor exceeds the specified number transgressions, FABLE
|
410 |
+
will outright block any access they have to your WordPress site.
|
411 |
+
|
412 |
+
What makes the FABLE system better?
|
413 |
+
|
414 |
+
* Hands Free - Automatic. No more need for maintaining manual black lists.
|
415 |
+
* Loads first before other plugins.
|
416 |
+
* Automatic pruning. Based on expiration time you specify, older IP address will be removed.
|
417 |
+
* Increased Performance. With automatic pruning, IP look-up tables remain small and concise so page load times for legitimate visitors is minimally affected.
|
418 |
+
* Adaptive. It wont just block based on 1 misdemeanour - instead you may allow any given visitor grace to legitimately get things wrong (like login passwords).
|
419 |
+
* Intelligent. With an fully integrated plugin such as this, it uses login failure attempts, spam comment attempts, login brute force attempts to capture malicious visitors.
|
420 |
+
|
421 |
+
Which actions will trigger an ABLE transgression?
|
422 |
+
|
423 |
+
* Attempt to login with an invalid username/password combination
|
424 |
+
* Any attempt to login while the login cooldown system is in-effect
|
425 |
+
* Any login attempt that trips the GASP Login protection system
|
426 |
+
* Any login attempt with a username that doesn't exist
|
427 |
+
* Any attempt to access /wp-admin/, /login/, or wp-login.php while the Rename WP Login setting is active
|
428 |
+
* Any comment that gets labelled as SPAM by the plugin
|
429 |
+
* Failed attempt to authenticate with the plugin's Admin Access Protection module
|
430 |
+
* Any trigger of a Firewall block rule
|
431 |
+
|
432 |
+
= 4.9 Series =
|
433 |
+
*Released: 7th July, 2015*
|
434 |
+
|
435 |
+
* **(v.8)** CHANGED: Firewall, User Sessions and Lockdown Feature Modules are now enabled by default for new installations.
|
436 |
+
* **(v.8)** FIX: Some server email programs can't handle colons (:) in the email subject (because supporting all characters would be waaay too radical man).
|
437 |
+
* **(v.8)** ADDED: Function to better get the WordPress home URL to prevent interference from other plugins.
|
438 |
+
* **(v.8)** CHANGED: Updated Text For [Author Scan Block](http://icwp.io/6e) feature.
|
439 |
+
* **(v.7)** CHANGED: How author query blocking works to be more reliable and stricter - only runs when users are not logged in, and it will DIE instead of redirect.
|
440 |
+
* **(v.6)** ADDED: New Option: prevent detection of usernames using the ?author=N query. (location under section: Lockdown -> Obscurity)
|
441 |
+
* **(v.6)** FIXED: Infinite redirect loop logic prevents redirect for rejected comment SPAM that's posted in bulk. This results in email notifications for spam comments.
|
442 |
+
* **(v.5)** ADDED: The plugin will load itself first before all other plugins
|
443 |
+
* **(v.5)** FIXED: No longer using parse_url() to determine the request URL as it's too inconsistent and unreliable.
|
444 |
+
* **(v.4)** FIX: Audit Trail Viewer display issue with non-escaped HTML (Thanks Chris!)
|
445 |
+
* **(v.4)** ADDED: An admin warning for sites with PHP version less than 5.3.2 (future versions will require this as a minimum)
|
446 |
+
* **(v.4)** TRANSLATIONS: Danish - 6%, Spanish - 76%
|
447 |
+
* **(v.3)** ADDED: Further checking for availability of certain PHP/server data before enabling the rename WordPress login feature
|
448 |
+
* **(v.3)** ADDED: Option to add the Plugin Badge as a Widget to your side-bar or page footer, or any other widget area.
|
449 |
+
* **(v.3)** TRANSLATIONS: Polish - 100%
|
450 |
+
* **(v.2)** ADDED: Email notifications sent out to report email address on a daily cron. [more info](https://www.icontrolwp.com/2015/07/plugin-vulnerability-email-notifications/)
|
451 |
+
* **(v.2)** FIX: Work around a WordPress inline plugin update Javascript bug.
|
452 |
+
* **(v.1)** FIX: Fix syntax support for earlier versions of PHP.
|
453 |
+
* **(v.0)** FEATURE: Plugin Vulnerabilities Detection: If you're running plugins with known vulnerabilities you will be warned - [more info](http://icwp.io/wpsf22)
|
454 |
+
|
455 |
+
= 4.8 Series =
|
456 |
+
*Released: 21st June, 2015*
|
457 |
+
|
458 |
+
* **(v.0)** FEATURE: Admin Access Restriction Areas - Restrict access to certain WordPress areas and functionality to **Administrators** with the Admin Access key.
|
459 |
+
* **(v.0)** ADDED: Admin Access Restriction Area - Plugins. You can now restrict access to certain Plugin actions - activate, install, update, delete.
|
460 |
+
* **(v.0)** ADDED: Admin Access Restriction Area - Themes. You can now restrict access to certain Theme actions - activate, install, update, delete.
|
461 |
+
* **(v.0)** ADDED: Admin Access Restriction Area - Pages/Post. You can now restrict access to certain Page/Post actions - Create/Edit, Publish, Delete.
|
462 |
+
|
463 |
+
= 4.7 Series =
|
464 |
+
*Released: 29th April, 2015*
|
465 |
+
|
466 |
+
* **(v.7)** FIXED: The text used to explain why some comments were marked as spam was broken.
|
467 |
+
* **(v.7)** FIXED: Group sign-up form now honours your SSL setting.
|
468 |
+
* **(v.7)** TRANSLATIONS: Spanish - 74%, Russian - 91%, Turkish - 94%, Polish- 95%, Finnish - 100%
|
469 |
+
* **(v.6)** FIXED: Verifying ability to send/receive email doesn't complete if Admin Access Protection is turned on.
|
470 |
+
* **(v.6)** FIXED: GASP Login Protection feature breaks because certain key options aren't initialized when the feature is enabled.
|
471 |
+
* **(v.6)** FIXED: Some "more info" links were empty.
|
472 |
+
* **(v.4)** ADDED: Email Sending Verification when enabling two-factor authentication - this ensures your site can send (and you can receive) emails.
|
473 |
+
* **(v.4)** ADDED: Section Summaries - each option tab contains a small text summary outlining the purpose and recommendation for each.
|
474 |
+
* **(v.4)** CHANGED: The Admin Access Key input is now a password field.
|
475 |
+
* **(v.4)** CHANGED: Custom Login URL now works with or without trailing slash.
|
476 |
+
* **(v.4)** CHANGED: Streamlining and improvement of PHP UI templates
|
477 |
+
* **(v.4)** ADDED: Implemented TWIG for templates (not yet activated)
|
478 |
+
* **(v.4)** TRANSLATIONS: Romanian (100%), Spanish-Spain (63%)
|
479 |
+
* **(v.3)** ADDED: Integrated protection against 2x RevSlider vulnerabilities (Local File Include and Arbitrary File Upload)
|
480 |
+
* **(v.3)** CHANGED: Reverted the addition of Permalinks/Rewrite rules flushing, in case this is a problem for some.
|
481 |
+
* **(v.2)** UPDATED/FIX: Major fixes and improvements to the rename wp-login.php feature.
|
482 |
+
* **(v.2)** TRANSLATIONS: Mexican-Spanish (61%), Arabic (38%)
|
483 |
+
* **(v.1)** FIX: Silence warnings from filesystem touch() command.
|
484 |
+
* **(v.1)** TRANSLATIONS: Polish (100%), Finnish (100%), Czech (73%), Arabic (34%)
|
485 |
+
* **(v.0)** UPDATED: Options page user interface re-design.
|
486 |
+
* **(v.0)** FIX: Audit trail time now reflects the user's timezone correctly.
|
487 |
+
* **(v.0)** FIX: Better compatibility with BBPress.
|
488 |
+
* **(v.0)** UPDATED: Underlying plugin code improvements.
|
489 |
+
* **(v.0)** TRANSLATIONS: Russian (100%), Czech (70%), Polish (97%)
|
490 |
+
|
491 |
+
= 4.6 Series =
|
492 |
+
*Released: 10th April, 2015*
|
493 |
+
|
494 |
+
* **(v.3)** SECURITY: Added protection against XSS vulnerability in WordPress comments. [Learn More](http://icwp.io/63) - Note: This is not a vulnerability with the Firewall plugin.
|
495 |
+
* **(v.3)** SECURITY: Added extra precautions to WordPress URL redirects. [Learn More](http://icwp.io/64).
|
496 |
+
* **(v.3)** TRANSLATIONS: Russian (70%), Czech (67%)
|
497 |
+
* **(v.2)** FIX: Bug with the database table verification logic.
|
498 |
+
* **(v.2)** TRANSLATIONS: Russian (New- 54%), Romanian (100%), Turkish (89%), Czech (53%)
|
499 |
+
* **(v.1)** FIX: XMLRPC compatibility logic was preventing other non-XMLRPC related code from running.
|
500 |
+
* **(v.1)** UPDATED: Plugin Badge styling
|
501 |
+
* **(v.1)** UPDATED: Updated Czech(41%) and Spanish (60%) translations
|
502 |
+
* **(v.0)** ADDED: New feature that displays the last login time for all users on the users listing page (User Management feature must be enabled).
|
503 |
+
* **(v.0)** ADDED: **Completely optional** promotional Plugin Badge option - help us promote the plugin and reassure your site visitors at the same time. [Learn More](http://icwp.io/5x)
|
504 |
+
* **(v.0)** UPDATED: Updated Czech(38%) translations
|
505 |
+
|
506 |
+
= 4.5 Series =
|
507 |
+
*Released: 6th March, 2015*
|
508 |
+
|
509 |
+
* **(v.5)** CHANGED: Updated Finnish (100%), Czech (16%) translations
|
510 |
+
* **(v.5)** CHANGED: Change logs now more clearly display changes between versions
|
511 |
+
* **(v.5)** FIX: Small translation coverage
|
512 |
+
* **(v.4)** ADDED: New and updated language translations including Polish (100%), Finnish
|
513 |
+
* **(v.4)** FIX: Better string translation coverage for menus etc.
|
514 |
+
* **(v.3)** ADDED: New and updated language translations including Polish, Czech and German
|
515 |
+
* **(v.3)** CHANGED: Only set the plugin cookie if necessary
|
516 |
+
* **(v.2)** CHANGED: Attempt to resolve DB errors related to transient options reported on WP Engine
|
517 |
+
* **(v.1)** ADDED: New feature- GASP Login Protection can now be applied to lost password form - enabled by default
|
518 |
+
* **(v.0)** ADDED: New feature- GASP Login Protection can now be applied to user registrations - enabled by default
|
519 |
+
|
520 |
+
= 4.4 Series =
|
521 |
+
*Released: 21st February, 2015*
|
522 |
+
|
523 |
+
* **(v.2)** ADDED: Romanian Translation.
|
524 |
+
* **(v.2)** ADDED: A plugin minimum-requirements processing system.
|
525 |
+
* **(v.2)** IMPROVED: The WordPress admin-UI code is simpler and cleaner.
|
526 |
+
* **(v.1)** ADDED: **Significant** performance enhancement in plugin loading times (up to 50% reduction).
|
527 |
+
* **(v.0)** CHANGED: The 'Prevent Remote Login' option now tries to detect web hosting server compatibility before allowing it to be enabled.
|
528 |
+
* **(v.0)** CHANGED: More lax in finding the 'forceOff' file when users are trying to turn off the firewall.
|
529 |
+
* **(v.0)** CHANGED: Parsing the URL no longer outputs warnings that might interfere with response headers.
|
530 |
+
|
531 |
+
= 4.3 Series =
|
532 |
+
*Released: 15th January, 2015*
|
533 |
+
|
534 |
+
* **(v.6)** FIXES: More thorough validation of whitelisted IP addresses
|
535 |
+
* **(v.5)** FIXES: Some hosting environments need absolute file paths for PHP include()/require()
|
536 |
+
* **(v.5)** CHANGED: Streamlined the detection of whitelisting and added in-plugin notification if **you** are whitelisted
|
537 |
+
* **(v.4)** FIXES: Work around for cases where PHP can't successfully run parse_url()
|
538 |
+
* **(v.2)** IMPROVED: Refactoring for better code organisation
|
539 |
+
* ADDED: New Feature - [Rename WP Login Page](http://icwp.io/5s).
|
540 |
+
* ADDED: UI indicators on whether plugins will be automatically updated in the plugins listing.
|
541 |
+
* CHANGED: IP Address WhiteList is now global for the whole plugin, and can be accessed under the "Dashboard" area
|
542 |
+
* IMPROVED: Firewall processing code is simplified and more efficient.
|
543 |
+
|
544 |
+
= 4.2.1 =
|
545 |
+
*Released: 22th December, 2014*
|
546 |
+
|
547 |
+
* FIXED: Changes to how feature specifications are read from disk to prevent .tmp file build up.
|
548 |
+
|
549 |
+
= 4.2.0 =
|
550 |
+
*Released: 12th December, 2014*
|
551 |
+
|
552 |
+
* ADDED: Audit Trail Auto Cleaning - default cleans out entries older than 30 days.
|
553 |
+
* FIXED: Various small bug fixes and code cleaning.
|
554 |
+
|
555 |
+
= 4.1.4 =
|
556 |
+
*Released: 24th November, 2014*
|
557 |
+
|
558 |
+
* FIXED: Fixed small logic bug which prevented deactivation of the plugin on the UI.
|
559 |
+
|
560 |
+
= 4.1.3 =
|
561 |
+
*Released: 19th November, 2014*
|
562 |
+
|
563 |
+
* IMPROVED: User Sessions are simplified.
|
564 |
+
* UPDATED: a few translation files based on the latest available contributions.
|
565 |
+
|
566 |
+
= 4.1.2 =
|
567 |
+
|
568 |
+
* ADDED: Self-correcting database table validation - if the structure of a database table isn't what is expected, it'll be re-created.
|
569 |
+
|
570 |
+
= 4.1.1 =
|
571 |
+
|
572 |
+
* WARNING: Due to new IPv6 support, all databases tables will be rebuilt - all active user sessions will be destroyed.
|
573 |
+
* ADDED: Preliminary support for IPv6 addresses throughout. We don't support whitelist ranges but IPv6 addresses are handled much more reliably in general.
|
574 |
+
* ADDED: New audit trail concept added called "immutable" that represents entries that will never be deleted - such entries would usually involve actions taken on the audit trail itself.
|
575 |
+
* FIXED: Support for audit trail events with longer names.
|
576 |
+
* IMPROVED: Comments Filtering - It now honours the WordPress settings for previously approved comment authors and never filters such comments.
|
577 |
+
* REMOVED: Option to enable GASP Comments Filtering for logged-in users has been completely removed - this reduces plugin options complexity. All logged-in users by-pass **all** comments filtering.
|
578 |
+
* FIXED: Prevention against plugin redirect loops under certain conditions.
|
579 |
+
* FIXED: IP whitelisting wasn't working under certain cases.
|
580 |
+
|
581 |
+
= 4.0.0 =
|
582 |
+
|
583 |
+
* ADDED: New Feature - Audit Trail
|
584 |
+
* ADDED: Audit Trail options include: Plugins, Themes, Email, WordPress Core, Posts/Pages, Shield plugin
|
585 |
+
* FIXED: Full and proper cleanup of plugin options, crons, and databases upon deactivation.
|
586 |
+
* REMOVED: Firewall Log. This is no longer an option and is instead integrated into the "Shield" Audit Trail.
|
587 |
+
|
588 |
+
= 3.5.5 =
|
589 |
+
|
590 |
+
* ADDED: Better admin notifications for events such as options saving etc.
|
591 |
+
* CHANGE: Some plugin styling to highlight features and options better.
|
592 |
+
* FIXED: Small bug with options default values.
|
593 |
+
|
594 |
+
= 3.5.3 =
|
595 |
+
|
596 |
+
* ADDED: A warning message on the WordPress admin if the "forceOff" override is active.
|
597 |
+
* CHANGED: The 'forceOff' system is now temporary - i.e. it doesn't save the configuration, and so once this file is removed, the plugin returns to the settings specified.
|
598 |
+
* CHANGED: The 'forceOn' option is now removed.
|
599 |
+
* FIXED: Problems with certain hosting environments reading in files with the ".yaml" extension - [support ref](https://wordpress.org/support/topic/yaml-breaks-plugin)
|
600 |
+
* FIXED: Small issue where when the file system paths change, some variables don't update properly.
|
601 |
+
|
602 |
+
= 3.5.0 =
|
603 |
+
|
604 |
+
* CHANGED: Plugin features are now configured [using YAML](https://github.com/mustangostang/spyc/) - no more in-PHP configuration.
|
605 |
+
* REMOVED: A few options from User Sessions Management as they were unnecessary.
|
606 |
+
* CHANGED: Database storing tables now have consistent naming.
|
607 |
+
* FIXED: Issue with User Sessions Management where '0' was specified for session length, resulting in lock out.
|
608 |
+
* FIXED: Firewall log gathering.
|
609 |
+
* FIXED: Various PHP warning notices.
|
610 |
+
|
611 |
+
= 3.4.0 =
|
612 |
+
|
613 |
+
* ADDED: Option to limit number of simultaneous sessions per WordPress user login name (User Management section)
|
614 |
+
|
615 |
+
= 3.3.0 =
|
616 |
+
|
617 |
+
* ADDED: Option to send notification when an administrator user logs in successfully (under User Management menu).
|
618 |
+
* CHANGED: Refactoring for how GET and POST data is retrieved
|
619 |
+
|
620 |
+
= 3.2.1 =
|
621 |
+
|
622 |
+
* FIXED: Custom Comment Filter message problem when using more than one substitution. [ref](http://wordpress.org/support/topic/warning-sprintf-too-few-arguments-in-hometnrastropublic_htmlwpwp-conten?replies=8#post-5927337)
|
623 |
+
|
624 |
+
= 3.2.0 =
|
625 |
+
|
626 |
+
* ADDED: Options to allow by-pass XML-RPC so as to be compatible with WordPress iPhone/Android apps.
|
627 |
+
* UPDATED: Login screen message when you're forced logged-out due to 2-factor auth failure on IP or cookie.
|
628 |
+
* CHANGED: Tweaked method for setting admin access protection on/off
|
629 |
+
* CHANGED: comment filtering code refactoring.
|
630 |
+
* FIXED: Options that were "multiple selects" weren't saving correctly
|
631 |
+
|
632 |
+
= 3.1.5 =
|
633 |
+
|
634 |
+
* FIX: Where some comments would fail GASP comment token checking.
|
635 |
+
|
636 |
+
= 3.1.4 =
|
637 |
+
|
638 |
+
* FIX: Logout URL parameters are now generated correctly so that the correct messages are shown.
|
639 |
+
* CHANGED: small optimizations and code refactoring.
|
640 |
+
* UPDATED: a few translation files based on the latest available contributions.
|
641 |
+
|
642 |
+
= 3.1.3 =
|
643 |
+
|
644 |
+
* FIX: issue with login cooldown timeouts not being updated where admin access restriction is in place.
|
645 |
+
|
646 |
+
= 3.1.2 =
|
647 |
+
|
648 |
+
* FIX: auto-updates feature not loading
|
649 |
+
* FIX: simplified implementation of login protection feature to reduce possibility for bugs/lock-outs
|
650 |
+
* FIX: auto-forwarding for wp-login.php was preventing user logout
|
651 |
+
|
652 |
+
= 3.1.0 =
|
653 |
+
|
654 |
+
* ADDED: option to check the logged-in user session only on WordPress admin pages (now the default setting)
|
655 |
+
* ADDED: option to auto-forward to the WordPress dashboard when you go to wp-login.php and you're already logged in.
|
656 |
+
* ADDED: message to login screen when no user session is found
|
657 |
+
* CHANGED: does not verify session when performing AJAX request. (need to build appropriate AJAX response)
|
658 |
+
* FIX: for wp_login action not passing second argument
|
659 |
+
|
660 |
+
= 3.0.0 =
|
661 |
+
|
662 |
+
* FEATURE: User Management. Phase 1 - create user sessions to track current and attempted logged in users.
|
663 |
+
* CHANGED: MASSIVE plugin refactoring for better performance and faster, more reliable future development of features
|
664 |
+
* ADDED: Obscurity Feature - ability to remove the WP Generator meta tag.
|
665 |
+
* ADDED: ability to change user login session length in days
|
666 |
+
* ADDED: ability to set session idle timeout in hours
|
667 |
+
* ADDED: ability to lock session to a particular IP address (2-factor auth by IP is separate)
|
668 |
+
* ADDED: ability to view active user sessions
|
669 |
+
* ADDED: ability to view last page visited for active sessions
|
670 |
+
* ADDED: ability to view last active time for active sessions
|
671 |
+
* ADDED: ability to view failed or attempted logins in the past 48hrs
|
672 |
+
* ADDED: Support for GASP login using WooCommerce
|
673 |
+
* CHANGED: Admin Access Restriction now has a separate options/feature page
|
674 |
+
* CHANGED: Admin styling to better see some selected options
|
675 |
+
* ADDED: Support for WP Wall shoutbox plugin (does no GASP comment checks)
|
676 |
+
* CHANGED: Removed support for upgrading from versions prior to 2.0
|
677 |
+
* CHANGED: Removed support for importing from Firewall 2 plugin - to import, manually install plugin v2.6.6, import settings, then upgrade.
|
678 |
+
|
679 |
+
= 2.6.6 =
|
680 |
+
|
681 |
+
* FIX: Improved compatibility with bbPress.
|
682 |
+
|
683 |
+
= 2.6.5 =
|
684 |
+
|
685 |
+
* FIX: Could not enable Admin Access Protection feature on new installs due to too aggressive testing on security.
|
686 |
+
|
687 |
+
= 2.6.4 =
|
688 |
+
|
689 |
+
* ENHANCED: Dashboard now shows a more visual summary of settings and removes duplicate options settings with links to sections.
|
690 |
+
* ENHANCED: WordPress Lock Down options now also set the corresponding WordPress defines if they're not already.
|
691 |
+
|
692 |
+
= 2.6.3 =
|
693 |
+
|
694 |
+
* ADDED: More in-line plugin links to help/blog resources
|
695 |
+
* ENHANCED: [Admin Access Protection](http://icwp.io/5b) is further enhanced in 3 ways:
|
696 |
+
|
697 |
+
1. More robust cookie values using MD5s
|
698 |
+
1. Blocks plugin options updating right at the point of WordPress options update so nothing can rewrite the actual plugin options.
|
699 |
+
1. Locks the current Admin Access session to your IP address - effectively only 1 Shield admin allowed at a time.
|
700 |
+
|
701 |
+
= 2.6.2 =
|
702 |
+
|
703 |
+
* ENHANCED: Added option to completely reject a SPAM comment and redirect to the home page (so it doesn't fill up your database with rubbish)
|
704 |
+
* ADDED: Plugin now has an internal stats counter for spam and other significant plugin events.
|
705 |
+
|
706 |
+
= 2.6.1 =
|
707 |
+
|
708 |
+
* ADDED: Plugin now installs with default SPAM blacklist.
|
709 |
+
* ADDED: Now automatically checks and updates the SPAM blacklist when it's older than 48hrs.
|
710 |
+
* ENHANCED: Comment messages indicate where the SPAM content was found when marking human-based spam messages.
|
711 |
+
|
712 |
+
= 2.6.0 =
|
713 |
+
|
714 |
+
**Major Features Release: Please review SPAM comments filtering options to determine where SPAM goes**
|
715 |
+
|
716 |
+
* FEATURE: Added Human SPAM comments filtering - replacement for Akismet that doesn't use or send any data to 3rd party services. Uses [Blacklist provided and maintained by Grant Hutchinson](https://github.com/splorp/wordpress-comment-blacklist)
|
717 |
+
* ENHANCED: Two-Factor Login now automatically logs in the user to the admin area without them having to re-login again.
|
718 |
+
* ENHANCED: Added ability to terminate all currently (two-factor) verified logins.
|
719 |
+
* ENHANCED: Spam filter/scanning adds an explanation to the SPAM content to show why a message was filtered.
|
720 |
+
* FIXES: For PHP warnings while in php strict mode.
|
721 |
+
* CLEAN: Much cleaning up of code.
|
722 |
+
|
723 |
+
= 2.5.9 =
|
724 |
+
|
725 |
+
* FEATURE: Added option to try and exclude search engine bots from firewall checking option - OFF by default.
|
726 |
+
|
727 |
+
= 2.5.8 =
|
728 |
+
|
729 |
+
* FEATURE: Added 'PHP Code' Firewall checking option.
|
730 |
+
|
731 |
+
= 2.5.7 =
|
732 |
+
|
733 |
+
* IMPROVED: Handling and logic of two-factor authentication and user roles/levels
|
734 |
+
|
735 |
+
= 2.5.6 =
|
736 |
+
|
737 |
+
* FEATURE: Added ability to specify the particular WordPress user roles that are subject to 2-factor authentication. (Default: Contributors, Authors, Editors and Administrators)
|
738 |
+
|
739 |
+
= 2.5.5 =
|
740 |
+
|
741 |
+
* FEATURE: Added 'Lockdown' feature to force login to WordPress over SSL.
|
742 |
+
* FEATURE: Added 'Lockdown' feature to force WordPress Admin dashboard to be delivered over SSL.
|
743 |
+
* FIX: Admin restricted access feature wasn't disabled with the "forceOff" option.
|
744 |
+
|
745 |
+
= 2.5.4 =
|
746 |
+
|
747 |
+
* FIX: How WordPress Automatic/Background Updates filters worked was changed with WordPress 3.8.2.
|
748 |
+
|
749 |
+
= 2.5.3 =
|
750 |
+
|
751 |
+
* UPDATED: Translations. And confirmed compatibility with WordPress 3.9
|
752 |
+
|
753 |
+
= 2.5.2 =
|
754 |
+
|
755 |
+
* FEATURE: Option to Prevent Remote Posting to the WordPress Login system. Will check that the login form was submitted from the same site.
|
756 |
+
|
757 |
+
= 2.5.1 =
|
758 |
+
|
759 |
+
* UPDATED: Translations and added some partials (Catalan, Persian)
|
760 |
+
* FIX: for cleanup cron running on non-existent tables.
|
761 |
+
|
762 |
+
= 2.5.0 =
|
763 |
+
|
764 |
+
* FEATURE: Two-Factor Authenticated Login using [Yubikey](http://icwp.io/4i) One Time Passwords (OTP).
|
765 |
+
|
766 |
+
= 2.4.3 =
|
767 |
+
|
768 |
+
* ADDED: Translations: Spanish, Italian, Turkish. (~15% complete)
|
769 |
+
* UPDATED: Hebrew Translations (100%)
|
770 |
+
|
771 |
+
= 2.4.2 =
|
772 |
+
|
773 |
+
* ADDED: Contextual help links for many options. More to come...
|
774 |
+
* ADDED: More Portuguese (Brazil) translations (~80%)
|
775 |
+
|
776 |
+
= 2.4.1 =
|
777 |
+
|
778 |
+
* ADDED: More strings to the translation set for better multilingual support
|
779 |
+
* ADDED: Portuguese (Brazil) translations (~40%)
|
780 |
+
* UPDATED: Hebrew Translations
|
781 |
+
* FIXED: Automatic cleaning of database logs wasn't actually working as expected. Should now be fixed.
|
782 |
+
|
783 |
+
= 2.4.0 =
|
784 |
+
|
785 |
+
* NEW: Option to enable Two-Factor Authentication based on Cookie. In this way you can tie a user session to a single browser.
|
786 |
+
* FIX: Better WordPress Multisite (WPMS) Support.
|
787 |
+
|
788 |
+
= 2.3.4 =
|
789 |
+
|
790 |
+
* FIX: Automatic updating of itself.
|
791 |
+
|
792 |
+
= 2.3.3 =
|
793 |
+
|
794 |
+
* ADDED: Hebrew Translations. Thanks [Ahrale](http://atar4u.com)!
|
795 |
+
* ADDED: Automatic trimming of the Firewall access log to 7 days - it just grows too large otherwise.
|
796 |
+
* FIX: The previously added automatic clean up of old comments and login protect database entries was wiping out the valid login protect
|
797 |
+
entries and was forcing users to re-login every 24hrs.
|
798 |
+
* FIX: Some small bugs, errors, and PHPDoc Comments.
|
799 |
+
|
800 |
+
= 2.3.2 =
|
801 |
+
|
802 |
+
* ADDED: Automatic cleaning of GASP Comments Filter and Login Protection database entries (older than 24hrs) using WordPress Cron (everyday @ 6am)
|
803 |
+
* CHANGED: Huge code refactoring to allow for more easily use with other WordPress plugins.
|
804 |
+
|
805 |
+
= 2.2.5 =
|
806 |
+
|
807 |
+
* ADDED: Email sending options for automatic update notifications - options to change the notification email address, or turn it off completely.
|
808 |
+
|
809 |
+
= 2.2.4 =
|
810 |
+
|
811 |
+
* FIX: Small bug fix.
|
812 |
+
* CHANGED: When running a force automatic updates process, tries to remove influence from other plugins and uses only this plugin's automatic updates settings.
|
813 |
+
* CHANGED: A bit of automatic updates code refactoring.
|
814 |
+
|
815 |
+
= 2.2.2 =
|
816 |
+
|
817 |
+
* CHANGED: Changed all options to be disabled by default.
|
818 |
+
* CHANGED: The option for admin notices will turn off all main admin notices except after you update options.
|
819 |
+
|
820 |
+
= 2.2.1 =
|
821 |
+
|
822 |
+
* ADDED: Verified compatibility with WordPress 3.8
|
823 |
+
|
824 |
+
= 2.2.0 =
|
825 |
+
|
826 |
+
* CHANGED: Certain filesystem calls are more compatible with restrictive hosting environments.
|
827 |
+
* CHANGED: Plugin is now ready to integate with [iControlWP automatic background updates system](http://www.icontrolwp.com/2013/11/manage-wordpress-automatic-background-updates-icontrolwp/).
|
828 |
+
* FIX: Login Protection Cooldown feature may not operate properly in certain scenarios.
|
829 |
+
|
830 |
+
= 2.1.5 =
|
831 |
+
|
832 |
+
* IMPROVED: Improved logic for Firewall whitelisting for pages and parameters to ensure whitelisting rules are followed.
|
833 |
+
* CHANGED: The whitelisting rule for posting pages/posts is only for the "content" and the firewall checking will apply to all other page parameters.
|
834 |
+
|
835 |
+
= 2.1.4 =
|
836 |
+
|
837 |
+
* FIX: When you run the Force Automatic Background Updates, it disables the plugins. This problem is now fixed.
|
838 |
+
|
839 |
+
= 2.1.2 =
|
840 |
+
|
841 |
+
* FIX: A bug that prevented auto-updates of this plugin.
|
842 |
+
* FIX: Not being able to hide translations and upgrade notices.
|
843 |
+
* ADDED: Tweaks to auto-update feature to allow interfacing with the iControlWP service to customize the auto update system.
|
844 |
+
|
845 |
+
= 2.1.0 =
|
846 |
+
|
847 |
+
* ADDED: A button that lets you run the WordPress Automatic Updates process on-demand (so you don't have to wait for WordPress cron).
|
848 |
+
* CHANGED: The plugin now sets more options to be turned on by default when the plugin is first activated.
|
849 |
+
* CHANGED: A lot of optimizations and code refactoring.
|
850 |
+
|
851 |
+
= 2.0.3 =
|
852 |
+
|
853 |
+
* FIX: Whoops, sorry, accidentally removed the option to toggle "disable file editing". It's back now.
|
854 |
+
|
855 |
+
= 2.0.2 =
|
856 |
+
|
857 |
+
* CHANGED: WordPress filters used to programmatically update whitelists now update the Login Protection IP whitelist
|
858 |
+
|
859 |
+
= 2.0.1 =
|
860 |
+
|
861 |
+
* ADDED: Localization capabilities. All we need now are translators! [Go here to get started](http://translate.icontrolwp.com/).
|
862 |
+
* ADDED: Option to mask the WordPress version so the real version is never publicly visible.
|
863 |
+
|
864 |
+
= 1.9.2 =
|
865 |
+
|
866 |
+
* CHANGED: Simplified the automatic WordPress Plugin updates into 1 filter for consistency
|
867 |
+
|
868 |
+
= 1.9.1 =
|
869 |
+
|
870 |
+
* ADDED: Increased admin access security features - blocks the deactivation of itself if you're not authenticated fully with the plugin.
|
871 |
+
* ADDED: If you're not authenticated with the plugin, the plugin listing view wont have 'Deactivate' or 'Edit' links.
|
872 |
+
|
873 |
+
= 1.9.0 =
|
874 |
+
|
875 |
+
* ADDED: New WordPress Automatic Updates Configuration settings
|
876 |
+
|
877 |
+
= 1.8.2 =
|
878 |
+
|
879 |
+
* ADDED: Notification of available plugin upgrade is now an option under the 'Dashboard'
|
880 |
+
* CHANGED: Certain admin and upgrade notices now only appear when you're authenticated with the plugin (if this is enabled)
|
881 |
+
* FIXED: PHP Notice with undefined index.
|
882 |
+
|
883 |
+
= 1.8.1 =
|
884 |
+
|
885 |
+
* ADDED: Feature- Access Key Restriction [more info](http://icwp.io/2s).
|
886 |
+
* ADDED: Feature- WordPress Lockdown. Currently only provides 1 option, but more to come.
|
887 |
+
|
888 |
+
= 1.7.3 =
|
889 |
+
|
890 |
+
* CHANGED: Reworked a lot of the plugin to optimize for further performance.
|
891 |
+
* FIX: Potential infinite loop in processing firewall.
|
892 |
+
|
893 |
+
= 1.7.1 =
|
894 |
+
|
895 |
+
* ADDED: Much more efficiency yet again in the loading/saving of the plugin options.
|
896 |
+
|
897 |
+
= 1.7.0 =
|
898 |
+
|
899 |
+
* ADDED: Preliminary WordPress Multisite (WPMS/WPMU) Support.
|
900 |
+
* CHANGED: The Firewall now kicks in on the 'plugins_loaded' hook instead of as the actual firewall plugin is initialized (as a result
|
901 |
+
of WP Multisite support).
|
902 |
+
|
903 |
+
= 1.6.2 =
|
904 |
+
|
905 |
+
* REMOVED: Automatic upgrade option until I can ascertain what caused the plugin to auto-disable.
|
906 |
+
|
907 |
+
= 1.6.1 =
|
908 |
+
|
909 |
+
* ADDED: Options to fully customize the text displayed by the GASP comments section.
|
910 |
+
* ADDED: Option to include logged-in users in the GASP Comments Filter.
|
911 |
+
|
912 |
+
= 1.6.0 =
|
913 |
+
|
914 |
+
* ADDED: A new section - 'Comments Filtering' that will form the basis for filtering comments with SPAM etc.
|
915 |
+
* ADDED: Option to add enhanced GASP based comments filtering to prevent SPAM bots posting comments to your site.
|
916 |
+
|
917 |
+
= 1.5.6 =
|
918 |
+
|
919 |
+
* IMPROVED: Whitelist/Blacklist IP range processing to better cater for ranges when saving, with more thorough checking.
|
920 |
+
* IMPROVED: Whitelist/Blacklist IP range processing for 32-bit systems.
|
921 |
+
* FIXED: A bug with Whitelist/Blacklist IP checking.
|
922 |
+
|
923 |
+
= 1.5.5 =
|
924 |
+
|
925 |
+
* FIXED: Quite a few bugs fixed.
|
926 |
+
|
927 |
+
= 1.5.4 =
|
928 |
+
|
929 |
+
* FIXED: Typo error.
|
930 |
+
|
931 |
+
= 1.5.3 =
|
932 |
+
|
933 |
+
* FIXED: Some of the firewall processors were saving unnecessary data.
|
934 |
+
|
935 |
+
= 1.5.2 =
|
936 |
+
|
937 |
+
* CHANGED: The method for finding the client IP address is more thorough, in a bid to work with Proxy servers etc.
|
938 |
+
* FIXED: PHP notice reported here: http://wordpress.org/support/topic/getting-errors-when-logged-in
|
939 |
+
|
940 |
+
= 1.5.1 =
|
941 |
+
|
942 |
+
* FIXED: Bug fix where IP address didn't show in email.
|
943 |
+
* FIXED: Attempt to fix problem where update message never hides.
|
944 |
+
|
945 |
+
= 1.5.0 =
|
946 |
+
|
947 |
+
* ADDED: A new IP whitelist on the Login Protect that lets you by-pass login protect rules for given IP addresses.
|
948 |
+
* REMOVED: Firewall rule for wp-login.php and whitelisted IPs.
|
949 |
+
|
950 |
+
= 1.4.2 =
|
951 |
+
|
952 |
+
* ADDED: The plugin now has an option to automatically upgrade itself when an update is detected - enabled by default.
|
953 |
+
|
954 |
+
= 1.4.1 =
|
955 |
+
|
956 |
+
* ADDED: The plugin will now displays an admin notice when a plugin upgrade is available with a link to immediately update.
|
957 |
+
* ADDED: Plugin collision: removes the main hook by 'All In One WordPress Security'. No need to have both plugins running.
|
958 |
+
* ADDED: Improved Login Cooldown Feature- works more like email throttling as it now uses an extra filesystem-based level of protection.
|
959 |
+
* FIXED: Login Cooldown Feature didn't take effect in certain circumstances.
|
960 |
+
|
961 |
+
= 1.4.0 =
|
962 |
+
|
963 |
+
* ADDED: All-new plugin options handling making them more efficient, easier to manage/update, using far fewer WordPress database options.
|
964 |
+
* CHANGED: Huge improvements on database calls and efficiency in loading plugin options.
|
965 |
+
* FIXED: Nonce implementation.
|
966 |
+
|
967 |
+
= 1.3.2 =
|
968 |
+
|
969 |
+
* FIXED: Small compatibility issue with Quick Cache menu not showing.
|
970 |
+
|
971 |
+
= 1.3.0 =
|
972 |
+
|
973 |
+
* ADDED: Email Throttle Feature - this will prevent you getting bombarded by 1000s of emails in case you're hit by a bot.
|
974 |
+
* ADDED: Another Firewall die() option. New option will print a message and uses the wp_die() function instead.
|
975 |
+
* ADDED: Refactored and improved the logging system (upgrading will delete your current logs!).
|
976 |
+
* ADDED: Option to separately log Login Protect features.
|
977 |
+
* ADDED: Option to by-pass 2-factor authentication in the case sending the verification email fails
|
978 |
+
(so you don't get locked out if your hosting doesn't support email!).
|
979 |
+
* CHANGED: Login Protect checking now better logs out users immediately with a redirect.
|
980 |
+
* CHANGED: We now escape the log data being printed - just in case there's any HTML/JS etc in there we don't want.
|
981 |
+
* CHANGED: Optimized and cleaned a lot of the option caching code to improve reliability and performance (more to come).
|
982 |
+
|
983 |
+
= 1.2.7 =
|
984 |
+
|
985 |
+
* FIX: Bug where the GASP Login protection was only working when you had 2-factor authentication enabled.
|
986 |
+
|
987 |
+
= 1.2.6 =
|
988 |
+
|
989 |
+
* ADDED: Ability to import settings from WordPress Firewall 2 plugin options - note, doesn't import page and variables whitelisting.
|
990 |
+
* FIX: A reported bug - parameter values could also be arrays.
|
991 |
+
|
992 |
+
= 1.2.5 =
|
993 |
+
|
994 |
+
* ADDED: New Feature - Option to add a checkbox that blocks automated SPAM Bots trying to log into your site.
|
995 |
+
* ADDED: Added a clear user message when they verify their 2-factor authentication.
|
996 |
+
* FIX: A few bugfixes and logic corrections.
|
997 |
+
|
998 |
+
= 1.2.4 =
|
999 |
+
|
1000 |
+
* CHANGED: Documentation on the dashboard, and the message after installing the firewall have been updated to be clearer and more informative.
|
1001 |
+
* FIX: A few bugfixes and logic corrections.
|
1002 |
+
|
1003 |
+
= 1.2.3 =
|
1004 |
+
|
1005 |
+
* FIX: bugfix.
|
1006 |
+
|
1007 |
+
= 1.2.2 =
|
1008 |
+
|
1009 |
+
* FIX: Some warnings and display bugs.
|
1010 |
+
|
1011 |
+
= 1.2.1 =
|
1012 |
+
|
1013 |
+
* ADDED: New Feature - Login Wait Interval. To reduce the effectiveness of brute force login attacks, you can add an interval by
|
1014 |
+
which WordPress will wait before processing any more login attempts on a site.
|
1015 |
+
* CHANGED: Optimized some settings for performance.
|
1016 |
+
* CHANGED: Cleaned up the UI when the Firewall / Login Protect features are disabled (more to come).
|
1017 |
+
* CHANGED: Further code improvements (more to come).
|
1018 |
+
|
1019 |
+
= 1.2.0 =
|
1020 |
+
|
1021 |
+
* ADDED: New Feature - **Login Protect**. Added 2-Factor Login Authentication for all users and their associated IP addresses.
|
1022 |
+
* CHANGED: The method for processing the IP address lists is improved.
|
1023 |
+
* CHANGED: Improved .htaccess rules (thanks MickeyRoush)
|
1024 |
+
* CHANGED: Mailing method now uses WP_MAIL
|
1025 |
+
* CHANGED: Lot's of code improvements.
|
1026 |
+
|
1027 |
+
= 1.1.6 =
|
1028 |
+
|
1029 |
+
* ADDED: Option to include Cookies in the firewall checking.
|
1030 |
+
|
1031 |
+
= 1.1.5 =
|
1032 |
+
|
1033 |
+
* ADDED: Ability to whitelist particular pages and their parameters (see FAQ)
|
1034 |
+
* CHANGED: Quite a few improvements made to the reliability of the firewall processing.
|
1035 |
+
|
1036 |
+
= 1.1.4 =
|
1037 |
+
|
1038 |
+
* FIX: Left test path in plugin.
|
1039 |
+
|
1040 |
+
= 1.1.3 =
|
1041 |
+
|
1042 |
+
* ADDED: Option to completely ignore logged-in Administrators from the Firewall processing (they wont even trigger logging etc).
|
1043 |
+
* ADDED: Ability to (un)blacklist and (un)whitelist IP addresses directly from within the log.
|
1044 |
+
* ADDED: helpful link to IP WHOIS from within the log.
|
1045 |
+
|
1046 |
+
= 1.1.2 =
|
1047 |
+
|
1048 |
+
* CHANGED: Logging now has its own dedicated database table.
|
1049 |
+
|
1050 |
+
= 1.1.1 =
|
1051 |
+
|
1052 |
+
* Fix: Block notification emails weren't showing the user-friendly IP Address format.
|
1053 |
+
|
1054 |
+
= 1.1.0 =
|
1055 |
+
|
1056 |
+
* You can now specify IP ranges in whitelists and blacklists. To do this separate the start and end address with a hyphen (-) E.g. For everything between 1.2.3.4 and 1.2.3.10, you would do: 1.2.3.4-1.2.3.10
|
1057 |
+
* You can now specify which email address to send the notification emails.
|
1058 |
+
* You can now add a comment to IP addresses in the whitelist/blacklist. To do this, write your IP address then type a SPACE and write whatever you want (don't take a new line).
|
1059 |
+
* You can now set to delete ALL firewall settings when you deactivate the plugin.
|
1060 |
+
* Improved formatting of the firewall log.
|
1061 |
+
|
1062 |
+
= 1.0.2 =
|
1063 |
+
* First Release
|
1064 |
+
|
1065 |
+
== Upgrade Notice ==
|
1066 |
+
|
1067 |
+
= 1.1.2 =
|
1068 |
+
|
1069 |
+
* CHANGED: Logging now has its own dedicated database table.
|
1070 |
+
* Fix: Block notification emails weren't showing the user-friendly IP Address format.
|
1071 |
+
* You can now specify IP ranges in whitelists and blacklists. To do this separate the start and end address with a hyphen (-) E.g. For everything between 1.2.3.4 and 1.2.3.10, you would do: 1.2.3.4-1.2.3.10
|
1072 |
+
* You can now specify which email address to send the notification emails.
|
1073 |
+
* You can now add a comment to IP addresses in the whitelist/blacklist. To do this, write your IP address then type a SPACE and write whatever you want (don't take a new line).
|
1074 |
+
* You can now set to delete ALL firewall settings when you deactivate the plugin.
|
1075 |
+
* Improved formatting of the firewall log.
|
icwp-wpsf.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: http://icwp.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
-
* Version: 6.6.
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages/
|
9 |
* Author: One Dollar Plugin
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: http://icwp.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
+
* Version: 6.6.2
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages/
|
9 |
* Author: One Dollar Plugin
|
plugin-spec.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
{
|
2 |
"properties": {
|
3 |
-
"version": "6.6.
|
4 |
-
"release_timestamp":
|
5 |
"slug_parent": "icwp",
|
6 |
"slug_plugin": "wpsf",
|
7 |
"human_name": "Shield",
|
1 |
{
|
2 |
"properties": {
|
3 |
+
"version": "6.6.2",
|
4 |
+
"release_timestamp": 1521726109,
|
5 |
"slug_parent": "icwp",
|
6 |
"slug_plugin": "wpsf",
|
7 |
"human_name": "Shield",
|
readme.txt
CHANGED
@@ -3,29 +3,41 @@ Contributors: onedollarplugin, paultgoodchild
|
|
3 |
Donate link: http://icwp.io/bw
|
4 |
License: GPLv3
|
5 |
License URI: http://www.gnu.org/licenses/gpl.html
|
6 |
-
Tags: security, all in one,
|
7 |
Requires at least: 3.5.0
|
8 |
Requires PHP: 5.2.4
|
9 |
Recommended PHP: 5.4
|
10 |
Tested up to: 4.9
|
11 |
-
Stable tag: 6.6.
|
12 |
|
13 |
-
|
14 |
|
15 |
== Description ==
|
16 |
|
17 |
-
|
18 |
|
19 |
-
|
20 |
|
21 |
-
|
22 |
|
23 |
-
|
24 |
|
25 |
-
|
26 |
-
- Shield has the highest average rating for any WP Security plugin.
|
27 |
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
Shield is the must-have, free Security Solution for all your WordPress sites.
|
31 |
|
@@ -76,6 +88,11 @@ From November 2017, Shield Security now has a Pro version for those that need to
|
|
76 |
> 1. (coming soon) Statistics and Reporting
|
77 |
> 1. (coming soon) Select individual automatic plugin updates
|
78 |
|
|
|
|
|
|
|
|
|
|
|
79 |
Learn more on going Pro at [our One Dollar Plugin store](http://icwp.io/ab).
|
80 |
|
81 |
= Our Mission =
|
@@ -102,18 +119,6 @@ downloading and installing Shield now
|
|
102 |
* Super Admin Security - the *only* WordPress Security Plugin that protects against tampering.
|
103 |
* Exclusive membership to a private security group where you can learn more about WordPress security.
|
104 |
|
105 |
-
= Awesome Features =
|
106 |
-
|
107 |
-
* Blocks malicious URLs and requests
|
108 |
-
* Blocks **ALL** automated spambot comments.
|
109 |
-
* Hide your WordPress Admin and Login page.
|
110 |
-
* Prevents brute force attacks on your login and any attempted automatic bot logins.
|
111 |
-
* Verify user identity with email-based Two-Factor Authentication
|
112 |
-
* Monitor login activity and restrict username sharin, with User Sessions Management
|
113 |
-
* Review admin activity with a detailed Audit Trail Log
|
114 |
-
* Turn on and turn off WordPress Automatic Updates separately for plugins, themes and Core
|
115 |
-
* Easy to use kill switch to temporarily turn off all Firewall Features without disabling the plugin or even logging into WordPress.
|
116 |
-
|
117 |
= Super Admin Security Protection =
|
118 |
The **only** WordPress security plugin with a WordPress-independent security key to protect itself. [more info](http://icwp.io/wpsf05)
|
119 |
|
@@ -140,30 +145,6 @@ Take back control of your WordPress Automatic Updates.
|
|
140 |
|
141 |
[youtube http://www.youtube.com/watch?v=r307fu3Eqbo]
|
142 |
|
143 |
-
= Shield Security Explained =
|
144 |
-
|
145 |
-
The Shield is built to be highly reliable and easy to use by **anyone**!
|
146 |
-
|
147 |
-
Originally built off the WordPress Firewall 2, it now includes much more:
|
148 |
-
|
149 |
-
* 9 effective and clear, Firewall blocking options - pick and choose for ultimate protection and compatibility.
|
150 |
-
* Option: Ignore already logged-in Administrators so you don't firewall yourself as you work on the site.
|
151 |
-
* Option: IP Address Whitelist. So you can vet your own IP addresses and 3rd Party Services.
|
152 |
-
* Option: Developer option for 3rd Party Services to dynamically add IP Addresses to whitelist
|
153 |
-
(our plugin is built to work with others!) E.g. [iControlWP](http://www.icontrolwp.com/).
|
154 |
-
* Option: IP Address Blacklist so you can completely block sites/services based on their IP address.
|
155 |
-
* Option: to easily turn on / off the whole firewall without disabling the whole plugin! (so simple, but important)
|
156 |
-
* Recovery Option: You can use FTP to manually turn ON/OFF the Firewall. This means if you accidentally lock yourself out, you can forcefully turn off the firewall using FTP. You can also
|
157 |
-
turn back on the firewall using the same method.
|
158 |
-
* Performance: When the firewall is running it is processing EVERY page load. So your firewall checking needs to be fast.
|
159 |
-
This plugin is written to cache settings and minimize database access: 1-3 database calls per page load.
|
160 |
-
* Logging: Full logging of Firewall (and other options) to analyse and debug your traffic and settings.
|
161 |
-
* Option: Email when firewall blocks a page access - with option to specify recipient.
|
162 |
-
* Option: Email throttling. If you get hit by a bot you wont get 1000s of email... you can throttle how many emails are sent.
|
163 |
-
useful for 3rd party services that connect to the site using other plugins.
|
164 |
-
|
165 |
-
Basic functionality is based on the principles employed by the [WordPress Firewall 2 plugin](http://wordpress.org/plugins/wordpress-firewall-2/).
|
166 |
-
|
167 |
= Login and Identity Security Protection - Stops Brute Force Attacks =
|
168 |
|
169 |
Note: Login Guard is a completely independent feature to the Firewall.
|
@@ -213,10 +194,6 @@ This all combines to make it much more difficult for spambots (and also human sp
|
|
213 |
|
214 |
== Installation ==
|
215 |
|
216 |
-
See FAQs.
|
217 |
-
|
218 |
-
== Installation ==
|
219 |
-
|
220 |
Note: When you enable the plugin, the firewall is not automatically turned on. This plugin contains various different sections of
|
221 |
protection for your site and you should choose which you need based on your own requirements.
|
222 |
|
@@ -240,9 +217,7 @@ Please see the dedicated [help centre](http://icwp.io/firewallhelp) for details
|
|
240 |
|
241 |
Easy - we're just better! ;)
|
242 |
|
243 |
-
|
244 |
-
|
245 |
-
Secondly, we don't modify a single core WordPress or web hosting file. This is important and explains why randomly you upgrade your security plugin and your site dies.
|
246 |
|
247 |
Ideally you shouldn't use this along side other Anti-SPAM plugins or security plugins. If there is a feature you need, please feel free to suggest it in the support forums.
|
248 |
|
@@ -373,9 +348,10 @@ If you don't want to support the work, no problem! You can still continue to use
|
|
373 |
|
374 |
You can [go Pro for just $1/month](http://icwp.io/aa).
|
375 |
|
376 |
-
= 6.6.
|
377 |
-
*Released:
|
378 |
|
|
|
379 |
* **(v.0)** NEW: [**PRO**] [Keyless Activation of Pro licenses](http://icwp.io/c1).
|
380 |
* **(v.0)** ADDED: [WordPress Password Policies](http://icwp.io/c2).
|
381 |
* **(v.0)** ADDED: Pwned Passwords Detection.
|
@@ -386,6 +362,7 @@ You can [go Pro for just $1/month](http://icwp.io/aa).
|
|
386 |
= 6.6 Series =
|
387 |
*Released: 19th March, 2018* - [Release Notes](http://icwp.io/c3)
|
388 |
|
|
|
389 |
* **(v.0)** NEW: [**PRO**] [Keyless Activation of Pro licenses](http://icwp.io/c1).
|
390 |
* **(v.0)** ADDED: [WordPress Password Policies](http://icwp.io/c2).
|
391 |
* **(v.0)** ADDED: Pwned Passwords Detection.
|
@@ -403,1077 +380,4 @@ You can [go Pro for just $1/month](http://icwp.io/aa).
|
|
403 |
* **(v.0)** FIXED: Plugin Guard better handles ignoring non-WordPress.org Plugins/Themes
|
404 |
* **(v.0)** FIXED: A few small bugs
|
405 |
|
406 |
-
|
407 |
-
*Released: 26th February, 2018* - [Release Notes](http://icwp.io/br)
|
408 |
-
|
409 |
-
* **(v.1-4)** FIXED: Various Fixes
|
410 |
-
* **(v.0)** ADDED: [**PRO**] New Scanner to [detect file changes for active plugins and themes](http://icwp.io/bq)
|
411 |
-
* **(v.0)** IMPROVED: Automatic updates for vulnerable plugins ignores [automatic updates delay setting](http://icwp.io/bc)
|
412 |
-
* **(v.0)** CHANGED: Email notifications for scanners will now link to the Wizard where possible, instead of listing files.
|
413 |
-
|
414 |
-
= 6.3 Series =
|
415 |
-
*Released: 12th February, 2018* - [Release Notes](http://icwp.io/bc)
|
416 |
-
|
417 |
-
* **(v.3)** FIXED: Bug with automatic updates delay setting
|
418 |
-
* **(v.2)** CHANGED: Changed a text that seems to cause servers to swallow-up emails. [See here for more reliable email](http://icwp.io/bi)
|
419 |
-
* **(v.1)** FIXED: Options page javascript to work around conflicts.
|
420 |
-
* **(v.0)** ADDED: [**PRO**] [Automatic updates stability delay](http://icwp.io/bc)
|
421 |
-
* **(v.0)** IMPROVED: Complete [plugin UI rebuild](http://icwp.io/bd), using the new Bootstrap 4.
|
422 |
-
* **(v.0)** FIXED: A few bugs with Google Authenticator.
|
423 |
-
|
424 |
-
= 6.2 Series =
|
425 |
-
*Released: 31st January, 2018* - [Release Notes](http://icwp.io/b6)
|
426 |
-
|
427 |
-
* **(v.2)** FIXED: Fix for IP Manager PHP error.
|
428 |
-
* **(v.2)** IMPROVED: Two-factor verification email.
|
429 |
-
* **(v.1)** FIXED: Bug where administrator login email notification setting is not being honoured.
|
430 |
-
* **(v.1)** IMPROVED: If a site is having trouble with database creation, User Sessions wont lock you out.
|
431 |
-
* **(v.0)** IMPROVED: Major overhaul of the Shield User Sessions system.
|
432 |
-
* **(v.0)** IMPROVED: Link the Security Admin authentication with the new Sessions system.
|
433 |
-
* **(v.0)** IMPROVED: Major overhaul to plugin's user meta data storage, limiting to a single DB entry for all data.
|
434 |
-
* **(v.0)** ADDED: [**PRO**] Ability to increase frequency of file system scans up to once every hour.
|
435 |
-
* **(v.0)** ADDED: [**PRO**] Add a "remember me" option, to allow users to skip Multi-factor authentication for a set number of days.
|
436 |
-
|
437 |
-
= 6.1 Series =
|
438 |
-
*Released: 15th January, 2018* - [Release Notes](http://icwp.io/ay)
|
439 |
-
|
440 |
-
* **(v.1)** FIXED: Verify link missing from the two-factor authentication verification email.
|
441 |
-
* **(v.0)** ADDED: 3x more Shield Wizards: Multi-factor Authentication, Core File Scanning, Unrecognised File Scanning.
|
442 |
-
* **(v.0)** ADDED: You can now use regular expressions for file exclusions in the 'Unrecognised File Scanner'.
|
443 |
-
* **(v.0)** CHANGED: File Scanner email notifications now link to the appropriate scanner wizard directly.
|
444 |
-
* **(v.0)** IMPROVED: Plugin options pages restyling.
|
445 |
-
* **(v.0)** IMPROVED: Plugin refactoring and improvements.
|
446 |
-
|
447 |
-
= 6.0 Series =
|
448 |
-
*Released: 18th December, 2017*
|
449 |
-
|
450 |
-
* **(v.0)** ADDED: All-new Shield Welcome and Setup Wizard - more helpful guided wizards to come.
|
451 |
-
* **(v.0)** ADDED: [**PRO**] [Shield options import and export](http://icwp.io/at)
|
452 |
-
* **(v.0)** ADDED: [**PRO**] In conjunction with import/export - Shield Security Network: automated options syncing.
|
453 |
-
* **(v.0)** CHANGED: Going forward, new features and options will [support only PHP 5.4+](http://icwp.io/au). Existing features will remain unaffected.
|
454 |
-
|
455 |
-
= 5.20 Series =
|
456 |
-
*Released: 11th December, 2017*
|
457 |
-
|
458 |
-
* **(v.0)** IMPROVED: [**PRO**] Audit Trail length are configurable. Length for free is 50 entries (the original unpaginated limit)
|
459 |
-
* **(v.0)** IMPROVED: Large redesign of options sections to be more intuitive and cleaner
|
460 |
-
* **(v.0)** IMPROVED: Added dedicated help section for each module.
|
461 |
-
* **(v.0)** IMPROVED: Certain modules have an new *Actions* centre, such a Audit Trail viewer and User Sessions manager
|
462 |
-
* **(v.0)** IMPROVED: Audit Trails are now ajax-paginated. You can browse through all your audit trail entries
|
463 |
-
* **(v.0)** IMPROVED: User session tables are also ajax-paginated.
|
464 |
-
|
465 |
-
= 5.19 Series =
|
466 |
-
*Released: 4th December, 2017*
|
467 |
-
|
468 |
-
* **(v.1)** FIXED: Plugin Vulnerabilities scan for premium plugins.
|
469 |
-
* **(v.0)** ADDED: [**PRO**] Automated WordPress plugins vulnerability scanner with auto updates email notifications
|
470 |
-
* **(v.0)** ADDED: Added Google reCAPTCHA support for register/forget password pages.
|
471 |
-
* **(v.0)** ADDED: [**PRO**] Support for Multi-Factor Authentication for WooCommerce and other 3rd party plugins.
|
472 |
-
* **(v.0)** ADDED: [**PRO**] Bot-protection/Google reCAPTCHA support for BuddyPress register pages.
|
473 |
-
|
474 |
-
= 5.18 Series =
|
475 |
-
*Released: 27th November, 2017*
|
476 |
-
|
477 |
-
* **(v.0)** ADDED: [**PRO**] Invisible Google reCAPTCHA option.
|
478 |
-
* **(v.0)** ADDED: [**PRO**] Support for Google reCAPTCHA themes - light and dark.
|
479 |
-
* **(v.0)** IMPROVEMENT: Google reCAPTCHA is more reliable and configurable.
|
480 |
-
|
481 |
-
= 5.17 Series =
|
482 |
-
*Released: 23rd November, 2017*
|
483 |
-
|
484 |
-
* **(v.0)** ADDED: Shield Security goes Pro! Added new options and extras to premium clients.
|
485 |
-
* **(v.0)** IMPROVEMENT: Fix and improvement to Google reCAPTCHA.
|
486 |
-
* **(v.0)** ADDED: [**PRO**] Support for Woocommerce and Easy Digital Downloads login/registration form protection.
|
487 |
-
* **(v.0)** ADDED: [**PRO**] Ability to customise most user-facing texts.
|
488 |
-
* **(v.0)** ADDED: [**PRO**] Extra IP Transgression signal.
|
489 |
-
|
490 |
-
= 5.16 Series =
|
491 |
-
*Released: 16th October, 2017*
|
492 |
-
|
493 |
-
With this release, we fixed a clash of options for Google reCAPTCHA. Every attempt was made to ensure no interruption to your existing settings, but please check to ensure your reCAPTCHA settings are as you expect them to be.
|
494 |
-
|
495 |
-
* **(v.4)** FIX: Error with incorrect/unprefixed database table name used in SQL query.
|
496 |
-
* **(v.3)** IMPROVEMENT: Tweak to the Visitor IP Auto-detection to better ensure CloudFlare IP addresses are ignored.
|
497 |
-
* **(v.3)** IMPROVEMENT: Plugin Badge will now stay closed when a visitor closes it.
|
498 |
-
* **(v.2)** FIX: Removed some namespace parsing that broke on sites with PHP 5.2.
|
499 |
-
* **(v.1)** FIX: 404 page displayed for password reset request when Login URL is renamed.
|
500 |
-
* **(v.0)** IMPROVEMENT: Much better auto-detection of valid request/visitor IP addresses.
|
501 |
-
* **(v.0)** FIX: Clashing of reCAPTCHA options for Comments and Login Protection.
|
502 |
-
* **(v.0)** IMPROVEMENT: Statistic Reporting database management and pruning.
|
503 |
-
* **(v.0)** FIX: Various system fixes and improvements.
|
504 |
-
|
505 |
-
= 5.15 Series =
|
506 |
-
*Released: 21st September, 2017*
|
507 |
-
|
508 |
-
* **(v.1)** FIX: Processing AJAX requests from the Network Admin side of WordPress.
|
509 |
-
* **(v.1)** IMPROVEMENTS: Better handling of file exclusions in the Hack Guard module.
|
510 |
-
* **(v.1)** IMPROVEMENTS: Better handling of fatal errors in loading Shield where some core files are missing.
|
511 |
-
* **(v.0)** ADDED: New HTTP Security Header: Referrer Policy.
|
512 |
-
* **(v.0)** ADDED: Supports paths for file exclusions in the Unrecognised File Scanner.
|
513 |
-
* **(v.0)** IMPROVEMENTS: Better interception of unintentional redirects to the hidden Login URL (e.g. /wp-admin/customize.php).
|
514 |
-
* **(v.0)** IMPROVEMENTS: Better handling of email sending entries in the Audit Trail.
|
515 |
-
* **(v.0)** IMPROVEMENTS: Improved (tabbed) display of Audit Trail.
|
516 |
-
* **(v.0)** IMPROVEMENTS: Better generation & handling of the One Time Password for email-based two-factor authentication.
|
517 |
-
* **(v.0)** IMPROVEMENTS: Some code clean up and refactoring.
|
518 |
-
|
519 |
-
= 5.14 Series =
|
520 |
-
*Released: 9th September, 2017*
|
521 |
-
|
522 |
-
* **(v.0)** ADDED: Option for administrators to manually override and set the source of the visitor IP address.
|
523 |
-
* **(v.0)** UPDATED: In-plugin documentation links to updated and revised helpdesk articles/blogs.
|
524 |
-
* **(v.0)** IMPROVEMENTS: Strip out any non-alphanumeric characters uses in the generation of Google Authenticator URLs.
|
525 |
-
* **(v.0)** FIX: Shield now ignores any requests sent to Rest API URIs with respect to Shield user sessions.
|
526 |
-
|
527 |
-
= 5.13 Series =
|
528 |
-
*Released: 15th August, 2017*
|
529 |
-
|
530 |
-
* **(v.2)** IMPROVEMENTS: Small adjustment to handling of Shield User sessions in conjunction with WordPress sessions.
|
531 |
-
* **(v.2)** FIX: Restore display of help links for options.
|
532 |
-
* **(v.1)** FIX: PHP 5.2 incompatibility.
|
533 |
-
* **(v.0)** ADDED: New option for [Unrecognised File Scanner](http://icwp.io/94) to scan the Uploads folder for JS and PHP files.
|
534 |
-
* **(v.0)** ADDED: Option to provide custom list of files to be excluded from the [Unrecognised File Scanner](http://icwp.io/94).
|
535 |
-
|
536 |
-
= 5.12 Series =
|
537 |
-
*Released: 3rd August, 2017*
|
538 |
-
|
539 |
-
* **(v.2)** IMPROVEMENTS: Improved support for Windows IIS hosting for [Unrecognised File Scanner](http://icwp.io/94)
|
540 |
-
* **(v.2)** CHANGED: Removed the email-based 2FA automatic login link.
|
541 |
-
* **(v.2)** FIX: Potential bug with Shield not recognising plugin configuration updates and not rebuilding options accordingly.
|
542 |
-
* **(v.1)** ADDED: A few more exclusions for the [Unrecognised File Scanner](http://icwp.io/94)
|
543 |
-
* **(v.1)** FIX: Fix for Fatal error.
|
544 |
-
* **(v.0)** ADDED: [Unrecognised File Scanner](http://icwp.io/94) release. Automatically detect and delete
|
545 |
-
any files present in core WordPress directories that aren't part of your core installation.
|
546 |
-
* **(v.0)** ADDED: Updated Firewall rules for SQL under the 'Aggressive' rule set.
|
547 |
-
|
548 |
-
= 5.11 Series =
|
549 |
-
*Released: 26th July, 2017*
|
550 |
-
|
551 |
-
* **(v.1)** FIX: JSON syntax
|
552 |
-
* **(v.0)** IMPROVEMENTS: Final preparation for [Shield Central](http://icwp.io/83) release.
|
553 |
-
|
554 |
-
= 5.10 Series =
|
555 |
-
*Released: 19th June, 2017*
|
556 |
-
|
557 |
-
* **(v.2)** FIXED: Fatal error with GASP + Password Reset.
|
558 |
-
* **(v.2)** FIXED: Fatal error with failing reCAPTCHA HTTP requests.
|
559 |
-
* **(v.1)** IMPROVEMENTS: Further preparation for [Shield Central](http://icwp.io/83) release.
|
560 |
-
* **(v.0)** ADDED: More in-depth reporting and statistics gathering - options for reports will be made available
|
561 |
-
in a later release.
|
562 |
-
|
563 |
-
= 5.9 Series =
|
564 |
-
*Released: 31st May, 2017*
|
565 |
-
|
566 |
-
* **(v.0)** ADDED: Help Videos for 1 or 2 modules. More to come and just testing format and uptake.
|
567 |
-
* **(v.0)** ADDED: Special handling for WP Fastest Cache.
|
568 |
-
* **(v.0)** CHANGE: Configuration for automatic self-update for the Shield plugin has been removed.
|
569 |
-
* **(v.0)** CHANGE: No longer remove an existing user session when accessed from another IP address. Just redirect.
|
570 |
-
Protects existing, legitimate sessions from being forcefully expired.
|
571 |
-
* **(v.0)** FIXED: Danish string translation.
|
572 |
-
|
573 |
-
= 5.8 Series =
|
574 |
-
*Released: 7th April, 2017*
|
575 |
-
|
576 |
-
* **(v.2)** IMPROVEMENTS: The core file scanner now works more reliably for international WordPress installations.
|
577 |
-
* **(v.2)** CHANGE: Login Cooldown now uses only the flag file as an indicator of login times.
|
578 |
-
* **(v.2)** CHANGE: Filter to allow for changing the two factor timeout period, from 5 (minutes). Filter: `icwp-wpsf-login_intent_timeout`
|
579 |
-
* **(v.2)** CHANGE: Changed timeout for two-factor authentication email to 5 minutes to account for slower email-sending providers.
|
580 |
-
* **(v.2)** CHANGE: Added further clarification to the Login Notification email indicating that two-factor authentication was pending.
|
581 |
-
* **(v.1)** FIXED: Fixed a couple of bugs with the Login Authentication Portal, for certain edge cases.
|
582 |
-
* **(v.0)** CHANGE: Major overhaul of [Two-Factor / Multi-Factor Login Authentication](http://icwp.io/87).
|
583 |
-
* **(v.0)** CHANGE: [Introduction of Login Authentication Portal](http://icwp.io/86) for improved Multi-Factor Authentication.
|
584 |
-
* **(v.0)** ADDED: Option to choose between two-factor or multi-factor login authentication.
|
585 |
-
* **(v.0)** ADDED: Administrators can remove Google Authenticator from another user's profile.
|
586 |
-
* **(v.0)** ADDED: When Security Admin is active, only Security Admins may remove Google Authenticator from other admins.
|
587 |
-
* **(v.0)** CHANGE: Yubikey login authentication is now managed directly from the User Profile screen, as with Google Authenticator.
|
588 |
-
* **(v.0)** CHANGE: Email-based login authentication no longer uses a separate database table.
|
589 |
-
* **(v.0)** FIXED: Core file scanning now adequately handles Windows/Unix new lines during scan.
|
590 |
-
* **(v.0)** FIXED: Certain crons weren't setup correctly.
|
591 |
-
* **(v.0)** IMPROVEMENTS: Further preparation for [Shield Central](http://icwp.io/83) release.
|
592 |
-
|
593 |
-
= 5.7 Series =
|
594 |
-
|
595 |
-
* **(v.3)** FIXED: Attempt to improve the Google Authenticator flow for more reliable activation.
|
596 |
-
* **(v.2)** IMPROVEMENTS: More admin notices when saving Google Authenticator settings.
|
597 |
-
* **(v.2)** IMPROVEMENTS: Further preparation for [Shield Central](http://icwp.io/83) release.
|
598 |
-
* **(v.1)** Skipped
|
599 |
-
* **(v.0)** ADDED: Shortcode for displaying plugin badge in pages/posts.
|
600 |
-
* **(v.0)** CHANGE: Enabled JS eval() for the Content Security Policy by default.
|
601 |
-
* **(v.0)** IMPROVEMENTS: Replace YAML configuration files with JSON.
|
602 |
-
* **(v.0)** IMPROVEMENTS: Preparation for [Shield Central](http://icwp.io/83) release.
|
603 |
-
* **(v.0)** IMPROVEMENTS: Security Admin notices are more refined and optimized.
|
604 |
-
* **(v.0)** IMPROVEMENTS: Removed unnecessary files/code.
|
605 |
-
|
606 |
-
= 5.6 Series =
|
607 |
-
|
608 |
-
* **(v.2)** CHANGE: Fix an instance where the hidden Login URL would be leaded.
|
609 |
-
* **(v.1)** CHANGE: Replaying of Yubikey one-time-passwords is no longer permitted.
|
610 |
-
* **(v.1)** ADDED: Filter for login form GASP fields.
|
611 |
-
* **(v.1)** ADDED: Filter for comment form GASP fields.
|
612 |
-
* **(v.1)** CHANGE: Improved compatibility of HTTP Headers with WP Super Cache.
|
613 |
-
* **(v.0)** ADDED: Option to disable anonymous Rest API access. WordPress v4.7+ only. Note that if another plugin
|
614 |
-
or service authenticates the request it will be honoured, whether anonymous or not.
|
615 |
-
= 5.5 Series =
|
616 |
-
|
617 |
-
* **(v.6)** IMPROVED: Fixed possible leak of the Login URL from the 'Hide WP Login URL' feature.
|
618 |
-
* **(v.5)** ADDED: Ability to add custom protocols to the domains (apart from http/s) to the Content Security Policy
|
619 |
-
* **(v.5)** FIXED: Bug where automatic update emails would contain empty plugins.
|
620 |
-
* **(v.5)** FIXED: Javascript scope on GASP form elements.
|
621 |
-
* **(v.5)** FIXED: Various fixes and code improvements.
|
622 |
-
* **(v.4)** FIXED: Bug with data cleaning/storage that caused stored options to balloon resulting in database timeouts. (only certain options affected)
|
623 |
-
* **(v.4)** IMPROVED: Sometimes "anti-virus" scanners scared normal, everyday hard-working folk by identifying a Shield file as being a virus, because they're not very clever - reduced chances of this.
|
624 |
-
* **(v.3)** ADDED: Fix for WordPress Multisite where the correct database prefix wasn't being used.
|
625 |
-
* **(v.2)** ADDED: Filter to allow modification of the email footer
|
626 |
-
* **(v.2)** ADDED: Block auto-updates on Shield itself if PHP < 5.3 and new version is v6.0+
|
627 |
-
* **(v.2)** FIXED: Missing Link
|
628 |
-
* **(v.2)** FIXED: Plugin Installation ID wasn't always being set
|
629 |
-
* **(v.2)** TRANSLATIONS: Dutch (56%)
|
630 |
-
* **(v.1)** ADDED: Built-in forceful protection in the form of a wp_die() against the (currently) un-patched W3 Total Cache XSS vulnerability [more info](http://icwp.io/7j)
|
631 |
-
* **(v.1)** IMPROVED: Better XMLRPC Lockdown - prevents ANY XMLRPC command processing.
|
632 |
-
* **(v.1)** IMPROVED: Make certain strings translatable
|
633 |
-
* **(v.1)** IMPROVED: Wrap-up certain login form elements into spans/divs to allow styling etc.
|
634 |
-
* **(v.1)** IMPROVED: PHP Version number cleaning during stats tracking.
|
635 |
-
* **(v.0)** ADDED: Options and statistics tracking ability. Over time we are looking to share statistics and performance metrics of Shield.
|
636 |
-
* **(v.0)** IMPROVED: Performance for options loading, especially for web hosts that don't permit file writing
|
637 |
-
* **(v.0)** CHANGED: Numerous fixes and code improvements.
|
638 |
-
* **(v.0)** CHANGED: Removed query that deletes old GASP comment tokens on normal page loads.
|
639 |
-
* **(v.0)** CHANGED: Google reCAPTCHA is now based on the locale of the website, not auto-detected.
|
640 |
-
* **(v.0)** FIXED: Now URL encodes the username in the link for two-factor authentication by email.
|
641 |
-
* **(v.0)** FIXED: If the xmlrpc.php has been deleted, this is now ignore by the file scanner
|
642 |
-
* **(v.0)** TRANSLATIONS: Dutch (38%), Portuguese (32%)
|
643 |
-
|
644 |
-
= 5.4 Series =
|
645 |
-
|
646 |
-
* **(v.5)** CHANGED: User Management module is no-longer enabled by default on clean installations
|
647 |
-
* **(v.5)** CHANGED: Made the GASP checkbox for Login protection clickable by label. [Thanks Aubrey!](https://github.com/FernleafSystems/Shield/pull/22)
|
648 |
-
* **(v.5)** CHANGED: Shield Statistics only shows for WordPress admins (instead of all users)
|
649 |
-
* **(v.5)** FIXED: Added a couple of guards to ensure data is of the correct format to prevent spurious errors
|
650 |
-
* **(v.5)** FIXED: Bug where automatic file repair links from emails we're not working.
|
651 |
-
* **(v.4)** SKIPPED.
|
652 |
-
* **(v.3)** FIXED: Various fixes and improvements
|
653 |
-
* **(v.3)** CHANGED: Lots of cleaning of old code.
|
654 |
-
* **(v.3)** REMOVED: Various old, unused options, and the force_ssl_login option as it's deprecated by WordPress Core
|
655 |
-
* **(v.3)** TRANSLATIONS: Dutch (36%), Swedish (35%)
|
656 |
-
* **(v.3)** FIXED: Various fixes and improvements
|
657 |
-
* **(v.3)** CHANGED: Lots of cleaning of old code.
|
658 |
-
* **(v.3)** REMOVED: Various old, unused options, and the force_ssl_login option as it's deprecated by WordPress Core
|
659 |
-
* **(v.3)** TRANSLATIONS: Dutch (36%), Swedish (35%)
|
660 |
-
* **(v.2)** ADDED: A guard around certain modules like, User Sessions, to ensure the DB has been initiated properly before use.
|
661 |
-
* **(v.2)** ADDED: Exclusion for Swedish license files that don't exist in the SVN repo.
|
662 |
-
* **(v.2)** ADDED: Parameter exclusion for reCAPTCHA.
|
663 |
-
* **(v.2)** CHANGED: [HTTP Security Headers](http://icwp.io/7b) module is enabled by default on new installs.
|
664 |
-
* **(v.1)** FIXED: Nasty bug that caused an infinite loop bug in some configurations.
|
665 |
-
* **(v.0)** ADDED: Per-site plugin statistics gathering - summary display on admin dashboard.
|
666 |
-
* **(v.0)** ADDED: HTML class to the "I'm a human" checkbox field.
|
667 |
-
* **(v.0)** ADDED: Ability to change minimum user role for login notification emails with use of `add_filter()`. See FAQs.
|
668 |
-
* **(v.0)** REMOVED: Option 'Prevent Remote Login' causes more trouble with than it's worth with too many hosting configurations.
|
669 |
-
* **(v.0)** CHANGED: For websites that don't run WP Crons correctly, added code for automatic database cleaning.
|
670 |
-
* **(v.0)** CLEANED: Removed Twig render code as it was never being used.
|
671 |
-
|
672 |
-
= 5.3 Series =
|
673 |
-
|
674 |
-
* **(v.2)** IMPROVED: [HTTP Security Headers](http://icwp.io/7b) Content Security Policy now supports specifying HTTPS for domains/hosts.
|
675 |
-
* **(v.2)** FIXED: Human Comment SPAM Feature didn't fire under certain circumstances.
|
676 |
-
* **(v.2)** FIXED: Fixed parsing of Human Comment SPAM dictionary words.
|
677 |
-
* **(v.1)** TRANSLATIONS: Dutch (32%)
|
678 |
-
* **(v.0)** ADDED: New Feature - [HTTP Security Headers](http://icwp.io/7b).
|
679 |
-
* **(v.0)** FIXED: Prevent renaming WP Login to "/login"
|
680 |
-
|
681 |
-
= 5.2 Series =
|
682 |
-
|
683 |
-
* **(v.0)** ADDED: Guard against core file scanner and automatic WordPress updates clashing.
|
684 |
-
* **(v.0)** CHANGED: Logic for brute force login checking is improved - they all run before username/password checking
|
685 |
-
* **(v.0)** FIXED: Certain older versions of PHP don't like combined IPv4 and IPv6 filter flags
|
686 |
-
* **(v.0)** FIXED: Google reCAPTCHA for WordPress sites that have restrictive settings for sockets etc.
|
687 |
-
* **(v.0)** REMOVED: [Plugin vulnerabilities scanner](http://icwp.io/75). It's out-of-date and unsuitable.
|
688 |
-
|
689 |
-
= 5.1 Series =
|
690 |
-
|
691 |
-
* **(v.0)** FIXED: Improved compatibility with bbPress.
|
692 |
-
* **(v.0)** CHANGED: Optimizations around options and definitions (storing fewer options data)
|
693 |
-
* **(v.0)** CHANGED: Improved styling and responsiveness of plugin badge.
|
694 |
-
* **(v.0)** ADDED: Ability to programmatically export/import options - further preparation for iControlWP+Shield integration.
|
695 |
-
* **(v.0)** FIXED: Issue where Core automatic updates would fail, but notification email was sent anyway
|
696 |
-
|
697 |
-
= 5.0 Series =
|
698 |
-
|
699 |
-
* **(v.3)** FIXED: Issue with setting session cookies with PHP 7
|
700 |
-
* **(v.2)** FIXED: [Rename WordPress Login URL](http://icwp.io/5s) bug
|
701 |
-
* **(v.2)** CHANGED: reCAPTCHA text usage corrected throughout plugin.
|
702 |
-
* **(v.1)** CHANGED: Removed the whole 'wp-content' directory from the [Core File Scanner](http://icwp.io/wpsf40) feature.
|
703 |
-
* **(v.1)** CHANGED: A WordPress filter to change the plugin badge text content (see FAQ)
|
704 |
-
* **(v.1)** CHANGED: Tweaked the plugin badge styling.
|
705 |
-
* **(v.1)** CHANGED: All emails sent by the plugin contain the name of the site and the current plugin version in the email footer.
|
706 |
-
* **(v.1)** ADDED: In-plugin links to blogs and info articles for Google ReCaptcha and [Google Authenticator](http://icwp.io/wpsf43)
|
707 |
-
* **(v.0)** NEW: WordPress Simple Firewall plugin has been re-branded and is called **Shield**
|
708 |
-
* **(v.0)** ADDED: NEW feature - [Google ReCaptcha](http://icwp.io/shld2) for Comment SPAM and Login protection.
|
709 |
-
* **(v.0)** ADDED: Support for this plugin is now Premium. Added Premium Support page that links to Helpdesk.
|
710 |
-
* **(v.0)** CHANGED: Refactor of comment spam code.
|
711 |
-
* **(v.0)** CHANGED: Core File Scanner now handles the odd Hungarian distribution.
|
712 |
-
|
713 |
-
= 4.17 Series =
|
714 |
-
*Released: 17th February, 2016*
|
715 |
-
|
716 |
-
* **(v.0)** ADDED: NEW feature - [Google Authenticator Login option](http://icwp.io/wpsf43).
|
717 |
-
* **(v.0)** ADDED: [Core File Scanner](http://icwp.io/wpsf40) now includes an automatic link to repair files (you must be logged in as admin for this link to work!).
|
718 |
-
* **(v.0)** ADDED: NEW - if you already have a logged-in session and you open the login screen, you'll be provided with a link to go straight to the admin area.
|
719 |
-
* **(v.0)** CHANGED: Email-based Two-Factor Authentication is now stateless/session-less - it will not check validity per-page load.
|
720 |
-
* **(v.0)** CHANGED: Changes to the email-based authentication system - now only 1 option and it no longer locks to IP or browser.
|
721 |
-
* **(v.0)** CHANGED: Various efficiency improvements including reduced SQL updates.
|
722 |
-
* **(v.0)** CHANGED: Email system is improved and now send emails from the default WordPress sender. This may be [changed with filter](https://icontrolwp.freshdesk.com/support/solutions/articles/3000048723).
|
723 |
-
|
724 |
-
= 4.16 Series =
|
725 |
-
*Released: 20th January, 2016*
|
726 |
-
|
727 |
-
* **(v.2)** CHANGED: Further changes and improvements to the [Core File Scanner](http://icwp.io/wpsf40).
|
728 |
-
* **(v.2)** CHANGED: Improvements to the [automatic black list system](http://icwp.io/wpsf27) for failed login attempts.
|
729 |
-
* **(v.2)** TRANSLATIONS: Turkish (100%)
|
730 |
-
* **(v.1)** CHANGED: Improved the contents of the [Core File Scanner](http://icwp.io/wpsf40) notification email with links to original source files.
|
731 |
-
* **(v.1)** CHANGED: Now also excluding the /wp-content/languages/ directory since translations may update independently.
|
732 |
-
* **(v.1)** CHANGED: Handles the special case of [old index.php files](https://wordpress.org/support/topic/problem-with-checksum-hashes)
|
733 |
-
* **(v.0)** ADDED: Feature: [Automatically scans WordPress Core files](http://icwp.io/wpsf40) and detects alterations from the default WordPress Core File data
|
734 |
-
* **(v.0)** ADDED: Feature: to automatically attempt to repair/replace WordPress Core files that are discovered which have been altered.
|
735 |
-
* **(v.0)** ADDED: Option to toggle the [Plugin Vulnerabilities cron](http://icwp.io/wpsf41).
|
736 |
-
* **(v.0)** ADDED: Two-Factor Authentication links now honour the WordPress 'redirect_to' parameter.
|
737 |
-
|
738 |
-
= 4.15 Series =
|
739 |
-
*Released: 6th January, 2016*
|
740 |
-
|
741 |
-
* **(v.0)** ADDED: New and updated Firewall rules as well as a new 'Aggressive' option that looks for additional request data. Disabled by default, but may cause an increase in false positives.
|
742 |
-
* **(v.0)** CHANGED: Improved and optimized Firewall processing.
|
743 |
-
* **(v.0)** FIXED: [Issue](https://github.com/FernleafSystems/wp-simple-firewall/issues/3) where automatic update notification emails are sent out without any update notices (probably due to failed updates).
|
744 |
-
* **(v.0)** FIXED: Small conflict with WP Login Rename and other security plugins.
|
745 |
-
* **(v.0)** TRANSLATIONS: Czech (91%), Finnish (98%), Turkish (98%).
|
746 |
-
|
747 |
-
= 4.14 Series =
|
748 |
-
*Released: 20th November, 2015*
|
749 |
-
|
750 |
-
* **(v.2)** ADDED: User notice message displayed when the 'Theme My Login' plugin is active and you try to rename your login URL - It is not compatible.
|
751 |
-
* **(v.1)** ADDED: Added WordPress filter option to specify URL instead of present a 404 when Rename WP Login is active. [more info](https://icontrolwp.freshdesk.com/solution/articles/3000044812)
|
752 |
-
* **(v.1)** ADDED: Added 'Unique Plugin Installation ID' to be utilized in the future.
|
753 |
-
* **(v.1)** FIXED: WordPress Comments bug where some comments didn't pass through the SPAM filters in a certain scenario.
|
754 |
-
* **(v.0)** ADDED: [Custom Automatic Update Notifications Email](http://icwp.io/wpsf33) that runs separately to the in-built WordPress core notification email.
|
755 |
-
* **(v.0)** ADDED: Filter to remove the admin area IP address footer text
|
756 |
-
* **(v.0)** CHANGED: Added native support for PayPal return links - whitelisting "verify_sign" parameter.
|
757 |
-
* **(v.0)** CHANGED: Tweak patterns for matching on 'WordPress terms'.
|
758 |
-
* **(v.0)** TRANSLATIONS: Danish (100%), Czech (92%), Turkish (92%), Finnish (88%),
|
759 |
-
* **(v.0)** FIXED: Small bugs and readying for WordPress 4.4
|
760 |
-
|
761 |
-
= 4.13 Series =
|
762 |
-
*Released: 22nd October, 2015*
|
763 |
-
|
764 |
-
* **(v.0)** NEW: Added option to block the modification, addition/promotion and deletion of WordPress administrators users within the 'Security Admin' module.
|
765 |
-
* **(v.0)** NEW: Renamed 'Admin Access' module to 'Security Admin'.
|
766 |
-
* **(v.0)** CHANGED: Simplified and consolidated the use of cookies for User Session - sets and removes cookies better to reduce their usage.
|
767 |
-
* **(v.0)** CHANGED: Simplified and consolidated the use of cookies for Two Factor Login Authentication.
|
768 |
-
* **(v.0)** CHANGED: Cleaned up some Comment SPAM filtering code.
|
769 |
-
* **(v.0)** CHANGED: Comments Filter doesn't use cookies unless a session cookie for the visitor already exists.
|
770 |
-
* **(v.0)** CHANGED: IP Manager Automatic Black List - default black list duration is now 1 minute & default transgressions limit is 10
|
771 |
-
* **(v.0)** CHANGED: Improvements to the database create queries: use MySQL Engine defaults (instead of MyISAM); use WordPress dbDelta() for updates.
|
772 |
-
* **(v.0)** CHANGED: Various code optimizations and cleaning.
|
773 |
-
|
774 |
-
= 4.12 Series =
|
775 |
-
*Released: 10th October, 2015*
|
776 |
-
|
777 |
-
* **(v.0)** NEW: Option to completely disable the XML-RPC system. [more info](http://icwp.io/wpsf31)
|
778 |
-
* **(v.0)** CHANGED: Logged-in users are automatically forwarded to the WordPress admin only if they are Administrators.
|
779 |
-
|
780 |
-
= 4.11 Series =
|
781 |
-
*Released: 5th October, 2015*
|
782 |
-
|
783 |
-
* **(v.0)** NEW: Ability to now completely block the update/changing of certain WordPress site options. [more info](http://icwp.io/wpsf30)
|
784 |
-
* **(v.0)** FIXED: Various small bugs with the IP Manager UI ajax.
|
785 |
-
* **(v.0)** FIXED: Uncaught PHP Exception when a site's hosting isn't properly configured to handle IPv6 addresses.
|
786 |
-
* **(v.0)** TRANSLATIONS: Danish - 57%, Czech - 100%, Finnish - 94%
|
787 |
-
|
788 |
-
= 4.10 Series =
|
789 |
-
*Released: 23rd August, 2015*
|
790 |
-
|
791 |
-
* **(v.4)** REFACTOR: Notifications system is more reliable and most notices can be hidden/closed (at least for the current page load as some notices are persistent).
|
792 |
-
* **(v.4)** REMOVED: The old manual black list option has been completely removed - in favour of the automatic black list system.
|
793 |
-
* **(v.4)** CHANGED: Revised the order of certain hooks being created to avoid the possibility of pluggable.php not being loaded for PHP Shutdown.
|
794 |
-
* **(v.4)** CHANGED: The presence of IP addresses in the IP Whitelist will force the IP Manager feature to be enabled.
|
795 |
-
* **(v.4)** CHANGED: We now make an attempt to prevent the caching of WordPress wp_die() pages that we generate. (compatible with at least W3TC, Super Cache)
|
796 |
-
* **(v.4)** TRANSLATIONS: Turkish - 100%, Danish - 3%
|
797 |
-
|
798 |
-
* **(v.3)** FIXED: Another PHP 5.2 incompatibility.
|
799 |
-
* **(v.2)** ADDED: White Listing UI to the IP Manager - CIDR ranges are supported (also automatically migrates IPs, except ranges, from legacy to new)
|
800 |
-
* **(v.2)** ADDED: Returned the black marking of failed WP login attempts to the automatic black list system
|
801 |
-
* **(v.2)** ADDED: Using a 3rd party API service: [ipify.org](https://www.ipify.org/) - to find the server's own IP address so we can ensure it's not used in the black lists
|
802 |
-
* **(v.2)** CHANGED: AJAX calls are handled more robustly with actual error messages where possible.
|
803 |
-
* **(v.2)** FIXED: A few black list processing bugs.
|
804 |
-
|
805 |
-
* **(v.1)** ADDED: UI to view and remove IP address from Automatic Black List Engine.
|
806 |
-
* **(v.1)** FIX: Removed transgression counting on failed logins - WP data is inconsistent.
|
807 |
-
* **(v.1)** CHANGED: Original legacy white list now takes priority over new auto black list
|
808 |
-
* **(v.1)** CHANGED: Default transgressions limit is now 7
|
809 |
-
* **(v.1)** ADDED: Ability to reset plugin options to default using 'reset' flag file. [more info](http://icwp.io/wpsf28)
|
810 |
-
* **(v.0)** NEW FEATURE: 'FABLE' - [Fully Automatic Black Listing Engine](http://icwp.io/wpsf27).
|
811 |
-
|
812 |
-
Simply put, FABLE will automatically block all malicious traffic by IP, based on their activity. This Security Plugin will track malicious behaviour
|
813 |
-
and count all transgressions that visitors make against the site. Once a particular visitor exceeds the specified number transgressions, FABLE
|
814 |
-
will outright block any access they have to your WordPress site.
|
815 |
-
|
816 |
-
What makes the FABLE system better?
|
817 |
-
|
818 |
-
* Hands Free - Automatic. No more need for maintaining manual black lists.
|
819 |
-
* Loads first before other plugins.
|
820 |
-
* Automatic pruning. Based on expiration time you specify, older IP address will be removed.
|
821 |
-
* Increased Performance. With automatic pruning, IP look-up tables remain small and concise so page load times for legitimate visitors is minimally affected.
|
822 |
-
* Adaptive. It wont just block based on 1 misdemeanour - instead you may allow any given visitor grace to legitimately get things wrong (like login passwords).
|
823 |
-
* Intelligent. With an fully integrated plugin such as this, it uses login failure attempts, spam comment attempts, login brute force attempts to capture malicious visitors.
|
824 |
-
|
825 |
-
Which actions will trigger an ABLE transgression?
|
826 |
-
|
827 |
-
* Attempt to login with an invalid username/password combination
|
828 |
-
* Any attempt to login while the login cooldown system is in-effect
|
829 |
-
* Any login attempt that trips the GASP Login protection system
|
830 |
-
* Any login attempt with a username that doesn't exist
|
831 |
-
* Any attempt to access /wp-admin/, /login/, or wp-login.php while the Rename WP Login setting is active
|
832 |
-
* Any comment that gets labelled as SPAM by the plugin
|
833 |
-
* Failed attempt to authenticate with the plugin's Admin Access Protection module
|
834 |
-
* Any trigger of a Firewall block rule
|
835 |
-
|
836 |
-
= 4.9 Series =
|
837 |
-
*Released: 7th July, 2015*
|
838 |
-
|
839 |
-
* **(v.8)** CHANGED: Firewall, User Sessions and Lockdown Feature Modules are now enabled by default for new installations.
|
840 |
-
* **(v.8)** FIX: Some server email programs can't handle colons (:) in the email subject (because supporting all characters would be waaay too radical man).
|
841 |
-
* **(v.8)** ADDED: Function to better get the WordPress home URL to prevent interference from other plugins.
|
842 |
-
* **(v.8)** CHANGED: Updated Text For [Author Scan Block](http://icwp.io/6e) feature.
|
843 |
-
* **(v.7)** CHANGED: How author query blocking works to be more reliable and stricter - only runs when users are not logged in, and it will DIE instead of redirect.
|
844 |
-
* **(v.6)** ADDED: New Option: prevent detection of usernames using the ?author=N query. (location under section: Lockdown -> Obscurity)
|
845 |
-
* **(v.6)** FIXED: Infinite redirect loop logic prevents redirect for rejected comment SPAM that's posted in bulk. This results in email notifications for spam comments.
|
846 |
-
* **(v.5)** ADDED: The plugin will load itself first before all other plugins
|
847 |
-
* **(v.5)** FIXED: No longer using parse_url() to determine the request URL as it's too inconsistent and unreliable.
|
848 |
-
* **(v.4)** FIX: Audit Trail Viewer display issue with non-escaped HTML (Thanks Chris!)
|
849 |
-
* **(v.4)** ADDED: An admin warning for sites with PHP version less than 5.3.2 (future versions will require this as a minimum)
|
850 |
-
* **(v.4)** TRANSLATIONS: Danish - 6%, Spanish - 76%
|
851 |
-
* **(v.3)** ADDED: Further checking for availability of certain PHP/server data before enabling the rename WordPress login feature
|
852 |
-
* **(v.3)** ADDED: Option to add the Plugin Badge as a Widget to your side-bar or page footer, or any other widget area.
|
853 |
-
* **(v.3)** TRANSLATIONS: Polish - 100%
|
854 |
-
* **(v.2)** ADDED: Email notifications sent out to report email address on a daily cron. [more info](https://www.icontrolwp.com/2015/07/plugin-vulnerability-email-notifications/)
|
855 |
-
* **(v.2)** FIX: Work around a WordPress inline plugin update Javascript bug.
|
856 |
-
* **(v.1)** FIX: Fix syntax support for earlier versions of PHP.
|
857 |
-
* **(v.0)** FEATURE: Plugin Vulnerabilities Detection: If you're running plugins with known vulnerabilities you will be warned - [more info](http://icwp.io/wpsf22)
|
858 |
-
|
859 |
-
= 4.8 Series =
|
860 |
-
*Released: 21st June, 2015*
|
861 |
-
|
862 |
-
* **(v.0)** FEATURE: Admin Access Restriction Areas - Restrict access to certain WordPress areas and functionality to **Administrators** with the Admin Access key.
|
863 |
-
* **(v.0)** ADDED: Admin Access Restriction Area - Plugins. You can now restrict access to certain Plugin actions - activate, install, update, delete.
|
864 |
-
* **(v.0)** ADDED: Admin Access Restriction Area - Themes. You can now restrict access to certain Theme actions - activate, install, update, delete.
|
865 |
-
* **(v.0)** ADDED: Admin Access Restriction Area - Pages/Post. You can now restrict access to certain Page/Post actions - Create/Edit, Publish, Delete.
|
866 |
-
|
867 |
-
= 4.7 Series =
|
868 |
-
*Released: 29th April, 2015*
|
869 |
-
|
870 |
-
* **(v.7)** FIXED: The text used to explain why some comments were marked as spam was broken.
|
871 |
-
* **(v.7)** FIXED: Group sign-up form now honours your SSL setting.
|
872 |
-
* **(v.7)** TRANSLATIONS: Spanish - 74%, Russian - 91%, Turkish - 94%, Polish- 95%, Finnish - 100%
|
873 |
-
* **(v.6)** FIXED: Verifying ability to send/receive email doesn't complete if Admin Access Protection is turned on.
|
874 |
-
* **(v.6)** FIXED: GASP Login Protection feature breaks because certain key options aren't initialized when the feature is enabled.
|
875 |
-
* **(v.6)** FIXED: Some "more info" links were empty.
|
876 |
-
* **(v.4)** ADDED: Email Sending Verification when enabling two-factor authentication - this ensures your site can send (and you can receive) emails.
|
877 |
-
* **(v.4)** ADDED: Section Summaries - each option tab contains a small text summary outlining the purpose and recommendation for each.
|
878 |
-
* **(v.4)** CHANGED: The Admin Access Key input is now a password field.
|
879 |
-
* **(v.4)** CHANGED: Custom Login URL now works with or without trailing slash.
|
880 |
-
* **(v.4)** CHANGED: Streamlining and improvement of PHP UI templates
|
881 |
-
* **(v.4)** ADDED: Implemented TWIG for templates (not yet activated)
|
882 |
-
* **(v.4)** TRANSLATIONS: Romanian (100%), Spanish-Spain (63%)
|
883 |
-
* **(v.3)** ADDED: Integrated protection against 2x RevSlider vulnerabilities (Local File Include and Arbitrary File Upload)
|
884 |
-
* **(v.3)** CHANGED: Reverted the addition of Permalinks/Rewrite rules flushing, in case this is a problem for some.
|
885 |
-
* **(v.2)** UPDATED/FIX: Major fixes and improvements to the rename wp-login.php feature.
|
886 |
-
* **(v.2)** TRANSLATIONS: Mexican-Spanish (61%), Arabic (38%)
|
887 |
-
* **(v.1)** FIX: Silence warnings from filesystem touch() command.
|
888 |
-
* **(v.1)** TRANSLATIONS: Polish (100%), Finnish (100%), Czech (73%), Arabic (34%)
|
889 |
-
* **(v.0)** UPDATED: Options page user interface re-design.
|
890 |
-
* **(v.0)** FIX: Audit trail time now reflects the user's timezone correctly.
|
891 |
-
* **(v.0)** FIX: Better compatibility with BBPress.
|
892 |
-
* **(v.0)** UPDATED: Underlying plugin code improvements.
|
893 |
-
* **(v.0)** TRANSLATIONS: Russian (100%), Czech (70%), Polish (97%)
|
894 |
-
|
895 |
-
= 4.6 Series =
|
896 |
-
*Released: 10th April, 2015*
|
897 |
-
|
898 |
-
* **(v.3)** SECURITY: Added protection against XSS vulnerability in WordPress comments. [Learn More](http://icwp.io/63) - Note: This is not a vulnerability with the Firewall plugin.
|
899 |
-
* **(v.3)** SECURITY: Added extra precautions to WordPress URL redirects. [Learn More](http://icwp.io/64).
|
900 |
-
* **(v.3)** TRANSLATIONS: Russian (70%), Czech (67%)
|
901 |
-
* **(v.2)** FIX: Bug with the database table verification logic.
|
902 |
-
* **(v.2)** TRANSLATIONS: Russian (New- 54%), Romanian (100%), Turkish (89%), Czech (53%)
|
903 |
-
* **(v.1)** FIX: XMLRPC compatibility logic was preventing other non-XMLRPC related code from running.
|
904 |
-
* **(v.1)** UPDATED: Plugin Badge styling
|
905 |
-
* **(v.1)** UPDATED: Updated Czech(41%) and Spanish (60%) translations
|
906 |
-
* **(v.0)** ADDED: New feature that displays the last login time for all users on the users listing page (User Management feature must be enabled).
|
907 |
-
* **(v.0)** ADDED: **Completely optional** promotional Plugin Badge option - help us promote the plugin and reassure your site visitors at the same time. [Learn More](http://icwp.io/5x)
|
908 |
-
* **(v.0)** UPDATED: Updated Czech(38%) translations
|
909 |
-
|
910 |
-
= 4.5 Series =
|
911 |
-
*Released: 6th March, 2015*
|
912 |
-
|
913 |
-
* **(v.5)** CHANGED: Updated Finnish (100%), Czech (16%) translations
|
914 |
-
* **(v.5)** CHANGED: Change logs now more clearly display changes between versions
|
915 |
-
* **(v.5)** FIX: Small translation coverage
|
916 |
-
* **(v.4)** ADDED: New and updated language translations including Polish (100%), Finnish
|
917 |
-
* **(v.4)** FIX: Better string translation coverage for menus etc.
|
918 |
-
* **(v.3)** ADDED: New and updated language translations including Polish, Czech and German
|
919 |
-
* **(v.3)** CHANGED: Only set the plugin cookie if necessary
|
920 |
-
* **(v.2)** CHANGED: Attempt to resolve DB errors related to transient options reported on WP Engine
|
921 |
-
* **(v.1)** ADDED: New feature- GASP Login Protection can now be applied to lost password form - enabled by default
|
922 |
-
* **(v.0)** ADDED: New feature- GASP Login Protection can now be applied to user registrations - enabled by default
|
923 |
-
|
924 |
-
= 4.4 Series =
|
925 |
-
*Released: 21st February, 2015*
|
926 |
-
|
927 |
-
* **(v.2)** ADDED: Romanian Translation.
|
928 |
-
* **(v.2)** ADDED: A plugin minimum-requirements processing system.
|
929 |
-
* **(v.2)** IMPROVED: The WordPress admin-UI code is simpler and cleaner.
|
930 |
-
* **(v.1)** ADDED: **Significant** performance enhancement in plugin loading times (up to 50% reduction).
|
931 |
-
* **(v.0)** CHANGED: The 'Prevent Remote Login' option now tries to detect web hosting server compatibility before allowing it to be enabled.
|
932 |
-
* **(v.0)** CHANGED: More lax in finding the 'forceOff' file when users are trying to turn off the firewall.
|
933 |
-
* **(v.0)** CHANGED: Parsing the URL no longer outputs warnings that might interfere with response headers.
|
934 |
-
|
935 |
-
= 4.3 Series =
|
936 |
-
*Released: 15th January, 2015*
|
937 |
-
|
938 |
-
* **(v.6)** FIXES: More thorough validation of whitelisted IP addresses
|
939 |
-
* **(v.5)** FIXES: Some hosting environments need absolute file paths for PHP include()/require()
|
940 |
-
* **(v.5)** CHANGED: Streamlined the detection of whitelisting and added in-plugin notification if **you** are whitelisted
|
941 |
-
* **(v.4)** FIXES: Work around for cases where PHP can't successfully run parse_url()
|
942 |
-
* **(v.2)** IMPROVED: Refactoring for better code organisation
|
943 |
-
* ADDED: New Feature - [Rename WP Login Page](http://icwp.io/5s).
|
944 |
-
* ADDED: UI indicators on whether plugins will be automatically updated in the plugins listing.
|
945 |
-
* CHANGED: IP Address WhiteList is now global for the whole plugin, and can be accessed under the "Dashboard" area
|
946 |
-
* IMPROVED: Firewall processing code is simplified and more efficient.
|
947 |
-
|
948 |
-
= 4.2.1 =
|
949 |
-
*Released: 22th December, 2014*
|
950 |
-
|
951 |
-
* FIXED: Changes to how feature specifications are read from disk to prevent .tmp file build up.
|
952 |
-
|
953 |
-
= 4.2.0 =
|
954 |
-
*Released: 12th December, 2014*
|
955 |
-
|
956 |
-
* ADDED: Audit Trail Auto Cleaning - default cleans out entries older than 30 days.
|
957 |
-
* FIXED: Various small bug fixes and code cleaning.
|
958 |
-
|
959 |
-
= 4.1.4 =
|
960 |
-
*Released: 24th November, 2014*
|
961 |
-
|
962 |
-
* FIXED: Fixed small logic bug which prevented deactivation of the plugin on the UI.
|
963 |
-
|
964 |
-
= 4.1.3 =
|
965 |
-
*Released: 19th November, 2014*
|
966 |
-
|
967 |
-
* IMPROVED: User Sessions are simplified.
|
968 |
-
* UPDATED: a few translation files based on the latest available contributions.
|
969 |
-
|
970 |
-
= 4.1.2 =
|
971 |
-
|
972 |
-
* ADDED: Self-correcting database table validation - if the structure of a database table isn't what is expected, it'll be re-created.
|
973 |
-
|
974 |
-
= 4.1.1 =
|
975 |
-
|
976 |
-
* WARNING: Due to new IPv6 support, all databases tables will be rebuilt - all active user sessions will be destroyed.
|
977 |
-
* ADDED: Preliminary support for IPv6 addresses throughout. We don't support whitelist ranges but IPv6 addresses are handled much more reliably in general.
|
978 |
-
* ADDED: New audit trail concept added called "immutable" that represents entries that will never be deleted - such entries would usually involve actions taken on the audit trail itself.
|
979 |
-
* FIXED: Support for audit trail events with longer names.
|
980 |
-
* IMPROVED: Comments Filtering - It now honours the WordPress settings for previously approved comment authors and never filters such comments.
|
981 |
-
* REMOVED: Option to enable GASP Comments Filtering for logged-in users has been completely removed - this reduces plugin options complexity. All logged-in users by-pass **all** comments filtering.
|
982 |
-
* FIXED: Prevention against plugin redirect loops under certain conditions.
|
983 |
-
* FIXED: IP whitelisting wasn't working under certain cases.
|
984 |
-
|
985 |
-
= 4.0.0 =
|
986 |
-
|
987 |
-
* ADDED: New Feature - Audit Trail
|
988 |
-
* ADDED: Audit Trail options include: Plugins, Themes, Email, WordPress Core, Posts/Pages, Shield plugin
|
989 |
-
* FIXED: Full and proper cleanup of plugin options, crons, and databases upon deactivation.
|
990 |
-
* REMOVED: Firewall Log. This is no longer an option and is instead integrated into the "Shield" Audit Trail.
|
991 |
-
|
992 |
-
= 3.5.5 =
|
993 |
-
|
994 |
-
* ADDED: Better admin notifications for events such as options saving etc.
|
995 |
-
* CHANGE: Some plugin styling to highlight features and options better.
|
996 |
-
* FIXED: Small bug with options default values.
|
997 |
-
|
998 |
-
= 3.5.3 =
|
999 |
-
|
1000 |
-
* ADDED: A warning message on the WordPress admin if the "forceOff" override is active.
|
1001 |
-
* CHANGED: The 'forceOff' system is now temporary - i.e. it doesn't save the configuration, and so once this file is removed, the plugin returns to the settings specified.
|
1002 |
-
* CHANGED: The 'forceOn' option is now removed.
|
1003 |
-
* FIXED: Problems with certain hosting environments reading in files with the ".yaml" extension - [support ref](https://wordpress.org/support/topic/yaml-breaks-plugin)
|
1004 |
-
* FIXED: Small issue where when the file system paths change, some variables don't update properly.
|
1005 |
-
|
1006 |
-
= 3.5.0 =
|
1007 |
-
|
1008 |
-
* CHANGED: Plugin features are now configured [using YAML](https://github.com/mustangostang/spyc/) - no more in-PHP configuration.
|
1009 |
-
* REMOVED: A few options from User Sessions Management as they were unnecessary.
|
1010 |
-
* CHANGED: Database storing tables now have consistent naming.
|
1011 |
-
* FIXED: Issue with User Sessions Management where '0' was specified for session length, resulting in lock out.
|
1012 |
-
* FIXED: Firewall log gathering.
|
1013 |
-
* FIXED: Various PHP warning notices.
|
1014 |
-
|
1015 |
-
= 3.4.0 =
|
1016 |
-
|
1017 |
-
* ADDED: Option to limit number of simultaneous sessions per WordPress user login name (User Management section)
|
1018 |
-
|
1019 |
-
= 3.3.0 =
|
1020 |
-
|
1021 |
-
* ADDED: Option to send notification when an administrator user logs in successfully (under User Management menu).
|
1022 |
-
* CHANGED: Refactoring for how GET and POST data is retrieved
|
1023 |
-
|
1024 |
-
= 3.2.1 =
|
1025 |
-
|
1026 |
-
* FIXED: Custom Comment Filter message problem when using more than one substitution. [ref](http://wordpress.org/support/topic/warning-sprintf-too-few-arguments-in-hometnrastropublic_htmlwpwp-conten?replies=8#post-5927337)
|
1027 |
-
|
1028 |
-
= 3.2.0 =
|
1029 |
-
|
1030 |
-
* ADDED: Options to allow by-pass XML-RPC so as to be compatible with WordPress iPhone/Android apps.
|
1031 |
-
* UPDATED: Login screen message when you're forced logged-out due to 2-factor auth failure on IP or cookie.
|
1032 |
-
* CHANGED: Tweaked method for setting admin access protection on/off
|
1033 |
-
* CHANGED: comment filtering code refactoring.
|
1034 |
-
* FIXED: Options that were "multiple selects" weren't saving correctly
|
1035 |
-
|
1036 |
-
= 3.1.5 =
|
1037 |
-
|
1038 |
-
* FIX: Where some comments would fail GASP comment token checking.
|
1039 |
-
|
1040 |
-
= 3.1.4 =
|
1041 |
-
|
1042 |
-
* FIX: Logout URL parameters are now generated correctly so that the correct messages are shown.
|
1043 |
-
* CHANGED: small optimizations and code refactoring.
|
1044 |
-
* UPDATED: a few translation files based on the latest available contributions.
|
1045 |
-
|
1046 |
-
= 3.1.3 =
|
1047 |
-
|
1048 |
-
* FIX: issue with login cooldown timeouts not being updated where admin access restriction is in place.
|
1049 |
-
|
1050 |
-
= 3.1.2 =
|
1051 |
-
|
1052 |
-
* FIX: auto-updates feature not loading
|
1053 |
-
* FIX: simplified implementation of login protection feature to reduce possibility for bugs/lock-outs
|
1054 |
-
* FIX: auto-forwarding for wp-login.php was preventing user logout
|
1055 |
-
|
1056 |
-
= 3.1.0 =
|
1057 |
-
|
1058 |
-
* ADDED: option to check the logged-in user session only on WordPress admin pages (now the default setting)
|
1059 |
-
* ADDED: option to auto-forward to the WordPress dashboard when you go to wp-login.php and you're already logged in.
|
1060 |
-
* ADDED: message to login screen when no user session is found
|
1061 |
-
* CHANGED: does not verify session when performing AJAX request. (need to build appropriate AJAX response)
|
1062 |
-
* FIX: for wp_login action not passing second argument
|
1063 |
-
|
1064 |
-
= 3.0.0 =
|
1065 |
-
|
1066 |
-
* FEATURE: User Management. Phase 1 - create user sessions to track current and attempted logged in users.
|
1067 |
-
* CHANGED: MASSIVE plugin refactoring for better performance and faster, more reliable future development of features
|
1068 |
-
* ADDED: Obscurity Feature - ability to remove the WP Generator meta tag.
|
1069 |
-
* ADDED: ability to change user login session length in days
|
1070 |
-
* ADDED: ability to set session idle timeout in hours
|
1071 |
-
* ADDED: ability to lock session to a particular IP address (2-factor auth by IP is separate)
|
1072 |
-
* ADDED: ability to view active user sessions
|
1073 |
-
* ADDED: ability to view last page visited for active sessions
|
1074 |
-
* ADDED: ability to view last active time for active sessions
|
1075 |
-
* ADDED: ability to view failed or attempted logins in the past 48hrs
|
1076 |
-
* ADDED: Support for GASP login using WooCommerce
|
1077 |
-
* CHANGED: Admin Access Restriction now has a separate options/feature page
|
1078 |
-
* CHANGED: Admin styling to better see some selected options
|
1079 |
-
* ADDED: Support for WP Wall shoutbox plugin (does no GASP comment checks)
|
1080 |
-
* CHANGED: Removed support for upgrading from versions prior to 2.0
|
1081 |
-
* CHANGED: Removed support for importing from Firewall 2 plugin - to import, manually install plugin v2.6.6, import settings, then upgrade.
|
1082 |
-
|
1083 |
-
= 2.6.6 =
|
1084 |
-
|
1085 |
-
* FIX: Improved compatibility with bbPress.
|
1086 |
-
|
1087 |
-
= 2.6.5 =
|
1088 |
-
|
1089 |
-
* FIX: Could not enable Admin Access Protection feature on new installs due to too aggressive testing on security.
|
1090 |
-
|
1091 |
-
= 2.6.4 =
|
1092 |
-
|
1093 |
-
* ENHANCED: Dashboard now shows a more visual summary of settings and removes duplicate options settings with links to sections.
|
1094 |
-
* ENHANCED: WordPress Lock Down options now also set the corresponding WordPress defines if they're not already.
|
1095 |
-
|
1096 |
-
= 2.6.3 =
|
1097 |
-
|
1098 |
-
* ADDED: More in-line plugin links to help/blog resources
|
1099 |
-
* ENHANCED: [Admin Access Protection](http://icwp.io/5b) is further enhanced in 3 ways:
|
1100 |
-
|
1101 |
-
1. More robust cookie values using MD5s
|
1102 |
-
1. Blocks plugin options updating right at the point of WordPress options update so nothing can rewrite the actual plugin options.
|
1103 |
-
1. Locks the current Admin Access session to your IP address - effectively only 1 Shield admin allowed at a time.
|
1104 |
-
|
1105 |
-
= 2.6.2 =
|
1106 |
-
|
1107 |
-
* ENHANCED: Added option to completely reject a SPAM comment and redirect to the home page (so it doesn't fill up your database with rubbish)
|
1108 |
-
* ADDED: Plugin now has an internal stats counter for spam and other significant plugin events.
|
1109 |
-
|
1110 |
-
= 2.6.1 =
|
1111 |
-
|
1112 |
-
* ADDED: Plugin now installs with default SPAM blacklist.
|
1113 |
-
* ADDED: Now automatically checks and updates the SPAM blacklist when it's older than 48hrs.
|
1114 |
-
* ENHANCED: Comment messages indicate where the SPAM content was found when marking human-based spam messages.
|
1115 |
-
|
1116 |
-
= 2.6.0 =
|
1117 |
-
|
1118 |
-
**Major Features Release: Please review SPAM comments filtering options to determine where SPAM goes**
|
1119 |
-
|
1120 |
-
* FEATURE: Added Human SPAM comments filtering - replacement for Akismet that doesn't use or send any data to 3rd party services. Uses [Blacklist provided and maintained by Grant Hutchinson](https://github.com/splorp/wordpress-comment-blacklist)
|
1121 |
-
* ENHANCED: Two-Factor Login now automatically logs in the user to the admin area without them having to re-login again.
|
1122 |
-
* ENHANCED: Added ability to terminate all currently (two-factor) verified logins.
|
1123 |
-
* ENHANCED: Spam filter/scanning adds an explanation to the SPAM content to show why a message was filtered.
|
1124 |
-
* FIXES: For PHP warnings while in php strict mode.
|
1125 |
-
* CLEAN: Much cleaning up of code.
|
1126 |
-
|
1127 |
-
= 2.5.9 =
|
1128 |
-
|
1129 |
-
* FEATURE: Added option to try and exclude search engine bots from firewall checking option - OFF by default.
|
1130 |
-
|
1131 |
-
= 2.5.8 =
|
1132 |
-
|
1133 |
-
* FEATURE: Added 'PHP Code' Firewall checking option.
|
1134 |
-
|
1135 |
-
= 2.5.7 =
|
1136 |
-
|
1137 |
-
* IMPROVED: Handling and logic of two-factor authentication and user roles/levels
|
1138 |
-
|
1139 |
-
= 2.5.6 =
|
1140 |
-
|
1141 |
-
* FEATURE: Added ability to specify the particular WordPress user roles that are subject to 2-factor authentication. (Default: Contributors, Authors, Editors and Administrators)
|
1142 |
-
|
1143 |
-
= 2.5.5 =
|
1144 |
-
|
1145 |
-
* FEATURE: Added 'Lockdown' feature to force login to WordPress over SSL.
|
1146 |
-
* FEATURE: Added 'Lockdown' feature to force WordPress Admin dashboard to be delivered over SSL.
|
1147 |
-
* FIX: Admin restricted access feature wasn't disabled with the "forceOff" option.
|
1148 |
-
|
1149 |
-
= 2.5.4 =
|
1150 |
-
|
1151 |
-
* FIX: How WordPress Automatic/Background Updates filters worked was changed with WordPress 3.8.2.
|
1152 |
-
|
1153 |
-
= 2.5.3 =
|
1154 |
-
|
1155 |
-
* UPDATED: Translations. And confirmed compatibility with WordPress 3.9
|
1156 |
-
|
1157 |
-
= 2.5.2 =
|
1158 |
-
|
1159 |
-
* FEATURE: Option to Prevent Remote Posting to the WordPress Login system. Will check that the login form was submitted from the same site.
|
1160 |
-
|
1161 |
-
= 2.5.1 =
|
1162 |
-
|
1163 |
-
* UPDATED: Translations and added some partials (Catalan, Persian)
|
1164 |
-
* FIX: for cleanup cron running on non-existent tables.
|
1165 |
-
|
1166 |
-
= 2.5.0 =
|
1167 |
-
|
1168 |
-
* FEATURE: Two-Factor Authenticated Login using [Yubikey](http://icwp.io/4i) One Time Passwords (OTP).
|
1169 |
-
|
1170 |
-
= 2.4.3 =
|
1171 |
-
|
1172 |
-
* ADDED: Translations: Spanish, Italian, Turkish. (~15% complete)
|
1173 |
-
* UPDATED: Hebrew Translations (100%)
|
1174 |
-
|
1175 |
-
= 2.4.2 =
|
1176 |
-
|
1177 |
-
* ADDED: Contextual help links for many options. More to come...
|
1178 |
-
* ADDED: More Portuguese (Brazil) translations (~80%)
|
1179 |
-
|
1180 |
-
= 2.4.1 =
|
1181 |
-
|
1182 |
-
* ADDED: More strings to the translation set for better multilingual support
|
1183 |
-
* ADDED: Portuguese (Brazil) translations (~40%)
|
1184 |
-
* UPDATED: Hebrew Translations
|
1185 |
-
* FIXED: Automatic cleaning of database logs wasn't actually working as expected. Should now be fixed.
|
1186 |
-
|
1187 |
-
= 2.4.0 =
|
1188 |
-
|
1189 |
-
* NEW: Option to enable Two-Factor Authentication based on Cookie. In this way you can tie a user session to a single browser.
|
1190 |
-
* FIX: Better WordPress Multisite (WPMS) Support.
|
1191 |
-
|
1192 |
-
= 2.3.4 =
|
1193 |
-
|
1194 |
-
* FIX: Automatic updating of itself.
|
1195 |
-
|
1196 |
-
= 2.3.3 =
|
1197 |
-
|
1198 |
-
* ADDED: Hebrew Translations. Thanks [Ahrale](http://atar4u.com)!
|
1199 |
-
* ADDED: Automatic trimming of the Firewall access log to 7 days - it just grows too large otherwise.
|
1200 |
-
* FIX: The previously added automatic clean up of old comments and login protect database entries was wiping out the valid login protect
|
1201 |
-
entries and was forcing users to re-login every 24hrs.
|
1202 |
-
* FIX: Some small bugs, errors, and PHPDoc Comments.
|
1203 |
-
|
1204 |
-
= 2.3.2 =
|
1205 |
-
|
1206 |
-
* ADDED: Automatic cleaning of GASP Comments Filter and Login Protection database entries (older than 24hrs) using WordPress Cron (everyday @ 6am)
|
1207 |
-
* CHANGED: Huge code refactoring to allow for more easily use with other WordPress plugins.
|
1208 |
-
|
1209 |
-
= 2.2.5 =
|
1210 |
-
|
1211 |
-
* ADDED: Email sending options for automatic update notifications - options to change the notification email address, or turn it off completely.
|
1212 |
-
|
1213 |
-
= 2.2.4 =
|
1214 |
-
|
1215 |
-
* FIX: Small bug fix.
|
1216 |
-
* CHANGED: When running a force automatic updates process, tries to remove influence from other plugins and uses only this plugin's automatic updates settings.
|
1217 |
-
* CHANGED: A bit of automatic updates code refactoring.
|
1218 |
-
|
1219 |
-
= 2.2.2 =
|
1220 |
-
|
1221 |
-
* CHANGED: Changed all options to be disabled by default.
|
1222 |
-
* CHANGED: The option for admin notices will turn off all main admin notices except after you update options.
|
1223 |
-
|
1224 |
-
= 2.2.1 =
|
1225 |
-
|
1226 |
-
* ADDED: Verified compatibility with WordPress 3.8
|
1227 |
-
|
1228 |
-
= 2.2.0 =
|
1229 |
-
|
1230 |
-
* CHANGED: Certain filesystem calls are more compatible with restrictive hosting environments.
|
1231 |
-
* CHANGED: Plugin is now ready to integate with [iControlWP automatic background updates system](http://www.icontrolwp.com/2013/11/manage-wordpress-automatic-background-updates-icontrolwp/).
|
1232 |
-
* FIX: Login Protection Cooldown feature may not operate properly in certain scenarios.
|
1233 |
-
|
1234 |
-
= 2.1.5 =
|
1235 |
-
|
1236 |
-
* IMPROVED: Improved logic for Firewall whitelisting for pages and parameters to ensure whitelisting rules are followed.
|
1237 |
-
* CHANGED: The whitelisting rule for posting pages/posts is only for the "content" and the firewall checking will apply to all other page parameters.
|
1238 |
-
|
1239 |
-
= 2.1.4 =
|
1240 |
-
|
1241 |
-
* FIX: When you run the Force Automatic Background Updates, it disables the plugins. This problem is now fixed.
|
1242 |
-
|
1243 |
-
= 2.1.2 =
|
1244 |
-
|
1245 |
-
* FIX: A bug that prevented auto-updates of this plugin.
|
1246 |
-
* FIX: Not being able to hide translations and upgrade notices.
|
1247 |
-
* ADDED: Tweaks to auto-update feature to allow interfacing with the iControlWP service to customize the auto update system.
|
1248 |
-
|
1249 |
-
= 2.1.0 =
|
1250 |
-
|
1251 |
-
* ADDED: A button that lets you run the WordPress Automatic Updates process on-demand (so you don't have to wait for WordPress cron).
|
1252 |
-
* CHANGED: The plugin now sets more options to be turned on by default when the plugin is first activated.
|
1253 |
-
* CHANGED: A lot of optimizations and code refactoring.
|
1254 |
-
|
1255 |
-
= 2.0.3 =
|
1256 |
-
|
1257 |
-
* FIX: Whoops, sorry, accidentally removed the option to toggle "disable file editing". It's back now.
|
1258 |
-
|
1259 |
-
= 2.0.2 =
|
1260 |
-
|
1261 |
-
* CHANGED: WordPress filters used to programmatically update whitelists now update the Login Protection IP whitelist
|
1262 |
-
|
1263 |
-
= 2.0.1 =
|
1264 |
-
|
1265 |
-
* ADDED: Localization capabilities. All we need now are translators! [Go here to get started](http://translate.icontrolwp.com/).
|
1266 |
-
* ADDED: Option to mask the WordPress version so the real version is never publicly visible.
|
1267 |
-
|
1268 |
-
= 1.9.2 =
|
1269 |
-
|
1270 |
-
* CHANGED: Simplified the automatic WordPress Plugin updates into 1 filter for consistency
|
1271 |
-
|
1272 |
-
= 1.9.1 =
|
1273 |
-
|
1274 |
-
* ADDED: Increased admin access security features - blocks the deactivation of itself if you're not authenticated fully with the plugin.
|
1275 |
-
* ADDED: If you're not authenticated with the plugin, the plugin listing view wont have 'Deactivate' or 'Edit' links.
|
1276 |
-
|
1277 |
-
= 1.9.0 =
|
1278 |
-
|
1279 |
-
* ADDED: New WordPress Automatic Updates Configuration settings
|
1280 |
-
|
1281 |
-
= 1.8.2 =
|
1282 |
-
|
1283 |
-
* ADDED: Notification of available plugin upgrade is now an option under the 'Dashboard'
|
1284 |
-
* CHANGED: Certain admin and upgrade notices now only appear when you're authenticated with the plugin (if this is enabled)
|
1285 |
-
* FIXED: PHP Notice with undefined index.
|
1286 |
-
|
1287 |
-
= 1.8.1 =
|
1288 |
-
|
1289 |
-
* ADDED: Feature- Access Key Restriction [more info](http://icwp.io/2s).
|
1290 |
-
* ADDED: Feature- WordPress Lockdown. Currently only provides 1 option, but more to come.
|
1291 |
-
|
1292 |
-
= 1.7.3 =
|
1293 |
-
|
1294 |
-
* CHANGED: Reworked a lot of the plugin to optimize for further performance.
|
1295 |
-
* FIX: Potential infinite loop in processing firewall.
|
1296 |
-
|
1297 |
-
= 1.7.1 =
|
1298 |
-
|
1299 |
-
* ADDED: Much more efficiency yet again in the loading/saving of the plugin options.
|
1300 |
-
|
1301 |
-
= 1.7.0 =
|
1302 |
-
|
1303 |
-
* ADDED: Preliminary WordPress Multisite (WPMS/WPMU) Support.
|
1304 |
-
* CHANGED: The Firewall now kicks in on the 'plugins_loaded' hook instead of as the actual firewall plugin is initialized (as a result
|
1305 |
-
of WP Multisite support).
|
1306 |
-
|
1307 |
-
= 1.6.2 =
|
1308 |
-
|
1309 |
-
* REMOVED: Automatic upgrade option until I can ascertain what caused the plugin to auto-disable.
|
1310 |
-
|
1311 |
-
= 1.6.1 =
|
1312 |
-
|
1313 |
-
* ADDED: Options to fully customize the text displayed by the GASP comments section.
|
1314 |
-
* ADDED: Option to include logged-in users in the GASP Comments Filter.
|
1315 |
-
|
1316 |
-
= 1.6.0 =
|
1317 |
-
|
1318 |
-
* ADDED: A new section - 'Comments Filtering' that will form the basis for filtering comments with SPAM etc.
|
1319 |
-
* ADDED: Option to add enhanced GASP based comments filtering to prevent SPAM bots posting comments to your site.
|
1320 |
-
|
1321 |
-
= 1.5.6 =
|
1322 |
-
|
1323 |
-
* IMPROVED: Whitelist/Blacklist IP range processing to better cater for ranges when saving, with more thorough checking.
|
1324 |
-
* IMPROVED: Whitelist/Blacklist IP range processing for 32-bit systems.
|
1325 |
-
* FIXED: A bug with Whitelist/Blacklist IP checking.
|
1326 |
-
|
1327 |
-
= 1.5.5 =
|
1328 |
-
|
1329 |
-
* FIXED: Quite a few bugs fixed.
|
1330 |
-
|
1331 |
-
= 1.5.4 =
|
1332 |
-
|
1333 |
-
* FIXED: Typo error.
|
1334 |
-
|
1335 |
-
= 1.5.3 =
|
1336 |
-
|
1337 |
-
* FIXED: Some of the firewall processors were saving unnecessary data.
|
1338 |
-
|
1339 |
-
= 1.5.2 =
|
1340 |
-
|
1341 |
-
* CHANGED: The method for finding the client IP address is more thorough, in a bid to work with Proxy servers etc.
|
1342 |
-
* FIXED: PHP notice reported here: http://wordpress.org/support/topic/getting-errors-when-logged-in
|
1343 |
-
|
1344 |
-
= 1.5.1 =
|
1345 |
-
|
1346 |
-
* FIXED: Bug fix where IP address didn't show in email.
|
1347 |
-
* FIXED: Attempt to fix problem where update message never hides.
|
1348 |
-
|
1349 |
-
= 1.5.0 =
|
1350 |
-
|
1351 |
-
* ADDED: A new IP whitelist on the Login Protect that lets you by-pass login protect rules for given IP addresses.
|
1352 |
-
* REMOVED: Firewall rule for wp-login.php and whitelisted IPs.
|
1353 |
-
|
1354 |
-
= 1.4.2 =
|
1355 |
-
|
1356 |
-
* ADDED: The plugin now has an option to automatically upgrade itself when an update is detected - enabled by default.
|
1357 |
-
|
1358 |
-
= 1.4.1 =
|
1359 |
-
|
1360 |
-
* ADDED: The plugin will now displays an admin notice when a plugin upgrade is available with a link to immediately update.
|
1361 |
-
* ADDED: Plugin collision: removes the main hook by 'All In One WordPress Security'. No need to have both plugins running.
|
1362 |
-
* ADDED: Improved Login Cooldown Feature- works more like email throttling as it now uses an extra filesystem-based level of protection.
|
1363 |
-
* FIXED: Login Cooldown Feature didn't take effect in certain circumstances.
|
1364 |
-
|
1365 |
-
= 1.4.0 =
|
1366 |
-
|
1367 |
-
* ADDED: All-new plugin options handling making them more efficient, easier to manage/update, using far fewer WordPress database options.
|
1368 |
-
* CHANGED: Huge improvements on database calls and efficiency in loading plugin options.
|
1369 |
-
* FIXED: Nonce implementation.
|
1370 |
-
|
1371 |
-
= 1.3.2 =
|
1372 |
-
|
1373 |
-
* FIXED: Small compatibility issue with Quick Cache menu not showing.
|
1374 |
-
|
1375 |
-
= 1.3.0 =
|
1376 |
-
|
1377 |
-
* ADDED: Email Throttle Feature - this will prevent you getting bombarded by 1000s of emails in case you're hit by a bot.
|
1378 |
-
* ADDED: Another Firewall die() option. New option will print a message and uses the wp_die() function instead.
|
1379 |
-
* ADDED: Refactored and improved the logging system (upgrading will delete your current logs!).
|
1380 |
-
* ADDED: Option to separately log Login Protect features.
|
1381 |
-
* ADDED: Option to by-pass 2-factor authentication in the case sending the verification email fails
|
1382 |
-
(so you don't get locked out if your hosting doesn't support email!).
|
1383 |
-
* CHANGED: Login Protect checking now better logs out users immediately with a redirect.
|
1384 |
-
* CHANGED: We now escape the log data being printed - just in case there's any HTML/JS etc in there we don't want.
|
1385 |
-
* CHANGED: Optimized and cleaned a lot of the option caching code to improve reliability and performance (more to come).
|
1386 |
-
|
1387 |
-
= 1.2.7 =
|
1388 |
-
|
1389 |
-
* FIX: Bug where the GASP Login protection was only working when you had 2-factor authentication enabled.
|
1390 |
-
|
1391 |
-
= 1.2.6 =
|
1392 |
-
|
1393 |
-
* ADDED: Ability to import settings from WordPress Firewall 2 plugin options - note, doesn't import page and variables whitelisting.
|
1394 |
-
* FIX: A reported bug - parameter values could also be arrays.
|
1395 |
-
|
1396 |
-
= 1.2.5 =
|
1397 |
-
|
1398 |
-
* ADDED: New Feature - Option to add a checkbox that blocks automated SPAM Bots trying to log into your site.
|
1399 |
-
* ADDED: Added a clear user message when they verify their 2-factor authentication.
|
1400 |
-
* FIX: A few bugfixes and logic corrections.
|
1401 |
-
|
1402 |
-
= 1.2.4 =
|
1403 |
-
|
1404 |
-
* CHANGED: Documentation on the dashboard, and the message after installing the firewall have been updated to be clearer and more informative.
|
1405 |
-
* FIX: A few bugfixes and logic corrections.
|
1406 |
-
|
1407 |
-
= 1.2.3 =
|
1408 |
-
|
1409 |
-
* FIX: bugfix.
|
1410 |
-
|
1411 |
-
= 1.2.2 =
|
1412 |
-
|
1413 |
-
* FIX: Some warnings and display bugs.
|
1414 |
-
|
1415 |
-
= 1.2.1 =
|
1416 |
-
|
1417 |
-
* ADDED: New Feature - Login Wait Interval. To reduce the effectiveness of brute force login attacks, you can add an interval by
|
1418 |
-
which WordPress will wait before processing any more login attempts on a site.
|
1419 |
-
* CHANGED: Optimized some settings for performance.
|
1420 |
-
* CHANGED: Cleaned up the UI when the Firewall / Login Protect features are disabled (more to come).
|
1421 |
-
* CHANGED: Further code improvements (more to come).
|
1422 |
-
|
1423 |
-
= 1.2.0 =
|
1424 |
-
|
1425 |
-
* ADDED: New Feature - **Login Protect**. Added 2-Factor Login Authentication for all users and their associated IP addresses.
|
1426 |
-
* CHANGED: The method for processing the IP address lists is improved.
|
1427 |
-
* CHANGED: Improved .htaccess rules (thanks MickeyRoush)
|
1428 |
-
* CHANGED: Mailing method now uses WP_MAIL
|
1429 |
-
* CHANGED: Lot's of code improvements.
|
1430 |
-
|
1431 |
-
= 1.1.6 =
|
1432 |
-
|
1433 |
-
* ADDED: Option to include Cookies in the firewall checking.
|
1434 |
-
|
1435 |
-
= 1.1.5 =
|
1436 |
-
|
1437 |
-
* ADDED: Ability to whitelist particular pages and their parameters (see FAQ)
|
1438 |
-
* CHANGED: Quite a few improvements made to the reliability of the firewall processing.
|
1439 |
-
|
1440 |
-
= 1.1.4 =
|
1441 |
-
|
1442 |
-
* FIX: Left test path in plugin.
|
1443 |
-
|
1444 |
-
= 1.1.3 =
|
1445 |
-
|
1446 |
-
* ADDED: Option to completely ignore logged-in Administrators from the Firewall processing (they wont even trigger logging etc).
|
1447 |
-
* ADDED: Ability to (un)blacklist and (un)whitelist IP addresses directly from within the log.
|
1448 |
-
* ADDED: helpful link to IP WHOIS from within the log.
|
1449 |
-
|
1450 |
-
= 1.1.2 =
|
1451 |
-
|
1452 |
-
* CHANGED: Logging now has its own dedicated database table.
|
1453 |
-
|
1454 |
-
= 1.1.1 =
|
1455 |
-
|
1456 |
-
* Fix: Block notification emails weren't showing the user-friendly IP Address format.
|
1457 |
-
|
1458 |
-
= 1.1.0 =
|
1459 |
-
|
1460 |
-
* You can now specify IP ranges in whitelists and blacklists. To do this separate the start and end address with a hyphen (-) E.g. For everything between 1.2.3.4 and 1.2.3.10, you would do: 1.2.3.4-1.2.3.10
|
1461 |
-
* You can now specify which email address to send the notification emails.
|
1462 |
-
* You can now add a comment to IP addresses in the whitelist/blacklist. To do this, write your IP address then type a SPACE and write whatever you want (don't take a new line).
|
1463 |
-
* You can now set to delete ALL firewall settings when you deactivate the plugin.
|
1464 |
-
* Improved formatting of the firewall log.
|
1465 |
-
|
1466 |
-
= 1.0.2 =
|
1467 |
-
* First Release
|
1468 |
-
|
1469 |
-
== Upgrade Notice ==
|
1470 |
-
|
1471 |
-
= 1.1.2 =
|
1472 |
-
|
1473 |
-
* CHANGED: Logging now has its own dedicated database table.
|
1474 |
-
* Fix: Block notification emails weren't showing the user-friendly IP Address format.
|
1475 |
-
* You can now specify IP ranges in whitelists and blacklists. To do this separate the start and end address with a hyphen (-) E.g. For everything between 1.2.3.4 and 1.2.3.10, you would do: 1.2.3.4-1.2.3.10
|
1476 |
-
* You can now specify which email address to send the notification emails.
|
1477 |
-
* You can now add a comment to IP addresses in the whitelist/blacklist. To do this, write your IP address then type a SPACE and write whatever you want (don't take a new line).
|
1478 |
-
* You can now set to delete ALL firewall settings when you deactivate the plugin.
|
1479 |
-
* Improved formatting of the firewall log.
|
3 |
Donate link: http://icwp.io/bw
|
4 |
License: GPLv3
|
5 |
License URI: http://www.gnu.org/licenses/gpl.html
|
6 |
+
Tags: security, all in one, scanner, firewall, spam, two-factor authentication, wordfence, cerber, ithemes
|
7 |
Requires at least: 3.5.0
|
8 |
Requires PHP: 5.2.4
|
9 |
Recommended PHP: 5.4
|
10 |
Tested up to: 4.9
|
11 |
+
Stable tag: 6.6.2
|
12 |
|
13 |
+
Complete All-In-One Protection for your WordPress sites, that makes Security Easy for Everyone - it doesn't have to be hard anymore.
|
14 |
|
15 |
== Description ==
|
16 |
|
17 |
+
### Powerful Security for WordPress *doesn't* need to be *hard*
|
18 |
|
19 |
+
There's no good reason for WordPress security plugins to be so complicated. It doesn't have to be that way.
|
20 |
|
21 |
+
Shield is the easiest security plugin to setup - you simply activate it. Then a beautiful, step-by-step wizard will walk you through the basic configuration.
|
22 |
|
23 |
+
And whenever you're ready, you can dig deeper.
|
24 |
|
25 |
+
#### Trust: Shield Does Exactly What It Says It Will Do
|
|
|
26 |
|
27 |
+
You've probably been let down in the past, but Shield is the WordPress Security solution that does what it says it'll do - Protect Your Site.
|
28 |
+
|
29 |
+
#### Constant notifications are not okay. You're already busy enough!
|
30 |
+
|
31 |
+
Shield is your Silent Guardian. It doesn't squawk at you every time a visitor presses against your defenses.
|
32 |
+
|
33 |
+
Shield notifies you when you need to be alerted to an incident. Otherwise, it'll do *its job* without moaning at you, and let you get on with *your job*.
|
34 |
+
|
35 |
+
#### You're not alone, and there's no risk to test it out.
|
36 |
+
|
37 |
+
You can try out Shield alongside any other security plugins, and it [comes highly recommended](https://wordpress.org/support/plugin/wp-simple-firewall/reviews/)
|
38 |
+
- it has the highest average rating for any WP Security plugin.
|
39 |
+
|
40 |
+
Easy-to-setup, but powerful protection blocks attacks and suspicious activity, but won't lock you out.
|
41 |
|
42 |
Shield is the must-have, free Security Solution for all your WordPress sites.
|
43 |
|
88 |
> 1. (coming soon) Statistics and Reporting
|
89 |
> 1. (coming soon) Select individual automatic plugin updates
|
90 |
|
91 |
+
### Dedicated Premium Support
|
92 |
+
|
93 |
+
The Shield Security team prioritises email technical support over the WordPress.org forums.
|
94 |
+
Individual, dedicated technical support is only available to customers who have [purchased Shield Pro](http://icwp.io/ab).
|
95 |
+
|
96 |
Learn more on going Pro at [our One Dollar Plugin store](http://icwp.io/ab).
|
97 |
|
98 |
= Our Mission =
|
119 |
* Super Admin Security - the *only* WordPress Security Plugin that protects against tampering.
|
120 |
* Exclusive membership to a private security group where you can learn more about WordPress security.
|
121 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
= Super Admin Security Protection =
|
123 |
The **only** WordPress security plugin with a WordPress-independent security key to protect itself. [more info](http://icwp.io/wpsf05)
|
124 |
|
145 |
|
146 |
[youtube http://www.youtube.com/watch?v=r307fu3Eqbo]
|
147 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
= Login and Identity Security Protection - Stops Brute Force Attacks =
|
149 |
|
150 |
Note: Login Guard is a completely independent feature to the Firewall.
|
194 |
|
195 |
== Installation ==
|
196 |
|
|
|
|
|
|
|
|
|
197 |
Note: When you enable the plugin, the firewall is not automatically turned on. This plugin contains various different sections of
|
198 |
protection for your site and you should choose which you need based on your own requirements.
|
199 |
|
217 |
|
218 |
Easy - we're just better! ;)
|
219 |
|
220 |
+
Firstly, we don't modify a single core WordPress or web hosting file. This is important and explains why randomly you upgrade your security plugin and your site dies.
|
|
|
|
|
221 |
|
222 |
Ideally you shouldn't use this along side other Anti-SPAM plugins or security plugins. If there is a feature you need, please feel free to suggest it in the support forums.
|
223 |
|
348 |
|
349 |
You can [go Pro for just $1/month](http://icwp.io/aa).
|
350 |
|
351 |
+
= 6.6.2 - Current Release =
|
352 |
+
*Released: 22nd March, 2018* - [Release Notes](http://icwp.io/c3)
|
353 |
|
354 |
+
* **(v.1-2)** FIXED: Various small fixes and improvements
|
355 |
* **(v.0)** NEW: [**PRO**] [Keyless Activation of Pro licenses](http://icwp.io/c1).
|
356 |
* **(v.0)** ADDED: [WordPress Password Policies](http://icwp.io/c2).
|
357 |
* **(v.0)** ADDED: Pwned Passwords Detection.
|
362 |
= 6.6 Series =
|
363 |
*Released: 19th March, 2018* - [Release Notes](http://icwp.io/c3)
|
364 |
|
365 |
+
* **(v.1-2)** FIXED: Various small fixes and improvements
|
366 |
* **(v.0)** NEW: [**PRO**] [Keyless Activation of Pro licenses](http://icwp.io/c1).
|
367 |
* **(v.0)** ADDED: [WordPress Password Policies](http://icwp.io/c2).
|
368 |
* **(v.0)** ADDED: Pwned Passwords Detection.
|
380 |
* **(v.0)** FIXED: Plugin Guard better handles ignoring non-WordPress.org Plugins/Themes
|
381 |
* **(v.0)** FIXED: A few small bugs
|
382 |
|
383 |
+
#### [Full Changelog](https://ps.w.org/wp-simple-firewall/trunk/changelog.html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/common/icwp-optionsvo.php
CHANGED
@@ -705,7 +705,8 @@ class ICWP_WPSF_OptionsVO extends ICWP_WPSF_Foundation {
|
|
705 |
$aOptionsValues = $this->getAllOptionsValues();
|
706 |
$mCurrent = isset( $aOptionsValues[ $sOptKey ] ) ? $aOptionsValues[ $sOptKey ] : null;
|
707 |
|
708 |
-
|
|
|
709 |
$this->setNeedSave( true );
|
710 |
|
711 |
//Load the config and do some pre-set verification where possible. This will slowly grow.
|
@@ -722,11 +723,31 @@ class ICWP_WPSF_OptionsVO extends ICWP_WPSF_Foundation {
|
|
722 |
}
|
723 |
|
724 |
/**
|
|
|
725 |
* @param string $sOptKey
|
726 |
* @param mixed $mValue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
727 |
* @return bool
|
728 |
*/
|
729 |
-
|
730 |
$bValid = true;
|
731 |
|
732 |
switch ( $this->getOptionType( $sOptKey ) ) {
|
@@ -734,13 +755,17 @@ class ICWP_WPSF_OptionsVO extends ICWP_WPSF_Foundation {
|
|
734 |
case 'integer':
|
735 |
$nMin = $this->getOptProperty( $sOptKey, 'min' );
|
736 |
if ( !is_null( $nMin ) ) {
|
737 |
-
$bValid = $
|
738 |
}
|
739 |
$nMax = $this->getOptProperty( $sOptKey, 'max' );
|
740 |
if ( !is_null( $nMax ) ) {
|
741 |
-
$bValid = $
|
742 |
}
|
743 |
break;
|
|
|
|
|
|
|
|
|
744 |
}
|
745 |
return $bValid;
|
746 |
}
|
705 |
$aOptionsValues = $this->getAllOptionsValues();
|
706 |
$mCurrent = isset( $aOptionsValues[ $sOptKey ] ) ? $aOptionsValues[ $sOptKey ] : null;
|
707 |
|
708 |
+
$mValue = $this->ensureOptValueState( $sOptKey, $mValue );
|
709 |
+
if ( serialize( $mCurrent ) !== serialize( $mValue ) && $this->verifyCanSet( $sOptKey, $mValue ) ) {
|
710 |
$this->setNeedSave( true );
|
711 |
|
712 |
//Load the config and do some pre-set verification where possible. This will slowly grow.
|
723 |
}
|
724 |
|
725 |
/**
|
726 |
+
* Ensures that set options values are of the correct type
|
727 |
* @param string $sOptKey
|
728 |
* @param mixed $mValue
|
729 |
+
* @return mixed
|
730 |
+
*/
|
731 |
+
private function ensureOptValueState( $sOptKey, $mValue ) {
|
732 |
+
switch ( $this->getOptionType( $sOptKey ) ) {
|
733 |
+
case 'integer':
|
734 |
+
$mValue = (int)$mValue;
|
735 |
+
break;
|
736 |
+
|
737 |
+
case 'text':
|
738 |
+
case 'email':
|
739 |
+
$mValue = (string)$mValue;
|
740 |
+
break;
|
741 |
+
}
|
742 |
+
return $mValue;
|
743 |
+
}
|
744 |
+
|
745 |
+
/**
|
746 |
+
* @param string $sOptKey
|
747 |
+
* @param mixed $mPotentialValue
|
748 |
* @return bool
|
749 |
*/
|
750 |
+
private function verifyCanSet( $sOptKey, $mPotentialValue ) {
|
751 |
$bValid = true;
|
752 |
|
753 |
switch ( $this->getOptionType( $sOptKey ) ) {
|
755 |
case 'integer':
|
756 |
$nMin = $this->getOptProperty( $sOptKey, 'min' );
|
757 |
if ( !is_null( $nMin ) ) {
|
758 |
+
$bValid = $mPotentialValue >= $nMin;
|
759 |
}
|
760 |
$nMax = $this->getOptProperty( $sOptKey, 'max' );
|
761 |
if ( !is_null( $nMax ) ) {
|
762 |
+
$bValid = $mPotentialValue <= $nMax;
|
763 |
}
|
764 |
break;
|
765 |
+
|
766 |
+
case 'email':
|
767 |
+
$bValid = empty( $mPotentialValue ) || $this->loadDP()->validEmail( $mPotentialValue );
|
768 |
+
break;
|
769 |
}
|
770 |
return $bValid;
|
771 |
}
|
src/common/icwp-wpfilesystem.php
CHANGED
@@ -181,6 +181,7 @@ class ICWP_WPSF_WpFilesystem {
|
|
181 |
/**
|
182 |
* @param string $sUrl
|
183 |
* @param array $aRequestArgs
|
|
|
184 |
* @return array|WP_Error|bool
|
185 |
*/
|
186 |
public function requestUrl( $sUrl, $aRequestArgs = array(), $bAlwaysRawResponse = false ) {
|
181 |
/**
|
182 |
* @param string $sUrl
|
183 |
* @param array $aRequestArgs
|
184 |
+
* @param bool $bAlwaysRawResponse
|
185 |
* @return array|WP_Error|bool
|
186 |
*/
|
187 |
public function requestUrl( $sUrl, $aRequestArgs = array(), $bAlwaysRawResponse = false ) {
|
src/common/lib/composer.lock
CHANGED
@@ -87,16 +87,16 @@
|
|
87 |
},
|
88 |
{
|
89 |
"name": "nesbot/carbon",
|
90 |
-
"version": "1.
|
91 |
"source": {
|
92 |
"type": "git",
|
93 |
"url": "https://github.com/briannesbitt/Carbon.git",
|
94 |
-
"reference": "
|
95 |
},
|
96 |
"dist": {
|
97 |
"type": "zip",
|
98 |
-
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/
|
99 |
-
"reference": "
|
100 |
"shasum": ""
|
101 |
},
|
102 |
"require": {
|
@@ -136,7 +136,7 @@
|
|
136 |
"datetime",
|
137 |
"time"
|
138 |
],
|
139 |
-
"time": "2018-03-
|
140 |
},
|
141 |
{
|
142 |
"name": "symfony/polyfill-mbstring",
|
@@ -263,16 +263,16 @@
|
|
263 |
},
|
264 |
{
|
265 |
"name": "twig/twig",
|
266 |
-
"version": "v1.35.
|
267 |
"source": {
|
268 |
"type": "git",
|
269 |
"url": "https://github.com/twigphp/Twig.git",
|
270 |
-
"reference": "
|
271 |
},
|
272 |
"dist": {
|
273 |
"type": "zip",
|
274 |
-
"url": "https://api.github.com/repos/twigphp/Twig/zipball/
|
275 |
-
"reference": "
|
276 |
"shasum": ""
|
277 |
},
|
278 |
"require": {
|
@@ -280,8 +280,8 @@
|
|
280 |
},
|
281 |
"require-dev": {
|
282 |
"psr/container": "^1.0",
|
283 |
-
"symfony/debug": "
|
284 |
-
"symfony/phpunit-bridge": "
|
285 |
},
|
286 |
"type": "library",
|
287 |
"extra": {
|
@@ -324,7 +324,7 @@
|
|
324 |
"keywords": [
|
325 |
"templating"
|
326 |
],
|
327 |
-
"time": "2018-03-
|
328 |
}
|
329 |
],
|
330 |
"packages-dev": [],
|
87 |
},
|
88 |
{
|
89 |
"name": "nesbot/carbon",
|
90 |
+
"version": "1.25.0",
|
91 |
"source": {
|
92 |
"type": "git",
|
93 |
"url": "https://github.com/briannesbitt/Carbon.git",
|
94 |
+
"reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4"
|
95 |
},
|
96 |
"dist": {
|
97 |
"type": "zip",
|
98 |
+
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cbcf13da0b531767e39eb86e9687f5deba9857b4",
|
99 |
+
"reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4",
|
100 |
"shasum": ""
|
101 |
},
|
102 |
"require": {
|
136 |
"datetime",
|
137 |
"time"
|
138 |
],
|
139 |
+
"time": "2018-03-19T15:50:49+00:00"
|
140 |
},
|
141 |
{
|
142 |
"name": "symfony/polyfill-mbstring",
|
263 |
},
|
264 |
{
|
265 |
"name": "twig/twig",
|
266 |
+
"version": "v1.35.3",
|
267 |
"source": {
|
268 |
"type": "git",
|
269 |
"url": "https://github.com/twigphp/Twig.git",
|
270 |
+
"reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f"
|
271 |
},
|
272 |
"dist": {
|
273 |
"type": "zip",
|
274 |
+
"url": "https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
|
275 |
+
"reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
|
276 |
"shasum": ""
|
277 |
},
|
278 |
"require": {
|
280 |
},
|
281 |
"require-dev": {
|
282 |
"psr/container": "^1.0",
|
283 |
+
"symfony/debug": "^2.7",
|
284 |
+
"symfony/phpunit-bridge": "^3.3"
|
285 |
},
|
286 |
"type": "library",
|
287 |
"extra": {
|
324 |
"keywords": [
|
325 |
"templating"
|
326 |
],
|
327 |
+
"time": "2018-03-20T04:25:58+00:00"
|
328 |
}
|
329 |
],
|
330 |
"packages-dev": [],
|
src/common/lib/vendor/composer/installed.json
CHANGED
@@ -143,19 +143,85 @@
|
|
143 |
"shim"
|
144 |
]
|
145 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
{
|
147 |
"name": "nesbot/carbon",
|
148 |
-
"version": "1.
|
149 |
-
"version_normalized": "1.
|
150 |
"source": {
|
151 |
"type": "git",
|
152 |
"url": "https://github.com/briannesbitt/Carbon.git",
|
153 |
-
"reference": "
|
154 |
},
|
155 |
"dist": {
|
156 |
"type": "zip",
|
157 |
-
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/
|
158 |
-
"reference": "
|
159 |
"shasum": ""
|
160 |
},
|
161 |
"require": {
|
@@ -166,7 +232,7 @@
|
|
166 |
"friendsofphp/php-cs-fixer": "~2",
|
167 |
"phpunit/phpunit": "^4.8.35 || ^5.7"
|
168 |
},
|
169 |
-
"time": "2018-03-
|
170 |
"type": "library",
|
171 |
"extra": {
|
172 |
"branch-alias": {
|
@@ -200,17 +266,17 @@
|
|
200 |
},
|
201 |
{
|
202 |
"name": "twig/twig",
|
203 |
-
"version": "v1.35.
|
204 |
-
"version_normalized": "1.35.
|
205 |
"source": {
|
206 |
"type": "git",
|
207 |
"url": "https://github.com/twigphp/Twig.git",
|
208 |
-
"reference": "
|
209 |
},
|
210 |
"dist": {
|
211 |
"type": "zip",
|
212 |
-
"url": "https://api.github.com/repos/twigphp/Twig/zipball/
|
213 |
-
"reference": "
|
214 |
"shasum": ""
|
215 |
},
|
216 |
"require": {
|
@@ -218,10 +284,10 @@
|
|
218 |
},
|
219 |
"require-dev": {
|
220 |
"psr/container": "^1.0",
|
221 |
-
"symfony/debug": "
|
222 |
-
"symfony/phpunit-bridge": "
|
223 |
},
|
224 |
-
"time": "2018-03-
|
225 |
"type": "library",
|
226 |
"extra": {
|
227 |
"branch-alias": {
|
@@ -264,71 +330,5 @@
|
|
264 |
"keywords": [
|
265 |
"templating"
|
266 |
]
|
267 |
-
},
|
268 |
-
{
|
269 |
-
"name": "symfony/translation",
|
270 |
-
"version": "v2.8.36",
|
271 |
-
"version_normalized": "2.8.36.0",
|
272 |
-
"source": {
|
273 |
-
"type": "git",
|
274 |
-
"url": "https://github.com/symfony/translation.git",
|
275 |
-
"reference": "72235c1121ae282254e897e342c001f3d4bb7e8d"
|
276 |
-
},
|
277 |
-
"dist": {
|
278 |
-
"type": "zip",
|
279 |
-
"url": "https://api.github.com/repos/symfony/translation/zipball/72235c1121ae282254e897e342c001f3d4bb7e8d",
|
280 |
-
"reference": "72235c1121ae282254e897e342c001f3d4bb7e8d",
|
281 |
-
"shasum": ""
|
282 |
-
},
|
283 |
-
"require": {
|
284 |
-
"php": ">=5.3.9",
|
285 |
-
"symfony/polyfill-mbstring": "~1.0"
|
286 |
-
},
|
287 |
-
"conflict": {
|
288 |
-
"symfony/config": "<2.7"
|
289 |
-
},
|
290 |
-
"require-dev": {
|
291 |
-
"psr/log": "~1.0",
|
292 |
-
"symfony/config": "~2.8",
|
293 |
-
"symfony/intl": "~2.7.25|^2.8.18|~3.2.5",
|
294 |
-
"symfony/yaml": "~2.2|~3.0.0"
|
295 |
-
},
|
296 |
-
"suggest": {
|
297 |
-
"psr/log": "To use logging capability in translator",
|
298 |
-
"symfony/config": "",
|
299 |
-
"symfony/yaml": ""
|
300 |
-
},
|
301 |
-
"time": "2018-01-18T13:56:23+00:00",
|
302 |
-
"type": "library",
|
303 |
-
"extra": {
|
304 |
-
"branch-alias": {
|
305 |
-
"dev-master": "2.8-dev"
|
306 |
-
}
|
307 |
-
},
|
308 |
-
"installation-source": "dist",
|
309 |
-
"autoload": {
|
310 |
-
"psr-4": {
|
311 |
-
"Symfony\\Component\\Translation\\": ""
|
312 |
-
},
|
313 |
-
"exclude-from-classmap": [
|
314 |
-
"/Tests/"
|
315 |
-
]
|
316 |
-
},
|
317 |
-
"notification-url": "https://packagist.org/downloads/",
|
318 |
-
"license": [
|
319 |
-
"MIT"
|
320 |
-
],
|
321 |
-
"authors": [
|
322 |
-
{
|
323 |
-
"name": "Fabien Potencier",
|
324 |
-
"email": "fabien@symfony.com"
|
325 |
-
},
|
326 |
-
{
|
327 |
-
"name": "Symfony Community",
|
328 |
-
"homepage": "https://symfony.com/contributors"
|
329 |
-
}
|
330 |
-
],
|
331 |
-
"description": "Symfony Translation Component",
|
332 |
-
"homepage": "https://symfony.com"
|
333 |
}
|
334 |
]
|
143 |
"shim"
|
144 |
]
|
145 |
},
|
146 |
+
{
|
147 |
+
"name": "symfony/translation",
|
148 |
+
"version": "v2.8.36",
|
149 |
+
"version_normalized": "2.8.36.0",
|
150 |
+
"source": {
|
151 |
+
"type": "git",
|
152 |
+
"url": "https://github.com/symfony/translation.git",
|
153 |
+
"reference": "72235c1121ae282254e897e342c001f3d4bb7e8d"
|
154 |
+
},
|
155 |
+
"dist": {
|
156 |
+
"type": "zip",
|
157 |
+
"url": "https://api.github.com/repos/symfony/translation/zipball/72235c1121ae282254e897e342c001f3d4bb7e8d",
|
158 |
+
"reference": "72235c1121ae282254e897e342c001f3d4bb7e8d",
|
159 |
+
"shasum": ""
|
160 |
+
},
|
161 |
+
"require": {
|
162 |
+
"php": ">=5.3.9",
|
163 |
+
"symfony/polyfill-mbstring": "~1.0"
|
164 |
+
},
|
165 |
+
"conflict": {
|
166 |
+
"symfony/config": "<2.7"
|
167 |
+
},
|
168 |
+
"require-dev": {
|
169 |
+
"psr/log": "~1.0",
|
170 |
+
"symfony/config": "~2.8",
|
171 |
+
"symfony/intl": "~2.7.25|^2.8.18|~3.2.5",
|
172 |
+
"symfony/yaml": "~2.2|~3.0.0"
|
173 |
+
},
|
174 |
+
"suggest": {
|
175 |
+
"psr/log": "To use logging capability in translator",
|
176 |
+
"symfony/config": "",
|
177 |
+
"symfony/yaml": ""
|
178 |
+
},
|
179 |
+
"time": "2018-01-18T13:56:23+00:00",
|
180 |
+
"type": "library",
|
181 |
+
"extra": {
|
182 |
+
"branch-alias": {
|
183 |
+
"dev-master": "2.8-dev"
|
184 |
+
}
|
185 |
+
},
|
186 |
+
"installation-source": "dist",
|
187 |
+
"autoload": {
|
188 |
+
"psr-4": {
|
189 |
+
"Symfony\\Component\\Translation\\": ""
|
190 |
+
},
|
191 |
+
"exclude-from-classmap": [
|
192 |
+
"/Tests/"
|
193 |
+
]
|
194 |
+
},
|
195 |
+
"notification-url": "https://packagist.org/downloads/",
|
196 |
+
"license": [
|
197 |
+
"MIT"
|
198 |
+
],
|
199 |
+
"authors": [
|
200 |
+
{
|
201 |
+
"name": "Fabien Potencier",
|
202 |
+
"email": "fabien@symfony.com"
|
203 |
+
},
|
204 |
+
{
|
205 |
+
"name": "Symfony Community",
|
206 |
+
"homepage": "https://symfony.com/contributors"
|
207 |
+
}
|
208 |
+
],
|
209 |
+
"description": "Symfony Translation Component",
|
210 |
+
"homepage": "https://symfony.com"
|
211 |
+
},
|
212 |
{
|
213 |
"name": "nesbot/carbon",
|
214 |
+
"version": "1.25.0",
|
215 |
+
"version_normalized": "1.25.0.0",
|
216 |
"source": {
|
217 |
"type": "git",
|
218 |
"url": "https://github.com/briannesbitt/Carbon.git",
|
219 |
+
"reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4"
|
220 |
},
|
221 |
"dist": {
|
222 |
"type": "zip",
|
223 |
+
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cbcf13da0b531767e39eb86e9687f5deba9857b4",
|
224 |
+
"reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4",
|
225 |
"shasum": ""
|
226 |
},
|
227 |
"require": {
|
232 |
"friendsofphp/php-cs-fixer": "~2",
|
233 |
"phpunit/phpunit": "^4.8.35 || ^5.7"
|
234 |
},
|
235 |
+
"time": "2018-03-19T15:50:49+00:00",
|
236 |
"type": "library",
|
237 |
"extra": {
|
238 |
"branch-alias": {
|
266 |
},
|
267 |
{
|
268 |
"name": "twig/twig",
|
269 |
+
"version": "v1.35.3",
|
270 |
+
"version_normalized": "1.35.3.0",
|
271 |
"source": {
|
272 |
"type": "git",
|
273 |
"url": "https://github.com/twigphp/Twig.git",
|
274 |
+
"reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f"
|
275 |
},
|
276 |
"dist": {
|
277 |
"type": "zip",
|
278 |
+
"url": "https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
|
279 |
+
"reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f",
|
280 |
"shasum": ""
|
281 |
},
|
282 |
"require": {
|
284 |
},
|
285 |
"require-dev": {
|
286 |
"psr/container": "^1.0",
|
287 |
+
"symfony/debug": "^2.7",
|
288 |
+
"symfony/phpunit-bridge": "^3.3"
|
289 |
},
|
290 |
+
"time": "2018-03-20T04:25:58+00:00",
|
291 |
"type": "library",
|
292 |
"extra": {
|
293 |
"branch-alias": {
|
330 |
"keywords": [
|
331 |
"templating"
|
332 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
}
|
334 |
]
|
src/common/lib/vendor/nesbot/carbon/src/Carbon/Carbon.php
CHANGED
@@ -18,8 +18,6 @@ use DateTime;
|
|
18 |
use DateTimeInterface;
|
19 |
use DateTimeZone;
|
20 |
use InvalidArgumentException;
|
21 |
-
use Symfony\Component\Translation\Loader\ArrayLoader;
|
22 |
-
use Symfony\Component\Translation\Translator;
|
23 |
use Symfony\Component\Translation\TranslatorInterface;
|
24 |
|
25 |
/**
|
@@ -37,6 +35,7 @@ use Symfony\Component\Translation\TranslatorInterface;
|
|
37 |
* @property \DateTimeZone $tz alias of timezone
|
38 |
* @property-read int $micro
|
39 |
* @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday)
|
|
|
40 |
* @property-read int $dayOfYear 0 through 365
|
41 |
* @property-read int $weekOfMonth 1 through 5
|
42 |
* @property-read int $weekNumberInMonth 1 through 5
|
@@ -235,6 +234,13 @@ class Carbon extends DateTime
|
|
235 |
*/
|
236 |
protected static $utf8 = false;
|
237 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
/**
|
239 |
* Indicates if months should be calculated with overflow.
|
240 |
*
|
@@ -249,6 +255,28 @@ class Carbon extends DateTime
|
|
249 |
*/
|
250 |
protected static $yearsOverflow = true;
|
251 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
/**
|
253 |
* Indicates if months should be calculated with overflow.
|
254 |
*
|
@@ -372,9 +400,6 @@ class Carbon extends DateTime
|
|
372 |
$isNow = empty($time) || $time === 'now';
|
373 |
if (static::hasTestNow() && ($isNow || static::hasRelativeKeywords($time))) {
|
374 |
$testInstance = clone static::getTestNow();
|
375 |
-
if (static::hasRelativeKeywords($time)) {
|
376 |
-
$testInstance->modify($time);
|
377 |
-
}
|
378 |
|
379 |
//shift the time according to the given time zone
|
380 |
if ($tz !== null && $tz !== static::getTestNow()->getTimezone()) {
|
@@ -383,24 +408,26 @@ class Carbon extends DateTime
|
|
383 |
$tz = $testInstance->getTimezone();
|
384 |
}
|
385 |
|
|
|
|
|
|
|
|
|
386 |
$time = $testInstance->format(static::MOCK_DATETIME_FORMAT);
|
387 |
}
|
388 |
|
389 |
-
// Get microseconds from microtime() if "now" asked and PHP < 7.1
|
390 |
$timezone = static::safeCreateDateTimeZone($tz);
|
391 |
// @codeCoverageIgnoreStart
|
392 |
-
if ($isNow && !isset($testInstance) && (
|
393 |
version_compare(PHP_VERSION, '7.1.0-dev', '<')
|
394 |
||
|
395 |
version_compare(PHP_VERSION, '7.1.3-dev', '>=') && version_compare(PHP_VERSION, '7.1.4-dev', '<')
|
396 |
)
|
397 |
) {
|
|
|
|
|
398 |
$dateTime = new DateTime('now', $timezone);
|
399 |
-
$
|
400 |
-
|
401 |
-
$microTime = str_pad(strval($microTime), 6, '0', STR_PAD_LEFT);
|
402 |
-
$time = $dateTime->format(static::DEFAULT_TO_STRING_FORMAT).'.'.$microTime;
|
403 |
-
}
|
404 |
}
|
405 |
// @codeCoverageIgnoreEnd
|
406 |
|
@@ -470,7 +497,7 @@ class Carbon extends DateTime
|
|
470 |
*/
|
471 |
public static function today($tz = null)
|
472 |
{
|
473 |
-
return static::
|
474 |
}
|
475 |
|
476 |
/**
|
@@ -482,7 +509,7 @@ class Carbon extends DateTime
|
|
482 |
*/
|
483 |
public static function tomorrow($tz = null)
|
484 |
{
|
485 |
-
return static::
|
486 |
}
|
487 |
|
488 |
/**
|
@@ -494,7 +521,7 @@ class Carbon extends DateTime
|
|
494 |
*/
|
495 |
public static function yesterday($tz = null)
|
496 |
{
|
497 |
-
return static::
|
498 |
}
|
499 |
|
500 |
/**
|
@@ -702,6 +729,21 @@ class Carbon extends DateTime
|
|
702 |
return static::create(null, null, null, $hour, $minute, $second, $tz);
|
703 |
}
|
704 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
705 |
/**
|
706 |
* Create a Carbon instance from a specific format.
|
707 |
*
|
@@ -763,7 +805,7 @@ class Carbon extends DateTime
|
|
763 |
*/
|
764 |
public static function createFromTimestamp($timestamp, $tz = null)
|
765 |
{
|
766 |
-
return static::
|
767 |
}
|
768 |
|
769 |
/**
|
@@ -813,15 +855,31 @@ class Carbon extends DateTime
|
|
813 |
}
|
814 |
|
815 |
/**
|
816 |
-
* Return the Carbon instance passed through
|
|
|
817 |
*
|
818 |
-
* @param \Carbon\Carbon|null $date
|
819 |
*
|
820 |
* @return static
|
821 |
*/
|
822 |
-
protected function resolveCarbon(
|
823 |
{
|
824 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
825 |
}
|
826 |
|
827 |
///////////////////////////////////////////////////////////////////
|
@@ -849,6 +907,7 @@ class Carbon extends DateTime
|
|
849 |
'second' => 's',
|
850 |
'micro' => 'u',
|
851 |
'dayOfWeek' => 'w',
|
|
|
852 |
'dayOfYear' => 'z',
|
853 |
'weekOfYear' => 'W',
|
854 |
'daysInMonth' => 't',
|
@@ -1083,13 +1142,11 @@ class Carbon extends DateTime
|
|
1083 |
*/
|
1084 |
public function setTimeFromTimeString($time)
|
1085 |
{
|
1086 |
-
$time
|
1087 |
-
|
1088 |
-
|
1089 |
-
$minute = isset($time[1]) ? $time[1] : 0;
|
1090 |
-
$second = isset($time[2]) ? $time[2] : 0;
|
1091 |
|
1092 |
-
return $this->
|
1093 |
}
|
1094 |
|
1095 |
/**
|
@@ -1329,10 +1386,7 @@ class Carbon extends DateTime
|
|
1329 |
protected static function translator()
|
1330 |
{
|
1331 |
if (static::$translator === null) {
|
1332 |
-
|
1333 |
-
$translator->addLoader('array', new ArrayLoader());
|
1334 |
-
static::$translator = $translator;
|
1335 |
-
static::setLocale('en');
|
1336 |
}
|
1337 |
|
1338 |
return static::$translator;
|
@@ -1379,24 +1433,7 @@ class Carbon extends DateTime
|
|
1379 |
*/
|
1380 |
public static function setLocale($locale)
|
1381 |
{
|
1382 |
-
|
1383 |
-
// _2-letters is a region, _3+-letters is a variant
|
1384 |
-
return '_'.call_user_func(strlen($matches[1]) > 2 ? 'ucfirst' : 'strtoupper', $matches[1]);
|
1385 |
-
}, strtolower($locale));
|
1386 |
-
|
1387 |
-
if (file_exists($filename = __DIR__.'/Lang/'.$locale.'.php')) {
|
1388 |
-
$translator = static::translator();
|
1389 |
-
$translator->setLocale($locale);
|
1390 |
-
|
1391 |
-
if ($translator instanceof Translator) {
|
1392 |
-
// Ensure the locale has been loaded.
|
1393 |
-
$translator->addResource('array', require $filename, $locale);
|
1394 |
-
}
|
1395 |
-
|
1396 |
-
return true;
|
1397 |
-
}
|
1398 |
-
|
1399 |
-
return false;
|
1400 |
}
|
1401 |
|
1402 |
///////////////////////////////////////////////////////////////////
|
@@ -2282,6 +2319,55 @@ class Carbon extends DateTime
|
|
2282 |
/////////////////// ADDITIONS AND SUBTRACTIONS ////////////////////
|
2283 |
///////////////////////////////////////////////////////////////////
|
2284 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2285 |
/**
|
2286 |
* Add years to the instance. Positive $value travel forward while
|
2287 |
* negative $value travel into the past.
|
@@ -2363,18 +2449,6 @@ class Carbon extends DateTime
|
|
2363 |
return $this->addYearsWithOverflow($value);
|
2364 |
}
|
2365 |
|
2366 |
-
/**
|
2367 |
-
* Remove a year from the instance
|
2368 |
-
*
|
2369 |
-
* @param int $value
|
2370 |
-
*
|
2371 |
-
* @return static
|
2372 |
-
*/
|
2373 |
-
public function subYear($value = 1)
|
2374 |
-
{
|
2375 |
-
return $this->subYears($value);
|
2376 |
-
}
|
2377 |
-
|
2378 |
/**
|
2379 |
* Remove years from the instance.
|
2380 |
*
|
@@ -2388,15 +2462,15 @@ class Carbon extends DateTime
|
|
2388 |
}
|
2389 |
|
2390 |
/**
|
2391 |
-
* Remove year from the instance
|
2392 |
*
|
2393 |
* @param int $value
|
2394 |
*
|
2395 |
* @return static
|
2396 |
*/
|
2397 |
-
public function
|
2398 |
{
|
2399 |
-
return $this->
|
2400 |
}
|
2401 |
|
2402 |
/**
|
@@ -2412,15 +2486,15 @@ class Carbon extends DateTime
|
|
2412 |
}
|
2413 |
|
2414 |
/**
|
2415 |
-
* Remove year from the instance
|
2416 |
*
|
2417 |
* @param int $value
|
2418 |
*
|
2419 |
* @return static
|
2420 |
*/
|
2421 |
-
public function
|
2422 |
{
|
2423 |
-
return $this->
|
2424 |
}
|
2425 |
|
2426 |
/**
|
@@ -2436,40 +2510,40 @@ class Carbon extends DateTime
|
|
2436 |
}
|
2437 |
|
2438 |
/**
|
2439 |
-
*
|
2440 |
-
* negative $value travels into the past.
|
2441 |
*
|
2442 |
* @param int $value
|
2443 |
*
|
2444 |
* @return static
|
2445 |
*/
|
2446 |
-
public function
|
2447 |
{
|
2448 |
-
return $this->
|
2449 |
}
|
2450 |
|
2451 |
/**
|
2452 |
-
* Add
|
|
|
2453 |
*
|
2454 |
* @param int $value
|
2455 |
*
|
2456 |
* @return static
|
2457 |
*/
|
2458 |
-
public function
|
2459 |
{
|
2460 |
-
return $this->
|
2461 |
}
|
2462 |
|
2463 |
/**
|
2464 |
-
*
|
2465 |
*
|
2466 |
* @param int $value
|
2467 |
*
|
2468 |
* @return static
|
2469 |
*/
|
2470 |
-
public function
|
2471 |
{
|
2472 |
-
return $this->
|
2473 |
}
|
2474 |
|
2475 |
/**
|
@@ -2485,52 +2559,15 @@ class Carbon extends DateTime
|
|
2485 |
}
|
2486 |
|
2487 |
/**
|
2488 |
-
*
|
2489 |
-
* negative $value travels into the past.
|
2490 |
-
*
|
2491 |
-
* @param int $value
|
2492 |
-
*
|
2493 |
-
* @return static
|
2494 |
-
*/
|
2495 |
-
public function addCenturies($value)
|
2496 |
-
{
|
2497 |
-
return $this->addYears(static::YEARS_PER_CENTURY * $value);
|
2498 |
-
}
|
2499 |
-
|
2500 |
-
/**
|
2501 |
-
* Add a century to the instance
|
2502 |
-
*
|
2503 |
-
* @param int $value
|
2504 |
-
*
|
2505 |
-
* @return static
|
2506 |
-
*/
|
2507 |
-
public function addCentury($value = 1)
|
2508 |
-
{
|
2509 |
-
return $this->addCenturies($value);
|
2510 |
-
}
|
2511 |
-
|
2512 |
-
/**
|
2513 |
-
* Remove a century from the instance
|
2514 |
-
*
|
2515 |
-
* @param int $value
|
2516 |
-
*
|
2517 |
-
* @return static
|
2518 |
-
*/
|
2519 |
-
public function subCentury($value = 1)
|
2520 |
-
{
|
2521 |
-
return $this->subCenturies($value);
|
2522 |
-
}
|
2523 |
-
|
2524 |
-
/**
|
2525 |
-
* Remove centuries from the instance
|
2526 |
*
|
2527 |
* @param int $value
|
2528 |
*
|
2529 |
* @return static
|
2530 |
*/
|
2531 |
-
public function
|
2532 |
{
|
2533 |
-
return $this->
|
2534 |
}
|
2535 |
|
2536 |
/**
|
@@ -2563,27 +2600,27 @@ class Carbon extends DateTime
|
|
2563 |
}
|
2564 |
|
2565 |
/**
|
2566 |
-
* Remove
|
2567 |
*
|
2568 |
* @param int $value
|
2569 |
*
|
2570 |
* @return static
|
2571 |
*/
|
2572 |
-
public function
|
2573 |
{
|
2574 |
-
return $this->
|
2575 |
}
|
2576 |
|
2577 |
/**
|
2578 |
-
* Remove
|
2579 |
*
|
2580 |
* @param int $value
|
2581 |
*
|
2582 |
* @return static
|
2583 |
*/
|
2584 |
-
public function
|
2585 |
{
|
2586 |
-
return $this->
|
2587 |
}
|
2588 |
|
2589 |
/**
|
@@ -2612,27 +2649,27 @@ class Carbon extends DateTime
|
|
2612 |
}
|
2613 |
|
2614 |
/**
|
2615 |
-
* Remove
|
2616 |
*
|
2617 |
* @param int $value
|
2618 |
*
|
2619 |
* @return static
|
2620 |
*/
|
2621 |
-
public function
|
2622 |
{
|
2623 |
-
return $this->
|
2624 |
}
|
2625 |
|
2626 |
/**
|
2627 |
-
* Remove
|
2628 |
*
|
2629 |
* @param int $value
|
2630 |
*
|
2631 |
* @return static
|
2632 |
*/
|
2633 |
-
public function
|
2634 |
{
|
2635 |
-
return $this->
|
2636 |
}
|
2637 |
|
2638 |
/**
|
@@ -2669,27 +2706,27 @@ class Carbon extends DateTime
|
|
2669 |
}
|
2670 |
|
2671 |
/**
|
2672 |
-
* Remove
|
2673 |
*
|
2674 |
* @param int $value
|
2675 |
*
|
2676 |
* @return static
|
2677 |
*/
|
2678 |
-
public function
|
2679 |
{
|
2680 |
-
return $this->
|
2681 |
}
|
2682 |
|
2683 |
/**
|
2684 |
-
* Remove
|
2685 |
*
|
2686 |
* @param int $value
|
2687 |
*
|
2688 |
* @return static
|
2689 |
*/
|
2690 |
-
public function
|
2691 |
{
|
2692 |
-
return $this->
|
2693 |
}
|
2694 |
|
2695 |
/**
|
@@ -2718,27 +2755,27 @@ class Carbon extends DateTime
|
|
2718 |
}
|
2719 |
|
2720 |
/**
|
2721 |
-
* Remove
|
2722 |
*
|
2723 |
* @param int $value
|
2724 |
*
|
2725 |
* @return static
|
2726 |
*/
|
2727 |
-
public function
|
2728 |
{
|
2729 |
-
return $this->
|
2730 |
}
|
2731 |
|
2732 |
/**
|
2733 |
-
* Remove
|
2734 |
*
|
2735 |
* @param int $value
|
2736 |
*
|
2737 |
* @return static
|
2738 |
*/
|
2739 |
-
public function
|
2740 |
{
|
2741 |
-
return $this->
|
2742 |
}
|
2743 |
|
2744 |
/**
|
@@ -2771,27 +2808,27 @@ class Carbon extends DateTime
|
|
2771 |
}
|
2772 |
|
2773 |
/**
|
2774 |
-
* Remove
|
2775 |
*
|
2776 |
* @param int $value
|
2777 |
*
|
2778 |
* @return static
|
2779 |
*/
|
2780 |
-
public function
|
2781 |
{
|
2782 |
-
return $this->
|
2783 |
}
|
2784 |
|
2785 |
/**
|
2786 |
-
* Remove
|
2787 |
*
|
2788 |
* @param int $value
|
2789 |
*
|
2790 |
* @return static
|
2791 |
*/
|
2792 |
-
public function
|
2793 |
{
|
2794 |
-
return $this->
|
2795 |
}
|
2796 |
|
2797 |
/**
|
@@ -2820,27 +2857,27 @@ class Carbon extends DateTime
|
|
2820 |
}
|
2821 |
|
2822 |
/**
|
2823 |
-
* Remove
|
2824 |
*
|
2825 |
* @param int $value
|
2826 |
*
|
2827 |
* @return static
|
2828 |
*/
|
2829 |
-
public function
|
2830 |
{
|
2831 |
-
return $this->
|
2832 |
}
|
2833 |
|
2834 |
/**
|
2835 |
-
* Remove
|
2836 |
*
|
2837 |
* @param int $value
|
2838 |
*
|
2839 |
* @return static
|
2840 |
*/
|
2841 |
-
public function
|
2842 |
{
|
2843 |
-
return $this->
|
2844 |
}
|
2845 |
|
2846 |
/**
|
@@ -2857,7 +2894,20 @@ class Carbon extends DateTime
|
|
2857 |
}
|
2858 |
|
2859 |
/**
|
2860 |
-
* Add
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2861 |
*
|
2862 |
* @param int $value
|
2863 |
*
|
@@ -2869,19 +2919,19 @@ class Carbon extends DateTime
|
|
2869 |
}
|
2870 |
|
2871 |
/**
|
2872 |
-
*
|
2873 |
*
|
2874 |
* @param int $value
|
2875 |
*
|
2876 |
* @return static
|
2877 |
*/
|
2878 |
-
public function
|
2879 |
{
|
2880 |
-
return $this->
|
2881 |
}
|
2882 |
|
2883 |
/**
|
2884 |
-
* Remove hours from the instance
|
2885 |
*
|
2886 |
* @param int $value
|
2887 |
*
|
@@ -2893,8 +2943,44 @@ class Carbon extends DateTime
|
|
2893 |
}
|
2894 |
|
2895 |
/**
|
2896 |
-
*
|
2897 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2898 |
*
|
2899 |
* @param int $value
|
2900 |
*
|
@@ -2906,7 +2992,20 @@ class Carbon extends DateTime
|
|
2906 |
}
|
2907 |
|
2908 |
/**
|
2909 |
-
* Add
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2910 |
*
|
2911 |
* @param int $value
|
2912 |
*
|
@@ -2918,7 +3017,19 @@ class Carbon extends DateTime
|
|
2918 |
}
|
2919 |
|
2920 |
/**
|
2921 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2922 |
*
|
2923 |
* @param int $value
|
2924 |
*
|
@@ -2930,7 +3041,19 @@ class Carbon extends DateTime
|
|
2930 |
}
|
2931 |
|
2932 |
/**
|
2933 |
-
* Remove
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2934 |
*
|
2935 |
* @param int $value
|
2936 |
*
|
@@ -2941,6 +3064,18 @@ class Carbon extends DateTime
|
|
2941 |
return $this->addMinutes(-1 * $value);
|
2942 |
}
|
2943 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2944 |
/**
|
2945 |
* Add seconds to the instance. Positive $value travels forward while
|
2946 |
* negative $value travels into the past.
|
@@ -2955,7 +3090,20 @@ class Carbon extends DateTime
|
|
2955 |
}
|
2956 |
|
2957 |
/**
|
2958 |
-
* Add
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2959 |
*
|
2960 |
* @param int $value
|
2961 |
*
|
@@ -2967,7 +3115,19 @@ class Carbon extends DateTime
|
|
2967 |
}
|
2968 |
|
2969 |
/**
|
2970 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2971 |
*
|
2972 |
* @param int $value
|
2973 |
*
|
@@ -2978,6 +3138,18 @@ class Carbon extends DateTime
|
|
2978 |
return $this->addSeconds(-1 * $value);
|
2979 |
}
|
2980 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2981 |
/**
|
2982 |
* Remove a second from the instance
|
2983 |
*
|
@@ -2990,6 +3162,18 @@ class Carbon extends DateTime
|
|
2990 |
return $this->subSeconds($value);
|
2991 |
}
|
2992 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2993 |
///////////////////////////////////////////////////////////////////
|
2994 |
/////////////////////////// DIFFERENCES ///////////////////////////
|
2995 |
///////////////////////////////////////////////////////////////////
|
@@ -2997,8 +3181,8 @@ class Carbon extends DateTime
|
|
2997 |
/**
|
2998 |
* Get the difference in years
|
2999 |
*
|
3000 |
-
* @param \Carbon\Carbon|\DateTimeInterface|null $date
|
3001 |
-
* @param bool
|
3002 |
*
|
3003 |
* @return int
|
3004 |
*/
|
@@ -3010,8 +3194,8 @@ class Carbon extends DateTime
|
|
3010 |
/**
|
3011 |
* Get the difference in months
|
3012 |
*
|
3013 |
-
* @param \Carbon\Carbon|\DateTimeInterface|null $date
|
3014 |
-
* @param bool
|
3015 |
*
|
3016 |
* @return int
|
3017 |
*/
|
@@ -3025,8 +3209,8 @@ class Carbon extends DateTime
|
|
3025 |
/**
|
3026 |
* Get the difference in weeks
|
3027 |
*
|
3028 |
-
* @param \Carbon\Carbon|\DateTimeInterface|null $date
|
3029 |
-
* @param bool
|
3030 |
*
|
3031 |
* @return int
|
3032 |
*/
|
@@ -3038,8 +3222,8 @@ class Carbon extends DateTime
|
|
3038 |
/**
|
3039 |
* Get the difference in days
|
3040 |
*
|
3041 |
-
* @param \Carbon\Carbon|\DateTimeInterface|null $date
|
3042 |
-
* @param bool
|
3043 |
*
|
3044 |
* @return int
|
3045 |
*/
|
@@ -3051,9 +3235,9 @@ class Carbon extends DateTime
|
|
3051 |
/**
|
3052 |
* Get the difference in days using a filter closure
|
3053 |
*
|
3054 |
-
* @param Closure
|
3055 |
-
* @param \Carbon\Carbon|null $date
|
3056 |
-
* @param bool
|
3057 |
*
|
3058 |
* @return int
|
3059 |
*/
|
@@ -3065,9 +3249,9 @@ class Carbon extends DateTime
|
|
3065 |
/**
|
3066 |
* Get the difference in hours using a filter closure
|
3067 |
*
|
3068 |
-
* @param Closure
|
3069 |
-
* @param \Carbon\Carbon|null $date
|
3070 |
-
* @param bool
|
3071 |
*
|
3072 |
* @return int
|
3073 |
*/
|
@@ -3079,10 +3263,10 @@ class Carbon extends DateTime
|
|
3079 |
/**
|
3080 |
* Get the difference by the given interval using a filter closure
|
3081 |
*
|
3082 |
-
* @param CarbonInterval
|
3083 |
-
* @param Closure
|
3084 |
-
* @param Carbon|null
|
3085 |
-
* @param bool
|
3086 |
*
|
3087 |
* @return int
|
3088 |
*/
|
@@ -3111,8 +3295,8 @@ class Carbon extends DateTime
|
|
3111 |
/**
|
3112 |
* Get the difference in weekdays
|
3113 |
*
|
3114 |
-
* @param \Carbon\Carbon|null $date
|
3115 |
-
* @param bool
|
3116 |
*
|
3117 |
* @return int
|
3118 |
*/
|
@@ -3126,8 +3310,8 @@ class Carbon extends DateTime
|
|
3126 |
/**
|
3127 |
* Get the difference in weekend days using a filter
|
3128 |
*
|
3129 |
-
* @param \Carbon\Carbon|null $date
|
3130 |
-
* @param bool
|
3131 |
*
|
3132 |
* @return int
|
3133 |
*/
|
@@ -3139,10 +3323,10 @@ class Carbon extends DateTime
|
|
3139 |
}
|
3140 |
|
3141 |
/**
|
3142 |
-
* Get the difference in hours
|
3143 |
*
|
3144 |
-
* @param \Carbon\Carbon|null $date
|
3145 |
-
* @param bool
|
3146 |
*
|
3147 |
* @return int
|
3148 |
*/
|
@@ -3152,10 +3336,23 @@ class Carbon extends DateTime
|
|
3152 |
}
|
3153 |
|
3154 |
/**
|
3155 |
-
* Get the difference in
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3156 |
*
|
3157 |
-
* @param \Carbon\Carbon|null $date
|
3158 |
-
* @param bool
|
3159 |
*
|
3160 |
* @return int
|
3161 |
*/
|
@@ -3165,10 +3362,23 @@ class Carbon extends DateTime
|
|
3165 |
}
|
3166 |
|
3167 |
/**
|
3168 |
-
* Get the difference in
|
3169 |
*
|
3170 |
-
* @param \Carbon\Carbon|null $date
|
3171 |
-
* @param bool
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3172 |
*
|
3173 |
* @return int
|
3174 |
*/
|
@@ -3183,6 +3393,22 @@ class Carbon extends DateTime
|
|
3183 |
return $absolute || !$diff->invert ? $value : -$value;
|
3184 |
}
|
3185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3186 |
/**
|
3187 |
* The number of seconds since midnight.
|
3188 |
*
|
@@ -3229,7 +3455,7 @@ class Carbon extends DateTime
|
|
3229 |
*
|
3230 |
* @return string
|
3231 |
*/
|
3232 |
-
public function diffForHumans(
|
3233 |
{
|
3234 |
$isNow = $other === null;
|
3235 |
$interval = array();
|
@@ -3240,6 +3466,8 @@ class Carbon extends DateTime
|
|
3240 |
|
3241 |
if ($isNow) {
|
3242 |
$other = $this->nowWithSameTz();
|
|
|
|
|
3243 |
}
|
3244 |
|
3245 |
$diffInterval = $this->diff($other);
|
@@ -3325,7 +3553,7 @@ class Carbon extends DateTime
|
|
3325 |
*/
|
3326 |
public function startOfDay()
|
3327 |
{
|
3328 |
-
return $this->
|
3329 |
}
|
3330 |
|
3331 |
/**
|
@@ -3335,7 +3563,7 @@ class Carbon extends DateTime
|
|
3335 |
*/
|
3336 |
public function endOfDay()
|
3337 |
{
|
3338 |
-
return $this->
|
3339 |
}
|
3340 |
|
3341 |
/**
|
@@ -3345,7 +3573,7 @@ class Carbon extends DateTime
|
|
3345 |
*/
|
3346 |
public function startOfMonth()
|
3347 |
{
|
3348 |
-
return $this->
|
3349 |
}
|
3350 |
|
3351 |
/**
|
@@ -3355,7 +3583,7 @@ class Carbon extends DateTime
|
|
3355 |
*/
|
3356 |
public function endOfMonth()
|
3357 |
{
|
3358 |
-
return $this->
|
3359 |
}
|
3360 |
|
3361 |
/**
|
@@ -3367,7 +3595,7 @@ class Carbon extends DateTime
|
|
3367 |
{
|
3368 |
$month = ($this->quarter - 1) * static::MONTHS_PER_QUARTER + 1;
|
3369 |
|
3370 |
-
return $this->
|
3371 |
}
|
3372 |
|
3373 |
/**
|
@@ -3387,7 +3615,7 @@ class Carbon extends DateTime
|
|
3387 |
*/
|
3388 |
public function startOfYear()
|
3389 |
{
|
3390 |
-
return $this->
|
3391 |
}
|
3392 |
|
3393 |
/**
|
@@ -3397,7 +3625,7 @@ class Carbon extends DateTime
|
|
3397 |
*/
|
3398 |
public function endOfYear()
|
3399 |
{
|
3400 |
-
return $this->
|
3401 |
}
|
3402 |
|
3403 |
/**
|
@@ -3409,7 +3637,7 @@ class Carbon extends DateTime
|
|
3409 |
{
|
3410 |
$year = $this->year - $this->year % static::YEARS_PER_DECADE;
|
3411 |
|
3412 |
-
return $this->
|
3413 |
}
|
3414 |
|
3415 |
/**
|
@@ -3421,7 +3649,7 @@ class Carbon extends DateTime
|
|
3421 |
{
|
3422 |
$year = $this->year - $this->year % static::YEARS_PER_DECADE + static::YEARS_PER_DECADE - 1;
|
3423 |
|
3424 |
-
return $this->
|
3425 |
}
|
3426 |
|
3427 |
/**
|
@@ -3433,7 +3661,7 @@ class Carbon extends DateTime
|
|
3433 |
{
|
3434 |
$year = $this->year - ($this->year - 1) % static::YEARS_PER_CENTURY;
|
3435 |
|
3436 |
-
return $this->
|
3437 |
}
|
3438 |
|
3439 |
/**
|
@@ -3445,7 +3673,7 @@ class Carbon extends DateTime
|
|
3445 |
{
|
3446 |
$year = $this->year - 1 - ($this->year - 1) % static::YEARS_PER_CENTURY + static::YEARS_PER_CENTURY;
|
3447 |
|
3448 |
-
return $this->
|
3449 |
}
|
3450 |
|
3451 |
/**
|
18 |
use DateTimeInterface;
|
19 |
use DateTimeZone;
|
20 |
use InvalidArgumentException;
|
|
|
|
|
21 |
use Symfony\Component\Translation\TranslatorInterface;
|
22 |
|
23 |
/**
|
35 |
* @property \DateTimeZone $tz alias of timezone
|
36 |
* @property-read int $micro
|
37 |
* @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday)
|
38 |
+
* @property-read int $dayOfWeekIso 1 (for Monday) through 7 (for Sunday)
|
39 |
* @property-read int $dayOfYear 0 through 365
|
40 |
* @property-read int $weekOfMonth 1 through 5
|
41 |
* @property-read int $weekNumberInMonth 1 through 5
|
234 |
*/
|
235 |
protected static $utf8 = false;
|
236 |
|
237 |
+
/**
|
238 |
+
* Add microseconds to now on PHP < 7.1 and 7.1.3. true by default.
|
239 |
+
*
|
240 |
+
* @var bool
|
241 |
+
*/
|
242 |
+
protected static $microsecondsFallback = true;
|
243 |
+
|
244 |
/**
|
245 |
* Indicates if months should be calculated with overflow.
|
246 |
*
|
255 |
*/
|
256 |
protected static $yearsOverflow = true;
|
257 |
|
258 |
+
/**
|
259 |
+
* Add microseconds to now on PHP < 7.1 and 7.1.3 if set to true,
|
260 |
+
* let microseconds to 0 on those PHP versions if false.
|
261 |
+
*
|
262 |
+
* @param bool $microsecondsFallback
|
263 |
+
*/
|
264 |
+
public static function useMicrosecondsFallback($microsecondsFallback = true)
|
265 |
+
{
|
266 |
+
static::$microsecondsFallback = $microsecondsFallback;
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Return true if microseconds fallback on PHP < 7.1 and 7.1.3 is
|
271 |
+
* enabled. false if disabled.
|
272 |
+
*
|
273 |
+
* @return bool
|
274 |
+
*/
|
275 |
+
public static function isMicrosecondsFallbackEnabled()
|
276 |
+
{
|
277 |
+
return static::$microsecondsFallback;
|
278 |
+
}
|
279 |
+
|
280 |
/**
|
281 |
* Indicates if months should be calculated with overflow.
|
282 |
*
|
400 |
$isNow = empty($time) || $time === 'now';
|
401 |
if (static::hasTestNow() && ($isNow || static::hasRelativeKeywords($time))) {
|
402 |
$testInstance = clone static::getTestNow();
|
|
|
|
|
|
|
403 |
|
404 |
//shift the time according to the given time zone
|
405 |
if ($tz !== null && $tz !== static::getTestNow()->getTimezone()) {
|
408 |
$tz = $testInstance->getTimezone();
|
409 |
}
|
410 |
|
411 |
+
if (static::hasRelativeKeywords($time)) {
|
412 |
+
$testInstance->modify($time);
|
413 |
+
}
|
414 |
+
|
415 |
$time = $testInstance->format(static::MOCK_DATETIME_FORMAT);
|
416 |
}
|
417 |
|
|
|
418 |
$timezone = static::safeCreateDateTimeZone($tz);
|
419 |
// @codeCoverageIgnoreStart
|
420 |
+
if ($isNow && !isset($testInstance) && static::isMicrosecondsFallbackEnabled() && (
|
421 |
version_compare(PHP_VERSION, '7.1.0-dev', '<')
|
422 |
||
|
423 |
version_compare(PHP_VERSION, '7.1.3-dev', '>=') && version_compare(PHP_VERSION, '7.1.4-dev', '<')
|
424 |
)
|
425 |
) {
|
426 |
+
// Get microseconds from microtime() if "now" asked and PHP < 7.1 and PHP 7.1.3 if fallback enabled.
|
427 |
+
list($microTime, $timeStamp) = explode(' ', microtime());
|
428 |
$dateTime = new DateTime('now', $timezone);
|
429 |
+
$dateTime->setTimestamp($timeStamp); // Use the timestamp returned by microtime as now can happen in the next second
|
430 |
+
$time = $dateTime->format(static::DEFAULT_TO_STRING_FORMAT).substr($microTime, 1, 7);
|
|
|
|
|
|
|
431 |
}
|
432 |
// @codeCoverageIgnoreEnd
|
433 |
|
497 |
*/
|
498 |
public static function today($tz = null)
|
499 |
{
|
500 |
+
return static::parse('today', $tz);
|
501 |
}
|
502 |
|
503 |
/**
|
509 |
*/
|
510 |
public static function tomorrow($tz = null)
|
511 |
{
|
512 |
+
return static::parse('tomorrow', $tz);
|
513 |
}
|
514 |
|
515 |
/**
|
521 |
*/
|
522 |
public static function yesterday($tz = null)
|
523 |
{
|
524 |
+
return static::parse('yesterday', $tz);
|
525 |
}
|
526 |
|
527 |
/**
|
729 |
return static::create(null, null, null, $hour, $minute, $second, $tz);
|
730 |
}
|
731 |
|
732 |
+
/**
|
733 |
+
* Create a Carbon instance from a time string. The date portion is set to today.
|
734 |
+
*
|
735 |
+
* @param string $time
|
736 |
+
* @param \DateTimeZone|string|null $tz
|
737 |
+
*
|
738 |
+
* @throws \InvalidArgumentException
|
739 |
+
*
|
740 |
+
* @return static
|
741 |
+
*/
|
742 |
+
public static function createFromTimeString($time, $tz = null)
|
743 |
+
{
|
744 |
+
return static::today($tz)->setTimeFromTimeString($time);
|
745 |
+
}
|
746 |
+
|
747 |
/**
|
748 |
* Create a Carbon instance from a specific format.
|
749 |
*
|
805 |
*/
|
806 |
public static function createFromTimestamp($timestamp, $tz = null)
|
807 |
{
|
808 |
+
return static::today($tz)->setTimestamp($timestamp);
|
809 |
}
|
810 |
|
811 |
/**
|
855 |
}
|
856 |
|
857 |
/**
|
858 |
+
* Return the Carbon instance passed through, a now instance in the same timezone
|
859 |
+
* if null given or parse the input if string given.
|
860 |
*
|
861 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
862 |
*
|
863 |
* @return static
|
864 |
*/
|
865 |
+
protected function resolveCarbon($date = null)
|
866 |
{
|
867 |
+
if (!$date) {
|
868 |
+
return $this->nowWithSameTz();
|
869 |
+
}
|
870 |
+
|
871 |
+
if (is_string($date)) {
|
872 |
+
return static::parse($date, $this->getTimezone());
|
873 |
+
}
|
874 |
+
|
875 |
+
if (!$date instanceof DateTime && !$date instanceof DateTimeInterface) {
|
876 |
+
throw new InvalidArgumentException(
|
877 |
+
'Expected null, string, DateTime or DateTimeInterface, '.
|
878 |
+
(is_object($date) ? get_class($date) : gettype($date)).' given'
|
879 |
+
);
|
880 |
+
}
|
881 |
+
|
882 |
+
return $date instanceof self ? $date : static::instance($date);
|
883 |
}
|
884 |
|
885 |
///////////////////////////////////////////////////////////////////
|
907 |
'second' => 's',
|
908 |
'micro' => 'u',
|
909 |
'dayOfWeek' => 'w',
|
910 |
+
'dayOfWeekIso' => 'N',
|
911 |
'dayOfYear' => 'z',
|
912 |
'weekOfYear' => 'W',
|
913 |
'daysInMonth' => 't',
|
1142 |
*/
|
1143 |
public function setTimeFromTimeString($time)
|
1144 |
{
|
1145 |
+
if (strpos($time, ':') === false) {
|
1146 |
+
$time .= ':0';
|
1147 |
+
}
|
|
|
|
|
1148 |
|
1149 |
+
return $this->modify($time);
|
1150 |
}
|
1151 |
|
1152 |
/**
|
1386 |
protected static function translator()
|
1387 |
{
|
1388 |
if (static::$translator === null) {
|
1389 |
+
static::$translator = Translator::get();
|
|
|
|
|
|
|
1390 |
}
|
1391 |
|
1392 |
return static::$translator;
|
1433 |
*/
|
1434 |
public static function setLocale($locale)
|
1435 |
{
|
1436 |
+
return static::translator()->setLocale($locale) !== false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1437 |
}
|
1438 |
|
1439 |
///////////////////////////////////////////////////////////////////
|
2319 |
/////////////////// ADDITIONS AND SUBTRACTIONS ////////////////////
|
2320 |
///////////////////////////////////////////////////////////////////
|
2321 |
|
2322 |
+
/**
|
2323 |
+
* Add centuries to the instance. Positive $value travels forward while
|
2324 |
+
* negative $value travels into the past.
|
2325 |
+
*
|
2326 |
+
* @param int $value
|
2327 |
+
*
|
2328 |
+
* @return static
|
2329 |
+
*/
|
2330 |
+
public function addCenturies($value)
|
2331 |
+
{
|
2332 |
+
return $this->addYears(static::YEARS_PER_CENTURY * $value);
|
2333 |
+
}
|
2334 |
+
|
2335 |
+
/**
|
2336 |
+
* Add a century to the instance
|
2337 |
+
*
|
2338 |
+
* @param int $value
|
2339 |
+
*
|
2340 |
+
* @return static
|
2341 |
+
*/
|
2342 |
+
public function addCentury($value = 1)
|
2343 |
+
{
|
2344 |
+
return $this->addCenturies($value);
|
2345 |
+
}
|
2346 |
+
|
2347 |
+
/**
|
2348 |
+
* Remove centuries from the instance
|
2349 |
+
*
|
2350 |
+
* @param int $value
|
2351 |
+
*
|
2352 |
+
* @return static
|
2353 |
+
*/
|
2354 |
+
public function subCenturies($value)
|
2355 |
+
{
|
2356 |
+
return $this->addCenturies(-1 * $value);
|
2357 |
+
}
|
2358 |
+
|
2359 |
+
/**
|
2360 |
+
* Remove a century from the instance
|
2361 |
+
*
|
2362 |
+
* @param int $value
|
2363 |
+
*
|
2364 |
+
* @return static
|
2365 |
+
*/
|
2366 |
+
public function subCentury($value = 1)
|
2367 |
+
{
|
2368 |
+
return $this->subCenturies($value);
|
2369 |
+
}
|
2370 |
+
|
2371 |
/**
|
2372 |
* Add years to the instance. Positive $value travel forward while
|
2373 |
* negative $value travel into the past.
|
2449 |
return $this->addYearsWithOverflow($value);
|
2450 |
}
|
2451 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2452 |
/**
|
2453 |
* Remove years from the instance.
|
2454 |
*
|
2462 |
}
|
2463 |
|
2464 |
/**
|
2465 |
+
* Remove a year from the instance
|
2466 |
*
|
2467 |
* @param int $value
|
2468 |
*
|
2469 |
* @return static
|
2470 |
*/
|
2471 |
+
public function subYear($value = 1)
|
2472 |
{
|
2473 |
+
return $this->subYears($value);
|
2474 |
}
|
2475 |
|
2476 |
/**
|
2486 |
}
|
2487 |
|
2488 |
/**
|
2489 |
+
* Remove year from the instance with no month overflow
|
2490 |
*
|
2491 |
* @param int $value
|
2492 |
*
|
2493 |
* @return static
|
2494 |
*/
|
2495 |
+
public function subYearNoOverflow($value = 1)
|
2496 |
{
|
2497 |
+
return $this->subYearsNoOverflow($value);
|
2498 |
}
|
2499 |
|
2500 |
/**
|
2510 |
}
|
2511 |
|
2512 |
/**
|
2513 |
+
* Remove year from the instance.
|
|
|
2514 |
*
|
2515 |
* @param int $value
|
2516 |
*
|
2517 |
* @return static
|
2518 |
*/
|
2519 |
+
public function subYearWithOverflow($value = 1)
|
2520 |
{
|
2521 |
+
return $this->subYearsWithOverflow($value);
|
2522 |
}
|
2523 |
|
2524 |
/**
|
2525 |
+
* Add quarters to the instance. Positive $value travels forward while
|
2526 |
+
* negative $value travels into the past.
|
2527 |
*
|
2528 |
* @param int $value
|
2529 |
*
|
2530 |
* @return static
|
2531 |
*/
|
2532 |
+
public function addQuarters($value)
|
2533 |
{
|
2534 |
+
return $this->addMonths(static::MONTHS_PER_QUARTER * $value);
|
2535 |
}
|
2536 |
|
2537 |
/**
|
2538 |
+
* Add a quarter to the instance
|
2539 |
*
|
2540 |
* @param int $value
|
2541 |
*
|
2542 |
* @return static
|
2543 |
*/
|
2544 |
+
public function addQuarter($value = 1)
|
2545 |
{
|
2546 |
+
return $this->addQuarters($value);
|
2547 |
}
|
2548 |
|
2549 |
/**
|
2559 |
}
|
2560 |
|
2561 |
/**
|
2562 |
+
* Remove a quarter from the instance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2563 |
*
|
2564 |
* @param int $value
|
2565 |
*
|
2566 |
* @return static
|
2567 |
*/
|
2568 |
+
public function subQuarter($value = 1)
|
2569 |
{
|
2570 |
+
return $this->subQuarters($value);
|
2571 |
}
|
2572 |
|
2573 |
/**
|
2600 |
}
|
2601 |
|
2602 |
/**
|
2603 |
+
* Remove months from the instance
|
2604 |
*
|
2605 |
* @param int $value
|
2606 |
*
|
2607 |
* @return static
|
2608 |
*/
|
2609 |
+
public function subMonths($value)
|
2610 |
{
|
2611 |
+
return $this->addMonths(-1 * $value);
|
2612 |
}
|
2613 |
|
2614 |
/**
|
2615 |
+
* Remove a month from the instance
|
2616 |
*
|
2617 |
* @param int $value
|
2618 |
*
|
2619 |
* @return static
|
2620 |
*/
|
2621 |
+
public function subMonth($value = 1)
|
2622 |
{
|
2623 |
+
return $this->subMonths($value);
|
2624 |
}
|
2625 |
|
2626 |
/**
|
2649 |
}
|
2650 |
|
2651 |
/**
|
2652 |
+
* Remove months from the instance
|
2653 |
*
|
2654 |
* @param int $value
|
2655 |
*
|
2656 |
* @return static
|
2657 |
*/
|
2658 |
+
public function subMonthsWithOverflow($value)
|
2659 |
{
|
2660 |
+
return $this->addMonthsWithOverflow(-1 * $value);
|
2661 |
}
|
2662 |
|
2663 |
/**
|
2664 |
+
* Remove a month from the instance
|
2665 |
*
|
2666 |
* @param int $value
|
2667 |
*
|
2668 |
* @return static
|
2669 |
*/
|
2670 |
+
public function subMonthWithOverflow($value = 1)
|
2671 |
{
|
2672 |
+
return $this->subMonthsWithOverflow($value);
|
2673 |
}
|
2674 |
|
2675 |
/**
|
2706 |
}
|
2707 |
|
2708 |
/**
|
2709 |
+
* Remove months with no overflow from the instance
|
2710 |
*
|
2711 |
* @param int $value
|
2712 |
*
|
2713 |
* @return static
|
2714 |
*/
|
2715 |
+
public function subMonthsNoOverflow($value)
|
2716 |
{
|
2717 |
+
return $this->addMonthsNoOverflow(-1 * $value);
|
2718 |
}
|
2719 |
|
2720 |
/**
|
2721 |
+
* Remove a month with no overflow from the instance
|
2722 |
*
|
2723 |
* @param int $value
|
2724 |
*
|
2725 |
* @return static
|
2726 |
*/
|
2727 |
+
public function subMonthNoOverflow($value = 1)
|
2728 |
{
|
2729 |
+
return $this->subMonthsNoOverflow($value);
|
2730 |
}
|
2731 |
|
2732 |
/**
|
2755 |
}
|
2756 |
|
2757 |
/**
|
2758 |
+
* Remove days from the instance
|
2759 |
*
|
2760 |
* @param int $value
|
2761 |
*
|
2762 |
* @return static
|
2763 |
*/
|
2764 |
+
public function subDays($value)
|
2765 |
{
|
2766 |
+
return $this->addDays(-1 * $value);
|
2767 |
}
|
2768 |
|
2769 |
/**
|
2770 |
+
* Remove a day from the instance
|
2771 |
*
|
2772 |
* @param int $value
|
2773 |
*
|
2774 |
* @return static
|
2775 |
*/
|
2776 |
+
public function subDay($value = 1)
|
2777 |
{
|
2778 |
+
return $this->subDays($value);
|
2779 |
}
|
2780 |
|
2781 |
/**
|
2808 |
}
|
2809 |
|
2810 |
/**
|
2811 |
+
* Remove weekdays from the instance
|
2812 |
*
|
2813 |
* @param int $value
|
2814 |
*
|
2815 |
* @return static
|
2816 |
*/
|
2817 |
+
public function subWeekdays($value)
|
2818 |
{
|
2819 |
+
return $this->addWeekdays(-1 * $value);
|
2820 |
}
|
2821 |
|
2822 |
/**
|
2823 |
+
* Remove a weekday from the instance
|
2824 |
*
|
2825 |
* @param int $value
|
2826 |
*
|
2827 |
* @return static
|
2828 |
*/
|
2829 |
+
public function subWeekday($value = 1)
|
2830 |
{
|
2831 |
+
return $this->subWeekdays($value);
|
2832 |
}
|
2833 |
|
2834 |
/**
|
2857 |
}
|
2858 |
|
2859 |
/**
|
2860 |
+
* Remove weeks to the instance
|
2861 |
*
|
2862 |
* @param int $value
|
2863 |
*
|
2864 |
* @return static
|
2865 |
*/
|
2866 |
+
public function subWeeks($value)
|
2867 |
{
|
2868 |
+
return $this->addWeeks(-1 * $value);
|
2869 |
}
|
2870 |
|
2871 |
/**
|
2872 |
+
* Remove a week from the instance
|
2873 |
*
|
2874 |
* @param int $value
|
2875 |
*
|
2876 |
* @return static
|
2877 |
*/
|
2878 |
+
public function subWeek($value = 1)
|
2879 |
{
|
2880 |
+
return $this->subWeeks($value);
|
2881 |
}
|
2882 |
|
2883 |
/**
|
2894 |
}
|
2895 |
|
2896 |
/**
|
2897 |
+
* Add hours to the instance using timestamp. Positive $value travels
|
2898 |
+
* forward while negative $value travels into the past.
|
2899 |
+
*
|
2900 |
+
* @param int $value
|
2901 |
+
*
|
2902 |
+
* @return static
|
2903 |
+
*/
|
2904 |
+
public function addRealHours($value)
|
2905 |
+
{
|
2906 |
+
return $this->addRealMinutes($value * static::MINUTES_PER_HOUR);
|
2907 |
+
}
|
2908 |
+
|
2909 |
+
/**
|
2910 |
+
* Add an hour to the instance.
|
2911 |
*
|
2912 |
* @param int $value
|
2913 |
*
|
2919 |
}
|
2920 |
|
2921 |
/**
|
2922 |
+
* Add an hour to the instance using timestamp.
|
2923 |
*
|
2924 |
* @param int $value
|
2925 |
*
|
2926 |
* @return static
|
2927 |
*/
|
2928 |
+
public function addRealHour($value = 1)
|
2929 |
{
|
2930 |
+
return $this->addRealHours($value);
|
2931 |
}
|
2932 |
|
2933 |
/**
|
2934 |
+
* Remove hours from the instance.
|
2935 |
*
|
2936 |
* @param int $value
|
2937 |
*
|
2943 |
}
|
2944 |
|
2945 |
/**
|
2946 |
+
* Remove hours from the instance using timestamp.
|
2947 |
+
*
|
2948 |
+
* @param int $value
|
2949 |
+
*
|
2950 |
+
* @return static
|
2951 |
+
*/
|
2952 |
+
public function subRealHours($value)
|
2953 |
+
{
|
2954 |
+
return $this->addRealHours(-1 * $value);
|
2955 |
+
}
|
2956 |
+
|
2957 |
+
/**
|
2958 |
+
* Remove an hour from the instance.
|
2959 |
+
*
|
2960 |
+
* @param int $value
|
2961 |
+
*
|
2962 |
+
* @return static
|
2963 |
+
*/
|
2964 |
+
public function subHour($value = 1)
|
2965 |
+
{
|
2966 |
+
return $this->subHours($value);
|
2967 |
+
}
|
2968 |
+
|
2969 |
+
/**
|
2970 |
+
* Remove an hour from the instance.
|
2971 |
+
*
|
2972 |
+
* @param int $value
|
2973 |
+
*
|
2974 |
+
* @return static
|
2975 |
+
*/
|
2976 |
+
public function subRealHour($value = 1)
|
2977 |
+
{
|
2978 |
+
return $this->subRealHours($value);
|
2979 |
+
}
|
2980 |
+
|
2981 |
+
/**
|
2982 |
+
* Add minutes to the instance using timestamp. Positive $value
|
2983 |
+
* travels forward while negative $value travels into the past.
|
2984 |
*
|
2985 |
* @param int $value
|
2986 |
*
|
2992 |
}
|
2993 |
|
2994 |
/**
|
2995 |
+
* Add minutes to the instance using timestamp. Positive $value travels
|
2996 |
+
* forward while negative $value travels into the past.
|
2997 |
+
*
|
2998 |
+
* @param int $value
|
2999 |
+
*
|
3000 |
+
* @return static
|
3001 |
+
*/
|
3002 |
+
public function addRealMinutes($value)
|
3003 |
+
{
|
3004 |
+
return $this->addRealSeconds($value * static::SECONDS_PER_MINUTE);
|
3005 |
+
}
|
3006 |
+
|
3007 |
+
/**
|
3008 |
+
* Add a minute to the instance.
|
3009 |
*
|
3010 |
* @param int $value
|
3011 |
*
|
3017 |
}
|
3018 |
|
3019 |
/**
|
3020 |
+
* Add a minute to the instance using timestamp.
|
3021 |
+
*
|
3022 |
+
* @param int $value
|
3023 |
+
*
|
3024 |
+
* @return static
|
3025 |
+
*/
|
3026 |
+
public function addRealMinute($value = 1)
|
3027 |
+
{
|
3028 |
+
return $this->addRealMinutes($value);
|
3029 |
+
}
|
3030 |
+
|
3031 |
+
/**
|
3032 |
+
* Remove a minute from the instance.
|
3033 |
*
|
3034 |
* @param int $value
|
3035 |
*
|
3041 |
}
|
3042 |
|
3043 |
/**
|
3044 |
+
* Remove a minute from the instance using timestamp.
|
3045 |
+
*
|
3046 |
+
* @param int $value
|
3047 |
+
*
|
3048 |
+
* @return static
|
3049 |
+
*/
|
3050 |
+
public function subRealMinute($value = 1)
|
3051 |
+
{
|
3052 |
+
return $this->addRealMinutes(-1 * $value);
|
3053 |
+
}
|
3054 |
+
|
3055 |
+
/**
|
3056 |
+
* Remove minutes from the instance.
|
3057 |
*
|
3058 |
* @param int $value
|
3059 |
*
|
3064 |
return $this->addMinutes(-1 * $value);
|
3065 |
}
|
3066 |
|
3067 |
+
/**
|
3068 |
+
* Remove a minute from the instance using timestamp.
|
3069 |
+
*
|
3070 |
+
* @param int $value
|
3071 |
+
*
|
3072 |
+
* @return static
|
3073 |
+
*/
|
3074 |
+
public function subRealMinutes($value = 1)
|
3075 |
+
{
|
3076 |
+
return $this->subRealMinute($value);
|
3077 |
+
}
|
3078 |
+
|
3079 |
/**
|
3080 |
* Add seconds to the instance. Positive $value travels forward while
|
3081 |
* negative $value travels into the past.
|
3090 |
}
|
3091 |
|
3092 |
/**
|
3093 |
+
* Add seconds to the instance using timestamp. Positive $value travels
|
3094 |
+
* forward while negative $value travels into the past.
|
3095 |
+
*
|
3096 |
+
* @param int $value
|
3097 |
+
*
|
3098 |
+
* @return static
|
3099 |
+
*/
|
3100 |
+
public function addRealSeconds($value)
|
3101 |
+
{
|
3102 |
+
return $this->setTimestamp($this->getTimestamp() + $value);
|
3103 |
+
}
|
3104 |
+
|
3105 |
+
/**
|
3106 |
+
* Add a second to the instance.
|
3107 |
*
|
3108 |
* @param int $value
|
3109 |
*
|
3115 |
}
|
3116 |
|
3117 |
/**
|
3118 |
+
* Add a second to the instance using timestamp.
|
3119 |
+
*
|
3120 |
+
* @param int $value
|
3121 |
+
*
|
3122 |
+
* @return static
|
3123 |
+
*/
|
3124 |
+
public function addRealSecond($value = 1)
|
3125 |
+
{
|
3126 |
+
return $this->addRealSeconds($value);
|
3127 |
+
}
|
3128 |
+
|
3129 |
+
/**
|
3130 |
+
* Remove seconds from the instance.
|
3131 |
*
|
3132 |
* @param int $value
|
3133 |
*
|
3138 |
return $this->addSeconds(-1 * $value);
|
3139 |
}
|
3140 |
|
3141 |
+
/**
|
3142 |
+
* Remove seconds from the instance using timestamp.
|
3143 |
+
*
|
3144 |
+
* @param int $value
|
3145 |
+
*
|
3146 |
+
* @return static
|
3147 |
+
*/
|
3148 |
+
public function subRealSeconds($value)
|
3149 |
+
{
|
3150 |
+
return $this->addRealSeconds(-1 * $value);
|
3151 |
+
}
|
3152 |
+
|
3153 |
/**
|
3154 |
* Remove a second from the instance
|
3155 |
*
|
3162 |
return $this->subSeconds($value);
|
3163 |
}
|
3164 |
|
3165 |
+
/**
|
3166 |
+
* Remove a second from the instance using timestamp.
|
3167 |
+
*
|
3168 |
+
* @param int $value
|
3169 |
+
*
|
3170 |
+
* @return static
|
3171 |
+
*/
|
3172 |
+
public function subRealSecond($value = 1)
|
3173 |
+
{
|
3174 |
+
return $this->subRealSeconds($value);
|
3175 |
+
}
|
3176 |
+
|
3177 |
///////////////////////////////////////////////////////////////////
|
3178 |
/////////////////////////// DIFFERENCES ///////////////////////////
|
3179 |
///////////////////////////////////////////////////////////////////
|
3181 |
/**
|
3182 |
* Get the difference in years
|
3183 |
*
|
3184 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3185 |
+
* @param bool $absolute Get the absolute of the difference
|
3186 |
*
|
3187 |
* @return int
|
3188 |
*/
|
3194 |
/**
|
3195 |
* Get the difference in months
|
3196 |
*
|
3197 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3198 |
+
* @param bool $absolute Get the absolute of the difference
|
3199 |
*
|
3200 |
* @return int
|
3201 |
*/
|
3209 |
/**
|
3210 |
* Get the difference in weeks
|
3211 |
*
|
3212 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3213 |
+
* @param bool $absolute Get the absolute of the difference
|
3214 |
*
|
3215 |
* @return int
|
3216 |
*/
|
3222 |
/**
|
3223 |
* Get the difference in days
|
3224 |
*
|
3225 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3226 |
+
* @param bool $absolute Get the absolute of the difference
|
3227 |
*
|
3228 |
* @return int
|
3229 |
*/
|
3235 |
/**
|
3236 |
* Get the difference in days using a filter closure
|
3237 |
*
|
3238 |
+
* @param Closure $callback
|
3239 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3240 |
+
* @param bool $absolute Get the absolute of the difference
|
3241 |
*
|
3242 |
* @return int
|
3243 |
*/
|
3249 |
/**
|
3250 |
* Get the difference in hours using a filter closure
|
3251 |
*
|
3252 |
+
* @param Closure $callback
|
3253 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3254 |
+
* @param bool $absolute Get the absolute of the difference
|
3255 |
*
|
3256 |
* @return int
|
3257 |
*/
|
3263 |
/**
|
3264 |
* Get the difference by the given interval using a filter closure
|
3265 |
*
|
3266 |
+
* @param CarbonInterval $ci An interval to traverse by
|
3267 |
+
* @param Closure $callback
|
3268 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3269 |
+
* @param bool $absolute Get the absolute of the difference
|
3270 |
*
|
3271 |
* @return int
|
3272 |
*/
|
3295 |
/**
|
3296 |
* Get the difference in weekdays
|
3297 |
*
|
3298 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3299 |
+
* @param bool $absolute Get the absolute of the difference
|
3300 |
*
|
3301 |
* @return int
|
3302 |
*/
|
3310 |
/**
|
3311 |
* Get the difference in weekend days using a filter
|
3312 |
*
|
3313 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3314 |
+
* @param bool $absolute Get the absolute of the difference
|
3315 |
*
|
3316 |
* @return int
|
3317 |
*/
|
3323 |
}
|
3324 |
|
3325 |
/**
|
3326 |
+
* Get the difference in hours.
|
3327 |
*
|
3328 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3329 |
+
* @param bool $absolute Get the absolute of the difference
|
3330 |
*
|
3331 |
* @return int
|
3332 |
*/
|
3336 |
}
|
3337 |
|
3338 |
/**
|
3339 |
+
* Get the difference in hours using timestamps.
|
3340 |
+
*
|
3341 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3342 |
+
* @param bool $absolute Get the absolute of the difference
|
3343 |
+
*
|
3344 |
+
* @return int
|
3345 |
+
*/
|
3346 |
+
public function diffInRealHours($date = null, $absolute = true)
|
3347 |
+
{
|
3348 |
+
return (int) ($this->diffInRealSeconds($date, $absolute) / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR);
|
3349 |
+
}
|
3350 |
+
|
3351 |
+
/**
|
3352 |
+
* Get the difference in minutes.
|
3353 |
*
|
3354 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3355 |
+
* @param bool $absolute Get the absolute of the difference
|
3356 |
*
|
3357 |
* @return int
|
3358 |
*/
|
3362 |
}
|
3363 |
|
3364 |
/**
|
3365 |
+
* Get the difference in minutes using timestamps.
|
3366 |
*
|
3367 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3368 |
+
* @param bool $absolute Get the absolute of the difference
|
3369 |
+
*
|
3370 |
+
* @return int
|
3371 |
+
*/
|
3372 |
+
public function diffInRealMinutes($date = null, $absolute = true)
|
3373 |
+
{
|
3374 |
+
return (int) ($this->diffInRealSeconds($date, $absolute) / static::SECONDS_PER_MINUTE);
|
3375 |
+
}
|
3376 |
+
|
3377 |
+
/**
|
3378 |
+
* Get the difference in seconds.
|
3379 |
+
*
|
3380 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3381 |
+
* @param bool $absolute Get the absolute of the difference
|
3382 |
*
|
3383 |
* @return int
|
3384 |
*/
|
3393 |
return $absolute || !$diff->invert ? $value : -$value;
|
3394 |
}
|
3395 |
|
3396 |
+
/**
|
3397 |
+
* Get the difference in seconds using timestamps.
|
3398 |
+
*
|
3399 |
+
* @param \Carbon\Carbon|\DateTimeInterface|string|null $date
|
3400 |
+
* @param bool $absolute Get the absolute of the difference
|
3401 |
+
*
|
3402 |
+
* @return int
|
3403 |
+
*/
|
3404 |
+
public function diffInRealSeconds($date = null, $absolute = true)
|
3405 |
+
{
|
3406 |
+
$date = $this->resolveCarbon($date);
|
3407 |
+
$value = $date->getTimestamp() - $this->getTimestamp();
|
3408 |
+
|
3409 |
+
return $absolute ? abs($value) : $value;
|
3410 |
+
}
|
3411 |
+
|
3412 |
/**
|
3413 |
* The number of seconds since midnight.
|
3414 |
*
|
3455 |
*
|
3456 |
* @return string
|
3457 |
*/
|
3458 |
+
public function diffForHumans($other = null, $absolute = false, $short = false, $parts = 1)
|
3459 |
{
|
3460 |
$isNow = $other === null;
|
3461 |
$interval = array();
|
3466 |
|
3467 |
if ($isNow) {
|
3468 |
$other = $this->nowWithSameTz();
|
3469 |
+
} elseif (!$other instanceof DateTime && !$other instanceof DateTimeInterface) {
|
3470 |
+
$other = static::parse($other);
|
3471 |
}
|
3472 |
|
3473 |
$diffInterval = $this->diff($other);
|
3553 |
*/
|
3554 |
public function startOfDay()
|
3555 |
{
|
3556 |
+
return $this->modify('00:00:00.000000');
|
3557 |
}
|
3558 |
|
3559 |
/**
|
3563 |
*/
|
3564 |
public function endOfDay()
|
3565 |
{
|
3566 |
+
return $this->modify('23.59.59.999999');
|
3567 |
}
|
3568 |
|
3569 |
/**
|
3573 |
*/
|
3574 |
public function startOfMonth()
|
3575 |
{
|
3576 |
+
return $this->setDate($this->year, $this->month, 1)->startOfDay();
|
3577 |
}
|
3578 |
|
3579 |
/**
|
3583 |
*/
|
3584 |
public function endOfMonth()
|
3585 |
{
|
3586 |
+
return $this->setDate($this->year, $this->month, $this->daysInMonth)->endOfDay();
|
3587 |
}
|
3588 |
|
3589 |
/**
|
3595 |
{
|
3596 |
$month = ($this->quarter - 1) * static::MONTHS_PER_QUARTER + 1;
|
3597 |
|
3598 |
+
return $this->setDate($this->year, $month, 1)->startOfDay();
|
3599 |
}
|
3600 |
|
3601 |
/**
|
3615 |
*/
|
3616 |
public function startOfYear()
|
3617 |
{
|
3618 |
+
return $this->setDate($this->year, 1, 1)->startOfDay();
|
3619 |
}
|
3620 |
|
3621 |
/**
|
3625 |
*/
|
3626 |
public function endOfYear()
|
3627 |
{
|
3628 |
+
return $this->setDate($this->year, 12, 31)->endOfDay();
|
3629 |
}
|
3630 |
|
3631 |
/**
|
3637 |
{
|
3638 |
$year = $this->year - $this->year % static::YEARS_PER_DECADE;
|
3639 |
|
3640 |
+
return $this->setDate($year, 1, 1)->startOfDay();
|
3641 |
}
|
3642 |
|
3643 |
/**
|
3649 |
{
|
3650 |
$year = $this->year - $this->year % static::YEARS_PER_DECADE + static::YEARS_PER_DECADE - 1;
|
3651 |
|
3652 |
+
return $this->setDate($year, 12, 31)->endOfDay();
|
3653 |
}
|
3654 |
|
3655 |
/**
|
3661 |
{
|
3662 |
$year = $this->year - ($this->year - 1) % static::YEARS_PER_CENTURY;
|
3663 |
|
3664 |
+
return $this->setDate($year, 1, 1)->startOfDay();
|
3665 |
}
|
3666 |
|
3667 |
/**
|
3673 |
{
|
3674 |
$year = $this->year - 1 - ($this->year - 1) % static::YEARS_PER_CENTURY + static::YEARS_PER_CENTURY;
|
3675 |
|
3676 |
+
return $this->setDate($year, 12, 31)->endOfDay();
|
3677 |
}
|
3678 |
|
3679 |
/**
|
src/common/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php
CHANGED
@@ -13,8 +13,6 @@ namespace Carbon;
|
|
13 |
|
14 |
use DateInterval;
|
15 |
use InvalidArgumentException;
|
16 |
-
use Symfony\Component\Translation\Loader\ArrayLoader;
|
17 |
-
use Symfony\Component\Translation\Translator;
|
18 |
use Symfony\Component\Translation\TranslatorInterface;
|
19 |
|
20 |
/**
|
@@ -119,27 +117,31 @@ class CarbonInterval extends DateInterval
|
|
119 |
*/
|
120 |
public function __construct($years = 1, $months = null, $weeks = null, $days = null, $hours = null, $minutes = null, $seconds = null)
|
121 |
{
|
122 |
-
$spec =
|
123 |
|
124 |
-
$spec
|
125 |
-
|
126 |
|
127 |
-
|
128 |
-
|
129 |
-
$specDays += $days > 0 ? $days : 0;
|
130 |
|
131 |
-
|
|
|
|
|
132 |
|
133 |
-
|
134 |
-
|
135 |
-
$
|
136 |
-
|
137 |
-
|
138 |
-
|
|
|
|
|
139 |
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
143 |
}
|
144 |
|
145 |
parent::__construct($spec);
|
@@ -213,6 +215,117 @@ class CarbonInterval extends DateInterval
|
|
213 |
}
|
214 |
}
|
215 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
/**
|
217 |
* Create a CarbonInterval instance from a DateInterval one. Can not instance
|
218 |
* DateInterval objects created from DateTime::diff() as you can't externally
|
@@ -249,10 +362,7 @@ class CarbonInterval extends DateInterval
|
|
249 |
protected static function translator()
|
250 |
{
|
251 |
if (static::$translator === null) {
|
252 |
-
|
253 |
-
$translator->addLoader('array', new ArrayLoader());
|
254 |
-
static::$translator = $translator;
|
255 |
-
static::setLocale('en');
|
256 |
}
|
257 |
|
258 |
return static::$translator;
|
@@ -295,13 +405,7 @@ class CarbonInterval extends DateInterval
|
|
295 |
*/
|
296 |
public static function setLocale($locale)
|
297 |
{
|
298 |
-
|
299 |
-
$translator->setLocale($locale);
|
300 |
-
|
301 |
-
if ($translator instanceof Translator) {
|
302 |
-
// Ensure the locale has been loaded.
|
303 |
-
$translator->addResource('array', require __DIR__.'/Lang/'.$locale.'.php', $locale);
|
304 |
-
}
|
305 |
}
|
306 |
|
307 |
///////////////////////////////////////////////////////////////////
|
13 |
|
14 |
use DateInterval;
|
15 |
use InvalidArgumentException;
|
|
|
|
|
16 |
use Symfony\Component\Translation\TranslatorInterface;
|
17 |
|
18 |
/**
|
117 |
*/
|
118 |
public function __construct($years = 1, $months = null, $weeks = null, $days = null, $hours = null, $minutes = null, $seconds = null)
|
119 |
{
|
120 |
+
$spec = $years;
|
121 |
|
122 |
+
if (!is_string($spec) || floatval($years) || preg_match('/^[0-9.]/', $years)) {
|
123 |
+
$spec = static::PERIOD_PREFIX;
|
124 |
|
125 |
+
$spec .= $years > 0 ? $years.static::PERIOD_YEARS : '';
|
126 |
+
$spec .= $months > 0 ? $months.static::PERIOD_MONTHS : '';
|
|
|
127 |
|
128 |
+
$specDays = 0;
|
129 |
+
$specDays += $weeks > 0 ? $weeks * Carbon::DAYS_PER_WEEK : 0;
|
130 |
+
$specDays += $days > 0 ? $days : 0;
|
131 |
|
132 |
+
$spec .= $specDays > 0 ? $specDays.static::PERIOD_DAYS : '';
|
133 |
+
|
134 |
+
if ($hours > 0 || $minutes > 0 || $seconds > 0) {
|
135 |
+
$spec .= static::PERIOD_TIME_PREFIX;
|
136 |
+
$spec .= $hours > 0 ? $hours.static::PERIOD_HOURS : '';
|
137 |
+
$spec .= $minutes > 0 ? $minutes.static::PERIOD_MINUTES : '';
|
138 |
+
$spec .= $seconds > 0 ? $seconds.static::PERIOD_SECONDS : '';
|
139 |
+
}
|
140 |
|
141 |
+
if ($spec === static::PERIOD_PREFIX) {
|
142 |
+
// Allow the zero interval.
|
143 |
+
$spec .= '0'.static::PERIOD_YEARS;
|
144 |
+
}
|
145 |
}
|
146 |
|
147 |
parent::__construct($spec);
|
215 |
}
|
216 |
}
|
217 |
|
218 |
+
/**
|
219 |
+
* Creates a CarbonInterval from string
|
220 |
+
*
|
221 |
+
* Format:
|
222 |
+
*
|
223 |
+
* Suffix | Unit | Example | DateInterval expression
|
224 |
+
* -------|---------|---------|------------------------
|
225 |
+
* y | years | 1y | P1Y
|
226 |
+
* mo | months | 3mo | P3M
|
227 |
+
* w | weeks | 2w | P2W
|
228 |
+
* d | days | 28d | P28D
|
229 |
+
* h | hours | 4h | PT4H
|
230 |
+
* m | minutes | 12m | PT12M
|
231 |
+
* s | seconds | 59s | PT59S
|
232 |
+
*
|
233 |
+
* e. g. `1w 3d 4h 32m 23s` is converted to 10 days 4 hours 32 minutes and 23 seconds.
|
234 |
+
*
|
235 |
+
* Special cases:
|
236 |
+
* - An empty string will return a zero interval
|
237 |
+
* - Fractions are allowed for weeks, days, hours and minutes and will be converted
|
238 |
+
* and rounded to the next smaller value (caution: 0.5w = 4d)
|
239 |
+
*
|
240 |
+
* @param string $intervalDefinition
|
241 |
+
*
|
242 |
+
* @return static
|
243 |
+
*/
|
244 |
+
public static function fromString($intervalDefinition)
|
245 |
+
{
|
246 |
+
if (empty($intervalDefinition)) {
|
247 |
+
return new static(0);
|
248 |
+
}
|
249 |
+
|
250 |
+
$years = 0;
|
251 |
+
$months = 0;
|
252 |
+
$weeks = 0;
|
253 |
+
$days = 0;
|
254 |
+
$hours = 0;
|
255 |
+
$minutes = 0;
|
256 |
+
$seconds = 0;
|
257 |
+
|
258 |
+
$pattern = '/(\d+(?:\.\d+)?)\h*([^\d\h]*)/i';
|
259 |
+
preg_match_all($pattern, $intervalDefinition, $parts, PREG_SET_ORDER);
|
260 |
+
while ($match = array_shift($parts)) {
|
261 |
+
list($part, $value, $unit) = $match;
|
262 |
+
$intValue = intval($value);
|
263 |
+
$fraction = floatval($value) - $intValue;
|
264 |
+
switch (strtolower($unit)) {
|
265 |
+
case 'year':
|
266 |
+
case 'years':
|
267 |
+
case 'y':
|
268 |
+
$years += $intValue;
|
269 |
+
break;
|
270 |
+
|
271 |
+
case 'month':
|
272 |
+
case 'months':
|
273 |
+
case 'mo':
|
274 |
+
$months += $intValue;
|
275 |
+
break;
|
276 |
+
|
277 |
+
case 'week':
|
278 |
+
case 'weeks':
|
279 |
+
case 'w':
|
280 |
+
$weeks += $intValue;
|
281 |
+
if ($fraction != 0) {
|
282 |
+
$parts[] = array(null, $fraction * Carbon::DAYS_PER_WEEK, 'd');
|
283 |
+
}
|
284 |
+
break;
|
285 |
+
|
286 |
+
case 'day':
|
287 |
+
case 'days':
|
288 |
+
case 'd':
|
289 |
+
$days += $intValue;
|
290 |
+
if ($fraction != 0) {
|
291 |
+
$parts[] = array(null, $fraction * Carbon::HOURS_PER_DAY, 'h');
|
292 |
+
}
|
293 |
+
break;
|
294 |
+
|
295 |
+
case 'hour':
|
296 |
+
case 'hours':
|
297 |
+
case 'h':
|
298 |
+
$hours += $intValue;
|
299 |
+
if ($fraction != 0) {
|
300 |
+
$parts[] = array(null, $fraction * Carbon::MINUTES_PER_HOUR, 'm');
|
301 |
+
}
|
302 |
+
break;
|
303 |
+
|
304 |
+
case 'minute':
|
305 |
+
case 'minutes':
|
306 |
+
case 'm':
|
307 |
+
$minutes += $intValue;
|
308 |
+
if ($fraction != 0) {
|
309 |
+
$seconds += round($fraction * Carbon::SECONDS_PER_MINUTE);
|
310 |
+
}
|
311 |
+
break;
|
312 |
+
|
313 |
+
case 'second':
|
314 |
+
case 'seconds':
|
315 |
+
case 's':
|
316 |
+
$seconds += $intValue;
|
317 |
+
break;
|
318 |
+
|
319 |
+
default:
|
320 |
+
throw new InvalidArgumentException(
|
321 |
+
sprintf('Invalid part %s in definition %s', $part, $intervalDefinition)
|
322 |
+
);
|
323 |
+
}
|
324 |
+
}
|
325 |
+
|
326 |
+
return new static($years, $months, $weeks, $days, $hours, $minutes, $seconds);
|
327 |
+
}
|
328 |
+
|
329 |
/**
|
330 |
* Create a CarbonInterval instance from a DateInterval one. Can not instance
|
331 |
* DateInterval objects created from DateTime::diff() as you can't externally
|
362 |
protected static function translator()
|
363 |
{
|
364 |
if (static::$translator === null) {
|
365 |
+
static::$translator = Translator::get();
|
|
|
|
|
|
|
366 |
}
|
367 |
|
368 |
return static::$translator;
|
405 |
*/
|
406 |
public static function setLocale($locale)
|
407 |
{
|
408 |
+
return static::translator()->setLocale($locale) !== false;
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
}
|
410 |
|
411 |
///////////////////////////////////////////////////////////////////
|
src/common/lib/vendor/nesbot/carbon/src/Carbon/Lang/gu.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Carbon package.
|
5 |
+
*
|
6 |
+
* (c) Brian Nesbitt <brian@nesbot.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
return array(
|
13 |
+
'year' => '1 વર્ષ|:count વર્ષો',
|
14 |
+
'y' => '1વર્ષ|:countવર્ષો',
|
15 |
+
'month' => '1 મહિનો|:count મહિના',
|
16 |
+
'm' => '1મહિનો|:countમહિના',
|
17 |
+
'week' => '1 અઠવાડિયું|:count અઠવાડિયા',
|
18 |
+
'w' => '1અઠ.|:countઅઠ.',
|
19 |
+
'day' => '1 દિવસ|:count દિવસો',
|
20 |
+
'd' => '1દિ.|:countદિ.',
|
21 |
+
'hour' => '1 કલાક|:count કલાકો',
|
22 |
+
'h' => '1ક.|:countક.',
|
23 |
+
'minute' => '1 મિનિટ|:count મિનિટ',
|
24 |
+
'min' => '1મિ.|:countમિ.',
|
25 |
+
'second' => '1 સેકેન્ડ|:count સેકેન્ડ',
|
26 |
+
's' => '1સે.|:countસે.',
|
27 |
+
'ago' => ':time પહેલા',
|
28 |
+
'from_now' => ':time અત્યારથી',
|
29 |
+
'after' => ':time પછી',
|
30 |
+
'before' => ':time પહેલા',
|
31 |
+
);
|
src/common/lib/vendor/nesbot/carbon/src/Carbon/Translator.php
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Carbon;
|
4 |
+
|
5 |
+
use Symfony\Component\Translation;
|
6 |
+
|
7 |
+
class Translator extends Translation\Translator
|
8 |
+
{
|
9 |
+
/**
|
10 |
+
* Singleton for Translator.
|
11 |
+
*
|
12 |
+
* @var static
|
13 |
+
*/
|
14 |
+
protected static $singleton;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* List of custom localized messages.
|
18 |
+
*
|
19 |
+
* @var array
|
20 |
+
*/
|
21 |
+
protected static $messages = array();
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Return a singleton instance of Translator.
|
25 |
+
*
|
26 |
+
* @param string|null $locale optional initial locale ("en" - english by default)
|
27 |
+
*
|
28 |
+
* @return static
|
29 |
+
*/
|
30 |
+
public static function get($locale = null)
|
31 |
+
{
|
32 |
+
if (static::$singleton === null) {
|
33 |
+
static::$singleton = new static($locale ?: 'en');
|
34 |
+
}
|
35 |
+
|
36 |
+
return static::$singleton;
|
37 |
+
}
|
38 |
+
|
39 |
+
public function __construct($locale, Translation\Formatter\MessageFormatterInterface $formatter = null, $cacheDir = null, $debug = false)
|
40 |
+
{
|
41 |
+
$this->addLoader('array', new Translation\Loader\ArrayLoader());
|
42 |
+
parent::__construct($locale, $formatter, $cacheDir, $debug);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Reset messages of a locale (all locale if no locale passed).
|
47 |
+
* Remove custom messages and reload initial messages from matching
|
48 |
+
* file in Lang directory.
|
49 |
+
*
|
50 |
+
* @param string|null $locale
|
51 |
+
*
|
52 |
+
* @return bool
|
53 |
+
*/
|
54 |
+
public function resetMessages($locale = null)
|
55 |
+
{
|
56 |
+
if ($locale === null) {
|
57 |
+
static::$messages = array();
|
58 |
+
|
59 |
+
return true;
|
60 |
+
}
|
61 |
+
|
62 |
+
if (file_exists($filename = __DIR__.'/Lang/'.$locale.'.php')) {
|
63 |
+
static::$messages[$locale] = require $filename;
|
64 |
+
$this->addResource('array', static::$messages[$locale], $locale);
|
65 |
+
|
66 |
+
return true;
|
67 |
+
}
|
68 |
+
|
69 |
+
return false;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Init messages language from matching file in Lang directory.
|
74 |
+
*
|
75 |
+
* @param string $locale
|
76 |
+
*
|
77 |
+
* @return bool
|
78 |
+
*/
|
79 |
+
protected function loadMessagesFromFile($locale)
|
80 |
+
{
|
81 |
+
if (isset(static::$messages[$locale])) {
|
82 |
+
return true;
|
83 |
+
}
|
84 |
+
|
85 |
+
return $this->resetMessages($locale);
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Set messages of a locale and take file first if present.
|
90 |
+
*
|
91 |
+
* @param string $locale
|
92 |
+
* @param array $messages
|
93 |
+
*
|
94 |
+
* @return $this
|
95 |
+
*/
|
96 |
+
public function setMessages($locale, $messages)
|
97 |
+
{
|
98 |
+
$this->loadMessagesFromFile($locale);
|
99 |
+
$this->addResource('array', $messages, $locale);
|
100 |
+
static::$messages[$locale] = array_merge(
|
101 |
+
isset(static::$messages[$locale]) ? static::$messages[$locale] : array(),
|
102 |
+
$messages
|
103 |
+
);
|
104 |
+
|
105 |
+
return $this;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Get messages of a locale, if none given, return all the
|
110 |
+
* languages.
|
111 |
+
*
|
112 |
+
* @param string|null $locale
|
113 |
+
*
|
114 |
+
* @return array
|
115 |
+
*/
|
116 |
+
public function getMessages($locale = null)
|
117 |
+
{
|
118 |
+
return $locale === null ? static::$messages : static::$messages[$locale];
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Set the current translator locale and indicate if the source locale file exists
|
123 |
+
*
|
124 |
+
* @param string $locale locale ex. en
|
125 |
+
*
|
126 |
+
* @return bool
|
127 |
+
*/
|
128 |
+
public function setLocale($locale)
|
129 |
+
{
|
130 |
+
$locale = preg_replace_callback('/[-_]([a-z]{2,})/', function ($matches) {
|
131 |
+
// _2-letters is a region, _3+-letters is a variant
|
132 |
+
return '_'.call_user_func(strlen($matches[1]) > 2 ? 'ucfirst' : 'strtoupper', $matches[1]);
|
133 |
+
}, strtolower($locale));
|
134 |
+
|
135 |
+
if ($this->loadMessagesFromFile($locale)) {
|
136 |
+
parent::setLocale($locale);
|
137 |
+
|
138 |
+
return true;
|
139 |
+
}
|
140 |
+
|
141 |
+
return false;
|
142 |
+
}
|
143 |
+
}
|
src/common/lib/vendor/twig/twig/lib/Twig/Environment.php
CHANGED
@@ -16,11 +16,11 @@
|
|
16 |
*/
|
17 |
class Twig_Environment
|
18 |
{
|
19 |
-
const VERSION = '1.35.
|
20 |
-
const VERSION_ID =
|
21 |
const MAJOR_VERSION = 1;
|
22 |
const MINOR_VERSION = 35;
|
23 |
-
const RELEASE_VERSION =
|
24 |
const EXTRA_VERSION = '';
|
25 |
|
26 |
protected $charset;
|
16 |
*/
|
17 |
class Twig_Environment
|
18 |
{
|
19 |
+
const VERSION = '1.35.3';
|
20 |
+
const VERSION_ID = 13503;
|
21 |
const MAJOR_VERSION = 1;
|
22 |
const MINOR_VERSION = 35;
|
23 |
+
const RELEASE_VERSION = 3;
|
24 |
const EXTRA_VERSION = '';
|
25 |
|
26 |
protected $charset;
|
src/common/lib/vendor/twig/twig/lib/Twig/Extension/Core.php
CHANGED
@@ -1263,6 +1263,10 @@ if (function_exists('mb_get_info')) {
|
|
1263 |
return mb_strlen($thing, $env->getCharset());
|
1264 |
}
|
1265 |
|
|
|
|
|
|
|
|
|
1266 |
if (is_object($thing) && method_exists($thing, '__toString') && !$thing instanceof \Countable) {
|
1267 |
return mb_strlen((string) $thing, $env->getCharset());
|
1268 |
}
|
@@ -1366,6 +1370,10 @@ else {
|
|
1366 |
return strlen($thing);
|
1367 |
}
|
1368 |
|
|
|
|
|
|
|
|
|
1369 |
if (is_object($thing) && method_exists($thing, '__toString') && !$thing instanceof \Countable) {
|
1370 |
return strlen((string) $thing);
|
1371 |
}
|
1263 |
return mb_strlen($thing, $env->getCharset());
|
1264 |
}
|
1265 |
|
1266 |
+
if ($thing instanceof \SimpleXMLElement) {
|
1267 |
+
return count($thing);
|
1268 |
+
}
|
1269 |
+
|
1270 |
if (is_object($thing) && method_exists($thing, '__toString') && !$thing instanceof \Countable) {
|
1271 |
return mb_strlen((string) $thing, $env->getCharset());
|
1272 |
}
|
1370 |
return strlen($thing);
|
1371 |
}
|
1372 |
|
1373 |
+
if ($thing instanceof \SimpleXMLElement) {
|
1374 |
+
return count($thing);
|
1375 |
+
}
|
1376 |
+
|
1377 |
if (is_object($thing) && method_exists($thing, '__toString') && !$thing instanceof \Countable) {
|
1378 |
return strlen((string) $thing);
|
1379 |
}
|
src/common/lib/vendor/twig/twig/lib/Twig/Lexer.php
CHANGED
@@ -343,6 +343,9 @@ class Twig_Lexer implements Twig_LexerInterface
|
|
343 |
|
344 |
$this->popState();
|
345 |
++$this->cursor;
|
|
|
|
|
|
|
346 |
}
|
347 |
}
|
348 |
|
343 |
|
344 |
$this->popState();
|
345 |
++$this->cursor;
|
346 |
+
} else {
|
347 |
+
// unlexable
|
348 |
+
throw new Twig_Error_Syntax(sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source);
|
349 |
}
|
350 |
}
|
351 |
|
src/common/lib/vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.php
CHANGED
@@ -48,6 +48,11 @@ class Twig_NodeVisitor_Sandbox extends Twig_BaseNodeVisitor
|
|
48 |
$this->functions[$node->getAttribute('name')] = $node;
|
49 |
}
|
50 |
|
|
|
|
|
|
|
|
|
|
|
51 |
// wrap print to check __toString() calls
|
52 |
if ($node instanceof Twig_Node_Print) {
|
53 |
return new Twig_Node_SandboxedPrint($node->getNode('expr'), $node->getTemplateLine(), $node->getNodeTag());
|
48 |
$this->functions[$node->getAttribute('name')] = $node;
|
49 |
}
|
50 |
|
51 |
+
// the .. operator is equivalent to the range() function
|
52 |
+
if ($node instanceof Twig_Node_Expression_Binary_Range && !isset($this->functions['range'])) {
|
53 |
+
$this->functions['range'] = $node;
|
54 |
+
}
|
55 |
+
|
56 |
// wrap print to check __toString() calls
|
57 |
if ($node instanceof Twig_Node_Print) {
|
58 |
return new Twig_Node_SandboxedPrint($node->getNode('expr'), $node->getTemplateLine(), $node->getNodeTag());
|
src/common/lib/vendor/twig/twig/lib/Twig/Parser.php
CHANGED
@@ -50,7 +50,7 @@ class Twig_Parser implements Twig_ParserInterface
|
|
50 |
|
51 |
public function getVarName()
|
52 |
{
|
53 |
-
return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->varNameSalt++));
|
54 |
}
|
55 |
|
56 |
/**
|
50 |
|
51 |
public function getVarName()
|
52 |
{
|
53 |
+
return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->stream->getSourceContext()->getCode().$this->varNameSalt++));
|
54 |
}
|
55 |
|
56 |
/**
|
src/config/feature-admin_access_restriction.php
CHANGED
@@ -238,6 +238,7 @@
|
|
238 |
},
|
239 |
{
|
240 |
"key": "_wl_namemain",
|
|
|
241 |
"section": "section_non_ui",
|
242 |
"default": "Shield Security",
|
243 |
"type": "text",
|
@@ -249,6 +250,7 @@
|
|
249 |
},
|
250 |
{
|
251 |
"key": "_wl_namemenu",
|
|
|
252 |
"section": "section_non_ui",
|
253 |
"default": "",
|
254 |
"type": "text",
|
@@ -260,6 +262,7 @@
|
|
260 |
},
|
261 |
{
|
262 |
"key": "_wl_description",
|
|
|
263 |
"section": "section_non_ui",
|
264 |
"default": "Secure Your Sites With The World's Most Powerful WordPress Security Plugin",
|
265 |
"type": "text",
|
@@ -271,6 +274,7 @@
|
|
271 |
},
|
272 |
{
|
273 |
"key": "_wl_homeurl",
|
|
|
274 |
"section": "section_non_ui",
|
275 |
"default": "http://icwp.io/home",
|
276 |
"type": "text",
|
@@ -282,6 +286,7 @@
|
|
282 |
},
|
283 |
{
|
284 |
"key": "_wl_iconurl",
|
|
|
285 |
"section": "section_non_ui",
|
286 |
"default": "",
|
287 |
"type": "text",
|
238 |
},
|
239 |
{
|
240 |
"key": "_wl_namemain",
|
241 |
+
"sensitive": true,
|
242 |
"section": "section_non_ui",
|
243 |
"default": "Shield Security",
|
244 |
"type": "text",
|
250 |
},
|
251 |
{
|
252 |
"key": "_wl_namemenu",
|
253 |
+
"sensitive": true,
|
254 |
"section": "section_non_ui",
|
255 |
"default": "",
|
256 |
"type": "text",
|
262 |
},
|
263 |
{
|
264 |
"key": "_wl_description",
|
265 |
+
"sensitive": true,
|
266 |
"section": "section_non_ui",
|
267 |
"default": "Secure Your Sites With The World's Most Powerful WordPress Security Plugin",
|
268 |
"type": "text",
|
274 |
},
|
275 |
{
|
276 |
"key": "_wl_homeurl",
|
277 |
+
"sensitive": true,
|
278 |
"section": "section_non_ui",
|
279 |
"default": "http://icwp.io/home",
|
280 |
"type": "text",
|
286 |
},
|
287 |
{
|
288 |
"key": "_wl_iconurl",
|
289 |
+
"sensitive": true,
|
290 |
"section": "section_non_ui",
|
291 |
"default": "",
|
292 |
"type": "text",
|
src/config/feature-license.php
CHANGED
@@ -7,9 +7,8 @@
|
|
7 |
"auto_enabled": true,
|
8 |
"show_module_menu_item": true,
|
9 |
"highlight_menu_item": true,
|
10 |
-
"hide_summary": false,
|
11 |
"storage_key": "license",
|
12 |
-
"show_central":
|
13 |
"premium": false,
|
14 |
"access_restricted": true
|
15 |
},
|
@@ -27,6 +26,7 @@
|
|
27 |
"options": [
|
28 |
{
|
29 |
"key": "license_key",
|
|
|
30 |
"transferable": false,
|
31 |
"default": "",
|
32 |
"section": "section_non_ui"
|
@@ -51,18 +51,21 @@
|
|
51 |
},
|
52 |
{
|
53 |
"key": "license_verified_at",
|
|
|
54 |
"transferable": false,
|
55 |
"default": 0,
|
56 |
"section": "section_non_ui"
|
57 |
},
|
58 |
{
|
59 |
"key": "license_expires_at",
|
|
|
60 |
"transferable": false,
|
61 |
"default": 0,
|
62 |
"section": "section_non_ui"
|
63 |
},
|
64 |
{
|
65 |
"key": "license_official_status",
|
|
|
66 |
"transferable": false,
|
67 |
"default": "",
|
68 |
"section": "section_non_ui"
|
@@ -75,12 +78,14 @@
|
|
75 |
},
|
76 |
{
|
77 |
"key": "license_registered_email",
|
|
|
78 |
"transferable": false,
|
79 |
"default": "",
|
80 |
"section": "section_non_ui"
|
81 |
},
|
82 |
{
|
83 |
"key": "is_shield_central",
|
|
|
84 |
"transferable": false,
|
85 |
"default": false,
|
86 |
"section": "section_non_ui"
|
@@ -93,18 +98,21 @@
|
|
93 |
},
|
94 |
{
|
95 |
"key": "last_error_at",
|
|
|
96 |
"transferable": false,
|
97 |
"default": 0,
|
98 |
"section": "section_non_ui"
|
99 |
},
|
100 |
{
|
101 |
"key": "keyless_request_hash",
|
|
|
102 |
"transferable": false,
|
103 |
"default": "",
|
104 |
"section": "section_non_ui"
|
105 |
},
|
106 |
{
|
107 |
"key": "keyless_request_at",
|
|
|
108 |
"transferable": false,
|
109 |
"default": 0,
|
110 |
"section": "section_non_ui"
|
@@ -112,6 +120,7 @@
|
|
112 |
],
|
113 |
"definitions": {
|
114 |
"license_store_url": "https://onedollarplugin.com/edd-sl/",
|
|
|
115 |
"license_item_name": "Shield Security Pro",
|
116 |
"license_item_id": "6047",
|
117 |
"license_item_name_sc": "Shield Security Pro (via Shield Central)",
|
@@ -121,6 +130,6 @@
|
|
121 |
"license_key_length": 32,
|
122 |
"license_key_type": "alphanumeric",
|
123 |
"keyless": true,
|
124 |
-
"keyless_handshake_expire":
|
125 |
}
|
126 |
}
|
7 |
"auto_enabled": true,
|
8 |
"show_module_menu_item": true,
|
9 |
"highlight_menu_item": true,
|
|
|
10 |
"storage_key": "license",
|
11 |
+
"show_central": false,
|
12 |
"premium": false,
|
13 |
"access_restricted": true
|
14 |
},
|
26 |
"options": [
|
27 |
{
|
28 |
"key": "license_key",
|
29 |
+
"sensitive": true,
|
30 |
"transferable": false,
|
31 |
"default": "",
|
32 |
"section": "section_non_ui"
|
51 |
},
|
52 |
{
|
53 |
"key": "license_verified_at",
|
54 |
+
"sensitive": true,
|
55 |
"transferable": false,
|
56 |
"default": 0,
|
57 |
"section": "section_non_ui"
|
58 |
},
|
59 |
{
|
60 |
"key": "license_expires_at",
|
61 |
+
"sensitive": true,
|
62 |
"transferable": false,
|
63 |
"default": 0,
|
64 |
"section": "section_non_ui"
|
65 |
},
|
66 |
{
|
67 |
"key": "license_official_status",
|
68 |
+
"sensitive": true,
|
69 |
"transferable": false,
|
70 |
"default": "",
|
71 |
"section": "section_non_ui"
|
78 |
},
|
79 |
{
|
80 |
"key": "license_registered_email",
|
81 |
+
"sensitive": true,
|
82 |
"transferable": false,
|
83 |
"default": "",
|
84 |
"section": "section_non_ui"
|
85 |
},
|
86 |
{
|
87 |
"key": "is_shield_central",
|
88 |
+
"sensitive": true,
|
89 |
"transferable": false,
|
90 |
"default": false,
|
91 |
"section": "section_non_ui"
|
98 |
},
|
99 |
{
|
100 |
"key": "last_error_at",
|
101 |
+
"sensitive": true,
|
102 |
"transferable": false,
|
103 |
"default": 0,
|
104 |
"section": "section_non_ui"
|
105 |
},
|
106 |
{
|
107 |
"key": "keyless_request_hash",
|
108 |
+
"sensitive": true,
|
109 |
"transferable": false,
|
110 |
"default": "",
|
111 |
"section": "section_non_ui"
|
112 |
},
|
113 |
{
|
114 |
"key": "keyless_request_at",
|
115 |
+
"sensitive": true,
|
116 |
"transferable": false,
|
117 |
"default": 0,
|
118 |
"section": "section_non_ui"
|
120 |
],
|
121 |
"definitions": {
|
122 |
"license_store_url": "https://onedollarplugin.com/edd-sl/",
|
123 |
+
"keyless_cp": "http://icwp.io/c5",
|
124 |
"license_item_name": "Shield Security Pro",
|
125 |
"license_item_id": "6047",
|
126 |
"license_item_name_sc": "Shield Security Pro (via Shield Central)",
|
130 |
"license_key_length": 32,
|
131 |
"license_key_type": "alphanumeric",
|
132 |
"keyless": true,
|
133 |
+
"keyless_handshake_expire": 90
|
134 |
}
|
135 |
}
|
src/features/base.php
CHANGED
@@ -593,10 +593,16 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends ICWP_WPSF_Foundation {
|
|
593 |
* @return array
|
594 |
*/
|
595 |
public function filter_getFeatureSummaryData( $aSummaryData ) {
|
596 |
-
if (
|
597 |
-
|
598 |
}
|
|
|
|
|
599 |
|
|
|
|
|
|
|
|
|
600 |
$oOptions = $this->getOptionsVo();
|
601 |
$sMenuTitle = $oOptions->getFeatureProperty( 'menu_title' );
|
602 |
|
@@ -612,12 +618,10 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends ICWP_WPSF_Foundation {
|
|
612 |
'name' => $this->getMainFeatureName(),
|
613 |
'menu_title' => empty( $sMenuTitle ) ? $this->getMainFeatureName() : $sMenuTitle,
|
614 |
'href' => network_admin_url( 'admin.php?page='.$this->getModSlug() ),
|
615 |
-
'sections' => $aSections
|
616 |
);
|
617 |
$aSummary[ 'content' ] = $this->renderTemplate( 'snippets/summary_single', $aSummary );
|
618 |
-
|
619 |
-
$aSummaryData[] = $aSummary;
|
620 |
-
return $aSummaryData;
|
621 |
}
|
622 |
|
623 |
/**
|
@@ -631,14 +635,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends ICWP_WPSF_Foundation {
|
|
631 |
* @return boolean
|
632 |
*/
|
633 |
public function getIfShowModuleLink() {
|
634 |
-
return $this->
|
635 |
-
}
|
636 |
-
|
637 |
-
/**
|
638 |
-
* @return boolean
|
639 |
-
*/
|
640 |
-
public function getIfShowSummaryItem() {
|
641 |
-
return $this->getIfShowModuleLink() && !$this->getOptionsVo()->getFeatureProperty( 'hide_summary' );
|
642 |
}
|
643 |
|
644 |
/**
|
@@ -1241,9 +1238,6 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends ICWP_WPSF_Foundation {
|
|
1241 |
else if ( $sOptionType == 'array' ) { //arrays are textareas, where each is separated by newline
|
1242 |
$sOptionValue = array_filter( explode( "\n", esc_textarea( $sOptionValue ) ), 'trim' );
|
1243 |
}
|
1244 |
-
else if ( $sOptionType == 'email' && !$oDp->validEmail( $sOptionValue ) ) {
|
1245 |
-
$sOptionValue = '';
|
1246 |
-
}
|
1247 |
else if ( $sOptionType == 'comma_separated_lists' ) {
|
1248 |
$sOptionValue = $oDp->extractCommaSeparatedList( $sOptionValue );
|
1249 |
}
|
593 |
* @return array
|
594 |
*/
|
595 |
public function filter_getFeatureSummaryData( $aSummaryData ) {
|
596 |
+
if ( $this->getIfShowModuleLink() ) {
|
597 |
+
$aSummaryData[] = $this->buildSummaryData();
|
598 |
}
|
599 |
+
return $aSummaryData;
|
600 |
+
}
|
601 |
|
602 |
+
/**
|
603 |
+
* @return array
|
604 |
+
*/
|
605 |
+
protected function buildSummaryData() {
|
606 |
$oOptions = $this->getOptionsVo();
|
607 |
$sMenuTitle = $oOptions->getFeatureProperty( 'menu_title' );
|
608 |
|
618 |
'name' => $this->getMainFeatureName(),
|
619 |
'menu_title' => empty( $sMenuTitle ) ? $this->getMainFeatureName() : $sMenuTitle,
|
620 |
'href' => network_admin_url( 'admin.php?page='.$this->getModSlug() ),
|
621 |
+
'sections' => $aSections,
|
622 |
);
|
623 |
$aSummary[ 'content' ] = $this->renderTemplate( 'snippets/summary_single', $aSummary );
|
624 |
+
return $aSummary;
|
|
|
|
|
625 |
}
|
626 |
|
627 |
/**
|
635 |
* @return boolean
|
636 |
*/
|
637 |
public function getIfShowModuleLink() {
|
638 |
+
return $this->getIfShowModuleMenuItem();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
639 |
}
|
640 |
|
641 |
/**
|
1238 |
else if ( $sOptionType == 'array' ) { //arrays are textareas, where each is separated by newline
|
1239 |
$sOptionValue = array_filter( explode( "\n", esc_textarea( $sOptionValue ) ), 'trim' );
|
1240 |
}
|
|
|
|
|
|
|
1241 |
else if ( $sOptionType == 'comma_separated_lists' ) {
|
1242 |
$sOptionValue = $oDp->extractCommaSeparatedList( $sOptionValue );
|
1243 |
}
|
src/features/license.php
CHANGED
@@ -48,12 +48,14 @@ class ICWP_WPSF_FeatureHandler_License extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
48 |
)
|
49 |
),
|
50 |
'ajax' => array(
|
51 |
-
'license_handling' => $this->getAjaxActionData( 'license_handling' )
|
|
|
52 |
),
|
53 |
'aHrefs' => array(
|
54 |
'shield_pro_url' => 'http://icwp.io/shieldpro',
|
55 |
'shield_pro_more_info_url' => 'http://icwp.io/shld1',
|
56 |
'iframe_url' => $this->getDef( 'landing_page_url' ),
|
|
|
57 |
),
|
58 |
'flags' => array(
|
59 |
'show_key' => !$this->isKeyless(),
|
@@ -142,6 +144,10 @@ class ICWP_WPSF_FeatureHandler_License extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
142 |
$aAjaxResponse = $this->ajaxExec_LicenseHandling();
|
143 |
break;
|
144 |
|
|
|
|
|
|
|
|
|
145 |
default:
|
146 |
break;
|
147 |
}
|
@@ -178,6 +184,49 @@ class ICWP_WPSF_FeatureHandler_License extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
178 |
return array( 'success' => $bSuccess );
|
179 |
}
|
180 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
/**
|
182 |
* @param string $sDeactivatedReason
|
183 |
*/
|
@@ -388,7 +437,6 @@ class ICWP_WPSF_FeatureHandler_License extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
388 |
|
389 |
/**
|
390 |
* IMPORTANT: Method used by Shield Central. Modify with care.
|
391 |
-
*
|
392 |
* We test various data points:
|
393 |
* 1) the key is valid format
|
394 |
* 2) the official license status is 'valid'
|
@@ -557,6 +605,15 @@ class ICWP_WPSF_FeatureHandler_License extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
557 |
parent::action_doFeatureShutdown();
|
558 |
}
|
559 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
560 |
/**
|
561 |
* @param array $aOptionsParams
|
562 |
* @return array
|
48 |
)
|
49 |
),
|
50 |
'ajax' => array(
|
51 |
+
'license_handling' => $this->getAjaxActionData( 'license_handling' ),
|
52 |
+
'connection_debug' => $this->getAjaxActionData( 'connection_debug' )
|
53 |
),
|
54 |
'aHrefs' => array(
|
55 |
'shield_pro_url' => 'http://icwp.io/shieldpro',
|
56 |
'shield_pro_more_info_url' => 'http://icwp.io/shld1',
|
57 |
'iframe_url' => $this->getDef( 'landing_page_url' ),
|
58 |
+
'keyless_cp' => $this->getDef( 'keyless_cp' ),
|
59 |
),
|
60 |
'flags' => array(
|
61 |
'show_key' => !$this->isKeyless(),
|
144 |
$aAjaxResponse = $this->ajaxExec_LicenseHandling();
|
145 |
break;
|
146 |
|
147 |
+
case 'connection_debug':
|
148 |
+
$aAjaxResponse = $this->ajaxExec_ConnectionDebug();
|
149 |
+
break;
|
150 |
+
|
151 |
default:
|
152 |
break;
|
153 |
}
|
184 |
return array( 'success' => $bSuccess );
|
185 |
}
|
186 |
|
187 |
+
/**
|
188 |
+
* @return array
|
189 |
+
*/
|
190 |
+
protected function ajaxExec_ConnectionDebug() {
|
191 |
+
$bSuccess = false;
|
192 |
+
|
193 |
+
$sStoreUrl = add_query_arg(
|
194 |
+
array( 'license_ping' => 'Y' ),
|
195 |
+
$this->getLicenseStoreUrl()
|
196 |
+
);
|
197 |
+
|
198 |
+
$mResponse = $this->loadFS()->requestUrl(
|
199 |
+
$sStoreUrl,
|
200 |
+
array(
|
201 |
+
'method' => 'POST',
|
202 |
+
'body' => array( 'ping' => 'pong' )
|
203 |
+
),
|
204 |
+
true
|
205 |
+
);
|
206 |
+
|
207 |
+
if ( is_wp_error( $mResponse ) ) {
|
208 |
+
$sResult = $mResponse->get_error_message();
|
209 |
+
}
|
210 |
+
else if ( is_array( $mResponse ) && !empty( $mResponse[ 'body' ] ) ) {
|
211 |
+
$aResult = @json_decode( $mResponse[ 'body' ], true );
|
212 |
+
if ( isset( $aResult[ 'success' ] ) && $aResult[ 'success' ] ) {
|
213 |
+
$bSuccess = true;
|
214 |
+
$sResult = 'Successful - no problems detected communicating with license server.';
|
215 |
+
}
|
216 |
+
else {
|
217 |
+
$sResult = 'Unknown failure due to unexpected response';
|
218 |
+
}
|
219 |
+
}
|
220 |
+
else {
|
221 |
+
$sResult = 'Unknown error as we could not get a response back from the server';
|
222 |
+
}
|
223 |
+
|
224 |
+
return array(
|
225 |
+
'success' => $bSuccess,
|
226 |
+
'message' => esc_html( esc_js( $sResult ) )
|
227 |
+
);
|
228 |
+
}
|
229 |
+
|
230 |
/**
|
231 |
* @param string $sDeactivatedReason
|
232 |
*/
|
437 |
|
438 |
/**
|
439 |
* IMPORTANT: Method used by Shield Central. Modify with care.
|
|
|
440 |
* We test various data points:
|
441 |
* 1) the key is valid format
|
442 |
* 2) the official license status is 'valid'
|
605 |
parent::action_doFeatureShutdown();
|
606 |
}
|
607 |
|
608 |
+
/**
|
609 |
+
* @return array
|
610 |
+
*/
|
611 |
+
protected function buildSummaryData() {
|
612 |
+
$aSummary = parent::buildSummaryData();
|
613 |
+
$aSummary[ 'enabled' ] = $this->hasValidWorkingLicense();
|
614 |
+
return $aSummary;
|
615 |
+
}
|
616 |
+
|
617 |
/**
|
618 |
* @param array $aOptionsParams
|
619 |
* @return array
|
templates/php/access_restricted.php
CHANGED
@@ -36,7 +36,7 @@
|
|
36 |
<button type="submit" class="btn btn-primary" name="submit">
|
37 |
<?php echo $strings[ 'aar_submit_access_key' ]; ?></button>
|
38 |
</div>
|
39 |
-
<div class="col-
|
40 |
<a class="btn btn-link "
|
41 |
href="<?php echo $hrefs[ 'aar_forget_key' ]; ?>" target="_blank">
|
42 |
<?php echo $strings[ 'aar_forget_key' ]; ?></a>
|
36 |
<button type="submit" class="btn btn-primary" name="submit">
|
37 |
<?php echo $strings[ 'aar_submit_access_key' ]; ?></button>
|
38 |
</div>
|
39 |
+
<div class="col-5 order-1 text-left">
|
40 |
<a class="btn btn-link "
|
41 |
href="<?php echo $hrefs[ 'aar_forget_key' ]; ?>" target="_blank">
|
42 |
<?php echo $strings[ 'aar_forget_key' ]; ?></a>
|
templates/php/snippets/options_form.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<form action="<?php echo $form_action; ?>" method="post" class="icwpOptionsForm">
|
2 |
<input type="hidden" id="_wpnonce" name="_wpnonce" value="<?php echo $data[ 'form_nonce' ] ?>">
|
3 |
<input type="hidden" name="mod_slug" value="<?php echo $data[ 'mod_slug' ]; ?>" />
|
4 |
<input type="hidden" name="all_options_input" value="<?php echo $data[ 'all_options_input' ]; ?>" />
|
1 |
+
<form action="<?php echo $form_action; ?>" method="post" class="icwpOptionsForm" novalidate="novalidate">
|
2 |
<input type="hidden" id="_wpnonce" name="_wpnonce" value="<?php echo $data[ 'form_nonce' ] ?>">
|
3 |
<input type="hidden" name="mod_slug" value="<?php echo $data[ 'mod_slug' ]; ?>" />
|
4 |
<input type="hidden" name="all_options_input" value="<?php echo $data[ 'all_options_input' ]; ?>" />
|
templates/php/snippets/pro.php
CHANGED
@@ -11,36 +11,28 @@ $aLicKeyInput = $inputs[ 'license_key' ];
|
|
11 |
#accordionTop .accordion-toggle h3 {
|
12 |
color: #333333;
|
13 |
}
|
14 |
-
|
15 |
#accordionTop .accordion-toggle {
|
16 |
background-color: rgba(255, 255, 255, 0.6);
|
17 |
}
|
18 |
-
|
19 |
#accordionTop .accordion-toggle:hover {
|
20 |
text-decoration: none;
|
21 |
background-color: rgba(255, 255, 255, 0.6);
|
22 |
}
|
23 |
-
|
24 |
#accordionTop .accordion-toggle:focus {
|
25 |
box-shadow: none;
|
26 |
}
|
27 |
-
|
28 |
#accordionTop .accordion-group {
|
29 |
margin-bottom: 15px;
|
30 |
}
|
31 |
-
|
32 |
#accordionTop .accordion-inner {
|
33 |
background-color: rgba(255, 255, 255, 0.6);
|
34 |
}
|
35 |
-
|
36 |
#ButtonBuyNow {
|
37 |
margin: 20px;
|
38 |
}
|
39 |
-
|
40 |
#ButtonActivate {
|
41 |
margin: 5px 2px 0;
|
42 |
}
|
43 |
-
|
44 |
.licenseForm button {
|
45 |
display: block;
|
46 |
}
|
@@ -54,7 +46,7 @@ $aLicKeyInput = $inputs[ 'license_key' ];
|
|
54 |
<h4>License Summary</h4>
|
55 |
</div>
|
56 |
<table class="table table-hover table-sm table-responsive">
|
57 |
-
<?php foreach( $vars as $varKey => $licenseValue ) : ?>
|
58 |
<?php $sClasses = ( $varKey == 'last_errors' && !empty( $licenseValue ) ) ? 'table-warning' : ''; ?>
|
59 |
<tr>
|
60 |
<th scope="row"><?php echo $strings[ $varKey ]; ?>:</th>
|
@@ -68,12 +60,10 @@ $aLicKeyInput = $inputs[ 'license_key' ];
|
|
68 |
|
69 |
<div class="row">
|
70 |
<div class="col card">
|
71 |
-
<form
|
72 |
-
|
73 |
<?php foreach ( $ajax[ 'license_handling' ] as $sAjKey => $sAjVal ) : ?>
|
74 |
<input type="hidden" name="<?php echo $sAjKey; ?>" value="<?php echo $sAjVal; ?>" />
|
75 |
<?php endforeach; ?>
|
76 |
-
|
77 |
<input type="hidden" name="license-action" value="check" />
|
78 |
<div class="form-group">
|
79 |
<label>Check License Availability For This Site</label>
|
@@ -84,13 +74,22 @@ $aLicKeyInput = $inputs[ 'license_key' ];
|
|
84 |
<span class="form-text text-muted">Verify License Registration</span>
|
85 |
</div>
|
86 |
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
</div>
|
88 |
</div>
|
89 |
|
90 |
<?php if ( $flags[ 'has_license_key' ] ) : ?>
|
91 |
<div class="row">
|
92 |
<div class="col card">
|
93 |
-
<form
|
94 |
|
95 |
<?php foreach ( $ajax[ 'license_handling' ] as $sAjKey => $sAjVal ) : ?>
|
96 |
<input type="hidden" name="<?php echo $sAjKey; ?>" value="<?php echo $sAjVal; ?>" />
|
@@ -136,6 +135,9 @@ $aLicKeyInput = $inputs[ 'license_key' ];
|
|
136 |
<dt>Catch Hacks Immediately - Plugins and Themes Guard</dt>
|
137 |
<dd>Be alerted to ANY unauthorized changes to plugins/themes.</dd>
|
138 |
|
|
|
|
|
|
|
139 |
<dt>Support for WooCommerce & other 3rd party plugins</dt>
|
140 |
<dd>Provide tighter security for your WooCommerce customers.
|
141 |
</dd>
|
@@ -264,5 +266,33 @@ var iCWP_WPSF_LicenseHandler = new function () {
|
|
264 |
};
|
265 |
}();
|
266 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
iCWP_WPSF_LicenseHandler.initialise();
|
|
|
268 |
</script>
|
11 |
#accordionTop .accordion-toggle h3 {
|
12 |
color: #333333;
|
13 |
}
|
|
|
14 |
#accordionTop .accordion-toggle {
|
15 |
background-color: rgba(255, 255, 255, 0.6);
|
16 |
}
|
|
|
17 |
#accordionTop .accordion-toggle:hover {
|
18 |
text-decoration: none;
|
19 |
background-color: rgba(255, 255, 255, 0.6);
|
20 |
}
|
|
|
21 |
#accordionTop .accordion-toggle:focus {
|
22 |
box-shadow: none;
|
23 |
}
|
|
|
24 |
#accordionTop .accordion-group {
|
25 |
margin-bottom: 15px;
|
26 |
}
|
|
|
27 |
#accordionTop .accordion-inner {
|
28 |
background-color: rgba(255, 255, 255, 0.6);
|
29 |
}
|
|
|
30 |
#ButtonBuyNow {
|
31 |
margin: 20px;
|
32 |
}
|
|
|
33 |
#ButtonActivate {
|
34 |
margin: 5px 2px 0;
|
35 |
}
|
|
|
36 |
.licenseForm button {
|
37 |
display: block;
|
38 |
}
|
46 |
<h4>License Summary</h4>
|
47 |
</div>
|
48 |
<table class="table table-hover table-sm table-responsive">
|
49 |
+
<?php foreach ( $vars as $varKey => $licenseValue ) : ?>
|
50 |
<?php $sClasses = ( $varKey == 'last_errors' && !empty( $licenseValue ) ) ? 'table-warning' : ''; ?>
|
51 |
<tr>
|
52 |
<th scope="row"><?php echo $strings[ $varKey ]; ?>:</th>
|
60 |
|
61 |
<div class="row">
|
62 |
<div class="col card">
|
63 |
+
<form method="post" class="licenseForm">
|
|
|
64 |
<?php foreach ( $ajax[ 'license_handling' ] as $sAjKey => $sAjVal ) : ?>
|
65 |
<input type="hidden" name="<?php echo $sAjKey; ?>" value="<?php echo $sAjVal; ?>" />
|
66 |
<?php endforeach; ?>
|
|
|
67 |
<input type="hidden" name="license-action" value="check" />
|
68 |
<div class="form-group">
|
69 |
<label>Check License Availability For This Site</label>
|
74 |
<span class="form-text text-muted">Verify License Registration</span>
|
75 |
</div>
|
76 |
</form>
|
77 |
+
<p class="font-weight-bold">Be sure to have first activated your URL in your
|
78 |
+
<a target="_blank" href="<?php echo $aHrefs[ 'keyless_cp' ]; ?>">Keyless Activation control panel</a>.</p>
|
79 |
+
|
80 |
+
<form method="post" id="ConnectionDebug">
|
81 |
+
<?php foreach ( $ajax[ 'connection_debug' ] as $sAjKey => $sAjVal ) : ?>
|
82 |
+
<input type="hidden" name="<?php echo $sAjKey; ?>" value="<?php echo $sAjVal; ?>" />
|
83 |
+
<?php endforeach; ?>
|
84 |
+
<button class="btn btn-link btn-sm float-right p-0" type="submit">[Debug]</button>
|
85 |
+
</form>
|
86 |
</div>
|
87 |
</div>
|
88 |
|
89 |
<?php if ( $flags[ 'has_license_key' ] ) : ?>
|
90 |
<div class="row">
|
91 |
<div class="col card">
|
92 |
+
<form method="post" class="licenseForm">
|
93 |
|
94 |
<?php foreach ( $ajax[ 'license_handling' ] as $sAjKey => $sAjVal ) : ?>
|
95 |
<input type="hidden" name="<?php echo $sAjKey; ?>" value="<?php echo $sAjVal; ?>" />
|
135 |
<dt>Catch Hacks Immediately - Plugins and Themes Guard</dt>
|
136 |
<dd>Be alerted to ANY unauthorized changes to plugins/themes.</dd>
|
137 |
|
138 |
+
<dt>Powerful User Password Policies</dt>
|
139 |
+
<dd>Ensures that all users maintain strong passwords.</dd>
|
140 |
+
|
141 |
<dt>Support for WooCommerce & other 3rd party plugins</dt>
|
142 |
<dd>Provide tighter security for your WooCommerce customers.
|
143 |
</dd>
|
266 |
};
|
267 |
}();
|
268 |
|
269 |
+
var iCWP_WPSF_ConnectionDebug = new function () {
|
270 |
+
/**
|
271 |
+
*/
|
272 |
+
var connectionDebug = function ( event ) {
|
273 |
+
iCWP_WPSF_BodyOverlay.show();
|
274 |
+
event.preventDefault();
|
275 |
+
|
276 |
+
var $oForm = jQuery( this );
|
277 |
+
jQuery.post( ajaxurl, $oForm.serialize(),
|
278 |
+
function ( oResponse ) {
|
279 |
+
|
280 |
+
alert( oResponse.data.message );
|
281 |
+
|
282 |
+
}
|
283 |
+
).always( function () {
|
284 |
+
iCWP_WPSF_BodyOverlay.hide();
|
285 |
+
}
|
286 |
+
);
|
287 |
+
};
|
288 |
+
|
289 |
+
this.initialise = function () {
|
290 |
+
jQuery( document ).ready( function () {
|
291 |
+
jQuery( document ).on( "submit", "form#ConnectionDebug", connectionDebug );
|
292 |
+
} );
|
293 |
+
};
|
294 |
+
}();
|
295 |
+
|
296 |
iCWP_WPSF_LicenseHandler.initialise();
|
297 |
+
iCWP_WPSF_ConnectionDebug.initialise();
|
298 |
</script>
|