WP Security Audit Log - Version 2.6

Version Description

(2017-02-08) =

  • New Features

    • Audit trail for WooCommerce Store and Products.
    • New Hover over functionality to disable alerts with a single click.
  • New WooCommerce Audit Trail Alerts

    • Refer to the Audit trail WooCommerce Alerts List for a complete list of alerts the plugin uses to keep a record of changes in the WooCommerce store and products.
  • Plugin Improvements

    • Improved severity of alerts and added severity description on hover over.
    • Removed all code related to PHP error monitoring, which is no longer used (code spring cleaning).
  • Bug Fixes

    • Fixed an issue in which 404 logs where still being generated when the logs option was disabled but alert 6007 was enabled.
Download this release

Release Info

Developer WPWhiteSecurity
Plugin Icon 128x128 WP Security Audit Log
Version 2.6
Comparing to
See all releases

Code changes from version 2.5.9.2 to 2.6

classes/Adapters/MySQL/MetaAdapter.php CHANGED
@@ -40,14 +40,15 @@ class WSAL_Adapters_MySQL_Meta extends WSAL_Adapters_MySQL_ActiveRecord implemen
40
  return $this->Load('occurrence_id = %d AND name = %s', array($occurenceId, $metaName));
41
  }
42
 
43
- public function GetMatchingIPs()
44
  {
45
  $_wpdb = $this->connection;
46
- $ips = $_wpdb->get_col("SELECT DISTINCT value FROM {$this->GetTable()} WHERE name = \"ClientIP\"");
 
 
47
  foreach ($ips as $key => $ip) {
48
  $ips[$key] = str_replace('"', '', $ip);
49
  }
50
  return array_unique($ips);
51
  }
52
-
53
  }
40
  return $this->Load('occurrence_id = %d AND name = %s', array($occurenceId, $metaName));
41
  }
42
 
43
+ public function GetMatchingIPs($limit = null)
44
  {
45
  $_wpdb = $this->connection;
46
+ $sql = "SELECT DISTINCT value FROM {$this->GetTable()} WHERE name = \"ClientIP\"";
47
+ if (!is_null($limit)) $sql .= ' LIMIT ' . $limit;
48
+ $ips = $_wpdb->get_col($sql);
49
  foreach ($ips as $key => $ip) {
50
  $ips[$key] = str_replace('"', '', $ip);
51
  }
52
  return array_unique($ips);
53
  }
 
54
  }
classes/AuditLogListView.php CHANGED
@@ -210,14 +210,23 @@ class WSAL_AuditLogListView extends WP_List_Table
210
  . ($item->is_read ? 'old' : 'new')
211
  . '" title="' . __('Click to toggle.', 'wp-security-audit-log') . '"></span>';
212
  case 'type':
213
- return str_pad($item->alert_id, 4, '0', STR_PAD_LEFT);
 
 
214
  case 'code':
215
  $code = $this->_plugin->alerts->GetAlert($item->alert_id);
216
  $code = $code ? $code->code : 0;
217
  $const = (object)array('name' => 'E_UNKNOWN', 'value' => 0, 'description' => __('Unknown error code.', 'wp-security-audit-log'));
218
  $const = $this->_plugin->constants->GetConstantBy('value', $code, $const);
219
- return '<span class="log-type log-type-' . $const->value
220
- . '" title="' . esc_html($const->name . ': ' . $const->description) . '"></span>';
 
 
 
 
 
 
 
221
  case 'crtd':
222
  return $item->created_on ? (
223
  str_replace(
210
  . ($item->is_read ? 'old' : 'new')
211
  . '" title="' . __('Click to toggle.', 'wp-security-audit-log') . '"></span>';
212
  case 'type':
213
+ $code = $this->_plugin->alerts->GetAlert($item->alert_id);
214
+ return '<span class="log-disable" data-tooltip="'. __('Disable this type of alerts.', 'wp-security-audit-log').'<br>'.$item->alert_id.' - '.esc_html($code->desc).'" data-alert-id="'.$item->alert_id.'">'
215
+ . str_pad($item->alert_id, 4, '0', STR_PAD_LEFT) . ' </span>';
216
  case 'code':
217
  $code = $this->_plugin->alerts->GetAlert($item->alert_id);
218
  $code = $code ? $code->code : 0;
219
  $const = (object)array('name' => 'E_UNKNOWN', 'value' => 0, 'description' => __('Unknown error code.', 'wp-security-audit-log'));
220
  $const = $this->_plugin->constants->GetConstantBy('value', $code, $const);
221
+ if ($const->name == 'E_CRITICAL') {
222
+ $const->name = 'Critical';
223
+ } else if ($const->name == 'E_WARNING') {
224
+ $const->name = 'Warning';
225
+ } else if ($const->name == 'E_NOTICE') {
226
+ $const->name = 'Notification';
227
+ }
228
+ return '<a class="tooltip" href="#" data-tooltip="'. esc_html($const->name) .'"><span class="log-type log-type-'. $const->value
229
+ .'"></span></a>';
230
  case 'crtd':
231
  return $item->created_on ? (
232
  str_replace(
classes/EDD_SL_Plugin_Updater.php CHANGED
@@ -10,161 +10,161 @@
10
  * @version 1.2
11
  */
12
  class EDD_SL_Plugin_Updater {
13
- private $api_url = '';
14
- private $api_data = array();
15
- private $name = '';
16
- private $slug = '';
17
- private $do_check = false;
18
-
19
- /**
20
- * Class constructor.
21
- *
22
- * @uses plugin_basename()
23
- * @uses hook()
24
- *
25
- * @param string $_api_url The URL pointing to the custom API endpoint.
26
- * @param string $_plugin_file Path to the plugin file.
27
- * @param array $_api_data Optional data to send with API calls.
28
- * @return void
29
- */
30
- function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
31
- $this->api_url = trailingslashit( $_api_url );
32
- $this->api_data = urlencode_deep( $_api_data );
33
- $this->name = plugin_basename( $_plugin_file );
34
- $this->slug = basename( $_plugin_file, '.php');
35
- $this->version = $_api_data['version'];
36
-
37
- // Set up hooks.
38
- $this->hook();
39
- }
40
-
41
- /**
42
- * Set up WordPress filters to hook into WP's update process.
43
- *
44
- * @uses add_filter()
45
- *
46
- * @return void
47
- */
48
- private function hook() {
49
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'pre_set_site_transient_update_plugins_filter' ) );
50
- add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
51
- add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
52
- }
53
-
54
- /**
55
- * Check for Updates at the defined API endpoint and modify the update array.
56
- *
57
- * This function dives into the update API just when WordPress creates its update array,
58
- * then adds a custom API call and injects the custom plugin data retrieved from the API.
59
- * It is reassembled from parts of the native WordPress plugin update code.
60
- * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
61
- *
62
- * @uses api_request()
63
- *
64
- * @param array $_transient_data Update array build by WordPress.
65
- * @return array Modified update array with custom plugin data.
66
- */
67
- function pre_set_site_transient_update_plugins_filter( $_transient_data ) {
68
-
69
- if( empty( $_transient_data ) || ! $this->do_check ) {
70
-
71
- // This ensures that the custom API request only runs on the second time that WP fires the update check
72
- $this->do_check = true;
73
-
74
- return $_transient_data;
75
- }
76
-
77
- $to_send = array( 'slug' => $this->slug );
78
-
79
- $api_response = $this->api_request( 'plugin_latest_version', $to_send );
80
-
81
- if( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) {
82
-
83
- if( version_compare( $this->version, $api_response->new_version, '<' ) ) {
84
- $_transient_data->response[$this->name] = $api_response;
85
- }
86
- }
87
- return $_transient_data;
88
- }
89
-
90
-
91
- /**
92
- * Updates information on the "View version x.x details" page with custom data.
93
- *
94
- * @uses api_request()
95
- *
96
- * @param mixed $_data
97
- * @param string $_action
98
- * @param object $_args
99
- * @return object $_data
100
- */
101
- function plugins_api_filter( $_data, $_action = '', $_args = null ) {
102
- if ( ( $_action != 'plugin_information' ) || !isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) return $_data;
103
-
104
- $to_send = array( 'slug' => $this->slug );
105
-
106
- $api_response = $this->api_request( 'plugin_information', $to_send );
107
- if ( false !== $api_response ) $_data = $api_response;
108
-
109
- return $_data;
110
- }
111
-
112
-
113
- /**
114
- * Disable SSL verification in order to prevent download update failures
115
- *
116
- * @param array $args
117
- * @param string $url
118
- * @return object $array
119
- */
120
- function http_request_args( $args, $url ) {
121
- // If it is an https request and we are performing a package download, disable ssl verification
122
- if( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
123
- $args['sslverify'] = false;
124
- }
125
- return $args;
126
- }
127
-
128
- /**
129
- * Calls the API and, if successfull, returns the object delivered by the API.
130
- *
131
- * @uses get_bloginfo()
132
- * @uses wp_remote_post()
133
- * @uses is_wp_error()
134
- *
135
- * @param string $_action The requested action.
136
- * @param array $_data Parameters for the API action.
137
- * @return false||object
138
- */
139
- private function api_request( $_action, $_data ) {
140
-
141
- global $wp_version;
142
-
143
- $data = array_merge( $this->api_data, $_data );
144
-
145
- if( $data['slug'] != $this->slug )
146
- return;
147
-
148
- if( empty( $data['license'] ) )
149
- return;
150
-
151
- $api_params = array(
152
- 'edd_action' => 'get_version',
153
- 'license' => $data['license'],
154
- 'name' => $data['item_name'],
155
- 'slug' => $this->slug,
156
- 'author' => $data['author'],
157
- 'url' => home_url()
158
- );
159
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
160
-
161
- if ( ! is_wp_error( $request ) ):
162
- $request = json_decode( wp_remote_retrieve_body( $request ) );
163
- if( $request && isset( $request->sections ) )
164
- $request->sections = maybe_unserialize( $request->sections );
165
- return $request;
166
- else:
167
- return false;
168
- endif;
169
- }
170
  }
10
  * @version 1.2
11
  */
12
  class EDD_SL_Plugin_Updater {
13
+ private $api_url = '';
14
+ private $api_data = array();
15
+ private $name = '';
16
+ private $slug = '';
17
+ private $do_check = false;
18
+
19
+ /**
20
+ * Class constructor.
21
+ *
22
+ * @uses plugin_basename()
23
+ * @uses hook()
24
+ *
25
+ * @param string $_api_url The URL pointing to the custom API endpoint.
26
+ * @param string $_plugin_file Path to the plugin file.
27
+ * @param array $_api_data Optional data to send with API calls.
28
+ * @return void
29
+ */
30
+ function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
31
+ $this->api_url = trailingslashit( $_api_url );
32
+ $this->api_data = urlencode_deep( $_api_data );
33
+ $this->name = plugin_basename( $_plugin_file );
34
+ $this->slug = basename( $_plugin_file, '.php');
35
+ $this->version = $_api_data['version'];
36
+
37
+ // Set up hooks.
38
+ $this->hook();
39
+ }
40
+
41
+ /**
42
+ * Set up WordPress filters to hook into WP's update process.
43
+ *
44
+ * @uses add_filter()
45
+ *
46
+ * @return void
47
+ */
48
+ private function hook() {
49
+ add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'pre_set_site_transient_update_plugins_filter' ) );
50
+ add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
51
+ add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
52
+ }
53
+
54
+ /**
55
+ * Check for Updates at the defined API endpoint and modify the update array.
56
+ *
57
+ * This function dives into the update API just when WordPress creates its update array,
58
+ * then adds a custom API call and injects the custom plugin data retrieved from the API.
59
+ * It is reassembled from parts of the native WordPress plugin update code.
60
+ * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
61
+ *
62
+ * @uses api_request()
63
+ *
64
+ * @param array $_transient_data Update array build by WordPress.
65
+ * @return array Modified update array with custom plugin data.
66
+ */
67
+ function pre_set_site_transient_update_plugins_filter( $_transient_data ) {
68
+
69
+ if( empty( $_transient_data ) || ! $this->do_check ) {
70
+
71
+ // This ensures that the custom API request only runs on the second time that WP fires the update check
72
+ $this->do_check = true;
73
+
74
+ return $_transient_data;
75
+ }
76
+
77
+ $to_send = array( 'slug' => $this->slug );
78
+
79
+ $api_response = $this->api_request( 'plugin_latest_version', $to_send );
80
+
81
+ if( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) {
82
+
83
+ if( version_compare( $this->version, $api_response->new_version, '<' ) ) {
84
+ $_transient_data->response[$this->name] = $api_response;
85
+ }
86
+ }
87
+ return $_transient_data;
88
+ }
89
+
90
+
91
+ /**
92
+ * Updates information on the "View version x.x details" page with custom data.
93
+ *
94
+ * @uses api_request()
95
+ *
96
+ * @param mixed $_data
97
+ * @param string $_action
98
+ * @param object $_args
99
+ * @return object $_data
100
+ */
101
+ function plugins_api_filter( $_data, $_action = '', $_args = null ) {
102
+ if ( ( $_action != 'plugin_information' ) || !isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) return $_data;
103
+
104
+ $to_send = array( 'slug' => $this->slug );
105
+
106
+ $api_response = $this->api_request( 'plugin_information', $to_send );
107
+ if ( false !== $api_response ) $_data = $api_response;
108
+
109
+ return $_data;
110
+ }
111
+
112
+
113
+ /**
114
+ * Disable SSL verification in order to prevent download update failures
115
+ *
116
+ * @param array $args
117
+ * @param string $url
118
+ * @return object $array
119
+ */
120
+ function http_request_args( $args, $url ) {
121
+ // If it is an https request and we are performing a package download, disable ssl verification
122
+ if( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
123
+ $args['sslverify'] = false;
124
+ }
125
+ return $args;
126
+ }
127
+
128
+ /**
129
+ * Calls the API and, if successfull, returns the object delivered by the API.
130
+ *
131
+ * @uses get_bloginfo()
132
+ * @uses wp_remote_post()
133
+ * @uses is_wp_error()
134
+ *
135
+ * @param string $_action The requested action.
136
+ * @param array $_data Parameters for the API action.
137
+ * @return false||object
138
+ */
139
+ private function api_request( $_action, $_data ) {
140
+
141
+ global $wp_version;
142
+
143
+ $data = array_merge( $this->api_data, $_data );
144
+
145
+ if( $data['slug'] != $this->slug )
146
+ return;
147
+
148
+ if( empty( $data['license'] ) )
149
+ return;
150
+
151
+ $api_params = array(
152
+ 'edd_action' => 'get_version',
153
+ 'license' => $data['license'],
154
+ 'name' => $data['item_name'],
155
+ 'slug' => $this->slug,
156
+ 'author' => $data['author'],
157
+ 'url' => home_url()
158
+ );
159
+ $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
160
+
161
+ if ( ! is_wp_error( $request ) ):
162
+ $request = json_decode( wp_remote_retrieve_body( $request ) );
163
+ if( $request && isset( $request->sections ) )
164
+ $request->sections = maybe_unserialize( $request->sections );
165
+ return $request;
166
+ else:
167
+ return false;
168
+ endif;
169
+ }
170
  }
classes/Sensors/BBPress.php CHANGED
@@ -4,7 +4,6 @@
4
  */
5
  class WSAL_Sensors_BBPress extends WSAL_AbstractSensor
6
  {
7
- protected $_OldPost = null;
8
  protected $_OldLink = null;
9
 
10
  public function HookEvents()
@@ -33,7 +32,6 @@ class WSAL_Sensors_BBPress extends WSAL_AbstractSensor
33
  && !(isset($_POST['action']) && $_POST['action'] == 'autosave')
34
  ) {
35
  $postID = intval($_POST['post_ID']);
36
- $this->_OldPost = get_post($postID);
37
  $this->_OldLink = get_permalink($postID);
38
  }
39
  }
4
  */
5
  class WSAL_Sensors_BBPress extends WSAL_AbstractSensor
6
  {
 
7
  protected $_OldLink = null;
8
 
9
  public function HookEvents()
32
  && !(isset($_POST['action']) && $_POST['action'] == 'autosave')
33
  ) {
34
  $postID = intval($_POST['post_ID']);
 
35
  $this->_OldLink = get_permalink($postID);
36
  }
37
  }
classes/Sensors/Content.php CHANGED
@@ -111,7 +111,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
111
  ));
112
  // run checks
113
  if ($this->_OldPost) {
114
- if ($this->CheckBBPress($this->_OldPost)) {
115
  return;
116
  }
117
  if ($oldStatus == 'auto-draft' || $original == 'auto-draft') {
@@ -207,7 +207,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
207
  public function EventPostDeleted($post_id)
208
  {
209
  $post = get_post($post_id);
210
- if ($this->CheckBBPress($post)) {
211
  return;
212
  }
213
  $WPActions = array('delete');
@@ -233,7 +233,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
233
  public function EventPostTrashed($post_id)
234
  {
235
  $post = get_post($post_id);
236
- if ($this->CheckBBPress($post)) {
237
  return;
238
  }
239
  $event = $this->GetEventTypeForPostType($post, 2012, 2013, 2034);
@@ -250,7 +250,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
250
  public function EventPostUntrashed($post_id)
251
  {
252
  $post = get_post($post_id);
253
- if ($this->CheckBBPress($post)) {
254
  return;
255
  }
256
  $event = $this->GetEventTypeForPostType($post, 2014, 2015, 2035);
@@ -490,7 +490,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
490
 
491
  public function CheckModificationChange($post_ID, $oldpost, $newpost)
492
  {
493
- if ($this->CheckBBPress($oldpost)) {
494
  return;
495
  }
496
  $changes = $this->CheckTitleChange($oldpost, $newpost);
@@ -638,15 +638,16 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
638
  }
639
 
640
  /**
641
- * Ignore post from BBPress Plugin,
642
- * Triggered on the BBPress Sensor
643
  */
644
- private function CheckBBPress($post)
645
  {
646
  switch ($post->post_type) {
647
  case 'forum':
648
  case 'topic':
649
  case 'reply':
 
650
  return true;
651
  default:
652
  return false;
@@ -681,6 +682,9 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
681
  {
682
  if (is_user_logged_in()) {
683
  if (!is_admin()) {
 
 
 
684
  $currentPath = $_SERVER["REQUEST_URI"];
685
  if (!empty($_SERVER["HTTP_REFERER"])
686
  && strpos($_SERVER["HTTP_REFERER"], $currentPath) !== false) {
@@ -707,6 +711,9 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor
707
  {
708
  if (is_user_logged_in()) {
709
  if (is_admin()) {
 
 
 
710
  $currentPath = $_SERVER["SCRIPT_NAME"] . "?post=" . $post->ID;
711
  if (!empty($_SERVER["HTTP_REFERER"])
712
  && strpos($_SERVER["HTTP_REFERER"], $currentPath) !== false) {
111
  ));
112
  // run checks
113
  if ($this->_OldPost) {
114
+ if ($this->CheckOtherSensors($this->_OldPost)) {
115
  return;
116
  }
117
  if ($oldStatus == 'auto-draft' || $original == 'auto-draft') {
207
  public function EventPostDeleted($post_id)
208
  {
209
  $post = get_post($post_id);
210
+ if ($this->CheckOtherSensors($post)) {
211
  return;
212
  }
213
  $WPActions = array('delete');
233
  public function EventPostTrashed($post_id)
234
  {
235
  $post = get_post($post_id);
236
+ if ($this->CheckOtherSensors($post)) {
237
  return;
238
  }
239
  $event = $this->GetEventTypeForPostType($post, 2012, 2013, 2034);
250
  public function EventPostUntrashed($post_id)
251
  {
252
  $post = get_post($post_id);
253
+ if ($this->CheckOtherSensors($post)) {
254
  return;
255
  }
256
  $event = $this->GetEventTypeForPostType($post, 2014, 2015, 2035);
490
 
491
  public function CheckModificationChange($post_ID, $oldpost, $newpost)
492
  {
493
+ if ($this->CheckOtherSensors($oldpost)) {
494
  return;
495
  }
496
  $changes = $this->CheckTitleChange($oldpost, $newpost);
638
  }
639
 
640
  /**
641
+ * Ignore post from BBPress, WooCommerce Plugin
642
+ * Triggered on the Sensors
643
  */
644
+ private function CheckOtherSensors($post)
645
  {
646
  switch ($post->post_type) {
647
  case 'forum':
648
  case 'topic':
649
  case 'reply':
650
+ case 'product':
651
  return true;
652
  default:
653
  return false;
682
  {
683
  if (is_user_logged_in()) {
684
  if (!is_admin()) {
685
+ if ($this->CheckOtherSensors($post)) {
686
+ return;
687
+ }
688
  $currentPath = $_SERVER["REQUEST_URI"];
689
  if (!empty($_SERVER["HTTP_REFERER"])
690
  && strpos($_SERVER["HTTP_REFERER"], $currentPath) !== false) {
711
  {
712
  if (is_user_logged_in()) {
713
  if (is_admin()) {
714
+ if ($this->CheckOtherSensors($post)) {
715
+ return;
716
+ }
717
  $currentPath = $_SERVER["SCRIPT_NAME"] . "?post=" . $post->ID;
718
  if (!empty($_SERVER["HTTP_REFERER"])
719
  && strpos($_SERVER["HTTP_REFERER"], $currentPath) !== false) {
classes/Sensors/PluginsThemes.php CHANGED
@@ -253,18 +253,33 @@ class WSAL_Sensors_PluginsThemes extends WSAL_AbstractSensor
253
  ));
254
  }
255
 
 
 
 
256
  public function EventPluginPostCreate($insert, $post)
257
  {
258
  $WPActions = array('editpost', 'heartbeat', 'inline-save', 'trash', 'untrash');
259
  if (isset($_REQUEST['action']) && !in_array($_REQUEST['action'], $WPActions)) {
260
  if (!in_array($post->post_type, array('attachment', 'revision', 'nav_menu_item'))) {
261
- $event = $this->GetEventTypeForPostType($post, 5019, 5020, 5021);
262
- $this->plugin->alerts->Trigger($event, array(
263
- 'PostID' => $post->ID,
264
- 'PostType' => $post->post_type,
265
- 'PostTitle' => $post->post_title,
266
- 'Username' => 'Plugins'
267
- ));
 
 
 
 
 
 
 
 
 
 
 
 
268
  }
269
  }
270
  }
@@ -307,4 +322,16 @@ class WSAL_Sensors_PluginsThemes extends WSAL_AbstractSensor
307
  return $typeCustom;
308
  }
309
  }
 
 
 
 
 
 
 
 
 
 
 
 
310
  }
253
  ));
254
  }
255
 
256
+ /**
257
+ * Used even for modified post
258
+ */
259
  public function EventPluginPostCreate($insert, $post)
260
  {
261
  $WPActions = array('editpost', 'heartbeat', 'inline-save', 'trash', 'untrash');
262
  if (isset($_REQUEST['action']) && !in_array($_REQUEST['action'], $WPActions)) {
263
  if (!in_array($post->post_type, array('attachment', 'revision', 'nav_menu_item'))) {
264
+ // if the plugin modify the post
265
+ if (strpos($_REQUEST['action'], 'edit') !== false) {
266
+ $event = $this->GetEventTypeForPostType($post, 2106, 2107, 2108);
267
+ $editorLink = $this->GetEditorLink($post);
268
+ $this->plugin->alerts->Trigger($event, array(
269
+ 'PostID' => $post->ID,
270
+ 'PostType' => $post->post_type,
271
+ 'PostTitle' => $post->post_title,
272
+ $editorLink['name'] => $editorLink['value']
273
+ ));
274
+ } else {
275
+ $event = $this->GetEventTypeForPostType($post, 5019, 5020, 5021);
276
+ $this->plugin->alerts->Trigger($event, array(
277
+ 'PostID' => $post->ID,
278
+ 'PostType' => $post->post_type,
279
+ 'PostTitle' => $post->post_title,
280
+ 'Username' => 'Plugins'
281
+ ));
282
+ }
283
  }
284
  }
285
  }
322
  return $typeCustom;
323
  }
324
  }
325
+
326
+ private function GetEditorLink($post)
327
+ {
328
+ $name = 'EditorLink';
329
+ $name .= ($post->post_type == 'page') ? 'Page' : 'Post' ;
330
+ $value = get_edit_post_link($post->ID);
331
+ $aLink = array(
332
+ 'name' => $name,
333
+ 'value' => $value,
334
+ );
335
+ return $aLink;
336
+ }
337
  }
classes/Sensors/System.php CHANGED
@@ -295,7 +295,7 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor
295
  */
296
  public function LogFilesPruning()
297
  {
298
- if ($this->plugin->GetGlobalOption('purge-404-log', 0)) {
299
  $upload_dir = wp_upload_dir();
300
  $uploadsDirPath = trailingslashit($upload_dir['basedir']).'wp-security-audit-log/404s/';
301
  if (is_dir($uploadsDirPath)) {
@@ -324,7 +324,7 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor
324
  private function WriteLog($attempts, $ip, $username = '')
325
  {
326
  $nameFile = null;
327
- if ($this->plugin->GetGlobalOption('log-404', 0)) {
328
  // Request URL
329
  $url = $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'];
330
  // Create/Append to the log file
295
  */
296
  public function LogFilesPruning()
297
  {
298
+ if ($this->plugin->GetGlobalOption('purge-404-log', 'off') == 'on') {
299
  $upload_dir = wp_upload_dir();
300
  $uploadsDirPath = trailingslashit($upload_dir['basedir']).'wp-security-audit-log/404s/';
301
  if (is_dir($uploadsDirPath)) {
324
  private function WriteLog($attempts, $ip, $username = '')
325
  {
326
  $nameFile = null;
327
+ if ($this->plugin->GetGlobalOption('log-404', 'off') == 'on') {
328
  // Request URL
329
  $url = $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'];
330
  // Create/Append to the log file
classes/Sensors/WooCommerce.php ADDED
@@ -0,0 +1,844 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Support for WooCommerce Plugin
4
+ */
5
+ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor
6
+ {
7
+ protected $_OldPost = null;
8
+ protected $_OldLink = null;
9
+ protected $_OldCats = null;
10
+ protected $_OldData = null;
11
+ protected $_OldStockStatus = null;
12
+ protected $_OldFileNames = array();
13
+ protected $_OldFileUrls = array();
14
+
15
+ public function HookEvents()
16
+ {
17
+ if (current_user_can("edit_posts")) {
18
+ add_action('admin_init', array($this, 'EventAdminInit'));
19
+ }
20
+ add_action('post_updated', array($this, 'EventChanged'), 10, 3);
21
+ add_action('delete_post', array($this, 'EventDeleted'), 10, 1);
22
+ add_action('wp_trash_post', array($this, 'EventTrashed'), 10, 1);
23
+ add_action('untrash_post', array($this, 'EventUntrashed'));
24
+
25
+ add_action('create_product_cat', array($this, 'EventCategoryCreation'), 10, 1);
26
+ // add_action('edit_product_cat', array($this, 'EventCategoryChanged'), 10, 1);
27
+ }
28
+
29
+ public function EventAdminInit()
30
+ {
31
+ // load old data, if applicable
32
+ $this->RetrieveOldData();
33
+ $this->CheckSettingsChange();
34
+ }
35
+
36
+ protected function RetrieveOldData()
37
+ {
38
+ if (isset($_POST) && isset($_POST['post_ID'])
39
+ && !(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
40
+ && !(isset($_POST['action']) && $_POST['action'] == 'autosave')
41
+ ) {
42
+ $postID = intval($_POST['post_ID']);
43
+ $this->_OldPost = get_post($postID);
44
+ $this->_OldLink = get_post_permalink($postID, false, true);
45
+ $this->_OldCats = $this->GetProductCategories($this->_OldPost);
46
+ $this->_OldData = $this->GetProductData($this->_OldPost);
47
+ $this->_OldStockStatus = get_post_meta($postID, '_stock_status', true);
48
+
49
+ $oldDownloadableFiles = get_post_meta($postID, '_downloadable_files', true);
50
+ if (!empty($oldDownloadableFiles)) {
51
+ foreach ($oldDownloadableFiles as $file) {
52
+ array_push($this->_OldFileNames, $file['name']);
53
+ array_push($this->_OldFileUrls, $file['file']);
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ public function EventChanged($post_ID, $newpost, $oldpost)
60
+ {
61
+ if ($this->CheckWooCommerce($oldpost)) {
62
+ $changes = 0 + $this->EventCreation($oldpost, $newpost);
63
+ if (!$changes) {
64
+ // Change Categories
65
+ $changes = $this->CheckCategoriesChange($this->_OldCats, $this->GetProductCategories($newpost), $oldpost, $newpost);
66
+ }
67
+ if (!$changes) {
68
+ // Change Short description, Text, URL, Product Data, Date, Visibility, etc.
69
+ $changes = 0
70
+ + $this->CheckShortDescriptionChange($oldpost, $newpost)
71
+ + $this->CheckTextChange($oldpost, $newpost)
72
+ + $this->CheckProductDataChange($this->_OldData, $newpost)
73
+ + $this->CheckDateChange($oldpost, $newpost)
74
+ + $this->CheckVisibilityChange($oldpost)
75
+ + $this->CheckStatusChange($oldpost, $newpost)
76
+ + $this->CheckPriceChange($oldpost)
77
+ + $this->CheckSKUChange($oldpost)
78
+ + $this->CheckStockStatusChange($oldpost)
79
+ + $this->CheckStockQuantityChange($oldpost)
80
+ + $this->CheckTypeChange($oldpost, $newpost)
81
+ + $this->CheckWeightChange($oldpost)
82
+ + $this->CheckDimensionsChange($oldpost)
83
+ + $this->CheckDownloadableFileChange($oldpost)
84
+ ;
85
+ }
86
+ if (!$changes) {
87
+ // Change Permalink
88
+ $changes = $this->CheckPermalinkChange($this->_OldLink, get_post_permalink($post_ID, false, true), $newpost);
89
+ }
90
+ if (!$changes) {
91
+ // if no one of the above changes happen
92
+ $this->CheckModifyChange($oldpost, $newpost);
93
+ }
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Trigger events 9000, 9001
99
+ */
100
+ private function EventCreation($old_post, $new_post)
101
+ {
102
+ $original = isset($_POST['original_post_status']) ? $_POST['original_post_status'] : '';
103
+ if ($original == 'draft' && $new_post->post_status == 'draft') {
104
+ return 0;
105
+ }
106
+ if ($old_post->post_status == 'draft' || $original == 'auto-draft') {
107
+ if ($old_post->post_type == 'product') {
108
+ $editorLink = $this->GetEditorLink($new_post);
109
+ if ($new_post->post_status == 'draft') {
110
+ $this->plugin->alerts->Trigger(9000, array(
111
+ 'ProductTitle' => $new_post->post_title,
112
+ $editorLink['name'] => $editorLink['value']
113
+ ));
114
+ return 1;
115
+ } else if ($new_post->post_status == 'publish') {
116
+ $this->plugin->alerts->Trigger(9001, array(
117
+ 'ProductTitle' => $new_post->post_title,
118
+ 'ProductUrl' => get_post_permalink($new_post->ID),
119
+ $editorLink['name'] => $editorLink['value']
120
+ ));
121
+ return 1;
122
+ }
123
+ }
124
+ }
125
+ return 0;
126
+ }
127
+
128
+ /**
129
+ * Trigger events 9002
130
+ */
131
+ public function EventCategoryCreation($term_id = null)
132
+ {
133
+ $term = get_term($term_id);
134
+ if (!empty($term)) {
135
+ $this->plugin->alerts->Trigger(9002, array(
136
+ 'CategoryName' => $term->name,
137
+ 'Slug' => $term->slug
138
+ ));
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Not implemented
144
+ */
145
+ public function EventCategoryChanged($term_id = null)
146
+ {
147
+ $old_term = get_term($term_id);
148
+ if (isset($_POST['taxonomy'])) {
149
+ // new $term in $_POST
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Trigger events 9003
155
+ */
156
+ protected function CheckCategoriesChange($oldCats, $newCats, $oldpost, $newpost)
157
+ {
158
+ if ($newpost->post_status == 'trash' || $oldpost->post_status == 'trash') {
159
+ return 0;
160
+ }
161
+ $oldCats = is_array($oldCats) ? implode(', ', $oldCats) : $oldCats;
162
+ $newCats = is_array($newCats) ? implode(', ', $newCats) : $newCats;
163
+ if ($oldCats != $newCats) {
164
+ $editorLink = $this->GetEditorLink($newpost);
165
+ $this->plugin->alerts->Trigger(9003, array(
166
+ 'ProductTitle' => $newpost->post_title,
167
+ 'OldCategories' => $oldCats ? $oldCats : 'no categories',
168
+ 'NewCategories' => $newCats ? $newCats : 'no categories',
169
+ $editorLink['name'] => $editorLink['value']
170
+ ));
171
+ return 1;
172
+ }
173
+ return 0;
174
+ }
175
+
176
+ /**
177
+ * Trigger events 9004
178
+ */
179
+ protected function CheckShortDescriptionChange($oldpost, $newpost)
180
+ {
181
+ if ($oldpost->post_status == 'auto-draft') {
182
+ return 0;
183
+ }
184
+ if ($oldpost->post_excerpt != $newpost->post_excerpt) {
185
+ $editorLink = $this->GetEditorLink($oldpost);
186
+ $this->plugin->alerts->Trigger(9004, array(
187
+ 'ProductTitle' => $oldpost->post_title,
188
+ $editorLink['name'] => $editorLink['value']
189
+ ));
190
+ return 1;
191
+ }
192
+ return 0;
193
+ }
194
+
195
+ /**
196
+ * Trigger events 9005
197
+ */
198
+ protected function CheckTextChange($oldpost, $newpost)
199
+ {
200
+ if ($oldpost->post_status == 'auto-draft') {
201
+ return 0;
202
+ }
203
+ if ($oldpost->post_content != $newpost->post_content) {
204
+ $editorLink = $this->GetEditorLink($oldpost);
205
+ $this->plugin->alerts->Trigger(9005, array(
206
+ 'ProductTitle' => $oldpost->post_title,
207
+ $editorLink['name'] => $editorLink['value']
208
+ ));
209
+ return 1;
210
+ }
211
+ return 0;
212
+ }
213
+
214
+ /**
215
+ * Trigger events 9006
216
+ */
217
+ protected function CheckPermalinkChange($oldLink, $newLink, $post)
218
+ {
219
+ if (($oldLink && $newLink) && ($oldLink != $newLink)) {
220
+ $editorLink = $this->GetEditorLink($post);
221
+ $this->plugin->alerts->Trigger(9006, array(
222
+ 'ProductTitle' => $post->post_title,
223
+ 'OldUrl' => $oldLink,
224
+ 'NewUrl' => $newLink,
225
+ $editorLink['name'] => $editorLink['value']
226
+ ));
227
+ return 1;
228
+ }
229
+ return 0;
230
+ }
231
+
232
+ /**
233
+ * Trigger events 9007
234
+ */
235
+ protected function CheckProductDataChange($oldData, $post)
236
+ {
237
+ if (isset($_POST['product-type'])) {
238
+ $oldData = is_array($oldData) ? implode(', ', $oldData) : $oldData;
239
+ $newData = $_POST['product-type'];
240
+ if ($oldData != $newData) {
241
+ $editorLink = $this->GetEditorLink($post);
242
+ $this->plugin->alerts->Trigger(9007, array(
243
+ 'ProductTitle' => $post->post_title,
244
+ $editorLink['name'] => $editorLink['value']
245
+ ));
246
+ return 1;
247
+ }
248
+ }
249
+ return 0;
250
+ }
251
+
252
+ /**
253
+ * Trigger events 9008
254
+ */
255
+ protected function CheckDateChange($oldpost, $newpost)
256
+ {
257
+ if ($oldpost->post_status == 'draft' || $oldpost->post_status == 'auto-draft') {
258
+ return 0;
259
+ }
260
+ $from = strtotime($oldpost->post_date);
261
+ $to = strtotime($newpost->post_date);
262
+ if ($from != $to) {
263
+ $editorLink = $this->GetEditorLink($oldpost);
264
+ $this->plugin->alerts->Trigger(9008, array(
265
+ 'ProductTitle' => $oldpost->post_title,
266
+ 'OldDate' => $oldpost->post_date,
267
+ 'NewDate' => $newpost->post_date,
268
+ $editorLink['name'] => $editorLink['value']
269
+ ));
270
+ return 1;
271
+ }
272
+ return 0;
273
+ }
274
+
275
+ /**
276
+ * Trigger events 9009
277
+ */
278
+ protected function CheckVisibilityChange($oldpost)
279
+ {
280
+ $oldVisibility = isset($_POST['hidden_post_visibility']) ? $_POST['hidden_post_visibility'] : null;
281
+ $newVisibility = isset($_POST['visibility']) ? $_POST['visibility'] : null;
282
+
283
+ if ($oldVisibility == 'password') {
284
+ $oldVisibility = __('Password Protected', 'wp-security-audit-log');
285
+ } else {
286
+ $oldVisibility = ucfirst($oldVisibility);
287
+ }
288
+
289
+ if ($newVisibility == 'password') {
290
+ $newVisibility = __('Password Protected', 'wp-security-audit-log');
291
+ } else {
292
+ $newVisibility = ucfirst($newVisibility);
293
+ }
294
+
295
+ if (($oldVisibility && $newVisibility) && ($oldVisibility != $newVisibility)) {
296
+ $editorLink = $this->GetEditorLink($oldpost);
297
+ $this->plugin->alerts->Trigger(9009, array(
298
+ 'ProductTitle' => $oldpost->post_title,
299
+ 'OldVisibility' => $oldVisibility,
300
+ 'NewVisibility' => $newVisibility,
301
+ $editorLink['name'] => $editorLink['value']
302
+ ));
303
+ return 1;
304
+ }
305
+ return 0;
306
+ }
307
+
308
+ /**
309
+ * Trigger events 9010, 9011
310
+ */
311
+ protected function CheckModifyChange($oldpost, $newpost)
312
+ {
313
+ if ($newpost->post_status == 'trash') {
314
+ return 0;
315
+ }
316
+ $editorLink = $this->GetEditorLink($oldpost);
317
+ if ($oldpost->post_status == 'publish') {
318
+ $this->plugin->alerts->Trigger(9010, array(
319
+ 'ProductTitle' => $oldpost->post_title,
320
+ 'ProductUrl' => get_post_permalink($oldpost->ID),
321
+ $editorLink['name'] => $editorLink['value']
322
+ ));
323
+ } else if ($oldpost->post_status == 'draft') {
324
+ $this->plugin->alerts->Trigger(9011, array(
325
+ 'ProductTitle' => $oldpost->post_title,
326
+ $editorLink['name'] => $editorLink['value']
327
+ ));
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Moved to Trash 9012
333
+ */
334
+ public function EventTrashed($post_id)
335
+ {
336
+ $post = get_post($post_id);
337
+ if ($this->CheckWooCommerce($post)) {
338
+ $this->plugin->alerts->Trigger(9012, array(
339
+ 'ProductTitle' => $post->post_title,
340
+ 'ProductUrl' => get_post_permalink($post->ID)
341
+ ));
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Permanently deleted 9013
347
+ */
348
+ public function EventDeleted($post_id)
349
+ {
350
+ $post = get_post($post_id);
351
+ if ($this->CheckWooCommerce($post)) {
352
+ $this->plugin->alerts->Trigger(9013, array(
353
+ 'ProductTitle' => $post->post_title
354
+ ));
355
+ }
356
+ }
357
+
358
+ /**
359
+ * Restored from Trash 9014
360
+ */
361
+ public function EventUntrashed($post_id)
362
+ {
363
+ $post = get_post($post_id);
364
+ if ($this->CheckWooCommerce($post)) {
365
+ $editorLink = $this->GetEditorLink($post);
366
+ $this->plugin->alerts->Trigger(9014, array(
367
+ 'ProductTitle' => $post->post_title,
368
+ $editorLink['name'] => $editorLink['value']
369
+ ));
370
+ }
371
+ }
372
+
373
+ /**
374
+ * Trigger events 9015
375
+ */
376
+ protected function CheckStatusChange($oldpost, $newpost)
377
+ {
378
+ if ($oldpost->post_status == 'draft' || $oldpost->post_status == 'auto-draft') {
379
+ return 0;
380
+ }
381
+ if ($oldpost->post_status != $newpost->post_status) {
382
+ if ($oldpost->post_status != 'trash' && $newpost->post_status != 'trash') {
383
+ $editorLink = $this->GetEditorLink($oldpost);
384
+ $this->plugin->alerts->Trigger(9015, array(
385
+ 'ProductTitle' => $oldpost->post_title,
386
+ 'OldStatus' => $oldpost->post_status,
387
+ 'NewStatus' => $newpost->post_status,
388
+ $editorLink['name'] => $editorLink['value']
389
+ ));
390
+ return 1;
391
+ }
392
+ }
393
+ return 0;
394
+ }
395
+
396
+ /**
397
+ * Trigger events 9016
398
+ */
399
+ protected function CheckPriceChange($oldpost)
400
+ {
401
+ $result = 0;
402
+ $oldPrice = get_post_meta($oldpost->ID, '_regular_price', true);
403
+ $oldSalePrice = get_post_meta($oldpost->ID, '_sale_price', true);
404
+ $newPrice = isset($_POST['_regular_price']) ? $_POST['_regular_price'] : null;
405
+ $newSalePrice = isset($_POST['_sale_price']) ? $_POST['_sale_price'] : null;
406
+
407
+ if (($newPrice) && ($oldPrice != $newPrice)) {
408
+ $result = $this->EventPrice($oldpost, 'Regular price', $oldPrice, $newPrice);
409
+ }
410
+ if (($newSalePrice) && ($oldSalePrice != $newSalePrice)) {
411
+ $result = $this->EventPrice($oldpost, 'Sale price', $oldSalePrice, $newSalePrice);
412
+ }
413
+ return $result;
414
+ }
415
+
416
+ /**
417
+ * Group the Price changes in one function
418
+ */
419
+ private function EventPrice($oldpost, $type, $oldPrice, $newPrice)
420
+ {
421
+ $currency = $this->GetCurrencySymbol($this->GetConfig('currency'));
422
+ $editorLink = $this->GetEditorLink($oldpost);
423
+ $this->plugin->alerts->Trigger(9016, array(
424
+ 'ProductTitle' => $oldpost->post_title,
425
+ 'PriceType' => $type,
426
+ 'OldPrice' => (!empty($oldPrice) ? $currency.$oldPrice : 0),
427
+ 'NewPrice' => $currency.$newPrice,
428
+ $editorLink['name'] => $editorLink['value']
429
+ ));
430
+ return 1;
431
+ }
432
+
433
+ /**
434
+ * Trigger events 9017
435
+ */
436
+ protected function CheckSKUChange($oldpost)
437
+ {
438
+ $oldSku = get_post_meta($oldpost->ID, '_sku', true);
439
+ $newSku = isset($_POST['_sku']) ? $_POST['_sku'] : null;
440
+
441
+ if (($newSku) && ($oldSku != $newSku)) {
442
+ $editorLink = $this->GetEditorLink($oldpost);
443
+ $this->plugin->alerts->Trigger(9017, array(
444
+ 'ProductTitle' => $oldpost->post_title,
445
+ 'OldSku' => (!empty($oldSku) ? $oldSku : 0),
446
+ 'NewSku' => $newSku,
447
+ $editorLink['name'] => $editorLink['value']
448
+ ));
449
+ return 1;
450
+ }
451
+ return 0;
452
+ }
453
+
454
+ /**
455
+ * Trigger events 9018
456
+ */
457
+ protected function CheckStockStatusChange($oldpost)
458
+ {
459
+ $oldStatus = $this->_OldStockStatus;
460
+ $newStatus = isset($_POST['_stock_status']) ? $_POST['_stock_status'] : null;
461
+
462
+ if (($oldStatus && $newStatus) && ($oldStatus != $newStatus)) {
463
+ $editorLink = $this->GetEditorLink($oldpost);
464
+ $this->plugin->alerts->Trigger(9018, array(
465
+ 'ProductTitle' => $oldpost->post_title,
466
+ 'OldStatus' => $this->GetStockStatusName($oldStatus),
467
+ 'NewStatus' => $this->GetStockStatusName($newStatus),
468
+ $editorLink['name'] => $editorLink['value']
469
+ ));
470
+ return 1;
471
+ }
472
+ return 0;
473
+ }
474
+
475
+ /**
476
+ * Trigger events 9019
477
+ */
478
+ protected function CheckStockQuantityChange($oldpost)
479
+ {
480
+ $oldValue = get_post_meta($oldpost->ID, '_stock', true);
481
+ $newValue = isset($_POST['_stock']) ? $_POST['_stock'] : null;
482
+
483
+ if (($newValue) && ($oldValue != $newValue)) {
484
+ $editorLink = $this->GetEditorLink($oldpost);
485
+ $this->plugin->alerts->Trigger(9019, array(
486
+ 'ProductTitle' => $oldpost->post_title,
487
+ 'OldValue' => (!empty($oldValue) ? $oldValue : 0),
488
+ 'NewValue' => $newValue,
489
+ $editorLink['name'] => $editorLink['value']
490
+ ));
491
+ return 1;
492
+ }
493
+ return 0;
494
+ }
495
+
496
+ /**
497
+ * Trigger events 9020
498
+ */
499
+ protected function CheckTypeChange($oldpost, $newpost)
500
+ {
501
+ $result = 0;
502
+ if ($oldpost->post_status != 'trash' && $newpost->post_status != 'trash') {
503
+ $oldVirtual = get_post_meta($oldpost->ID, '_virtual', true);
504
+ $newVirtual = isset($_POST['_virtual']) ? 'yes' : 'no';
505
+ $oldDownloadable = get_post_meta($oldpost->ID, '_downloadable', true);
506
+ $newDownloadable = isset($_POST['_downloadable']) ? 'yes' : 'no';
507
+
508
+ if (($oldVirtual && $newVirtual) && ($oldVirtual != $newVirtual)) {
509
+ $type = ($newVirtual == 'no') ? 'Non Virtual' : 'Virtual';
510
+ $result = $this->EventType($oldpost, $type);
511
+ }
512
+ if (($oldDownloadable && $newDownloadable) && ($oldDownloadable != $newDownloadable)) {
513
+ $type = ($newDownloadable == 'no') ? 'Non Downloadable' : 'Downloadable';
514
+ $result = $this->EventType($oldpost, $type);
515
+ }
516
+ }
517
+ return $result;
518
+ }
519
+
520
+ /**
521
+ * Group the Type changes in one function
522
+ */
523
+ private function EventType($oldpost, $type)
524
+ {
525
+ $editorLink = $this->GetEditorLink($oldpost);
526
+ $this->plugin->alerts->Trigger(9020, array(
527
+ 'ProductTitle' => $oldpost->post_title,
528
+ 'Type' => $type,
529
+ $editorLink['name'] => $editorLink['value']
530
+ ));
531
+ return 1;
532
+ }
533
+
534
+ /**
535
+ * Trigger events 9021
536
+ */
537
+ protected function CheckWeightChange($oldpost)
538
+ {
539
+ $oldWeight = get_post_meta($oldpost->ID, '_weight', true);
540
+ $newWeight = isset($_POST['_weight']) ? $_POST['_weight'] : null;
541
+
542
+ if (($newWeight) && ($oldWeight != $newWeight)) {
543
+ $editorLink = $this->GetEditorLink($oldpost);
544
+ $this->plugin->alerts->Trigger(9021, array(
545
+ 'ProductTitle' => $oldpost->post_title,
546
+ 'OldWeight' => (!empty($oldWeight) ? $oldWeight : 0),
547
+ 'NewWeight' => $newWeight,
548
+ $editorLink['name'] => $editorLink['value']
549
+ ));
550
+ return 1;
551
+ }
552
+ return 0;
553
+ }
554
+
555
+ /**
556
+ * Trigger events 9022
557
+ */
558
+ protected function CheckDimensionsChange($oldpost)
559
+ {
560
+ $result = 0;
561
+ $oldLength = get_post_meta($oldpost->ID, '_length', true);
562
+ $newLength = isset($_POST['_length']) ? $_POST['_length'] : null;
563
+ $oldWidth = get_post_meta($oldpost->ID, '_width', true);
564
+ $newWidth = isset($_POST['_width']) ? $_POST['_width'] : null;
565
+ $oldHeight = get_post_meta($oldpost->ID, '_height', true);
566
+ $newHeight = isset($_POST['_height']) ? $_POST['_height'] : null;
567
+
568
+ if (($newLength) && ($oldLength != $newLength)) {
569
+ $result = $this->EventDimension($oldpost, 'Length', $oldLength, $newLength);
570
+ }
571
+ if (($newWidth) && ($oldWidth != $newWidth)) {
572
+ $result = $this->EventDimension($oldpost, 'Width', $oldWidth, $newWidth);
573
+ }
574
+ if (($newHeight) && ($oldHeight != $newHeight)) {
575
+ $result = $this->EventDimension($oldpost, 'Height', $oldHeight, $newHeight);
576
+ }
577
+ return $result;
578
+ }
579
+
580
+ /**
581
+ * Group the Dimension changes in one function
582
+ */
583
+ private function EventDimension($oldpost, $type, $oldDimension, $newDimension)
584
+ {
585
+ $dimension_unit = $this->GetConfig('dimension_unit');
586
+ $editorLink = $this->GetEditorLink($oldpost);
587
+ $this->plugin->alerts->Trigger(9022, array(
588
+ 'ProductTitle' => $oldpost->post_title,
589
+ 'DimensionType' => $type,
590
+ 'OldDimension' => (!empty($oldDimension) ? $dimension_unit.' '.$oldDimension : 0),
591
+ 'NewDimension' => $dimension_unit.' '.$newDimension,
592
+ $editorLink['name'] => $editorLink['value']
593
+ ));
594
+ return 1;
595
+ }
596
+
597
+ /**
598
+ * Trigger events 9023, 9024, 9025, 9026
599
+ */
600
+ protected function CheckDownloadableFileChange($oldpost)
601
+ {
602
+ $result = 0;
603
+ $isUrlChanged = false;
604
+ $isNameChanged = false;
605
+ $newFileNames = !empty($_POST['_wc_file_names']) ? $_POST['_wc_file_names'] : array();
606
+ $newFileUrls = !empty($_POST['_wc_file_urls']) ? $_POST['_wc_file_urls'] : array();
607
+ $editorLink = $this->GetEditorLink($oldpost);
608
+
609
+ $addedUrls = array_diff($newFileUrls, $this->_OldFileUrls);
610
+ // Added files to the product
611
+ if (count($addedUrls) > 0) {
612
+ // if the file has only changed URL
613
+ if (count($newFileUrls) == count($this->_OldFileUrls)) {
614
+ $isUrlChanged = true;
615
+ } else {
616
+ foreach ($addedUrls as $key => $url) {
617
+ $this->plugin->alerts->Trigger(9023, array(
618
+ 'ProductTitle' => $oldpost->post_title,
619
+ 'FileName' => $newFileNames[$key],
620
+ 'FileUrl' => $url,
621
+ $editorLink['name'] => $editorLink['value']
622
+ ));
623
+ }
624
+ $result = 1;
625
+ }
626
+ }
627
+
628
+ $removedUrls = array_diff($this->_OldFileUrls, $newFileUrls);
629
+ // Removed files from the product
630
+ if (count($removedUrls) > 0) {
631
+ // if the file has only changed URL
632
+ if (count($newFileUrls) == count($this->_OldFileUrls)) {
633
+ $isUrlChanged = true;
634
+ } else {
635
+ foreach ($removedUrls as $key => $url) {
636
+ $this->plugin->alerts->Trigger(9024, array(
637
+ 'ProductTitle' => $oldpost->post_title,
638
+ 'FileName' => $this->_OldFileNames[$key],
639
+ 'FileUrl' => $url,
640
+ $editorLink['name'] => $editorLink['value']
641
+ ));
642
+ }
643
+ $result = 1;
644
+ }
645
+ }
646
+
647
+ $addedNames = array_diff($newFileNames, $this->_OldFileNames);
648
+ if (count($addedNames) > 0) {
649
+ // if the file has only changed Name
650
+ if (count($newFileNames) == count($this->_OldFileNames)) {
651
+ foreach ($addedNames as $key => $name) {
652
+ $this->plugin->alerts->Trigger(9025, array(
653
+ 'ProductTitle' => $oldpost->post_title,
654
+ 'OldName' => $this->_OldFileNames[$key],
655
+ 'NewName' => $name,
656
+ $editorLink['name'] => $editorLink['value']
657
+ ));
658
+ }
659
+ $result = 1;
660
+ }
661
+ }
662
+
663
+ if ($isUrlChanged) {
664
+ foreach ($addedUrls as $key => $url) {
665
+ $this->plugin->alerts->Trigger(9026, array(
666
+ 'ProductTitle' => $oldpost->post_title,
667
+ 'FileName' => $newFileNames[$key],
668
+ 'OldUrl' => $removedUrls[$key],
669
+ 'NewUrl' => $url,
670
+ $editorLink['name'] => $editorLink['value']
671
+ ));
672
+ }
673
+ $result = 1;
674
+ }
675
+ return $result;
676
+ }
677
+
678
+ /**
679
+ * Trigger events Settings: 9027, 9028, 9029, 9030, 9031, 9032, 9033
680
+ */
681
+ protected function CheckSettingsChange()
682
+ {
683
+ if (isset($_GET['page']) && $_GET['page'] == 'wc-settings') {
684
+ if (isset($_GET['tab']) && $_GET['tab'] == 'products') {
685
+ if (isset($_POST['woocommerce_weight_unit'])) {
686
+ $oldUnit = $this->GetConfig('weight_unit');
687
+ $newUnit = $_POST['woocommerce_weight_unit'];
688
+ if ($oldUnit != $newUnit) {
689
+ $this->plugin->alerts->Trigger(9027, array(
690
+ 'OldUnit' => $oldUnit,
691
+ 'NewUnit' => $newUnit
692
+ ));
693
+ }
694
+ }
695
+ if (isset($_POST['woocommerce_dimension_unit'])) {
696
+ $oldUnit = $this->GetConfig('dimension_unit');
697
+ $newUnit = $_POST['woocommerce_dimension_unit'];
698
+ if ($oldUnit != $newUnit) {
699
+ $this->plugin->alerts->Trigger(9028, array(
700
+ 'OldUnit' => $oldUnit,
701
+ 'NewUnit' => $newUnit
702
+ ));
703
+ }
704
+ }
705
+ } else if (isset($_GET['tab']) && $_GET['tab'] == 'checkout') {
706
+ if (!empty($_POST)) {
707
+ $oldEnableCoupons = $this->GetConfig('enable_coupons');
708
+ $newEnableCoupons = isset($_POST['woocommerce_enable_coupons']) ? 'yes' : 'no';
709
+ if ($oldEnableCoupons != $newEnableCoupons) {
710
+ $status = ($newEnableCoupons == 'yes') ? 'Enabled' : 'Disabled';
711
+ $this->plugin->alerts->Trigger(9032, array(
712
+ 'Status' => $status,
713
+ ));
714
+ }
715
+ $oldEnableGuestCheckout = $this->GetConfig('enable_guest_checkout');
716
+ $newEnableGuestCheckout = isset($_POST['woocommerce_enable_guest_checkout']) ? 'yes' : 'no';
717
+ if ($oldEnableGuestCheckout != $newEnableGuestCheckout) {
718
+ $status = ($newEnableGuestCheckout == 'yes') ? 'Enabled' : 'Disabled';
719
+ $this->plugin->alerts->Trigger(9033, array(
720
+ 'Status' => $status,
721
+ ));
722
+ }
723
+ }
724
+ } else {
725
+ if (isset($_POST['woocommerce_default_country'])) {
726
+ $oldLocation = $this->GetConfig('default_country');
727
+ $newLocation = $_POST['woocommerce_default_country'];
728
+ if ($oldLocation != $newLocation) {
729
+ $this->plugin->alerts->Trigger(9029, array(
730
+ 'OldLocation' => $oldLocation,
731
+ 'NewLocation' => $newLocation
732
+ ));
733
+ }
734
+ $oldCalcTaxes = $this->GetConfig('calc_taxes');
735
+ $newCalcTaxes = isset($_POST['woocommerce_calc_taxes']) ? 'yes' : 'no';
736
+ if ($oldCalcTaxes != $newCalcTaxes) {
737
+ $status = ($newCalcTaxes == 'yes') ? 'Enabled' : 'Disabled';
738
+ $this->plugin->alerts->Trigger(9030, array(
739
+ 'Status' => $status,
740
+ ));
741
+ }
742
+ }
743
+ if (isset($_POST['woocommerce_currency'])) {
744
+ $oldCurrency = $this->GetConfig('currency');
745
+ $newCurrency = $_POST['woocommerce_currency'];
746
+ if ($oldCurrency != $newCurrency) {
747
+ $this->plugin->alerts->Trigger(9031, array(
748
+ 'OldCurrency' => $oldCurrency,
749
+ 'NewCurrency' => $newCurrency
750
+ ));
751
+ }
752
+ }
753
+ }
754
+ }
755
+ }
756
+
757
+ private function GetStockStatusName($slug)
758
+ {
759
+ if ($slug == 'instock') {
760
+ return __('In stock', 'wp-security-audit-log');
761
+ } else if ($slug == 'outofstock') {
762
+ return __('Out of stock', 'wp-security-audit-log');
763
+ }
764
+ }
765
+
766
+ protected function GetProductCategories($post)
767
+ {
768
+ return wp_get_post_terms($post->ID, 'product_cat', array("fields" => "names"));
769
+ }
770
+
771
+ protected function GetProductData($post)
772
+ {
773
+ return wp_get_post_terms($post->ID, 'product_type', array("fields" => "names"));
774
+ }
775
+
776
+ /**
777
+ * Get the config setting
778
+ * @param string $option_name
779
+ */
780
+ private function GetConfig($option_name)
781
+ {
782
+ $fn = $this->IsMultisite() ? 'get_site_option' : 'get_option';
783
+ return $fn('woocommerce_' . $option_name);
784
+ }
785
+
786
+ private function CheckWooCommerce($post)
787
+ {
788
+ switch ($post->post_type) {
789
+ case 'product':
790
+ return true;
791
+ default:
792
+ return false;
793
+ }
794
+ }
795
+
796
+ private function GetEditorLink($post)
797
+ {
798
+ $name = 'EditorLinkProduct';
799
+ $value = get_edit_post_link($post->ID);
800
+ $aLink = array(
801
+ 'name' => $name,
802
+ 'value' => $value,
803
+ );
804
+ return $aLink;
805
+ }
806
+
807
+ /**
808
+ * Get Currency symbol.
809
+ * @param string $currency (default: '')
810
+ * @return string
811
+ */
812
+ private function GetCurrencySymbol($currency = '')
813
+ {
814
+ $symbols = array(
815
+ 'AED' => '&#x62f;.&#x625;','AFN' => '&#x60b;','ALL' => 'L','AMD' => 'AMD','ANG' => '&fnof;','AOA' => 'Kz','ARS' => '&#36;',
816
+ 'AUD' => '&#36;','AWG' => '&fnof;','AZN' => 'AZN','BAM' => 'KM','BBD' => '&#36;','BDT' => '&#2547;&nbsp;','BGN' => '&#1083;&#1074;.',
817
+ 'BHD' => '.&#x62f;.&#x628;','BIF' => 'Fr','BMD' => '&#36;','BND' => '&#36;','BOB' => 'Bs.','BRL' => '&#82;&#36;','BSD' => '&#36;',
818
+ 'BTC' => '&#3647;','BTN' => 'Nu.','BWP' => 'P','BYR' => 'Br','BZD' => '&#36;','CAD' => '&#36;','CDF' => 'Fr','CHF' => '&#67;&#72;&#70;',
819
+ 'CLP' => '&#36;','CNY' => '&yen;','COP' => '&#36;','CRC' => '&#x20a1;','CUC' => '&#36;','CUP' => '&#36;','CVE' => '&#36;',
820
+ 'CZK' => '&#75;&#269;','DJF' => 'Fr','DKK' => 'DKK','DOP' => 'RD&#36;','DZD' => '&#x62f;.&#x62c;','EGP' => 'EGP','ERN' => 'Nfk',
821
+ 'ETB' => 'Br','EUR' => '&euro;','FJD' => '&#36;','FKP' => '&pound;','GBP' => '&pound;','GEL' => '&#x10da;','GGP' => '&pound;',
822
+ 'GHS' => '&#x20b5;','GIP' => '&pound;','GMD' => 'D','GNF' => 'Fr','GTQ' => 'Q','GYD' => '&#36;','HKD' => '&#36;','HNL' => 'L',
823
+ 'HRK' => 'Kn','HTG' => 'G','HUF' => '&#70;&#116;','IDR' => 'Rp','ILS' => '&#8362;','IMP' => '&pound;','INR' => '&#8377;',
824
+ 'IQD' => '&#x639;.&#x62f;','IRR' => '&#xfdfc;','ISK' => 'kr.','JEP' => '&pound;','JMD' => '&#36;','JOD' => '&#x62f;.&#x627;',
825
+ 'JPY' => '&yen;','KES' => 'KSh','KGS' => '&#x441;&#x43e;&#x43c;','KHR' => '&#x17db;','KMF' => 'Fr','KPW' => '&#x20a9;','KRW' => '&#8361;',
826
+ 'KWD' => '&#x62f;.&#x643;','KYD' => '&#36;','KZT' => 'KZT','LAK' => '&#8365;','LBP' => '&#x644;.&#x644;','LKR' => '&#xdbb;&#xdd4;',
827
+ 'LRD' => '&#36;','LSL' => 'L','LYD' => '&#x644;.&#x62f;','MAD' => '&#x62f;. &#x645;.','MAD' => '&#x62f;.&#x645;.','MDL' => 'L','MGA' => 'Ar',
828
+ 'MKD' => '&#x434;&#x435;&#x43d;','MMK' => 'Ks','MNT' => '&#x20ae;','MOP' => 'P','MRO' => 'UM','MUR' => '&#x20a8;','MVR' => '.&#x783;',
829
+ 'MWK' => 'MK','MXN' => '&#36;','MYR' => '&#82;&#77;','MZN' => 'MT','NAD' => '&#36;','NGN' => '&#8358;','NIO' => 'C&#36;',
830
+ 'NOK' => '&#107;&#114;','NPR' => '&#8360;','NZD' => '&#36;','OMR' => '&#x631;.&#x639;.','PAB' => 'B/.','PEN' => 'S/.',
831
+ 'PGK' => 'K','PHP' => '&#8369;','PKR' => '&#8360;','PLN' => '&#122;&#322;','PRB' => '&#x440;.','PYG' => '&#8370;','QAR' => '&#x631;.&#x642;',
832
+ 'RMB' => '&yen;','RON' => 'lei','RSD' => '&#x434;&#x438;&#x43d;.','RUB' => '&#8381;','RWF' => 'Fr','SAR' => '&#x631;.&#x633;',
833
+ 'SBD' => '&#36;','SCR' => '&#x20a8;','SDG' => '&#x62c;.&#x633;.','SEK' => '&#107;&#114;','SGD' => '&#36;','SHP' => '&pound;','SLL' => 'Le',
834
+ 'SOS' => 'Sh','SRD' => '&#36;','SSP' => '&pound;','STD' => 'Db','SYP' => '&#x644;.&#x633;','SZL' => 'L','THB' => '&#3647;',
835
+ 'TJS' => '&#x405;&#x41c;','TMT' => 'm','TND' => '&#x62f;.&#x62a;','TOP' => 'T&#36;','TRY' => '&#8378;','TTD' => '&#36;',
836
+ 'TWD' => '&#78;&#84;&#36;','TZS' => 'Sh','UAH' => '&#8372;','UGX' => 'UGX','USD' => '&#36;','UYU' => '&#36;','UZS' => 'UZS',
837
+ 'VEF' => 'Bs F','VND' => '&#8363;','VUV' => 'Vt','WST' => 'T','XAF' => 'Fr','XCD' => '&#36;','XOF' => 'Fr','XPF' => 'Fr',
838
+ 'YER' => '&#xfdfc;','ZAR' => '&#82;','ZMW' => 'ZK',
839
+ );
840
+ $currency_symbol = isset($symbols[$currency]) ? $symbols[ $currency ] : '';
841
+
842
+ return $currency_symbol;
843
+ }
844
+ }
classes/Views/AuditLog.php CHANGED
@@ -109,7 +109,8 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
109
  ),
110
  )); ?>);
111
  });
112
- </script><?php
 
113
  }
114
 
115
  public function AjaxInspector() {
@@ -209,6 +210,7 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
209
 
210
  public function Header() {
211
  add_thickbox();
 
212
  wp_enqueue_style(
213
  'auditlog',
214
  $this->_plugin->GetBaseUrl() . '/css/auditlog.css',
@@ -219,6 +221,7 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
219
 
220
  public function Footer() {
221
  wp_enqueue_script('jquery');
 
222
  wp_enqueue_script('suggest');
223
  wp_enqueue_script(
224
  'auditlog',
109
  ),
110
  )); ?>);
111
  });
112
+ </script>
113
+ <?php
114
  }
115
 
116
  public function AjaxInspector() {
210
 
211
  public function Header() {
212
  add_thickbox();
213
+ wp_enqueue_style('darktooltip', $this->_plugin->GetBaseUrl() . '/css/darktooltip.css', array(), '');
214
  wp_enqueue_style(
215
  'auditlog',
216
  $this->_plugin->GetBaseUrl() . '/css/auditlog.css',
221
 
222
  public function Footer() {
223
  wp_enqueue_script('jquery');
224
+ wp_enqueue_script('darktooltip', $this->_plugin->GetBaseUrl() . '/js/jquery.darktooltip.js', array('jquery'), '');
225
  wp_enqueue_script('suggest');
226
  wp_enqueue_script(
227
  'auditlog',
classes/Views/ToggleAlerts.php CHANGED
@@ -101,12 +101,12 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
101
  $purge_log = $this->_plugin->GetGlobalOption('purge-404-log');
102
  ?><tr>
103
  <td></td>
104
- <td><input name="log_404" type="checkbox" value="1" <?php if ($log_404 == 'on') echo 'checked="checked"'; ?>></td>
105
  <td colspan="2"><?php _e('Capture 404 requests to file (the log file are created in the /wp-content/uploads/wp-security-audit-log/404s/ directory)', 'wp-security-audit-log'); ?></td>
106
  </tr>
107
  <tr>
108
  <td></td>
109
- <td><input name="purge_log" type="checkbox" value="1" <?php if ($purge_log == 'on') echo 'checked="checked"'; ?>></td>
110
  <td colspan="2"><?php _e('Purge log files older than one month', 'wp-security-audit-log'); ?></td>
111
  </tr><?php
112
  }
@@ -159,6 +159,15 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
159
  }else{
160
  jQuery('#wsal-tabs>a:first').click();
161
  }
 
 
 
 
 
 
 
 
 
162
  });
163
  </script><?php
164
  }
101
  $purge_log = $this->_plugin->GetGlobalOption('purge-404-log');
102
  ?><tr>
103
  <td></td>
104
+ <td><input name="log_404" type="checkbox" class="check_log" value="1" <?php if ($log_404 == 'on') echo 'checked="checked"'; ?>></td>
105
  <td colspan="2"><?php _e('Capture 404 requests to file (the log file are created in the /wp-content/uploads/wp-security-audit-log/404s/ directory)', 'wp-security-audit-log'); ?></td>
106
  </tr>
107
  <tr>
108
  <td></td>
109
+ <td><input name="purge_log" type="checkbox" class="check_log" value="1" <?php if ($purge_log == 'on') echo 'checked="checked"'; ?>></td>
110
  <td colspan="2"><?php _e('Purge log files older than one month', 'wp-security-audit-log'); ?></td>
111
  </tr><?php
112
  }
159
  }else{
160
  jQuery('#wsal-tabs>a:first').click();
161
  }
162
+ // Specific for alert 6007
163
+ jQuery("input[value=6007]").on("change", function(){
164
+ var check = jQuery("input[value=6007]").is(":checked");
165
+ if(check) {
166
+ jQuery(".check_log").attr ( "checked" ,"checked" );
167
+ } else {
168
+ jQuery(".check_log").removeAttr('checked');
169
+ }
170
+ });
171
  });
172
  </script><?php
173
  }
css/auditlog.css CHANGED
@@ -19,12 +19,20 @@
19
  }
20
 
21
  .column-read,
22
- .column-type,
23
- .column-code,
24
  .column-more,
 
25
  .column-data {
26
  width: 70px;
27
  }
 
 
 
 
 
 
 
 
 
28
 
29
  .column-crtd {
30
  width: 125px;
@@ -120,15 +128,17 @@ td.column-user {
120
  .log-type-64:after,
121
  .log-type-256:after,
122
  .log-type-4096:after,
123
- .log-type-E_CRITICAL:after
124
- { background: #E00; content: "!"; }
 
125
 
126
  /* warnings */
127
  .log-type-2:after,
128
  .log-type-32:after,
129
  .log-type-128:after,
130
- .log-type-512:after
131
- { background: #EB0; content: "!"; }
 
132
 
133
  /* notices/strict/deprecation */
134
  .log-type-8:after,
@@ -136,8 +146,13 @@ td.column-user {
136
  .log-type-2048:after,
137
  .log-type-8192:after,
138
  .log-type-16384:after,
139
- .log-type-E_DEBUG:after
140
- { background: #09E; content: "i"; }
 
 
 
 
 
141
 
142
  /* search box */
143
  .wsal-ssas-dd {
@@ -182,3 +197,42 @@ td.column-user {
182
  text-decoration: none;
183
  float: right;
184
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  }
20
 
21
  .column-read,
 
 
22
  .column-more,
23
+ .column-type,
24
  .column-data {
25
  width: 70px;
26
  }
27
+ .column-code {
28
+ width: 50px;
29
+ }
30
+ td.code.column-code a{
31
+ display: block;
32
+ }
33
+ .column-disable {
34
+ width: 50px;
35
+ }
36
 
37
  .column-crtd {
38
  width: 125px;
128
  .log-type-64:after,
129
  .log-type-256:after,
130
  .log-type-4096:after,
131
+ .log-type-E_CRITICAL:after {
132
+ background: #c9302c; content: "!";
133
+ }
134
 
135
  /* warnings */
136
  .log-type-2:after,
137
  .log-type-32:after,
138
  .log-type-128:after,
139
+ .log-type-512:after {
140
+ background: #ec971f; content: "!";
141
+ }
142
 
143
  /* notices/strict/deprecation */
144
  .log-type-8:after,
146
  .log-type-2048:after,
147
  .log-type-8192:after,
148
  .log-type-16384:after,
149
+ .log-type-E_DEBUG:after {
150
+ background: #ec0; content: "i";
151
+ }
152
+
153
+ .log-disable .disable {
154
+ margin-left: 12px;
155
+ }
156
 
157
  /* search box */
158
  .wsal-ssas-dd {
197
  text-decoration: none;
198
  float: right;
199
  }
200
+
201
+ .dashicons-dismiss:hover {
202
+ color:#c00
203
+ }
204
+ .dark-tooltip.small{
205
+ margin-left: 10px;
206
+ font-size:13px;
207
+ padding:5px 10px;
208
+ max-width:150px;
209
+ -webkit-border-radius: 3px;
210
+ -moz-border-radius: 3px;
211
+ border-radius: 3px;
212
+ }
213
+ .dark-tooltip.medium{
214
+ margin-left: -15px;
215
+ font-size:13px;
216
+ padding:5px 10px;
217
+ max-width:150px;
218
+ -webkit-border-radius: 3px;
219
+ -moz-border-radius: 3px;
220
+ border-radius: 3px;
221
+ }
222
+ .dark-tooltip.west.medium .tip{ border-width: 5px 7px 5px 0; margin-left:-7px; margin-top:-5px;}
223
+ .dark-tooltip ul.confirm{ list-style-type:none;margin-top:5px;display:inline-block;margin:0 auto;}
224
+ .dark-tooltip ul.confirm li{
225
+ padding:5px 10px;
226
+ float:left;
227
+ margin:5px 5px 0 0;
228
+ min-width:20px;
229
+ -webkit-border-radius:3px;
230
+ -moz-border-radius:3px;
231
+ -o-border-radius:3px;
232
+ border-radius:3px;
233
+ }
234
+ .dark-tooltip.dark ul.confirm li{ background-color:#0085ba;}
235
+ .dark-tooltip.dark ul.confirm li:hover{ background-color:#008ec2; cursor: pointer;}
236
+ .dark-tooltip.dark ul.confirm li:last-child {
237
+ display: none;
238
+ }
css/darktooltip.css ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .dark-tooltip{ display:none; position:absolute; z-index:99; text-decoration:none; font-weight:normal; height:auto; top:0; left:0;}
2
+
3
+ .dark-tooltip.small{ padding:4px; font-size:12px; max-width:150px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; }
4
+ .dark-tooltip.medium{ padding:10px; font-size:14px; max-width:200px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px;}
5
+ .dark-tooltip.large{ padding:16px; font-size:16px; max-width:250px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; }
6
+
7
+ /* Tips */
8
+ .dark-tooltip .tip{ transform: scale(1.01); -webkit-transform: scale(1.01); transform: scale(1.01); content: ""; position: absolute; width:0; height:0; border-style: solid; line-height: 0px; }
9
+
10
+ .dark-tooltip.south .tip{ left:50%; top:100%;}
11
+ .dark-tooltip.west .tip{ left:0; top:50%;}
12
+ .dark-tooltip.north .tip{ left:50%; top:0; }
13
+ .dark-tooltip.east .tip{ left:100%; top:50%;}
14
+
15
+ .dark-tooltip.south.small .tip{ border-width: 7px 5px 0 5px; margin-left:-5px;}
16
+ .dark-tooltip.south.medium .tip{ border-width: 8px 6px 0 6px; margin-left:-6px;}
17
+ .dark-tooltip.south.large .tip{ border-width: 14px 12px 0 12px; margin-left:-12px;}
18
+
19
+ .dark-tooltip.west.small .tip{ border-width: 5px 7px 5px 0; margin-left:-7px; margin-top:-5px;}
20
+ .dark-tooltip.west.medium .tip{ border-width: 6px 8px 6px 0; margin-left:-8px; margin-top:-6px;}
21
+ .dark-tooltip.west.large .tip{ border-width: 12px 14px 12px 0; margin-left:-14px; margin-top:-12px;}
22
+
23
+ .dark-tooltip.north.small .tip{ border-width: 0 5px 7px 5px; margin-left:-5px; margin-top:-7px;}
24
+ .dark-tooltip.north.medium .tip{ border-width: 0 6px 8px 6px; margin-left:-6px; margin-top:-8px;}
25
+ .dark-tooltip.north.large .tip{ border-width: 0 12px 14px 12px; margin-left:-12px; margin-top:-14px;}
26
+
27
+ .dark-tooltip.east.small .tip{ border-width: 5px 0 5px 7px; margin-top:-5px;}
28
+ .dark-tooltip.east.medium .tip{ border-width: 6px 0 6px 8px; margin-top:-6px;}
29
+ .dark-tooltip.east.large .tip{ border-width: 12px 0 12px 14px; margin-top:-12px;}
30
+
31
+ /* confirm */
32
+ .dark-tooltip ul.confirm{ list-style-type:none;margin-top:5px;display:inline-block;margin:0 auto; }
33
+ .dark-tooltip ul.confirm li{ padding:10px;float:left;margin:5px;min-width:25px;-webkit-border-radius:3px;-moz-border-radius:3px;-o-border-radius:3px;border-radius:3px;}
34
+
35
+ /* themes */
36
+ .dark-tooltip.dark{ background-color:#1B1E24; color:#fff; }
37
+ .dark-tooltip.light{ background-color:#ebedf3; color:#1B1E24; }
38
+
39
+ .dark-tooltip.dark.south .tip{ border-color: #1B1E24 transparent transparent transparent; _border-color: #1B1E24 #000000 #000000 #000000; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
40
+ .dark-tooltip.dark.west .tip{ border-color: transparent #1B1E24 transparent transparent; _border-color: #000000 #1B1E24 #000000 #000000; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
41
+ .dark-tooltip.dark.north .tip{ border-color: transparent transparent #1B1E24 transparent; _border-color: #000000 #000000 #1B1E24 #000000; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
42
+ .dark-tooltip.dark.east .tip{ border-color: transparent transparent transparent #1B1E24; _border-color: #000000 #000000 #000000 #1B1E24; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
43
+
44
+ .dark-tooltip.light.south .tip{ border-color: #ebedf3 transparent transparent transparent; _border-color: #ebedf3 #000000 #000000 #000000; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
45
+ .dark-tooltip.light.west .tip{ border-color: transparent #ebedf3 transparent transparent; _border-color: #000000 #ebedf3 #000000 #000000; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
46
+ .dark-tooltip.light.north .tip{ border-color: transparent transparent #ebedf3 transparent; _border-color: #000000 #000000 #ebedf3 #000000; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
47
+ .dark-tooltip.light.east .tip{ border-color: transparent transparent transparent #ebedf3; _border-color:#000000 #000000 #000000 #ebedf3 ; _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000'); }
48
+
49
+ .dark-tooltip.dark ul.confirm li{ background-color:#416E85;}
50
+ .dark-tooltip.dark ul.confirm li:hover{ background-color:#417E85;}
51
+
52
+ .dark-tooltip.light ul.confirm li{ background-color:#C1DBDB;}
53
+ .dark-tooltip.light ul.confirm li:hover{ background-color:#DCE8E8;}
54
+
55
+ /* Animations */
56
+ .animated{
57
+ -webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;
58
+ -webkit-animation-duration:.5s;-moz-animation-duration:.5s;-ms-animation-duration:.5s;-o-animation-duration:.5s;animation-duration:.5s;
59
+ }
60
+ @-webkit-keyframes flipInUp {
61
+ 0% { -webkit-transform: perspective(400px) rotateX(-90deg); opacity: 0;}
62
+ 40% { -webkit-transform: perspective(400px) rotateX(5deg);}
63
+ 70% { -webkit-transform: perspective(400px) rotateX(-5deg);}
64
+ 100% { -webkit-transform: perspective(400px) rotateX(0deg); opacity: 1;}
65
+ }
66
+ @-moz-keyframes flipInUp {
67
+ 0% {transform: perspective(400px) rotateX(-90deg);opacity: 0;}
68
+ 40% {transform: perspective(400px) rotateX(5deg);}
69
+ 70% {transform: perspective(400px) rotateX(-5deg);}
70
+ 100% {transform: perspective(400px) rotateX(0deg);opacity: 1;}
71
+ }
72
+ @-o-keyframes flipInUp {
73
+ 0% {-o-transform: perspective(400px) rotateX(-90deg);opacity: 0;}
74
+ 40% {-o-transform: perspective(400px) rotateX(5deg);}
75
+ 70% {-o-transform: perspective(400px) rotateX(-5deg);}
76
+ 100% {-o-transform: perspective(400px) rotateX(0deg);opacity: 1;}
77
+ }
78
+ @keyframes flipInUp {
79
+ 0% {transform: perspective(400px) rotateX(-90deg);opacity: 0;}
80
+ 40% {transform: perspective(400px) rotateX(5deg);}
81
+ 70% {transform: perspective(400px) rotateX(-5deg);}
82
+ 100% {transform: perspective(400px) rotateX(0deg);opacity: 1;}
83
+ }
84
+ @-webkit-keyframes flipInRight {
85
+ 0% { -webkit-transform: perspective(400px) rotateY(-90deg); opacity: 0;}
86
+ 40% { -webkit-transform: perspective(400px) rotateY(5deg);}
87
+ 70% { -webkit-transform: perspective(400px) rotateY(-5deg);}
88
+ 100% { -webkit-transform: perspective(400px) rotateY(0deg); opacity: 1;}
89
+ }
90
+ @-moz-keyframes flipInRight {
91
+ 0% {transform: perspective(400px) rotateY(-90deg);opacity: 0;}
92
+ 40% {transform: perspective(400px) rotateY(5deg);}
93
+ 70% {transform: perspective(400px) rotateY(-5deg);}
94
+ 100% {transform: perspective(400px) rotateY(0deg);opacity: 1;}
95
+ }
96
+ @-o-keyframes flipInRight {
97
+ 0% {-o-transform: perspective(400px) rotateY(-90deg);opacity: 0;}
98
+ 40% {-o-transform: perspective(400px) rotateY(5deg);}
99
+ 70% {-o-transform: perspective(400px) rotateY(-5deg);}
100
+ 100% {-o-transform: perspective(400px) rotateY(0deg);opacity: 1;}
101
+ }
102
+ @keyframes flipInRight {
103
+ 0% {transform: perspective(400px) rotateY(-90deg);opacity: 0;}
104
+ 40% {transform: perspective(400px) rotateY(5deg);}
105
+ 70% {transform: perspective(400px) rotateY(-5deg);}
106
+ 100% {transform: perspective(400px) rotateY(0deg);opacity: 1;}
107
+ }
108
+ .flipIn { -webkit-backface-visibility: visible !important; -moz-backface-visibility: visible !important; -o-backface-visibility: visible !important; backface-visibility: visible !important}
109
+ .flipIn.south, .flipIn.north { -webkit-animation-name: flipInUp; -moz-animation-name: flipInUp; -o-animation-name: flipInUp; animation-name: flipInUp; }
110
+ .flipIn.west, .flipIn.east { -webkit-animation-name: flipInRight; -moz-animation-name: flipInRight; -o-animation-name: flipInRight; animation-name: flipInRight; }
111
+
112
+ @-webkit-keyframes fadeIn { 0% {opacity: 0;} 100% {opacity: 1;}}
113
+ @-moz-keyframes fadeIn { 0% {opacity: 0;} 100% {opacity: 1;}}
114
+ @-o-keyframes fadeIn {0% {opacity: 0;}100% {opacity: 1;}}
115
+ @keyframes fadeIn {0% {opacity: 0;}100% {opacity: 1;}}
116
+
117
+ .fadeIn{-webkit-animation-name: fadeIn; -moz-animation-name: fadeIn; -o-animation-name: fadeIn; animation-name: fadeIn;}
118
+
119
+ /* Modal */
120
+ .darktooltip-modal-layer{
121
+ position: fixed;
122
+ top: 0;
123
+ left: 0;
124
+ width: 100%;
125
+ height: 100%;
126
+ background-image: url('./modal-bg.png');
127
+ opacity: .7;
128
+ display: none;
129
+ }
css/modal-bg.png ADDED
Binary file
defaults.php CHANGED
@@ -181,7 +181,10 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
181
  array(5027, E_CRITICAL, __('A plugin deleted a custom post', 'wp-security-audit-log'), __('A plugin automatically deleted the following custom post: %PostTitle%.', 'wp-security-audit-log')),
182
  array(5031, E_WARNING, __('User updated a theme', 'wp-security-audit-log'), __('Updated the theme "%Theme->Name%" installed in %Theme->get_template_directory%.', 'wp-security-audit-log')),
183
  array(2046, E_CRITICAL, __('User changed a file using the theme editor', 'wp-security-audit-log'), __('Modified %File% with the Theme Editor.', 'wp-security-audit-log')),
184
- array(2051, E_CRITICAL, __('User changed a file using the plugin editor', 'wp-security-audit-log'), __('Modified %File% with the Plugin Editor.', 'wp-security-audit-log'))
 
 
 
185
  ),
186
  __('System Activity', 'wp-security-audit-log') => array(
187
  array(0000, E_CRITICAL, __('Unknown Error', 'wp-security-audit-log'), __('An unexpected error has occurred .', 'wp-security-audit-log')),
@@ -273,6 +276,42 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
273
  array(2097, E_NOTICE, __('User restored a comment from the trash', 'wp-security-audit-log'), __('Restored the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% from the trash.', 'wp-security-audit-log')),
274
  array(2098, E_NOTICE, __('User permanently deleted a comment', 'wp-security-audit-log'), __('Permanently deleted the comment posted in response to the post %PostTitle% by %Author% on %Date%.', 'wp-security-audit-log')),
275
  array(2099, E_NOTICE, __('User posted a comment', 'wp-security-audit-log'), __('%CommentMsg% on %CommentLink%.', 'wp-security-audit-log'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  )
277
  ));
278
  // Load Custom alerts
181
  array(5027, E_CRITICAL, __('A plugin deleted a custom post', 'wp-security-audit-log'), __('A plugin automatically deleted the following custom post: %PostTitle%.', 'wp-security-audit-log')),
182
  array(5031, E_WARNING, __('User updated a theme', 'wp-security-audit-log'), __('Updated the theme "%Theme->Name%" installed in %Theme->get_template_directory%.', 'wp-security-audit-log')),
183
  array(2046, E_CRITICAL, __('User changed a file using the theme editor', 'wp-security-audit-log'), __('Modified %File% with the Theme Editor.', 'wp-security-audit-log')),
184
+ array(2051, E_CRITICAL, __('User changed a file using the plugin editor', 'wp-security-audit-log'), __('Modified %File% with the Plugin Editor.', 'wp-security-audit-log')),
185
+ array(2106, E_NOTICE, __('A plugin modified a post', 'wp-security-audit-log'), __('Plugin modified the post %PostTitle%. View the post: %EditorLinkPost%.', 'wp-security-audit-log')),
186
+ array(2107, E_NOTICE, __('A plugin modified a page', 'wp-security-audit-log'), __('Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%.', 'wp-security-audit-log')),
187
+ array(2108, E_NOTICE, __('A plugin modified a custom post', 'wp-security-audit-log'), __('Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%.', 'wp-security-audit-log'))
188
  ),
189
  __('System Activity', 'wp-security-audit-log') => array(
190
  array(0000, E_CRITICAL, __('Unknown Error', 'wp-security-audit-log'), __('An unexpected error has occurred .', 'wp-security-audit-log')),
276
  array(2097, E_NOTICE, __('User restored a comment from the trash', 'wp-security-audit-log'), __('Restored the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% from the trash.', 'wp-security-audit-log')),
277
  array(2098, E_NOTICE, __('User permanently deleted a comment', 'wp-security-audit-log'), __('Permanently deleted the comment posted in response to the post %PostTitle% by %Author% on %Date%.', 'wp-security-audit-log')),
278
  array(2099, E_NOTICE, __('User posted a comment', 'wp-security-audit-log'), __('%CommentMsg% on %CommentLink%.', 'wp-security-audit-log'))
279
+ ),
280
+ __('WooCommerce', 'wp-security-audit-log') => array(
281
+ array(9000, E_NOTICE, __('User created a new product', 'wp-security-audit-log'), __('Created a new product called %ProductTitle% and saved it as draft. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
282
+ array(9001, E_NOTICE, __('User published a product', 'wp-security-audit-log'), __('Published a product called %ProductTitle%. Product URL is %ProductUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
283
+ array(9002, E_NOTICE, __('User created a new product category', 'wp-security-audit-log'), __('Created a new product category called %CategoryName% in WooCommerce. Product category slug is %Slug%.', 'wp-security-audit-log')),
284
+ array(9003, E_NOTICE, __('User changed the category of a product', 'wp-security-audit-log'), __('Changed the category of the product %ProductTitle% from %OldCategories% to %NewCategories%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
285
+ array(9004, E_NOTICE, __('User modified the short description of a product', 'wp-security-audit-log'), __('Modified the short description of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
286
+ array(9005, E_NOTICE, __('User modified the text of a product', 'wp-security-audit-log'), __('Modified the text of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
287
+ array(9006, E_NOTICE, __('User changed the URL of a product', 'wp-security-audit-log'), __('Changed the URL of the product %ProductTitle% from %OldUrl% to %NewUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
288
+ array(9007, E_NOTICE, __('User changed the Product Data of a product', 'wp-security-audit-log'), __('Changed the Product Data of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
289
+ array(9008, E_NOTICE, __('User changed the date of a product', 'wp-security-audit-log'), __('Changed the date of the product %ProductTitle% from %OldDate% to %NewDate%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
290
+ array(9009, E_NOTICE, __('User changed the visibility of a product', 'wp-security-audit-log'), __('Changed the visibility of the product %ProductTitle% from %OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
291
+ array(9010, E_NOTICE, __('User modified the published product', 'wp-security-audit-log'), __('Modified the published product %ProductTitle%. Product URL is %ProductUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
292
+ array(9011, E_NOTICE, __('User modified the draft product', 'wp-security-audit-log'), __('Modified the draft product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
293
+ array(9012, E_WARNING, __('User moved a product to trash', 'wp-security-audit-log'), __('Moved the product %ProductTitle% to trash. Product URL was %ProductUrl%.', 'wp-security-audit-log')),
294
+ array(9013, E_WARNING, __('User permanently deleted a product', 'wp-security-audit-log'), __('Permanently deleted the product %ProductTitle%.', 'wp-security-audit-log')),
295
+ array(9014, E_CRITICAL, __('User restored a product from the trash', 'wp-security-audit-log'), __('Product %ProductTitle% has been restored from trash. View product: %EditorLinkProduct%.', 'wp-security-audit-log')),
296
+ array(9015, E_NOTICE, __('User changed status of a product', 'wp-security-audit-log'), __('Changed the status of the product %ProductTitle% from %OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
297
+ array(9016, E_WARNING, __('User changed type of a price', 'wp-security-audit-log'), __('Changed the %PriceType% of the product %ProductTitle% from %OldPrice% to %NewPrice%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
298
+ array(9017, E_WARNING, __('User changed the SKU of a product', 'wp-security-audit-log'), __('Changed the SKU of the product %ProductTitle% from %OldSku% to %NewSku%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
299
+ array(9018, E_CRITICAL, __('User changed the stock status of a product', 'wp-security-audit-log'), __('Changed the stock status of the product %ProductTitle% from %OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
300
+ array(9019, E_WARNING, __('User changed the stock quantity', 'wp-security-audit-log'), __('Changed the stock quantity from %OldValue% to %NewValue%. View the product: %EditorLinkProduct%', 'wp-security-audit-log')),
301
+ array(9020, E_WARNING, __('User set a product type', 'wp-security-audit-log'), __('Set the product %ProductTitle% as %Type%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
302
+ array(9021, E_WARNING, __('User changed the weight of a product', 'wp-security-audit-log'), __('Changed the weight of the product %ProductTitle% from %OldWeight% to %NewWeight%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
303
+ array(9022, E_WARNING, __('User changed the dimensions of a product', 'wp-security-audit-log'), __('Changed the %DimensionType% dimensions of the product %ProductTitle% from %OldDimension% to %NewDimension%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
304
+ array(9023, E_WARNING, __('User added the Downloadable File to a product', 'wp-security-audit-log'), __('Added the Downloadable File %FileName% with File URL %FileUrl% to the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
305
+ array(9024, E_WARNING, __('User Removed the Downloadable File from a product', 'wp-security-audit-log'), __('Removed the Downloadable File %FileName% with File URL %FileUrl% from the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
306
+ array(9025, E_WARNING, __('User changed the name of a Downloadable File in a product', 'wp-security-audit-log'), __('Changed the name of a Downloadable File from %OldName% to %NewName% in product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
307
+ array(9026, E_WARNING, __('User changed the URL of the Downloadable File in a product', 'wp-security-audit-log'), __('Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl% in product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log')),
308
+ array(9027, E_WARNING, __('User changed the Weight Unit', 'wp-security-audit-log'), __('Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce.', 'wp-security-audit-log')),
309
+ array(9028, E_WARNING, __('User changed the Dimensions Unit', 'wp-security-audit-log'), __('Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce.', 'wp-security-audit-log')),
310
+ array(9029, E_CRITICAL, __('User changed the Base Location', 'wp-security-audit-log'), __('Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce.', 'wp-security-audit-log')),
311
+ array(9030, E_CRITICAL, __('User Enabled/Disabled taxes', 'wp-security-audit-log'), __('%Status% taxes in the WooCommerce store.', 'wp-security-audit-log')),
312
+ array(9031, E_CRITICAL, __('User changed the currency', 'wp-security-audit-log'), __('Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce.', 'wp-security-audit-log')),
313
+ array(9032, E_CRITICAL, __('User Enabled/Disabled the use of coupons during checkout', 'wp-security-audit-log'), __('%Status% the use of coupons during checkout in WooCommerce.', 'wp-security-audit-log')),
314
+ array(9033, E_CRITICAL, __('User Enabled/Disabled guest checkout', 'wp-security-audit-log'), __('%Status% guest checkout in WooCommerce.', 'wp-security-audit-log'))
315
  )
316
  ));
317
  // Load Custom alerts
js/auditlog.js CHANGED
@@ -19,6 +19,23 @@ window['WsalAuditLogRefreshed'] = function(){
19
  jQuery('<input type="hidden" name="paged"/>').val(paged)
20
  ).submit();
21
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  };
23
 
24
  function WsalAuditLogInit(_WsalData){
@@ -163,3 +180,16 @@ function WsalDBChange(value){
163
  }
164
  });
165
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  jQuery('<input type="hidden" name="paged"/>').val(paged)
20
  ).submit();
21
  });
22
+ // tooltip Confirm disable alert
23
+ jQuery('.log-disable').darkTooltip({
24
+ animation: 'fadeIn',
25
+ size: 'small',
26
+ gravity: 'west',
27
+ confirm: true,
28
+ yes: 'Disable',
29
+ onYes: function(elem){
30
+ WsalDisableByCode(elem.attr('data-alert-id'))
31
+ }
32
+ });
33
+ // tooltip severity type
34
+ jQuery('.tooltip').darkTooltip({
35
+ animation: 'fadeIn',
36
+ gravity: 'west',
37
+ size: 'medium'
38
+ });
39
  };
40
 
41
  function WsalAuditLogInit(_WsalData){
180
  }
181
  });
182
  }
183
+
184
+ function WsalDisableByCode(code){
185
+ jQuery.ajax({
186
+ type: 'POST',
187
+ url: ajaxurl,
188
+ async: true,
189
+ data: { action: 'AjaxDisableByCode', code: code },
190
+ success: function(data) {
191
+ var notice = jQuery('<div class="updated" data-notice-name="disabled"></div>').html(data);
192
+ jQuery("h2:first").after(notice);
193
+ }
194
+ });
195
+ }
js/jquery.darktooltip.js ADDED
@@ -0,0 +1,265 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * DarkTooltip v0.4.0
3
+ * Simple customizable tooltip with confirm option and 3d effects
4
+ * (c)2014 Rubén Torres - rubentdlh@gmail.com
5
+ * Released under the MIT license
6
+ */
7
+
8
+ (function($) {
9
+
10
+ function DarkTooltip(element, options){
11
+ this.bearer = element;
12
+ this.options = options;
13
+ this.hideEvent;
14
+ this.mouseOverMode=(this.options.trigger == "hover" || this.options.trigger == "mouseover" || this.options.trigger == "onmouseover");
15
+ }
16
+
17
+ DarkTooltip.prototype = {
18
+
19
+ show: function(){
20
+ var dt = this;
21
+ if(this.options.modal){
22
+ this.modalLayer.css('display', 'block');
23
+ }
24
+ //Close all other tooltips
25
+ this.tooltip.css('display', 'block');
26
+ //Set event to prevent tooltip from closig when mouse is over the tooltip
27
+ if(dt.mouseOverMode){
28
+ this.tooltip.mouseover( function(){
29
+ clearTimeout(dt.hideEvent);
30
+ });
31
+ this.tooltip.mouseout( function(){
32
+ clearTimeout(dt.hideEvent);
33
+ dt.hide();
34
+ });
35
+ }
36
+ },
37
+
38
+ hide: function(){
39
+ var dt=this;
40
+ this.hideEvent = setTimeout( function(){
41
+ dt.tooltip.hide();
42
+ }, 100);
43
+ if(dt.options.modal){
44
+ dt.modalLayer.hide();
45
+ }
46
+ this.options.onClose();
47
+ },
48
+
49
+ toggle: function(){
50
+ if(this.tooltip.is(":visible")){
51
+ this.hide();
52
+ }else{
53
+ this.show();
54
+ }
55
+ },
56
+
57
+ addAnimation: function(){
58
+ switch(this.options.animation){
59
+ case 'none':
60
+ break;
61
+ case 'fadeIn':
62
+ this.tooltip.addClass('animated');
63
+ this.tooltip.addClass('fadeIn');
64
+ break;
65
+ case 'flipIn':
66
+ this.tooltip.addClass('animated');
67
+ this.tooltip.addClass('flipIn');
68
+ break;
69
+ }
70
+ },
71
+
72
+ setContent: function(){
73
+ $(this.bearer).css('cursor', 'pointer');
74
+ //Get tooltip content
75
+ if(this.options.content){
76
+ this.content = this.options.content;
77
+ }else if(this.bearer.attr("data-tooltip")){
78
+ this.content = this.bearer.attr("data-tooltip");
79
+ }else{
80
+ // console.log("No content for tooltip: " + this.bearer.selector);
81
+ return;
82
+ }
83
+ if(this.content.charAt(0) == '#'){
84
+ if (this.options.delete_content){
85
+ var content = $(this.content).html();
86
+ $(this.content).html('');
87
+ this.content = content;
88
+ delete content;
89
+ }
90
+ else{
91
+ $(this.content).hide();
92
+ this.content = $(this.content).html();
93
+ }
94
+ this.contentType='html';
95
+ }else{
96
+ this.contentType='text';
97
+ }
98
+ tooltipId = "";
99
+ if(this.bearer.attr("id") != ""){
100
+ tooltipId = "id='darktooltip-" + this.bearer.attr("id") + "'";
101
+ }
102
+ //Create modal layer
103
+ this.modalLayer = $("<ins class='darktooltip-modal-layer'></ins>");
104
+ //Create tooltip container
105
+ this.tooltip = $("<ins " + tooltipId + " class = 'dark-tooltip " + this.options.theme + " " + this.options.size + " "
106
+ + this.options.gravity + "'><div>" + this.content + "</div><div class = 'tip'></div></ins>");
107
+ this.tip = this.tooltip.find(".tip");
108
+
109
+ $("body").append(this.modalLayer);
110
+ $("body").append(this.tooltip);
111
+
112
+ //Adjust size for html tooltip
113
+ if(this.contentType == 'html'){
114
+ this.tooltip.css('max-width','none');
115
+ }
116
+ this.tooltip.css('opacity', this.options.opacity);
117
+ this.addAnimation();
118
+ if(this.options.confirm){
119
+ this.addConfirm();
120
+ }
121
+ },
122
+
123
+ setPositions: function(){
124
+ var leftPos = this.bearer.offset().left;
125
+ var topPos = this.bearer.offset().top;
126
+
127
+ switch(this.options.gravity){
128
+ case 'south':
129
+ leftPos += this.bearer.outerWidth()/2 - this.tooltip.outerWidth()/2;
130
+ topPos += -this.tooltip.outerHeight() - this.tip.outerHeight()/2;
131
+ break;
132
+ case 'west':
133
+ leftPos += this.bearer.outerWidth() + this.tip.outerWidth()/2;
134
+ topPos += this.bearer.outerHeight()/2 - (this.tooltip.outerHeight()/2);
135
+ break;
136
+ case 'north':
137
+ leftPos += this.bearer.outerWidth()/2 - (this.tooltip.outerWidth()/2);
138
+ topPos += this.bearer.outerHeight() + this.tip.outerHeight()/2;
139
+ break;
140
+ case 'east':
141
+ leftPos += -this.tooltip.outerWidth() - this.tip.outerWidth()/2;
142
+ topPos += this.bearer.outerHeight()/2 - this.tooltip.outerHeight()/2;
143
+ break;
144
+ }
145
+ if(this.options.autoLeft){
146
+ this.tooltip.css('left', leftPos);
147
+ }
148
+ if(this.options.autoTop){
149
+ this.tooltip.css('top', topPos);
150
+ }
151
+ },
152
+
153
+ setEvents: function(){
154
+ var dt = this;
155
+ var delay = dt.options.hoverDelay;
156
+ var setTimeoutConst;
157
+ if(dt.mouseOverMode){
158
+ this.bearer.mouseenter( function(){
159
+ //Timeout for hover mouse delay
160
+ setTimeoutConst = setTimeout( function(){
161
+ dt.setPositions();
162
+ dt.show();
163
+ }, delay);
164
+ }).mouseleave( function(){
165
+ clearTimeout(setTimeoutConst );
166
+ dt.hide();
167
+ });
168
+ }else if(this.options.trigger == "click" || this.options.trigger == "onclik"){
169
+ this.tooltip.click( function(e){
170
+ e.stopPropagation();
171
+ });
172
+ this.bearer.click( function(e){
173
+ e.preventDefault();
174
+ dt.setPositions();
175
+ dt.toggle();
176
+ e.stopPropagation();
177
+ });
178
+ $('html').click(function(){
179
+ dt.hide();
180
+ })
181
+ }
182
+ },
183
+
184
+ activate: function(){
185
+ this.setContent();
186
+ if(this.content){
187
+ this.setEvents();
188
+ }
189
+ },
190
+
191
+ addConfirm: function(){
192
+ this.tooltip.append("<ul class = 'confirm'><li class = 'darktooltip-yes'>"
193
+ + this.options.yes +"</li><li class = 'darktooltip-no'>"+ this.options.no +"</li></ul>");
194
+ this.setConfirmEvents();
195
+ },
196
+
197
+ setConfirmEvents: function(){
198
+ var dt = this;
199
+ this.tooltip.find('li.darktooltip-yes').click( function(e){
200
+ dt.onYes();
201
+ e.stopPropagation();
202
+ });
203
+ this.tooltip.find('li.darktooltip-no').click( function(e){
204
+ dt.onNo();
205
+ e.stopPropagation();
206
+ });
207
+ },
208
+
209
+ finalMessage: function(){
210
+ if(this.options.finalMessage){
211
+ var dt = this;
212
+ dt.tooltip.find('div:first').html(this.options.finalMessage);
213
+ dt.tooltip.find('ul').remove();
214
+ dt.setPositions();
215
+ setTimeout( function(){
216
+ dt.hide();
217
+ dt.setContent();
218
+ }, dt.options.finalMessageDuration);
219
+ }else{
220
+ this.hide();
221
+ }
222
+ },
223
+
224
+ onYes: function(){
225
+ this.options.onYes(this.bearer);
226
+ this.finalMessage();
227
+ },
228
+
229
+ onNo: function(){
230
+ this.options.onNo(this.bearer);
231
+ this.hide();
232
+ }
233
+ }
234
+
235
+ $.fn.darkTooltip = function(options) {
236
+ return this.each(function(){
237
+ options = $.extend({}, $.fn.darkTooltip.defaults, options);
238
+ var tooltip = new DarkTooltip($(this), options);
239
+ tooltip.activate();
240
+ });
241
+ }
242
+
243
+ $.fn.darkTooltip.defaults = {
244
+ animation: 'none',
245
+ confirm: false,
246
+ content:'',
247
+ finalMessage: '',
248
+ finalMessageDuration: 1000,
249
+ gravity: 'south',
250
+ hoverDelay: 0,
251
+ modal: false,
252
+ no: 'No',
253
+ onNo: function(){},
254
+ onYes: function(){},
255
+ opacity: 0.9,
256
+ size: 'medium',
257
+ theme: 'dark',
258
+ trigger: 'hover',
259
+ yes: 'Yes',
260
+ autoTop: true,
261
+ autoLeft: true,
262
+ onClose: function(){}
263
+ };
264
+
265
+ })(jQuery);
languages/wp-security-audit-log.pot CHANGED
@@ -1,101 +1,114 @@
1
- # Copyright (C) 2016 WP Security Audit Log
2
  # This file is distributed under the same license as the WP Security Audit Log package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP Security Audit Log 2.5.8\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-security-audit-"
7
  "log\n"
8
- "POT-Creation-Date: 2016-11-09 06:32:40+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
15
 
16
- #: classes/AuditLogListView.php:36
17
  msgid "No events so far."
18
  msgstr ""
19
 
20
- #: classes/AuditLogListView.php:42
21
  msgid "Other"
22
  msgstr ""
23
 
24
- #: classes/AuditLogListView.php:49
25
  msgid "Show "
26
  msgstr ""
27
 
28
- #: classes/AuditLogListView.php:59
29
  msgid " Items"
30
  msgstr ""
31
 
32
- #: classes/AuditLogListView.php:72 classes/Views/AuditLog.php:96
33
  msgid "All Sites"
34
  msgstr ""
35
 
36
- #: classes/AuditLogListView.php:123 classes/AuditLogListView.php:140
 
 
 
 
 
 
 
 
37
  #: classes/Views/ToggleAlerts.php:75
38
  msgid "Code"
39
  msgstr ""
40
 
41
- #: classes/AuditLogListView.php:124 classes/AuditLogListView.php:143
42
  #: classes/Views/ToggleAlerts.php:76
43
  msgid "Type"
44
  msgstr ""
45
 
46
- #: classes/AuditLogListView.php:125 classes/AuditLogListView.php:146
47
  msgid "Date"
48
  msgstr ""
49
 
50
- #: classes/AuditLogListView.php:126 classes/AuditLogListView.php:149
51
  msgid "Username"
52
  msgstr ""
53
 
54
- #: classes/AuditLogListView.php:127 classes/AuditLogListView.php:152
55
  msgid "Source IP"
56
  msgstr ""
57
 
58
- #: classes/AuditLogListView.php:130 classes/AuditLogListView.php:155
59
  msgid "Site"
60
  msgstr ""
61
 
62
- #: classes/AuditLogListView.php:132 classes/AuditLogListView.php:158
63
  msgid "Message"
64
  msgstr ""
65
 
66
- #: classes/AuditLogListView.php:196
67
  msgid "Click to toggle."
68
  msgstr ""
69
 
70
- #: classes/AuditLogListView.php:202
 
 
 
 
71
  msgid "Unknown error code."
72
  msgstr ""
73
 
74
- #: classes/AuditLogListView.php:226
75
  msgid "Unknown"
76
  msgstr ""
77
 
78
- #: classes/AuditLogListView.php:230
79
  msgid "Plugin"
80
  msgstr ""
81
 
82
- #: classes/AuditLogListView.php:234
83
  msgid "Plugins"
84
  msgstr ""
85
 
86
- #: classes/AuditLogListView.php:238
87
  msgid "Website Visitor"
88
  msgstr ""
89
 
90
- #: classes/AuditLogListView.php:242
91
  msgid "System"
92
  msgstr ""
93
 
94
- #: classes/AuditLogListView.php:270
95
  msgid "Alert Data Inspector"
96
  msgstr ""
97
 
98
  #: classes/Sensors/Content.php:424 classes/Sensors/Content.php:432
 
99
  msgid "Password Protected"
100
  msgstr ""
101
 
@@ -107,6 +120,14 @@ msgstr ""
107
  msgid "Private"
108
  msgstr ""
109
 
 
 
 
 
 
 
 
 
110
  #: classes/Views/About.php:6
111
  msgid "About WP Security Audit Log"
112
  msgstr ""
@@ -219,33 +240,33 @@ msgstr ""
219
  msgid "Professional WordPress security services provided by WP White Security"
220
  msgstr ""
221
 
222
- #: classes/Views/AuditLog.php:34
223
  msgid "Upgrade to Premium"
224
  msgstr ""
225
 
226
- #: classes/Views/AuditLog.php:35
227
  msgid ""
228
  "and add Email Alerts, Reports, Search and Users Login and Session Management."
229
  msgstr ""
230
 
231
- #: classes/Views/AuditLog.php:36
232
  msgid "Upgrade Now!"
233
  msgstr ""
234
 
235
- #: classes/Views/AuditLog.php:50 classes/Views/AuditLog.php:60
236
  msgid "Audit Log Viewer"
237
  msgstr ""
238
 
239
- #: classes/Views/AuditLog.php:74 classes/Views/Licensing.php:34
240
  #: classes/Views/Settings.php:111 classes/Views/ToggleAlerts.php:30
241
  msgid "You do not have sufficient permissions to access this page."
242
  msgstr ""
243
 
244
- #: classes/Views/AuditLog.php:95
245
  msgid "Please enter the number of alerts you would like to see on one page:"
246
  msgstr ""
247
 
248
- #: classes/Views/AuditLog.php:97
249
  msgid "No Results"
250
  msgstr ""
251
 
@@ -688,97 +709,103 @@ msgstr ""
688
  msgid "Remove Data on Uninstall"
689
  msgstr ""
690
 
691
- #: classes/Views/Settings.php:359
 
 
 
 
 
 
692
  msgid "Security Alerts Pruning"
693
  msgstr ""
694
 
695
- #: classes/Views/Settings.php:362 classes/Views/Settings.php:370
696
  msgid "(eg: 1 month)"
697
  msgstr ""
698
 
699
- #: classes/Views/Settings.php:366
700
  msgid "None"
701
  msgstr ""
702
 
703
- #: classes/Views/Settings.php:374
704
  msgid "Delete alerts older than"
705
  msgstr ""
706
 
707
- #: classes/Views/Settings.php:382
708
  msgid "(eg: 80)"
709
  msgstr ""
710
 
711
- #: classes/Views/Settings.php:386
712
  msgid "Keep up to"
713
  msgstr ""
714
 
715
- #: classes/Views/Settings.php:391
716
  msgid "alerts"
717
  msgstr ""
718
 
719
- #: classes/Views/Settings.php:395
720
  msgid "Next Scheduled Cleanup is in "
721
  msgstr ""
722
 
723
- #: classes/Views/Settings.php:399
724
  msgid "(or %s)"
725
  msgstr ""
726
 
727
- #: classes/Views/Settings.php:400
728
  msgid "Run Manually"
729
  msgstr ""
730
 
731
- #: classes/Views/Settings.php:407
732
  msgid "Can View Alerts"
733
  msgstr ""
734
 
735
- #: classes/Views/Settings.php:414
736
  msgid "Users and Roles in this list can view the security alerts"
737
  msgstr ""
738
 
739
- #: classes/Views/Settings.php:430
740
  msgid "Refresh Audit Log Viewer"
741
  msgstr ""
742
 
743
- #: classes/Views/Settings.php:436
744
  msgid "Automatic"
745
  msgstr ""
746
 
747
- #: classes/Views/Settings.php:438
748
  msgid "Refresh Audit Log Viewer as soon as there are new alerts."
749
  msgstr ""
750
 
751
- #: classes/Views/Settings.php:442
752
  msgid "Manual"
753
  msgstr ""
754
 
755
- #: classes/Views/Settings.php:444
756
  msgid "Refresh Audit Log Viewer only when the page is reloaded."
757
  msgstr ""
758
 
759
- #: classes/Views/Settings.php:451
760
  msgid "Alerts Timestamp"
761
  msgstr ""
762
 
763
- #: classes/Views/Settings.php:457
764
  msgid "UTC"
765
  msgstr ""
766
 
767
- #: classes/Views/Settings.php:462
768
  msgid "WordPress' timezone"
769
  msgstr ""
770
 
771
- #: classes/Views/Settings.php:465
772
  msgid ""
773
  "Select which timestamp should the alerts have in the Audit Log viewer. Note "
774
  "that the WordPress' timezone might be different from that of the server."
775
  msgstr ""
776
 
777
- #: classes/Views/Settings.php:471
778
  msgid "Audit Log Columns Selection"
779
  msgstr ""
780
 
781
- #: classes/Views/Settings.php:482
782
  msgid ""
783
  "When you disable any of the above such details won’t be shown in the Audit "
784
  "Log\n"
@@ -786,49 +813,49 @@ msgid ""
786
  "database."
787
  msgstr ""
788
 
789
- #: classes/Views/Settings.php:489
790
  msgid "Disable Alerts for WordPress Background Activity"
791
  msgstr ""
792
 
793
- #: classes/Views/Settings.php:495
794
  msgid "Hide activity"
795
  msgstr ""
796
 
797
- #: classes/Views/Settings.php:499
798
  msgid ""
799
  "For example do not raise an alert when WordPress deletes the auto drafts."
800
  msgstr ""
801
 
802
- #: classes/Views/Settings.php:506
803
  msgid "Number of 404 Requests to Log"
804
  msgstr ""
805
 
806
- #: classes/Views/Settings.php:512
807
  msgid ""
808
  "By default the plugin keeps up to 99 requests to non-existing pages from the "
809
  "same IP address. Increase the value in this setting to the desired amount to "
810
  "keep a log of more or less requests."
811
  msgstr ""
812
 
813
- #: classes/Views/Settings.php:513
814
  msgid ""
815
  "Note that by increasing this value to a high number, should your website be "
816
  "scanned the plugin will consume more resources to log all the requests."
817
  msgstr ""
818
 
819
- #: classes/Views/Settings.php:530
820
  msgid "Excluded Users"
821
  msgstr ""
822
 
823
- #: classes/Views/Settings.php:550
824
  msgid "Excluded Roles"
825
  msgstr ""
826
 
827
- #: classes/Views/Settings.php:577
828
  msgid "Excluded Custom Fields"
829
  msgstr ""
830
 
831
- #: classes/Views/Settings.php:603
832
  msgid "Excluded IP Addresses"
833
  msgstr ""
834
 
@@ -1915,643 +1942,997 @@ msgstr ""
1915
  msgid "Modified %File% with the Plugin Editor."
1916
  msgstr ""
1917
 
 
 
 
 
 
 
 
 
1918
  #: defaults.php:186
1919
- msgid "System Activity"
 
 
 
 
1920
  msgstr ""
1921
 
1922
  #: defaults.php:187
1923
- msgid "Unknown Error"
1924
  msgstr ""
1925
 
1926
  #: defaults.php:187
 
 
 
 
 
 
 
 
 
 
 
 
 
1927
  msgid "An unexpected error has occurred ."
1928
  msgstr ""
1929
 
1930
- #: defaults.php:188
1931
  msgid "PHP error"
1932
  msgstr ""
1933
 
1934
- #: defaults.php:188 defaults.php:189 defaults.php:190 defaults.php:191
1935
- #: defaults.php:192
1936
  msgid "%Message%."
1937
  msgstr ""
1938
 
1939
- #: defaults.php:189
1940
  msgid "PHP warning"
1941
  msgstr ""
1942
 
1943
- #: defaults.php:190
1944
  msgid "PHP notice"
1945
  msgstr ""
1946
 
1947
- #: defaults.php:191
1948
  msgid "PHP exception"
1949
  msgstr ""
1950
 
1951
- #: defaults.php:192
1952
  msgid "PHP shutdown error"
1953
  msgstr ""
1954
 
1955
- #: defaults.php:193
1956
  msgid "Events automatically pruned by system"
1957
  msgstr ""
1958
 
1959
- #: defaults.php:193
1960
  msgid "System automatically deleted %EventCount% alert(s)."
1961
  msgstr ""
1962
 
1963
- #: defaults.php:194
1964
  msgid "Option Anyone Can Register in WordPress settings changed"
1965
  msgstr ""
1966
 
1967
- #: defaults.php:194
1968
  msgid "%NewValue% the option \"Anyone can register\"."
1969
  msgstr ""
1970
 
1971
- #: defaults.php:195
1972
  msgid "New User Default Role changed"
1973
  msgstr ""
1974
 
1975
- #: defaults.php:195
1976
  msgid "Changed the New User Default Role from %OldRole% to %NewRole%."
1977
  msgstr ""
1978
 
1979
- #: defaults.php:196
1980
  msgid "WordPress Administrator Notification email changed"
1981
  msgstr ""
1982
 
1983
- #: defaults.php:196
1984
  msgid ""
1985
  "Changed the WordPress administrator notifications email address from "
1986
  "%OldEmail% to %NewEmail%."
1987
  msgstr ""
1988
 
1989
- #: defaults.php:197
1990
  msgid "WordPress was updated"
1991
  msgstr ""
1992
 
1993
- #: defaults.php:197
1994
  msgid "Updated WordPress from version %OldVersion% to %NewVersion%."
1995
  msgstr ""
1996
 
1997
- #: defaults.php:198
1998
  msgid "User changes the WordPress Permalinks"
1999
  msgstr ""
2000
 
2001
- #: defaults.php:198
2002
  msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%."
2003
  msgstr ""
2004
 
2005
- #: defaults.php:199
2006
  msgid "User requests non-existing pages (404 Error Pages)"
2007
  msgstr ""
2008
 
2009
- #: defaults.php:199
2010
  msgid ""
2011
  "Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. "
2012
  "%LinkFile%."
2013
  msgstr ""
2014
 
2015
- #: defaults.php:200
2016
  msgid "Advertising Add-ons."
2017
  msgstr ""
2018
 
2019
- #: defaults.php:200
2020
  msgid "%PromoName% %PromoMessage%"
2021
  msgstr ""
2022
 
2023
- #: defaults.php:202
2024
  msgid "MultiSite"
2025
  msgstr ""
2026
 
2027
- #: defaults.php:203
2028
  msgid "User granted Super Admin privileges"
2029
  msgstr ""
2030
 
2031
- #: defaults.php:203
2032
  msgid "Granted Super Admin privileges to %TargetUsername%."
2033
  msgstr ""
2034
 
2035
- #: defaults.php:204
2036
  msgid "User revoked from Super Admin privileges"
2037
  msgstr ""
2038
 
2039
- #: defaults.php:204
2040
  msgid "Revoked Super Admin privileges from %TargetUsername%."
2041
  msgstr ""
2042
 
2043
- #: defaults.php:205
2044
  msgid "Existing user added to a site"
2045
  msgstr ""
2046
 
2047
- #: defaults.php:205
2048
  msgid ""
2049
  "Added the existing user %TargetUsername% with %TargetUserRole% role to site "
2050
  "%SiteName%."
2051
  msgstr ""
2052
 
2053
- #: defaults.php:206
2054
  msgid "User removed from site"
2055
  msgstr ""
2056
 
2057
- #: defaults.php:206
2058
  msgid ""
2059
  "Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% "
2060
  "site."
2061
  msgstr ""
2062
 
2063
- #: defaults.php:207
2064
  msgid "New network user created"
2065
  msgstr ""
2066
 
2067
- #: defaults.php:207
2068
  msgid "Created a new network user %NewUserData->Username%."
2069
  msgstr ""
2070
 
2071
- #: defaults.php:208
2072
  msgid "The forum role of a user was changed by another WordPress user"
2073
  msgstr ""
2074
 
2075
- #: defaults.php:208
2076
  msgid ""
2077
  "Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole"
2078
  "% by %UserChanger%."
2079
  msgstr ""
2080
 
2081
- #: defaults.php:209
2082
  msgid "New site added on the network"
2083
  msgstr ""
2084
 
2085
- #: defaults.php:209
2086
  msgid "Added the site %SiteName% to the network."
2087
  msgstr ""
2088
 
2089
- #: defaults.php:210
2090
  msgid "Existing site archived"
2091
  msgstr ""
2092
 
2093
- #: defaults.php:210
2094
  msgid "Archived the site %SiteName%."
2095
  msgstr ""
2096
 
2097
- #: defaults.php:211
2098
  msgid "Archived site has been unarchived"
2099
  msgstr ""
2100
 
2101
- #: defaults.php:211
2102
  msgid "Unarchived the site %SiteName%."
2103
  msgstr ""
2104
 
2105
- #: defaults.php:212
2106
  msgid "Deactivated site has been activated"
2107
  msgstr ""
2108
 
2109
- #: defaults.php:212
2110
  msgid "Activated the site %SiteName%."
2111
  msgstr ""
2112
 
2113
- #: defaults.php:213
2114
  msgid "Site has been deactivated"
2115
  msgstr ""
2116
 
2117
- #: defaults.php:213
2118
  msgid "Deactivated the site %SiteName%."
2119
  msgstr ""
2120
 
2121
- #: defaults.php:214
2122
  msgid "Existing site deleted from network"
2123
  msgstr ""
2124
 
2125
- #: defaults.php:214
2126
  msgid "Deleted the site %SiteName%."
2127
  msgstr ""
2128
 
2129
- #: defaults.php:215
2130
  msgid "Activated theme on network"
2131
  msgstr ""
2132
 
2133
- #: defaults.php:215
2134
  msgid ""
2135
  "Network activated the theme %Theme->Name% installed in %Theme-"
2136
  ">get_template_directory%."
2137
  msgstr ""
2138
 
2139
- #: defaults.php:216
2140
  msgid "Deactivated theme from network"
2141
  msgstr ""
2142
 
2143
- #: defaults.php:216
2144
  msgid ""
2145
  "Network deactivated the theme %Theme->Name% installed in %Theme-"
2146
  ">get_template_directory%."
2147
  msgstr ""
2148
 
2149
- #: defaults.php:218
2150
  msgid "Database"
2151
  msgstr ""
2152
 
2153
- #: defaults.php:219
2154
  msgid "Plugin created tables"
2155
  msgstr ""
2156
 
2157
- #: defaults.php:219
2158
  msgid ""
2159
  "Plugin %Plugin->Name% created these tables in the database: %TableNames%."
2160
  msgstr ""
2161
 
2162
- #: defaults.php:220
2163
  msgid "Plugin modified tables structure"
2164
  msgstr ""
2165
 
2166
- #: defaults.php:220
2167
  msgid ""
2168
  "Plugin %Plugin->Name% modified the structure of these database tables: "
2169
  "%TableNames%."
2170
  msgstr ""
2171
 
2172
- #: defaults.php:221
2173
  msgid "Plugin deleted tables"
2174
  msgstr ""
2175
 
2176
- #: defaults.php:221
2177
  msgid ""
2178
  "Plugin %Plugin->Name% deleted the following tables from the database: "
2179
  "%TableNames%."
2180
  msgstr ""
2181
 
2182
- #: defaults.php:222
2183
  msgid "Theme created tables"
2184
  msgstr ""
2185
 
2186
- #: defaults.php:222
2187
  msgid "Theme %Theme->Name% created these tables in the database: %TableNames%."
2188
  msgstr ""
2189
 
2190
- #: defaults.php:223
2191
  msgid "Theme modified tables structure"
2192
  msgstr ""
2193
 
2194
- #: defaults.php:223
2195
  msgid ""
2196
  "Theme %Theme->Name% modified the structure of these database tables: "
2197
  "%TableNames%."
2198
  msgstr ""
2199
 
2200
- #: defaults.php:224
2201
  msgid "Theme deleted tables"
2202
  msgstr ""
2203
 
2204
- #: defaults.php:224
2205
  msgid ""
2206
  "Theme %Theme->Name% deleted the following tables from the database: "
2207
  "%TableNames%."
2208
  msgstr ""
2209
 
2210
- #: defaults.php:225
2211
  msgid "Unknown component created tables"
2212
  msgstr ""
2213
 
2214
- #: defaults.php:225
2215
  msgid ""
2216
  "An unknown component created these tables in the database: %TableNames%."
2217
  msgstr ""
2218
 
2219
- #: defaults.php:226
2220
  msgid "Unknown component modified tables structure"
2221
  msgstr ""
2222
 
2223
- #: defaults.php:226
2224
  msgid ""
2225
  "An unknown component modified the structure of these database tables: "
2226
  "%TableNames%."
2227
  msgstr ""
2228
 
2229
- #: defaults.php:227
2230
  msgid "Unknown component deleted tables"
2231
  msgstr ""
2232
 
2233
- #: defaults.php:227
2234
  msgid ""
2235
  "An unknown component deleted the following tables from the database: "
2236
  "%TableNames%."
2237
  msgstr ""
2238
 
2239
- #: defaults.php:229
2240
  msgid "BBPress Forum"
2241
  msgstr ""
2242
 
2243
- #: defaults.php:230
2244
  msgid "User created new forum"
2245
  msgstr ""
2246
 
2247
- #: defaults.php:231
2248
  msgid "User changed status of a forum"
2249
  msgstr ""
2250
 
2251
- #: defaults.php:232
2252
  msgid "User changed visibility of a forum"
2253
  msgstr ""
2254
 
2255
- #: defaults.php:233
2256
  msgid "User changed the URL of a forum"
2257
  msgstr ""
2258
 
2259
- #: defaults.php:234
2260
  msgid "User changed order of a forum"
2261
  msgstr ""
2262
 
2263
- #: defaults.php:235
2264
  msgid "User moved forum to trash"
2265
  msgstr ""
2266
 
2267
- #: defaults.php:235
2268
  msgid "Moved the forum %ForumName% to trash."
2269
  msgstr ""
2270
 
2271
- #: defaults.php:236
2272
  msgid "User permanently deleted forum"
2273
  msgstr ""
2274
 
2275
- #: defaults.php:236
2276
  msgid "Permanently deleted the forum %ForumName%."
2277
  msgstr ""
2278
 
2279
- #: defaults.php:237
2280
  msgid "User restored forum from trash"
2281
  msgstr ""
2282
 
2283
- #: defaults.php:238
2284
  msgid "User changed the parent of a forum"
2285
  msgstr ""
2286
 
2287
- #: defaults.php:239
2288
  msgid "User changed forum's role"
2289
  msgstr ""
2290
 
2291
- #: defaults.php:239
2292
  msgid "Changed the forum's auto role from %OldRole% to %NewRole%."
2293
  msgstr ""
2294
 
2295
- #: defaults.php:240
2296
  msgid "User changed option of a forum"
2297
  msgstr ""
2298
 
2299
- #: defaults.php:240
2300
  msgid "%Status% the option for anonymous posting on forum."
2301
  msgstr ""
2302
 
2303
- #: defaults.php:241
2304
  msgid "User changed type of a forum"
2305
  msgstr ""
2306
 
2307
- #: defaults.php:242
2308
  msgid "User changed time to disallow post editing"
2309
  msgstr ""
2310
 
2311
- #: defaults.php:242
2312
  msgid ""
2313
  "Changed the time to disallow post editing from %OldTime% to %NewTime% "
2314
  "minutes in the forums."
2315
  msgstr ""
2316
 
2317
- #: defaults.php:243
2318
  msgid "User changed the forum setting posting throttle time"
2319
  msgstr ""
2320
 
2321
- #: defaults.php:243
2322
  msgid ""
2323
  "Changed the posting throttle time from %OldTime% to %NewTime% seconds in the "
2324
  "forums."
2325
  msgstr ""
2326
 
2327
- #: defaults.php:244
2328
  msgid "User created new topic"
2329
  msgstr ""
2330
 
2331
- #: defaults.php:245
2332
  msgid "User changed status of a topic"
2333
  msgstr ""
2334
 
2335
- #: defaults.php:246
2336
  msgid "User changed type of a topic"
2337
  msgstr ""
2338
 
2339
- #: defaults.php:247
2340
  msgid "User changed URL of a topic"
2341
  msgstr ""
2342
 
2343
- #: defaults.php:247
2344
  msgid "Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%."
2345
  msgstr ""
2346
 
2347
- #: defaults.php:248
2348
  msgid "User changed the forum of a topic"
2349
  msgstr ""
2350
 
2351
- #: defaults.php:249
2352
  msgid "User moved topic to trash"
2353
  msgstr ""
2354
 
2355
- #: defaults.php:249
2356
  msgid "Moved the topic %TopicName% to trash."
2357
  msgstr ""
2358
 
2359
- #: defaults.php:250
2360
  msgid "User permanently deleted topic"
2361
  msgstr ""
2362
 
2363
- #: defaults.php:250
2364
  msgid "Permanently deleted the topic %TopicName%."
2365
  msgstr ""
2366
 
2367
- #: defaults.php:251
2368
  msgid "User restored topic from trash"
2369
  msgstr ""
2370
 
2371
- #: defaults.php:252
2372
  msgid "User changed visibility of a topic"
2373
  msgstr ""
2374
 
2375
- #: defaults.php:254
2376
  msgid "Menus"
2377
  msgstr ""
2378
 
2379
- #: defaults.php:255
2380
  msgid "User created new menu"
2381
  msgstr ""
2382
 
2383
- #: defaults.php:255
2384
  msgid "Created a new menu called %MenuName%."
2385
  msgstr ""
2386
 
2387
- #: defaults.php:256
2388
  msgid "User added content to a menu"
2389
  msgstr ""
2390
 
2391
- #: defaults.php:256
2392
  msgid "Added the %ContentType% called %ContentName% to menu %MenuName%."
2393
  msgstr ""
2394
 
2395
- #: defaults.php:257
2396
  msgid "User removed content from a menu"
2397
  msgstr ""
2398
 
2399
- #: defaults.php:257
2400
  msgid ""
2401
  "Removed the %ContentType% called %ContentName% from the menu %MenuName%."
2402
  msgstr ""
2403
 
2404
- #: defaults.php:258
2405
  msgid "User deleted menu"
2406
  msgstr ""
2407
 
2408
- #: defaults.php:258
2409
  msgid "Deleted the menu %MenuName%."
2410
  msgstr ""
2411
 
2412
- #: defaults.php:259
2413
  msgid "User changed menu setting"
2414
  msgstr ""
2415
 
2416
- #: defaults.php:259
2417
  msgid "%Status% the menu setting %MenuSetting% in %MenuName%."
2418
  msgstr ""
2419
 
2420
- #: defaults.php:260
2421
  msgid "User modified content in a menu"
2422
  msgstr ""
2423
 
2424
- #: defaults.php:260
2425
  msgid "Modified the %ContentType% called %ContentName% in menu %MenuName%."
2426
  msgstr ""
2427
 
2428
- #: defaults.php:261
2429
  msgid "User changed name of a menu"
2430
  msgstr ""
2431
 
2432
- #: defaults.php:261
2433
  msgid "Changed the name of menu %OldMenuName% to %NewMenuName%."
2434
  msgstr ""
2435
 
2436
- #: defaults.php:262
2437
  msgid "User changed order of the objects in a menu"
2438
  msgstr ""
2439
 
2440
- #: defaults.php:262
2441
  msgid "Changed the order of the %ItemName% in menu %MenuName%."
2442
  msgstr ""
2443
 
2444
- #: defaults.php:263
2445
  msgid "User moved objects as a sub-item"
2446
  msgstr ""
2447
 
2448
- #: defaults.php:263
2449
  msgid "Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%."
2450
  msgstr ""
2451
 
2452
- #: defaults.php:265
2453
  msgid "Comments"
2454
  msgstr ""
2455
 
2456
- #: defaults.php:266
2457
  msgid "User approved a comment"
2458
  msgstr ""
2459
 
2460
- #: defaults.php:266
2461
  msgid ""
2462
  "Approved the comment posted in response to the post %PostTitle% by %Author% "
2463
  "on %CommentLink%."
2464
  msgstr ""
2465
 
2466
- #: defaults.php:267
2467
  msgid "User unapproved a comment"
2468
  msgstr ""
2469
 
2470
- #: defaults.php:267
2471
  msgid ""
2472
  "Unapproved the comment posted in response to the post %PostTitle% by %Author"
2473
  "% on %CommentLink%."
2474
  msgstr ""
2475
 
2476
- #: defaults.php:268
2477
  msgid "User replied to a comment"
2478
  msgstr ""
2479
 
2480
- #: defaults.php:268
2481
  msgid ""
2482
  "Replied to the comment posted in response to the post %PostTitle% by %Author"
2483
  "% on %CommentLink%."
2484
  msgstr ""
2485
 
2486
- #: defaults.php:269
2487
  msgid "User edited a comment"
2488
  msgstr ""
2489
 
2490
- #: defaults.php:269
2491
  msgid ""
2492
  "Edited a comment posted in response to the post %PostTitle% by %Author% on "
2493
  "%CommentLink%."
2494
  msgstr ""
2495
 
2496
- #: defaults.php:270
2497
  msgid "User marked a comment as Spam"
2498
  msgstr ""
2499
 
2500
- #: defaults.php:270
2501
  msgid ""
2502
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
2503
  "%CommentLink% as Spam."
2504
  msgstr ""
2505
 
2506
- #: defaults.php:271
2507
  msgid "User marked a comment as Not Spam"
2508
  msgstr ""
2509
 
2510
- #: defaults.php:271
2511
  msgid ""
2512
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
2513
  "%CommentLink% as Not Spam."
2514
  msgstr ""
2515
 
2516
- #: defaults.php:272
2517
  msgid "User moved a comment to trash"
2518
  msgstr ""
2519
 
2520
- #: defaults.php:272
2521
  msgid ""
2522
  "Moved the comment posted in response to the post %PostTitle% by %Author% on "
2523
  "%Date% to trash."
2524
  msgstr ""
2525
 
2526
- #: defaults.php:273
2527
  msgid "User restored a comment from the trash"
2528
  msgstr ""
2529
 
2530
- #: defaults.php:273
2531
  msgid ""
2532
  "Restored the comment posted in response to the post %PostTitle% by %Author% "
2533
  "on %CommentLink% from the trash."
2534
  msgstr ""
2535
 
2536
- #: defaults.php:274
2537
  msgid "User permanently deleted a comment"
2538
  msgstr ""
2539
 
2540
- #: defaults.php:274
2541
  msgid ""
2542
  "Permanently deleted the comment posted in response to the post %PostTitle% "
2543
  "by %Author% on %Date%."
2544
  msgstr ""
2545
 
2546
- #: defaults.php:275
2547
  msgid "User posted a comment"
2548
  msgstr ""
2549
 
2550
- #: defaults.php:275
2551
  msgid "%CommentMsg% on %CommentLink%."
2552
  msgstr ""
2553
 
2554
- #: wp-security-audit-log.php:261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2555
  msgid ""
2556
  "You are using a version of PHP that is older than %s, which is no longer "
2557
  "supported.<br/>Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
@@ -2563,9 +2944,9 @@ msgstr ""
2563
  msgid "WP Security Audit Log"
2564
  msgstr ""
2565
 
2566
- #. #-#-#-#-# plugin.pot (WP Security Audit Log 2.5.8) #-#-#-#-#
2567
  #. Plugin URI of the plugin/theme
2568
- #. #-#-#-#-# plugin.pot (WP Security Audit Log 2.5.8) #-#-#-#-#
2569
  #. Author URI of the plugin/theme
2570
  msgid "http://www.wpsecurityauditlog.com/"
2571
  msgstr ""
1
+ # Copyright (C) 2017 WP Security Audit Log
2
  # This file is distributed under the same license as the WP Security Audit Log package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP Security Audit Log 2.6\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-security-audit-"
7
  "log\n"
8
+ "POT-Creation-Date: 2017-02-08 07:06:17+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
15
 
16
+ #: classes/AuditLogListView.php:40
17
  msgid "No events so far."
18
  msgstr ""
19
 
20
+ #: classes/AuditLogListView.php:46
21
  msgid "Other"
22
  msgstr ""
23
 
24
+ #: classes/AuditLogListView.php:53
25
  msgid "Show "
26
  msgstr ""
27
 
28
+ #: classes/AuditLogListView.php:63
29
  msgid " Items"
30
  msgstr ""
31
 
32
+ #: classes/AuditLogListView.php:76 classes/Views/AuditLog.php:103
33
  msgid "All Sites"
34
  msgstr ""
35
 
36
+ #: classes/AuditLogListView.php:96
37
+ msgid "Live Database"
38
+ msgstr ""
39
+
40
+ #: classes/AuditLogListView.php:97
41
+ msgid "Archive Database"
42
+ msgstr ""
43
+
44
+ #: classes/AuditLogListView.php:138 classes/AuditLogListView.php:155
45
  #: classes/Views/ToggleAlerts.php:75
46
  msgid "Code"
47
  msgstr ""
48
 
49
+ #: classes/AuditLogListView.php:139 classes/AuditLogListView.php:158
50
  #: classes/Views/ToggleAlerts.php:76
51
  msgid "Type"
52
  msgstr ""
53
 
54
+ #: classes/AuditLogListView.php:140 classes/AuditLogListView.php:161
55
  msgid "Date"
56
  msgstr ""
57
 
58
+ #: classes/AuditLogListView.php:141 classes/AuditLogListView.php:164
59
  msgid "Username"
60
  msgstr ""
61
 
62
+ #: classes/AuditLogListView.php:142 classes/AuditLogListView.php:167
63
  msgid "Source IP"
64
  msgstr ""
65
 
66
+ #: classes/AuditLogListView.php:145 classes/AuditLogListView.php:170
67
  msgid "Site"
68
  msgstr ""
69
 
70
+ #: classes/AuditLogListView.php:147 classes/AuditLogListView.php:173
71
  msgid "Message"
72
  msgstr ""
73
 
74
+ #: classes/AuditLogListView.php:211
75
  msgid "Click to toggle."
76
  msgstr ""
77
 
78
+ #: classes/AuditLogListView.php:214
79
+ msgid "Disable this type of alerts."
80
+ msgstr ""
81
+
82
+ #: classes/AuditLogListView.php:219
83
  msgid "Unknown error code."
84
  msgstr ""
85
 
86
+ #: classes/AuditLogListView.php:250
87
  msgid "Unknown"
88
  msgstr ""
89
 
90
+ #: classes/AuditLogListView.php:254
91
  msgid "Plugin"
92
  msgstr ""
93
 
94
+ #: classes/AuditLogListView.php:258
95
  msgid "Plugins"
96
  msgstr ""
97
 
98
+ #: classes/AuditLogListView.php:262
99
  msgid "Website Visitor"
100
  msgstr ""
101
 
102
+ #: classes/AuditLogListView.php:266
103
  msgid "System"
104
  msgstr ""
105
 
106
+ #: classes/AuditLogListView.php:294
107
  msgid "Alert Data Inspector"
108
  msgstr ""
109
 
110
  #: classes/Sensors/Content.php:424 classes/Sensors/Content.php:432
111
+ #: classes/Sensors/WooCommerce.php:284 classes/Sensors/WooCommerce.php:290
112
  msgid "Password Protected"
113
  msgstr ""
114
 
120
  msgid "Private"
121
  msgstr ""
122
 
123
+ #: classes/Sensors/WooCommerce.php:760
124
+ msgid "In stock"
125
+ msgstr ""
126
+
127
+ #: classes/Sensors/WooCommerce.php:762
128
+ msgid "Out of stock"
129
+ msgstr ""
130
+
131
  #: classes/Views/About.php:6
132
  msgid "About WP Security Audit Log"
133
  msgstr ""
240
  msgid "Professional WordPress security services provided by WP White Security"
241
  msgstr ""
242
 
243
+ #: classes/Views/AuditLog.php:39
244
  msgid "Upgrade to Premium"
245
  msgstr ""
246
 
247
+ #: classes/Views/AuditLog.php:40
248
  msgid ""
249
  "and add Email Alerts, Reports, Search and Users Login and Session Management."
250
  msgstr ""
251
 
252
+ #: classes/Views/AuditLog.php:41
253
  msgid "Upgrade Now!"
254
  msgstr ""
255
 
256
+ #: classes/Views/AuditLog.php:55 classes/Views/AuditLog.php:65
257
  msgid "Audit Log Viewer"
258
  msgstr ""
259
 
260
+ #: classes/Views/AuditLog.php:81 classes/Views/Licensing.php:34
261
  #: classes/Views/Settings.php:111 classes/Views/ToggleAlerts.php:30
262
  msgid "You do not have sufficient permissions to access this page."
263
  msgstr ""
264
 
265
+ #: classes/Views/AuditLog.php:102
266
  msgid "Please enter the number of alerts you would like to see on one page:"
267
  msgstr ""
268
 
269
+ #: classes/Views/AuditLog.php:104
270
  msgid "No Results"
271
  msgstr ""
272
 
709
  msgid "Remove Data on Uninstall"
710
  msgstr ""
711
 
712
+ #: classes/Views/Settings.php:365
713
+ msgid ""
714
+ "The options below are disabled because you enabled archiving of alerts to "
715
+ "the archiving table from"
716
+ msgstr ""
717
+
718
+ #: classes/Views/Settings.php:370
719
  msgid "Security Alerts Pruning"
720
  msgstr ""
721
 
722
+ #: classes/Views/Settings.php:373 classes/Views/Settings.php:381
723
  msgid "(eg: 1 month)"
724
  msgstr ""
725
 
726
+ #: classes/Views/Settings.php:377
727
  msgid "None"
728
  msgstr ""
729
 
730
+ #: classes/Views/Settings.php:385
731
  msgid "Delete alerts older than"
732
  msgstr ""
733
 
734
+ #: classes/Views/Settings.php:393
735
  msgid "(eg: 80)"
736
  msgstr ""
737
 
738
+ #: classes/Views/Settings.php:397
739
  msgid "Keep up to"
740
  msgstr ""
741
 
742
+ #: classes/Views/Settings.php:402
743
  msgid "alerts"
744
  msgstr ""
745
 
746
+ #: classes/Views/Settings.php:406
747
  msgid "Next Scheduled Cleanup is in "
748
  msgstr ""
749
 
750
+ #: classes/Views/Settings.php:410
751
  msgid "(or %s)"
752
  msgstr ""
753
 
754
+ #: classes/Views/Settings.php:411
755
  msgid "Run Manually"
756
  msgstr ""
757
 
758
+ #: classes/Views/Settings.php:418
759
  msgid "Can View Alerts"
760
  msgstr ""
761
 
762
+ #: classes/Views/Settings.php:425
763
  msgid "Users and Roles in this list can view the security alerts"
764
  msgstr ""
765
 
766
+ #: classes/Views/Settings.php:441
767
  msgid "Refresh Audit Log Viewer"
768
  msgstr ""
769
 
770
+ #: classes/Views/Settings.php:447
771
  msgid "Automatic"
772
  msgstr ""
773
 
774
+ #: classes/Views/Settings.php:449
775
  msgid "Refresh Audit Log Viewer as soon as there are new alerts."
776
  msgstr ""
777
 
778
+ #: classes/Views/Settings.php:453
779
  msgid "Manual"
780
  msgstr ""
781
 
782
+ #: classes/Views/Settings.php:455
783
  msgid "Refresh Audit Log Viewer only when the page is reloaded."
784
  msgstr ""
785
 
786
+ #: classes/Views/Settings.php:462
787
  msgid "Alerts Timestamp"
788
  msgstr ""
789
 
790
+ #: classes/Views/Settings.php:468
791
  msgid "UTC"
792
  msgstr ""
793
 
794
+ #: classes/Views/Settings.php:473
795
  msgid "WordPress' timezone"
796
  msgstr ""
797
 
798
+ #: classes/Views/Settings.php:476
799
  msgid ""
800
  "Select which timestamp should the alerts have in the Audit Log viewer. Note "
801
  "that the WordPress' timezone might be different from that of the server."
802
  msgstr ""
803
 
804
+ #: classes/Views/Settings.php:482
805
  msgid "Audit Log Columns Selection"
806
  msgstr ""
807
 
808
+ #: classes/Views/Settings.php:493
809
  msgid ""
810
  "When you disable any of the above such details won’t be shown in the Audit "
811
  "Log\n"
813
  "database."
814
  msgstr ""
815
 
816
+ #: classes/Views/Settings.php:500
817
  msgid "Disable Alerts for WordPress Background Activity"
818
  msgstr ""
819
 
820
+ #: classes/Views/Settings.php:506
821
  msgid "Hide activity"
822
  msgstr ""
823
 
824
+ #: classes/Views/Settings.php:510
825
  msgid ""
826
  "For example do not raise an alert when WordPress deletes the auto drafts."
827
  msgstr ""
828
 
829
+ #: classes/Views/Settings.php:517
830
  msgid "Number of 404 Requests to Log"
831
  msgstr ""
832
 
833
+ #: classes/Views/Settings.php:523
834
  msgid ""
835
  "By default the plugin keeps up to 99 requests to non-existing pages from the "
836
  "same IP address. Increase the value in this setting to the desired amount to "
837
  "keep a log of more or less requests."
838
  msgstr ""
839
 
840
+ #: classes/Views/Settings.php:524
841
  msgid ""
842
  "Note that by increasing this value to a high number, should your website be "
843
  "scanned the plugin will consume more resources to log all the requests."
844
  msgstr ""
845
 
846
+ #: classes/Views/Settings.php:541
847
  msgid "Excluded Users"
848
  msgstr ""
849
 
850
+ #: classes/Views/Settings.php:561
851
  msgid "Excluded Roles"
852
  msgstr ""
853
 
854
+ #: classes/Views/Settings.php:588
855
  msgid "Excluded Custom Fields"
856
  msgstr ""
857
 
858
+ #: classes/Views/Settings.php:614
859
  msgid "Excluded IP Addresses"
860
  msgstr ""
861
 
1942
  msgid "Modified %File% with the Plugin Editor."
1943
  msgstr ""
1944
 
1945
+ #: defaults.php:185
1946
+ msgid "A plugin modified a post"
1947
+ msgstr ""
1948
+
1949
+ #: defaults.php:185
1950
+ msgid "Plugin modified the post %PostTitle%. View the post: %EditorLinkPost%."
1951
+ msgstr ""
1952
+
1953
  #: defaults.php:186
1954
+ msgid "A plugin modified a page"
1955
+ msgstr ""
1956
+
1957
+ #: defaults.php:186
1958
+ msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
1959
  msgstr ""
1960
 
1961
  #: defaults.php:187
1962
+ msgid "A plugin modified a custom post"
1963
  msgstr ""
1964
 
1965
  #: defaults.php:187
1966
+ msgid ""
1967
+ "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
1968
+ msgstr ""
1969
+
1970
+ #: defaults.php:189
1971
+ msgid "System Activity"
1972
+ msgstr ""
1973
+
1974
+ #: defaults.php:190
1975
+ msgid "Unknown Error"
1976
+ msgstr ""
1977
+
1978
+ #: defaults.php:190
1979
  msgid "An unexpected error has occurred ."
1980
  msgstr ""
1981
 
1982
+ #: defaults.php:191
1983
  msgid "PHP error"
1984
  msgstr ""
1985
 
1986
+ #: defaults.php:191 defaults.php:192 defaults.php:193 defaults.php:194
1987
+ #: defaults.php:195
1988
  msgid "%Message%."
1989
  msgstr ""
1990
 
1991
+ #: defaults.php:192
1992
  msgid "PHP warning"
1993
  msgstr ""
1994
 
1995
+ #: defaults.php:193
1996
  msgid "PHP notice"
1997
  msgstr ""
1998
 
1999
+ #: defaults.php:194
2000
  msgid "PHP exception"
2001
  msgstr ""
2002
 
2003
+ #: defaults.php:195
2004
  msgid "PHP shutdown error"
2005
  msgstr ""
2006
 
2007
+ #: defaults.php:196
2008
  msgid "Events automatically pruned by system"
2009
  msgstr ""
2010
 
2011
+ #: defaults.php:196
2012
  msgid "System automatically deleted %EventCount% alert(s)."
2013
  msgstr ""
2014
 
2015
+ #: defaults.php:197
2016
  msgid "Option Anyone Can Register in WordPress settings changed"
2017
  msgstr ""
2018
 
2019
+ #: defaults.php:197
2020
  msgid "%NewValue% the option \"Anyone can register\"."
2021
  msgstr ""
2022
 
2023
+ #: defaults.php:198
2024
  msgid "New User Default Role changed"
2025
  msgstr ""
2026
 
2027
+ #: defaults.php:198
2028
  msgid "Changed the New User Default Role from %OldRole% to %NewRole%."
2029
  msgstr ""
2030
 
2031
+ #: defaults.php:199
2032
  msgid "WordPress Administrator Notification email changed"
2033
  msgstr ""
2034
 
2035
+ #: defaults.php:199
2036
  msgid ""
2037
  "Changed the WordPress administrator notifications email address from "
2038
  "%OldEmail% to %NewEmail%."
2039
  msgstr ""
2040
 
2041
+ #: defaults.php:200
2042
  msgid "WordPress was updated"
2043
  msgstr ""
2044
 
2045
+ #: defaults.php:200
2046
  msgid "Updated WordPress from version %OldVersion% to %NewVersion%."
2047
  msgstr ""
2048
 
2049
+ #: defaults.php:201
2050
  msgid "User changes the WordPress Permalinks"
2051
  msgstr ""
2052
 
2053
+ #: defaults.php:201
2054
  msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%."
2055
  msgstr ""
2056
 
2057
+ #: defaults.php:202
2058
  msgid "User requests non-existing pages (404 Error Pages)"
2059
  msgstr ""
2060
 
2061
+ #: defaults.php:202
2062
  msgid ""
2063
  "Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. "
2064
  "%LinkFile%."
2065
  msgstr ""
2066
 
2067
+ #: defaults.php:203
2068
  msgid "Advertising Add-ons."
2069
  msgstr ""
2070
 
2071
+ #: defaults.php:203
2072
  msgid "%PromoName% %PromoMessage%"
2073
  msgstr ""
2074
 
2075
+ #: defaults.php:205
2076
  msgid "MultiSite"
2077
  msgstr ""
2078
 
2079
+ #: defaults.php:206
2080
  msgid "User granted Super Admin privileges"
2081
  msgstr ""
2082
 
2083
+ #: defaults.php:206
2084
  msgid "Granted Super Admin privileges to %TargetUsername%."
2085
  msgstr ""
2086
 
2087
+ #: defaults.php:207
2088
  msgid "User revoked from Super Admin privileges"
2089
  msgstr ""
2090
 
2091
+ #: defaults.php:207
2092
  msgid "Revoked Super Admin privileges from %TargetUsername%."
2093
  msgstr ""
2094
 
2095
+ #: defaults.php:208
2096
  msgid "Existing user added to a site"
2097
  msgstr ""
2098
 
2099
+ #: defaults.php:208
2100
  msgid ""
2101
  "Added the existing user %TargetUsername% with %TargetUserRole% role to site "
2102
  "%SiteName%."
2103
  msgstr ""
2104
 
2105
+ #: defaults.php:209
2106
  msgid "User removed from site"
2107
  msgstr ""
2108
 
2109
+ #: defaults.php:209
2110
  msgid ""
2111
  "Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% "
2112
  "site."
2113
  msgstr ""
2114
 
2115
+ #: defaults.php:210
2116
  msgid "New network user created"
2117
  msgstr ""
2118
 
2119
+ #: defaults.php:210
2120
  msgid "Created a new network user %NewUserData->Username%."
2121
  msgstr ""
2122
 
2123
+ #: defaults.php:211
2124
  msgid "The forum role of a user was changed by another WordPress user"
2125
  msgstr ""
2126
 
2127
+ #: defaults.php:211
2128
  msgid ""
2129
  "Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole"
2130
  "% by %UserChanger%."
2131
  msgstr ""
2132
 
2133
+ #: defaults.php:212
2134
  msgid "New site added on the network"
2135
  msgstr ""
2136
 
2137
+ #: defaults.php:212
2138
  msgid "Added the site %SiteName% to the network."
2139
  msgstr ""
2140
 
2141
+ #: defaults.php:213
2142
  msgid "Existing site archived"
2143
  msgstr ""
2144
 
2145
+ #: defaults.php:213
2146
  msgid "Archived the site %SiteName%."
2147
  msgstr ""
2148
 
2149
+ #: defaults.php:214
2150
  msgid "Archived site has been unarchived"
2151
  msgstr ""
2152
 
2153
+ #: defaults.php:214
2154
  msgid "Unarchived the site %SiteName%."
2155
  msgstr ""
2156
 
2157
+ #: defaults.php:215
2158
  msgid "Deactivated site has been activated"
2159
  msgstr ""
2160
 
2161
+ #: defaults.php:215
2162
  msgid "Activated the site %SiteName%."
2163
  msgstr ""
2164
 
2165
+ #: defaults.php:216
2166
  msgid "Site has been deactivated"
2167
  msgstr ""
2168
 
2169
+ #: defaults.php:216
2170
  msgid "Deactivated the site %SiteName%."
2171
  msgstr ""
2172
 
2173
+ #: defaults.php:217
2174
  msgid "Existing site deleted from network"
2175
  msgstr ""
2176
 
2177
+ #: defaults.php:217
2178
  msgid "Deleted the site %SiteName%."
2179
  msgstr ""
2180
 
2181
+ #: defaults.php:218
2182
  msgid "Activated theme on network"
2183
  msgstr ""
2184
 
2185
+ #: defaults.php:218
2186
  msgid ""
2187
  "Network activated the theme %Theme->Name% installed in %Theme-"
2188
  ">get_template_directory%."
2189
  msgstr ""
2190
 
2191
+ #: defaults.php:219
2192
  msgid "Deactivated theme from network"
2193
  msgstr ""
2194
 
2195
+ #: defaults.php:219
2196
  msgid ""
2197
  "Network deactivated the theme %Theme->Name% installed in %Theme-"
2198
  ">get_template_directory%."
2199
  msgstr ""
2200
 
2201
+ #: defaults.php:221
2202
  msgid "Database"
2203
  msgstr ""
2204
 
2205
+ #: defaults.php:222
2206
  msgid "Plugin created tables"
2207
  msgstr ""
2208
 
2209
+ #: defaults.php:222
2210
  msgid ""
2211
  "Plugin %Plugin->Name% created these tables in the database: %TableNames%."
2212
  msgstr ""
2213
 
2214
+ #: defaults.php:223
2215
  msgid "Plugin modified tables structure"
2216
  msgstr ""
2217
 
2218
+ #: defaults.php:223
2219
  msgid ""
2220
  "Plugin %Plugin->Name% modified the structure of these database tables: "
2221
  "%TableNames%."
2222
  msgstr ""
2223
 
2224
+ #: defaults.php:224
2225
  msgid "Plugin deleted tables"
2226
  msgstr ""
2227
 
2228
+ #: defaults.php:224
2229
  msgid ""
2230
  "Plugin %Plugin->Name% deleted the following tables from the database: "
2231
  "%TableNames%."
2232
  msgstr ""
2233
 
2234
+ #: defaults.php:225
2235
  msgid "Theme created tables"
2236
  msgstr ""
2237
 
2238
+ #: defaults.php:225
2239
  msgid "Theme %Theme->Name% created these tables in the database: %TableNames%."
2240
  msgstr ""
2241
 
2242
+ #: defaults.php:226
2243
  msgid "Theme modified tables structure"
2244
  msgstr ""
2245
 
2246
+ #: defaults.php:226
2247
  msgid ""
2248
  "Theme %Theme->Name% modified the structure of these database tables: "
2249
  "%TableNames%."
2250
  msgstr ""
2251
 
2252
+ #: defaults.php:227
2253
  msgid "Theme deleted tables"
2254
  msgstr ""
2255
 
2256
+ #: defaults.php:227
2257
  msgid ""
2258
  "Theme %Theme->Name% deleted the following tables from the database: "
2259
  "%TableNames%."
2260
  msgstr ""
2261
 
2262
+ #: defaults.php:228
2263
  msgid "Unknown component created tables"
2264
  msgstr ""
2265
 
2266
+ #: defaults.php:228
2267
  msgid ""
2268
  "An unknown component created these tables in the database: %TableNames%."
2269
  msgstr ""
2270
 
2271
+ #: defaults.php:229
2272
  msgid "Unknown component modified tables structure"
2273
  msgstr ""
2274
 
2275
+ #: defaults.php:229
2276
  msgid ""
2277
  "An unknown component modified the structure of these database tables: "
2278
  "%TableNames%."
2279
  msgstr ""
2280
 
2281
+ #: defaults.php:230
2282
  msgid "Unknown component deleted tables"
2283
  msgstr ""
2284
 
2285
+ #: defaults.php:230
2286
  msgid ""
2287
  "An unknown component deleted the following tables from the database: "
2288
  "%TableNames%."
2289
  msgstr ""
2290
 
2291
+ #: defaults.php:232
2292
  msgid "BBPress Forum"
2293
  msgstr ""
2294
 
2295
+ #: defaults.php:233
2296
  msgid "User created new forum"
2297
  msgstr ""
2298
 
2299
+ #: defaults.php:234
2300
  msgid "User changed status of a forum"
2301
  msgstr ""
2302
 
2303
+ #: defaults.php:235
2304
  msgid "User changed visibility of a forum"
2305
  msgstr ""
2306
 
2307
+ #: defaults.php:236
2308
  msgid "User changed the URL of a forum"
2309
  msgstr ""
2310
 
2311
+ #: defaults.php:237
2312
  msgid "User changed order of a forum"
2313
  msgstr ""
2314
 
2315
+ #: defaults.php:238
2316
  msgid "User moved forum to trash"
2317
  msgstr ""
2318
 
2319
+ #: defaults.php:238
2320
  msgid "Moved the forum %ForumName% to trash."
2321
  msgstr ""
2322
 
2323
+ #: defaults.php:239
2324
  msgid "User permanently deleted forum"
2325
  msgstr ""
2326
 
2327
+ #: defaults.php:239
2328
  msgid "Permanently deleted the forum %ForumName%."
2329
  msgstr ""
2330
 
2331
+ #: defaults.php:240
2332
  msgid "User restored forum from trash"
2333
  msgstr ""
2334
 
2335
+ #: defaults.php:241
2336
  msgid "User changed the parent of a forum"
2337
  msgstr ""
2338
 
2339
+ #: defaults.php:242
2340
  msgid "User changed forum's role"
2341
  msgstr ""
2342
 
2343
+ #: defaults.php:242
2344
  msgid "Changed the forum's auto role from %OldRole% to %NewRole%."
2345
  msgstr ""
2346
 
2347
+ #: defaults.php:243
2348
  msgid "User changed option of a forum"
2349
  msgstr ""
2350
 
2351
+ #: defaults.php:243
2352
  msgid "%Status% the option for anonymous posting on forum."
2353
  msgstr ""
2354
 
2355
+ #: defaults.php:244
2356
  msgid "User changed type of a forum"
2357
  msgstr ""
2358
 
2359
+ #: defaults.php:245
2360
  msgid "User changed time to disallow post editing"
2361
  msgstr ""
2362
 
2363
+ #: defaults.php:245
2364
  msgid ""
2365
  "Changed the time to disallow post editing from %OldTime% to %NewTime% "
2366
  "minutes in the forums."
2367
  msgstr ""
2368
 
2369
+ #: defaults.php:246
2370
  msgid "User changed the forum setting posting throttle time"
2371
  msgstr ""
2372
 
2373
+ #: defaults.php:246
2374
  msgid ""
2375
  "Changed the posting throttle time from %OldTime% to %NewTime% seconds in the "
2376
  "forums."
2377
  msgstr ""
2378
 
2379
+ #: defaults.php:247
2380
  msgid "User created new topic"
2381
  msgstr ""
2382
 
2383
+ #: defaults.php:248
2384
  msgid "User changed status of a topic"
2385
  msgstr ""
2386
 
2387
+ #: defaults.php:249
2388
  msgid "User changed type of a topic"
2389
  msgstr ""
2390
 
2391
+ #: defaults.php:250
2392
  msgid "User changed URL of a topic"
2393
  msgstr ""
2394
 
2395
+ #: defaults.php:250
2396
  msgid "Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%."
2397
  msgstr ""
2398
 
2399
+ #: defaults.php:251
2400
  msgid "User changed the forum of a topic"
2401
  msgstr ""
2402
 
2403
+ #: defaults.php:252
2404
  msgid "User moved topic to trash"
2405
  msgstr ""
2406
 
2407
+ #: defaults.php:252
2408
  msgid "Moved the topic %TopicName% to trash."
2409
  msgstr ""
2410
 
2411
+ #: defaults.php:253
2412
  msgid "User permanently deleted topic"
2413
  msgstr ""
2414
 
2415
+ #: defaults.php:253
2416
  msgid "Permanently deleted the topic %TopicName%."
2417
  msgstr ""
2418
 
2419
+ #: defaults.php:254
2420
  msgid "User restored topic from trash"
2421
  msgstr ""
2422
 
2423
+ #: defaults.php:255
2424
  msgid "User changed visibility of a topic"
2425
  msgstr ""
2426
 
2427
+ #: defaults.php:257
2428
  msgid "Menus"
2429
  msgstr ""
2430
 
2431
+ #: defaults.php:258
2432
  msgid "User created new menu"
2433
  msgstr ""
2434
 
2435
+ #: defaults.php:258
2436
  msgid "Created a new menu called %MenuName%."
2437
  msgstr ""
2438
 
2439
+ #: defaults.php:259
2440
  msgid "User added content to a menu"
2441
  msgstr ""
2442
 
2443
+ #: defaults.php:259
2444
  msgid "Added the %ContentType% called %ContentName% to menu %MenuName%."
2445
  msgstr ""
2446
 
2447
+ #: defaults.php:260
2448
  msgid "User removed content from a menu"
2449
  msgstr ""
2450
 
2451
+ #: defaults.php:260
2452
  msgid ""
2453
  "Removed the %ContentType% called %ContentName% from the menu %MenuName%."
2454
  msgstr ""
2455
 
2456
+ #: defaults.php:261
2457
  msgid "User deleted menu"
2458
  msgstr ""
2459
 
2460
+ #: defaults.php:261
2461
  msgid "Deleted the menu %MenuName%."
2462
  msgstr ""
2463
 
2464
+ #: defaults.php:262
2465
  msgid "User changed menu setting"
2466
  msgstr ""
2467
 
2468
+ #: defaults.php:262
2469
  msgid "%Status% the menu setting %MenuSetting% in %MenuName%."
2470
  msgstr ""
2471
 
2472
+ #: defaults.php:263
2473
  msgid "User modified content in a menu"
2474
  msgstr ""
2475
 
2476
+ #: defaults.php:263
2477
  msgid "Modified the %ContentType% called %ContentName% in menu %MenuName%."
2478
  msgstr ""
2479
 
2480
+ #: defaults.php:264
2481
  msgid "User changed name of a menu"
2482
  msgstr ""
2483
 
2484
+ #: defaults.php:264
2485
  msgid "Changed the name of menu %OldMenuName% to %NewMenuName%."
2486
  msgstr ""
2487
 
2488
+ #: defaults.php:265
2489
  msgid "User changed order of the objects in a menu"
2490
  msgstr ""
2491
 
2492
+ #: defaults.php:265
2493
  msgid "Changed the order of the %ItemName% in menu %MenuName%."
2494
  msgstr ""
2495
 
2496
+ #: defaults.php:266
2497
  msgid "User moved objects as a sub-item"
2498
  msgstr ""
2499
 
2500
+ #: defaults.php:266
2501
  msgid "Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%."
2502
  msgstr ""
2503
 
2504
+ #: defaults.php:268
2505
  msgid "Comments"
2506
  msgstr ""
2507
 
2508
+ #: defaults.php:269
2509
  msgid "User approved a comment"
2510
  msgstr ""
2511
 
2512
+ #: defaults.php:269
2513
  msgid ""
2514
  "Approved the comment posted in response to the post %PostTitle% by %Author% "
2515
  "on %CommentLink%."
2516
  msgstr ""
2517
 
2518
+ #: defaults.php:270
2519
  msgid "User unapproved a comment"
2520
  msgstr ""
2521
 
2522
+ #: defaults.php:270
2523
  msgid ""
2524
  "Unapproved the comment posted in response to the post %PostTitle% by %Author"
2525
  "% on %CommentLink%."
2526
  msgstr ""
2527
 
2528
+ #: defaults.php:271
2529
  msgid "User replied to a comment"
2530
  msgstr ""
2531
 
2532
+ #: defaults.php:271
2533
  msgid ""
2534
  "Replied to the comment posted in response to the post %PostTitle% by %Author"
2535
  "% on %CommentLink%."
2536
  msgstr ""
2537
 
2538
+ #: defaults.php:272
2539
  msgid "User edited a comment"
2540
  msgstr ""
2541
 
2542
+ #: defaults.php:272
2543
  msgid ""
2544
  "Edited a comment posted in response to the post %PostTitle% by %Author% on "
2545
  "%CommentLink%."
2546
  msgstr ""
2547
 
2548
+ #: defaults.php:273
2549
  msgid "User marked a comment as Spam"
2550
  msgstr ""
2551
 
2552
+ #: defaults.php:273
2553
  msgid ""
2554
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
2555
  "%CommentLink% as Spam."
2556
  msgstr ""
2557
 
2558
+ #: defaults.php:274
2559
  msgid "User marked a comment as Not Spam"
2560
  msgstr ""
2561
 
2562
+ #: defaults.php:274
2563
  msgid ""
2564
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
2565
  "%CommentLink% as Not Spam."
2566
  msgstr ""
2567
 
2568
+ #: defaults.php:275
2569
  msgid "User moved a comment to trash"
2570
  msgstr ""
2571
 
2572
+ #: defaults.php:275
2573
  msgid ""
2574
  "Moved the comment posted in response to the post %PostTitle% by %Author% on "
2575
  "%Date% to trash."
2576
  msgstr ""
2577
 
2578
+ #: defaults.php:276
2579
  msgid "User restored a comment from the trash"
2580
  msgstr ""
2581
 
2582
+ #: defaults.php:276
2583
  msgid ""
2584
  "Restored the comment posted in response to the post %PostTitle% by %Author% "
2585
  "on %CommentLink% from the trash."
2586
  msgstr ""
2587
 
2588
+ #: defaults.php:277
2589
  msgid "User permanently deleted a comment"
2590
  msgstr ""
2591
 
2592
+ #: defaults.php:277
2593
  msgid ""
2594
  "Permanently deleted the comment posted in response to the post %PostTitle% "
2595
  "by %Author% on %Date%."
2596
  msgstr ""
2597
 
2598
+ #: defaults.php:278
2599
  msgid "User posted a comment"
2600
  msgstr ""
2601
 
2602
+ #: defaults.php:278
2603
  msgid "%CommentMsg% on %CommentLink%."
2604
  msgstr ""
2605
 
2606
+ #: defaults.php:280
2607
+ msgid "WooCommerce"
2608
+ msgstr ""
2609
+
2610
+ #: defaults.php:281
2611
+ msgid "User created a new product"
2612
+ msgstr ""
2613
+
2614
+ #: defaults.php:281
2615
+ msgid ""
2616
+ "Created a new product called %ProductTitle% and saved it as draft. View the "
2617
+ "product: %EditorLinkProduct%."
2618
+ msgstr ""
2619
+
2620
+ #: defaults.php:282
2621
+ msgid "User published a product"
2622
+ msgstr ""
2623
+
2624
+ #: defaults.php:282
2625
+ msgid ""
2626
+ "Published a product called %ProductTitle%. Product URL is %ProductUrl%. View "
2627
+ "the product: %EditorLinkProduct%."
2628
+ msgstr ""
2629
+
2630
+ #: defaults.php:283
2631
+ msgid "User created a new product category"
2632
+ msgstr ""
2633
+
2634
+ #: defaults.php:283
2635
+ msgid ""
2636
+ "Created a new product category called %CategoryName% in WooCommerce. Product "
2637
+ "category slug is %Slug%."
2638
+ msgstr ""
2639
+
2640
+ #: defaults.php:284
2641
+ msgid "User changed the category of a product"
2642
+ msgstr ""
2643
+
2644
+ #: defaults.php:284
2645
+ msgid ""
2646
+ "Changed the category of the product %ProductTitle% from %OldCategories% to "
2647
+ "%NewCategories%. View the product: %EditorLinkProduct%."
2648
+ msgstr ""
2649
+
2650
+ #: defaults.php:285
2651
+ msgid "User modified the short description of a product"
2652
+ msgstr ""
2653
+
2654
+ #: defaults.php:285
2655
+ msgid ""
2656
+ "Modified the short description of the product %ProductTitle%. View the "
2657
+ "product: %EditorLinkProduct%."
2658
+ msgstr ""
2659
+
2660
+ #: defaults.php:286
2661
+ msgid "User modified the text of a product"
2662
+ msgstr ""
2663
+
2664
+ #: defaults.php:286
2665
+ msgid ""
2666
+ "Modified the text of the product %ProductTitle%. View the product: "
2667
+ "%EditorLinkProduct%."
2668
+ msgstr ""
2669
+
2670
+ #: defaults.php:287
2671
+ msgid "User changed the URL of a product"
2672
+ msgstr ""
2673
+
2674
+ #: defaults.php:287
2675
+ msgid ""
2676
+ "Changed the URL of the product %ProductTitle% from %OldUrl% to %NewUrl%. "
2677
+ "View the product: %EditorLinkProduct%."
2678
+ msgstr ""
2679
+
2680
+ #: defaults.php:288
2681
+ msgid "User changed the Product Data of a product"
2682
+ msgstr ""
2683
+
2684
+ #: defaults.php:288
2685
+ msgid ""
2686
+ "Changed the Product Data of the product %ProductTitle%. View the product: "
2687
+ "%EditorLinkProduct%."
2688
+ msgstr ""
2689
+
2690
+ #: defaults.php:289
2691
+ msgid "User changed the date of a product"
2692
+ msgstr ""
2693
+
2694
+ #: defaults.php:289
2695
+ msgid ""
2696
+ "Changed the date of the product %ProductTitle% from %OldDate% to %NewDate%. "
2697
+ "View the product: %EditorLinkProduct%."
2698
+ msgstr ""
2699
+
2700
+ #: defaults.php:290
2701
+ msgid "User changed the visibility of a product"
2702
+ msgstr ""
2703
+
2704
+ #: defaults.php:290
2705
+ msgid ""
2706
+ "Changed the visibility of the product %ProductTitle% from %OldVisibility% to "
2707
+ "%NewVisibility%. View the product: %EditorLinkProduct%."
2708
+ msgstr ""
2709
+
2710
+ #: defaults.php:291
2711
+ msgid "User modified the published product"
2712
+ msgstr ""
2713
+
2714
+ #: defaults.php:291
2715
+ msgid ""
2716
+ "Modified the published product %ProductTitle%. Product URL is %ProductUrl%. "
2717
+ "View the product: %EditorLinkProduct%."
2718
+ msgstr ""
2719
+
2720
+ #: defaults.php:292
2721
+ msgid "User modified the draft product"
2722
+ msgstr ""
2723
+
2724
+ #: defaults.php:292
2725
+ msgid ""
2726
+ "Modified the draft product %ProductTitle%. View the product: "
2727
+ "%EditorLinkProduct%."
2728
+ msgstr ""
2729
+
2730
+ #: defaults.php:293
2731
+ msgid "User moved a product to trash"
2732
+ msgstr ""
2733
+
2734
+ #: defaults.php:293
2735
+ msgid ""
2736
+ "Moved the product %ProductTitle% to trash. Product URL was %ProductUrl%."
2737
+ msgstr ""
2738
+
2739
+ #: defaults.php:294
2740
+ msgid "User permanently deleted a product"
2741
+ msgstr ""
2742
+
2743
+ #: defaults.php:294
2744
+ msgid "Permanently deleted the product %ProductTitle%."
2745
+ msgstr ""
2746
+
2747
+ #: defaults.php:295
2748
+ msgid "User restored a product from the trash"
2749
+ msgstr ""
2750
+
2751
+ #: defaults.php:295
2752
+ msgid ""
2753
+ "Product %ProductTitle% has been restored from trash. View product: "
2754
+ "%EditorLinkProduct%."
2755
+ msgstr ""
2756
+
2757
+ #: defaults.php:296
2758
+ msgid "User changed status of a product"
2759
+ msgstr ""
2760
+
2761
+ #: defaults.php:296
2762
+ msgid ""
2763
+ "Changed the status of the product %ProductTitle% from %OldStatus% to "
2764
+ "%NewStatus%. View the product: %EditorLinkProduct%."
2765
+ msgstr ""
2766
+
2767
+ #: defaults.php:297
2768
+ msgid "User changed type of a price"
2769
+ msgstr ""
2770
+
2771
+ #: defaults.php:297
2772
+ msgid ""
2773
+ "Changed the %PriceType% of the product %ProductTitle% from %OldPrice% to "
2774
+ "%NewPrice%. View the product: %EditorLinkProduct%."
2775
+ msgstr ""
2776
+
2777
+ #: defaults.php:298
2778
+ msgid "User changed the SKU of a product"
2779
+ msgstr ""
2780
+
2781
+ #: defaults.php:298
2782
+ msgid ""
2783
+ "Changed the SKU of the product %ProductTitle% from %OldSku% to %NewSku%. "
2784
+ "View the product: %EditorLinkProduct%."
2785
+ msgstr ""
2786
+
2787
+ #: defaults.php:299
2788
+ msgid "User changed the stock status of a product"
2789
+ msgstr ""
2790
+
2791
+ #: defaults.php:299
2792
+ msgid ""
2793
+ "Changed the stock status of the product %ProductTitle% from %OldStatus% to "
2794
+ "%NewStatus%. View the product: %EditorLinkProduct%."
2795
+ msgstr ""
2796
+
2797
+ #: defaults.php:300
2798
+ msgid "User changed the stock quantity"
2799
+ msgstr ""
2800
+
2801
+ #: defaults.php:300
2802
+ msgid ""
2803
+ "Changed the stock quantity from %OldValue% to %NewValue%. View the product: "
2804
+ "%EditorLinkProduct%"
2805
+ msgstr ""
2806
+
2807
+ #: defaults.php:301
2808
+ msgid "User set a product type"
2809
+ msgstr ""
2810
+
2811
+ #: defaults.php:301
2812
+ msgid ""
2813
+ "Set the product %ProductTitle% as %Type%. View the product: "
2814
+ "%EditorLinkProduct%."
2815
+ msgstr ""
2816
+
2817
+ #: defaults.php:302
2818
+ msgid "User changed the weight of a product"
2819
+ msgstr ""
2820
+
2821
+ #: defaults.php:302
2822
+ msgid ""
2823
+ "Changed the weight of the product %ProductTitle% from %OldWeight% to "
2824
+ "%NewWeight%. View the product: %EditorLinkProduct%."
2825
+ msgstr ""
2826
+
2827
+ #: defaults.php:303
2828
+ msgid "User changed the dimensions of a product"
2829
+ msgstr ""
2830
+
2831
+ #: defaults.php:303
2832
+ msgid ""
2833
+ "Changed the %DimensionType% dimensions of the product %ProductTitle% from "
2834
+ "%OldDimension% to %NewDimension%. View the product: %EditorLinkProduct%."
2835
+ msgstr ""
2836
+
2837
+ #: defaults.php:304
2838
+ msgid "User added the Downloadable File to a product"
2839
+ msgstr ""
2840
+
2841
+ #: defaults.php:304
2842
+ msgid ""
2843
+ "Added the Downloadable File %FileName% with File URL %FileUrl% to the "
2844
+ "product %ProductTitle%. View the product: %EditorLinkProduct%."
2845
+ msgstr ""
2846
+
2847
+ #: defaults.php:305
2848
+ msgid "User Removed the Downloadable File from a product"
2849
+ msgstr ""
2850
+
2851
+ #: defaults.php:305
2852
+ msgid ""
2853
+ "Removed the Downloadable File %FileName% with File URL %FileUrl% from the "
2854
+ "product %ProductTitle%. View the product: %EditorLinkProduct%."
2855
+ msgstr ""
2856
+
2857
+ #: defaults.php:306
2858
+ msgid "User changed the name of a Downloadable File in a product"
2859
+ msgstr ""
2860
+
2861
+ #: defaults.php:306
2862
+ msgid ""
2863
+ "Changed the name of a Downloadable File from %OldName% to %NewName% in "
2864
+ "product %ProductTitle%. View the product: %EditorLinkProduct%."
2865
+ msgstr ""
2866
+
2867
+ #: defaults.php:307
2868
+ msgid "User changed the URL of the Downloadable File in a product"
2869
+ msgstr ""
2870
+
2871
+ #: defaults.php:307
2872
+ msgid ""
2873
+ "Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl"
2874
+ "% in product %ProductTitle%. View the product: %EditorLinkProduct%."
2875
+ msgstr ""
2876
+
2877
+ #: defaults.php:308
2878
+ msgid "User changed the Weight Unit"
2879
+ msgstr ""
2880
+
2881
+ #: defaults.php:308
2882
+ msgid "Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce."
2883
+ msgstr ""
2884
+
2885
+ #: defaults.php:309
2886
+ msgid "User changed the Dimensions Unit"
2887
+ msgstr ""
2888
+
2889
+ #: defaults.php:309
2890
+ msgid "Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce."
2891
+ msgstr ""
2892
+
2893
+ #: defaults.php:310
2894
+ msgid "User changed the Base Location"
2895
+ msgstr ""
2896
+
2897
+ #: defaults.php:310
2898
+ msgid ""
2899
+ "Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce."
2900
+ msgstr ""
2901
+
2902
+ #: defaults.php:311
2903
+ msgid "User Enabled/Disabled taxes"
2904
+ msgstr ""
2905
+
2906
+ #: defaults.php:311
2907
+ msgid "%Status% taxes in the WooCommerce store."
2908
+ msgstr ""
2909
+
2910
+ #: defaults.php:312
2911
+ msgid "User changed the currency"
2912
+ msgstr ""
2913
+
2914
+ #: defaults.php:312
2915
+ msgid ""
2916
+ "Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce."
2917
+ msgstr ""
2918
+
2919
+ #: defaults.php:313
2920
+ msgid "User Enabled/Disabled the use of coupons during checkout"
2921
+ msgstr ""
2922
+
2923
+ #: defaults.php:313
2924
+ msgid "%Status% the use of coupons during checkout in WooCommerce."
2925
+ msgstr ""
2926
+
2927
+ #: defaults.php:314
2928
+ msgid "User Enabled/Disabled guest checkout"
2929
+ msgstr ""
2930
+
2931
+ #: defaults.php:314
2932
+ msgid "%Status% guest checkout in WooCommerce."
2933
+ msgstr ""
2934
+
2935
+ #: wp-security-audit-log.php:281
2936
  msgid ""
2937
  "You are using a version of PHP that is older than %s, which is no longer "
2938
  "supported.<br/>Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
2944
  msgid "WP Security Audit Log"
2945
  msgstr ""
2946
 
2947
+ #. #-#-#-#-# plugin.pot (WP Security Audit Log 2.6) #-#-#-#-#
2948
  #. Plugin URI of the plugin/theme
2949
+ #. #-#-#-#-# plugin.pot (WP Security Audit Log 2.6) #-#-#-#-#
2950
  #. Author URI of the plugin/theme
2951
  msgid "http://www.wpsecurityauditlog.com/"
2952
  msgstr ""
readme.txt CHANGED
@@ -6,8 +6,8 @@ License: GPLv3
6
  License URI: http://www.gnu.org/licenses/gpl.html
7
  Tags: wordpress security plugin, wordpress security audit log, audit log, wordpress log, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, security audit trail, wordpress security alerts, wordpress monitor, wordpress security monitor, wordpress admin, wordpress admin monitoring, analytics, activity, admin, multisite, wordpress multisite, actions, dashboard, log, notification, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
8
  Requires at least: 3.6
9
- Tested up to: 4.7.1
10
- Stable tag: 2.5.9.2
11
 
12
  Keep an audit trail of all changes and under the hood WordPress activity to ensure productivity and thwart possible WordPress hacker attacks.
13
 
@@ -15,13 +15,15 @@ Keep an audit trail of all changes and under the hood WordPress activity to ensu
15
 
16
  <strong>THE MOST COMPREHENSIVE & EASY TO USE WORDPRESS AUDIT TRAIL PLUGIN</strong><br />
17
 
18
- Keep an audit log of everything that is happening on your WordPress and [WordPress multisite](http://www.wpsecurityauditlog.com/documentation/wordpress-multisite-plugin-features-support/) with WP Security Audit Log to ensure user productivity and identify WordPress security issues before they become a security problem. [WP Security Audit Log](http://www.wpsecurityauditlog.com), WordPress' most comprehensive user monitoring and audit log plugin already helps thousands of WordPress administrators, owners and security professionals ensure the security of their websites and blogs. Ensure the security of your WordPress too by installing WP Security Audit Log. The community's favourite WordPress user monitoring and security auditing plugin is developed by WordPress Security Consultants and Professionals [WP White Security](http://www.wpwhitesecurity.com/).
 
 
19
 
20
  [youtube https://www.youtube.com/watch?v=1nopATCS-CQ]
21
 
22
  > <strong>Free and Premium Support</strong><br>
23
  >
24
- > WP White Security provides support for the WP Security Audit Log plugin on the WordPress forums for free. Since it is free support it is not always possible to answer all questions on a timely manner, although we do try our best.
25
  >
26
  > Premium world-class support is available via email to anyone who purchases any of the [Premium Add-Ons](http://www.wpsecurityauditlog.com/plugin-extensions/) listed below:
27
  >
@@ -183,11 +185,27 @@ Please refer to the [FAQs page](https://www.wpsecurityauditlog.com/documentation
183
 
184
  == Changelog ==
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  = 2.5.9.2 (2017-01-11) =
187
 
188
  * **Bug Fix**
189
  * Updated store URL so [premium add-ons](https://www.wpsecurityauditlog.com/extensions/all-add-ons-60-off/) can be updated.
190
-
191
  = 2.5.9 (2017-01-03) =
192
 
193
  * **Support for new features in External DB Add-on:**
6
  License URI: http://www.gnu.org/licenses/gpl.html
7
  Tags: wordpress security plugin, wordpress security audit log, audit log, wordpress log, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, security audit trail, wordpress security alerts, wordpress monitor, wordpress security monitor, wordpress admin, wordpress admin monitoring, analytics, activity, admin, multisite, wordpress multisite, actions, dashboard, log, notification, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
8
  Requires at least: 3.6
9
+ Tested up to: 4.7.2
10
+ Stable tag: 2.6
11
 
12
  Keep an audit trail of all changes and under the hood WordPress activity to ensure productivity and thwart possible WordPress hacker attacks.
13
 
15
 
16
  <strong>THE MOST COMPREHENSIVE & EASY TO USE WORDPRESS AUDIT TRAIL PLUGIN</strong><br />
17
 
18
+ Keep an audit log of everything that happens on your WordPress and [WordPress multisite](http://www.wpsecurityauditlog.com/documentation/wordpress-multisite-plugin-features-support/) with WP Security Audit Log to ensure user productivity and identify WordPress security issues before they become a security problem.
19
+
20
+ [WP Security Audit Log](http://www.wpsecurityauditlog.com) is WordPress' most comprehensive user monitoring and audit log plugin and is used by thousands of WordPress administrators, owners and security professionals. The plugin can also be used to [keep an audit trail of WooCommerce store and product changes](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/audit-trail-woocommerce-store-products).
21
 
22
  [youtube https://www.youtube.com/watch?v=1nopATCS-CQ]
23
 
24
  > <strong>Free and Premium Support</strong><br>
25
  >
26
+ > Support for the WP Security Audit Log plugin on the WordPress forums is free. Since it is free support it is not always possible to answer all questions on a timely manner, although we do try our best.
27
  >
28
  > Premium world-class support is available via email to anyone who purchases any of the [Premium Add-Ons](http://www.wpsecurityauditlog.com/plugin-extensions/) listed below:
29
  >
185
 
186
  == Changelog ==
187
 
188
+ = 2.6 (2017-02-08) =
189
+
190
+ * **New Features**
191
+ * [Audit trail for WooCommerce Store and Products](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/audit-trail-woocommerce-store-products).
192
+ * New Hover over functionality to disable alerts with a single click.
193
+
194
+ * **New WooCommerce Audit Trail Alerts**
195
+ * Refer to the [Audit trail WooCommerce Alerts List](https://www.wpsecurityauditlog.com/documentation/list-monitoring-wordpress-security-alerts-audit-log/#woocommerce) for a complete list of alerts the plugin uses to keep a record of changes in the WooCommerce store and products.
196
+
197
+ * **Plugin Improvements**
198
+ * Improved severity of alerts and added severity description on hover over.
199
+ * Removed all code related to PHP error monitoring, which is no longer used (code spring cleaning).
200
+
201
+ * **Bug Fixes**
202
+ * Fixed an issue in which 404 logs where still being generated when the logs option was disabled but alert 6007 was enabled.
203
+
204
  = 2.5.9.2 (2017-01-11) =
205
 
206
  * **Bug Fix**
207
  * Updated store URL so [premium add-ons](https://www.wpsecurityauditlog.com/extensions/all-add-ons-60-off/) can be updated.
208
+
209
  = 2.5.9 (2017-01-03) =
210
 
211
  * **Support for new features in External DB Add-on:**
wp-security-audit-log.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: WP Security Audit Log
4
  Plugin URI: http://www.wpsecurityauditlog.com/
5
  Description: Identify WordPress security issues before they become a problem. Keep track of everything happening on your WordPress including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Security Audit Log generates a security alert for everything that happens on your WordPress blogs and websites. Use the Audit Log Viewer included in the plugin to see all the security alerts.
6
  Author: WP White Security
7
- Version: 2.5.9.2
8
  Text Domain: wp-security-audit-log
9
  Author URI: http://www.wpsecurityauditlog.com/
10
  License: GPL2
@@ -157,6 +157,9 @@ class WpSecurityAuditLog {
157
 
158
  // handle admin Disable Custom Field
159
  add_action('wp_ajax_AjaxDisableCustomField', array($this, 'AjaxDisableCustomField'));
 
 
 
160
  }
161
 
162
  /**
@@ -186,7 +189,24 @@ class WpSecurityAuditLog {
186
  $fields = esc_html($_POST['notice']);
187
  }
188
  $this->SetGlobalOption('excluded-custom', $fields);
189
- echo 'Custom Field '.esc_html($_POST['notice']).' is no longer being monitored.<br />Enable the monitoring of this custom field again from the <a href="admin.php?page=wsal-settings#tab-exclude"> Excluded Objects </a> tab in the plugin settings';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  die;
191
  }
192
 
4
  Plugin URI: http://www.wpsecurityauditlog.com/
5
  Description: Identify WordPress security issues before they become a problem. Keep track of everything happening on your WordPress including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Security Audit Log generates a security alert for everything that happens on your WordPress blogs and websites. Use the Audit Log Viewer included in the plugin to see all the security alerts.
6
  Author: WP White Security
7
+ Version: 2.6
8
  Text Domain: wp-security-audit-log
9
  Author URI: http://www.wpsecurityauditlog.com/
10
  License: GPL2
157
 
158
  // handle admin Disable Custom Field
159
  add_action('wp_ajax_AjaxDisableCustomField', array($this, 'AjaxDisableCustomField'));
160
+
161
+ // handle admin Disable Alerts
162
+ add_action('wp_ajax_AjaxDisableByCode', array($this, 'AjaxDisableByCode'));
163
  }
164
 
165
  /**
189
  $fields = esc_html($_POST['notice']);
190
  }
191
  $this->SetGlobalOption('excluded-custom', $fields);
192
+ echo '<p>Custom Field '.esc_html($_POST['notice']).' is no longer being monitored.<br />Enable the monitoring of this custom field again from the <a href="admin.php?page=wsal-settings#tab-exclude"> Excluded Objects </a> tab in the plugin settings</p>';
193
+ die;
194
+ }
195
+
196
+ /**
197
+ * Disable Alert through ajax.
198
+ * @internal
199
+ */
200
+ public function AjaxDisableByCode(){
201
+ $sAlerts = $this->GetGlobalOption('disabled-alerts');
202
+ if (isset($sAlerts) && $sAlerts != "") {
203
+ $sAlerts .= "," . esc_html($_POST['code']);
204
+ } else {
205
+ $sAlerts = esc_html($_POST['code']);
206
+ }
207
+ $this->SetGlobalOption('disabled-alerts', $sAlerts);
208
+ echo '<p>Alert '.esc_html($_POST['code']).' is no longer being monitored.<br />';
209
+ echo 'You can enable this alert again from the Enable/Disable Alerts node in the plugin menu.</p>';
210
  die;
211
  }
212