WP Security Audit Log - Version 3.4

Version Description

(2019-04-03) =

  • New Features

    • SMS notifications (integration with Twilio) for the WordPress audit logs.
    • Integration with Bit.ly to shorten URL in SMSs.
    • Added buttons to test email and SMS notifications.
    • Support for User Switching plugin.
  • New Activity Log Event IDs

    • Event ID 1008: user logged in as another user.
    • Event ID 9083: user changed the billing address (WooCommerce).
    • Event ID 9084: user changed the shipping address (WooCommerce).
  • Plugin Improvements

    • Added more pre-configured SMS & email notifications.
    • Improved all sensors to also detect changes that are not done via the dashboard.
    • Optimized some metadata database queries (reduced qeuries by 75%).
    • Improved the content sensor (better detection of content changes).
    • Optimized the database query that fetches list of logged in users.
    • Removed email notifications wizard.
    • Standardized all tabs and titles in the Emails & SMS Notifications feature.
    • Improved the help text in the Emails & SMS Notifications feature.
    • Removed the limit of 5 criteria in the notifications trigger builder.
    • Removed declaration of emails' Mime-type - this is automatically set so there is no need for it.
  • Bug Fixes

    • WooCommerce order name was not reported in event ID 9040 (changed order detail) in some edge cases.
    • Maximum execution time configured in the WordPress activity log reports engine now is only used when generating a report.
    • CSV reports were not being generated.
    • Audit trail auto refresh was not working when using infinite scroll viewer option.
    • Plugin reporting event 9032 (disabled use of WooCommerce coupons) by mistake.
    • Event IDs 2046 and 2051 were not being reported when files were modified via the editors.
    • Plugin reporting event 2002 when there were changes in a post's Yoast SEO metabox.
    • Removed all reference to obsolete plugin setting: wsal-archiving-date-e.
    • Admins on multisite child sites could see the activity logs of other sites.
    • Event ID 2073 (post submitted for review) was not being reported in Gutenberg.
    • Event 2074 (scheduled post) was not being reported in Gutenberg.
Download this release

Release Info

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

Code changes from version 3.3.1.2 to 3.4

Files changed (63) hide show
  1. classes/AbstractView.php +14 -7
  2. classes/AlertManager.php +1 -0
  3. classes/AuditLogListView.php +19 -5
  4. classes/Models/Occurrence.php +43 -20
  5. classes/Sensors/Comments.php +37 -39
  6. classes/Sensors/Content.php +1038 -1640
  7. classes/Sensors/Files.php +37 -36
  8. classes/Sensors/LogInOut.php +37 -6
  9. classes/Sensors/MetaData.php +235 -344
  10. classes/Sensors/Public.php +71 -29
  11. classes/Sensors/UserProfile.php +186 -260
  12. classes/Sensors/WooCommerce.php +425 -334
  13. classes/Settings.php +2 -10
  14. classes/Utilities/Emailer.php +1 -2
  15. classes/ViewManager.php +96 -8
  16. classes/Views/AuditLog.php +49 -65
  17. classes/Views/EmailNotifications.php +53 -100
  18. classes/Views/ExternalDB.php +39 -91
  19. classes/Views/Help.php +17 -5
  20. classes/Views/LogInUsers.php +37 -93
  21. classes/Views/Reports.php +39 -92
  22. classes/Views/Search.php +40 -85
  23. classes/Views/Settings.php +156 -104
  24. classes/Views/ToggleAlerts.php +5 -1
  25. classes/Views/addons/html-view.php +105 -0
  26. css/auditlog.css +43 -30
  27. css/extensions.css +416 -182
  28. css/settings.css +27 -0
  29. defaults.php +6 -2
  30. img/check-icon.png +0 -0
  31. img/external-db/db_integrations_1.png +0 -0
  32. img/external-db/db_integrations_2.png +0 -0
  33. img/external-db/db_integrations_3.png +0 -0
  34. img/mails/daily-notification/box-shadow-bottom.png +0 -0
  35. img/mails/daily-notification/box-shadow-left.png +0 -0
  36. img/mails/daily-notification/box-shadow-right.png +0 -0
  37. img/mails/daily-notification/box-shadow-up.png +0 -0
  38. img/mails/daily-notification/documentation.png +0 -0
  39. img/mails/daily-notification/get-support.png +0 -0
  40. img/mails/daily-notification/logo.png +0 -0
  41. img/mails/daily-notification/table-bg.jpg +0 -0
  42. img/notifications/notifications_1.png +0 -0
  43. img/notifications/notifications_2.png +0 -0
  44. img/notifications/notifications_3.png +0 -0
  45. img/notifications/notifications_4.png +0 -0
  46. img/reports/reports_1.png +0 -0
  47. img/reports/reports_2.png +0 -0
  48. img/reports/reports_3.png +0 -0
  49. img/search/search_1.png +0 -0
  50. img/search/search_2.png +0 -0
  51. img/search/search_3.png +0 -0
  52. img/users-sessions-management/user_sessions_1.png +0 -0
  53. img/users-sessions-management/user_sessions_2.png +0 -0
  54. img/wsal-emailnotifications.jpg +0 -0
  55. img/wsal-externaldb.jpg +0 -0
  56. img/wsal-loginusers.png +0 -0
  57. img/wsal-reports.jpg +0 -0
  58. img/wsal-search.jpg +0 -0
  59. js/auditlog.js +2 -5
  60. languages/wp-security-audit-log.pot +1412 -1311
  61. readme.txt +39 -15
  62. sdk/freemius/includes/class-freemius.php +1 -1
  63. wp-security-audit-log.php +25 -5
classes/AbstractView.php CHANGED
@@ -164,9 +164,9 @@ abstract class WSAL_AbstractView {
164
  * Renders the view title.
165
  */
166
  public function RenderTitle() {
167
- ?>
168
- <h2><?php echo esc_html( $this->GetTitle() ); ?></h2>
169
- <?php
170
  }
171
 
172
  /**
@@ -197,16 +197,23 @@ abstract class WSAL_AbstractView {
197
  }
198
 
199
  /**
200
- * Used for rendering stuff into head tag.
 
 
201
  */
202
- public function Header() {
 
203
  }
204
 
 
 
 
 
 
205
  /**
206
  * Used for rendering stuff in page fotoer.
207
  */
208
- public function Footer() {
209
- }
210
 
211
  /**
212
  * Method: Safe view menu name.
164
  * Renders the view title.
165
  */
166
  public function RenderTitle() {
167
+ if ( $this->is_title_visible() ) {
168
+ echo '<h2>' . esc_html( $this->GetTitle() ) . '</h2>';
169
+ }
170
  }
171
 
172
  /**
197
  }
198
 
199
  /**
200
+ * Check if the page title is visible.
201
+ *
202
+ * @return boolean
203
  */
204
+ public function is_title_visible() {
205
+ return true;
206
  }
207
 
208
+ /**
209
+ * Used for rendering stuff into head tag.
210
+ */
211
+ public function Header() {}
212
+
213
  /**
214
  * Used for rendering stuff in page fotoer.
215
  */
216
+ public function Footer() {}
 
217
 
218
  /**
219
  * Method: Safe view menu name.
classes/AlertManager.php CHANGED
@@ -131,6 +131,7 @@ final class WSAL_AlertManager {
131
  'nav_menu_item', // Nav menu item CPT.
132
  'customize_changeset', // Customize changeset CPT.
133
  'custom_css', // Custom CSS CPT.
 
134
  'shop_order', // WooCommerce Order CPT.
135
  'shop_order_refund', // WooCommerce Order Refund CPT.
136
  'product_variation', // WooCommerce Product Variation CPT.
131
  'nav_menu_item', // Nav menu item CPT.
132
  'customize_changeset', // Customize changeset CPT.
133
  'custom_css', // Custom CSS CPT.
134
+ 'product', // WooCommerce Product CPT.
135
  'shop_order', // WooCommerce Order CPT.
136
  'shop_order_refund', // WooCommerce Order Refund CPT.
137
  'product_variation', // WooCommerce Product Variation CPT.
classes/AuditLogListView.php CHANGED
@@ -75,6 +75,15 @@ class WSAL_AuditLogListView extends WP_List_Table {
75
  */
76
  private $query_args;
77
 
 
 
 
 
 
 
 
 
 
78
  /**
79
  * Method: Constructor.
80
  *
@@ -194,7 +203,7 @@ class WSAL_AuditLogListView extends WP_List_Table {
194
  ( 'top' === $which && $this->_plugin->settings->is_infinite_scroll() )
195
  || ! $this->_plugin->settings->is_infinite_scroll()
196
  ) {
197
- $curr = $this->get_view_site_id();
198
  ?>
199
  <div class="wsal-ssa wsal-ssa-<?php echo esc_attr( $which ); ?>">
200
  <?php if ( $this->get_site_count() > 15 ) : ?>
@@ -386,6 +395,11 @@ class WSAL_AuditLogListView extends WP_List_Table {
386
  // Get date format.
387
  $datetime_format = $this->_plugin->settings->GetDatetimeFormat();
388
 
 
 
 
 
 
389
  // Store current alert id.
390
  $this->current_alert_id = $item->id;
391
 
@@ -440,7 +454,7 @@ class WSAL_AuditLogListView extends WP_List_Table {
440
  )
441
  ) : '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
442
  case 'user':
443
- $username = $item->GetUsername(); // Get username.
444
  $user = get_user_by( 'login', $username ); // Get user.
445
  if ( empty( $this->name_type ) ) {
446
  $this->name_type = $this->_plugin->settings->get_type_username();
@@ -473,7 +487,7 @@ class WSAL_AuditLogListView extends WP_List_Table {
473
  . '" target="_blank">' . esc_html( $display_name ) . '</a>';
474
  }
475
 
476
- $roles = $item->GetUserRoles();
477
  if ( is_array( $roles ) && count( $roles ) ) {
478
  $roles = esc_html( ucwords( implode( ', ', $roles ) ) );
479
  } elseif ( is_string( $roles ) && '' != $roles ) {
@@ -512,7 +526,7 @@ class WSAL_AuditLogListView extends WP_List_Table {
512
  */
513
  return apply_filters( 'wsal_auditlog_row_user_data', $row_user_data, $this->current_alert_id );
514
  case 'scip':
515
- $scip = $item->GetSourceIP();
516
  if ( is_string( $scip ) ) {
517
  $scip = str_replace( array( '"', '[', ']' ), '', $scip );
518
  }
@@ -566,7 +580,7 @@ class WSAL_AuditLogListView extends WP_List_Table {
566
  return ! $info ? ( 'Unknown Site ' . $item->site_id )
567
  : ( '<a href="' . esc_attr( $info->siteurl ) . '">' . esc_html( $info->blogname ) . '</a>' );
568
  case 'mesg':
569
- return '<div id="Event' . $item->id . '">' . $item->GetMessage( array( $this->_plugin->settings, 'meta_formatter' ) ) . '</div>';
570
  case 'data':
571
  $url = admin_url( 'admin-ajax.php' ) . '?action=AjaxInspector&amp;occurrence=' . $item->id;
572
  $tooltip = esc_attr__( 'View all details of this change', 'wp-security-audit-log' );
75
  */
76
  private $query_args;
77
 
78
+ /**
79
+ * Event Items Meta Array.
80
+ *
81
+ * @since 3.4
82
+ *
83
+ * @var array
84
+ */
85
+ private $item_meta = array();
86
+
87
  /**
88
  * Method: Constructor.
89
  *
203
  ( 'top' === $which && $this->_plugin->settings->is_infinite_scroll() )
204
  || ! $this->_plugin->settings->is_infinite_scroll()
205
  ) {
206
+ $curr = $this->_plugin->settings->get_view_site_id();
207
  ?>
208
  <div class="wsal-ssa wsal-ssa-<?php echo esc_attr( $which ); ?>">
209
  <?php if ( $this->get_site_count() > 15 ) : ?>
395
  // Get date format.
396
  $datetime_format = $this->_plugin->settings->GetDatetimeFormat();
397
 
398
+ // Store meta if not set.
399
+ if ( ! isset( $this->item_meta[ $item->getId() ] ) ) {
400
+ $this->item_meta[ $item->getId() ] = $item->GetMetaArray();
401
+ }
402
+
403
  // Store current alert id.
404
  $this->current_alert_id = $item->id;
405
 
454
  )
455
  ) : '<i>' . __( 'Unknown', 'wp-security-audit-log' ) . '</i>';
456
  case 'user':
457
+ $username = $item->GetUsername( $this->item_meta[ $item->getId() ] ); // Get username.
458
  $user = get_user_by( 'login', $username ); // Get user.
459
  if ( empty( $this->name_type ) ) {
460
  $this->name_type = $this->_plugin->settings->get_type_username();
487
  . '" target="_blank">' . esc_html( $display_name ) . '</a>';
488
  }
489
 
490
+ $roles = $item->GetUserRoles( $this->item_meta[ $item->getId() ] );
491
  if ( is_array( $roles ) && count( $roles ) ) {
492
  $roles = esc_html( ucwords( implode( ', ', $roles ) ) );
493
  } elseif ( is_string( $roles ) && '' != $roles ) {
526
  */
527
  return apply_filters( 'wsal_auditlog_row_user_data', $row_user_data, $this->current_alert_id );
528
  case 'scip':
529
+ $scip = $item->GetSourceIP( $this->item_meta[ $item->getId() ] );
530
  if ( is_string( $scip ) ) {
531
  $scip = str_replace( array( '"', '[', ']' ), '', $scip );
532
  }
580
  return ! $info ? ( 'Unknown Site ' . $item->site_id )
581
  : ( '<a href="' . esc_attr( $info->siteurl ) . '">' . esc_html( $info->blogname ) . '</a>' );
582
  case 'mesg':
583
+ return '<div id="Event' . $item->id . '">' . $item->GetMessage( array( $this->_plugin->settings, 'meta_formatter' ), false, $this->item_meta[ $item->getId() ] ) . '</div>';
584
  case 'data':
585
  $url = admin_url( 'admin-ajax.php' ) . '?action=AjaxInspector&amp;occurrence=' . $item->id;
586
  $tooltip = esc_attr__( 'View all details of this change', 'wp-security-audit-log' );
classes/Models/Occurrence.php CHANGED
@@ -106,10 +106,10 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
106
  public function SetMetaValue( $name, $value ) {
107
  if ( ! empty( $value ) ) {
108
  // Get meta adapter.
109
- $model = new WSAL_Models_Meta();
110
  $model->occurrence_id = $this->getId();
111
- $model->name = $name;
112
- $model->value = maybe_serialize( $value );
113
  $model->SaveMeta();
114
  }
115
  }
@@ -134,11 +134,11 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
134
  */
135
  public function GetMetaArray() {
136
  $result = array();
137
- $metas = $this->getAdapter()->GetMultiMeta( $this );
138
  foreach ( $metas as $meta ) {
139
  $result[ $meta->name ] = maybe_unserialize( $meta->value );
140
  }
141
- return $result;
142
  }
143
 
144
  /**
@@ -159,9 +159,10 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
159
  *
160
  * @param callable|null $meta_formatter - (Optional) Meta formatter callback.
161
  * @param mixed $highlight - (Optional) Highlight format.
 
162
  * @return string Full-formatted message.
163
  */
164
- public function GetMessage( $meta_formatter = null, $highlight = false ) {
165
  if ( ! isset( $this->_cachedmessage ) ) {
166
  // Get correct message entry.
167
  if ( $this->is_migrated ) {
@@ -171,7 +172,8 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
171
  $this->_cachedmessage = $this->GetAlert()->mesg;
172
  }
173
  // Fill variables in message.
174
- $this->_cachedmessage = $this->GetAlert()->GetMessage( $this->GetMetaArray(), $meta_formatter, $this->_cachedmessage, $this->getId(), $highlight );
 
175
  }
176
  return $this->_cachedmessage;
177
  }
@@ -193,16 +195,29 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
193
  * Gets the username.
194
  *
195
  * @see WSAL_Adapters_MySQL_Occurrence::GetFirstNamedMeta()
 
 
196
  * @return string User's username.
197
  */
198
- public function GetUsername() {
199
- $meta = $this->getAdapter()->GetFirstNamedMeta( $this, array( 'Username', 'CurrentUserID' ) );
200
- if ( $meta ) {
201
- switch ( true ) {
202
- case 'Username' == $meta->name:
203
- return $meta->value;
204
- case 'CurrentUserID' == $meta->name:
205
- return ($data = get_userdata( $meta->value )) ? $data->user_login : null;
 
 
 
 
 
 
 
 
 
 
 
206
  }
207
  }
208
  return null;
@@ -211,10 +226,14 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
211
  /**
212
  * Gets the Client IP.
213
  *
 
214
  * @return string IP address of request.
215
  */
216
- public function GetSourceIP() {
217
- return $this->GetMetaValue( 'ClientIP', '' );
 
 
 
218
  }
219
 
220
  /**
@@ -224,7 +243,7 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
224
  */
225
  public function GetOtherIPs() {
226
  $result = array();
227
- $data = (array) $this->GetMetaValue( 'OtherIPs', array() );
228
  foreach ( $data as $ips ) {
229
  foreach ( $ips as $ip ) {
230
  $result[] = $ip;
@@ -236,10 +255,14 @@ class WSAL_Models_Occurrence extends WSAL_Models_ActiveRecord {
236
  /**
237
  * Gets user roles.
238
  *
 
239
  * @return array Array of user roles.
240
  */
241
- public function GetUserRoles() {
242
- return $this->GetMetaValue( 'CurrentUserRoles', array() );
 
 
 
243
  }
244
 
245
  /**
106
  public function SetMetaValue( $name, $value ) {
107
  if ( ! empty( $value ) ) {
108
  // Get meta adapter.
109
+ $model = new WSAL_Models_Meta();
110
  $model->occurrence_id = $this->getId();
111
+ $model->name = $name;
112
+ $model->value = maybe_serialize( $value );
113
  $model->SaveMeta();
114
  }
115
  }
134
  */
135
  public function GetMetaArray() {
136
  $result = array();
137
+ $metas = $this->getAdapter()->GetMultiMeta( $this );
138
  foreach ( $metas as $meta ) {
139
  $result[ $meta->name ] = maybe_unserialize( $meta->value );
140
  }
141
+ return $result;
142
  }
143
 
144
  /**
159
  *
160
  * @param callable|null $meta_formatter - (Optional) Meta formatter callback.
161
  * @param mixed $highlight - (Optional) Highlight format.
162
+ * @param array $meta - Occurrence meta array.
163
  * @return string Full-formatted message.
164
  */
165
+ public function GetMessage( $meta_formatter = null, $highlight = false, $meta = null ) {
166
  if ( ! isset( $this->_cachedmessage ) ) {
167
  // Get correct message entry.
168
  if ( $this->is_migrated ) {
172
  $this->_cachedmessage = $this->GetAlert()->mesg;
173
  }
174
  // Fill variables in message.
175
+ $meta_array = null === $meta ? $this->GetMetaArray() : $meta;
176
+ $this->_cachedmessage = $this->GetAlert()->GetMessage( $meta_array, $meta_formatter, $this->_cachedmessage, $this->getId(), $highlight );
177
  }
178
  return $this->_cachedmessage;
179
  }
195
  * Gets the username.
196
  *
197
  * @see WSAL_Adapters_MySQL_Occurrence::GetFirstNamedMeta()
198
+ *
199
+ * @param array $meta - Occurrence meta array.
200
  * @return string User's username.
201
  */
202
+ public function GetUsername( $meta = null ) {
203
+ if ( null === $meta ) {
204
+ $meta = $this->getAdapter()->GetFirstNamedMeta( $this, array( 'Username', 'CurrentUserID' ) );
205
+
206
+ if ( $meta ) {
207
+ switch ( true ) {
208
+ case 'Username' === $meta->name:
209
+ return $meta->value;
210
+ case 'CurrentUserID' === $meta->name:
211
+ $data = get_userdata( $meta->value );
212
+ return $data ? $data->user_login : null;
213
+ }
214
+ }
215
+ } else {
216
+ if ( isset( $meta['Username'] ) ) {
217
+ return $meta['Username'];
218
+ } elseif ( isset( $meta['CurrentUserID'] ) ) {
219
+ $data = get_userdata( $meta['CurrentUserID'] );
220
+ return $data ? $data->user_login : null;
221
  }
222
  }
223
  return null;
226
  /**
227
  * Gets the Client IP.
228
  *
229
+ * @param array $meta - Occurrence meta array.
230
  * @return string IP address of request.
231
  */
232
+ public function GetSourceIP( $meta = null ) {
233
+ if ( null === $meta ) {
234
+ return $this->GetMetaValue( 'ClientIP', '' );
235
+ }
236
+ return isset( $meta['ClientIP'] ) ? $meta['ClientIP'] : '';
237
  }
238
 
239
  /**
243
  */
244
  public function GetOtherIPs() {
245
  $result = array();
246
+ $data = (array) $this->GetMetaValue( 'OtherIPs', array() );
247
  foreach ( $data as $ips ) {
248
  foreach ( $ips as $ip ) {
249
  $result[] = $ip;
255
  /**
256
  * Gets user roles.
257
  *
258
+ * @param array $meta - Occurrence meta array.
259
  * @return array Array of user roles.
260
  */
261
+ public function GetUserRoles( $meta = null ) {
262
+ if ( null === $meta ) {
263
+ return $this->GetMetaValue( 'CurrentUserRoles', array() );
264
+ }
265
+ return isset( $meta['CurrentUserRoles'] ) ? $meta['CurrentUserRoles'] : array();
266
  }
267
 
268
  /**
classes/Sensors/Comments.php CHANGED
@@ -43,7 +43,7 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
43
  add_action( 'trashed_comment', array( $this, 'EventCommentTrash' ), 10, 1 );
44
  add_action( 'untrashed_comment', array( $this, 'EventCommentUntrash' ), 10, 1 );
45
  add_action( 'deleted_comment', array( $this, 'EventCommentDeleted' ), 10, 1 );
46
- add_action( 'comment_post', array( $this, 'EventComment' ), 10, 2 );
47
  }
48
 
49
  /**
@@ -52,7 +52,6 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
52
  * @param integer $comment_id - Comment ID.
53
  */
54
  public function EventCommentEdit( $comment_id ) {
55
- $comment = get_comment( $comment_id );
56
  $this->EventGeneric( $comment_id, 2093 );
57
  }
58
 
@@ -64,7 +63,7 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
64
  * @param stdClass $comment - Comment.
65
  */
66
  public function EventCommentApprove( $new_status, $old_status, $comment ) {
67
- if ( ! empty( $comment ) && $old_status != $new_status ) {
68
  $post = get_post( $comment->comment_post_ID );
69
  $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment->comment_ID;
70
  $fields = array(
@@ -74,10 +73,10 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
74
  'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
75
  );
76
 
77
- if ( 'approved' == $new_status ) {
78
  $this->plugin->alerts->Trigger( 2090, $fields );
79
  }
80
- if ( 'unapproved' == $new_status ) {
81
  $this->plugin->alerts->Trigger( 2091, $fields );
82
  }
83
  }
@@ -133,43 +132,42 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
133
  *
134
  * @param int $comment_id The comment ID.
135
  * @param int|string $comment_approved 1 if the comment is approved, 0 if not, 'spam' if spam.
 
136
  */
137
- public function EventComment( $comment_id, $comment_approved = null ) {
138
- // Filter $_POST array for security.
139
- $post_array = filter_input_array( INPUT_POST );
140
-
141
- if ( isset( $post_array['action'] ) && 'replyto-comment' == $post_array['action'] ) {
142
  $this->EventGeneric( $comment_id, 2092 );
 
143
  }
144
- if ( isset( $post_array['comment'] ) ) {
145
- $comment = get_comment( $comment_id );
146
- if ( ! empty( $comment ) ) {
147
- if ( 'spam' != $comment->comment_approved ) {
148
- $post = get_post( $comment->comment_post_ID );
149
- $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
150
- $fields = array(
151
- 'Date' => $comment->comment_date,
152
- 'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
153
- );
154
-
155
- // Get user data.
156
- $user_data = get_user_by( 'email', $comment->comment_author_email );
157
-
158
- if ( $user_data && $user_data instanceof WP_User ) {
159
- // Get user roles.
160
- $user_roles = $user_data->roles;
161
-
162
- // Check if superadmin.
163
- if ( function_exists( 'is_super_admin' ) && is_super_admin() ) {
164
- $user_roles[] = 'superadmin';
165
- }
166
-
167
- // Set the fields.
168
- $fields['Username'] = $user_data->user_login;
169
- $fields['CurrentUserRoles'] = $user_roles;
170
- $fields['CommentMsg'] = sprintf( 'Posted a comment in response to the post <strong>%s</strong>', $post->post_title );
171
- $this->plugin->alerts->Trigger( 2099, $fields );
172
  }
 
 
 
 
 
 
173
  }
174
  }
175
  }
@@ -183,7 +181,7 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
183
  */
184
  private function EventGeneric( $comment_id, $alert_code ) {
185
  $comment = get_comment( $comment_id );
186
- if ( ! empty( $comment ) ) {
187
  $post = get_post( $comment->comment_post_ID );
188
  $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
189
  $fields = array(
43
  add_action( 'trashed_comment', array( $this, 'EventCommentTrash' ), 10, 1 );
44
  add_action( 'untrashed_comment', array( $this, 'EventCommentUntrash' ), 10, 1 );
45
  add_action( 'deleted_comment', array( $this, 'EventCommentDeleted' ), 10, 1 );
46
+ add_action( 'comment_post', array( $this, 'EventComment' ), 10, 3 );
47
  }
48
 
49
  /**
52
  * @param integer $comment_id - Comment ID.
53
  */
54
  public function EventCommentEdit( $comment_id ) {
 
55
  $this->EventGeneric( $comment_id, 2093 );
56
  }
57
 
63
  * @param stdClass $comment - Comment.
64
  */
65
  public function EventCommentApprove( $new_status, $old_status, $comment ) {
66
+ if ( ! empty( $comment ) && $old_status !== $new_status ) {
67
  $post = get_post( $comment->comment_post_ID );
68
  $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment->comment_ID;
69
  $fields = array(
73
  'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
74
  );
75
 
76
+ if ( 'approved' === $new_status ) {
77
  $this->plugin->alerts->Trigger( 2090, $fields );
78
  }
79
+ if ( 'unapproved' === $new_status ) {
80
  $this->plugin->alerts->Trigger( 2091, $fields );
81
  }
82
  }
132
  *
133
  * @param int $comment_id The comment ID.
134
  * @param int|string $comment_approved 1 if the comment is approved, 0 if not, 'spam' if spam.
135
+ * @param array $comment_data Comment data.
136
  */
137
+ public function EventComment( $comment_id, $comment_approved, $comment_data ) {
138
+ // Check if the comment is response to another comment.
139
+ if ( isset( $comment_data['comment_parent'] ) && $comment_data['comment_parent'] ) {
 
 
140
  $this->EventGeneric( $comment_id, 2092 );
141
+ return;
142
  }
143
+
144
+ $comment = get_comment( $comment_id );
145
+ if ( $comment ) {
146
+ if ( 'spam' !== $comment->comment_approved ) {
147
+ $post = get_post( $comment->comment_post_ID );
148
+ $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
149
+ $fields = array(
150
+ 'Date' => $comment->comment_date,
151
+ 'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
152
+ );
153
+
154
+ // Get user data.
155
+ $user_data = get_user_by( 'email', $comment->comment_author_email );
156
+
157
+ if ( $user_data && $user_data instanceof WP_User ) {
158
+ // Get user roles.
159
+ $user_roles = $user_data->roles;
160
+
161
+ // Check if superadmin.
162
+ if ( function_exists( 'is_super_admin' ) && is_super_admin() ) {
163
+ $user_roles[] = 'superadmin';
 
 
 
 
 
 
 
164
  }
165
+
166
+ // Set the fields.
167
+ $fields['Username'] = $user_data->user_login;
168
+ $fields['CurrentUserRoles'] = $user_roles;
169
+ $fields['CommentMsg'] = sprintf( 'Posted a comment in response to the post <strong>%s</strong>', $post->post_title );
170
+ $this->plugin->alerts->Trigger( 2099, $fields );
171
  }
172
  }
173
  }
181
  */
182
  private function EventGeneric( $comment_id, $alert_code ) {
183
  $comment = get_comment( $comment_id );
184
+ if ( $comment ) {
185
  $post = get_post( $comment->comment_post_ID );
186
  $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
187
  $fields = array(
classes/Sensors/Content.php CHANGED
@@ -16,43 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
16
  /**
17
  * WordPress contents (posts, pages and custom posts).
18
  *
19
- * 2000 User created a new blog post and saved it as draft
20
- * 2001 User published a blog post
21
- * 2002 User modified a published blog post
22
- * 2008 User permanently deleted a blog post from the trash
23
- * 2012 User moved a blog post to the trash
24
- * 2014 User restored a blog post from trash
25
- * 2016 User changed blog post category
26
- * 2017 User changed blog post URL
27
- * 2019 User changed blog post author
28
- * 2021 User changed blog post status
29
- * 2023 User created new category
30
- * 2024 User deleted category
31
- * 2025 User changed the visibility of a blog post
32
- * 2027 User changed the date of a blog post
33
- * 2047 User changed the parent of a page
34
- * 2048 User changed the template of a page
35
- * 2049 User set a post as sticky
36
- * 2050 User removed post from sticky
37
- * 2052 User changed generic tables
38
- * 2065 User modified content for a published post
39
- * 2073 User submitted a post for review
40
- * 2074 User scheduled a post
41
- * 2086 User changed title of a post
42
- * 2100 User opened a post in the editor
43
- * 2101 User viewed a post
44
- * 2111 User disabled Comments/Trackbacks and Pingbacks on a published post
45
- * 2112 User enabled Comments/Trackbacks and Pingbacks on a published post
46
- * 2119 User added blog post tag
47
- * 2120 User removed blog post tag
48
- * 2121 User created new tag
49
- * 2122 User deleted tag
50
- * 2123 User renamed tag
51
- * 2124 User changed tag slug
52
- * 2125 User changed tag description
53
- *
54
  * @package Wsal
55
- * @subpackage Sensors
56
  */
57
  class WSAL_Sensors_Content extends WSAL_AbstractSensor {
58
 
@@ -109,28 +73,23 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
109
  * Listening to events using WP hooks.
110
  */
111
  public function HookEvents() {
112
- if ( current_user_can( 'edit_posts' ) ) {
113
- add_action( 'admin_init', array( $this, 'EventWordPressInit' ) );
114
- }
115
- add_action( 'transition_post_status', array( $this, 'EventPostChanged' ), 10, 3 );
116
- add_action( 'delete_post', array( $this, 'EventPostDeleted' ), 10, 1 );
117
- add_action( 'wp_trash_post', array( $this, 'EventPostTrashed' ), 10, 1 );
118
- add_action( 'untrash_post', array( $this, 'EventPostUntrashed' ) );
119
- add_action( 'edit_category', array( $this, 'EventChangedCategoryParent' ) );
120
- add_action( 'wp_insert_post', array( $this, 'SetRevisionLink' ), 10, 3 );
121
- add_action( 'publish_future_post', array( $this, 'EventPublishFuture' ), 10, 1 );
122
- add_filter( 'post_edit_form_tag', array( $this, 'EditingPost' ), 10, 1 );
123
- add_action( 'wp_head', array( $this, 'viewing_post' ), 10 );
124
- add_action( 'create_category', array( $this, 'EventCategoryCreation' ), 10, 1 );
125
- add_action( 'create_post_tag', array( $this, 'EventTagCreation' ), 10, 1 );
126
- add_filter( 'wp_update_term_data', array( $this, 'event_terms_rename' ), 10, 4 );
127
  add_action( 'admin_action_edit', array( $this, 'edit_post_in_gutenberg' ), 10 );
128
- add_action( 'pre_post_update', array( $this, 'gutenberg_post_edit_init' ), 10, 2 );
129
- add_action( 'save_post', array( $this, 'gutenberg_post_changed' ), 10, 3 );
130
- add_action( 'set_object_terms', array( $this, 'gutenberg_post_terms_changed' ), 10, 4 );
131
- add_action( 'post_stuck', array( $this, 'gutenberg_post_stuck' ), 10, 1 );
132
- add_action( 'post_unstuck', array( $this, 'gutenberg_post_unstuck' ), 10, 1 );
133
  add_action( 'pre_delete_term', array( $this, 'check_taxonomy_term_deletion' ), 10, 2 );
 
 
134
 
135
  // Check if MainWP Child Plugin exists.
136
  if ( is_plugin_active( 'mainwp-child/mainwp-child.php' ) ) {
@@ -139,1761 +98,1195 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
139
  }
140
 
141
  /**
142
- * Return Post Event Data.
143
  *
144
- * @since 3.2.4
145
  *
146
- * @param WP_Post $post - WP Post object.
147
- * @return mixed
148
  */
149
- public function get_post_event_data( $post ) {
 
 
 
 
150
  if ( ! empty( $post ) && $post instanceof WP_Post ) {
151
- $event_data = array(
152
- 'PostID' => $post->ID,
153
- 'PostType' => $post->post_type,
154
- 'PostTitle' => $post->post_title,
155
- 'PostStatus' => $post->post_status,
156
- 'PostDate' => $post->post_date,
157
- 'PostUrl' => get_permalink( $post->ID ),
158
- );
159
- return $event_data;
160
  }
161
- return false;
162
  }
163
 
164
  /**
165
- * Method: Triggered when terms are renamed.
166
  *
167
- * @param array $data Term data to be updated.
168
- * @param int $term_id Term ID.
169
- * @param string $taxonomy Taxonomy slug.
170
- * @param array $args Arguments passed to wp_update_term().
171
- * @since 2.6.9
172
  */
173
- public function event_terms_rename( $data, $term_id, $taxonomy, $args ) {
174
- // Check if the taxonomy is `post tag`.
175
- if ( 'post_tag' === $taxonomy ) {
176
- // Get data.
177
- $new_name = ( isset( $data['name'] ) ) ? $data['name'] : false;
178
- $new_slug = ( isset( $data['slug'] ) ) ? $data['slug'] : false;
179
- $new_desc = ( isset( $args['description'] ) ) ? $args['description'] : false;
180
-
181
- // Get old data.
182
- $term = get_term( $term_id, $taxonomy );
183
- $old_name = $term->name;
184
- $old_slug = $term->slug;
185
- $old_desc = $term->description;
186
- $term_link = $this->get_tag_link( $term_id );
187
 
188
- // Update if both names are not same.
189
- if ( $old_name !== $new_name ) {
190
- $this->plugin->alerts->Trigger(
191
- 2123, array(
192
- 'old_name' => $old_name,
193
- 'new_name' => $new_name,
194
- 'TagLink' => $term_link,
195
- )
196
- );
197
- }
198
 
199
- // Update if both slugs are not same.
200
- if ( $old_slug !== $new_slug ) {
201
- $this->plugin->alerts->Trigger(
202
- 2124, array(
203
- 'tag' => $new_name,
204
- 'old_slug' => $old_slug,
205
- 'new_slug' => $new_slug,
206
- 'TagLink' => $term_link,
207
- )
208
- );
209
  }
 
 
210
 
211
- // Update if both descriptions are not same.
212
- if ( $old_desc !== $new_desc ) {
213
- $this->plugin->alerts->Trigger(
214
- 2125, array(
215
- 'tag' => $new_name,
216
- 'TagLink' => $term_link,
217
- 'old_desc' => $old_desc,
218
- 'new_desc' => $new_desc,
219
- 'ReportText' => $old_desc . '|' . $new_desc,
220
- )
221
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  }
223
- } elseif ( 'category' === $taxonomy ) { // Check if the taxonomy is `category`.
224
- // Get new data.
225
- $new_name = ( isset( $data['name'] ) ) ? $data['name'] : false;
226
- $new_slug = ( isset( $data['slug'] ) ) ? $data['slug'] : false;
227
-
228
- // Get old data.
229
- $term = get_term( $term_id, $taxonomy );
230
- $old_name = $term->name;
231
- $old_slug = $term->slug;
232
- $term_link = $this->get_tag_link( $term_id );
233
 
234
- // Log event if both names are not same.
235
- if ( $old_name !== $new_name ) {
236
- $this->plugin->alerts->Trigger(
237
- 2127, array(
238
- 'old_name' => $old_name,
239
- 'new_name' => $new_name,
240
- 'cat_link' => $term_link,
241
- )
242
- );
243
- }
244
 
245
- // Log event if both slugs are not same.
246
- if ( $old_slug !== $new_slug ) {
247
- $this->plugin->alerts->Trigger(
248
- 2128, array(
249
- 'CategoryName' => $new_name,
250
- 'old_slug' => $old_slug,
251
- 'new_slug' => $new_slug,
252
- 'cat_link' => $term_link,
253
- )
254
- );
 
 
 
255
  }
 
 
 
256
  }
257
-
258
- // Return data for the filter.
259
- return $data;
260
  }
261
 
262
  /**
263
- * Gets the alert code based on the type of post.
264
  *
265
- * @param stdClass $post - The post.
266
- * @param integer $type_post - Alert code type post.
267
- * @param integer $type_page - Alert code type page.
268
- * @param integer $type_custom - Alert code type custom.
269
- * @return integer - Alert code.
270
  */
271
- protected function GetEventTypeForPostType( $post, $type_post, $type_page, $type_custom ) {
272
- switch ( $post->post_type ) {
273
- case 'page':
274
- return $type_page;
275
- case 'post':
276
- return $type_post;
277
- default:
278
- return $type_custom;
279
  }
280
- }
281
 
282
- /**
283
- * Triggered when a user accesses the admin area.
284
- */
285
- public function EventWordPressInit() {
286
- // Load old data, if applicable.
287
- $this->RetrieveOldData();
 
 
 
 
 
288
  }
289
 
290
  /**
291
- * Retrieve Old data.
292
  *
293
- * @global mixed $_POST - Post data.
294
  */
295
- protected function RetrieveOldData() {
296
- // Set filter input args.
297
- $filter_input_args = array(
298
- 'post_ID' => FILTER_VALIDATE_INT,
299
- '_wpnonce' => FILTER_SANITIZE_STRING,
300
- 'action' => FILTER_SANITIZE_STRING,
301
- );
302
-
303
- // Filter $_POST array for security.
304
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
305
-
306
- if ( isset( $post_array['_wpnonce'] )
307
- && isset( $post_array['post_ID'] )
308
- && wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
309
- if ( isset( $post_array ) && isset( $post_array['post_ID'] )
310
- && ! ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
311
- && ! ( isset( $post_array['action'] ) && 'autosave' == $post_array['action'] )
312
- ) {
313
- $post_id = intval( $post_array['post_ID'] );
314
- $this->_old_post = get_post( $post_id );
315
- $this->_old_link = get_permalink( $post_id );
316
- $this->_old_tmpl = $this->GetPostTemplate( $this->_old_post );
317
- $this->_old_cats = $this->GetPostCategories( $this->_old_post );
318
- $this->_old_tags = $this->get_post_tags( $this->_old_post );
319
- $this->_old_stky = in_array( $post_id, get_option( 'sticky_posts' ) );
320
- }
321
- } elseif ( isset( $post_array['post_ID'] ) && current_user_can( 'edit_post', $post_array['post_ID'] ) ) {
322
- $post_id = intval( $post_array['post_ID'] );
323
- $this->_old_post = get_post( $post_id );
324
- $this->_old_link = get_permalink( $post_id );
325
- $this->_old_tmpl = $this->GetPostTemplate( $this->_old_post );
326
- $this->_old_cats = $this->GetPostCategories( $this->_old_post );
327
- $this->_old_tags = $this->get_post_tags( $this->_old_post );
328
- $this->_old_stky = in_array( $post_id, get_option( 'sticky_posts' ) );
329
- }
330
  }
331
 
332
  /**
333
- * Method: Collect old post data before MainWP Post update event.
334
  *
335
- * @param array $new_post - Array of new post data.
336
- * @param array $post_custom - Array of data related to MainWP.
337
  */
338
- public function event_mainwp_init( $new_post, $post_custom ) {
339
- // Get post id.
340
- $post_id = isset( $post_custom['_mainwp_edit_post_id'][0] ) ? $post_custom['_mainwp_edit_post_id'][0] : false;
341
-
342
- // Check if ID exists.
343
- if ( $post_id ) {
344
- // Get post.
345
- $post = get_post( $post_id );
346
-
347
- // If post exists.
348
- if ( ! empty( $post ) ) {
349
- $this->_old_post = $post;
350
- $this->_old_link = get_permalink( $post_id );
351
- $this->_old_tmpl = $this->GetPostTemplate( $this->_old_post );
352
- $this->_old_cats = $this->GetPostCategories( $this->_old_post );
353
- $this->_old_tags = $this->get_post_tags( $this->_old_post );
354
- $this->_old_stky = in_array( $post_id, get_option( 'sticky_posts' ) );
355
- }
356
- }
357
  }
358
 
359
  /**
360
- * Method: Collect old post data before post update event in gutenberg.
361
- *
362
- * @since 3.2.4
363
  *
364
- * @param int $post_id - Post ID.
365
- * @param array $post_data - Array of post data.
366
  */
367
- public function gutenberg_post_edit_init( $post_id, $post_data ) {
368
- // Check if rest api request constant is set.
369
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
370
- // Get post.
371
- $post = get_post( $post_id );
 
372
 
373
- // If post exists.
374
- if ( ! empty( $post ) && $post instanceof WP_Post ) {
375
- $this->_old_post = $post;
376
- $this->_old_link = get_permalink( $post_id );
377
- $this->_old_tmpl = $this->GetPostTemplate( $this->_old_post );
378
- $this->_old_cats = $this->GetPostCategories( $this->_old_post );
379
- $this->_old_tags = $this->get_post_tags( $this->_old_post );
380
- $this->_old_stky = in_array( $post_id, get_option( 'sticky_posts' ) );
381
- $this->old_status = $post->post_status;
382
  }
 
 
 
383
  }
384
  }
385
 
386
  /**
387
- * Get the template path.
388
  *
389
- * @param WP_Post $post - The post.
390
- * @return string - Full path to file.
391
  */
392
- protected function GetPostTemplate( $post ) {
393
- if ( ! isset( $post->ID ) ) {
394
- return '';
 
 
395
  }
396
 
397
- $id = $post->ID;
398
- $template = get_page_template_slug( $id );
399
- $pagename = $post->post_name;
400
 
401
- $templates = array();
402
- if ( $template && 0 === validate_file( $template ) ) {
403
- $templates[] = $template;
404
- }
405
- if ( $pagename ) {
406
- $templates[] = "page-$pagename.php";
407
- }
408
- if ( $id ) {
409
- $templates[] = "page-$id.php";
 
 
 
410
  }
411
- $templates[] = 'page.php';
412
-
413
- return get_query_template( 'page', $templates );
414
  }
415
 
416
  /**
417
- * Get post categories (array of category names).
418
  *
419
- * @param stdClass $post - The post.
420
- * @return array - List of categories.
421
  */
422
- protected function GetPostCategories( $post ) {
423
- if ( ! isset( $post->ID ) ) {
424
- return array();
 
 
425
  }
426
 
427
- return wp_get_post_categories(
428
- $post->ID, array(
429
- 'fields' => 'names',
430
- )
431
- );
 
 
 
 
 
 
 
 
 
 
 
 
432
  }
433
 
434
  /**
435
- * Get post tags (array of tag names).
436
  *
437
- * @param stdClass $post - The post.
438
- * @return array - List of tags.
439
  */
440
- protected function get_post_tags( $post ) {
441
- if ( ! isset( $post->ID ) ) {
442
- return array();
443
- }
444
 
445
- return wp_get_post_tags(
446
- $post->ID, array(
447
- 'fields' => 'names',
448
- )
449
- );
 
 
 
 
 
 
 
 
 
 
 
 
450
  }
451
 
452
  /**
453
- * Check all the post changes.
454
  *
455
- * @param string $new_status - New status.
456
- * @param string $old_status - Old status.
457
- * @param stdClass $post - The post.
458
  */
459
- public function EventPostChanged( $new_status, $old_status, $post ) {
460
- // Ignorable states.
461
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
462
- return;
463
- }
464
- if ( empty( $post->post_type ) ) {
465
- return;
466
- }
467
- if ( in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
468
- return;
469
- }
470
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
471
  return;
472
  }
473
 
474
- // Check if Yoast SEO is active; only on websites with WordPress version greater than 5.0.
475
- $is_yoast = is_plugin_active( 'wordpress-seo/wp-seo.php' ) || is_plugin_active( 'wordpress-seo-premium/wp-seo-premium.php' );
476
- if ( version_compare( get_bloginfo( 'version' ), '5.0.0', '>' ) && $is_yoast && ! isset( $_POST['classic-editor'] ) ) {
 
 
 
477
  return;
478
  }
479
 
480
- // Set filter input args.
481
- $filter_input_args = array(
482
- 'post_ID' => FILTER_VALIDATE_INT,
483
- '_wpnonce' => FILTER_SANITIZE_STRING,
484
- 'original_post_status' => FILTER_SANITIZE_STRING,
485
- 'sticky' => FILTER_SANITIZE_STRING,
486
- 'action' => FILTER_SANITIZE_STRING,
487
- '_inline_edit' => FILTER_SANITIZE_STRING,
488
- 'mainwpsignature' => FILTER_SANITIZE_STRING,
489
- 'function' => FILTER_SANITIZE_STRING,
490
- 'new_post' => FILTER_SANITIZE_STRING,
491
- 'post_custom' => FILTER_SANITIZE_STRING,
492
- );
493
-
494
- // Filter $_POST array for security.
495
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
496
-
497
- // Check MainWP $_POST members.
498
- $new_post = isset( $post_array['new_post'] ) ? $post_array['new_post'] : false;
499
- $post_custom = isset( $post_array['post_custom'] ) ? $post_array['post_custom'] : false;
500
- $post_custom = maybe_unserialize( base64_decode( $post_custom ) );
501
-
502
- // Verify nonce.
503
- if (
504
- isset( $post_array['_wpnonce'] )
505
- && isset( $post_array['post_ID'] )
506
- && wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] )
507
- ) {
508
- // Edit Post Screen.
509
- $original = isset( $post_array['original_post_status'] ) ? $post_array['original_post_status'] : '';
510
- $this->trigger_post_change_alerts( $old_status, $new_status, $post, $original, isset( $post_array['sticky'] ) );
511
- } elseif (
512
- isset( $post_array['_inline_edit'] )
513
- && 'inline-save' === $post_array['action']
514
- && wp_verify_nonce( $post_array['_inline_edit'], 'inlineeditnonce' )
515
- ) {
516
- // Quick Post Edit.
517
- $original = isset( $post_array['original_post_status'] ) ? $post_array['original_post_status'] : '';
518
- $this->trigger_post_change_alerts( $old_status, $new_status, $post, $original, isset( $post_array['sticky'] ) );
519
- } elseif (
520
- isset( $post_array['mainwpsignature'] )
521
- && ! empty( $new_post )
522
- && ! empty( $post_custom )
523
- ) {
524
- // Check sticky post.
525
- $sticky = false;
526
- if ( isset( $post_custom['_sticky'] ) && is_array( $post_custom['_sticky'] ) ) {
527
- foreach ( $post_custom['_sticky'] as $key => $meta_value ) {
528
- if ( 'sticky' === base64_decode( $meta_value ) ) {
529
- $sticky = true;
530
- }
531
- }
532
- }
533
- $this->trigger_post_change_alerts( $old_status, $new_status, $post, false, $sticky, 'mainwp' );
534
- } elseif (
535
- isset( $post_array['mainwpsignature'] )
536
- && isset( $post_array['function'] )
537
- && 'post_action' === $post_array['function']
538
- && isset( $post_array['action'] )
539
- && ( 'unpublish' === $post_array['action'] || 'publish' === $post_array['action'] )
540
- ) {
541
- $this->check_mainwp_status_change( $post, $old_status, $new_status );
542
- } else {
543
- // Ignore nav menu post type or post revision.
544
- if ( wp_is_post_revision( $post->ID ) ) {
545
- return;
546
- }
547
-
548
- $event = 0;
549
- if ( 'auto-draft' === $old_status && ( 'auto-draft' !== $new_status && 'inherit' !== $new_status ) ) {
550
- // Post published.
551
- $event = 2001;
552
- } elseif ( 'auto-draft' === $new_status || ( 'new' === $old_status && 'inherit' === $new_status ) ) {
553
- // Ignore it.
554
- } elseif ( 'trash' === $new_status ) {
555
- // Post deleted.
556
- } elseif ( 'trash' === $old_status ) {
557
- // Post restored.
558
- } else {
559
- // Post edited.
560
- $event = 2002;
561
- }
562
-
563
- if ( $event ) {
564
- // Get event data.
565
- $editor_link = $this->GetEditorLink( $post ); // Editor link.
566
- $event_data = $this->get_post_event_data( $post ); // Post event data.
567
-
568
- // Set editor link in the event data.
569
- $event_data[ $editor_link['name'] ] = $editor_link['value'];
570
 
571
- // Log the event.
572
- $this->plugin->alerts->Trigger( $event, $event_data );
573
- }
574
  }
575
  }
576
 
577
  /**
578
- * Method: Trigger Post Change Alerts.
579
  *
580
- * @param string $old_status - Old status.
581
- * @param string $new_status - New status.
582
- * @param stdClass $post - The post.
583
- * @param string $original - Original Post Status.
584
- * @param string $sticky - Sticky post.
585
- * @param string $dashboard - Dashboard from which the change is coming from.
586
- * @since 1.0.0
587
  */
588
- public function trigger_post_change_alerts( $old_status, $new_status, $post, $original, $sticky, $dashboard = false ) {
589
- WSAL_Sensors_Request::SetVars(
590
- array(
591
- '$new_status' => $new_status,
592
- '$old_status' => $old_status,
593
- '$original' => $original,
594
- )
595
- );
596
- // Run checks.
597
- if ( $this->_old_post && ! $dashboard ) { // Change is coming from WP Dashboard.
598
- if ( $this->CheckOtherSensors( $this->_old_post ) ) {
599
- return;
600
- }
601
- if ( 'auto-draft' == $old_status || 'auto-draft' == $original ) {
602
- // Handle create post events.
603
- $this->CheckPostCreation( $this->_old_post, $post );
604
- } else {
605
- // Handle update post events.
606
- $changes = 0;
607
- $changes = $this->CheckAuthorChange( $this->_old_post, $post )
608
- + $this->CheckStatusChange( $this->_old_post, $post )
609
- + $this->CheckParentChange( $this->_old_post, $post )
610
- + $this->CheckStickyChange( $this->_old_stky, $sticky, $post )
611
- + $this->CheckVisibilityChange( $this->_old_post, $post, $old_status, $new_status )
612
- + $this->CheckTemplateChange( $this->_old_tmpl, $this->GetPostTemplate( $post ), $post )
613
- + $this->CheckCategoriesChange( $this->_old_cats, $this->GetPostCategories( $post ), $post )
614
- + $this->check_tags_change( $this->_old_tags, $this->get_post_tags( $post ), $post )
615
- + $this->CheckDateChange( $this->_old_post, $post )
616
- + $this->CheckPermalinkChange( $this->_old_link, get_permalink( $post->ID ), $post )
617
- + $this->CheckCommentsPings( $this->_old_post, $post );
618
-
619
- $this->CheckModificationChange( $post->ID, $this->_old_post, $post, $changes );
620
- }
621
- } elseif ( ! $this->_old_post && 'mainwp' === $dashboard ) {
622
- if ( $this->CheckOtherSensors( $this->_old_post ) ) {
623
- return;
624
- }
625
- if ( 'auto-draft' === $old_status ) {
626
- // Handle create post events.
627
- $this->CheckPostCreation( $this->_old_post, $post );
628
- }
629
- } elseif ( $this->_old_post && 'mainwp' === $dashboard ) {
630
- if ( 'auto-draft' === $old_status ) {
631
- // Get MainWP $_POST members.
632
- // @codingStandardsIgnoreStart
633
- $new_post = isset( $_POST['new_post'] ) ? sanitize_text_field( wp_unslash( $_POST['new_post'] ) ) : false;
634
- // @codingStandardsIgnoreEnd
635
-
636
- // Get WordPress Post.
637
- $new_post = maybe_unserialize( base64_decode( $new_post ) );
638
- $post_catgs = filter_input( INPUT_POST, 'post_category', FILTER_SANITIZE_STRING );
639
-
640
- // Post categories.
641
- $post_categories = rawurldecode( isset( $post_catgs ) ? base64_decode( $post_catgs ) : null );
642
- $post_categories = explode( ',', $post_categories );
643
-
644
- // Post tags.
645
- $post_tags = rawurldecode( isset( $new_post['post_tags'] ) ? $new_post['post_tags'] : null );
646
- $post_tags = sanitize_text_field( $post_tags ); // Sanitize the string of tags.
647
- $post_tags = str_replace( ' ', '', $post_tags );
648
- $post_tags = explode( ',', $post_tags );
649
-
650
- // Handle update post events.
651
- $changes = 0;
652
- $changes = $this->CheckAuthorChange( $this->_old_post, $post )
653
- + $this->CheckStatusChange( $this->_old_post, $post )
654
- + $this->CheckParentChange( $this->_old_post, $post )
655
- + $this->CheckStickyChange( $this->_old_stky, $sticky, $post )
656
- + $this->CheckVisibilityChange( $this->_old_post, $post, $old_status, $new_status )
657
- + $this->CheckTemplateChange( $this->_old_tmpl, $this->GetPostTemplate( $post ), $post )
658
- + $this->CheckCategoriesChange( $this->_old_cats, $post_categories, $post )
659
- + $this->check_tags_change( $this->_old_tags, $post_tags, $post )
660
- + $this->CheckDateChange( $this->_old_post, $post )
661
- + $this->CheckPermalinkChange( $this->_old_link, get_permalink( $post->ID ), $post )
662
- + $this->CheckCommentsPings( $this->_old_post, $post );
663
-
664
- $this->CheckModificationChange( $post->ID, $this->_old_post, $post, $changes );
665
- }
666
  }
 
667
  }
668
 
669
  /**
670
- * Check all the post changes.
671
- *
672
- * @since 3.2.4
673
  *
674
- * @param integer $post_id - Post ID.
675
- * @param WP_Post $post - WP Post object.
676
- * @param boolean $update - True if post update, false if post is new.
677
  */
678
- public function gutenberg_post_changed( $post_id, $post, $update ) {
679
- // Ignorable states.
680
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
681
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
682
- // Check post creation event.
683
- if ( 'auto-draft' === $this->_old_post->post_status && 'draft' === $post->post_status ) {
684
- $this->CheckPostCreation( $this->_old_post, $post, true );
685
- }
686
  }
687
- return;
688
- }
689
-
690
- if ( empty( $post->post_type ) || 'revision' === $post->post_type || 'trash' === $post->post_status ) {
691
- return;
692
- }
693
 
694
- if ( $update && defined( 'REST_REQUEST' ) && REST_REQUEST ) {
695
  if (
696
- ( 'auto-draft' === $this->_old_post->post_status && 'Auto Draft' === $this->_old_post->post_title && 'draft' === $post->post_status ) // Saving draft.
697
- || ( 'draft' === $this->_old_post->post_status && 'publish' === $post->post_status ) // Publishing post.
 
698
  ) {
699
- $this->CheckPostCreation( $this->_old_post, $post, true );
700
- } else {
701
- // Handle update post events.
702
- $changes = 0;
703
- $changes = $this->CheckAuthorChange( $this->_old_post, $post )
704
- + $this->CheckStatusChange( $this->_old_post, $post )
705
- + $this->CheckParentChange( $this->_old_post, $post )
706
- + $this->CheckVisibilityChange( $this->_old_post, $post, $this->old_status, $post->post_status )
707
- + $this->CheckTemplateChange( $this->_old_tmpl, $this->GetPostTemplate( $post ), $post )
708
- + $this->CheckDateChange( $this->_old_post, $post )
709
- + $this->CheckPermalinkChange( $this->_old_link, get_permalink( $post->ID ), $post )
710
- + $this->CheckCommentsPings( $this->_old_post, $post );
711
- $this->CheckModificationChange( $post->ID, $this->_old_post, $post, $changes );
712
- }
713
- }
714
- }
715
-
716
- /**
717
- * Check post creation.
718
- *
719
- * @global array $_POST
720
- *
721
- * @param WP_Post $old_post - Old post.
722
- * @param WP_Post $new_post - New post.
723
- * @param boolean $is_gutenberg - Gutenberg flag.
724
- */
725
- protected function CheckPostCreation( $old_post, $new_post, $is_gutenberg = false ) {
726
- // Set filter input args.
727
- $filter_input_args = array(
728
- 'action' => FILTER_SANITIZE_STRING,
729
- );
730
-
731
- // Filter $_POST array for security.
732
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
733
-
734
- // Check if the post is coming from MainWP.
735
- $mainwp = filter_input( INPUT_POST, 'mainwpsignature', FILTER_SANITIZE_STRING );
736
-
737
- if ( ! empty( $mainwp ) ) {
738
- $post_array['action'] = 'editpost';
739
- }
740
-
741
- /**
742
- * Nonce is already verified at this point.
743
- *
744
- * @see $this->EventPostChanged();
745
- */
746
- $wp_actions = array( 'editpost', 'heartbeat' );
747
- if ( isset( $post_array['action'] ) && in_array( $post_array['action'], $wp_actions, true ) && ! $is_gutenberg ) {
748
- if ( ! in_array( $new_post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
749
- $this->log_post_creation_event( $new_post );
750
- }
751
- } elseif ( $is_gutenberg ) {
752
- $this->log_post_creation_event( $new_post );
753
- }
754
- }
755
-
756
- /**
757
- * Log Post Creation Event.
758
- *
759
- * @since 3.2.4
760
- *
761
- * @param WP_Post $new_post – New WP post object.
762
- */
763
- private function log_post_creation_event( $new_post ) {
764
- if ( ! empty( $new_post ) && $new_post instanceof WP_Post ) {
765
- $event = 0;
766
- $is_scheduled = false;
767
- switch ( $new_post->post_status ) {
768
- case 'publish':
769
- $event = 2001;
770
- break;
771
- case 'draft':
772
- $event = 2000;
773
- break;
774
- case 'future':
775
- $event = 2074;
776
- $is_scheduled = true;
777
- break;
778
- case 'pending':
779
- $event = 2073;
780
- break;
781
  }
782
- if ( $event ) {
783
- $editor_link = $this->GetEditorLink( $new_post ); // Editor link.
784
- $event_data = $this->get_post_event_data( $new_post ); // Post event data.
785
 
786
- // Set editor link in the event data.
787
- $event_data[ $editor_link['name'] ] = $editor_link['value'];
 
788
 
789
- if ( $is_scheduled ) {
790
- $event_data['PublishingDate'] = $new_post->post_date;
791
- $this->plugin->alerts->Trigger( $event, $event_data );
792
- } else {
793
- $this->plugin->alerts->Trigger( $event, $event_data );
794
- }
795
  }
796
  }
797
  }
798
 
799
  /**
800
- * Post future publishing.
801
  *
802
- * @param integer $post_id - Post ID.
803
  */
804
- public function EventPublishFuture( $post_id ) {
805
- $post = get_post( $post_id );
806
- $editor_link = $this->GetEditorLink( $post );
807
  $this->plugin->alerts->Trigger(
808
- 2001, array(
809
- 'PostID' => $post->ID,
810
- 'PostType' => $post->post_type,
811
- 'PostTitle' => $post->post_title,
812
- 'PostStatus' => $post->post_status,
813
- 'PostDate' => $post->post_date,
814
- 'PostUrl' => get_permalink( $post->ID ),
815
- $editor_link['name'] => $editor_link['value'],
816
  )
817
  );
818
  }
819
 
820
  /**
821
- * Post permanently deleted.
822
- *
823
- * @param integer $post_id - Post ID.
824
- */
825
- public function EventPostDeleted( $post_id ) {
826
- // Set filter input args.
827
- $filter_input_args = array(
828
- 'action' => FILTER_SANITIZE_STRING,
829
- '_wpnonce' => FILTER_SANITIZE_STRING,
830
- );
831
-
832
- // Filter $_GET array for security.
833
- $get_array = filter_input_array( INPUT_GET, $filter_input_args );
834
-
835
- // Exclude CPTs from external plugins.
836
- $post = get_post( $post_id );
837
- if ( $this->CheckOtherSensors( $post ) ) {
838
- return;
839
- }
840
-
841
- // Get MainWP $_POST members.
842
- $filter_post_args = array(
843
- 'id' => FILTER_VALIDATE_INT,
844
- 'action' => FILTER_SANITIZE_STRING,
845
- 'mainwpsignature' => FILTER_SANITIZE_STRING,
846
- );
847
- $post_array = filter_input_array( INPUT_POST, $filter_post_args );
848
-
849
- // Verify nonce.
850
- if ( isset( $get_array['_wpnonce'] ) && wp_verify_nonce( $get_array['_wpnonce'], 'delete-post_' . $post_id ) ) {
851
- $wp_actions = array( 'delete' );
852
- if ( isset( $get_array['action'] ) && in_array( $get_array['action'], $wp_actions, true ) ) {
853
- if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) { // Ignore attachments, revisions and menu items.
854
- $event = 2008;
855
- // Check WordPress backend operations.
856
- if ( $this->CheckAutoDraft( $event, $post->post_title ) ) {
857
- return;
858
- }
859
-
860
- $event_data = $this->get_post_event_data( $post ); // Get event data.
861
- $this->plugin->alerts->Trigger( $event, $event_data ); // Log event.
862
- }
863
- }
864
- } elseif (
865
- isset( $post_array['mainwpsignature'] )
866
- && isset( $post_array['action'] )
867
- && 'delete' === $post_array['action']
868
- && ! empty( $post_array['id'] )
869
- ) {
870
- if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) { // Ignore attachments, revisions and menu items.
871
- // Check WordPress backend operations.
872
- if ( $this->CheckAutoDraft( 2008, $post->post_title ) ) {
873
- return;
874
- }
875
-
876
- $event_data = $this->get_post_event_data( $post ); // Get event data.
877
- $this->plugin->alerts->Trigger( 2008, $event_data ); // Log event.
878
- }
879
- }
880
- }
881
-
882
- /**
883
- * Post moved to the trash.
884
  *
885
- * @param integer $post_id - Post ID.
886
  */
887
- public function EventPostTrashed( $post_id ) {
888
- $post = get_post( $post_id );
889
- if ( $this->CheckOtherSensors( $post ) ) {
890
- return;
891
- }
892
- $editor_link = $this->GetEditorLink( $post );
893
  $this->plugin->alerts->Trigger(
894
- 2012, array(
895
- 'PostID' => $post->ID,
896
- 'PostType' => $post->post_type,
897
- 'PostTitle' => $post->post_title,
898
- 'PostStatus' => $post->post_status,
899
- 'PostDate' => $post->post_date,
900
- 'PostUrl' => get_permalink( $post->ID ),
901
- $editor_link['name'] => $editor_link['value'],
902
  )
903
  );
904
  }
905
 
906
  /**
907
- * Post restored from trash.
908
  *
909
- * @param integer $post_id - Post ID.
 
910
  */
911
- public function EventPostUntrashed( $post_id ) {
912
- $post = get_post( $post_id );
913
- if ( $this->CheckOtherSensors( $post ) ) {
914
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
915
  }
916
- $editor_link = $this->GetEditorLink( $post );
917
- $this->plugin->alerts->Trigger(
918
- 2014, array(
919
- 'PostID' => $post->ID,
920
- 'PostType' => $post->post_type,
921
- 'PostTitle' => $post->post_title,
922
- 'PostStatus' => $post->post_status,
923
- 'PostDate' => $post->post_date,
924
- 'PostUrl' => get_permalink( $post->ID ),
925
- $editor_link['name'] => $editor_link['value'],
926
- )
927
- );
928
  }
929
 
930
  /**
931
- * Post date changed.
932
  *
933
- * @param stdClass $oldpost - Old post.
934
- * @param stdClass $newpost - New post.
 
 
935
  */
936
- protected function CheckDateChange( $oldpost, $newpost ) {
937
- $from = strtotime( $oldpost->post_date );
938
- $to = strtotime( $newpost->post_date );
 
 
 
 
 
 
 
 
 
 
 
939
 
940
- if ( 'draft' == $oldpost->post_status ) {
941
- return 0;
942
- }
943
-
944
- if ( $from != $to ) {
945
- $editor_link = $this->GetEditorLink( $oldpost );
946
- $this->plugin->alerts->Trigger(
947
- 2027, array(
948
- 'PostID' => $oldpost->ID,
949
- 'PostType' => $oldpost->post_type,
950
- 'PostTitle' => $oldpost->post_title,
951
- 'PostStatus' => $oldpost->post_status,
952
- 'PostDate' => $newpost->post_date,
953
- 'PostUrl' => get_permalink( $oldpost->ID ),
954
- 'OldDate' => $oldpost->post_date,
955
- 'NewDate' => $newpost->post_date,
956
- $editor_link['name'] => $editor_link['value'],
957
- )
958
- );
959
- return 1;
960
- }
961
- return 0;
962
- }
963
-
964
- /**
965
- * Categories changed.
966
- *
967
- * @param array $old_cats - Old categories.
968
- * @param array $new_cats - New categories.
969
- * @param stdClass $post - The post.
970
- */
971
- protected function CheckCategoriesChange( $old_cats, $new_cats, $post ) {
972
- $old_cats = implode( ', ', (array) $old_cats );
973
- $new_cats = implode( ', ', (array) $new_cats );
974
-
975
- if ( $old_cats !== $new_cats ) {
976
- $event = $this->GetEventTypeForPostType( $post, 2016, 0, 2016 );
977
- if ( $event ) {
978
- $editor_link = $this->GetEditorLink( $post );
979
- $alert_data = array(
980
- 'PostID' => $post->ID,
981
- 'PostType' => $post->post_type,
982
- 'PostTitle' => $post->post_title,
983
- 'PostStatus' => $post->post_status,
984
- 'PostDate' => $post->post_date,
985
- 'PostUrl' => get_permalink( $post->ID ),
986
- 'OldCategories' => $old_cats ? $old_cats : 'no categories',
987
- 'NewCategories' => $new_cats ? $new_cats : 'no categories',
988
- $editor_link['name'] => $editor_link['value'],
989
  );
990
- $this->plugin->alerts->Trigger( $event, $alert_data );
991
- return 1;
992
- }
993
- }
994
- }
995
-
996
- /**
997
- * Method: This function make sures that alert 2016
998
- * has not been triggered before triggering categories
999
- * & tags events.
1000
- *
1001
- * @since 3.2.4
1002
- *
1003
- * @param WSAL_AlertManager $manager - WSAL Alert Manager.
1004
- * @return bool
1005
- */
1006
- public function must_not_contain_events( WSAL_AlertManager $manager ) {
1007
- if ( $manager->WillOrHasTriggered( 2016 ) ) {
1008
- return false;
1009
- } elseif ( $manager->WillOrHasTriggered( 2119 ) ) {
1010
- return false;
1011
- } elseif ( $manager->WillOrHasTriggered( 2120 ) ) {
1012
- return false;
1013
- } elseif ( $manager->WillOrHasTriggered( 2049 ) ) {
1014
- return false;
1015
- } elseif ( $manager->WillOrHasTriggered( 2050 ) ) {
1016
- return false;
1017
- }
1018
- return true;
1019
- }
1020
-
1021
- /**
1022
- * Check if post terms changed via Gutenberg.
1023
- *
1024
- * @since 3.2.4
1025
- *
1026
- * @param int $post_id - Post ID.
1027
- * @param array $terms - Array of terms.
1028
- * @param array $tt_ids - Array of taxonomy term ids.
1029
- * @param string $taxonomy - Taxonomy slug.
1030
- */
1031
- public function gutenberg_post_terms_changed( $post_id, $terms, $tt_ids, $taxonomy ) {
1032
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
1033
- $post = get_post( $post_id );
1034
-
1035
- if ( is_wp_error( $post ) ) {
1036
- return;
1037
  }
1038
 
1039
- if ( 'auto-draft' === $post->post_status ) {
1040
- return;
1041
- }
1042
-
1043
- if ( 'post_tag' === $taxonomy ) {
1044
- // Check tags change event.
1045
- $this->check_tags_change( $this->_old_tags, $this->get_post_tags( $post ), $post );
1046
- } else {
1047
- // Check categories change event.
1048
- $this->CheckCategoriesChange( $this->_old_cats, $this->GetPostCategories( $post ), $post );
 
1049
  }
1050
- }
1051
- }
1052
-
1053
- /**
1054
- * Post Stuck Event.
1055
- *
1056
- * @since 3.2.4
1057
- *
1058
- * @param integer $post_id - Post ID.
1059
- */
1060
- public function gutenberg_post_stuck( $post_id ) {
1061
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
1062
- $this->log_sticky_post_event( $post_id, 2049 );
1063
- }
1064
- }
1065
-
1066
- /**
1067
- * Post Unstuck Event.
1068
- *
1069
- * @since 3.2.4
1070
- *
1071
- * @param integer $post_id - Post ID.
1072
- */
1073
- public function gutenberg_post_unstuck( $post_id ) {
1074
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
1075
- $this->log_sticky_post_event( $post_id, 2050 );
1076
- }
1077
- }
1078
-
1079
- /**
1080
- * Log post stuck/unstuck events.
1081
- *
1082
- * @since 3.2.4
1083
- *
1084
- * @param integer $post_id - Post ID.
1085
- * @param integer $event - Event ID.
1086
- */
1087
- private function log_sticky_post_event( $post_id, $event ) {
1088
- // Get post.
1089
- $post = get_post( $post_id );
1090
-
1091
- if ( is_wp_error( $post ) ) {
1092
- return;
1093
- }
1094
-
1095
- $editor_link = $this->GetEditorLink( $post ); // Editor link.
1096
- $event_data = $this->get_post_event_data( $post ); // Event data.
1097
-
1098
- $event_data[ $editor_link['name'] ] = $editor_link['value'];
1099
- $this->plugin->alerts->Trigger( $event, $event_data );
1100
- }
1101
-
1102
- /**
1103
- * Tags changed.
1104
- *
1105
- * @param array $old_tags - Old tags.
1106
- * @param array $new_tags - New tags.
1107
- * @param stdClass $post - The post.
1108
- */
1109
- protected function check_tags_change( $old_tags, $new_tags, $post ) {
1110
- // Check for added tags.
1111
- $added_tags = array_diff( (array) $new_tags, (array) $old_tags );
1112
-
1113
- // Check for removed tags.
1114
- $removed_tags = array_diff( (array) $old_tags, (array) $new_tags );
1115
-
1116
- // Convert tags arrays to string.
1117
- $old_tags = implode( ', ', (array) $old_tags );
1118
- $new_tags = implode( ', ', (array) $new_tags );
1119
- $added_tags = implode( ', ', $added_tags );
1120
- $removed_tags = implode( ', ', $removed_tags );
1121
-
1122
- // Declare event variables.
1123
- $add_event = '';
1124
- $remove_event = '';
1125
- if ( $old_tags !== $new_tags && ! empty( $added_tags ) ) {
1126
- $add_event = 2119;
1127
- $editor_link = $this->GetEditorLink( $post );
1128
- $post_status = ( 'publish' === $post->post_status ) ? 'published' : $post->post_status;
1129
- $this->plugin->alerts->Trigger(
1130
- $add_event, array(
1131
- 'PostID' => $post->ID,
1132
- 'PostType' => $post->post_type,
1133
- 'PostStatus' => $post_status,
1134
- 'PostTitle' => $post->post_title,
1135
- 'PostDate' => $post->post_date,
1136
- 'PostUrl' => get_permalink( $post->ID ),
1137
- 'tag' => $added_tags ? $added_tags : 'no tags',
1138
- $editor_link['name'] => $editor_link['value'],
1139
- )
1140
- );
1141
- }
1142
-
1143
- if ( $old_tags !== $new_tags && ! empty( $removed_tags ) ) {
1144
- $remove_event = 2120;
1145
- $editor_link = $this->GetEditorLink( $post );
1146
- $post_status = ( 'publish' === $post->post_status ) ? 'published' : $post->post_status;
1147
- $this->plugin->alerts->Trigger(
1148
- $remove_event, array(
1149
- 'PostID' => $post->ID,
1150
- 'PostType' => $post->post_type,
1151
- 'PostStatus' => $post_status,
1152
- 'PostTitle' => $post->post_title,
1153
- 'PostDate' => $post->post_date,
1154
- 'PostUrl' => get_permalink( $post->ID ),
1155
- 'tag' => $removed_tags ? $removed_tags : 'no tags',
1156
- $editor_link['name'] => $editor_link['value'],
1157
- )
1158
- );
1159
- }
1160
-
1161
- if ( $add_event || $remove_event ) {
1162
- return 1;
1163
- }
1164
- }
1165
-
1166
- /**
1167
- * Author changed.
1168
- *
1169
- * @param stdClass $oldpost - Old post.
1170
- * @param stdClass $newpost - New post.
1171
- */
1172
- protected function CheckAuthorChange( $oldpost, $newpost ) {
1173
- if ( $oldpost->post_author != $newpost->post_author ) {
1174
- $editor_link = $this->GetEditorLink( $oldpost );
1175
- $old_author = get_userdata( $oldpost->post_author );
1176
- $old_author = ( is_object( $old_author ) ) ? $old_author->user_login : 'N/A';
1177
- $new_author = get_userdata( $newpost->post_author );
1178
- $new_author = ( is_object( $new_author ) ) ? $new_author->user_login : 'N/A';
1179
- $this->plugin->alerts->Trigger(
1180
- 2019, array(
1181
- 'PostID' => $oldpost->ID,
1182
- 'PostType' => $oldpost->post_type,
1183
- 'PostTitle' => $oldpost->post_title,
1184
- 'PostStatus' => $oldpost->post_status,
1185
- 'PostDate' => $oldpost->post_date,
1186
- 'PostUrl' => get_permalink( $oldpost->ID ),
1187
- 'OldAuthor' => $old_author,
1188
- 'NewAuthor' => $new_author,
1189
- $editor_link['name'] => $editor_link['value'],
1190
- )
1191
- );
1192
- return 1;
1193
- }
1194
- }
1195
-
1196
- /**
1197
- * Status changed.
1198
- *
1199
- * @param stdClass $oldpost - Old post.
1200
- * @param stdClass $newpost - New post.
1201
- */
1202
- protected function CheckStatusChange( $oldpost, $newpost ) {
1203
- // Set filter input args.
1204
- $filter_input_args = array(
1205
- 'publish' => FILTER_SANITIZE_STRING,
1206
- );
1207
 
1208
- // Filter $_POST array for security.
1209
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
1210
-
1211
- /**
1212
- * Nonce is already verified at this point.
1213
- *
1214
- * @see $this->EventPostChanged();
1215
- */
1216
- if ( $oldpost->post_status != $newpost->post_status ) {
1217
- if ( isset( $post_array['publish'] ) ) {
1218
- // Special case (publishing a post).
1219
- $editor_link = $this->GetEditorLink( $newpost );
1220
  $this->plugin->alerts->Trigger(
1221
- 2001, array(
1222
- 'PostID' => $newpost->ID,
1223
- 'PostType' => $newpost->post_type,
1224
- 'PostTitle' => $newpost->post_title,
1225
- 'PostStatus' => $newpost->post_status,
1226
- 'PostDate' => $newpost->post_date,
1227
- 'PostUrl' => get_permalink( $newpost->ID ),
1228
- $editor_link['name'] => $editor_link['value'],
1229
  )
1230
  );
1231
- } else {
1232
- $editor_link = $this->GetEditorLink( $oldpost );
 
 
1233
  $this->plugin->alerts->Trigger(
1234
- 2021, array(
1235
- 'PostID' => $oldpost->ID,
1236
- 'PostType' => $oldpost->post_type,
1237
- 'PostTitle' => $oldpost->post_title,
1238
- 'PostStatus' => $newpost->post_status,
1239
- 'PostDate' => $oldpost->post_date,
1240
- 'PostUrl' => get_permalink( $oldpost->ID ),
1241
- 'OldStatus' => $oldpost->post_status,
1242
- 'NewStatus' => $newpost->post_status,
1243
- $editor_link['name'] => $editor_link['value'],
1244
  )
1245
  );
1246
  }
1247
- return 1;
1248
- }
1249
- }
1250
 
1251
- /**
1252
- * Post parent changed.
1253
- *
1254
- * @param stdClass $oldpost - Old post.
1255
- * @param stdClass $newpost - New post.
1256
- */
1257
- protected function CheckParentChange( $oldpost, $newpost ) {
1258
- if ( $oldpost->post_parent != $newpost->post_parent ) {
1259
- $event = $this->GetEventTypeForPostType( $oldpost, 0, 2047, 0 );
1260
- if ( $event ) {
1261
- $editor_link = $this->GetEditorLink( $oldpost );
1262
  $this->plugin->alerts->Trigger(
1263
- $event, array(
1264
- 'PostID' => $oldpost->ID,
1265
- 'PostType' => $oldpost->post_type,
1266
- 'PostTitle' => $oldpost->post_title,
1267
- 'PostStatus' => $oldpost->post_status,
1268
- 'PostDate' => $oldpost->post_date,
1269
- 'OldParent' => $oldpost->post_parent,
1270
- 'NewParent' => $newpost->post_parent,
1271
- 'OldParentName' => $oldpost->post_parent ? get_the_title( $oldpost->post_parent ) : 'no parent',
1272
- 'NewParentName' => $newpost->post_parent ? get_the_title( $newpost->post_parent ) : 'no parent',
1273
- $editor_link['name'] => $editor_link['value'],
1274
  )
1275
  );
1276
- return 1;
1277
  }
1278
- }
1279
- }
1280
-
1281
- /**
1282
- * Permalink changed.
1283
- *
1284
- * @param string $old_link - Old permalink.
1285
- * @param string $new_link - New permalink.
1286
- * @param stdClass $post - The post.
1287
- */
1288
- protected function CheckPermalinkChange( $old_link, $new_link, $post ) {
1289
- if ( $old_link !== $new_link ) {
1290
- $editor_link = $this->GetEditorLink( $post );
1291
- $this->plugin->alerts->Trigger(
1292
- 2017, array(
1293
- 'PostID' => $post->ID,
1294
- 'PostType' => $post->post_type,
1295
- 'PostTitle' => $post->post_title,
1296
- 'PostStatus' => $post->post_status,
1297
- 'PostDate' => $post->post_date,
1298
- 'OldUrl' => $old_link,
1299
- 'NewUrl' => $new_link,
1300
- $editor_link['name'] => $editor_link['value'],
1301
- 'ReportText' => '"' . $old_link . '"|"' . $new_link . '"',
1302
- )
1303
- );
1304
- return 1;
1305
- }
1306
- return 0;
1307
- }
1308
 
1309
- /**
1310
- * Post visibility changed.
1311
- *
1312
- * @param stdClass $oldpost - Old post.
1313
- * @param stdClass $newpost - New post.
1314
- * @param string $old_status - Old status.
1315
- * @param string $new_status - New status.
1316
- */
1317
- protected function CheckVisibilityChange( $oldpost, $newpost, $old_status, $new_status ) {
1318
- if ( 'draft' == $old_status || 'draft' == $new_status ) {
1319
- return;
1320
- }
1321
-
1322
- $old_visibility = '';
1323
- $new_visibility = '';
1324
-
1325
- if ( $oldpost->post_password ) {
1326
- $old_visibility = __( 'Password Protected', 'wp-security-audit-log' );
1327
- } elseif ( 'publish' == $old_status ) {
1328
- $old_visibility = __( 'Public', 'wp-security-audit-log' );
1329
- } elseif ( 'private' == $old_status ) {
1330
- $old_visibility = __( 'Private', 'wp-security-audit-log' );
1331
- }
1332
-
1333
- if ( $newpost->post_password ) {
1334
- $new_visibility = __( 'Password Protected', 'wp-security-audit-log' );
1335
- } elseif ( 'publish' == $new_status ) {
1336
- $new_visibility = __( 'Public', 'wp-security-audit-log' );
1337
- } elseif ( 'private' == $new_status ) {
1338
- $new_visibility = __( 'Private', 'wp-security-audit-log' );
1339
- }
1340
-
1341
- if ( $old_visibility && $new_visibility && ( $old_visibility != $new_visibility ) ) {
1342
- $editor_link = $this->GetEditorLink( $oldpost );
1343
- $this->plugin->alerts->Trigger(
1344
- 2025, array(
1345
- 'PostID' => $oldpost->ID,
1346
- 'PostType' => $oldpost->post_type,
1347
- 'PostTitle' => $oldpost->post_title,
1348
- 'PostStatus' => $newpost->post_status,
1349
- 'PostDate' => $oldpost->post_date,
1350
- 'PostUrl' => get_permalink( $oldpost->ID ),
1351
- 'OldVisibility' => $old_visibility,
1352
- 'NewVisibility' => $new_visibility,
1353
- $editor_link['name'] => $editor_link['value'],
1354
- )
1355
- );
1356
- return 1;
1357
- }
1358
- }
1359
-
1360
- /**
1361
- * Post template changed.
1362
- *
1363
- * @param string $old_tmpl - Old template path.
1364
- * @param string $new_tmpl - New template path.
1365
- * @param stdClass $post - The post.
1366
- */
1367
- protected function CheckTemplateChange( $old_tmpl, $new_tmpl, $post ) {
1368
- if ( $old_tmpl != $new_tmpl ) {
1369
- $event = $this->GetEventTypeForPostType( $post, 0, 2048, 0 );
1370
- if ( $event ) {
1371
- $editor_link = $this->GetEditorLink( $post );
1372
  $this->plugin->alerts->Trigger(
1373
- $event, array(
1374
- 'PostID' => $post->ID,
1375
- 'PostType' => $post->post_type,
1376
- 'PostTitle' => $post->post_title,
1377
- 'PostStatus' => $post->post_status,
1378
- 'PostDate' => $post->post_date,
1379
- 'OldTemplate' => ucwords( str_replace( array( '-', '_' ), ' ', basename( $old_tmpl, '.php' ) ) ),
1380
- 'NewTemplate' => ucwords( str_replace( array( '-', '_' ), ' ', basename( $new_tmpl, '.php' ) ) ),
1381
- 'OldTemplatePath' => $old_tmpl,
1382
- 'NewTemplatePath' => $new_tmpl,
1383
- $editor_link['name'] => $editor_link['value'],
1384
  )
1385
  );
1386
- return 1;
1387
  }
1388
  }
 
1389
  }
1390
 
1391
  /**
1392
- * Post sets as sticky changes.
1393
  *
1394
- * @param string $old_stky - Old template path.
1395
- * @param string $new_stky - New template path.
1396
- * @param WP_Post $post - The post.
 
1397
  */
1398
- protected function CheckStickyChange( $old_stky, $new_stky, $post ) {
1399
- if ( $old_stky != $new_stky ) {
1400
- $event = $new_stky ? 2049 : 2050;
1401
- $editor_link = $this->GetEditorLink( $post );
 
 
 
 
 
 
 
 
 
 
 
 
1402
  $this->plugin->alerts->Trigger(
1403
- $event, array(
 
1404
  'PostID' => $post->ID,
1405
  'PostType' => $post->post_type,
1406
  'PostTitle' => $post->post_title,
1407
  'PostStatus' => $post->post_status,
1408
  'PostDate' => $post->post_date,
1409
- 'PostUrl' => get_permalink( $post->ID ),
 
 
 
1410
  $editor_link['name'] => $editor_link['value'],
1411
  )
1412
  );
1413
- return 1;
1414
  }
1415
  }
1416
 
1417
  /**
1418
- * Post modified content.
1419
  *
1420
- * @param integer $post_id – Post ID.
1421
- * @param stdClass $oldpost – Old post.
1422
- * @param stdClass $newpost – New post.
1423
- * @param int $modified – Set to 0 if no changes done to the post.
1424
  */
1425
- public function CheckModificationChange( $post_id, $oldpost, $newpost, $modified ) {
1426
- if ( $this->CheckOtherSensors( $oldpost ) ) {
1427
- return;
1428
- }
1429
- $changes = $this->CheckTitleChange( $oldpost, $newpost );
1430
- if ( ! $changes ) {
1431
- $content_changed = $oldpost->post_content != $newpost->post_content; // TODO what about excerpts?
1432
-
1433
- if ( $oldpost->post_modified != $newpost->post_modified ) {
1434
- $event = 0;
1435
 
1436
- // Check if content changed.
1437
- if ( $content_changed ) {
1438
- $event = 2065;
1439
- } elseif ( ! $modified ) {
1440
- $event = 2002;
1441
- }
1442
- if ( $event ) {
1443
- if ( 2002 === $event ) {
1444
- // Get Yoast alerts.
1445
- $yoast_alerts = $this->plugin->alerts->get_alerts_by_sub_category( 'Yoast SEO' );
1446
-
1447
- // Check all alerts.
1448
- foreach ( $yoast_alerts as $alert_code => $alert ) {
1449
- if ( $this->plugin->alerts->WillOrHasTriggered( $alert_code ) ) {
1450
- return 0; // Return if any Yoast alert has or will trigger.
1451
- }
1452
- }
1453
 
1454
- // Get post meta events.
1455
- $meta_events = array( 2053, 2054, 2055, 2062 );
1456
- foreach ( $meta_events as $meta_event ) {
1457
- if ( $this->plugin->alerts->WillOrHasTriggered( $meta_event ) ) {
1458
- return 0; // Return if any meta event has or will trigger.
1459
- }
1460
- }
1461
- }
 
 
 
1462
 
1463
- $editor_link = $this->GetEditorLink( $oldpost );
1464
- $event_data = array(
1465
- 'PostID' => $post_id,
1466
- 'PostType' => $oldpost->post_type,
1467
- 'PostTitle' => $oldpost->post_title,
1468
- 'PostStatus' => $oldpost->post_status,
1469
- 'PostDate' => $oldpost->post_date,
1470
- 'PostUrl' => get_permalink( $post_id ),
1471
- $editor_link['name'] => $editor_link['value'],
1472
- );
1473
 
1474
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
1475
- $event_data['RevisionLink'] = $this->get_post_revision( $post_id, $oldpost );
 
1476
 
1477
- if ( 2002 === $event ) {
1478
- $this->plugin->alerts->TriggerIf( $event, $event_data, array( $this, 'must_not_contain_events' ) );
1479
- } else {
1480
- $this->plugin->alerts->Trigger( $event, $event_data );
1481
- }
1482
- } else {
1483
- $this->plugin->alerts->Trigger( $event, $event_data );
1484
- }
1485
- return 1;
1486
- }
1487
- }
1488
  }
 
 
 
 
 
 
 
 
 
1489
  }
1490
 
1491
  /**
1492
- * New category created.
1493
  *
1494
- * @param integer $category_id - Category ID.
 
1495
  */
1496
- public function EventCategoryCreation( $category_id ) {
1497
- $category = get_category( $category_id );
1498
- $category_link = $this->getCategoryLink( $category_id );
1499
- $this->plugin->alerts->Trigger(
1500
- 2023, array(
1501
- 'CategoryName' => $category->name,
1502
- 'Slug' => $category->slug,
1503
- 'CategoryLink' => $category_link,
1504
- )
1505
- );
1506
  }
1507
 
1508
  /**
1509
- * New tag created.
1510
  *
1511
- * @param int $tag_id - Tag ID.
 
1512
  */
1513
- public function EventTagCreation( $tag_id ) {
1514
- $tag = get_tag( $tag_id );
1515
- $tag_link = $this->get_tag_link( $tag_id );
1516
- $this->plugin->alerts->Trigger(
1517
- 2121, array(
1518
- 'TagName' => $tag->name,
1519
- 'Slug' => $tag->slug,
1520
- 'TagLink' => $tag_link,
1521
- )
1522
- );
1523
  }
1524
 
1525
  /**
1526
- * Category deleted.
 
 
1527
  *
1528
- * @deprecated 3.3.1
 
1529
  */
1530
- protected function CheckCategoryDeletion() {
1531
- // Set filter input args.
1532
- $filter_input_args = array(
1533
- '_wpnonce' => FILTER_SANITIZE_STRING,
1534
- 'action' => FILTER_SANITIZE_STRING,
1535
- 'action2' => FILTER_SANITIZE_STRING,
1536
- 'taxonomy' => FILTER_SANITIZE_STRING,
1537
- 'delete_tags' => array(
1538
- 'filter' => FILTER_SANITIZE_STRING,
1539
- 'flags' => FILTER_REQUIRE_ARRAY,
1540
- ),
1541
- 'tag_ID' => FILTER_VALIDATE_INT,
1542
- );
1543
-
1544
- // Filter $_POST array for security.
1545
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
1546
-
1547
- if ( empty( $post_array ) ) {
1548
- return;
1549
- }
1550
- $action = ! empty( $post_array['action'] ) ? $post_array['action']
1551
- : ( ! empty( $post_array['action2'] ) ? $post_array['action2'] : '' );
1552
- if ( ! $action ) {
1553
- return;
1554
- }
1555
 
1556
- $category_ids = array();
 
1557
 
1558
- if ( isset( $post_array['taxonomy'] ) ) {
1559
- if ( 'delete' == $action
1560
- && 'category' == $post_array['taxonomy']
1561
- && ! empty( $post_array['delete_tags'] )
1562
- && wp_verify_nonce( $post_array['_wpnonce'], 'bulk-tags' ) ) {
1563
- // Bulk delete.
1564
- foreach ( $post_array['delete_tags'] as $delete_tag ) {
1565
- $category_ids[] = $delete_tag;
1566
  }
1567
- } elseif ( 'delete-tag' == $action
1568
- && 'category' == $post_array['taxonomy']
1569
- && ! empty( $post_array['tag_ID'] )
1570
- && wp_verify_nonce( $post_array['_wpnonce'], 'delete-tag_' . $post_array['tag_ID'] ) ) {
1571
- // Single delete.
1572
- $category_ids[] = $post_array['tag_ID'];
1573
  }
1574
  }
 
1575
 
1576
- foreach ( $category_ids as $category_id ) {
1577
- $category = get_category( $category_id );
1578
- $category_link = $this->getCategoryLink( $category_id );
1579
- $this->plugin->alerts->Trigger(
1580
- 2024, array(
1581
- 'CategoryID' => $category_id,
1582
- 'CategoryName' => $category->cat_name,
1583
- 'Slug' => $category->slug,
1584
- 'CategoryLink' => $category_link,
1585
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1586
  );
 
1587
  }
 
1588
  }
1589
 
1590
  /**
1591
- * Taxonomy Terms Deleted Events.
1592
  *
1593
- * @param integer $term_id - Term ID.
1594
- * @param string $taxonomy - Taxonomy Name.
1595
  */
1596
- public function check_taxonomy_term_deletion( $term_id, $taxonomy ) {
1597
- if ( 'post_tag' === $taxonomy ) {
1598
- $tag = get_tag( $term_id );
1599
- $this->plugin->alerts->Trigger(
1600
- 2122, array(
1601
- 'TagID' => $term_id,
1602
- 'TagName' => $tag->name,
1603
- 'Slug' => $tag->slug,
1604
- )
1605
- );
1606
- } elseif ( 'category' === $taxonomy ) {
1607
- $category = get_category( $term_id );
1608
- $category_link = $this->getCategoryLink( $term_id );
1609
  $this->plugin->alerts->Trigger(
1610
- 2024, array(
1611
- 'CategoryID' => $term_id,
1612
- 'CategoryName' => $category->cat_name,
1613
- 'Slug' => $category->slug,
1614
- 'CategoryLink' => $category_link,
 
 
 
 
 
 
1615
  )
1616
  );
 
1617
  }
1618
  }
1619
 
1620
  /**
1621
- * Changed the parent of the category.
1622
  *
1623
- * @global array $_POST - Post data.
 
 
1624
  */
1625
- public function EventChangedCategoryParent() {
1626
- // Set filter input args.
1627
- $filter_input_args = array(
1628
- '_wpnonce' => FILTER_SANITIZE_STRING,
1629
- 'name' => FILTER_SANITIZE_STRING,
1630
- 'parent' => FILTER_SANITIZE_STRING,
1631
- 'tag_ID' => FILTER_VALIDATE_INT,
1632
- );
1633
-
1634
- // Filter $_POST array for security.
1635
- $post_array = filter_input_array( INPUT_POST, $filter_input_args );
1636
 
1637
- if ( empty( $post_array ) ) {
1638
- return;
1639
- }
1640
- if ( ! current_user_can( 'manage_categories' ) ) {
1641
- return;
1642
- }
1643
- if ( isset( $post_array['_wpnonce'] )
1644
- && isset( $post_array['name'] )
1645
- && isset( $post_array['tag_ID'] )
1646
- && wp_verify_nonce( $post_array['_wpnonce'], 'update-tag_' . $post_array['tag_ID'] ) ) {
1647
- $category = get_category( $post_array['tag_ID'] );
1648
- $category_link = $this->getCategoryLink( $post_array['tag_ID'] );
1649
- if ( 0 != $category->parent ) {
1650
- $old_parent = get_category( $category->parent );
1651
- $old_parent_name = ( empty( $old_parent ) ) ? 'no parent' : $old_parent->name;
1652
  } else {
1653
- $old_parent_name = 'no parent';
1654
- }
1655
- if ( isset( $post_array['parent'] ) ) {
1656
- $new_parent = get_category( $post_array['parent'] );
1657
- $new_parent_name = ( empty( $new_parent ) ) ? 'no parent' : $new_parent->name;
1658
  }
1659
 
1660
- if ( $old_parent_name !== $new_parent_name ) {
1661
- $this->plugin->alerts->Trigger(
1662
- 2052, array(
1663
- 'CategoryName' => $category->name,
1664
- 'OldParent' => $old_parent_name,
1665
- 'NewParent' => $new_parent_name,
1666
- 'CategoryLink' => $category_link,
1667
- )
1668
- );
 
 
 
 
 
 
 
 
1669
  }
1670
- }
1671
- }
1672
 
1673
- /**
1674
- * Check auto draft and the setting: Hide Plugin in Plugins Page
1675
- *
1676
- * @param integer $code - Alert code.
1677
- * @param string $title - Title.
1678
- * @return boolean
1679
- */
1680
- private function CheckAutoDraft( $code, $title ) {
1681
- if ( 2008 == $code && 'auto-draft' == $title ) {
1682
- // To do: Check setting else return false.
1683
- return 1 == $this->plugin->settings->IsWPBackend();
1684
  }
1685
- return false;
1686
  }
1687
 
1688
  /**
1689
- * Builds revision link.
1690
  *
1691
- * @param integer $revision_id - Revision ID.
1692
- * @return string|null - Link.
1693
  */
1694
- private function getRevisionLink( $revision_id ) {
1695
- if ( ! empty( $revision_id ) ) {
1696
- return admin_url( 'revision.php?revision=' . $revision_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1697
  }
1698
- return null;
1699
  }
1700
 
1701
  /**
1702
- * Return post revision link.
1703
  *
1704
- * @param integer $post_id - Post ID.
1705
- * @param WP_Post $post - WP Post object.
1706
- * @return string
1707
  */
1708
- private function get_post_revision( $post_id, $post ) {
1709
- $revisions = wp_get_post_revisions( $post_id );
1710
- if ( ! empty( $revisions ) ) {
1711
- $revision = array_shift( $revisions );
1712
- return $this->getRevisionLink( $revision->ID );
 
 
 
 
 
 
 
 
 
 
 
 
 
1713
  }
 
1714
  }
1715
 
1716
  /**
1717
- * Builds category link.
1718
  *
1719
- * @param integer $category_id - Category ID.
1720
- * @return string|null - Link.
 
 
1721
  */
1722
- private function getCategoryLink( $category_id ) {
1723
- if ( ! empty( $category_id ) ) {
1724
- return admin_url( 'term.php?taxnomy=category&tag_ID=' . $category_id );
1725
- } else {
1726
- return null;
1727
  }
1728
- }
1729
 
1730
- /**
1731
- * Builds tag link.
1732
- *
1733
- * @param integer $tag_id - Tag ID.
1734
- * @return string|null - Link.
1735
- */
1736
- private function get_tag_link( $tag_id ) {
1737
- if ( ! empty( $tag_id ) ) {
1738
- return admin_url( 'term.php?taxnomy=post_tag&tag_ID=' . $tag_id );
1739
- } else {
1740
- return null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1741
  }
1742
  }
1743
 
1744
  /**
1745
- * Ignore post from BBPress, WooCommerce Plugin
1746
- * Triggered on the Sensors
1747
  *
1748
- * @param WP_Post $post - The post.
 
1749
  */
1750
- private function CheckOtherSensors( $post ) {
1751
- if ( empty( $post ) || ! isset( $post->post_type ) ) {
1752
- return false;
 
 
 
1753
  }
1754
- switch ( $post->post_type ) {
1755
- case 'forum':
1756
- case 'topic':
1757
- case 'reply':
1758
- case 'product':
1759
- case 'shop_order':
1760
- case 'shop_coupon':
1761
- return true;
1762
- default:
1763
- return false;
 
 
 
 
 
 
 
 
1764
  }
 
1765
  }
1766
 
1767
  /**
1768
- * Triggered after save post for add revision link.
1769
  *
1770
- * @param integer $post_id - Post ID.
1771
- * @param stdClass $post - Post.
1772
- * @param bool $update - True if update.
1773
  */
1774
- public function SetRevisionLink( $post_id, $post, $update ) {
1775
- if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
1776
- return;
1777
- }
1778
 
1779
- $revisions = wp_get_post_revisions( $post_id );
1780
- if ( ! empty( $revisions ) ) {
1781
- $revision = array_shift( $revisions );
1782
 
1783
- $obj_occ = new WSAL_Models_Occurrence();
1784
- $occ = $obj_occ->GetByPostID( $post_id );
1785
- $occ = count( $occ ) ? $occ[0] : null;
1786
- if ( ! empty( $occ ) ) {
1787
- $revision_link = $this->getRevisionLink( $revision->ID );
1788
- if ( ! empty( $revision_link ) ) {
1789
- $occ->SetMetaValue( 'RevisionLink', $revision_link );
1790
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1791
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1792
  }
 
1793
  }
1794
 
1795
  /**
1796
- * Alerts for Editing of Posts, Pages and Custom Post Types.
1797
  *
1798
- * @param WP_Post $post - Post.
 
 
1799
  */
1800
- public function EditingPost( $post ) {
1801
- if ( is_user_logged_in() && is_admin() ) {
1802
- // Log event.
1803
- $this->post_opened_in_editor( $post );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1804
  }
1805
- return $post;
1806
  }
1807
 
1808
  /**
1809
- * Alert for Editing of Posts and Custom Post Types in Gutenberg.
1810
  *
1811
- * @since 3.2.4
 
 
1812
  */
1813
- public function edit_post_in_gutenberg() {
1814
- global $pagenow;
 
1815
 
1816
- if ( 'post.php' !== $pagenow ) {
1817
- return;
1818
- }
1819
 
1820
- // @codingStandardsIgnoreStart
1821
- $post_id = isset( $_GET['post'] ) ? (int) sanitize_text_field( wp_unslash( $_GET['post'] ) ) : false;
1822
- // @codingStandardsIgnoreEnd
 
 
1823
 
1824
- // Check post id.
1825
- if ( empty( $post_id ) ) {
1826
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1827
  }
1828
 
1829
- if ( is_user_logged_in() && is_admin() ) {
1830
- // Get post.
1831
- $post = get_post( $post_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1832
 
1833
- // Log event.
1834
- $this->post_opened_in_editor( $post );
1835
  }
1836
  }
1837
 
1838
  /**
1839
- * Post Opened for Editing in WP Editors.
1840
  *
1841
- * @param WP_Post $post – Post object.
 
 
 
1842
  */
1843
- public function post_opened_in_editor( $post ) {
1844
- if ( empty( $post ) || ! $post instanceof WP_Post ) {
1845
  return;
1846
  }
1847
 
1848
- // Check other sensors.
1849
- if ( $this->CheckOtherSensors( $post ) ) {
1850
- return $post;
1851
  }
1852
 
1853
- $current_path = isset( $_SERVER['SCRIPT_NAME'] ) ? esc_url_raw( wp_unslash( $_SERVER['SCRIPT_NAME'] ) ) . '?post=' . $post->ID : false;
1854
- $referrer = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : false;
1855
 
1856
- if ( ! empty( $referrer )
1857
- && strpos( $referrer, $current_path ) !== false ) {
1858
- // Ignore this if we were on the same page so we avoid double audit entries.
1859
- return $post;
1860
- }
1861
- if ( ! empty( $post->post_title ) ) {
1862
- $event = 2100;
1863
- if ( ! $this->WasTriggered( $event ) ) {
1864
- $editor_link = $this->GetEditorLink( $post );
1865
- $this->plugin->alerts->Trigger(
1866
- $event, array(
1867
- 'PostID' => $post->ID,
1868
- 'PostType' => $post->post_type,
1869
- 'PostTitle' => $post->post_title,
1870
- 'PostStatus' => $post->post_status,
1871
- 'PostDate' => $post->post_date,
1872
- 'PostUrl' => get_permalink( $post->ID ),
1873
- $editor_link['name'] => $editor_link['value'],
1874
- )
1875
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1876
  }
1877
  }
1878
  }
1879
 
1880
  /**
1881
- * Check if the alert was triggered.
 
1882
  *
1883
- * @param integer $alert_id - Alert code.
1884
- * @return boolean
1885
  */
1886
- private function WasTriggered( $alert_id ) {
1887
- $query = new WSAL_Models_OccurrenceQuery();
1888
- $query->addOrderBy( 'created_on', true );
1889
- $query->setLimit( 1 );
1890
- $last_occurence = $query->getAdapter()->Execute( $query );
1891
- if ( ! empty( $last_occurence ) ) {
1892
- if ( $last_occurence[0]->alert_id == $alert_id ) {
 
 
 
 
1893
  return true;
1894
- }
 
1895
  }
1896
- return false;
1897
  }
1898
 
1899
  /**
@@ -1902,11 +1295,12 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1902
  * @param stdClass $oldpost - Old post.
1903
  * @param stdClass $newpost - New post.
1904
  */
1905
- private function CheckTitleChange( $oldpost, $newpost ) {
1906
  if ( $oldpost->post_title !== $newpost->post_title ) {
1907
- $editor_link = $this->GetEditorLink( $oldpost );
1908
  $this->plugin->alerts->Trigger(
1909
- 2086, array(
 
1910
  'PostID' => $newpost->ID,
1911
  'PostType' => $newpost->post_type,
1912
  'PostTitle' => $newpost->post_title,
@@ -1924,64 +1318,86 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1924
  }
1925
 
1926
  /**
1927
- * Comments/Trackbacks and Pingbacks check.
1928
  *
1929
- * @param stdClass $oldpost - Old post.
1930
- * @param stdClass $newpost - New post.
 
1931
  */
1932
- private function CheckCommentsPings( $oldpost, $newpost ) {
1933
- $result = 0;
1934
- $editor_link = $this->GetEditorLink( $newpost );
 
 
 
 
1935
 
1936
- // Comments.
1937
- if ( $oldpost->comment_status != $newpost->comment_status ) {
1938
- $type = 'Comments';
 
 
 
 
 
 
1939
 
1940
- if ( 'open' == $newpost->comment_status ) {
1941
- $event = $this->GetCommentsPingsEvent( $newpost, 'enable' );
1942
- } else {
1943
- $event = $this->GetCommentsPingsEvent( $newpost, 'disable' );
1944
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1945
 
1946
- $this->plugin->alerts->Trigger(
1947
- $event, array(
1948
- 'Type' => $type,
1949
- 'PostID' => $newpost->ID,
1950
- 'PostType' => $newpost->post_type,
1951
- 'PostStatus' => $newpost->post_status,
1952
- 'PostDate' => $newpost->post_date,
1953
- 'PostTitle' => $newpost->post_title,
1954
- 'PostUrl' => get_permalink( $newpost->ID ),
1955
- $editor_link['name'] => $editor_link['value'],
1956
- )
1957
- );
1958
- $result = 1;
1959
  }
1960
- // Trackbacks and Pingbacks.
1961
- if ( $oldpost->ping_status != $newpost->ping_status ) {
1962
- $type = 'Trackbacks and Pingbacks';
1963
 
1964
- if ( 'open' == $newpost->ping_status ) {
1965
- $event = $this->GetCommentsPingsEvent( $newpost, 'enable' );
1966
- } else {
1967
- $event = $this->GetCommentsPingsEvent( $newpost, 'disable' );
1968
- }
1969
 
1970
- $this->plugin->alerts->Trigger(
1971
- $event, array(
1972
- 'Type' => $type,
1973
- 'PostID' => $newpost->ID,
1974
- 'PostType' => $newpost->post_type,
1975
- 'PostTitle' => $newpost->post_title,
1976
- 'PostStatus' => $newpost->post_status,
1977
- 'PostDate' => $newpost->post_date,
1978
- 'PostUrl' => get_permalink( $newpost->ID ),
1979
- $editor_link['name'] => $editor_link['value'],
1980
- )
1981
- );
1982
- $result = 1;
 
1983
  }
1984
- return $result;
1985
  }
1986
 
1987
  /**
@@ -1990,8 +1406,8 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1990
  * @param stdClass $post - The post.
1991
  * @param string $status - The status.
1992
  */
1993
- private function GetCommentsPingsEvent( $post, $status ) {
1994
- if ( 'disable' == $status ) {
1995
  $event = 2111;
1996
  } else {
1997
  $event = 2112;
@@ -2000,47 +1416,41 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
2000
  }
2001
 
2002
  /**
2003
- * Method: Check status change of a post from MainWP Dashboard.
2004
  *
2005
- * @param WP_Post $post - WP_Post object.
2006
- * @param string $old_status - Old post status.
2007
- * @param string $new_status - New post status.
2008
- * @since 3.2.2
2009
  */
2010
- private function check_mainwp_status_change( $post, $old_status, $new_status ) {
2011
- // Verify function arguments.
2012
- if ( empty( $post ) || ! $post instanceof WP_Post || empty( $old_status ) || empty( $new_status ) ) {
2013
  return;
2014
  }
2015
 
2016
- // Check to see if old & new statuses don't match.
2017
- if ( $old_status !== $new_status ) {
2018
- if ( 'publish' === $new_status ) {
2019
- // Special case (publishing a post).
2020
- $editor_link = $this->GetEditorLink( $post );
2021
- $this->plugin->alerts->Trigger(
2022
- 2001, array(
2023
- 'PostID' => $post->ID,
2024
- 'PostType' => $post->post_type,
2025
- 'PostTitle' => $post->post_title,
2026
- 'PostStatus' => $post->post_status,
2027
- 'PostDate' => $post->post_date,
2028
- 'PostUrl' => get_permalink( $post->ID ),
2029
- $editor_link['name'] => $editor_link['value'],
2030
- )
2031
- );
2032
- } else {
2033
- $editor_link = $this->GetEditorLink( $post );
2034
  $this->plugin->alerts->Trigger(
2035
- 2021, array(
 
2036
  'PostID' => $post->ID,
2037
  'PostType' => $post->post_type,
2038
  'PostTitle' => $post->post_title,
2039
  'PostStatus' => $post->post_status,
2040
  'PostDate' => $post->post_date,
2041
  'PostUrl' => get_permalink( $post->ID ),
2042
- 'OldStatus' => $old_status,
2043
- 'NewStatus' => $new_status,
2044
  $editor_link['name'] => $editor_link['value'],
2045
  )
2046
  );
@@ -2049,52 +1459,40 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
2049
  }
2050
 
2051
  /**
2052
- * Get editor link.
2053
  *
2054
- * @param stdClass $post - The post.
2055
- * @return array $editor_link - Name and value link.
2056
  */
2057
- private function GetEditorLink( $post ) {
2058
- $name = 'EditorLinkPost';
2059
- $value = get_edit_post_link( $post->ID );
2060
- $editor_link = array(
2061
- 'name' => $name,
2062
- 'value' => $value,
2063
- );
2064
- return $editor_link;
 
 
 
 
 
 
 
2065
  }
2066
 
2067
  /**
2068
- * Post View Event.
2069
  *
2070
- * Alerts for Viewing of Posts and Custom Post Types.
 
 
2071
  */
2072
- public function viewing_post() {
2073
- // Retrieve the current post object.
2074
- $post = get_queried_object();
2075
- if ( is_user_logged_in() && ! is_admin() ) {
2076
- if ( $this->CheckOtherSensors( $post ) ) {
2077
- return $post->post_title;
2078
- }
2079
-
2080
- $current_path = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : false;
2081
- if (
2082
- ! empty( $_SERVER['HTTP_REFERER'] )
2083
- && ! empty( $current_path )
2084
- && false !== strpos( sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) ), $current_path )
2085
- ) {
2086
- // Ignore this if we were on the same page so we avoid double audit entries.
2087
- return;
2088
- }
2089
-
2090
- if ( ! empty( $post->post_title ) ) {
2091
- $edit_link = $this->GetEditorLink( $post ); // Get editor link.
2092
- $post_data = $this->get_post_event_data( $post ); // Get event post data.
2093
-
2094
- // Set editor link.
2095
- $post_data[ $edit_link['name'] ] = $edit_link['value'];
2096
- $this->plugin->alerts->Trigger( 2101, $post_data );
2097
- }
2098
- }
2099
  }
2100
  }
16
  /**
17
  * WordPress contents (posts, pages and custom posts).
18
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  * @package Wsal
 
20
  */
21
  class WSAL_Sensors_Content extends WSAL_AbstractSensor {
22
 
73
  * Listening to events using WP hooks.
74
  */
75
  public function HookEvents() {
76
+ add_action( 'pre_post_update', array( $this, 'get_before_post_edit_data' ), 10, 2 );
77
+ add_action( 'save_post', array( $this, 'post_changed' ), 10, 3 );
78
+ add_action( 'set_object_terms', array( $this, 'post_terms_changed' ), 10, 4 );
79
+ add_action( 'post_stuck', array( $this, 'post_stuck_event' ), 10, 1 );
80
+ add_action( 'post_unstuck', array( $this, 'post_unstuck_event' ), 10, 1 );
81
+ add_action( 'delete_post', array( $this, 'event_post_deleted' ), 10, 1 );
82
+ add_action( 'wp_trash_post', array( $this, 'event_post_trashed' ), 10, 1 );
83
+ add_action( 'untrash_post', array( $this, 'event_post_untrashed' ) );
84
+ add_action( 'future_to_publish', array( $this, 'event_publish_future' ), 10, 1 );
 
 
 
 
 
 
85
  add_action( 'admin_action_edit', array( $this, 'edit_post_in_gutenberg' ), 10 );
86
+ add_filter( 'post_edit_form_tag', array( $this, 'edit_post_in_classic' ), 10, 1 );
87
+ add_action( 'wp_head', array( $this, 'viewing_post' ), 10 );
88
+ add_action( 'create_category', array( $this, 'event_category_creation' ), 10, 1 );
89
+ add_action( 'create_post_tag', array( $this, 'event_tag_creation' ), 10, 1 );
 
90
  add_action( 'pre_delete_term', array( $this, 'check_taxonomy_term_deletion' ), 10, 2 );
91
+ add_filter( 'wp_update_term_data', array( $this, 'event_update_term_data' ), 10, 4 );
92
+ add_action( 'updated_post_meta', array( $this, 'check_template_change' ), 10, 4 );
93
 
94
  // Check if MainWP Child Plugin exists.
95
  if ( is_plugin_active( 'mainwp-child/mainwp-child.php' ) ) {
98
  }
99
 
100
  /**
101
+ * Get Post Data.
102
  *
103
+ * Collect old post data before post update event.
104
  *
105
+ * @param int $post_id - Post ID.
 
106
  */
107
+ public function get_before_post_edit_data( $post_id ) {
108
+ $post_id = (int) $post_id; // Making sure that the post id is integer.
109
+ $post = get_post( $post_id ); // Get post.
110
+
111
+ // If post exists.
112
  if ( ! empty( $post ) && $post instanceof WP_Post ) {
113
+ $this->_old_post = $post;
114
+ $this->_old_link = get_permalink( $post_id );
115
+ $this->_old_tmpl = $this->get_post_template( $this->_old_post );
116
+ $this->_old_cats = $this->get_post_categories( $this->_old_post );
117
+ $this->_old_tags = $this->get_post_tags( $this->_old_post );
118
+ $this->_old_stky = in_array( $post_id, get_option( 'sticky_posts' ), true );
119
+ $this->old_status = $post->post_status;
 
 
120
  }
 
121
  }
122
 
123
  /**
124
+ * Check all the post changes.
125
  *
126
+ * @param integer $post_id - Post ID.
127
+ * @param WP_Post $post - WP Post object.
128
+ * @param boolean $update - True if post update, false if post is new.
 
 
129
  */
130
+ public function post_changed( $post_id, $post, $update ) {
131
+ // Ignore if post type is empty, revision or trash.
132
+ if ( empty( $post->post_type ) || 'revision' === $post->post_type || 'trash' === $post->post_status ) {
133
+ return;
134
+ }
 
 
 
 
 
 
 
 
 
135
 
136
+ // Ignore updates from ignored custom post types.
137
+ if ( in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
138
+ return;
139
+ }
 
 
 
 
 
 
140
 
141
+ // Ignorable states.
142
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
143
+ // Check post creation event.
144
+ if ( $this->_old_post && 'auto-draft' === $this->_old_post->post_status && 'draft' === $post->post_status ) {
145
+ $this->check_post_creation( $this->_old_post, $post );
 
 
 
 
 
146
  }
147
+ return;
148
+ }
149
 
150
+ /**
151
+ * Post Changed.
152
+ *
153
+ * Don't let the second request for meta update from Gutenberg pass this checkpoint.
154
+ *
155
+ * Only pass these requests:
156
+ * 1. Rest request from Gutenberg.
157
+ * 2. Classic editor request.
158
+ * 3. Quick edit ajax request.
159
+ *
160
+ * @since 3.4
161
+ */
162
+ if ( ! defined( 'REST_REQUEST' ) && ! defined( 'DOING_AJAX' ) ) {
163
+ // Either Gutenberg's second post request or classic editor's request.
164
+ if ( ! isset( $_REQUEST['classic-editor'] ) ) {
165
+ $editor_replace = get_option( 'classic-editor-replace', 'classic' );
166
+ $allow_users = get_option( 'classic-editor-allow-users', 'disallow' );
167
+
168
+ // If block editor is selected and users are not allowed to switch editors then it is Gutenberg's second request.
169
+ if ( 'block' === $editor_replace && 'disallow' === $allow_users ) {
170
+ return;
171
+ } elseif ( 'allow' === $allow_users ) { // Else if users are allowed to switch then it is Gutenberg's second request.
172
+ return;
173
+ }
174
  }
175
+ }
 
 
 
 
 
 
 
 
 
176
 
177
+ if ( $update ) {
178
+ $status_event = $this->check_status_change( $this->_old_post, $post );
 
 
 
 
 
 
 
 
179
 
180
+ if ( 2001 !== $status_event && 'auto-draft' !== $this->_old_post->post_status ) {
181
+ // Handle update post events.
182
+ $changes = 0;
183
+ $changes = $this->check_author_change( $this->_old_post, $post )
184
+ + $this->check_parent_change( $this->_old_post, $post )
185
+ + $this->check_visibility_change( $this->_old_post, $post, $this->old_status, $post->post_status )
186
+ + $this->check_date_change( $this->_old_post, $post )
187
+ + $this->check_permalink_change( $this->_old_link, get_permalink( $post->ID ), $post )
188
+ + $this->check_comments_pings( $this->_old_post, $post );
189
+
190
+ // If a status change event has occurred, then don't log event 2002 (post modified).
191
+ $changes = $status_event ? true : $changes;
192
+ $this->check_modification_change( $post->ID, $this->_old_post, $post, $changes );
193
  }
194
+ } else {
195
+ // If not update then check post creation.
196
+ $this->check_post_creation( $this->_old_post, $post );
197
  }
 
 
 
198
  }
199
 
200
  /**
201
+ * Check if post terms changed via Gutenberg.
202
  *
203
+ * @param int $post_id - Post ID.
204
+ * @param array $terms - Array of terms.
205
+ * @param array $tt_ids - Array of taxonomy term ids.
206
+ * @param string $taxonomy - Taxonomy slug.
 
207
  */
208
+ public function post_terms_changed( $post_id, $terms, $tt_ids, $taxonomy ) {
209
+ $post = get_post( $post_id );
210
+
211
+ if ( is_wp_error( $post ) ) {
212
+ return;
 
 
 
213
  }
 
214
 
215
+ if ( 'auto-draft' === $post->post_status ) {
216
+ return;
217
+ }
218
+
219
+ if ( 'post_tag' === $taxonomy ) {
220
+ // Check tags change event.
221
+ $this->check_tags_change( $this->_old_tags, $this->get_post_tags( $post ), $post );
222
+ } else {
223
+ // Check categories change event.
224
+ $this->check_categories_change( $this->_old_cats, $this->get_post_categories( $post ), $post );
225
+ }
226
  }
227
 
228
  /**
229
+ * Post Stuck Event.
230
  *
231
+ * @param integer $post_id - Post ID.
232
  */
233
+ public function post_stuck_event( $post_id ) {
234
+ $this->log_sticky_post_event( $post_id, 2049 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
 
237
  /**
238
+ * Post Unstuck Event.
239
  *
240
+ * @param integer $post_id - Post ID.
 
241
  */
242
+ public function post_unstuck_event( $post_id ) {
243
+ $this->log_sticky_post_event( $post_id, 2050 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  }
245
 
246
  /**
247
+ * Post permanently deleted.
 
 
248
  *
249
+ * @param integer $post_id - Post ID.
 
250
  */
251
+ public function event_post_deleted( $post_id ) {
252
+ // Exclude CPTs from external plugins.
253
+ $post = get_post( $post_id );
254
+ if ( $this->check_other_sensors( $post ) ) {
255
+ return;
256
+ }
257
 
258
+ // Ignore attachments, revisions and menu items.
259
+ if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
260
+ $event = 2008;
261
+ // Check WordPress backend operations.
262
+ if ( $this->check_auto_draft( $event, $post->post_title ) ) {
263
+ return;
 
 
 
264
  }
265
+
266
+ $event_data = $this->get_post_event_data( $post ); // Get event data.
267
+ $this->plugin->alerts->Trigger( $event, $event_data ); // Log event.
268
  }
269
  }
270
 
271
  /**
272
+ * Post moved to the trash.
273
  *
274
+ * @param integer $post_id - Post ID.
 
275
  */
276
+ public function event_post_trashed( $post_id ) {
277
+ $post = get_post( $post_id );
278
+
279
+ if ( $this->check_other_sensors( $post ) ) {
280
+ return;
281
  }
282
 
283
+ if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
284
+ $editor_link = $this->get_editor_link( $post );
 
285
 
286
+ $this->plugin->alerts->Trigger(
287
+ 2012,
288
+ array(
289
+ 'PostID' => $post->ID,
290
+ 'PostType' => $post->post_type,
291
+ 'PostTitle' => $post->post_title,
292
+ 'PostStatus' => $post->post_status,
293
+ 'PostDate' => $post->post_date,
294
+ 'PostUrl' => get_permalink( $post->ID ),
295
+ $editor_link['name'] => $editor_link['value'],
296
+ )
297
+ );
298
  }
 
 
 
299
  }
300
 
301
  /**
302
+ * Post restored from trash.
303
  *
304
+ * @param integer $post_id - Post ID.
 
305
  */
306
+ public function event_post_untrashed( $post_id ) {
307
+ $post = get_post( $post_id );
308
+
309
+ if ( $this->check_other_sensors( $post ) ) {
310
+ return;
311
  }
312
 
313
+ if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
314
+ $editor_link = $this->get_editor_link( $post );
315
+
316
+ $this->plugin->alerts->Trigger(
317
+ 2014,
318
+ array(
319
+ 'PostID' => $post->ID,
320
+ 'PostType' => $post->post_type,
321
+ 'PostTitle' => $post->post_title,
322
+ 'PostStatus' => $post->post_status,
323
+ 'PostDate' => $post->post_date,
324
+ 'PostUrl' => get_permalink( $post->ID ),
325
+ $editor_link['name'] => $editor_link['value'],
326
+ )
327
+ );
328
+ remove_action( 'save_post', array( $this, 'post_changed' ), 10, 3 );
329
+ }
330
  }
331
 
332
  /**
333
+ * Post future publishing.
334
  *
335
+ * @param integer $post_id - Post ID.
 
336
  */
337
+ public function event_publish_future( $post_id ) {
338
+ $post = get_post( $post_id );
 
 
339
 
340
+ if ( ! in_array( $post->post_type, $this->plugin->alerts->ignored_cpts, true ) ) {
341
+ $editor_link = $this->get_editor_link( $post );
342
+
343
+ $this->plugin->alerts->Trigger(
344
+ 2001,
345
+ array(
346
+ 'PostID' => $post->ID,
347
+ 'PostType' => $post->post_type,
348
+ 'PostTitle' => $post->post_title,
349
+ 'PostStatus' => $post->post_status,
350
+ 'PostDate' => $post->post_date,
351
+ 'PostUrl' => get_permalink( $post->ID ),
352
+ $editor_link['name'] => $editor_link['value'],
353
+ )
354
+ );
355
+ remove_action( 'save_post', array( $this, 'post_changed' ), 10, 3 );
356
+ }
357
  }
358
 
359
  /**
360
+ * Alert for Editing of Posts and Custom Post Types in Gutenberg.
361
  *
362
+ * @since 3.2.4
 
 
363
  */
364
+ public function edit_post_in_gutenberg() {
365
+ global $pagenow;
366
+
367
+ if ( 'post.php' !== $pagenow ) {
 
 
 
 
 
 
 
 
368
  return;
369
  }
370
 
371
+ // @codingStandardsIgnoreStart
372
+ $post_id = isset( $_GET['post'] ) ? (int) sanitize_text_field( wp_unslash( $_GET['post'] ) ) : false;
373
+ // @codingStandardsIgnoreEnd
374
+
375
+ // Check post id.
376
+ if ( empty( $post_id ) ) {
377
  return;
378
  }
379
 
380
+ if ( is_user_logged_in() && is_admin() ) {
381
+ // Get post.
382
+ $post = get_post( $post_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383
 
384
+ // Log event.
385
+ $this->post_opened_in_editor( $post );
 
386
  }
387
  }
388
 
389
  /**
390
+ * Alerts for Editing of Posts, Pages and Custom Post Types.
391
  *
392
+ * @param WP_Post $post - Post.
 
 
 
 
 
 
393
  */
394
+ public function edit_post_in_classic( $post ) {
395
+ if ( is_user_logged_in() && is_admin() ) {
396
+ // Log event.
397
+ $this->post_opened_in_editor( $post );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398
  }
399
+ return $post;
400
  }
401
 
402
  /**
403
+ * Post View Event.
 
 
404
  *
405
+ * Alerts for Viewing of Posts and Custom Post Types.
 
 
406
  */
407
+ public function viewing_post() {
408
+ // Retrieve the current post object.
409
+ $post = get_queried_object();
410
+ if ( is_user_logged_in() && ! is_admin() ) {
411
+ if ( $this->check_other_sensors( $post ) ) {
412
+ return $post->post_title;
 
 
413
  }
 
 
 
 
 
 
414
 
415
+ $current_path = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : false;
416
  if (
417
+ ! empty( $_SERVER['HTTP_REFERER'] )
418
+ && ! empty( $current_path )
419
+ && false !== strpos( sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) ), $current_path )
420
  ) {
421
+ // Ignore this if we were on the same page so we avoid double audit entries.
422
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  }
 
 
 
424
 
425
+ if ( ! empty( $post->post_title ) ) {
426
+ $edit_link = $this->get_editor_link( $post ); // Get editor link.
427
+ $post_data = $this->get_post_event_data( $post ); // Get event post data.
428
 
429
+ // Set editor link.
430
+ $post_data[ $edit_link['name'] ] = $edit_link['value'];
431
+ $this->plugin->alerts->Trigger( 2101, $post_data );
 
 
 
432
  }
433
  }
434
  }
435
 
436
  /**
437
+ * New category created.
438
  *
439
+ * @param integer $category_id - Category ID.
440
  */
441
+ public function event_category_creation( $category_id ) {
442
+ $category = get_category( $category_id );
443
+ $category_link = $this->get_taxonomy_edit_link( $category_id, 'category' );
444
  $this->plugin->alerts->Trigger(
445
+ 2023,
446
+ array(
447
+ 'CategoryName' => $category->name,
448
+ 'Slug' => $category->slug,
449
+ 'CategoryLink' => $category_link,
 
 
 
450
  )
451
  );
452
  }
453
 
454
  /**
455
+ * New tag created.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456
  *
457
+ * @param int $tag_id - Tag ID.
458
  */
459
+ public function event_tag_creation( $tag_id ) {
460
+ $tag = get_tag( $tag_id );
461
+ $tag_link = $this->get_taxonomy_edit_link( $tag_id );
 
 
 
462
  $this->plugin->alerts->Trigger(
463
+ 2121,
464
+ array(
465
+ 'TagName' => $tag->name,
466
+ 'Slug' => $tag->slug,
467
+ 'TagLink' => $tag_link,
 
 
 
468
  )
469
  );
470
  }
471
 
472
  /**
473
+ * Taxonomy Terms Deleted Events.
474
  *
475
+ * @param integer $term_id - Term ID.
476
+ * @param string $taxonomy - Taxonomy Name.
477
  */
478
+ public function check_taxonomy_term_deletion( $term_id, $taxonomy ) {
479
+ if ( 'post_tag' === $taxonomy ) {
480
+ $tag = get_tag( $term_id );
481
+ $this->plugin->alerts->Trigger(
482
+ 2122,
483
+ array(
484
+ 'TagID' => $term_id,
485
+ 'TagName' => $tag->name,
486
+ 'Slug' => $tag->slug,
487
+ )
488
+ );
489
+ } elseif ( 'category' === $taxonomy ) {
490
+ $category = get_category( $term_id );
491
+ $category_link = $this->get_taxonomy_edit_link( $term_id, $taxonomy );
492
+ $this->plugin->alerts->Trigger(
493
+ 2024,
494
+ array(
495
+ 'CategoryID' => $term_id,
496
+ 'CategoryName' => $category->cat_name,
497
+ 'Slug' => $category->slug,
498
+ 'CategoryLink' => $category_link,
499
+ )
500
+ );
501
  }
 
 
 
 
 
 
 
 
 
 
 
 
502
  }
503
 
504
  /**
505
+ * Triggered when term data is updated.
506
  *
507
+ * @param array $data Term data to be updated.
508
+ * @param int $term_id Term ID.
509
+ * @param string $taxonomy Taxonomy slug.
510
+ * @param array $args Arguments passed to wp_update_term().
511
  */
512
+ public function event_update_term_data( $data, $term_id, $taxonomy, $args ) {
513
+ // Get new data.
514
+ $new_name = ( isset( $data['name'] ) ) ? $data['name'] : false;
515
+ $new_slug = ( isset( $data['slug'] ) ) ? $data['slug'] : false;
516
+ $new_desc = ( isset( $args['description'] ) ) ? $args['description'] : false;
517
+ $new_parent = ( isset( $args['parent'] ) ) ? $args['parent'] : false;
518
+
519
+ // Get old data.
520
+ $term = get_term( $term_id, $taxonomy );
521
+ $old_name = $term->name;
522
+ $old_slug = $term->slug;
523
+ $old_desc = $term->description;
524
+ $old_parent = $term->parent;
525
+ $term_link = $this->get_taxonomy_edit_link( $term_id, $taxonomy );
526
 
527
+ // Check if the taxonomy is `post tag`.
528
+ if ( 'post_tag' === $taxonomy ) {
529
+ // Update if both names are not same.
530
+ if ( $old_name !== $new_name ) {
531
+ $this->plugin->alerts->Trigger(
532
+ 2123,
533
+ array(
534
+ 'old_name' => $old_name,
535
+ 'new_name' => $new_name,
536
+ 'TagLink' => $term_link,
537
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
539
  }
540
 
541
+ // Update if both slugs are not same.
542
+ if ( $old_slug !== $new_slug ) {
543
+ $this->plugin->alerts->Trigger(
544
+ 2124,
545
+ array(
546
+ 'tag' => $new_name,
547
+ 'old_slug' => $old_slug,
548
+ 'new_slug' => $new_slug,
549
+ 'TagLink' => $term_link,
550
+ )
551
+ );
552
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
553
 
554
+ // Update if both descriptions are not same.
555
+ if ( $old_desc !== $new_desc ) {
 
 
 
 
 
 
 
 
 
 
556
  $this->plugin->alerts->Trigger(
557
+ 2125,
558
+ array(
559
+ 'tag' => $new_name,
560
+ 'TagLink' => $term_link,
561
+ 'old_desc' => $old_desc,
562
+ 'new_desc' => $new_desc,
563
+ 'ReportText' => $old_desc . '|' . $new_desc,
 
564
  )
565
  );
566
+ }
567
+ } elseif ( 'category' === $taxonomy ) { // Check if the taxonomy is `category`.
568
+ // Log event if both names are not same.
569
+ if ( $old_name !== $new_name ) {
570
  $this->plugin->alerts->Trigger(
571
+ 2127,
572
+ array(
573
+ 'old_name' => $old_name,
574
+ 'new_name' => $new_name,
575
+ 'cat_link' => $term_link,
 
 
 
 
 
576
  )
577
  );
578
  }
 
 
 
579
 
580
+ // Log event if both slugs are not same.
581
+ if ( $old_slug !== $new_slug ) {
 
 
 
 
 
 
 
 
 
582
  $this->plugin->alerts->Trigger(
583
+ 2128,
584
+ array(
585
+ 'CategoryName' => $new_name,
586
+ 'old_slug' => $old_slug,
587
+ 'new_slug' => $new_slug,
588
+ 'cat_link' => $term_link,
 
 
 
 
 
589
  )
590
  );
 
591
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
592
 
593
+ if ( 0 !== $old_parent ) {
594
+ $old_parent_obj = get_category( $old_parent );
595
+ $old_parent_name = empty( $old_parent_obj ) ? 'no parent' : $old_parent_obj->name;
596
+ } else {
597
+ $old_parent_name = 'no parent';
598
+ }
599
+ if ( 0 !== $new_parent ) {
600
+ $new_parent_obj = get_category( $new_parent );
601
+ $new_parent_name = empty( $new_parent_obj ) ? 'no parent' : $new_parent_obj->name;
602
+ } else {
603
+ $new_parent_name = 'no parent';
604
+ }
605
+
606
+ if ( $old_parent_name !== $new_parent_name ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  $this->plugin->alerts->Trigger(
608
+ 2052,
609
+ array(
610
+ 'CategoryName' => $new_name,
611
+ 'OldParent' => $old_parent_name,
612
+ 'NewParent' => $new_parent_name,
613
+ 'CategoryLink' => $term_link,
 
 
 
 
 
614
  )
615
  );
 
616
  }
617
  }
618
+ return $data; // Return data for the filter.
619
  }
620
 
621
  /**
622
+ * Check Page Template Update.
623
  *
624
+ * @param int $meta_id ID of updated metadata entry.
625
+ * @param int $post_id Post ID.
626
+ * @param string $meta_key Meta key.
627
+ * @param mixed $meta_value Meta value.
628
  */
629
+ public function check_template_change( $meta_id, $post_id, $meta_key, $meta_value ) {
630
+ if ( '_wp_page_template' !== $meta_key ) {
631
+ return;
632
+ }
633
+
634
+ if ( ! $post_id ) {
635
+ return;
636
+ }
637
+
638
+ $post = get_post( $post_id );
639
+ $old_tmpl = ucwords( str_replace( array( '-', '_' ), ' ', basename( $this->_old_tmpl, '.php' ) ) );
640
+ $new_tmpl_path = $this->get_post_template( $post );
641
+ $new_tmpl = ucwords( str_replace( array( '-', '_' ), ' ', basename( $new_tmpl_path, '.php' ) ) );
642
+
643
+ if ( $old_tmpl !== $new_tmpl ) {
644
+ $editor_link = $this->get_editor_link( $post );
645
  $this->plugin->alerts->Trigger(
646
+ 2048,
647
+ array(
648
  'PostID' => $post->ID,
649
  'PostType' => $post->post_type,
650
  'PostTitle' => $post->post_title,
651
  'PostStatus' => $post->post_status,
652
  'PostDate' => $post->post_date,
653
+ 'OldTemplate' => $old_tmpl,
654
+ 'NewTemplate' => $new_tmpl,
655
+ 'OldTemplatePath' => $this->_old_tmpl,
656
+ 'NewTemplatePath' => $new_tmpl_path,
657
  $editor_link['name'] => $editor_link['value'],
658
  )
659
  );
 
660
  }
661
  }
662
 
663
  /**
664
+ * Collect old post data before MainWP Post update event.
665
  *
666
+ * @param array $new_post - Array of new post data.
667
+ * @param array $post_custom - Array of data related to MainWP.
 
 
668
  */
669
+ public function event_mainwp_init( $new_post, $post_custom ) {
670
+ // Get post id.
671
+ $post_id = isset( $post_custom['_mainwp_edit_post_id'][0] ) ? $post_custom['_mainwp_edit_post_id'][0] : false;
672
+ $post_id = (int) $post_id;
 
 
 
 
 
 
673
 
674
+ // Check if ID exists.
675
+ if ( $post_id ) {
676
+ // Get post.
677
+ $post = get_post( $post_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
678
 
679
+ // If post exists.
680
+ if ( ! empty( $post ) ) {
681
+ $this->_old_post = $post;
682
+ $this->_old_link = get_permalink( $post_id );
683
+ $this->_old_tmpl = $this->get_post_template( $this->_old_post );
684
+ $this->_old_cats = $this->get_post_categories( $this->_old_post );
685
+ $this->_old_tags = $this->get_post_tags( $this->_old_post );
686
+ $this->_old_stky = in_array( $post_id, get_option( 'sticky_posts' ), true );
687
+ }
688
+ }
689
+ }
690
 
691
+ /**
692
+ * Get the template path.
693
+ *
694
+ * @param WP_Post $post - The post.
695
+ * @return string - Full path to file.
696
+ */
697
+ protected function get_post_template( $post ) {
698
+ if ( ! isset( $post->ID ) ) {
699
+ return '';
700
+ }
701
 
702
+ $id = $post->ID;
703
+ $template = get_page_template_slug( $id );
704
+ $pagename = $post->post_name;
705
 
706
+ $templates = array();
707
+ if ( $template && 0 === validate_file( $template ) ) {
708
+ $templates[] = $template;
 
 
 
 
 
 
 
 
709
  }
710
+ if ( $pagename ) {
711
+ $templates[] = "page-$pagename.php";
712
+ }
713
+ if ( $id ) {
714
+ $templates[] = "page-$id.php";
715
+ }
716
+ $templates[] = 'page.php';
717
+
718
+ return get_query_template( 'page', $templates );
719
  }
720
 
721
  /**
722
+ * Get post categories (array of category names).
723
  *
724
+ * @param stdClass $post - The post.
725
+ * @return array - List of categories.
726
  */
727
+ protected function get_post_categories( $post ) {
728
+ return ! isset( $post->ID ) ? array() : wp_get_post_categories( $post->ID, array( 'fields' => 'names' ) );
 
 
 
 
 
 
 
 
729
  }
730
 
731
  /**
732
+ * Get post tags (array of tag names).
733
  *
734
+ * @param stdClass $post - The post.
735
+ * @return array - List of tags.
736
  */
737
+ protected function get_post_tags( $post ) {
738
+ return ! isset( $post->ID ) ? array() : wp_get_post_tags( $post->ID, array( 'fields' => 'names' ) );
 
 
 
 
 
 
 
 
739
  }
740
 
741
  /**
742
+ * Check post creation.
743
+ *
744
+ * @global array $_POST
745
  *
746
+ * @param WP_Post $old_post - Old post.
747
+ * @param WP_Post $new_post - New post.
748
  */
749
+ protected function check_post_creation( $old_post, $new_post ) {
750
+ if ( ! empty( $new_post ) && $new_post instanceof WP_Post ) {
751
+ $event = 0;
752
+ $is_scheduled = false;
753
+ switch ( $new_post->post_status ) {
754
+ case 'publish':
755
+ $event = 2001;
756
+ break;
757
+ case 'draft':
758
+ $event = 2000;
759
+ break;
760
+ case 'future':
761
+ $event = 2074;
762
+ $is_scheduled = true;
763
+ break;
764
+ case 'pending':
765
+ $event = 2073;
766
+ break;
767
+ default:
768
+ break;
769
+ }
770
+ if ( $event ) {
771
+ $editor_link = $this->get_editor_link( $new_post ); // Editor link.
772
+ $event_data = $this->get_post_event_data( $new_post ); // Post event data.
 
773
 
774
+ // Set editor link in the event data.
775
+ $event_data[ $editor_link['name'] ] = $editor_link['value'];
776
 
777
+ if ( $is_scheduled ) {
778
+ $event_data['PublishingDate'] = $new_post->post_date;
779
+ $this->plugin->alerts->Trigger( $event, $event_data );
780
+ } else {
781
+ $this->plugin->alerts->Trigger( $event, $event_data );
 
 
 
782
  }
 
 
 
 
 
 
783
  }
784
  }
785
+ }
786
 
787
+ /**
788
+ * Get editor link.
789
+ *
790
+ * @param stdClass $post - The post.
791
+ * @return array $editor_link - Name and value link.
792
+ */
793
+ private function get_editor_link( $post ) {
794
+ $name = 'EditorLinkPost';
795
+ $value = get_edit_post_link( $post->ID );
796
+ $editor_link = array(
797
+ 'name' => $name,
798
+ 'value' => $value,
799
+ );
800
+ return $editor_link;
801
+ }
802
+
803
+ /**
804
+ * Return Post Event Data.
805
+ *
806
+ * @param WP_Post $post - WP Post object.
807
+ * @return array
808
+ */
809
+ public function get_post_event_data( $post ) {
810
+ if ( ! empty( $post ) && $post instanceof WP_Post ) {
811
+ $event_data = array(
812
+ 'PostID' => $post->ID,
813
+ 'PostType' => $post->post_type,
814
+ 'PostTitle' => $post->post_title,
815
+ 'PostStatus' => $post->post_status,
816
+ 'PostDate' => $post->post_date,
817
+ 'PostUrl' => get_permalink( $post->ID ),
818
  );
819
+ return $event_data;
820
  }
821
+ return array();
822
  }
823
 
824
  /**
825
+ * Author changed.
826
  *
827
+ * @param stdClass $oldpost - Old post.
828
+ * @param stdClass $newpost - New post.
829
  */
830
+ protected function check_author_change( $oldpost, $newpost ) {
831
+ if ( $oldpost->post_author !== $newpost->post_author ) {
832
+ $editor_link = $this->get_editor_link( $oldpost );
833
+ $old_author = get_userdata( $oldpost->post_author );
834
+ $old_author = ( is_object( $old_author ) ) ? $old_author->user_login : 'N/A';
835
+ $new_author = get_userdata( $newpost->post_author );
836
+ $new_author = ( is_object( $new_author ) ) ? $new_author->user_login : 'N/A';
 
 
 
 
 
 
837
  $this->plugin->alerts->Trigger(
838
+ 2019,
839
+ array(
840
+ 'PostID' => $oldpost->ID,
841
+ 'PostType' => $oldpost->post_type,
842
+ 'PostTitle' => $oldpost->post_title,
843
+ 'PostStatus' => $oldpost->post_status,
844
+ 'PostDate' => $oldpost->post_date,
845
+ 'PostUrl' => get_permalink( $oldpost->ID ),
846
+ 'OldAuthor' => $old_author,
847
+ 'NewAuthor' => $new_author,
848
+ $editor_link['name'] => $editor_link['value'],
849
  )
850
  );
851
+ return 1;
852
  }
853
  }
854
 
855
  /**
856
+ * Status changed.
857
  *
858
+ * @param stdClass $oldpost - Old post.
859
+ * @param stdClass $newpost - New post.
860
+ * @return integer
861
  */
862
+ protected function check_status_change( $oldpost, $newpost ) {
863
+ if ( $oldpost->post_status !== $newpost->post_status ) {
864
+ $event = 0;
865
+ $is_scheduled = false;
 
 
 
 
 
 
 
866
 
867
+ if ( 'auto-draft' === $oldpost->post_status && 'draft' === $newpost->post_status ) {
868
+ $event = 2000;
869
+ } elseif ( 'publish' === $newpost->post_status ) {
870
+ $event = 2001;
871
+ } elseif ( 'pending' === $newpost->post_status ) {
872
+ $event = 2073;
873
+ } elseif ( 'future' === $newpost->post_status ) {
874
+ $event = 2074;
875
+ $is_scheduled = true;
 
 
 
 
 
 
876
  } else {
877
+ $event = 2021;
 
 
 
 
878
  }
879
 
880
+ if ( $event ) {
881
+ $editor_link = $this->get_editor_link( $newpost ); // Editor link.
882
+ $event_data = $this->get_post_event_data( $newpost ); // Post event data.
883
+
884
+ // Set editor link in the event data.
885
+ $event_data[ $editor_link['name'] ] = $editor_link['value'];
886
+
887
+ if ( $is_scheduled ) {
888
+ $event_data['PublishingDate'] = $newpost->post_date;
889
+ $this->plugin->alerts->Trigger( $event, $event_data );
890
+ } elseif ( 2021 === $event ) {
891
+ $event_data['OldStatus'] = $oldpost->post_status;
892
+ $event_data['NewStatus'] = $newpost->post_status;
893
+ $this->plugin->alerts->Trigger( $event, $event_data );
894
+ } else {
895
+ $this->plugin->alerts->Trigger( $event, $event_data );
896
+ }
897
  }
 
 
898
 
899
+ return $event;
 
 
 
 
 
 
 
 
 
 
900
  }
 
901
  }
902
 
903
  /**
904
+ * Post parent changed.
905
  *
906
+ * @param stdClass $oldpost - Old post.
907
+ * @param stdClass $newpost - New post.
908
  */
909
+ protected function check_parent_change( $oldpost, $newpost ) {
910
+ if ( $oldpost->post_parent !== $newpost->post_parent && 'page' === $newpost->post_type ) {
911
+ $editor_link = $this->get_editor_link( $oldpost );
912
+ $this->plugin->alerts->Trigger(
913
+ 2047,
914
+ array(
915
+ 'PostID' => $oldpost->ID,
916
+ 'PostType' => $oldpost->post_type,
917
+ 'PostTitle' => $oldpost->post_title,
918
+ 'PostStatus' => $oldpost->post_status,
919
+ 'PostDate' => $oldpost->post_date,
920
+ 'OldParent' => $oldpost->post_parent,
921
+ 'NewParent' => $newpost->post_parent,
922
+ 'OldParentName' => $oldpost->post_parent ? get_the_title( $oldpost->post_parent ) : 'no parent',
923
+ 'NewParentName' => $newpost->post_parent ? get_the_title( $newpost->post_parent ) : 'no parent',
924
+ $editor_link['name'] => $editor_link['value'],
925
+ )
926
+ );
927
+ return 1;
928
  }
 
929
  }
930
 
931
  /**
932
+ * Permalink changed.
933
  *
934
+ * @param string $old_link - Old permalink.
935
+ * @param string $new_link - New permalink.
936
+ * @param stdClass $post - The post.
937
  */
938
+ protected function check_permalink_change( $old_link, $new_link, $post ) {
939
+ if ( $old_link !== $new_link ) {
940
+ $editor_link = $this->get_editor_link( $post );
941
+ $this->plugin->alerts->Trigger(
942
+ 2017,
943
+ array(
944
+ 'PostID' => $post->ID,
945
+ 'PostType' => $post->post_type,
946
+ 'PostTitle' => $post->post_title,
947
+ 'PostStatus' => $post->post_status,
948
+ 'PostDate' => $post->post_date,
949
+ 'OldUrl' => $old_link,
950
+ 'NewUrl' => $new_link,
951
+ $editor_link['name'] => $editor_link['value'],
952
+ 'ReportText' => '"' . $old_link . '"|"' . $new_link . '"',
953
+ )
954
+ );
955
+ return 1;
956
  }
957
+ return 0;
958
  }
959
 
960
  /**
961
+ * Post visibility changed.
962
  *
963
+ * @param stdClass $oldpost - Old post.
964
+ * @param stdClass $newpost - New post.
965
+ * @param string $old_status - Old status.
966
+ * @param string $new_status - New status.
967
  */
968
+ protected function check_visibility_change( $oldpost, $newpost, $old_status, $new_status ) {
969
+ if ( 'draft' === $old_status || 'draft' === $new_status ) {
970
+ return;
 
 
971
  }
 
972
 
973
+ $old_visibility = '';
974
+ $new_visibility = '';
975
+
976
+ if ( $oldpost->post_password ) {
977
+ $old_visibility = __( 'Password Protected', 'wp-security-audit-log' );
978
+ } elseif ( 'publish' === $old_status ) {
979
+ $old_visibility = __( 'Public', 'wp-security-audit-log' );
980
+ } elseif ( 'private' === $old_status ) {
981
+ $old_visibility = __( 'Private', 'wp-security-audit-log' );
982
+ }
983
+
984
+ if ( $newpost->post_password ) {
985
+ $new_visibility = __( 'Password Protected', 'wp-security-audit-log' );
986
+ } elseif ( 'publish' === $new_status ) {
987
+ $new_visibility = __( 'Public', 'wp-security-audit-log' );
988
+ } elseif ( 'private' === $new_status ) {
989
+ $new_visibility = __( 'Private', 'wp-security-audit-log' );
990
+ }
991
+
992
+ if ( $old_visibility && $new_visibility && ( $old_visibility !== $new_visibility ) ) {
993
+ $editor_link = $this->get_editor_link( $oldpost );
994
+ $this->plugin->alerts->Trigger(
995
+ 2025,
996
+ array(
997
+ 'PostID' => $oldpost->ID,
998
+ 'PostType' => $oldpost->post_type,
999
+ 'PostTitle' => $oldpost->post_title,
1000
+ 'PostStatus' => $newpost->post_status,
1001
+ 'PostDate' => $oldpost->post_date,
1002
+ 'PostUrl' => get_permalink( $oldpost->ID ),
1003
+ 'OldVisibility' => $old_visibility,
1004
+ 'NewVisibility' => $new_visibility,
1005
+ $editor_link['name'] => $editor_link['value'],
1006
+ )
1007
+ );
1008
+ return 1;
1009
  }
1010
  }
1011
 
1012
  /**
1013
+ * Post date changed.
 
1014
  *
1015
+ * @param stdClass $oldpost - Old post.
1016
+ * @param stdClass $newpost - New post.
1017
  */
1018
+ protected function check_date_change( $oldpost, $newpost ) {
1019
+ $from = strtotime( $oldpost->post_date );
1020
+ $to = strtotime( $newpost->post_date );
1021
+
1022
+ if ( 'draft' === $oldpost->post_status || 'pending' === $oldpost->post_status ) {
1023
+ return 0;
1024
  }
1025
+
1026
+ if ( $from !== $to ) {
1027
+ $editor_link = $this->get_editor_link( $oldpost );
1028
+ $this->plugin->alerts->Trigger(
1029
+ 2027,
1030
+ array(
1031
+ 'PostID' => $oldpost->ID,
1032
+ 'PostType' => $oldpost->post_type,
1033
+ 'PostTitle' => $oldpost->post_title,
1034
+ 'PostStatus' => $oldpost->post_status,
1035
+ 'PostDate' => $newpost->post_date,
1036
+ 'PostUrl' => get_permalink( $oldpost->ID ),
1037
+ 'OldDate' => $oldpost->post_date,
1038
+ 'NewDate' => $newpost->post_date,
1039
+ $editor_link['name'] => $editor_link['value'],
1040
+ )
1041
+ );
1042
+ return 1;
1043
  }
1044
+ return 0;
1045
  }
1046
 
1047
  /**
1048
+ * Comments/Trackbacks and Pingbacks check.
1049
  *
1050
+ * @param stdClass $oldpost - Old post.
1051
+ * @param stdClass $newpost - New post.
 
1052
  */
1053
+ private function check_comments_pings( $oldpost, $newpost ) {
1054
+ $result = 0;
1055
+ $editor_link = $this->get_editor_link( $newpost );
 
1056
 
1057
+ // Comments.
1058
+ if ( $oldpost->comment_status !== $newpost->comment_status ) {
1059
+ $type = 'Comments';
1060
 
1061
+ if ( 'open' === $newpost->comment_status ) {
1062
+ $event = $this->get_comments_pings_event( $newpost, 'enable' );
1063
+ } else {
1064
+ $event = $this->get_comments_pings_event( $newpost, 'disable' );
1065
+ }
1066
+
1067
+ $this->plugin->alerts->Trigger(
1068
+ $event,
1069
+ array(
1070
+ 'Type' => $type,
1071
+ 'PostID' => $newpost->ID,
1072
+ 'PostType' => $newpost->post_type,
1073
+ 'PostStatus' => $newpost->post_status,
1074
+ 'PostDate' => $newpost->post_date,
1075
+ 'PostTitle' => $newpost->post_title,
1076
+ 'PostStatus' => $newpost->post_status,
1077
+ 'PostUrl' => get_permalink( $newpost->ID ),
1078
+ $editor_link['name'] => $editor_link['value'],
1079
+ )
1080
+ );
1081
+ $result = 1;
1082
+ }
1083
+ // Trackbacks and Pingbacks.
1084
+ if ( $oldpost->ping_status !== $newpost->ping_status ) {
1085
+ $type = 'Trackbacks and Pingbacks';
1086
+
1087
+ if ( 'open' === $newpost->ping_status ) {
1088
+ $event = $this->get_comments_pings_event( $newpost, 'enable' );
1089
+ } else {
1090
+ $event = $this->get_comments_pings_event( $newpost, 'disable' );
1091
  }
1092
+
1093
+ $this->plugin->alerts->Trigger(
1094
+ $event,
1095
+ array(
1096
+ 'Type' => $type,
1097
+ 'PostID' => $newpost->ID,
1098
+ 'PostType' => $newpost->post_type,
1099
+ 'PostTitle' => $newpost->post_title,
1100
+ 'PostStatus' => $newpost->post_status,
1101
+ 'PostDate' => $newpost->post_date,
1102
+ 'PostUrl' => get_permalink( $newpost->ID ),
1103
+ $editor_link['name'] => $editor_link['value'],
1104
+ )
1105
+ );
1106
+ $result = 1;
1107
  }
1108
+ return $result;
1109
  }
1110
 
1111
  /**
1112
+ * Categories changed.
1113
  *
1114
+ * @param array $old_cats - Old categories.
1115
+ * @param array $new_cats - New categories.
1116
+ * @param WP_Post $post - The post.
1117
  */
1118
+ protected function check_categories_change( $old_cats, $new_cats, $post ) {
1119
+ $old_cats = implode( ', ', (array) $old_cats );
1120
+ $new_cats = implode( ', ', (array) $new_cats );
1121
+
1122
+ if ( $old_cats !== $new_cats && 'page' !== $post->post_type ) {
1123
+ $editor_link = $this->get_editor_link( $post );
1124
+ $alert_data = array(
1125
+ 'PostID' => $post->ID,
1126
+ 'PostType' => $post->post_type,
1127
+ 'PostTitle' => $post->post_title,
1128
+ 'PostStatus' => $post->post_status,
1129
+ 'PostDate' => $post->post_date,
1130
+ 'PostUrl' => get_permalink( $post->ID ),
1131
+ 'OldCategories' => $old_cats ? $old_cats : 'no categories',
1132
+ 'NewCategories' => $new_cats ? $new_cats : 'no categories',
1133
+ $editor_link['name'] => $editor_link['value'],
1134
+ );
1135
+ $this->plugin->alerts->Trigger( 2016, $alert_data );
1136
+ return 1;
1137
  }
 
1138
  }
1139
 
1140
  /**
1141
+ * Tags changed.
1142
  *
1143
+ * @param array $old_tags - Old tags.
1144
+ * @param array $new_tags - New tags.
1145
+ * @param WP_Post $post - The post.
1146
  */
1147
+ protected function check_tags_change( $old_tags, $new_tags, $post ) {
1148
+ // Check for added tags.
1149
+ $added_tags = array_diff( (array) $new_tags, (array) $old_tags );
1150
 
1151
+ // Check for removed tags.
1152
+ $removed_tags = array_diff( (array) $old_tags, (array) $new_tags );
 
1153
 
1154
+ // Convert tags arrays to string.
1155
+ $old_tags = implode( ', ', (array) $old_tags );
1156
+ $new_tags = implode( ', ', (array) $new_tags );
1157
+ $added_tags = implode( ', ', $added_tags );
1158
+ $removed_tags = implode( ', ', $removed_tags );
1159
 
1160
+ // Declare event variables.
1161
+ $add_event = '';
1162
+ $remove_event = '';
1163
+ if ( $old_tags !== $new_tags && ! empty( $added_tags ) ) {
1164
+ $add_event = 2119;
1165
+ $editor_link = $this->get_editor_link( $post );
1166
+ $post_status = ( 'publish' === $post->post_status ) ? 'published' : $post->post_status;
1167
+ $this->plugin->alerts->Trigger(
1168
+ $add_event,
1169
+ array(
1170
+ 'PostID' => $post->ID,
1171
+ 'PostType' => $post->post_type,
1172
+ 'PostStatus' => $post_status,
1173
+ 'PostTitle' => $post->post_title,
1174
+ 'PostDate' => $post->post_date,
1175
+ 'PostUrl' => get_permalink( $post->ID ),
1176
+ 'tag' => $added_tags ? $added_tags : 'no tags',
1177
+ $editor_link['name'] => $editor_link['value'],
1178
+ )
1179
+ );
1180
  }
1181
 
1182
+ if ( $old_tags !== $new_tags && ! empty( $removed_tags ) ) {
1183
+ $remove_event = 2120;
1184
+ $editor_link = $this->get_editor_link( $post );
1185
+ $post_status = ( 'publish' === $post->post_status ) ? 'published' : $post->post_status;
1186
+ $this->plugin->alerts->Trigger(
1187
+ $remove_event,
1188
+ array(
1189
+ 'PostID' => $post->ID,
1190
+ 'PostType' => $post->post_type,
1191
+ 'PostStatus' => $post_status,
1192
+ 'PostTitle' => $post->post_title,
1193
+ 'PostDate' => $post->post_date,
1194
+ 'PostUrl' => get_permalink( $post->ID ),
1195
+ 'tag' => $removed_tags ? $removed_tags : 'no tags',
1196
+ $editor_link['name'] => $editor_link['value'],
1197
+ )
1198
+ );
1199
+ }
1200
 
1201
+ if ( $add_event || $remove_event ) {
1202
+ return 1;
1203
  }
1204
  }
1205
 
1206
  /**
1207
+ * Post modified content.
1208
  *
1209
+ * @param integer $post_id – Post ID.
1210
+ * @param stdClass $oldpost – Old post.
1211
+ * @param stdClass $newpost – New post.
1212
+ * @param int $modified – Set to 0 if no changes done to the post.
1213
  */
1214
+ public function check_modification_change( $post_id, $oldpost, $newpost, $modified ) {
1215
+ if ( $this->check_other_sensors( $oldpost ) ) {
1216
  return;
1217
  }
1218
 
1219
+ if ( $this->check_title_change( $oldpost, $newpost ) ) {
1220
+ return;
 
1221
  }
1222
 
1223
+ $content_changed = $oldpost->post_content != $newpost->post_content;
 
1224
 
1225
+ if ( $oldpost->post_modified !== $newpost->post_modified ) {
1226
+ $event = 0;
1227
+
1228
+ if ( $content_changed ) { // Check if content changed.
1229
+ $event = 2065;
1230
+ } elseif ( ! $modified ) {
1231
+ $event = 2002;
1232
+ }
1233
+
1234
+ if ( $event ) {
1235
+ if ( 2002 === $event ) {
1236
+ // Get Yoast alerts.
1237
+ $yoast_alerts = $this->plugin->alerts->get_alerts_by_sub_category( 'Yoast SEO' );
1238
+
1239
+ // Check all alerts.
1240
+ foreach ( $yoast_alerts as $alert_code => $alert ) {
1241
+ if ( $this->plugin->alerts->WillOrHasTriggered( $alert_code ) ) {
1242
+ return 0; // Return if any Yoast alert has or will trigger.
1243
+ }
1244
+ }
1245
+
1246
+ // Get post meta events.
1247
+ $meta_events = array( 2053, 2054, 2055, 2062 );
1248
+ foreach ( $meta_events as $meta_event ) {
1249
+ if ( $this->plugin->alerts->WillOrHasTriggered( $meta_event ) ) {
1250
+ return 0; // Return if any meta event has or will trigger.
1251
+ }
1252
+ }
1253
+ }
1254
+
1255
+ $event_data = $this->get_post_event_data( $oldpost );
1256
+ $editor_link = $this->get_editor_link( $oldpost );
1257
+ $event_data[ $editor_link['name'] ] = $editor_link['value'];
1258
+ $event_data['RevisionLink'] = $this->get_post_revision( $post_id, $oldpost );
1259
+
1260
+ if ( 2002 === $event ) {
1261
+ $this->plugin->alerts->TriggerIf( $event, $event_data, array( $this, 'must_not_contain_events' ) );
1262
+ } else {
1263
+ $this->plugin->alerts->Trigger( $event, $event_data );
1264
+ }
1265
  }
1266
  }
1267
  }
1268
 
1269
  /**
1270
+ * Ignore post from BBPress, WooCommerce Plugin
1271
+ * Triggered on the Sensors
1272
  *
1273
+ * @param WP_Post $post - The post.
 
1274
  */
1275
+ private function check_other_sensors( $post ) {
1276
+ if ( empty( $post ) || ! isset( $post->post_type ) ) {
1277
+ return false;
1278
+ }
1279
+ switch ( $post->post_type ) {
1280
+ case 'forum':
1281
+ case 'topic':
1282
+ case 'reply':
1283
+ case 'product':
1284
+ case 'shop_order':
1285
+ case 'shop_coupon':
1286
  return true;
1287
+ default:
1288
+ return false;
1289
  }
 
1290
  }
1291
 
1292
  /**
1295
  * @param stdClass $oldpost - Old post.
1296
  * @param stdClass $newpost - New post.
1297
  */
1298
+ private function check_title_change( $oldpost, $newpost ) {
1299
  if ( $oldpost->post_title !== $newpost->post_title ) {
1300
+ $editor_link = $this->get_editor_link( $oldpost );
1301
  $this->plugin->alerts->Trigger(
1302
+ 2086,
1303
+ array(
1304
  'PostID' => $newpost->ID,
1305
  'PostType' => $newpost->post_type,
1306
  'PostTitle' => $newpost->post_title,
1318
  }
1319
 
1320
  /**
1321
+ * Return post revision link.
1322
  *
1323
+ * @param integer $post_id - Post ID.
1324
+ * @param WP_Post $post - WP Post object.
1325
+ * @return string
1326
  */
1327
+ private function get_post_revision( $post_id, $post ) {
1328
+ $revisions = wp_get_post_revisions( $post_id );
1329
+ if ( ! empty( $revisions ) ) {
1330
+ $revision = array_shift( $revisions );
1331
+ return $this->get_revision_link( $revision->ID );
1332
+ }
1333
+ }
1334
 
1335
+ /**
1336
+ * Builds revision link.
1337
+ *
1338
+ * @param integer $revision_id - Revision ID.
1339
+ * @return string|null - Link.
1340
+ */
1341
+ private function get_revision_link( $revision_id ) {
1342
+ return ! empty( $revision_id ) ? add_query_arg( 'revision', $revision_id, admin_url( 'revision.php' ) ) : null;
1343
+ }
1344
 
1345
+ /**
1346
+ * Method: This function make sures that alert 2016
1347
+ * has not been triggered before triggering categories
1348
+ * & tags events.
1349
+ *
1350
+ * @param WSAL_AlertManager $manager - WSAL Alert Manager.
1351
+ * @return bool
1352
+ */
1353
+ public function must_not_contain_events( WSAL_AlertManager $manager ) {
1354
+ if ( $manager->WillOrHasTriggered( 2016 ) ) {
1355
+ return false;
1356
+ } elseif ( $manager->WillOrHasTriggered( 2119 ) ) {
1357
+ return false;
1358
+ } elseif ( $manager->WillOrHasTriggered( 2120 ) ) {
1359
+ return false;
1360
+ } elseif ( $manager->WillOrHasTriggered( 2049 ) ) {
1361
+ return false;
1362
+ } elseif ( $manager->WillOrHasTriggered( 2050 ) ) {
1363
+ return false;
1364
+ }
1365
+ return true;
1366
+ }
1367
 
1368
+ /**
1369
+ * Log post stuck/unstuck events.
1370
+ *
1371
+ * @param integer $post_id - Post ID.
1372
+ * @param integer $event - Event ID.
1373
+ */
1374
+ private function log_sticky_post_event( $post_id, $event ) {
1375
+ // Get post.
1376
+ $post = get_post( $post_id );
1377
+
1378
+ if ( is_wp_error( $post ) ) {
1379
+ return;
 
1380
  }
 
 
 
1381
 
1382
+ $editor_link = $this->get_editor_link( $post ); // Editor link.
1383
+ $event_data = $this->get_post_event_data( $post ); // Event data.
 
 
 
1384
 
1385
+ $event_data[ $editor_link['name'] ] = $editor_link['value'];
1386
+ $this->plugin->alerts->Trigger( $event, $event_data );
1387
+ }
1388
+
1389
+ /**
1390
+ * Check auto draft and the setting: Hide Plugin in Plugins Page
1391
+ *
1392
+ * @param integer $code - Alert code.
1393
+ * @param string $title - Title.
1394
+ * @return boolean
1395
+ */
1396
+ private function check_auto_draft( $code, $title ) {
1397
+ if ( 2008 === $code && 'auto-draft' === $title ) {
1398
+ return 1 === (int) $this->plugin->settings->IsWPBackend();
1399
  }
1400
+ return false;
1401
  }
1402
 
1403
  /**
1406
  * @param stdClass $post - The post.
1407
  * @param string $status - The status.
1408
  */
1409
+ private function get_comments_pings_event( $post, $status ) {
1410
+ if ( 'disable' === $status ) {
1411
  $event = 2111;
1412
  } else {
1413
  $event = 2112;
1416
  }
1417
 
1418
  /**
1419
+ * Post Opened for Editing in WP Editors.
1420
  *
1421
+ * @param WP_Post $post Post object.
 
 
 
1422
  */
1423
+ public function post_opened_in_editor( $post ) {
1424
+ if ( empty( $post ) || ! $post instanceof WP_Post ) {
 
1425
  return;
1426
  }
1427
 
1428
+ // Check other sensors.
1429
+ if ( $this->check_other_sensors( $post ) ) {
1430
+ return $post;
1431
+ }
1432
+
1433
+ $current_path = isset( $_SERVER['SCRIPT_NAME'] ) ? esc_url_raw( wp_unslash( $_SERVER['SCRIPT_NAME'] ) ) . '?post=' . $post->ID : false;
1434
+ $referrer = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : false;
1435
+
1436
+ if ( ! empty( $referrer )
1437
+ && strpos( $referrer, $current_path ) !== false ) {
1438
+ // Ignore this if we were on the same page so we avoid double audit entries.
1439
+ return $post;
1440
+ }
1441
+ if ( ! empty( $post->post_title ) ) {
1442
+ $event = 2100;
1443
+ if ( ! $this->was_triggered( $event ) ) {
1444
+ $editor_link = $this->get_editor_link( $post );
 
1445
  $this->plugin->alerts->Trigger(
1446
+ $event,
1447
+ array(
1448
  'PostID' => $post->ID,
1449
  'PostType' => $post->post_type,
1450
  'PostTitle' => $post->post_title,
1451
  'PostStatus' => $post->post_status,
1452
  'PostDate' => $post->post_date,
1453
  'PostUrl' => get_permalink( $post->ID ),
 
 
1454
  $editor_link['name'] => $editor_link['value'],
1455
  )
1456
  );
1459
  }
1460
 
1461
  /**
1462
+ * Check if the alert was triggered.
1463
  *
1464
+ * @param integer|array $alert_id - Alert code.
1465
+ * @return boolean
1466
  */
1467
+ private function was_triggered( $alert_id ) {
1468
+ $query = new WSAL_Models_OccurrenceQuery();
1469
+ $query->addOrderBy( 'created_on', true );
1470
+ $query->setLimit( 1 );
1471
+ $last_occurence = $query->getAdapter()->Execute( $query );
1472
+
1473
+ if ( ! empty( $last_occurence ) ) {
1474
+ if ( ! is_array( $alert_id ) && $last_occurence[0]->alert_id === $alert_id ) {
1475
+ return true;
1476
+ } elseif ( is_array( $alert_id ) && in_array( $last_occurence[0]->alert_id, $alert_id, true ) ) {
1477
+ return true;
1478
+ }
1479
+ }
1480
+
1481
+ return false;
1482
  }
1483
 
1484
  /**
1485
+ * Builds category link.
1486
  *
1487
+ * @param integer $tag_id - Tag ID.
1488
+ * @param string $taxonomy - Taxonomy.
1489
+ * @return string|null - Link.
1490
  */
1491
+ private function get_taxonomy_edit_link( $tag_id, $taxonomy = 'post_tag' ) {
1492
+ $tag_args = array(
1493
+ 'taxonomy' => $taxonomy,
1494
+ 'tag_ID' => $tag_id,
1495
+ );
1496
+ return ! empty( $tag_id ) ? add_query_arg( $tag_args, admin_url( 'term.php' ) ) : null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1497
  }
1498
  }
classes/Sensors/Files.php CHANGED
@@ -39,15 +39,7 @@ class WSAL_Sensors_Files extends WSAL_AbstractSensor {
39
  public function HookEvents() {
40
  add_action( 'add_attachment', array( $this, 'EventFileUploaded' ) );
41
  add_action( 'delete_attachment', array( $this, 'EventFileUploadedDeleted' ) );
42
-
43
- /**
44
- * Commenting the code to detect file changes in plugins and themes.
45
- *
46
- * @todo Figure out a way to detect changes in files of plugins and themes.
47
- * With the introduction of the new code editor in 4.9 the previous code
48
- * stopped working.
49
- */
50
- // add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
51
  }
52
 
53
  /**
@@ -65,8 +57,8 @@ class WSAL_Sensors_Files extends WSAL_AbstractSensor {
65
  $this->plugin->alerts->Trigger(
66
  2010, array(
67
  'AttachmentID' => $attachment_id,
68
- 'FileName' => basename( $file ),
69
- 'FilePath' => dirname( $file ),
70
  )
71
  );
72
  }
@@ -86,41 +78,50 @@ class WSAL_Sensors_Files extends WSAL_AbstractSensor {
86
  $this->plugin->alerts->Trigger(
87
  2011, array(
88
  'AttachmentID' => $attachment_id,
89
- 'FileName' => basename( $file ),
90
- 'FilePath' => dirname( $file ),
91
  )
92
  );
93
  }
94
 
95
  /**
96
- * Triggered when a user accesses the admin area.
 
 
97
  */
98
  public function EventAdminInit() {
99
- // Filter global arrays for security.
100
- $post_array = filter_input_array( INPUT_POST );
101
- $server_array = filter_input_array( INPUT_SERVER );
 
 
 
 
 
102
 
103
- $action = isset( $post_array['action'] ) ? $post_array['action'] : '';
104
- $script_name = isset( $server_array['SCRIPT_NAME'] ) ? basename( $server_array['SCRIPT_NAME'] ) : false;
105
- $is_theme_editor = 'theme-editor.php' == $script_name;
106
- $is_plugin_editor = 'plugin-editor.php' == $script_name;
 
 
 
 
 
 
 
107
 
108
- if ( $is_theme_editor && 'update' === $action ) {
109
- $this->plugin->alerts->Trigger(
110
- 2046, array(
111
- 'File' => $post_array['file'],
112
- 'Theme' => $post_array['theme'],
113
- )
114
- );
115
- }
116
 
117
- if ( $is_plugin_editor && 'update' === $action ) {
118
- $this->plugin->alerts->Trigger(
119
- 2051, array(
120
- 'File' => $post_array['file'],
121
- 'Plugin' => $post_array['plugin'],
122
- )
123
- );
124
  }
125
  }
126
  }
39
  public function HookEvents() {
40
  add_action( 'add_attachment', array( $this, 'EventFileUploaded' ) );
41
  add_action( 'delete_attachment', array( $this, 'EventFileUploadedDeleted' ) );
42
+ add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
 
 
 
 
 
 
 
 
43
  }
44
 
45
  /**
57
  $this->plugin->alerts->Trigger(
58
  2010, array(
59
  'AttachmentID' => $attachment_id,
60
+ 'FileName' => basename( $file ),
61
+ 'FilePath' => dirname( $file ),
62
  )
63
  );
64
  }
78
  $this->plugin->alerts->Trigger(
79
  2011, array(
80
  'AttachmentID' => $attachment_id,
81
+ 'FileName' => basename( $file ),
82
+ 'FilePath' => dirname( $file ),
83
  )
84
  );
85
  }
86
 
87
  /**
88
+ * File Changes Event.
89
+ *
90
+ * Detect file changes in plugins/themes using plugin/theme editor.
91
  */
92
  public function EventAdminInit() {
93
+ // @codingStandardsIgnoreStart
94
+ $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : false;
95
+ $file = isset( $_POST['file'] ) ? sanitize_text_field( wp_unslash( $_POST['file'] ) ) : false;
96
+ $action = isset( $_POST['action'] ) ? sanitize_text_field( wp_unslash( $_POST['action'] ) ) : false;
97
+ $referer = isset( $_POST['_wp_http_referer'] ) ? sanitize_text_field( wp_unslash( $_POST['_wp_http_referer'] ) ) : false;
98
+ $referer = remove_query_arg( array( 'file', 'theme', 'plugin' ), $referer );
99
+ $referer = basename( $referer, '.php' );
100
+ // @codingStandardsIgnoreEnd
101
 
102
+ if ( 'edit-theme-plugin-file' === $action ) {
103
+ if ( 'plugin-editor' === $referer && wp_verify_nonce( $nonce, 'edit-plugin_' . $file ) ) {
104
+ $plugin = isset( $_POST['plugin'] ) ? sanitize_text_field( wp_unslash( $_POST['plugin'] ) ) : false;
105
+ $this->plugin->alerts->Trigger(
106
+ 2051, array(
107
+ 'File' => $file,
108
+ 'Plugin' => $plugin,
109
+ )
110
+ );
111
+ } elseif ( 'theme-editor' === $referer ) {
112
+ $stylesheet = isset( $_POST['theme'] ) ? sanitize_text_field( wp_unslash( $_POST['theme'] ) ) : false;
113
 
114
+ if ( ! wp_verify_nonce( $nonce, 'edit-theme_' . $stylesheet . '_' . $file ) ) {
115
+ return;
116
+ }
 
 
 
 
 
117
 
118
+ $this->plugin->alerts->Trigger(
119
+ 2046, array(
120
+ 'File' => $file,
121
+ 'Theme' => $stylesheet,
122
+ )
123
+ );
124
+ }
125
  }
126
  }
127
  }
classes/Sensors/LogInOut.php CHANGED
@@ -57,6 +57,10 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
57
  add_action( 'login_redirect', array( $this, 'event_2fa_login' ), 10, 1 );
58
  }
59
 
 
 
 
 
60
  // Directory for logged in users log files.
61
  $user_upload_dir = wp_upload_dir();
62
  $failed_login_dir = trailingslashit( $user_upload_dir['basedir'] . '/wp-security-audit-log/failed-logins/' );
@@ -178,7 +182,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
178
  $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
179
  $this->plugin->alerts->Trigger(
180
  4003, array(
181
- 'Username' => $user->user_login,
182
  'CurrentUserRoles' => $user_roles,
183
  ), true
184
  );
@@ -206,7 +210,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
206
  * Event Logout.
207
  */
208
  public function EventLogout() {
209
- if ( 0 != $this->_current_user->ID ) {
210
  $this->plugin->alerts->Trigger(
211
  1001, array(
212
  'CurrentUserID' => $this->_current_user->ID,
@@ -258,14 +262,14 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
258
  return false;
259
  } else {
260
  $data_known = $get_fn( self::TRANSIENT_FAILEDLOGINS );
261
- return ( false !== $data_known ) && isset( $data_known[ $site_id . ':' . $user->ID . ':' . $ip ] ) && ($data_known[ $site_id . ':' . $user->ID . ':' . $ip ] >= $this->GetLoginFailureLogLimit());
262
  }
263
  } else {
264
  if ( -1 === (int) $this->GetVisitorLoginFailureLogLimit() ) {
265
  return false;
266
  } else {
267
  $data_unknown = $get_fn( self::TRANSIENT_FAILEDLOGINS_UNKNOWN );
268
- return ( false !== $data_unknown ) && isset( $data_unknown[ $site_id . ':' . $ip ] ) && ($data_unknown[ $site_id . ':' . $ip ] >= $this->GetVisitorLoginFailureLogLimit());
269
  }
270
  }
271
  }
@@ -376,8 +380,8 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
376
  // Create a new record exists user.
377
  $this->plugin->alerts->Trigger(
378
  $new_alert_code, array(
379
- 'Attempts' => 1,
380
- 'Username' => $username,
381
  'CurrentUserRoles' => $user_roles,
382
  )
383
  );
@@ -509,4 +513,31 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
509
  }
510
  return $latest_filename;
511
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
512
  }
57
  add_action( 'login_redirect', array( $this, 'event_2fa_login' ), 10, 1 );
58
  }
59
 
60
+ if ( is_plugin_active( 'user-switching/user-switching.php' ) ) {
61
+ add_action( 'switch_to_user', array( $this, 'user_switched_event' ), 10, 2 );
62
+ }
63
+
64
  // Directory for logged in users log files.
65
  $user_upload_dir = wp_upload_dir();
66
  $failed_login_dir = trailingslashit( $user_upload_dir['basedir'] . '/wp-security-audit-log/failed-logins/' );
182
  $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
183
  $this->plugin->alerts->Trigger(
184
  4003, array(
185
+ 'Username' => $user->user_login,
186
  'CurrentUserRoles' => $user_roles,
187
  ), true
188
  );
210
  * Event Logout.
211
  */
212
  public function EventLogout() {
213
+ if ( $this->_current_user->ID ) {
214
  $this->plugin->alerts->Trigger(
215
  1001, array(
216
  'CurrentUserID' => $this->_current_user->ID,
262
  return false;
263
  } else {
264
  $data_known = $get_fn( self::TRANSIENT_FAILEDLOGINS );
265
+ return ( false !== $data_known ) && isset( $data_known[ $site_id . ':' . $user->ID . ':' . $ip ] ) && ( $data_known[ $site_id . ':' . $user->ID . ':' . $ip ] >= $this->GetLoginFailureLogLimit() );
266
  }
267
  } else {
268
  if ( -1 === (int) $this->GetVisitorLoginFailureLogLimit() ) {
269
  return false;
270
  } else {
271
  $data_unknown = $get_fn( self::TRANSIENT_FAILEDLOGINS_UNKNOWN );
272
+ return ( false !== $data_unknown ) && isset( $data_unknown[ $site_id . ':' . $ip ] ) && ( $data_unknown[ $site_id . ':' . $ip ] >= $this->GetVisitorLoginFailureLogLimit() );
273
  }
274
  }
275
  }
380
  // Create a new record exists user.
381
  $this->plugin->alerts->Trigger(
382
  $new_alert_code, array(
383
+ 'Attempts' => 1,
384
+ 'Username' => $username,
385
  'CurrentUserRoles' => $user_roles,
386
  )
387
  );
513
  }
514
  return $latest_filename;
515
  }
516
+
517
+ /**
518
+ * User Switched.
519
+ *
520
+ * Current user switched to another user event.
521
+ *
522
+ * @since 3.4
523
+ *
524
+ * @param int $new_user_id - New user id.
525
+ * @param int $old_user_id - Old user id.
526
+ */
527
+ public function user_switched_event( $new_user_id, $old_user_id ) {
528
+ $target_user = get_user_by( 'ID', $new_user_id );
529
+ $target_user_roles = $this->plugin->settings->GetCurrentUserRoles( $target_user->roles );
530
+ $target_user_roles = implode( ', ', $target_user_roles );
531
+ $old_user = get_user_by( 'ID', $old_user_id );
532
+ $old_user_roles = $this->plugin->settings->GetCurrentUserRoles( $old_user->roles );
533
+
534
+ $this->plugin->alerts->Trigger(
535
+ 1008, array(
536
+ 'TargetUserName' => $target_user->user_login,
537
+ 'TargetUserRole' => $target_user_roles,
538
+ 'Username' => $old_user->user_login,
539
+ 'CurrentUserRoles' => $old_user_roles,
540
+ )
541
+ );
542
+ }
543
  }
classes/Sensors/MetaData.php CHANGED
@@ -68,7 +68,6 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
68
  add_action( 'update_user_meta', array( $this, 'event_user_meta_updating' ), 10, 3 );
69
  add_action( 'updated_user_meta', array( $this, 'event_user_meta_updated' ), 10, 4 );
70
  add_action( 'user_register', array( $this, 'reset_null_meta_counter' ), 10 );
71
- add_action( 'profile_update', array( $this, 'event_userdata_updated' ), 10, 2 );
72
  }
73
 
74
  /**
@@ -134,76 +133,50 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
134
  return;
135
  }
136
 
137
- // Get post object.
138
- $post = get_post( $object_id );
139
-
140
- // Return if the post object is null or the post type is revision.
141
- if ( null === $post || 'revision' === $post->post_type ) {
142
- return;
143
- }
144
-
145
  if ( empty( $meta_value ) && ( $this->null_meta_counter < 1 ) ) { // Report only one NULL meta value.
146
  $this->null_meta_counter += 1;
147
  } elseif ( $this->null_meta_counter >= 1 ) { // Do not report if NULL meta values are more than one.
148
  return;
149
  }
150
 
151
- // Filter $_POST global array for security.
152
- $post_array = filter_input_array( INPUT_POST );
153
 
154
- // Check nonce.
155
- if ( isset( $post_array['_ajax_nonce-add-meta'] ) && ! wp_verify_nonce( $post_array['_ajax_nonce-add-meta'], 'add-meta' ) ) {
156
- return false;
157
- } elseif ( isset( $post_array['_wpnonce'] ) && isset( $post_array['post_ID'] ) && ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
158
- return false;
159
  }
160
 
161
- // WP Dashboard action.
162
- $wp_action = array( 'add-meta', 'editpost' );
163
-
164
- // Check MainWP $_POST members.
165
- $new_post = filter_input( INPUT_POST, 'new_post' );
166
- $post_custom = filter_input( INPUT_POST, 'post_custom' );
167
-
168
- // Check if the post is coming from MainWP.
169
- $mainwp = filter_input( INPUT_POST, 'mainwpsignature', FILTER_SANITIZE_STRING );
170
-
171
- if (
172
- ( isset( $post_array['action'] ) && in_array( $post_array['action'], $wp_action, true ) ) // Either coming from WP admin panel.
173
- || ( ! empty( $new_post ) && ! empty( $post_custom ) && ! empty( $mainwp ) ) // OR from MainWP dashboard.
174
- ) {
175
- /**
176
- * WSAL Filter: `wsal_before_post_meta_create_event`
177
- *
178
- * Runs before logging event for post meta created i.e. 2053.
179
- * This filter can be used as check to whether log this event or not.
180
- *
181
- * @since 3.3.1
182
- *
183
- * @param bool $log_event - True if log meta event, false if not.
184
- * @param string $meta_key - Meta key.
185
- * @param mixed $meta_value - Meta value.
186
- * @param WP_Post $post - Post object.
187
- */
188
- $log_meta_event = apply_filters( 'wsal_before_post_meta_create_event', true, $meta_key, $meta_value, $post );
189
-
190
- if ( $log_meta_event ) {
191
- $editor_link = $this->GetEditorLink( $post );
192
- $this->plugin->alerts->Trigger(
193
- 2053, array(
194
- 'PostID' => $object_id,
195
- 'PostTitle' => $post->post_title,
196
- 'PostStatus' => $post->post_status,
197
- 'PostType' => $post->post_type,
198
- 'PostDate' => $post->post_date,
199
- 'PostUrl' => get_permalink( $post->ID ),
200
- 'MetaKey' => $meta_key,
201
- 'MetaValue' => $meta_value,
202
- 'MetaLink' => $meta_key,
203
- $editor_link['name'] => $editor_link['value'],
204
- )
205
- );
206
- }
207
  }
208
  }
209
 
@@ -263,90 +236,65 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
263
  */
264
  do_action( 'wsal_post_meta_updated', $meta_id, $object_id, $this->old_meta, $meta_key, $meta_value );
265
 
266
- // Filter $_POST global array for security.
267
- $post_array = filter_input_array( INPUT_POST );
268
-
269
- // Check nonce.
270
- if ( isset( $post_array['_ajax_nonce'] ) && ! wp_verify_nonce( $post_array['_ajax_nonce'], 'change-meta' ) ) {
271
- return false;
272
- } elseif ( isset( $post_array['_wpnonce'] ) && isset( $post_array['post_ID'] ) && ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
273
- return false;
274
- }
 
 
 
 
 
 
 
 
275
 
276
- // WP Dashboard action.
277
- $wp_action = array( 'add-meta', 'editpost' );
278
-
279
- // Check MainWP $_POST members.
280
- $new_post = filter_input( INPUT_POST, 'new_post' );
281
- $post_custom = filter_input( INPUT_POST, 'post_custom' );
282
-
283
- // Check if the post is coming from MainWP.
284
- $mainwp = filter_input( INPUT_POST, 'mainwpsignature', FILTER_SANITIZE_STRING );
285
-
286
- if (
287
- ( isset( $post_array['action'] ) && in_array( $post_array['action'], $wp_action, true ) )
288
- || ( ! empty( $new_post ) && ! empty( $post_custom ) && ! empty( $mainwp ) )
289
- ) {
290
- if ( isset( $this->old_meta[ $meta_id ] ) ) {
291
- /**
292
- * WSAL Filter: `wsal_before_post_meta_update_event`
293
- *
294
- * Runs before logging events for post meta updated i.e. 2054 or 2062.
295
- * This filter can be used as check to whether log these events or not.
296
- *
297
- * @since 3.3.1
298
- *
299
- * @param bool $log_event - True if log meta event 2054 or 2062, false if not.
300
- * @param string $meta_key - Meta key.
301
- * @param mixed $meta_value - Meta value.
302
- * @param stdClass $this->old_meta[ $meta_id ] - Old meta value and key object.
303
- * @param WP_Post $post - Post object.
304
- * @param integer $meta_id - Meta ID.
305
- */
306
- $log_meta_event = apply_filters( 'wsal_before_post_meta_update_event', true, $meta_key, $meta_value, $this->old_meta[ $meta_id ], $post, $meta_id );
307
-
308
- // Check change in meta key.
309
- if ( $log_meta_event && $this->old_meta[ $meta_id ]->key != $meta_key ) {
310
- $editor_link = $this->GetEditorLink( $post );
311
- $this->plugin->alerts->Trigger(
312
- 2062, array(
313
- 'PostID' => $object_id,
314
- 'PostTitle' => $post->post_title,
315
- 'PostStatus' => $post->post_status,
316
- 'PostType' => $post->post_type,
317
- 'PostDate' => $post->post_date,
318
- 'PostUrl' => get_permalink( $post->ID ),
319
- 'MetaID' => $meta_id,
320
- 'MetaKeyNew' => $meta_key,
321
- 'MetaKeyOld' => $this->old_meta[ $meta_id ]->key,
322
- 'MetaValue' => $meta_value,
323
- 'MetaLink' => $meta_key,
324
- $editor_link['name'] => $editor_link['value'],
325
- )
326
- );
327
- } elseif ( $log_meta_event && $this->old_meta[ $meta_id ]->val != $meta_value ) { // Check change in meta value.
328
- $editor_link = $this->GetEditorLink( $post );
329
- $this->plugin->alerts->Trigger(
330
- 2054, array(
331
- 'PostID' => $object_id,
332
- 'PostTitle' => $post->post_title,
333
- 'PostStatus' => $post->post_status,
334
- 'PostType' => $post->post_type,
335
- 'PostDate' => $post->post_date,
336
- 'PostUrl' => get_permalink( $post->ID ),
337
- 'MetaID' => $meta_id,
338
- 'MetaKey' => $meta_key,
339
- 'MetaValueNew' => $meta_value,
340
- 'MetaValueOld' => $this->old_meta[ $meta_id ]->val,
341
- 'MetaLink' => $meta_key,
342
- $editor_link['name'] => $editor_link['value'],
343
- 'ReportText' => is_string( $this->old_meta[ $meta_id ]->val ) ? $this->old_meta[ $meta_id ]->val . '|' . $meta_value : false,
344
- )
345
- );
346
- }
347
- // Remove old meta update data.
348
- unset( $this->old_meta[ $meta_id ] );
349
  }
 
 
350
  }
351
  }
352
 
@@ -372,78 +320,47 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
372
  return;
373
  }
374
 
375
- // Filter $_POST global array for security.
376
- $post_array = filter_input_array( INPUT_POST );
377
-
378
- // Check nonce.
379
- if ( isset( $post_array['_ajax_nonce'] ) && ! wp_verify_nonce( $post_array['_ajax_nonce'], 'delete-meta_' . $post_array['id'] ) ) {
380
- return false;
381
- } elseif ( isset( $post_array['_wpnonce'] ) && isset( $post_array['post_ID'] ) && ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
382
- return false;
383
- }
384
-
385
- // WP Dashboard action.
386
- $wp_action = array( 'delete-meta' );
387
-
388
- // Check MainWP $_POST members.
389
- $new_post = filter_input( INPUT_POST, 'new_post' );
390
- $post_custom = filter_input( INPUT_POST, 'post_custom' );
391
-
392
- // Check if the post is coming from MainWP.
393
- $mainwp = filter_input( INPUT_POST, 'mainwpsignature', FILTER_SANITIZE_STRING );
394
-
395
- if (
396
- (
397
- isset( $post_array['action'] )
398
- && in_array( $post_array['action'], $wp_action, true )
399
- ) || (
400
- ! empty( $new_post )
401
- && ! empty( $post_custom )
402
- && ! empty( $mainwp )
403
- )
404
- ) {
405
- $editor_link = $this->GetEditorLink( $post );
406
- foreach ( $meta_ids as $meta_id ) {
407
- if ( ! $this->CanLogMetaKey( $object_id, $meta_key ) ) {
408
- continue;
409
- }
410
 
411
- /**
412
- * WSAL Filter: `wsal_before_post_meta_delete_event`
413
- *
414
- * Runs before logging event for post meta deleted i.e. 2054.
415
- * This filter can be used as check to whether log this event or not.
416
- *
417
- * @since 3.3.1
418
- *
419
- * @param bool $log_event - True if log meta event 2055, false if not.
420
- * @param string $meta_key - Meta key.
421
- * @param mixed $meta_value - Meta value.
422
- * @param WP_Post $post - Post object.
423
- * @param integer $meta_id - Meta ID.
424
- */
425
- $log_meta_event = apply_filters( 'wsal_before_post_meta_delete_event', true, $meta_key, $meta_value, $post, $meta_id );
426
-
427
- // If not allowed to log meta event then skip it.
428
- if ( ! $log_meta_event ) {
429
- continue;
430
- }
431
 
432
- $this->plugin->alerts->Trigger(
433
- 2055, array(
434
- 'PostID' => $object_id,
435
- 'PostTitle' => $post->post_title,
436
- 'PostStatus' => $post->post_status,
437
- 'PostType' => $post->post_type,
438
- 'PostDate' => $post->post_date,
439
- 'PostUrl' => get_permalink( $post->ID ),
440
- 'MetaID' => $meta_id,
441
- 'MetaKey' => $meta_key,
442
- 'MetaValue' => $meta_value,
443
- $editor_link['name'] => $editor_link['value'],
444
- )
445
- );
446
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
447
  }
448
  }
449
 
@@ -477,40 +394,33 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
477
  * @param mixed $meta_value - Meta value.
478
  */
479
  public function event_user_meta_created( $object_id, $meta_key, $meta_value ) {
480
- // Get user.
481
- $user = get_user_by( 'ID', $object_id );
482
-
483
  // Check to see if we can log the meta key.
484
  if ( ! $this->CanLogMetaKey( $object_id, $meta_key ) || is_array( $meta_value ) ) {
485
  return;
486
  }
487
 
 
 
 
 
488
  if ( empty( $meta_value ) && ( $this->null_meta_counter < 1 ) ) { // Report only one NULL meta value.
489
  $this->null_meta_counter += 1;
490
  } elseif ( $this->null_meta_counter >= 1 ) { // Do not report if NULL meta values are more than one.
491
  return;
492
  }
493
 
494
- // Filter $_POST global array for security.
495
- $post_array = filter_input_array( INPUT_POST );
496
-
497
- // Check nonce.
498
- if ( isset( $post_array['_wpnonce'] ) && ! wp_verify_nonce( $post_array['_wpnonce'], 'update-user_' . $user->ID ) ) {
499
- return false;
500
- }
501
 
502
- // If update action is set then trigger the alert.
503
- if ( isset( $post_array['action'] ) && ( 'update' == $post_array['action'] || 'createuser' == $post_array['action'] ) ) {
504
- $this->plugin->alerts->TriggerIf(
505
- 4016,
506
- array(
507
- 'TargetUsername' => $user->user_login,
508
- 'custom_field_name' => $meta_key,
509
- 'new_value' => $meta_value,
510
- ),
511
- array( $this, 'must_not_contain_new_user_alert' )
512
- );
513
- }
514
  }
515
 
516
  /**
@@ -540,124 +450,81 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
540
  * @param mixed $meta_value - Meta value.
541
  */
542
  public function event_user_meta_updated( $meta_id, $object_id, $meta_key, $meta_value ) {
543
- // Get user.
544
- $user = get_user_by( 'ID', $object_id );
545
-
546
  // Check to see if we can log the meta key.
547
  if ( ! $this->CanLogMetaKey( $object_id, $meta_key ) || is_array( $meta_value ) ) {
548
  return;
549
  }
550
 
551
- // User profile name related meta.
552
- $username_meta = array( 'first_name', 'last_name', 'nickname' );
553
-
554
- // Filter $_POST global array for security.
555
- $post_array = filter_input_array( INPUT_POST );
556
-
557
- // If update action is set then trigger the alert.
558
- if (
559
- (
560
- isset( $post_array['_wpnonce'] ) // WP Dashboard Support.
561
- && wp_verify_nonce( $post_array['_wpnonce'], 'update-user_' . $user->ID )
562
- && isset( $post_array['action'] )
563
- && 'update' == $post_array['action']
564
- ) || (
565
- isset( $post_array['_um_account'] ) // Ultimate Member Plugin support.
566
- && '1' === $post_array['_um_account']
567
- && isset( $post_array['_um_account_tab'] )
568
- && 'general' === $post_array['_um_account_tab']
569
- ) || (
570
- isset( $post_array['action'] ) && 'update_user' === $post_array['action'] // MainWP action.
571
- && isset( $post_array['mainwpsignature'] ) && ! empty( $post_array['mainwpsignature'] ) // MainWP Signature.
572
- )
573
- ) {
574
- if ( isset( $this->old_meta[ $meta_id ] ) && ! in_array( $meta_key, $username_meta, true ) ) {
575
- // Check change in meta value.
576
- if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
577
- $this->plugin->alerts->TriggerIf(
578
- 4015,
579
- array(
580
- 'TargetUsername' => $user->user_login,
581
- 'custom_field_name' => $meta_key,
582
- 'new_value' => $meta_value,
583
- 'old_value' => $this->old_meta[ $meta_id ]->val,
584
- 'ReportText' => is_string( $this->old_meta[ $meta_id ]->val ) ? $this->old_meta[ $meta_id ]->val . '|' . $meta_value : false,
585
- ),
586
- array( $this, 'must_not_contain_role_changes' )
587
- );
588
- }
589
- // Remove old meta update data.
590
- unset( $this->old_meta[ $meta_id ] );
591
- } elseif ( isset( $this->old_meta[ $meta_id ] ) && in_array( $meta_key, $username_meta, true ) ) {
592
- // Detect the alert based on meta key.
593
- switch ( $meta_key ) {
594
- case 'first_name':
595
- if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
596
- $this->plugin->alerts->Trigger(
597
- 4017, array(
598
- 'TargetUsername' => $user->user_login,
599
- 'new_firstname' => $meta_value,
600
- 'old_firstname' => $this->old_meta[ $meta_id ]->val,
601
- )
602
- );
603
- }
604
- break;
605
-
606
- case 'last_name':
607
- if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
608
- $this->plugin->alerts->Trigger(
609
- 4018, array(
610
- 'TargetUsername' => $user->user_login,
611
- 'new_lastname' => $meta_value,
612
- 'old_lastname' => $this->old_meta[ $meta_id ]->val,
613
- )
614
- );
615
- }
616
- break;
617
-
618
- case 'nickname':
619
- if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
620
- $this->plugin->alerts->Trigger(
621
- 4019, array(
622
- 'TargetUsername' => $user->user_login,
623
- 'new_nickname' => $meta_value,
624
- 'old_nickname' => $this->old_meta[ $meta_id ]->val,
625
- )
626
- );
627
- }
628
- break;
629
-
630
- default:
631
- break;
632
- }
633
- }
634
  }
635
- }
636
 
637
- /**
638
- * Method: Updated user data.
639
- *
640
- * @param int $user_id User ID.
641
- * @param object $old_user_data Object containing user's data prior to update.
642
- * @since 2.6.9
643
- */
644
- public function event_userdata_updated( $user_id, $old_user_data ) {
645
- // Get user display name.
646
- $old_display_name = $old_user_data->display_name;
647
 
648
- // Get user's current data.
649
- $new_userdata = get_userdata( $user_id );
650
- $new_display_name = $new_userdata->display_name;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
651
 
652
- // Alert if display name is changed.
653
- if ( $old_display_name !== $new_display_name ) {
654
- $this->plugin->alerts->Trigger(
655
- 4020, array(
656
- 'TargetUsername' => $new_userdata->user_login,
657
- 'new_displayname' => $new_display_name,
658
- 'old_displayname' => $old_display_name,
659
- )
660
- );
661
  }
662
  }
663
 
@@ -684,4 +551,28 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
684
  public function must_not_contain_new_user_alert( WSAL_AlertManager $manager ) {
685
  return ! $manager->WillOrHasTriggered( 4001 );
686
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
  }
68
  add_action( 'update_user_meta', array( $this, 'event_user_meta_updating' ), 10, 3 );
69
  add_action( 'updated_user_meta', array( $this, 'event_user_meta_updated' ), 10, 4 );
70
  add_action( 'user_register', array( $this, 'reset_null_meta_counter' ), 10 );
 
71
  }
72
 
73
  /**
133
  return;
134
  }
135
 
 
 
 
 
 
 
 
 
136
  if ( empty( $meta_value ) && ( $this->null_meta_counter < 1 ) ) { // Report only one NULL meta value.
137
  $this->null_meta_counter += 1;
138
  } elseif ( $this->null_meta_counter >= 1 ) { // Do not report if NULL meta values are more than one.
139
  return;
140
  }
141
 
142
+ // Get post object.
143
+ $post = get_post( $object_id );
144
 
145
+ // Return if the post object is null or the post type is revision.
146
+ if ( null === $post || 'revision' === $post->post_type ) {
147
+ return;
 
 
148
  }
149
 
150
+ /**
151
+ * WSAL Filter: `wsal_before_post_meta_create_event`
152
+ *
153
+ * Runs before logging event for post meta created i.e. 2053.
154
+ * This filter can be used as check to whether log this event or not.
155
+ *
156
+ * @since 3.3.1
157
+ *
158
+ * @param bool $log_event - True if log meta event, false if not.
159
+ * @param string $meta_key - Meta key.
160
+ * @param mixed $meta_value - Meta value.
161
+ * @param WP_Post $post - Post object.
162
+ */
163
+ $log_meta_event = apply_filters( 'wsal_before_post_meta_create_event', true, $meta_key, $meta_value, $post );
164
+ if ( $log_meta_event ) {
165
+ $editor_link = $this->GetEditorLink( $post );
166
+ $this->plugin->alerts->Trigger(
167
+ 2053, array(
168
+ 'PostID' => $object_id,
169
+ 'PostTitle' => $post->post_title,
170
+ 'PostStatus' => $post->post_status,
171
+ 'PostType' => $post->post_type,
172
+ 'PostDate' => $post->post_date,
173
+ 'PostUrl' => get_permalink( $post->ID ),
174
+ 'MetaKey' => $meta_key,
175
+ 'MetaValue' => $meta_value,
176
+ 'MetaLink' => $meta_key,
177
+ $editor_link['name'] => $editor_link['value'],
178
+ )
179
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  }
181
  }
182
 
236
  */
237
  do_action( 'wsal_post_meta_updated', $meta_id, $object_id, $this->old_meta, $meta_key, $meta_value );
238
 
239
+ if ( isset( $this->old_meta[ $meta_id ] ) ) {
240
+ /**
241
+ * WSAL Filter: `wsal_before_post_meta_update_event`
242
+ *
243
+ * Runs before logging events for post meta updated i.e. 2054 or 2062.
244
+ * This filter can be used as check to whether log these events or not.
245
+ *
246
+ * @since 3.3.1
247
+ *
248
+ * @param bool $log_event - True if log meta event 2054 or 2062, false if not.
249
+ * @param string $meta_key - Meta key.
250
+ * @param mixed $meta_value - Meta value.
251
+ * @param stdClass $this->old_meta[ $meta_id ] - Old meta value and key object.
252
+ * @param WP_Post $post - Post object.
253
+ * @param integer $meta_id - Meta ID.
254
+ */
255
+ $log_meta_event = apply_filters( 'wsal_before_post_meta_update_event', true, $meta_key, $meta_value, $this->old_meta[ $meta_id ], $post, $meta_id );
256
 
257
+ // Check change in meta key.
258
+ if ( $log_meta_event && $this->old_meta[ $meta_id ]->key !== $meta_key ) {
259
+ $editor_link = $this->GetEditorLink( $post );
260
+ $this->plugin->alerts->Trigger(
261
+ 2062, array(
262
+ 'PostID' => $object_id,
263
+ 'PostTitle' => $post->post_title,
264
+ 'PostStatus' => $post->post_status,
265
+ 'PostType' => $post->post_type,
266
+ 'PostDate' => $post->post_date,
267
+ 'PostUrl' => get_permalink( $post->ID ),
268
+ 'MetaID' => $meta_id,
269
+ 'MetaKeyNew' => $meta_key,
270
+ 'MetaKeyOld' => $this->old_meta[ $meta_id ]->key,
271
+ 'MetaValue' => $meta_value,
272
+ 'MetaLink' => $meta_key,
273
+ $editor_link['name'] => $editor_link['value'],
274
+ )
275
+ );
276
+ } elseif ( $log_meta_event && $this->old_meta[ $meta_id ]->val !== $meta_value ) { // Check change in meta value.
277
+ $editor_link = $this->GetEditorLink( $post );
278
+ $this->plugin->alerts->Trigger(
279
+ 2054, array(
280
+ 'PostID' => $object_id,
281
+ 'PostTitle' => $post->post_title,
282
+ 'PostStatus' => $post->post_status,
283
+ 'PostType' => $post->post_type,
284
+ 'PostDate' => $post->post_date,
285
+ 'PostUrl' => get_permalink( $post->ID ),
286
+ 'MetaID' => $meta_id,
287
+ 'MetaKey' => $meta_key,
288
+ 'MetaValueNew' => $meta_value,
289
+ 'MetaValueOld' => $this->old_meta[ $meta_id ]->val,
290
+ 'MetaLink' => $meta_key,
291
+ $editor_link['name'] => $editor_link['value'],
292
+ 'ReportText' => is_string( $this->old_meta[ $meta_id ]->val ) ? $this->old_meta[ $meta_id ]->val . '|' . $meta_value : false,
293
+ )
294
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
295
  }
296
+ // Remove old meta update data.
297
+ unset( $this->old_meta[ $meta_id ] );
298
  }
299
  }
300
 
320
  return;
321
  }
322
 
323
+ $editor_link = $this->GetEditorLink( $post );
324
+ foreach ( $meta_ids as $meta_id ) {
325
+ if ( ! $this->CanLogMetaKey( $object_id, $meta_key ) ) {
326
+ continue;
327
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
 
329
+ /**
330
+ * WSAL Filter: `wsal_before_post_meta_delete_event`
331
+ *
332
+ * Runs before logging event for post meta deleted i.e. 2054.
333
+ * This filter can be used as check to whether log this event or not.
334
+ *
335
+ * @since 3.3.1
336
+ *
337
+ * @param bool $log_event - True if log meta event 2055, false if not.
338
+ * @param string $meta_key - Meta key.
339
+ * @param mixed $meta_value - Meta value.
340
+ * @param WP_Post $post - Post object.
341
+ * @param integer $meta_id - Meta ID.
342
+ */
343
+ $log_meta_event = apply_filters( 'wsal_before_post_meta_delete_event', true, $meta_key, $meta_value, $post, $meta_id );
 
 
 
 
 
344
 
345
+ // If not allowed to log meta event then skip it.
346
+ if ( ! $log_meta_event ) {
347
+ continue;
 
 
 
 
 
 
 
 
 
 
 
348
  }
349
+
350
+ $this->plugin->alerts->Trigger(
351
+ 2055, array(
352
+ 'PostID' => $object_id,
353
+ 'PostTitle' => $post->post_title,
354
+ 'PostStatus' => $post->post_status,
355
+ 'PostType' => $post->post_type,
356
+ 'PostDate' => $post->post_date,
357
+ 'PostUrl' => get_permalink( $post->ID ),
358
+ 'MetaID' => $meta_id,
359
+ 'MetaKey' => $meta_key,
360
+ 'MetaValue' => $meta_value,
361
+ $editor_link['name'] => $editor_link['value'],
362
+ )
363
+ );
364
  }
365
  }
366
 
394
  * @param mixed $meta_value - Meta value.
395
  */
396
  public function event_user_meta_created( $object_id, $meta_key, $meta_value ) {
 
 
 
397
  // Check to see if we can log the meta key.
398
  if ( ! $this->CanLogMetaKey( $object_id, $meta_key ) || is_array( $meta_value ) ) {
399
  return;
400
  }
401
 
402
+ if ( $this->is_woocommerce_user_meta( $meta_key ) ) {
403
+ return;
404
+ }
405
+
406
  if ( empty( $meta_value ) && ( $this->null_meta_counter < 1 ) ) { // Report only one NULL meta value.
407
  $this->null_meta_counter += 1;
408
  } elseif ( $this->null_meta_counter >= 1 ) { // Do not report if NULL meta values are more than one.
409
  return;
410
  }
411
 
412
+ // Get user.
413
+ $user = get_user_by( 'ID', $object_id );
 
 
 
 
 
414
 
415
+ $this->plugin->alerts->TriggerIf(
416
+ 4016,
417
+ array(
418
+ 'TargetUsername' => $user->user_login,
419
+ 'custom_field_name' => $meta_key,
420
+ 'new_value' => $meta_value,
421
+ ),
422
+ array( $this, 'must_not_contain_new_user_alert' )
423
+ );
 
 
 
424
  }
425
 
426
  /**
450
  * @param mixed $meta_value - Meta value.
451
  */
452
  public function event_user_meta_updated( $meta_id, $object_id, $meta_key, $meta_value ) {
 
 
 
453
  // Check to see if we can log the meta key.
454
  if ( ! $this->CanLogMetaKey( $object_id, $meta_key ) || is_array( $meta_value ) ) {
455
  return;
456
  }
457
 
458
+ if ( $this->is_woocommerce_user_meta( $meta_key ) ) {
459
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
460
  }
 
461
 
462
+ if ( 'last_update' === $meta_key ) { // Contains timestamp for last user update so ignore it.
463
+ return;
464
+ }
 
 
 
 
 
 
 
465
 
466
+ $username_meta = array( 'first_name', 'last_name', 'nickname' ); // User profile name related meta.
467
+ $user = get_user_by( 'ID', $object_id ); // Get user.
468
+
469
+ if ( isset( $this->old_meta[ $meta_id ] ) && ! in_array( $meta_key, $username_meta, true ) ) {
470
+ // Check change in meta value.
471
+ if ( $this->old_meta[ $meta_id ]->val !== $meta_value ) {
472
+ $this->plugin->alerts->TriggerIf(
473
+ 4015,
474
+ array(
475
+ 'TargetUsername' => $user->user_login,
476
+ 'custom_field_name' => $meta_key,
477
+ 'new_value' => $meta_value,
478
+ 'old_value' => $this->old_meta[ $meta_id ]->val,
479
+ 'ReportText' => is_string( $this->old_meta[ $meta_id ]->val ) ? $this->old_meta[ $meta_id ]->val . '|' . $meta_value : false,
480
+ ),
481
+ array( $this, 'must_not_contain_role_changes' )
482
+ );
483
+ }
484
+ // Remove old meta update data.
485
+ unset( $this->old_meta[ $meta_id ] );
486
+ } elseif ( isset( $this->old_meta[ $meta_id ] ) && in_array( $meta_key, $username_meta, true ) ) {
487
+ // Detect the alert based on meta key.
488
+ switch ( $meta_key ) {
489
+ case 'first_name':
490
+ if ( $this->old_meta[ $meta_id ]->val !== $meta_value ) {
491
+ $this->plugin->alerts->Trigger(
492
+ 4017, array(
493
+ 'TargetUsername' => $user->user_login,
494
+ 'new_firstname' => $meta_value,
495
+ 'old_firstname' => $this->old_meta[ $meta_id ]->val,
496
+ )
497
+ );
498
+ }
499
+ break;
500
+
501
+ case 'last_name':
502
+ if ( $this->old_meta[ $meta_id ]->val !== $meta_value ) {
503
+ $this->plugin->alerts->Trigger(
504
+ 4018, array(
505
+ 'TargetUsername' => $user->user_login,
506
+ 'new_lastname' => $meta_value,
507
+ 'old_lastname' => $this->old_meta[ $meta_id ]->val,
508
+ )
509
+ );
510
+ }
511
+ break;
512
+
513
+ case 'nickname':
514
+ if ( $this->old_meta[ $meta_id ]->val !== $meta_value ) {
515
+ $this->plugin->alerts->Trigger(
516
+ 4019, array(
517
+ 'TargetUsername' => $user->user_login,
518
+ 'new_nickname' => $meta_value,
519
+ 'old_nickname' => $this->old_meta[ $meta_id ]->val,
520
+ )
521
+ );
522
+ }
523
+ break;
524
 
525
+ default:
526
+ break;
527
+ }
 
 
 
 
 
 
528
  }
529
  }
530
 
551
  public function must_not_contain_new_user_alert( WSAL_AlertManager $manager ) {
552
  return ! $manager->WillOrHasTriggered( 4001 );
553
  }
554
+
555
+ /**
556
+ * Check if meta key belongs to WooCommerce user meta.
557
+ *
558
+ * @param string $meta_key - Meta key.
559
+ * @return boolean
560
+ */
561
+ private function is_woocommerce_user_meta( $meta_key ) {
562
+ // Check for WordPress user profile keys.
563
+ if ( false === strpos( $meta_key, 'shipping_' ) || false === strpos( $meta_key, 'billing_' ) ) {
564
+ return false;
565
+ }
566
+
567
+ // Remove the prefix to avoid redundancy in the meta keys.
568
+ $address_key = str_replace( array( 'shipping_', 'billing_' ), '', $meta_key );
569
+
570
+ // WC address meta keys without prefix.
571
+ $meta_keys = array( 'first_name', 'last_name', 'company', 'country', 'address_1', 'address_2', 'city', 'state', 'postcode', 'phone', 'email' );
572
+
573
+ if ( in_array( $address_key, $meta_keys, true ) ) {
574
+ return true;
575
+ }
576
+ return false;
577
+ }
578
  }
classes/Sensors/Public.php CHANGED
@@ -55,7 +55,7 @@ class WSAL_Sensors_Public extends WSAL_AbstractSensor {
55
  public function HookEvents() {
56
  if ( $this->plugin->load_wsal_on_frontend() ) {
57
  add_action( 'user_register', array( $this, 'event_user_register' ) );
58
- add_action( 'comment_post', array( $this, 'event_comment' ), 10, 2 );
59
  add_filter( 'template_redirect', array( $this, 'event_404' ) );
60
 
61
  // Check if WooCommerce plugin exists.
@@ -96,40 +96,82 @@ class WSAL_Sensors_Public extends WSAL_AbstractSensor {
96
  /**
97
  * Fires immediately after a comment is inserted into the database.
98
  *
99
- * @param int $comment_id The comment ID.
100
- * @param mixed $comment_approved 1 if the comment is approved, 0 if not, 'spam' if spam.
 
101
  */
102
- public function event_comment( $comment_id, $comment_approved = null ) {
103
- // @codingStandardsIgnoreStart
104
- $post_comment = isset( $_POST['comment'] ) ? sanitize_text_field( wp_unslash( $_POST['comment'] ) ) : false;
105
- // @codingStandardsIgnoreEnd
106
-
107
- if ( $post_comment ) {
108
- $comment = get_comment( $comment_id );
109
- if ( ! empty( $comment ) ) {
110
- if ( 'spam' !== $comment->comment_approved ) {
111
- $post = get_post( $comment->comment_post_ID );
112
- $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
113
- $fields = array(
114
- 'Date' => $comment->comment_date,
115
- 'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
116
- );
117
-
118
- // Get user data.
119
- $user_data = get_user_by( 'email', $comment->comment_author_email );
120
-
121
- if ( ! $user_data ) {
122
- // Set the fields.
123
- /* Translators: 1: Post Title, 2: Comment Author */
124
- $fields['CommentMsg'] = sprintf( esc_html__( 'A comment was posted in response to the post %1$s. The comment was posted by %2$s', 'wp-security-audit-log' ), '<strong>' . $post->post_title . '</strong>', '<strong>' . $this->check_author( $comment ) . '</strong>' );
125
- $fields['Username'] = 'Website Visitor';
126
- $this->plugin->alerts->Trigger( 2126, $fields );
 
 
 
 
 
 
 
 
 
127
  }
 
 
 
 
 
 
128
  }
129
  }
130
  }
131
  }
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  /**
134
  * Shows the username if the comment is owned by a user
135
  * and the email if the comment was posted by a non WordPress user
@@ -561,7 +603,7 @@ class WSAL_Sensors_Public extends WSAL_AbstractSensor {
561
 
562
  // Return if current screen is edit post page.
563
  global $pagenow;
564
- if ( is_admin() && 'post.php' === $pagenow ) {
565
  return;
566
  }
567
 
55
  public function HookEvents() {
56
  if ( $this->plugin->load_wsal_on_frontend() ) {
57
  add_action( 'user_register', array( $this, 'event_user_register' ) );
58
+ add_action( 'comment_post', array( $this, 'event_comment' ), 10, 3 );
59
  add_filter( 'template_redirect', array( $this, 'event_404' ) );
60
 
61
  // Check if WooCommerce plugin exists.
96
  /**
97
  * Fires immediately after a comment is inserted into the database.
98
  *
99
+ * @param int $comment_id - The comment ID.
100
+ * @param mixed $comment_approved - 1 if the comment is approved, 0 if not, 'spam' if spam.
101
+ * @param array $comment_data - Comment data.
102
  */
103
+ public function event_comment( $comment_id, $comment_approved, $comment_data ) {
104
+ if ( ! $comment_id ) {
105
+ return;
106
+ }
107
+ // Check if the comment is response to another comment.
108
+ if ( isset( $comment_data['comment_parent'] ) && $comment_data['comment_parent'] ) {
109
+ $this->event_generic( $comment_id, 2092 );
110
+ return;
111
+ }
112
+
113
+ $comment = get_comment( $comment_id );
114
+ if ( $comment ) {
115
+ if ( 'spam' !== $comment->comment_approved ) {
116
+ $post = get_post( $comment->comment_post_ID );
117
+ $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
118
+ $fields = array(
119
+ 'Date' => $comment->comment_date,
120
+ 'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
121
+ );
122
+
123
+ // Get user data.
124
+ $user_data = get_user_by( 'email', $comment->comment_author_email );
125
+
126
+ if ( ! $user_data ) {
127
+ // Set the fields.
128
+ /* Translators: 1: Post Title, 2: Comment Author */
129
+ $fields['CommentMsg'] = sprintf( esc_html__( 'A comment was posted in response to the post %1$s. The comment was posted by %2$s', 'wp-security-audit-log' ), '<strong>' . $post->post_title . '</strong>', '<strong>' . $this->check_author( $comment ) . '</strong>' );
130
+ $fields['Username'] = 'Website Visitor';
131
+ $this->plugin->alerts->Trigger( 2126, $fields );
132
+ } else {
133
+ // Get user roles.
134
+ $user_roles = $user_data->roles;
135
+ if ( function_exists( 'is_super_admin' ) && is_super_admin() ) { // Check if superadmin.
136
+ $user_roles[] = 'superadmin';
137
  }
138
+
139
+ // Set the fields.
140
+ $fields['Username'] = $user_data->user_login;
141
+ $fields['CurrentUserRoles'] = $user_roles;
142
+ $fields['CommentMsg'] = sprintf( 'Posted a comment in response to the post <strong>%s</strong>', $post->post_title );
143
+ $this->plugin->alerts->Trigger( 2099, $fields );
144
  }
145
  }
146
  }
147
  }
148
 
149
+ /**
150
+ * Trigger generic event.
151
+ *
152
+ * @since 3.4
153
+ *
154
+ * @param integer $comment_id - Comment ID.
155
+ * @param integer $alert_code - Event code.
156
+ */
157
+ private function event_generic( $comment_id, $alert_code ) {
158
+ $comment = get_comment( $comment_id );
159
+ if ( $comment ) {
160
+ $post = get_post( $comment->comment_post_ID );
161
+ $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
162
+ $fields = array(
163
+ 'PostTitle' => $post->post_title,
164
+ 'Author' => $comment->comment_author,
165
+ 'Date' => $comment->comment_date,
166
+ 'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
167
+ );
168
+
169
+ if ( 'shop_order' !== $post->post_type ) {
170
+ $this->plugin->alerts->Trigger( $alert_code, $fields );
171
+ }
172
+ }
173
+ }
174
+
175
  /**
176
  * Shows the username if the comment is owned by a user
177
  * and the email if the comment was posted by a non WordPress user
603
 
604
  // Return if current screen is edit post page.
605
  global $pagenow;
606
+ if ( is_admin() && ( 'post.php' === $pagenow || defined( 'DOING_AJAX' ) ) ) {
607
  return;
608
  }
609
 
classes/Sensors/UserProfile.php CHANGED
@@ -34,25 +34,6 @@ if ( ! defined( 'ABSPATH' ) ) {
34
  */
35
  class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
36
 
37
- /**
38
- * Listening to events using WP hooks.
39
- */
40
- public function HookEvents() {
41
- add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
42
- add_action( 'edit_user_profile_update', array( $this, 'EventUserChanged' ) );
43
- add_action( 'personal_options_update', array( $this, 'EventUserChanged' ) );
44
- add_action( 'delete_user', array( $this, 'EventUserDeleted' ) );
45
- add_action( 'wpmu_delete_user', array( $this, 'EventUserDeleted' ) );
46
- add_action( 'set_user_role', array( $this, 'EventUserRoleChanged' ), 10, 3 );
47
- add_action( 'edit_user_profile', array( $this, 'EventOpenProfile' ), 10, 1 );
48
- add_action( 'profile_update', array( $this, 'event_email_changed' ), 10, 2 );
49
-
50
- // Check if MainWP Child Plugin exists.
51
- if ( is_plugin_active( 'mainwp-child/mainwp-child.php' ) ) {
52
- add_action( 'profile_update', array( $this, 'mainwp_child_user_update' ), 20, 2 );
53
- }
54
- }
55
-
56
  /**
57
  * List of super admins.
58
  *
@@ -61,156 +42,141 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
61
  protected $old_superadmins;
62
 
63
  /**
64
- * Triggered when a user accesses the admin area.
65
  */
66
- public function EventAdminInit() {
67
- if ( $this->IsMultisite() ) {
68
- $this->old_superadmins = get_super_admins();
69
- }
 
 
 
 
 
 
70
  }
71
 
72
  /**
73
- * Triggered when a user role is changed.
 
74
  *
75
- * @param int $user_id - User ID of the user.
76
- * @param string $role - String of new roles.
77
- * @param string $old_roles - String of old roles.
78
  */
79
- public function EventUserRoleChanged( $user_id, $role, $old_roles ) {
80
- // Filter $_POST array for security.
81
- $post_array = filter_input_array( INPUT_POST );
82
 
83
- if ( ! isset( $post_array['changeit'] ) ) {
84
- if ( isset( $post_array['_wpnonce'] )
85
- && ! wp_verify_nonce( $post_array['_wpnonce'], 'update-user_' . $user_id ) ) {
86
- return false;
87
- }
88
- } elseif ( isset( $post_array['changeit'] )
89
- && 'Change' === $post_array['changeit']
90
- && isset( $post_array['_wpnonce'] )
91
- && ! wp_verify_nonce( $post_array['_wpnonce'], 'bulk-users' ) ) {
92
- return false;
93
- }
94
 
95
- $user = get_userdata( $user_id );
96
- $bbpress_roles = array( 'bbp_spectator', 'bbp_moderator', 'bbp_participant', 'bbp_keymaster', 'bbp_blocked' );
 
97
 
98
- // Remove any BBPress roles.
99
- if ( is_array( $old_roles ) ) {
100
- foreach ( $old_roles as $value ) {
101
- if ( in_array( $value, $bbpress_roles ) ) {
102
- if ( isset( $post_array['bbp-forums-role'] ) && $post_array['bbp-forums-role'] != $value ) {
103
- $current_user = wp_get_current_user();
104
- $this->plugin->alerts->TriggerIf(
105
- 4013, array(
106
- 'TargetUsername' => $user->user_login,
107
- 'OldRole' => ucfirst( substr( $value, 4 ) ),
108
- 'NewRole' => ( isset( $post_array['bbp-forums-role'] ) ) ? ucfirst( substr( $post_array['bbp-forums-role'], 4 ) ) : false,
109
- 'UserChanger' => $current_user->user_login,
110
- )
111
- );
112
- }
113
- }
114
  }
115
- $old_roles = array_diff( $old_roles, $bbpress_roles );
116
  }
117
 
118
- // Get roles.
119
- $old_role = count( $old_roles ) ? implode( ', ', $old_roles ) : '';
120
- $new_role = $role;
121
-
122
- // If multisite, then get its URL.
123
- if ( $this->plugin->IsMultisite() ) {
124
- $site_id = get_current_blog_id();
 
 
 
 
 
 
125
  }
126
 
127
- // Alert if roles are changed.
128
- if ( $old_role != $new_role ) {
129
- $this->plugin->alerts->TriggerIf(
130
- 4002,
131
- array(
132
  'TargetUserID' => $user_id,
133
- 'TargetUsername' => $user->user_login,
134
- 'OldRole' => $old_role,
135
- 'NewRole' => $new_role,
136
- 'multisite_text' => $this->plugin->IsMultisite() ? $site_id : false,
137
- ),
138
- array( $this, 'MustNotContainUserChanges' )
 
 
 
 
 
 
 
 
 
139
  );
140
  }
141
  }
142
 
143
  /**
144
- * Triggered when a user changes email, password
145
- * or user is granted or revoked super admin access.
146
  *
147
- * @param int $user_id - User ID of the registered user.
 
 
148
  */
149
- public function EventUserChanged( $user_id ) {
150
- // Filter $_POST array for security.
151
- $post_array = filter_input_array( INPUT_POST );
152
-
153
- // Get user data.
154
  $user = get_userdata( $user_id );
155
 
156
- // Password changed.
157
- if ( ! empty( $post_array['pass1'] ) && ! empty( $post_array['pass2'] ) ) {
158
- if ( trim( $post_array['pass1'] ) == trim( $post_array['pass2'] ) ) {
159
- $event = get_current_user_id() == $user_id ? 4003 : 4004;
160
- $this->plugin->alerts->Trigger(
161
- $event, array(
162
- 'TargetUserID' => $user_id,
163
- 'TargetUserData' => (object) array(
164
- 'Username' => $user->user_login,
165
- 'Roles' => is_array( $user->roles ) ? implode( ', ', $user->roles ) : $user->roles,
166
- ),
167
- )
168
- );
169
- }
170
- }
171
 
172
- // Email changed.
173
- if ( ! empty( $post_array['email'] ) ) {
174
- $old_email = $user->user_email;
175
- $new_email = trim( $post_array['email'] );
176
- if ( $old_email != $new_email ) {
177
- $event = get_current_user_id() == $user_id ? 4005 : 4006;
178
- $this->plugin->alerts->Trigger(
179
- $event, array(
180
- 'TargetUserID' => $user_id,
181
- 'TargetUsername' => $user->user_login,
182
- 'OldEmail' => $old_email,
183
- 'NewEmail' => $new_email,
184
- )
185
- );
186
- }
187
  }
188
 
189
- if ( $this->IsMultisite() ) {
190
- $username = $user->user_login;
191
- $enabled = isset( $post_array['super_admin'] );
192
-
193
- if ( get_current_user_id() != $user_id ) {
194
- // Super admin enabled.
195
- if ( $enabled && ! in_array( $username, $this->old_superadmins ) ) {
196
- $this->plugin->alerts->Trigger(
197
- 4008, array(
198
- 'TargetUserID' => $user_id,
199
- 'TargetUsername' => $user->user_login,
200
- )
201
- );
202
- }
203
 
204
- // Super admin disabled.
205
- if ( ! $enabled && in_array( $username, $this->old_superadmins ) ) {
206
- $this->plugin->alerts->Trigger(
207
- 4009, array(
208
- 'TargetUserID' => $user_id,
209
- 'TargetUsername' => $user->user_login,
210
- )
211
- );
212
- }
213
- }
 
 
 
214
  }
215
  }
216
 
@@ -219,18 +185,18 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
219
  *
220
  * @param int $user_id - User ID of the registered user.
221
  */
222
- public function EventUserDeleted( $user_id ) {
223
  $user = get_userdata( $user_id );
224
  $role = is_array( $user->roles ) ? implode( ', ', $user->roles ) : $user->roles;
225
  $this->plugin->alerts->TriggerIf(
226
  4007, array(
227
- 'TargetUserID' => $user_id,
228
  'TargetUserData' => (object) array(
229
- 'Username' => $user->user_login,
230
  'FirstName' => $user->user_firstname,
231
- 'LastName' => $user->user_lastname,
232
- 'Email' => $user->user_email,
233
- 'Roles' => $role ? $role : 'none',
234
  ),
235
  ), array( $this, 'MustNotContainCreateUser' )
236
  );
@@ -241,25 +207,84 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
241
  *
242
  * @param object $user - Instance of WP_User.
243
  */
244
- public function EventOpenProfile( $user ) {
245
- if ( ! empty( $user ) ) {
246
- $current_user = wp_get_current_user();
 
 
 
 
 
 
 
 
 
 
 
 
247
 
248
- // Filter $_GET array for security.
249
- $get_array = filter_input_array( INPUT_GET );
 
 
 
 
250
 
251
- $updated = ( isset( $get_array['updated'] ) ) ? true : false;
252
- if ( ! empty( $current_user ) && ( $user->ID !== $current_user->ID ) && empty( $updated ) ) {
253
- $this->plugin->alerts->Trigger(
254
- 4014, array(
255
- 'UserChanger' => $current_user->user_login,
256
- 'TargetUsername' => $user->user_login,
257
- )
258
- );
259
- }
 
 
 
 
 
 
 
 
 
260
  }
261
  }
262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  /**
264
  * Must Not Contain Create User.
265
  *
@@ -283,103 +308,4 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
283
  || $mgr->WillOrHasTriggered( 4001 )
284
  );
285
  }
286
-
287
- /**
288
- * Method: Support for Ultimate Member email change
289
- * alert.
290
- *
291
- * @param int $user_id - User ID.
292
- * @param WP_User $old_userdata - Old WP_User object.
293
- */
294
- public function event_email_changed( $user_id, $old_userdata ) {
295
- // Get $_POST global array.
296
- $post_array = filter_input_array( INPUT_POST );
297
-
298
- if (
299
- isset( $post_array['_um_account_tab'] ) // Check for UM tab.
300
- && 'general' === $post_array['_um_account_tab'] // Verify `General` UM tab.
301
- && ! empty( $post_array['user_email'] ) // Check if user email is set.
302
- ) {
303
- $old_email = $old_userdata->user_email; // Old email.
304
- $new_email = trim( $post_array['user_email'] ); // New email.
305
- if ( $old_email !== $new_email ) { // If both emails don't match then log alert.
306
- $event = get_current_user_id() === $user_id ? 4005 : 4006;
307
- $this->plugin->alerts->Trigger(
308
- $event, array(
309
- 'TargetUserID' => $user_id,
310
- 'TargetUsername' => $old_userdata->user_login,
311
- 'OldEmail' => $old_email,
312
- 'NewEmail' => $new_email,
313
- )
314
- );
315
- }
316
- }
317
- }
318
-
319
- /**
320
- * Method: Support for user profile changes via MainWP dashboard.
321
- *
322
- * @param int $user_id - User ID.
323
- * @param WP_User $old_userdata - Old WP_User object.
324
- */
325
- public function mainwp_child_user_update( $user_id, $old_userdata ) {
326
- // Check parameters.
327
- if ( empty( $user_id ) || empty( $old_userdata ) ) {
328
- return;
329
- }
330
-
331
- // Get MainWP post data.
332
- $post_array = filter_input_array( INPUT_POST );
333
-
334
- if (
335
- isset( $post_array['action'] ) && 'update_user' === $post_array['action']
336
- && isset( $post_array['mainwpsignature'] ) && ! empty( $post_array['mainwpsignature'] )
337
- ) {
338
- // Get the user by id.
339
- $user = get_user_by( 'id', $user_id );
340
-
341
- // If user exists then continue.
342
- if ( ! empty( $user ) && $user instanceof WP_User ) {
343
- // Email changed.
344
- if ( ! empty( $post_array['extra']['email'] ) ) {
345
- $old_email = $old_userdata->user_email; // Old email address.
346
- $new_email = trim( $post_array['extra']['email'] ); // New email address.
347
- $new_email = sanitize_text_field( wp_unslash( $new_email ) ); // Filter data for security.
348
-
349
- // If old email does not matches the new email then log the event.
350
- if ( $old_email !== $new_email ) {
351
- $event = get_current_user_id() === $user_id ? 4005 : 4006;
352
- $this->plugin->alerts->Trigger(
353
- $event, array(
354
- 'TargetUserID' => $user_id,
355
- 'TargetUsername' => $user->user_login,
356
- 'OldEmail' => $old_email,
357
- 'NewEmail' => $new_email,
358
- )
359
- );
360
- }
361
- }
362
-
363
- // Password changed.
364
- if ( ! empty( $post_array['extra']['pass1'] ) && ! empty( $post_array['extra']['pass2'] ) ) {
365
- $pass1 = trim( $post_array['extra']['pass1'] );
366
- $pass2 = trim( $post_array['extra']['pass2'] );
367
- $match = wp_check_password( $pass1, $old_userdata->user_pass, $user_id ); // Check if current pass matches the old one.
368
-
369
- if ( $pass1 === $pass2 && ! $match ) {
370
- $event = get_current_user_id() === $user_id ? 4003 : 4004;
371
- $this->plugin->alerts->Trigger(
372
- $event, array(
373
- 'TargetUserID' => $user_id,
374
- 'TargetUserData' => (object) array(
375
- 'Username' => $user->user_login,
376
- 'Roles' => is_array( $user->roles ) ? implode( ', ', $user->roles ) : $user->roles,
377
- ),
378
- )
379
- );
380
- }
381
- }
382
- }
383
- }
384
- }
385
  }
34
  */
35
  class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  /**
38
  * List of super admins.
39
  *
42
  protected $old_superadmins;
43
 
44
  /**
45
+ * Listening to events using WP hooks.
46
  */
47
+ public function HookEvents() {
48
+ add_action( 'profile_update', array( $this, 'event_user_updated' ), 10, 2 );
49
+ add_action( 'set_user_role', array( $this, 'event_user_role_changed' ), 10, 3 );
50
+ add_action( 'delete_user', array( $this, 'event_user_deleted' ) );
51
+ add_action( 'wpmu_delete_user', array( $this, 'event_user_deleted' ) );
52
+ add_action( 'edit_user_profile', array( $this, 'event_open_profile' ), 10, 1 );
53
+ add_action( 'grant_super_admin', array( $this, 'get_super_admins' ) );
54
+ add_action( 'revoke_super_admin', array( $this, 'get_super_admins' ) );
55
+ add_action( 'granted_super_admin', array( $this, 'event_super_access_granted' ), 10, 1 );
56
+ add_action( 'revoked_super_admin', array( $this, 'event_super_access_revoked' ), 10, 1 );
57
  }
58
 
59
  /**
60
+ * Method: Support for Ultimate Member email change
61
+ * alert.
62
  *
63
+ * @param int $user_id - User ID.
64
+ * @param WP_User $old_userdata - Old WP_User object.
 
65
  */
66
+ public function event_user_updated( $user_id, $old_userdata ) {
67
+ // Get new user data.
68
+ $new_userdata = get_userdata( $user_id );
69
 
70
+ if ( is_plugin_active( 'bbpress/bbpress.php' ) ) {
71
+ // BBPress user roles.
72
+ $bbpress_roles = array( 'bbp_spectator', 'bbp_moderator', 'bbp_participant', 'bbp_keymaster', 'bbp_blocked' );
73
+
74
+ // Get bbpress user roles data.
75
+ $old_bbpress_roles = array_intersect( $bbpress_roles, $old_userdata->roles );
76
+ $new_bbpress_roles = array_intersect( $bbpress_roles, $new_userdata->roles );
77
+
78
+ $old_bbpress_roles = array_map( array( $this, 'filter_role_names' ), $old_bbpress_roles );
79
+ $new_bbpress_roles = array_map( array( $this, 'filter_role_names' ), $new_bbpress_roles );
 
80
 
81
+ // Convert array to string.
82
+ $old_bbpress_roles = is_array( $old_bbpress_roles ) ? implode( ', ', $old_bbpress_roles ) : '';
83
+ $new_bbpress_roles = is_array( $new_bbpress_roles ) ? implode( ', ', $new_bbpress_roles ) : '';
84
 
85
+ if ( $old_bbpress_roles !== $new_bbpress_roles ) {
86
+ $current_user = wp_get_current_user();
87
+ $this->plugin->alerts->Trigger(
88
+ 4013, array(
89
+ 'TargetUsername' => $new_userdata->user_login,
90
+ 'OldRole' => $old_bbpress_roles,
91
+ 'NewRole' => $new_bbpress_roles,
92
+ 'UserChanger' => $current_user->user_login,
93
+ )
94
+ );
 
 
 
 
 
 
95
  }
 
96
  }
97
 
98
+ // Alert if user password is changed.
99
+ if ( $old_userdata->user_pass !== $new_userdata->user_pass ) {
100
+ $event = get_current_user_id() === $user_id ? 4003 : 4004;
101
+ $user_roles = implode( ', ', array_map( array( $this, 'filter_role_names' ), $new_userdata->roles ) );
102
+ $this->plugin->alerts->Trigger(
103
+ $event, array(
104
+ 'TargetUserID' => $user_id,
105
+ 'TargetUserData' => (object) array(
106
+ 'Username' => $new_userdata->user_login,
107
+ 'Roles' => $user_roles,
108
+ ),
109
+ )
110
+ );
111
  }
112
 
113
+ // Alert if user email is changed.
114
+ if ( $old_userdata->user_email !== $new_userdata->user_email ) {
115
+ $event = get_current_user_id() === $user_id ? 4005 : 4006;
116
+ $this->plugin->alerts->Trigger(
117
+ $event, array(
118
  'TargetUserID' => $user_id,
119
+ 'TargetUsername' => $new_userdata->user_login,
120
+ 'OldEmail' => $old_userdata->user_email,
121
+ 'NewEmail' => $new_userdata->user_email,
122
+ )
123
+ );
124
+ }
125
+
126
+ // Alert if display name is changed.
127
+ if ( $old_userdata->display_name !== $new_userdata->display_name ) {
128
+ $this->plugin->alerts->Trigger(
129
+ 4020, array(
130
+ 'TargetUsername' => $new_userdata->user_login,
131
+ 'old_displayname' => $old_userdata->display_name,
132
+ 'new_displayname' => $new_userdata->display_name,
133
+ )
134
  );
135
  }
136
  }
137
 
138
  /**
139
+ * Triggered when a user role is changed.
 
140
  *
141
+ * @param int $user_id - User ID of the user.
142
+ * @param string $new_role - New role.
143
+ * @param array $old_roles - Array of old roles.
144
  */
145
+ public function event_user_role_changed( $user_id, $new_role, $old_roles ) {
 
 
 
 
146
  $user = get_userdata( $user_id );
147
 
148
+ // If BBPress plugin is active then check for user roles change.
149
+ if ( is_plugin_active( 'bbpress/bbpress.php' ) ) {
150
+ // BBPress user roles.
151
+ $bbpress_roles = array( 'bbp_spectator', 'bbp_moderator', 'bbp_participant', 'bbp_keymaster', 'bbp_blocked' );
 
 
 
 
 
 
 
 
 
 
 
152
 
153
+ // Set WP roles.
154
+ $old_roles = array_diff( $old_roles, $bbpress_roles );
155
+ $new_roles = array_diff( $user->roles, $bbpress_roles );
156
+ $old_roles = array_map( array( $this, 'filter_role_names' ), $old_roles );
157
+ $new_roles = array_map( array( $this, 'filter_role_names' ), $new_roles );
158
+ } else {
159
+ $old_roles = array_map( array( $this, 'filter_role_names' ), $old_roles );
160
+ $new_roles = array_map( array( $this, 'filter_role_names' ), $user->roles );
 
 
 
 
 
 
 
161
  }
162
 
163
+ // Get roles.
164
+ $old_roles = is_array( $old_roles ) ? implode( ', ', $old_roles ) : '';
165
+ $new_roles = is_array( $new_roles ) ? implode( ', ', $new_roles ) : '';
 
 
 
 
 
 
 
 
 
 
 
166
 
167
+ // Alert if roles are changed.
168
+ if ( $old_roles !== $new_roles ) {
169
+ $this->plugin->alerts->TriggerIf(
170
+ 4002,
171
+ array(
172
+ 'TargetUserID' => $user_id,
173
+ 'TargetUsername' => $user->user_login,
174
+ 'OldRole' => $old_roles,
175
+ 'NewRole' => $new_roles,
176
+ 'multisite_text' => $this->plugin->IsMultisite() ? get_current_blog_id() : false,
177
+ ),
178
+ array( $this, 'MustNotContainUserChanges' )
179
+ );
180
  }
181
  }
182
 
185
  *
186
  * @param int $user_id - User ID of the registered user.
187
  */
188
+ public function event_user_deleted( $user_id ) {
189
  $user = get_userdata( $user_id );
190
  $role = is_array( $user->roles ) ? implode( ', ', $user->roles ) : $user->roles;
191
  $this->plugin->alerts->TriggerIf(
192
  4007, array(
193
+ 'TargetUserID' => $user_id,
194
  'TargetUserData' => (object) array(
195
+ 'Username' => $user->user_login,
196
  'FirstName' => $user->user_firstname,
197
+ 'LastName' => $user->user_lastname,
198
+ 'Email' => $user->user_email,
199
+ 'Roles' => $role ? $role : 'none',
200
  ),
201
  ), array( $this, 'MustNotContainCreateUser' )
202
  );
207
  *
208
  * @param object $user - Instance of WP_User.
209
  */
210
+ public function event_open_profile( $user ) {
211
+ if ( ! $user ) {
212
+ return;
213
+ }
214
+ $current_user = wp_get_current_user();
215
+ $updated = isset( $_GET['updated'] ); // @codingStandardsIgnoreLine
216
+ if ( $current_user && ( $user->ID !== $current_user->ID ) && ! $updated ) {
217
+ $this->plugin->alerts->Trigger(
218
+ 4014, array(
219
+ 'UserChanger' => $current_user->user_login,
220
+ 'TargetUsername' => $user->user_login,
221
+ )
222
+ );
223
+ }
224
+ }
225
 
226
+ /**
227
+ * Triggered when a user accesses the admin area.
228
+ */
229
+ public function get_super_admins() {
230
+ $this->old_superadmins = $this->IsMultisite() ? get_super_admins() : null;
231
+ }
232
 
233
+ /**
234
+ * Super Admin Enabled.
235
+ *
236
+ * Triggers when a user is granted super admin access.
237
+ *
238
+ * @since 3.4
239
+ *
240
+ * @param int $user_id - ID of the user that was granted Super Admin privileges.
241
+ */
242
+ public function event_super_access_granted( $user_id ) {
243
+ $user = get_userdata( $user_id );
244
+ if ( $user && ! in_array( $user->user_login, $this->old_superadmins, true ) ) {
245
+ $this->plugin->alerts->Trigger(
246
+ 4008, array(
247
+ 'TargetUserID' => $user_id,
248
+ 'TargetUsername' => $user->user_login,
249
+ )
250
+ );
251
  }
252
  }
253
 
254
+ /**
255
+ * Super Admin Disabled.
256
+ *
257
+ * Triggers when a user is revoked super admin access.
258
+ *
259
+ * @since 3.4
260
+ *
261
+ * @param int $user_id - ID of the user that was revoked Super Admin privileges.
262
+ */
263
+ public function event_super_access_revoked( $user_id ) {
264
+ $user = get_userdata( $user_id );
265
+ if ( $user && in_array( $user->user_login, $this->old_superadmins, true ) ) {
266
+ $this->plugin->alerts->Trigger(
267
+ 4009, array(
268
+ 'TargetUserID' => $user_id,
269
+ 'TargetUsername' => $user->user_login,
270
+ )
271
+ );
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Remove BBPress Prefix from User Role.
277
+ *
278
+ * @since 3.4
279
+ *
280
+ * @param string $user_role - User role.
281
+ * @return string
282
+ */
283
+ public function filter_role_names( $user_role ) {
284
+ global $wp_roles;
285
+ return isset( $wp_roles->role_names[ $user_role ] ) ? $wp_roles->role_names[ $user_role ] : false;
286
+ }
287
+
288
  /**
289
  * Must Not Contain Create User.
290
  *
308
  || $mgr->WillOrHasTriggered( 4001 )
309
  );
310
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  }
classes/Sensors/WooCommerce.php CHANGED
@@ -15,45 +15,17 @@ if ( ! defined( 'ABSPATH' ) ) {
15
  /**
16
  * Support for WooCommerce Plugin.
17
  *
18
- * 9000 User created a new product
19
- * 9001 User published a product
20
- * 9002 User created a new product category
21
- * 9003 User changed the category of a product
22
- * 9004 User modified the short description of a product
23
- * 9005 User modified the text of a product
24
- * 9006 User changed the URL of a product
25
- * 9007 User changed the Product Data of a product
26
- * 9008 User changed the date of a product
27
- * 9009 User changed the visibility of a product
28
- * 9010 User modified the product
29
- * 9012 User moved a product to trash
30
- * 9013 User permanently deleted a product
31
- * 9014 User restored a product from the trash
32
- * 9015 User changed status of a product
33
- * 9016 User changed type of a price
34
- * 9017 User changed the SKU of a product
35
- * 9018 User changed the stock status of a product
36
- * 9019 User changed the stock quantity
37
- * 9020 User set a product type
38
- * 9021 User changed the weight of a product
39
- * 9022 User changed the dimensions of a product
40
- * 9023 User added the Downloadable File to a product
41
- * 9024 User Removed the Downloadable File from a product
42
- * 9025 User changed the name of a Downloadable File in a product
43
- * 9026 User changed the URL of the Downloadable File in a product
44
- * 9027 User changed the Weight Unit
45
- * 9028 User changed the Dimensions Unit
46
- * 9029 User changed the Base Location
47
- * 9030 User Enabled/Disabled taxes
48
- * 9031 User changed the currency
49
- * 9032 User Enabled/Disabled the use of coupons during checkout
50
- * 9033 User Enabled/Disabled guest checkout
51
- *
52
  * @package Wsal
53
- * @subpackage Sensors
54
  */
55
  class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
56
 
 
 
 
 
 
 
 
57
  /**
58
  * Old Post.
59
  *
@@ -61,6 +33,13 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
61
  */
62
  protected $_old_post = null;
63
 
 
 
 
 
 
 
 
64
  /**
65
  * Old Post Link.
66
  *
@@ -83,32 +62,11 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
83
  protected $_old_data = null;
84
 
85
  /**
86
- * Old Product Stock Quantity.
87
- *
88
- * @var int
89
- */
90
- protected $_old_stock = null;
91
-
92
- /**
93
- * Old Product Stock Status.
94
- *
95
- * @var string
96
- */
97
- protected $_old_stock_status = null;
98
-
99
- /**
100
- * Old Product File Names.
101
  *
102
  * @var array
103
  */
104
- protected $_old_file_names = array();
105
-
106
- /**
107
- * Old Product File URLs.
108
- *
109
- * @var array
110
- */
111
- protected $_old_file_urls = array();
112
 
113
  /**
114
  * Old Attribute Data.
@@ -147,6 +105,15 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
147
  'customer_email',
148
  );
149
 
 
 
 
 
 
 
 
 
 
150
  /**
151
  * Is Event 9067 Logged?
152
  *
@@ -170,9 +137,10 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
170
  */
171
  public function HookEvents() {
172
  if ( current_user_can( 'edit_posts' ) ) {
173
- add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
174
  }
175
- add_action( 'post_updated', array( $this, 'EventChanged' ), 10, 3 );
 
176
  add_action( 'delete_post', array( $this, 'EventDeleted' ), 10, 1 );
177
  add_action( 'wp_trash_post', array( $this, 'EventTrashed' ), 10, 1 );
178
  add_action( 'untrash_post', array( $this, 'EventUntrashed' ) );
@@ -191,14 +159,15 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
191
  add_action( 'wsal_before_post_meta_create_event', array( $this, 'log_coupon_meta_created_event' ), 10, 4 );
192
  add_action( 'wsal_before_post_meta_update_event', array( $this, 'log_coupon_meta_update_events' ), 10, 5 );
193
  add_action( 'wsal_before_post_meta_delete_event', array( $this, 'log_coupon_meta_delete_event' ), 10, 4 );
 
 
 
194
  }
195
 
196
  /**
197
  * Triggered when a user accesses the admin area.
198
  */
199
- public function EventAdminInit() {
200
- // Load old data, if applicable.
201
- $this->RetrieveOldData();
202
  $this->CheckSettingsChange();
203
  $this->retrieve_attribute_data();
204
  $this->check_wc_ajax_change_events();
@@ -207,37 +176,90 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
207
  /**
208
  * Retrieve Old data.
209
  *
210
- * @global mixed $_POST post data
211
  */
212
- protected function RetrieveOldData() {
213
- // Filter POST global array.
214
- $post_array = filter_input_array( INPUT_POST );
215
 
216
- if ( isset( $post_array['post_ID'] )
217
- && isset( $post_array['_wpnonce'] )
218
- && ! wp_verify_nonce( $post_array['_wpnonce'], 'update-post_' . $post_array['post_ID'] ) ) {
219
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  }
221
 
222
- if ( isset( $post_array ) && isset( $post_array['post_ID'] )
223
- && ! ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
224
- && ! ( isset( $post_array['action'] ) && 'autosave' == $post_array['action'] )
225
- ) {
226
- $post_id = intval( $post_array['post_ID'] );
227
- $this->_old_post = get_post( $post_id );
228
- $this->_old_link = get_post_permalink( $post_id, false, true );
229
- $this->_old_cats = $this->GetProductCategories( $this->_old_post );
230
- $this->_old_data = $this->GetProductData( $this->_old_post );
231
- $this->_old_stock = get_post_meta( $post_id, '_stock', true );
232
- $this->_old_stock_status = get_post_meta( $post_id, '_stock_status', true );
233
-
234
- $old_downloadable_files = get_post_meta( $post_id, '_downloadable_files', true );
235
- if ( ! empty( $old_downloadable_files ) ) {
236
- foreach ( $old_downloadable_files as $file ) {
237
- array_push( $this->_old_file_names, $file['name'] );
238
- array_push( $this->_old_file_urls, $file['file'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  }
240
  }
 
 
 
 
 
 
 
 
 
 
 
 
241
  }
242
  }
243
 
@@ -261,82 +283,6 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
261
  );
262
  }
263
 
264
- /**
265
- * WooCommerce Product Updated.
266
- *
267
- * @param integer $post_id - Post ID.
268
- * @param stdClass $newpost - The new post.
269
- * @param stdClass $oldpost - The old post.
270
- */
271
- public function EventChanged( $post_id, $newpost, $oldpost ) {
272
- // Global variable which returns current page.
273
- global $pagenow;
274
-
275
- // @codingStandardsIgnoreStart
276
- $wpnonce = isset( $_POST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ) : false;
277
- $post_id = isset( $_POST['post_ID'] ) ? sanitize_text_field( wp_unslash( $_POST['post_ID'] ) ) : false;
278
- // @codingStandardsIgnoreEnd
279
-
280
- if (
281
- 'post.php' === $pagenow // Check post edit page.
282
- && $this->CheckWooCommerce( $oldpost ) // Check WooCommerce CPT.
283
- && is_admin() // Check if admin.
284
- && $wpnonce && $post_id // Check post id and nonce exists.
285
- && wp_verify_nonce( $wpnonce, 'update-post_' . $post_id ) // Verify nonce.
286
- ) {
287
- $changes = 0 + $this->EventCreation( $oldpost, $newpost );
288
- if ( ! $changes ) {
289
- // Change Categories.
290
- $changes = $this->CheckCategoriesChange( $this->_old_cats, $this->GetProductCategories( $newpost ), $oldpost, $newpost );
291
- }
292
- if ( ! $changes ) {
293
- // Change Short description, Text, URL, Product Data, Date, Visibility, etc.
294
- $changes = 0
295
- + $this->CheckShortDescriptionChange( $oldpost, $newpost )
296
- + $this->CheckTextChange( $oldpost, $newpost )
297
- + $this->CheckProductDataChange( $this->_old_data, $newpost )
298
- + $this->CheckDateChange( $oldpost, $newpost )
299
- + $this->CheckVisibilityChange( $oldpost )
300
- + $this->check_catalog_visibility_change( $oldpost )
301
- + $this->check_featured_product( $oldpost )
302
- + $this->CheckStatusChange( $oldpost, $newpost )
303
- + $this->CheckPriceChange( $oldpost )
304
- + $this->CheckSKUChange( $oldpost )
305
- + $this->CheckStockStatusChange( $oldpost )
306
- + $this->CheckStockQuantityChange( $oldpost )
307
- + $this->CheckTypeChange( $oldpost, $newpost )
308
- + $this->CheckWeightChange( $oldpost )
309
- + $this->CheckDimensionsChange( $oldpost )
310
- + $this->CheckDownloadableFileChange( $oldpost )
311
- + $this->check_backorders_setting( $oldpost )
312
- + $this->check_upsells_change( $oldpost )
313
- + $this->check_cross_sell_change( $oldpost )
314
- + $this->check_attributes_change( $oldpost )
315
- + $this->check_title_change( $oldpost, $newpost );
316
- }
317
- if ( ! $changes ) {
318
- // Change Permalink.
319
- $changes = $this->CheckPermalinkChange( $this->_old_link, get_post_permalink( $post_id, false, true ), $newpost );
320
- if ( ! $changes ) {
321
- // If no one of the above changes happen.
322
- $this->CheckModifyChange( $oldpost, $newpost );
323
- }
324
- }
325
- } elseif ( 'post.php' === $pagenow && 'shop_order' === $oldpost->post_type && is_admin() ) {
326
- // Check order events.
327
- $this->check_order_modify_change( $post_id, $oldpost, $newpost );
328
- } elseif ( 'post.php' === $pagenow && 'shop_coupon' === $oldpost->post_type && is_admin() ) {
329
- // Check coupon events.
330
- $changes = 0 + $this->EventCreation( $oldpost, $newpost );
331
-
332
- if ( ! $changes ) {
333
- $this->CheckShortDescriptionChange( $oldpost, $newpost );
334
- $this->CheckStatusChange( $oldpost, $newpost );
335
- $this->check_title_change( $oldpost, $newpost );
336
- }
337
- }
338
- }
339
-
340
  /**
341
  * WooCommerce Product/Coupon Created.
342
  *
@@ -346,40 +292,34 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
346
  * @param object $new_post - New Post.
347
  */
348
  private function EventCreation( $old_post, $new_post ) {
349
- // Original post status.
350
- $original = isset( $_POST['original_post_status'] ) ? sanitize_text_field( wp_unslash( $_POST['original_post_status'] ) ) : ''; // @codingStandardsIgnoreLine
351
-
352
- // Ignore if original or new post type is draft.
353
- if ( 'draft' === $original && 'draft' === $new_post->post_status ) {
354
- return 0;
355
  }
356
 
357
- if ( 'draft' === $old_post->post_status || 'auto-draft' === $original ) {
358
- if ( 'product' === $old_post->post_type ) {
359
- $editor_link = $this->GetEditorLink( $new_post );
360
- if ( 'draft' === $new_post->post_status ) {
361
- $this->plugin->alerts->Trigger(
362
- 9000, array(
363
- 'ProductTitle' => $new_post->post_title,
364
- $editor_link['name'] => $editor_link['value'],
365
- )
366
- );
367
- return 1;
368
- } elseif ( 'publish' === $new_post->post_status ) {
369
- $this->plugin->alerts->Trigger(
370
- 9001, array(
371
- 'ProductTitle' => $new_post->post_title,
372
- 'ProductUrl' => get_post_permalink( $new_post->ID ),
373
- $editor_link['name'] => $editor_link['value'],
374
- )
375
- );
376
- return 1;
377
- }
378
- } elseif ( 'shop_coupon' === $old_post->post_type && 'publish' === $new_post->post_status ) {
379
- $coupon_data = $this->get_coupon_event_data( $new_post );
380
- $this->plugin->alerts->Trigger( 9063, $coupon_data );
381
  return 1;
382
  }
 
 
 
 
383
  }
384
  return 0;
385
  }
@@ -418,7 +358,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
418
  $old_cats = is_array( $old_cats ) ? implode( ', ', $old_cats ) : $old_cats;
419
  $new_cats = is_array( $new_cats ) ? implode( ', ', $new_cats ) : $new_cats;
420
 
421
- if ( $old_cats != $new_cats ) {
422
  $editor_link = $this->GetEditorLink( $newpost );
423
  $this->plugin->alerts->Trigger(
424
  9003, array(
@@ -502,7 +442,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
502
  * @return int
503
  */
504
  protected function CheckPermalinkChange( $old_link, $new_link, $post ) {
505
- if ( $old_link && $new_link && ( $old_link != $new_link ) ) {
506
  $editor_link = $this->GetEditorLink( $post );
507
  $this->plugin->alerts->Trigger(
508
  9006, array(
@@ -522,28 +462,25 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
522
  /**
523
  * Trigger events 9007
524
  *
525
- * @param array $old_data - Product Data.
526
- * @param object $post - Product object.
527
  * @return int
528
  */
529
- protected function CheckProductDataChange( $old_data, $post ) {
530
- if ( isset( $_POST['product-type'] ) ) { // @codingStandardsIgnoreLine
531
- $old_data = is_array( $old_data ) ? implode( ', ', $old_data ) : $old_data;
532
- $new_data = sanitize_text_field( wp_unslash( $_POST['product-type'] ) ); // @codingStandardsIgnoreLine
533
 
534
- if ( $old_data !== $new_data ) {
535
- $editor_link = $this->GetEditorLink( $post );
536
- $this->plugin->alerts->Trigger(
537
- 9007, array(
538
- 'ProductTitle' => $post->post_title,
539
- 'ProductStatus' => $post->post_status,
540
- 'OldType' => $old_data,
541
- 'NewType' => $new_data,
542
- $editor_link['name'] => $editor_link['value'],
543
- )
544
- );
545
- return 1;
546
- }
547
  }
548
  return 0;
549
  }
@@ -563,7 +500,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
563
  $from = strtotime( $oldpost->post_date );
564
  $to = strtotime( $newpost->post_date );
565
 
566
- if ( $from != $to ) {
567
  $editor_link = $this->GetEditorLink( $oldpost );
568
  $this->plugin->alerts->Trigger(
569
  9008, array(
@@ -582,29 +519,35 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
582
  /**
583
  * Trigger events 9009
584
  *
585
- * @param object $oldpost - Old product object.
 
586
  * @return int
587
  */
588
- protected function CheckVisibilityChange( $oldpost ) {
589
- // Get visibility data.
590
- // @codingStandardsIgnoreStart
591
- $old_visibility = isset( $_POST['hidden_post_visibility'] ) ? sanitize_text_field( wp_unslash( $_POST['hidden_post_visibility'] ) ) : null;
592
- $new_visibility = isset( $_POST['visibility'] ) ? sanitize_text_field( wp_unslash( $_POST['visibility'] ) ) : null;
593
- // @codingStandardsIgnoreEnd
 
594
 
595
- if ( 'password' === $old_visibility ) {
596
  $old_visibility = __( 'Password Protected', 'wp-security-audit-log' );
597
- } else {
598
- $old_visibility = ucfirst( $old_visibility );
 
 
599
  }
600
 
601
- if ( 'password' === $new_visibility ) {
602
  $new_visibility = __( 'Password Protected', 'wp-security-audit-log' );
603
- } else {
604
- $new_visibility = ucfirst( $new_visibility );
 
 
605
  }
606
 
607
- if ( ( $old_visibility && $new_visibility ) && ( $old_visibility != $new_visibility ) ) {
608
  $editor_link = $this->GetEditorLink( $oldpost );
609
  $this->plugin->alerts->Trigger(
610
  9009, array(
@@ -674,26 +617,25 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
674
  *
675
  * @since 3.3.1
676
  *
677
- * @param object $oldpost - Old product object.
678
  * @return int
679
  */
680
- protected function check_catalog_visibility_change( $oldpost ) {
681
  // Get product data.
682
- $product_object = new WC_Product( $oldpost->ID );
683
- $old_visibility = $product_object->get_catalog_visibility();
684
- $new_visibility = isset( $_POST['_visibility'] ) ? sanitize_text_field( wp_unslash( $_POST['_visibility'] ) ) : false; // @codingStandardsIgnoreLine
685
 
686
  // Get WooCommerce visibility options.
687
- $visibility_options = wc_get_product_visibility_options();
688
 
689
  if ( ( $old_visibility && $new_visibility ) && ( $old_visibility !== $new_visibility ) ) {
690
- $editor_link = $this->GetEditorLink( $oldpost );
691
  $this->plugin->alerts->Trigger(
692
  9042, array(
693
- 'ProductTitle' => $oldpost->post_title,
694
- 'ProductStatus' => $oldpost->post_status,
695
- 'OldVisibility' => isset( $visibility_options[ $old_visibility ] ) ? $visibility_options[ $old_visibility ] : false,
696
- 'NewVisibility' => isset( $visibility_options[ $new_visibility ] ) ? $visibility_options[ $new_visibility ] : false,
697
  $editor_link['name'] => $editor_link['value'],
698
  )
699
  );
@@ -707,22 +649,20 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
707
  *
708
  * @since 3.3.1
709
  *
710
- * @param object $oldpost - Old product object.
711
  * @return int
712
  */
713
- protected function check_featured_product( $oldpost ) {
714
- // Get product data.
715
- $product_object = new WC_Product( $oldpost->ID );
716
- $old_featured = $product_object->get_featured();
717
- $new_featured = isset( $_POST['_featured'] ); // @codingStandardsIgnoreLine
718
 
719
  if ( $old_featured !== $new_featured ) {
720
- $editor_link = $this->GetEditorLink( $oldpost );
721
  $this->plugin->alerts->Trigger(
722
  9043, array(
723
- 'ProductTitle' => $oldpost->post_title,
724
- 'ProductStatus' => $oldpost->post_status,
725
- 'Status' => ( $new_featured ) ? 'Enabled' : 'Disabled',
726
  $editor_link['name'] => $editor_link['value'],
727
  )
728
  );
@@ -744,10 +684,10 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
744
  protected function check_backorders_setting( $oldpost, $old_backorder = '', $new_backorder = '' ) {
745
  // Get product data.
746
  if ( '' === $old_backorder ) {
747
- $old_backorder = get_post_meta( $oldpost->ID, '_backorders', true );
748
  }
749
  if ( '' === $new_backorder ) {
750
- $new_backorder = isset( $_POST['_backorders'] ) ? sanitize_text_field( wp_unslash( $_POST['_backorders'] ) ) : false; // @codingStandardsIgnoreLine
751
  }
752
 
753
  if ( $old_backorder !== $new_backorder ) {
@@ -776,8 +716,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
776
  */
777
  protected function check_upsells_change( $oldpost ) {
778
  // Get product data.
779
- $old_upsell_ids = get_post_meta( $oldpost->ID, '_upsell_ids', true );
780
- $new_upsell_ids = isset( $_POST['upsell_ids'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['upsell_ids'] ) ) : false; // @codingStandardsIgnoreLine
781
 
782
  // Compute the difference.
783
  $added_upsells = array();
@@ -841,8 +781,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
841
  */
842
  protected function check_cross_sell_change( $oldpost ) {
843
  // Get product data.
844
- $old_cross_sell_ids = get_post_meta( $oldpost->ID, '_crosssell_ids', true );
845
- $new_cross_sell_ids = isset( $_POST['crosssell_ids'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['crosssell_ids'] ) ) : false; // @codingStandardsIgnoreLine
846
 
847
  // Compute the difference.
848
  $added_cross_sells = array();
@@ -1094,24 +1034,21 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1094
  /**
1095
  * Trigger events 9016
1096
  *
1097
- * @param object $oldpost - Old product object.
1098
  * @return int
1099
  */
1100
- protected function CheckPriceChange( $oldpost ) {
1101
  $result = 0;
1102
- $old_price = get_post_meta( $oldpost->ID, '_regular_price', true );
1103
- $old_sale_price = get_post_meta( $oldpost->ID, '_sale_price', true );
1104
-
1105
- // @codingStandardsIgnoreStart
1106
- $new_price = isset( $_POST['_regular_price'] ) ? sanitize_text_field( wp_unslash( $_POST['_regular_price'] ) ) : null;
1107
- $new_sale_price = isset( $_POST['_sale_price'] ) ? sanitize_text_field( wp_unslash( $_POST['_sale_price'] ) ) : null;
1108
- // @codingStandardsIgnoreEnd
1109
 
1110
  if ( ( $new_price ) && ( $old_price !== $new_price ) ) {
1111
- $result = $this->EventPrice( $oldpost, 'Regular price', $old_price, $new_price );
1112
  }
1113
  if ( ( $new_sale_price ) && ( $old_sale_price !== $new_sale_price ) ) {
1114
- $result = $this->EventPrice( $oldpost, 'Sale price', $old_sale_price, $new_sale_price );
1115
  }
1116
  return $result;
1117
  }
@@ -1119,21 +1056,21 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1119
  /**
1120
  * Group the Price changes in one function
1121
  *
1122
- * @param object $oldpost - Old Product Object.
1123
  * @param string $type - Price Type.
1124
  * @param int $old_price - Old Product Price.
1125
  * @param int $new_price - New Product Price.
1126
  * @return int
1127
  */
1128
- private function EventPrice( $oldpost, $type, $old_price, $new_price ) {
1129
  $currency = $this->GetCurrencySymbol( $this->GetConfig( 'currency' ) );
1130
- $editor_link = $this->GetEditorLink( $oldpost );
1131
  $this->plugin->alerts->Trigger(
1132
  9016, array(
1133
- 'ProductTitle' => $oldpost->post_title,
1134
- 'ProductStatus' => $oldpost->post_status,
1135
  'PriceType' => $type,
1136
- 'OldPrice' => ( ! empty( $old_price ) ? $currency . $old_price : 0 ),
1137
  'NewPrice' => $currency . $new_price,
1138
  $editor_link['name'] => $editor_link['value'],
1139
  )
@@ -1151,8 +1088,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1151
  */
1152
  protected function CheckSKUChange( $oldpost, $old_sku = '', $new_sku = '' ) {
1153
  if ( '' === $old_sku && '' === $new_sku ) {
1154
- $old_sku = get_post_meta( $oldpost->ID, '_sku', true );
1155
- $new_sku = isset( $_POST['_sku'] ) ? sanitize_text_field( wp_unslash( $_POST['_sku'] ) ) : null; // @codingStandardsIgnoreLine
1156
  }
1157
 
1158
  if ( $new_sku && ( $old_sku !== $new_sku ) ) {
@@ -1161,7 +1098,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1161
  9017, array(
1162
  'ProductTitle' => $oldpost->post_title,
1163
  'ProductStatus' => $oldpost->post_status,
1164
- 'OldSku' => ( ! empty( $old_sku ) ? $old_sku : 0 ),
1165
  'NewSku' => $new_sku,
1166
  $editor_link['name'] => $editor_link['value'],
1167
  )
@@ -1181,8 +1118,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1181
  */
1182
  protected function CheckStockStatusChange( $oldpost, $old_status = '', $new_status = '' ) {
1183
  if ( '' === $old_status && '' === $new_status ) {
1184
- $old_status = $this->_old_stock_status;
1185
- $new_status = isset( $_POST['_stock_status'] ) ? sanitize_text_field( wp_unslash( $_POST['_stock_status'] ) ) : null; // @codingStandardsIgnoreLine
1186
  }
1187
 
1188
  if ( ( $old_status && $new_status ) && ( $old_status !== $new_status ) ) {
@@ -1211,8 +1148,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1211
  */
1212
  protected function CheckStockQuantityChange( $oldpost, $old_value = false, $new_value = false ) {
1213
  if ( false === $old_value && false === $new_value ) {
1214
- $old_value = (int) get_post_meta( $oldpost->ID, '_stock', true );
1215
- $new_value = isset( $_POST['_stock'] ) ? (int) sanitize_text_field( wp_unslash( $_POST['_stock'] ) ) : null; // @codingStandardsIgnoreLine
1216
  }
1217
 
1218
  if ( $new_value && ( $old_value !== $new_value ) ) {
@@ -1257,8 +1194,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1257
 
1258
  // Get simple product virtual data.
1259
  if ( false === $virtual ) {
1260
- $old_virtual = get_post_meta( $oldpost->ID, '_virtual', true );
1261
- $new_virtual = isset( $_POST['_virtual'] ) ? 'yes' : 'no'; // @codingStandardsIgnoreLine
1262
  } elseif ( is_array( $virtual ) ) {
1263
  $old_virtual = ( isset( $virtual['old'] ) && $virtual['old'] ) ? 'yes' : 'no';
1264
  $new_virtual = ( isset( $virtual['new'] ) && $virtual['new'] ) ? 'yes' : 'no';
@@ -1266,8 +1203,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1266
 
1267
  // Get simple product downloadable data.
1268
  if ( false === $download ) {
1269
- $old_download = get_post_meta( $oldpost->ID, '_downloadable', true );
1270
- $new_download = isset( $_POST['_downloadable'] ) ? 'yes' : 'no'; // @codingStandardsIgnoreLine
1271
  } elseif ( is_array( $download ) ) {
1272
  $old_download = ( isset( $download['old'] ) && $download['old'] ) ? 'yes' : 'no';
1273
  $new_download = ( isset( $download['new'] ) && $download['new'] ) ? 'yes' : 'no';
@@ -1337,8 +1274,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1337
  */
1338
  protected function CheckWeightChange( $oldpost, $old_weight = '', $new_weight = '' ) {
1339
  if ( '' === $old_weight && '' === $new_weight ) {
1340
- $old_weight = get_post_meta( $oldpost->ID, '_weight', true );
1341
- $new_weight = isset( $_POST['_weight'] ) ? sanitize_text_field( wp_unslash( $_POST['_weight'] ) ) : null; // @codingStandardsIgnoreLine
1342
  }
1343
 
1344
  if ( $new_weight && ( $old_weight !== $new_weight ) ) {
@@ -1380,8 +1317,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1380
 
1381
  // Length.
1382
  if ( false === $length ) {
1383
- $old_length = get_post_meta( $oldpost->ID, '_length', true );
1384
- $new_length = isset( $_POST['_length'] ) ? sanitize_text_field( wp_unslash( $_POST['_length'] ) ) : null; // @codingStandardsIgnoreLine
1385
  } elseif ( is_array( $length ) ) {
1386
  $old_length = isset( $length['old'] ) ? $length['old'] : false;
1387
  $new_length = isset( $length['new'] ) ? $length['new'] : false;
@@ -1389,8 +1326,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1389
 
1390
  // Width.
1391
  if ( false === $width ) {
1392
- $old_width = get_post_meta( $oldpost->ID, '_width', true );
1393
- $new_width = isset( $_POST['_width'] ) ? sanitize_text_field( wp_unslash( $_POST['_width'] ) ) : null; // @codingStandardsIgnoreLine
1394
  } elseif ( is_array( $width ) ) {
1395
  $old_width = isset( $width['old'] ) ? $width['old'] : false;
1396
  $new_width = isset( $width['new'] ) ? $width['new'] : false;
@@ -1398,8 +1335,8 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1398
 
1399
  // Height.
1400
  if ( false === $height ) {
1401
- $old_height = get_post_meta( $oldpost->ID, '_height', true );
1402
- $new_height = isset( $_POST['_height'] ) ? sanitize_text_field( wp_unslash( $_POST['_height'] ) ) : null; // @codingStandardsIgnoreLine
1403
  } elseif ( is_array( $height ) ) {
1404
  $old_height = isset( $height['old'] ) ? $height['old'] : false;
1405
  $new_height = isset( $height['new'] ) ? $height['new'] : false;
@@ -1452,31 +1389,34 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1452
  */
1453
  protected function CheckDownloadableFileChange( $oldpost, $file_names = false, $file_urls = false ) {
1454
  // Get product data.
1455
- $result = 0;
1456
- $is_url_changed = false;
1457
- $is_name_changed = false;
1458
- $editor_link = $this->GetEditorLink( $oldpost );
1459
 
1460
  if ( false === $file_names ) {
1461
- $new_file_names = ! empty( $_POST['_wc_file_names'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['_wc_file_names'] ) ) : array(); // @codingStandardsIgnoreLine
 
1462
  } else {
1463
- $new_file_names = $file_names;
 
1464
  }
1465
 
1466
  if ( false === $file_urls ) {
1467
- $new_file_urls = ! empty( $_POST['_wc_file_urls'] ) ? array_map( 'esc_url_raw', wp_unslash( $_POST['_wc_file_urls'] ) ) : array(); // @codingStandardsIgnoreLine
 
1468
  } else {
1469
- $new_file_urls = $file_urls;
 
1470
  }
1471
 
1472
- $added_urls = array_diff( $new_file_urls, $this->_old_file_urls );
1473
- $removed_urls = array_diff( $this->_old_file_urls, $new_file_urls );
1474
- $added_names = array_diff( $new_file_names, $this->_old_file_names );
1475
 
1476
  // Added files to the product.
1477
  if ( count( $added_urls ) > 0 ) {
1478
  // If the file has only changed URL.
1479
- if ( count( $new_file_urls ) === count( $this->_old_file_urls ) ) {
1480
  $is_url_changed = true;
1481
  } else {
1482
  foreach ( $added_urls as $key => $url ) {
@@ -1497,7 +1437,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1497
  // Removed files from the product.
1498
  if ( count( $removed_urls ) > 0 ) {
1499
  // If the file has only changed URL.
1500
- if ( count( $new_file_urls ) === count( $this->_old_file_urls ) ) {
1501
  $is_url_changed = true;
1502
  } else {
1503
  foreach ( $removed_urls as $key => $url ) {
@@ -1505,7 +1445,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1505
  9024, array(
1506
  'ProductTitle' => $oldpost->post_title,
1507
  'ProductStatus' => $oldpost->post_status,
1508
- 'FileName' => $this->_old_file_names[ $key ],
1509
  'FileUrl' => $url,
1510
  $editor_link['name'] => $editor_link['value'],
1511
  )
@@ -1517,13 +1457,13 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1517
 
1518
  if ( count( $added_names ) > 0 ) {
1519
  // If the file has only changed Name.
1520
- if ( count( $new_file_names ) === count( $this->_old_file_names ) ) {
1521
  foreach ( $added_names as $key => $name ) {
1522
  $this->plugin->alerts->Trigger(
1523
  9025, array(
1524
  'ProductTitle' => $oldpost->post_title,
1525
  'ProductStatus' => $oldpost->post_status,
1526
- 'OldName' => $this->_old_file_names[ $key ],
1527
  'NewName' => $name,
1528
  $editor_link['name'] => $editor_link['value'],
1529
  )
@@ -1721,7 +1661,7 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1721
  if ( $old_tax_round !== $new_tax_round ) {
1722
  $this->plugin->alerts->Trigger( 9081, array( 'Status' => 'yes' === $new_tax_round ? 'Enabled' : 'Disabled' ) );
1723
  }
1724
- } else {
1725
  // "Enable Coupon" event.
1726
  $old_enable_coupons = $this->GetConfig( 'enable_coupons' );
1727
  $new_enable_coupons = isset( $_POST['woocommerce_enable_coupons'] ) ? 'yes' : 'no';
@@ -1826,7 +1766,6 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1826
  if ( ! $zone_id && isset( $_POST['changes']['zone_name'] ) ) {
1827
  // Get zone details.
1828
  $zone_name = sanitize_text_field( wp_unslash( $_POST['changes']['zone_name'] ) );
1829
-
1830
  $this->plugin->alerts->Trigger(
1831
  9082, array(
1832
  'ShippingZoneStatus' => 'Added',
@@ -1896,17 +1835,61 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1896
  }
1897
 
1898
  /**
1899
- * Return: Product Data.
1900
- *
1901
- * @param object $post - Product post object.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1902
  * @return array
1903
  */
1904
- protected function GetProductData( $post ) {
1905
- return wp_get_post_terms(
1906
- $post->ID, 'product_type', array(
1907
- 'fields' => 'names',
1908
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1909
  );
 
 
 
 
 
 
1910
  }
1911
 
1912
  /**
@@ -2231,17 +2214,19 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
2231
  *
2232
  * @since 3.3.1
2233
  *
2234
- * @param int|WC_Order $order - Order id or WC Order object.
2235
  * @return string
2236
  */
2237
- private function get_order_title( $order ) {
2238
- if ( ! $order ) {
2239
  return false;
2240
  }
2241
- if ( is_int( $order ) ) {
2242
- $order = new WC_Order( $order );
 
 
2243
  }
2244
- if ( ! $order instanceof WC_Order ) {
2245
  return false;
2246
  }
2247
 
@@ -2837,18 +2822,17 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
2837
  $this->CheckDimensionsChange( $product, $length, $width, $height );
2838
 
2839
  // Check product downloads change.
2840
- $new_file_names = isset( $data['_wc_variation_file_names'][ $post_id ] ) ? array_map( 'sanitize_text_field', wp_unslash( $data['_wc_variation_file_names'][ $post_id ] ) ) : false;
2841
- $new_file_urls = isset( $data['_wc_variation_file_urls'][ $post_id ] ) ? array_map( 'esc_url_raw', wp_unslash( $data['_wc_variation_file_urls'][ $post_id ] ) ) : false;
2842
- $wc_downloads = $variation->get_downloads();
 
2843
 
2844
  // Set product old downloads data.
2845
- if ( empty( $this->_old_file_names ) && empty( $this->_old_file_urls ) ) {
2846
- foreach ( $wc_downloads as $download ) {
2847
- array_push( $this->_old_file_names, $download->get_name() );
2848
- array_push( $this->_old_file_urls, $download->get_file() );
2849
- }
2850
  }
2851
- $this->CheckDownloadableFileChange( $product, $new_file_names, $new_file_urls );
2852
 
2853
  // Check backorders change.
2854
  $old_backorder = $variation->get_backorders();
@@ -3175,4 +3159,111 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
3175
  }
3176
  return $log_event;
3177
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3178
  }
15
  /**
16
  * Support for WooCommerce Plugin.
17
  *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  * @package Wsal
 
19
  */
20
  class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
21
 
22
+ /**
23
+ * WooCommerce Product Object.
24
+ *
25
+ * @var WC_Product
26
+ */
27
+ private $old_product = null;
28
+
29
  /**
30
  * Old Post.
31
  *
33
  */
34
  protected $_old_post = null;
35
 
36
+ /**
37
+ * Old Status.
38
+ *
39
+ * @var string
40
+ */
41
+ protected $old_status = null;
42
+
43
  /**
44
  * Old Post Link.
45
  *
62
  protected $_old_data = null;
63
 
64
  /**
65
+ * New Product Data.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  *
67
  * @var array
68
  */
69
+ private $new_data = null;
 
 
 
 
 
 
 
70
 
71
  /**
72
  * Old Attribute Data.
105
  'customer_email',
106
  );
107
 
108
+ /**
109
+ * WC User Meta.
110
+ *
111
+ * @since 3.4
112
+ *
113
+ * @var array
114
+ */
115
+ private $wc_user_meta = array();
116
+
117
  /**
118
  * Is Event 9067 Logged?
119
  *
137
  */
138
  public function HookEvents() {
139
  if ( current_user_can( 'edit_posts' ) ) {
140
+ add_action( 'admin_init', array( $this, 'event_admin_init' ) );
141
  }
142
+ add_action( 'pre_post_update', array( $this, 'get_before_post_edit_data' ), 10, 2 );
143
+ add_action( 'save_post', array( $this, 'EventChanged' ), 10, 3 );
144
  add_action( 'delete_post', array( $this, 'EventDeleted' ), 10, 1 );
145
  add_action( 'wp_trash_post', array( $this, 'EventTrashed' ), 10, 1 );
146
  add_action( 'untrash_post', array( $this, 'EventUntrashed' ) );
159
  add_action( 'wsal_before_post_meta_create_event', array( $this, 'log_coupon_meta_created_event' ), 10, 4 );
160
  add_action( 'wsal_before_post_meta_update_event', array( $this, 'log_coupon_meta_update_events' ), 10, 5 );
161
  add_action( 'wsal_before_post_meta_delete_event', array( $this, 'log_coupon_meta_delete_event' ), 10, 4 );
162
+ add_action( 'update_user_meta', array( $this, 'before_wc_user_meta_update' ), 10, 3 );
163
+ add_action( 'added_user_meta', array( $this, 'wc_user_meta_updated' ), 10, 4 );
164
+ add_action( 'updated_user_meta', array( $this, 'wc_user_meta_updated' ), 10, 4 );
165
  }
166
 
167
  /**
168
  * Triggered when a user accesses the admin area.
169
  */
170
+ public function event_admin_init() {
 
 
171
  $this->CheckSettingsChange();
172
  $this->retrieve_attribute_data();
173
  $this->check_wc_ajax_change_events();
176
  /**
177
  * Retrieve Old data.
178
  *
179
+ * @param integer $post_id - Product ID.
180
  */
181
+ public function get_before_post_edit_data( $post_id ) {
182
+ $post_id = (int) $post_id; // Making sure that the post id is integer.
183
+ $post = get_post( $post_id ); // Get post.
184
 
185
+ if ( ! empty( $post ) && $post instanceof WP_Post ) {
186
+ $this->_old_post = $post;
187
+ $this->old_product = 'product' === $post->post_type ? wc_get_product( $post->ID ) : null;
188
+ $this->old_status = $post->post_status;
189
+ $this->_old_link = get_post_permalink( $post_id, false, true );
190
+ $this->_old_cats = 'product' === $post->post_type ? $this->GetProductCategories( $this->_old_post ) : null;
191
+ $this->_old_data = 'product' === $post->post_type ? $this->GetProductData( $this->old_product ) : null;
192
+ }
193
+ }
194
+
195
+ /**
196
+ * WooCommerce Product Updated.
197
+ *
198
+ * @param integer $post_id - Post ID.
199
+ * @param WP_Post $post - WC Product CPT object.
200
+ * @param integer $update - True if product update, false if product is new.
201
+ */
202
+ public function EventChanged( $post_id, $post, $update ) {
203
+ if ( ! $update ) {
204
+ $this->EventCreation( $this->_old_post, $post );
205
+ return;
206
  }
207
 
208
+ if ( 'product' === $post->post_type ) {
209
+ if (
210
+ ( 'auto-draft' === $this->_old_post->post_status && 'draft' === $post->post_status ) // Saving draft.
211
+ || ( 'draft' === $this->_old_post->post_status && 'publish' === $post->post_status ) // Publishing post.
212
+ ) {
213
+ $this->EventCreation( $this->_old_post, $post );
214
+ } else {
215
+ // Get new woocommerce product object.
216
+ $new_product = wc_get_product( $post->ID );
217
+ $this->new_data = $this->GetProductData( $new_product );
218
+
219
+ $changes = 0;
220
+ $changes = $this->CheckCategoriesChange( $this->_old_cats, $this->GetProductCategories( $post ), $this->_old_post, $post )
221
+ + $this->CheckShortDescriptionChange( $this->_old_post, $post )
222
+ + $this->CheckTextChange( $this->_old_post, $post )
223
+ + $this->CheckDateChange( $this->_old_post, $post )
224
+ + $this->CheckVisibilityChange( $this->_old_post, $post )
225
+ + $this->CheckStatusChange( $this->_old_post, $post )
226
+ + $this->check_title_change( $this->_old_post, $post )
227
+ + $this->check_product_type_change( $this->_old_post )
228
+ + $this->check_catalog_visibility_change( $this->_old_post )
229
+ + $this->check_featured_product( $this->_old_post )
230
+ + $this->CheckPriceChange( $this->_old_post )
231
+ + $this->CheckSKUChange( $this->_old_post )
232
+ + $this->CheckStockStatusChange( $this->_old_post )
233
+ + $this->CheckStockQuantityChange( $this->_old_post )
234
+ + $this->CheckTypeChange( $this->_old_post, $post )
235
+ + $this->CheckWeightChange( $this->_old_post )
236
+ + $this->CheckDimensionsChange( $this->_old_post )
237
+ + $this->CheckDownloadableFileChange( $this->_old_post )
238
+ + $this->check_backorders_setting( $this->_old_post )
239
+ + $this->check_upsells_change( $this->_old_post )
240
+ + $this->check_cross_sell_change( $this->_old_post )
241
+ + $this->check_attributes_change( $this->_old_post );
242
+ if ( ! $changes ) {
243
+ // Change Permalink.
244
+ $changes = $this->CheckPermalinkChange( $this->_old_link, get_post_permalink( $post_id, false, true ), $post );
245
+ if ( ! $changes ) {
246
+ // If no one of the above changes happen.
247
+ $this->CheckModifyChange( $this->_old_post, $post );
248
+ }
249
  }
250
  }
251
+ } elseif ( 'shop_order' === $post->post_type ) {
252
+ // Check order events.
253
+ $this->check_order_modify_change( $post_id, $this->_old_post, $post );
254
+ } elseif ( 'shop_coupon' === $post->post_type ) {
255
+ // Check coupon events.
256
+ $changes = 0 + $this->EventCreation( $this->_old_post, $post );
257
+
258
+ if ( ! $changes ) {
259
+ $this->CheckShortDescriptionChange( $this->_old_post, $post );
260
+ $this->CheckStatusChange( $this->_old_post, $post );
261
+ $this->check_title_change( $this->_old_post, $post );
262
+ }
263
  }
264
  }
265
 
283
  );
284
  }
285
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
286
  /**
287
  * WooCommerce Product/Coupon Created.
288
  *
292
  * @param object $new_post - New Post.
293
  */
294
  private function EventCreation( $old_post, $new_post ) {
295
+ if ( ! $old_post instanceof WP_Post || ! $new_post instanceof WP_Post ) {
296
+ return;
 
 
 
 
297
  }
298
 
299
+ if ( 'product' === $old_post->post_type ) {
300
+ $editor_link = $this->GetEditorLink( $new_post );
301
+ if ( 'publish' === $new_post->post_status ) {
302
+ $this->plugin->alerts->Trigger(
303
+ 9001, array(
304
+ 'ProductTitle' => $new_post->post_title,
305
+ 'ProductUrl' => get_post_permalink( $new_post->ID ),
306
+ $editor_link['name'] => $editor_link['value'],
307
+ )
308
+ );
309
+ return 1;
310
+ } else {
311
+ $this->plugin->alerts->Trigger(
312
+ 9000, array(
313
+ 'ProductTitle' => $new_post->post_title,
314
+ $editor_link['name'] => $editor_link['value'],
315
+ )
316
+ );
 
 
 
 
 
 
317
  return 1;
318
  }
319
+ } elseif ( 'shop_coupon' === $old_post->post_type && 'publish' === $new_post->post_status ) {
320
+ $coupon_data = $this->get_coupon_event_data( $new_post );
321
+ $this->plugin->alerts->Trigger( 9063, $coupon_data );
322
+ return 1;
323
  }
324
  return 0;
325
  }
358
  $old_cats = is_array( $old_cats ) ? implode( ', ', $old_cats ) : $old_cats;
359
  $new_cats = is_array( $new_cats ) ? implode( ', ', $new_cats ) : $new_cats;
360
 
361
+ if ( $old_cats !== $new_cats ) {
362
  $editor_link = $this->GetEditorLink( $newpost );
363
  $this->plugin->alerts->Trigger(
364
  9003, array(
442
  * @return int
443
  */
444
  protected function CheckPermalinkChange( $old_link, $new_link, $post ) {
445
+ if ( $old_link && $new_link && ( $old_link !== $new_link ) ) {
446
  $editor_link = $this->GetEditorLink( $post );
447
  $this->plugin->alerts->Trigger(
448
  9006, array(
462
  /**
463
  * Trigger events 9007
464
  *
465
+ * @param WP_Post $post - Product object.
 
466
  * @return int
467
  */
468
+ protected function check_product_type_change( $post ) {
469
+ $old_type = isset( $this->_old_data['type'] ) ? $this->_old_data['type'] : false;
470
+ $new_type = isset( $this->new_data['type'] ) ? $this->new_data['type'] : false;
 
471
 
472
+ if ( $old_type !== $new_type ) {
473
+ $editor_link = $this->GetEditorLink( $post );
474
+ $this->plugin->alerts->Trigger(
475
+ 9007, array(
476
+ 'ProductTitle' => $post->post_title,
477
+ 'ProductStatus' => $post->post_status,
478
+ 'OldType' => $old_type,
479
+ 'NewType' => $new_type,
480
+ $editor_link['name'] => $editor_link['value'],
481
+ )
482
+ );
483
+ return 1;
 
484
  }
485
  return 0;
486
  }
500
  $from = strtotime( $oldpost->post_date );
501
  $to = strtotime( $newpost->post_date );
502
 
503
+ if ( $from !== $to ) {
504
  $editor_link = $this->GetEditorLink( $oldpost );
505
  $this->plugin->alerts->Trigger(
506
  9008, array(
519
  /**
520
  * Trigger events 9009
521
  *
522
+ * @param WP_Post $oldpost - Old product object.
523
+ * @param WP_Post $newpost - New product object.
524
  * @return int
525
  */
526
+ protected function CheckVisibilityChange( $oldpost, $newpost ) {
527
+ if ( 'draft' === $this->old_status || 'draft' === $newpost->post_status ) {
528
+ return;
529
+ }
530
+
531
+ $old_visibility = '';
532
+ $new_visibility = '';
533
 
534
+ if ( $oldpost->post_password ) {
535
  $old_visibility = __( 'Password Protected', 'wp-security-audit-log' );
536
+ } elseif ( 'publish' === $this->old_status ) {
537
+ $old_visibility = __( 'Public', 'wp-security-audit-log' );
538
+ } elseif ( 'private' === $this->old_status ) {
539
+ $old_visibility = __( 'Private', 'wp-security-audit-log' );
540
  }
541
 
542
+ if ( $newpost->post_password ) {
543
  $new_visibility = __( 'Password Protected', 'wp-security-audit-log' );
544
+ } elseif ( 'publish' === $newpost->post_status ) {
545
+ $new_visibility = __( 'Public', 'wp-security-audit-log' );
546
+ } elseif ( 'private' === $newpost->post_status ) {
547
+ $new_visibility = __( 'Private', 'wp-security-audit-log' );
548
  }
549
 
550
+ if ( $old_visibility && $new_visibility && ( $old_visibility !== $new_visibility ) ) {
551
  $editor_link = $this->GetEditorLink( $oldpost );
552
  $this->plugin->alerts->Trigger(
553
  9009, array(
617
  *
618
  * @since 3.3.1
619
  *
620
+ * @param WP_Post $post - Product object.
621
  * @return int
622
  */
623
+ protected function check_catalog_visibility_change( $post ) {
624
  // Get product data.
625
+ $old_visibility = isset( $this->_old_data['catalog_visibility'] ) ? $this->_old_data['catalog_visibility'] : false;
626
+ $new_visibility = isset( $this->new_data['catalog_visibility'] ) ? $this->new_data['catalog_visibility'] : false;
 
627
 
628
  // Get WooCommerce visibility options.
629
+ $wc_visibilities = wc_get_product_visibility_options();
630
 
631
  if ( ( $old_visibility && $new_visibility ) && ( $old_visibility !== $new_visibility ) ) {
632
+ $editor_link = $this->GetEditorLink( $post );
633
  $this->plugin->alerts->Trigger(
634
  9042, array(
635
+ 'ProductTitle' => $post->post_title,
636
+ 'ProductStatus' => $post->post_status,
637
+ 'OldVisibility' => isset( $wc_visibilities[ $old_visibility ] ) ? $wc_visibilities[ $old_visibility ] : false,
638
+ 'NewVisibility' => isset( $wc_visibilities[ $new_visibility ] ) ? $wc_visibilities[ $new_visibility ] : false,
639
  $editor_link['name'] => $editor_link['value'],
640
  )
641
  );
649
  *
650
  * @since 3.3.1
651
  *
652
+ * @param WP_Post $post - Product object.
653
  * @return int
654
  */
655
+ protected function check_featured_product( $post ) {
656
+ $old_featured = isset( $this->_old_data['featured'] ) ? $this->_old_data['featured'] : false;
657
+ $new_featured = isset( $this->new_data['featured'] ) ? $this->new_data['featured'] : false;
 
 
658
 
659
  if ( $old_featured !== $new_featured ) {
660
+ $editor_link = $this->GetEditorLink( $post );
661
  $this->plugin->alerts->Trigger(
662
  9043, array(
663
+ 'ProductTitle' => $post->post_title,
664
+ 'ProductStatus' => $post->post_status,
665
+ 'Status' => $new_featured ? 'Enabled' : 'Disabled',
666
  $editor_link['name'] => $editor_link['value'],
667
  )
668
  );
684
  protected function check_backorders_setting( $oldpost, $old_backorder = '', $new_backorder = '' ) {
685
  // Get product data.
686
  if ( '' === $old_backorder ) {
687
+ $old_backorder = isset( $this->_old_data['backorders'] ) ? $this->_old_data['backorders'] : false;
688
  }
689
  if ( '' === $new_backorder ) {
690
+ $new_backorder = isset( $this->new_data['backorders'] ) ? $this->new_data['backorders'] : false;
691
  }
692
 
693
  if ( $old_backorder !== $new_backorder ) {
716
  */
717
  protected function check_upsells_change( $oldpost ) {
718
  // Get product data.
719
+ $old_upsell_ids = isset( $this->_old_data['upsell_ids'] ) ? $this->_old_data['upsell_ids'] : false;
720
+ $new_upsell_ids = isset( $this->new_data['upsell_ids'] ) ? $this->new_data['upsell_ids'] : false;
721
 
722
  // Compute the difference.
723
  $added_upsells = array();
781
  */
782
  protected function check_cross_sell_change( $oldpost ) {
783
  // Get product data.
784
+ $old_cross_sell_ids = isset( $this->_old_data['cross_sell_ids'] ) ? $this->_old_data['cross_sell_ids'] : false;
785
+ $new_cross_sell_ids = isset( $this->new_data['cross_sell_ids'] ) ? $this->new_data['cross_sell_ids'] : false;
786
 
787
  // Compute the difference.
788
  $added_cross_sells = array();
1034
  /**
1035
  * Trigger events 9016
1036
  *
1037
+ * @param WP_Post $post - Product object.
1038
  * @return int
1039
  */
1040
+ protected function CheckPriceChange( $post ) {
1041
  $result = 0;
1042
+ $old_price = isset( $this->_old_data['regular_price'] ) ? $this->_old_data['regular_price'] : false;
1043
+ $old_sale_price = isset( $this->_old_data['sale_price'] ) ? $this->_old_data['sale_price'] : false;
1044
+ $new_price = isset( $this->new_data['regular_price'] ) ? $this->new_data['regular_price'] : false;
1045
+ $new_sale_price = isset( $this->new_data['sale_price'] ) ? $this->new_data['sale_price'] : false;
 
 
 
1046
 
1047
  if ( ( $new_price ) && ( $old_price !== $new_price ) ) {
1048
+ $result = $this->EventPrice( $post, 'Regular price', $old_price, $new_price );
1049
  }
1050
  if ( ( $new_sale_price ) && ( $old_sale_price !== $new_sale_price ) ) {
1051
+ $result = $this->EventPrice( $post, 'Sale price', $old_sale_price, $new_sale_price );
1052
  }
1053
  return $result;
1054
  }
1056
  /**
1057
  * Group the Price changes in one function
1058
  *
1059
+ * @param object $post - Old Product Object.
1060
  * @param string $type - Price Type.
1061
  * @param int $old_price - Old Product Price.
1062
  * @param int $new_price - New Product Price.
1063
  * @return int
1064
  */
1065
+ private function EventPrice( $post, $type, $old_price, $new_price ) {
1066
  $currency = $this->GetCurrencySymbol( $this->GetConfig( 'currency' ) );
1067
+ $editor_link = $this->GetEditorLink( $post );
1068
  $this->plugin->alerts->Trigger(
1069
  9016, array(
1070
+ 'ProductTitle' => $post->post_title,
1071
+ 'ProductStatus' => $post->post_status,
1072
  'PriceType' => $type,
1073
+ 'OldPrice' => ! empty( $old_price ) ? $currency . $old_price : 0,
1074
  'NewPrice' => $currency . $new_price,
1075
  $editor_link['name'] => $editor_link['value'],
1076
  )
1088
  */
1089
  protected function CheckSKUChange( $oldpost, $old_sku = '', $new_sku = '' ) {
1090
  if ( '' === $old_sku && '' === $new_sku ) {
1091
+ $old_sku = isset( $this->_old_data['sku'] ) ? $this->_old_data['sku'] : false;
1092
+ $new_sku = isset( $this->new_data['sku'] ) ? $this->new_data['sku'] : false;
1093
  }
1094
 
1095
  if ( $new_sku && ( $old_sku !== $new_sku ) ) {
1098
  9017, array(
1099
  'ProductTitle' => $oldpost->post_title,
1100
  'ProductStatus' => $oldpost->post_status,
1101
+ 'OldSku' => ! empty( $old_sku ) ? $old_sku : 0,
1102
  'NewSku' => $new_sku,
1103
  $editor_link['name'] => $editor_link['value'],
1104
  )
1118
  */
1119
  protected function CheckStockStatusChange( $oldpost, $old_status = '', $new_status = '' ) {
1120
  if ( '' === $old_status && '' === $new_status ) {
1121
+ $old_status = isset( $this->_old_data['stock_status'] ) ? $this->_old_data['stock_status'] : false;
1122
+ $new_status = isset( $this->new_data['stock_status'] ) ? $this->new_data['stock_status'] : false;
1123
  }
1124
 
1125
  if ( ( $old_status && $new_status ) && ( $old_status !== $new_status ) ) {
1148
  */
1149
  protected function CheckStockQuantityChange( $oldpost, $old_value = false, $new_value = false ) {
1150
  if ( false === $old_value && false === $new_value ) {
1151
+ $old_value = isset( $this->_old_data['stock_quantity'] ) ? $this->_old_data['stock_quantity'] : false;
1152
+ $new_value = isset( $this->new_data['stock_quantity'] ) ? $this->new_data['stock_quantity'] : false;
1153
  }
1154
 
1155
  if ( $new_value && ( $old_value !== $new_value ) ) {
1194
 
1195
  // Get simple product virtual data.
1196
  if ( false === $virtual ) {
1197
+ $old_virtual = isset( $this->_old_data['virtual'] ) ? $this->_old_data['virtual'] : false;
1198
+ $new_virtual = isset( $this->new_data['virtual'] ) ? $this->new_data['virtual'] : false;
1199
  } elseif ( is_array( $virtual ) ) {
1200
  $old_virtual = ( isset( $virtual['old'] ) && $virtual['old'] ) ? 'yes' : 'no';
1201
  $new_virtual = ( isset( $virtual['new'] ) && $virtual['new'] ) ? 'yes' : 'no';
1203
 
1204
  // Get simple product downloadable data.
1205
  if ( false === $download ) {
1206
+ $old_download = isset( $this->_old_data['downloadable'] ) ? $this->_old_data['downloadable'] : false;
1207
+ $new_download = isset( $this->new_data['downloadable'] ) ? $this->new_data['downloadable'] : false;
1208
  } elseif ( is_array( $download ) ) {
1209
  $old_download = ( isset( $download['old'] ) && $download['old'] ) ? 'yes' : 'no';
1210
  $new_download = ( isset( $download['new'] ) && $download['new'] ) ? 'yes' : 'no';
1274
  */
1275
  protected function CheckWeightChange( $oldpost, $old_weight = '', $new_weight = '' ) {
1276
  if ( '' === $old_weight && '' === $new_weight ) {
1277
+ $old_weight = isset( $this->_old_data['weight'] ) ? $this->_old_data['weight'] : false;
1278
+ $new_weight = isset( $this->new_data['weight'] ) ? $this->new_data['weight'] : false;
1279
  }
1280
 
1281
  if ( $new_weight && ( $old_weight !== $new_weight ) ) {
1317
 
1318
  // Length.
1319
  if ( false === $length ) {
1320
+ $old_length = isset( $this->_old_data['length'] ) ? $this->_old_data['length'] : false;
1321
+ $new_length = isset( $this->new_data['length'] ) ? $this->new_data['length'] : false;
1322
  } elseif ( is_array( $length ) ) {
1323
  $old_length = isset( $length['old'] ) ? $length['old'] : false;
1324
  $new_length = isset( $length['new'] ) ? $length['new'] : false;
1326
 
1327
  // Width.
1328
  if ( false === $width ) {
1329
+ $old_width = isset( $this->_old_data['width'] ) ? $this->_old_data['width'] : false;
1330
+ $new_width = isset( $this->new_data['width'] ) ? $this->new_data['width'] : false;
1331
  } elseif ( is_array( $width ) ) {
1332
  $old_width = isset( $width['old'] ) ? $width['old'] : false;
1333
  $new_width = isset( $width['new'] ) ? $width['new'] : false;
1335
 
1336
  // Height.
1337
  if ( false === $height ) {
1338
+ $old_height = isset( $this->_old_data['height'] ) ? $this->_old_data['height'] : false;
1339
+ $new_height = isset( $this->new_data['height'] ) ? $this->new_data['height'] : false;
1340
  } elseif ( is_array( $height ) ) {
1341
  $old_height = isset( $height['old'] ) ? $height['old'] : false;
1342
  $new_height = isset( $height['new'] ) ? $height['new'] : false;
1389
  */
1390
  protected function CheckDownloadableFileChange( $oldpost, $file_names = false, $file_urls = false ) {
1391
  // Get product data.
1392
+ $result = 0;
1393
+ $is_url_changed = false;
1394
+ $editor_link = $this->GetEditorLink( $oldpost );
 
1395
 
1396
  if ( false === $file_names ) {
1397
+ $old_file_names = isset( $this->_old_data['file_names'] ) ? $this->_old_data['file_names'] : array();
1398
+ $new_file_names = isset( $this->new_data['file_names'] ) ? $this->new_data['file_names'] : array();
1399
  } else {
1400
+ $old_file_names = isset( $file_names['old'] ) ? $file_names['old'] : array();
1401
+ $new_file_names = isset( $file_names['new'] ) ? $file_names['new'] : array();
1402
  }
1403
 
1404
  if ( false === $file_urls ) {
1405
+ $old_file_urls = isset( $this->_old_data['file_urls'] ) ? $this->_old_data['file_urls'] : array();
1406
+ $new_file_urls = isset( $this->new_data['file_urls'] ) ? $this->new_data['file_urls'] : array();
1407
  } else {
1408
+ $old_file_urls = isset( $file_urls['old'] ) ? $file_urls['old'] : array();
1409
+ $new_file_urls = isset( $file_urls['new'] ) ? $file_urls['new'] : array();
1410
  }
1411
 
1412
+ $added_urls = array_diff( $new_file_urls, $old_file_urls );
1413
+ $removed_urls = array_diff( $old_file_urls, $new_file_urls );
1414
+ $added_names = array_diff( $new_file_names, $old_file_names );
1415
 
1416
  // Added files to the product.
1417
  if ( count( $added_urls ) > 0 ) {
1418
  // If the file has only changed URL.
1419
+ if ( count( $new_file_urls ) === count( $old_file_urls ) ) {
1420
  $is_url_changed = true;
1421
  } else {
1422
  foreach ( $added_urls as $key => $url ) {
1437
  // Removed files from the product.
1438
  if ( count( $removed_urls ) > 0 ) {
1439
  // If the file has only changed URL.
1440
+ if ( count( $new_file_urls ) === count( $old_file_urls ) ) {
1441
  $is_url_changed = true;
1442
  } else {
1443
  foreach ( $removed_urls as $key => $url ) {
1445
  9024, array(
1446
  'ProductTitle' => $oldpost->post_title,
1447
  'ProductStatus' => $oldpost->post_status,
1448
+ 'FileName' => $old_file_names[ $key ],
1449
  'FileUrl' => $url,
1450
  $editor_link['name'] => $editor_link['value'],
1451
  )
1457
 
1458
  if ( count( $added_names ) > 0 ) {
1459
  // If the file has only changed Name.
1460
+ if ( count( $new_file_names ) === count( $old_file_names ) ) {
1461
  foreach ( $added_names as $key => $name ) {
1462
  $this->plugin->alerts->Trigger(
1463
  9025, array(
1464
  'ProductTitle' => $oldpost->post_title,
1465
  'ProductStatus' => $oldpost->post_status,
1466
+ 'OldName' => $old_file_names[ $key ],
1467
  'NewName' => $name,
1468
  $editor_link['name'] => $editor_link['value'],
1469
  )
1661
  if ( $old_tax_round !== $new_tax_round ) {
1662
  $this->plugin->alerts->Trigger( 9081, array( 'Status' => 'yes' === $new_tax_round ? 'Enabled' : 'Disabled' ) );
1663
  }
1664
+ } elseif ( empty( $_GET['tab'] ) || 'general' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) {
1665
  // "Enable Coupon" event.
1666
  $old_enable_coupons = $this->GetConfig( 'enable_coupons' );
1667
  $new_enable_coupons = isset( $_POST['woocommerce_enable_coupons'] ) ? 'yes' : 'no';
1766
  if ( ! $zone_id && isset( $_POST['changes']['zone_name'] ) ) {
1767
  // Get zone details.
1768
  $zone_name = sanitize_text_field( wp_unslash( $_POST['changes']['zone_name'] ) );
 
1769
  $this->plugin->alerts->Trigger(
1770
  9082, array(
1771
  'ShippingZoneStatus' => 'Added',
1835
  }
1836
 
1837
  /**
1838
+ * Returns Product Data.
1839
+ *
1840
+ * Returns an array containing only WooCommerce product specific data.
1841
+ * This array contains the following data:
1842
+ * 1. Product type.
1843
+ * 2. Catalog visibility.
1844
+ * 3. Featured product.
1845
+ * 4. Regular price.
1846
+ * 5. Sale price.
1847
+ * 6. SKU.
1848
+ * 7. Stock status.
1849
+ * 8. stock quantity.
1850
+ * 9. Virtual.
1851
+ * 10. Downloadable.
1852
+ * 11. Weight.
1853
+ * 12. Length.
1854
+ * 13. Width.
1855
+ * 14. Height.
1856
+ * 15. Backorders.
1857
+ * 16. Upsell IDs.
1858
+ * 17. Cross sell IDs.
1859
+ * 18. File names.
1860
+ * 19. File URLs.
1861
+ *
1862
+ * @param WC_Product $product - Product post object.
1863
  * @return array
1864
  */
1865
+ protected function GetProductData( $product ) {
1866
+ $product_data = array(
1867
+ 'type' => $product->get_type(),
1868
+ 'catalog_visibility' => $product->get_catalog_visibility(),
1869
+ 'featured' => $product->get_featured(),
1870
+ 'regular_price' => $product->get_regular_price(),
1871
+ 'sale_price' => $product->get_sale_price(),
1872
+ 'sku' => $product->get_sku(),
1873
+ 'stock_status' => $product->get_stock_status(),
1874
+ 'stock_quantity' => $product->get_stock_quantity(),
1875
+ 'virtual' => $product->is_virtual() ? 'yes' : 'no',
1876
+ 'downloadable' => $product->is_downloadable() ? 'yes' : 'no',
1877
+ 'weight' => $product->get_weight(),
1878
+ 'length' => $product->get_length(),
1879
+ 'width' => $product->get_width(),
1880
+ 'height' => $product->get_height(),
1881
+ 'backorders' => $product->get_backorders(),
1882
+ 'upsell_ids' => $product->get_upsell_ids(),
1883
+ 'cross_sell_ids' => $product->get_cross_sell_ids(),
1884
+ 'file_names' => array(),
1885
+ 'file_urls' => array(),
1886
  );
1887
+
1888
+ foreach ( $product->get_downloads() as $download ) {
1889
+ array_push( $product_data['file_names'], $download->get_name() );
1890
+ array_push( $product_data['file_urls'], $download->get_file() );
1891
+ }
1892
+ return $product_data;
1893
  }
1894
 
1895
  /**
2214
  *
2215
  * @since 3.3.1
2216
  *
2217
+ * @param int|WC_Order $order_id - Order id or WC Order object.
2218
  * @return string
2219
  */
2220
+ private function get_order_title( $order_id ) {
2221
+ if ( ! $order_id ) {
2222
  return false;
2223
  }
2224
+ if ( is_a( $order_id, 'WC_Order' ) ) {
2225
+ $order = $order_id;
2226
+ } else {
2227
+ $order = wc_get_order( $order_id );
2228
  }
2229
+ if ( ! $order ) {
2230
  return false;
2231
  }
2232
 
2822
  $this->CheckDimensionsChange( $product, $length, $width, $height );
2823
 
2824
  // Check product downloads change.
2825
+ $file_names['new'] = isset( $data['_wc_variation_file_names'][ $post_id ] ) ? array_map( 'sanitize_text_field', wp_unslash( $data['_wc_variation_file_names'][ $post_id ] ) ) : array();
2826
+ $file_urls['new'] = isset( $data['_wc_variation_file_urls'][ $post_id ] ) ? array_map( 'esc_url_raw', wp_unslash( $data['_wc_variation_file_urls'][ $post_id ] ) ) : array();
2827
+ $file_names['old'] = array();
2828
+ $file_urls['old'] = array();
2829
 
2830
  // Set product old downloads data.
2831
+ foreach ( $variation->get_downloads() as $download ) {
2832
+ array_push( $file_names['old'], $download->get_name() );
2833
+ array_push( $file_urls['old'], $download->get_file() );
 
 
2834
  }
2835
+ $this->CheckDownloadableFileChange( $product, $file_names, $file_urls );
2836
 
2837
  // Check backorders change.
2838
  $old_backorder = $variation->get_backorders();
3159
  }
3160
  return $log_event;
3161
  }
3162
+
3163
+ /**
3164
+ * Get WC User Meta Data before updating.
3165
+ *
3166
+ * @since 3.4
3167
+ *
3168
+ * @param integer $meta_id - Meta id.
3169
+ * @param integer $user_id - User id.
3170
+ * @param string $meta_key - Meta key.
3171
+ */
3172
+ public function before_wc_user_meta_update( $meta_id, $user_id, $meta_key ) {
3173
+ if ( ! $this->is_woocommerce_user_meta( $meta_key ) ) {
3174
+ return;
3175
+ }
3176
+
3177
+ $this->wc_user_meta[ $meta_id ] = (object) array(
3178
+ 'key' => $meta_key,
3179
+ 'value' => get_user_meta( $user_id, $meta_key, true ),
3180
+ );
3181
+ }
3182
+
3183
+ /**
3184
+ * WC User Meta data updated.
3185
+ *
3186
+ * @since 3.4
3187
+ *
3188
+ * @param integer $meta_id - Meta id.
3189
+ * @param integer $user_id - User id.
3190
+ * @param string $meta_key - Meta key.
3191
+ * @param mixed $meta_value - Meta value.
3192
+ */
3193
+ public function wc_user_meta_updated( $meta_id, $user_id, $meta_key, $meta_value ) {
3194
+ if ( ! $this->is_woocommerce_user_meta( $meta_key ) ) {
3195
+ return;
3196
+ }
3197
+
3198
+ // Check meta creation event.
3199
+ if ( ! isset( $this->wc_user_meta[ $meta_id ] ) ) {
3200
+ $this->wc_user_meta[ $meta_id ] = (object) array( 'value' => false );
3201
+ }
3202
+
3203
+ if ( isset( $this->wc_user_meta[ $meta_id ] ) ) {
3204
+ if ( $meta_value && $this->wc_user_meta[ $meta_id ]->value !== $meta_value ) {
3205
+ // Event id.
3206
+ $event_id = false;
3207
+
3208
+ if ( false !== strpos( $meta_key, 'billing_' ) ) {
3209
+ $event_id = 9083;
3210
+ } elseif ( false !== strpos( $meta_key, 'shipping_' ) ) {
3211
+ $event_id = 9084;
3212
+ }
3213
+
3214
+ if ( $event_id ) {
3215
+ $user = get_user_by( 'ID', $user_id );
3216
+ $old_address_key = 'Old' . $this->get_key_for_event( $meta_key );
3217
+ $new_address_key = 'New' . $this->get_key_for_event( $meta_key );
3218
+ $address_field = str_replace( array( 'shipping_', 'billing_' ), '', $meta_key );
3219
+ $address_field = ucwords( str_replace( '_', ' ', $address_field ) );
3220
+
3221
+ $this->plugin->alerts->Trigger(
3222
+ $event_id, array(
3223
+ 'TargetUsername' => $user ? $user->user_login : false,
3224
+ 'AddressField' => $address_field,
3225
+ $old_address_key => $this->wc_user_meta[ $meta_id ]->value,
3226
+ $new_address_key => $meta_value,
3227
+ )
3228
+ );
3229
+ }
3230
+ }
3231
+ }
3232
+ }
3233
+
3234
+ /**
3235
+ * Check if meta key belongs to WooCommerce user meta.
3236
+ *
3237
+ * @since 3.4
3238
+ *
3239
+ * @param string $meta_key - Meta key.
3240
+ * @return boolean
3241
+ */
3242
+ private function is_woocommerce_user_meta( $meta_key ) {
3243
+ // Remove the prefix to avoid redundancy in the meta keys.
3244
+ $address_key = str_replace( array( 'shipping_', 'billing_' ), '', $meta_key );
3245
+
3246
+ // WC address meta keys without prefix.
3247
+ $meta_keys = array( 'first_name', 'last_name', 'company', 'country', 'address_1', 'address_2', 'city', 'state', 'postcode', 'phone', 'email' );
3248
+
3249
+ if ( in_array( $address_key, $meta_keys, true ) ) {
3250
+ return true;
3251
+ }
3252
+ return false;
3253
+ }
3254
+
3255
+ /**
3256
+ * Get Meta Key for Event Meta.
3257
+ *
3258
+ * @since 3.4
3259
+ *
3260
+ * @param string $meta_key - Meta key.
3261
+ * @return string
3262
+ */
3263
+ private function get_key_for_event( $meta_key ) {
3264
+ $meta_key = str_replace( '_', ' ', $meta_key );
3265
+ $meta_key = ucwords( $meta_key );
3266
+ $meta_key = str_replace( ' ', '', $meta_key );
3267
+ return $meta_key;
3268
+ }
3269
  }
classes/Settings.php CHANGED
@@ -1540,10 +1540,8 @@ class WSAL_Settings {
1540
  switch ( true ) {
1541
  case '%Message%' == $name:
1542
  return esc_html( $value );
1543
-
1544
  case '%PromoMessage%' == $name:
1545
  return '<p class="promo-alert">' . $value . '</p>';
1546
-
1547
  case '%PromoLink%' == $name:
1548
  case '%CommentLink%' == $name:
1549
  case '%CommentMsg%' == $name:
@@ -1732,10 +1730,7 @@ class WSAL_Settings {
1732
  * @return bool
1733
  */
1734
  protected function is_specific_view() {
1735
- // Filter $_GET array for security.
1736
- $get_array = filter_input_array( INPUT_GET );
1737
-
1738
- return isset( $get_array['wsal-cbid'] ) && '0' != $get_array['wsal-cbid'];
1739
  }
1740
 
1741
  /**
@@ -1746,10 +1741,7 @@ class WSAL_Settings {
1746
  * @return int
1747
  */
1748
  protected function get_specific_view() {
1749
- // Filter $_GET array for security.
1750
- $get_array = filter_input_array( INPUT_GET );
1751
-
1752
- return isset( $get_array['wsal-cbid'] ) ? (int) $get_array['wsal-cbid'] : 0;
1753
  }
1754
 
1755
  /**
1540
  switch ( true ) {
1541
  case '%Message%' == $name:
1542
  return esc_html( $value );
 
1543
  case '%PromoMessage%' == $name:
1544
  return '<p class="promo-alert">' . $value . '</p>';
 
1545
  case '%PromoLink%' == $name:
1546
  case '%CommentLink%' == $name:
1547
  case '%CommentMsg%' == $name:
1730
  * @return bool
1731
  */
1732
  protected function is_specific_view() {
1733
+ return isset( $_REQUEST['wsal-cbid'] ) && 0 !== (int) $_REQUEST['wsal-cbid']; // @codingStandardsIgnoreLine
 
 
 
1734
  }
1735
 
1736
  /**
1741
  * @return int
1742
  */
1743
  protected function get_specific_view() {
1744
+ return isset( $_REQUEST['wsal-cbid'] ) ? (int) sanitize_text_field( wp_unslash( $_REQUEST['wsal-cbid'] ) ) : 0; // @codingStandardsIgnoreLine
 
 
 
1745
  }
1746
 
1747
  /**
classes/Utilities/Emailer.php CHANGED
@@ -75,14 +75,13 @@ class WSAL_Utilities_Emailer {
75
  public static function send_email( $email_address, $subject, $content ) {
76
  // Get email adresses even when there is the Username.
77
  $email_address = self::get_emails( $email_address );
78
- $headers = "MIME-Version: 1.0\r\n";
79
 
80
  // @see: http://codex.wordpress.org/Function_Reference/wp_mail
81
  add_filter( 'wp_mail_content_type', array( __CLASS__, 'set_html_content_type' ) );
82
  add_filter( 'wp_mail_from', array( __CLASS__, 'custom_wp_mail_from' ) );
83
  add_filter( 'wp_mail_from_name', array( __CLASS__, 'custom_wp_mail_from_name' ) );
84
 
85
- $result = wp_mail( $email_address, $subject, $content, $headers );
86
 
87
  /**
88
  * Reset content-type to avoid conflicts.
75
  public static function send_email( $email_address, $subject, $content ) {
76
  // Get email adresses even when there is the Username.
77
  $email_address = self::get_emails( $email_address );
 
78
 
79
  // @see: http://codex.wordpress.org/Function_Reference/wp_mail
80
  add_filter( 'wp_mail_content_type', array( __CLASS__, 'set_html_content_type' ) );
81
  add_filter( 'wp_mail_from', array( __CLASS__, 'custom_wp_mail_from' ) );
82
  add_filter( 'wp_mail_from_name', array( __CLASS__, 'custom_wp_mail_from_name' ) );
83
 
84
+ $result = wp_mail( $email_address, $subject, $content );
85
 
86
  /**
87
  * Reset content-type to avoid conflicts.
classes/ViewManager.php CHANGED
@@ -247,12 +247,18 @@ class WSAL_ViewManager {
247
  $new_links = array();
248
  foreach ( $this->views as $view ) {
249
  if ( $view->HasPluginShortcutLink() ) {
250
- $new_links[] =
251
- '<a href="'
252
- . admin_url( 'admin.php?page=' . $view->GetSafeViewName() )
253
- . '">'
254
- . $view->GetName()
255
- . '</a>';
 
 
 
 
 
 
256
  }
257
  }
258
  return array_merge( $new_links, $old_links );
@@ -308,7 +314,7 @@ class WSAL_ViewManager {
308
  * Render header of the current view.
309
  */
310
  public function RenderViewHeader() {
311
- if ( ! ! ($view = $this->GetActiveView()) ) {
312
  $view->Header();
313
  }
314
  }
@@ -317,7 +323,7 @@ class WSAL_ViewManager {
317
  * Render footer of the current view.
318
  */
319
  public function RenderViewFooter() {
320
- if ( ! ! ($view = $this->GetActiveView()) ) {
321
  $view->Footer();
322
  }
323
  }
@@ -439,4 +445,86 @@ class WSAL_ViewManager {
439
  }
440
  return $menu_order;
441
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  }
247
  $new_links = array();
248
  foreach ( $this->views as $view ) {
249
  if ( $view->HasPluginShortcutLink() ) {
250
+ $new_links[] = '<a href="' . add_query_arg( 'page', $view->GetSafeViewName(), admin_url( 'admin.php' ) ) . '">' . $view->GetName() . '</a>';
251
+
252
+ if ( 1 === count( $new_links ) && ! wsal_freemius()->is__premium_only() ) {
253
+ // Trial link arguments.
254
+ $trial_args = array(
255
+ 'page' => 'wsal-auditlog-pricing',
256
+ 'billing_cycle' => 'annual',
257
+ 'trial' => 'true',
258
+ );
259
+ $admin_url = $this->_plugin->IsMultisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' );
260
+ $new_links[] = '<a style="font-weight:bold" href="' . add_query_arg( $trial_args, $admin_url ) . '">' . __( 'Free Premium Trial', 'wp-security-audit-log' ) . '</a>';
261
+ }
262
  }
263
  }
264
  return array_merge( $new_links, $old_links );
314
  * Render header of the current view.
315
  */
316
  public function RenderViewHeader() {
317
+ if ( ! ! ( $view = $this->GetActiveView() ) ) {
318
  $view->Header();
319
  }
320
  }
323
  * Render footer of the current view.
324
  */
325
  public function RenderViewFooter() {
326
+ if ( ! ! ( $view = $this->GetActiveView() ) ) {
327
  $view->Footer();
328
  }
329
  }
445
  }
446
  return $menu_order;
447
  }
448
+
449
+ /**
450
+ * Add WSAL to WP-Admin menu bar.
451
+ *
452
+ * @since 3.2.4
453
+ *
454
+ * @param WP_Admin_Bar $admin_bar - Instance of WP_Admin_Bar.
455
+ */
456
+ public function live_notifications__premium_only( $admin_bar ) {
457
+ if ( $this->_plugin->settings->CurrentUserCan( 'view' ) && is_admin() ) {
458
+ $adn_updates = $this->_plugin->settings->get_admin_bar_notif_updates();
459
+ $event = $this->_plugin->alerts->get_admin_bar_event( 'page-refresh' === $adn_updates ? true : false );
460
+
461
+ if ( $event ) {
462
+ $code = $this->_plugin->alerts->GetAlert( $event->alert_id );
463
+ $admin_bar->add_node(
464
+ array(
465
+ 'id' => 'wsal-menu',
466
+ 'title' => 'LIVE: ' . $code->desc . ' from ' . $event->GetSourceIp(),
467
+ 'href' => add_query_arg( 'page', 'wsal-auditlog', admin_url( 'admin.php' ) ),
468
+ 'meta' => array( 'class' => 'wsal-live-notif-item' ),
469
+ )
470
+ );
471
+ }
472
+ }
473
+ }
474
+
475
+ /**
476
+ * WP-Admin bar refresh event handler.
477
+ *
478
+ * @since 3.2.4
479
+ */
480
+ public function wsal_adminbar_events_refresh__premium_only() {
481
+ if ( ! $this->_plugin->settings->CurrentUserCan( 'view' ) ) {
482
+ echo wp_json_encode(
483
+ array(
484
+ 'success' => false,
485
+ 'message' => __( 'Access Denied.', 'wp-security-audit-log' ),
486
+ )
487
+ );
488
+ die();
489
+ }
490
+
491
+ if ( isset( $_POST['nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'wsal-common-js-nonce' ) ) {
492
+ $events_count = isset( $_POST['eventsCount'] ) ? (int) sanitize_text_field( wp_unslash( $_POST['eventsCount'] ) ) : false;
493
+
494
+ if ( $events_count ) {
495
+ $occurrence = new WSAL_Models_Occurrence();
496
+ $new_count = (int) $occurrence->Count();
497
+
498
+ if ( $events_count !== $new_count ) {
499
+ $event = $this->_plugin->alerts->get_admin_bar_event( true );
500
+ $code = $this->_plugin->alerts->GetAlert( $event->alert_id );
501
+
502
+ echo wp_json_encode(
503
+ array(
504
+ 'success' => true,
505
+ 'count' => $new_count,
506
+ 'message' => 'LIVE: ' . $code->desc . ' from ' . $event->GetSourceIp(),
507
+ )
508
+ );
509
+ } else {
510
+ echo wp_json_encode( array( 'success' => false ) );
511
+ }
512
+ } else {
513
+ echo wp_json_encode(
514
+ array(
515
+ 'success' => false,
516
+ 'message' => __( 'Log count parameter expected.', 'wp-security-audit-log' ),
517
+ )
518
+ );
519
+ }
520
+ } else {
521
+ echo wp_json_encode(
522
+ array(
523
+ 'success' => false,
524
+ 'message' => __( 'Nonce verification failed.', 'wp-security-audit-log' ),
525
+ )
526
+ );
527
+ }
528
+ die();
529
+ }
530
  }
classes/Views/AuditLog.php CHANGED
@@ -88,16 +88,16 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
88
  // Set adverts array.
89
  $this->adverts = array(
90
  0 => array(
91
- 'head' => __( 'Get instantly alerted of important changes via email, do text based searches and filter results, generate reports, see who is logged in and more!', 'wp-security-audit-log' ),
92
  'desc' => __( 'Upgrade to premium to unlock these powerful activity log features.', 'wp-security-audit-log' ),
93
  ),
94
  1 => array(
95
  'head' => __( 'Instant email notifications, search & filters, reports, users sessions management, integration tools and more!', 'wp-security-audit-log' ),
96
- 'desc' => __( 'Upgrade to unlock these powerful features and gain more from your activity logs.', 'wp-security-audit-log' ),
97
  ),
98
  2 => array(
99
- 'head' => __( 'See who is logged in to your WordPress, create user productivity reports, get alerted via email of important changes and more!', 'wp-security-audit-log' ),
100
- 'desc' => __( 'Unlock these powerful features and much more with the premium edition of WP Security Audit Log.', 'wp-security-audit-log' ),
101
  ),
102
  );
103
  }
@@ -137,17 +137,26 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
137
  </p>
138
  </div>
139
  <!-- /.wsal_notice__content -->
140
-
141
  <div class="wsal_notice__btns">
142
  <?php
 
 
 
 
 
 
 
143
  // Buy Now button link.
144
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
 
145
 
146
  // If user is not super admin and website is multisite then change the URL.
147
  if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
148
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
 
149
  } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
150
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
 
151
  }
152
 
153
  $more_info = add_query_arg(
@@ -161,11 +170,11 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
161
  );
162
  ?>
163
  <?php wp_nonce_field( 'wsal_dismiss_advert', 'wsal-dismiss-advert', false, true ); ?>
164
- <a href="<?php echo esc_url( $buy_now ); ?>" class="button button-primary wsal_notice__btn"><?php esc_html_e( 'UPGRADE', 'wp-security-audit-log' ); ?></a>
165
- <div>
166
- <a href="<?php echo esc_url( $more_info ); ?>" target="_blank"><?php esc_html_e( 'Tell me more', 'wp-security-audit-log' ); ?></a>
167
- <a href="javascript:;" data-advert="<?php echo esc_attr( $wsal_premium_advert ); ?>" onclick="wsal_dismiss_advert(this)" class="wsal_notice__btn_dismiss" title="<?php esc_attr_e( 'Dismiss the banner', 'wp-security-audit-log' ); ?>"><?php esc_html_e( 'Close', 'wp-security-audit-log' ); ?></a>
168
- </div>
169
  </div>
170
  <!-- /.wsal_notice__btns -->
171
  </div>
@@ -291,7 +300,7 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
291
 
292
  // @codingStandardsIgnoreStart
293
  $this->page_args->page = isset( $_REQUEST['page'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['page'] ) ) : false;
294
- $this->page_args->site_id = isset( $_REQUEST['wsal-cbid'] ) ? (int) sanitize_text_field( wp_unslash( $_REQUEST['wsal-cbid'] ) ) : false;
295
 
296
  // Order arguments.
297
  $this->page_args->order_by = isset( $_REQUEST['orderby'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['orderby'] ) ) : false;
@@ -444,59 +453,34 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
444
  });
445
  });
446
  </script>
447
- <?php endif; ?>
448
-
449
- <?php
450
- if ( class_exists( 'WSAL_SearchExtension' ) &&
451
- ( ! empty( $this->page_args->search_filters ) || ( ! empty( $this->page_args->search_term ) && trim( $this->page_args->search_term ) ) ) ) :
452
- ?>
453
- <script type="text/javascript">
454
- jQuery(document).ready( function() {
455
- WsalAuditLogInit(
456
- <?php
457
- echo json_encode(
458
- array(
459
- 'ajaxurl' => admin_url( 'admin-ajax.php' ),
460
- 'tr8n' => array(
461
- 'numofitems' => __( 'Please enter the number of alerts you would like to see on one page:', 'wp-security-audit-log' ),
462
- 'searchback' => __( 'All Sites', 'wp-security-audit-log' ),
463
- 'searchnone' => __( 'No Results', 'wp-security-audit-log' ),
464
- ),
465
- 'autorefresh' => array(
466
- 'enabled' => false,
467
- 'token' => $this->GetListView()->get_total_items(),
468
- ),
469
- )
470
- );
471
- ?>
472
- );
473
- } );
474
- </script>
475
- <?php else : ?>
476
- <script type="text/javascript">
477
- jQuery(document).ready( function() {
478
- WsalAuditLogInit(
479
- <?php
480
- echo json_encode(
481
- array(
482
- 'ajaxurl' => admin_url( 'admin-ajax.php' ),
483
- 'tr8n' => array(
484
- 'numofitems' => __( 'Please enter the number of alerts you would like to see on one page:', 'wp-security-audit-log' ),
485
- 'searchback' => __( 'All Sites', 'wp-security-audit-log' ),
486
- 'searchnone' => __( 'No Results', 'wp-security-audit-log' ),
487
- ),
488
- 'autorefresh' => array(
489
- 'enabled' => ! $this->_plugin->settings->is_infinite_scroll() ? $this->_plugin->settings->IsRefreshAlertsEnabled() : false,
490
- 'token' => $this->GetListView()->get_total_items(),
491
- ),
492
- )
493
- );
494
- ?>
495
- );
496
- } );
497
- </script>
498
  <?php
499
  endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
500
  }
501
 
502
  /**
88
  // Set adverts array.
89
  $this->adverts = array(
90
  0 => array(
91
+ 'head' => __( 'Get instantly alerted of important changes via email, search the activity log and use filters, generate reports, see who is logged in and more!', 'wp-security-audit-log' ),
92
  'desc' => __( 'Upgrade to premium to unlock these powerful activity log features.', 'wp-security-audit-log' ),
93
  ),
94
  1 => array(
95
  'head' => __( 'Instant email notifications, search & filters, reports, users sessions management, integration tools and more!', 'wp-security-audit-log' ),
96
+ 'desc' => __( 'Upgrade to benefit more from the activity logs.', 'wp-security-audit-log' ),
97
  ),
98
  2 => array(
99
+ 'head' => __( 'See who is logged in real-time, generate reports, get alerted via email of important changes and more!', 'wp-security-audit-log' ),
100
+ 'desc' => __( 'Unlock these and other features with the premium edition of WP Security Audit Log.', 'wp-security-audit-log' ),
101
  ),
102
  );
103
  }
137
  </p>
138
  </div>
139
  <!-- /.wsal_notice__content -->
 
140
  <div class="wsal_notice__btns">
141
  <?php
142
+ // Trial link arguments.
143
+ $trial_args = array(
144
+ 'page' => 'wsal-auditlog-pricing',
145
+ 'billing_cycle' => 'annual',
146
+ 'trial' => 'true',
147
+ );
148
+
149
  // Buy Now button link.
150
+ $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
151
+ $trial_link = add_query_arg( $trial_args, admin_url( 'admin.php' ) );
152
 
153
  // If user is not super admin and website is multisite then change the URL.
154
  if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
155
+ $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
156
+ $trial_link = 'https://www.wpsecurityauditlog.com/pricing/';
157
  } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
158
+ $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
159
+ $trial_link = add_query_arg( $trial_args, network_admin_url( 'admin.php' ) );
160
  }
161
 
162
  $more_info = add_query_arg(
170
  );
171
  ?>
172
  <?php wp_nonce_field( 'wsal_dismiss_advert', 'wsal-dismiss-advert', false, true ); ?>
173
+ <a href="<?php echo esc_url( $buy_now ); ?>" class="button button-primary wsal_notice__btn"><?php esc_html_e( 'UPGRADE NOW', 'wp-security-audit-log' ); ?></a>
174
+ <a href="<?php echo esc_url( $trial_link ); ?>" class="button button-primary"><?php esc_html_e( 'Start Free Trial', 'wp-security-audit-log' ); ?></a>
175
+ <a href="<?php echo esc_url( $more_info ); ?>" target="_blank"><?php esc_html_e( 'Tell me more', 'wp-security-audit-log' ); ?></a>
176
+ <br>
177
+ <a href="javascript:;" data-advert="<?php echo esc_attr( $wsal_premium_advert ); ?>" onclick="wsal_dismiss_advert(this)" class="wsal_notice__btn_dismiss" title="<?php esc_attr_e( 'Dismiss the banner', 'wp-security-audit-log' ); ?>"><?php esc_html_e( 'Close', 'wp-security-audit-log' ); ?></a>
178
  </div>
179
  <!-- /.wsal_notice__btns -->
180
  </div>
300
 
301
  // @codingStandardsIgnoreStart
302
  $this->page_args->page = isset( $_REQUEST['page'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['page'] ) ) : false;
303
+ $this->page_args->site_id = $this->_plugin->settings->get_view_site_id();
304
 
305
  // Order arguments.
306
  $this->page_args->order_by = isset( $_REQUEST['orderby'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['orderby'] ) ) : false;
453
  });
454
  });
455
  </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456
  <?php
457
  endif;
458
+
459
+ $is_search_view = class_exists( 'WSAL_SearchExtension' ) && ( ! empty( $this->page_args->search_filters ) || ! empty( trim( $this->page_args->search_term ) ) );
460
+ ?>
461
+ <script type="text/javascript">
462
+ jQuery( document ).ready( function() {
463
+ WsalAuditLogInit(
464
+ <?php
465
+ echo wp_json_encode(
466
+ array(
467
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
468
+ 'tr8n' => array(
469
+ 'numofitems' => __( 'Please enter the number of alerts you would like to see on one page:', 'wp-security-audit-log' ),
470
+ 'searchback' => __( 'All Sites', 'wp-security-audit-log' ),
471
+ 'searchnone' => __( 'No Results', 'wp-security-audit-log' ),
472
+ ),
473
+ 'autorefresh' => array(
474
+ 'enabled' => ! $is_search_view ? $this->_plugin->settings->IsRefreshAlertsEnabled() : false,
475
+ 'token' => $this->GetListView()->get_total_items(),
476
+ ),
477
+ )
478
+ );
479
+ ?>
480
+ );
481
+ } );
482
+ </script>
483
+ <?php
484
  }
485
 
486
  /**
classes/Views/EmailNotifications.php CHANGED
@@ -22,35 +22,44 @@ if ( ! defined( 'ABSPATH' ) ) {
22
  class WSAL_Views_EmailNotifications extends WSAL_AbstractView {
23
 
24
  /**
25
- * Method: Get View Title.
26
  */
27
  public function GetTitle() {
28
- return __( 'Email Notifications Add-On', 'wp-security-audit-log' );
29
  }
30
 
31
  /**
32
- * Method: Get View Icon.
33
  */
34
  public function GetIcon() {
35
  return 'dashicons-external';
36
  }
37
 
38
  /**
39
- * Method: Get View Name.
40
  */
41
  public function GetName() {
42
- return __( 'Email Notifications &#8682;', 'wp-security-audit-log' );
43
  }
44
 
45
  /**
46
- * Method: Get View Weight.
47
  */
48
  public function GetWeight() {
49
  return 8;
50
  }
51
 
52
  /**
53
- * Method: Get View Header.
 
 
 
 
 
 
 
 
 
54
  */
55
  public function Header() {
56
  // Extension Page CSS.
@@ -71,7 +80,7 @@ class WSAL_Views_EmailNotifications extends WSAL_AbstractView {
71
  }
72
 
73
  /**
74
- * Method: Get View Footer.
75
  */
76
  public function Footer() {
77
  // jQuery.
@@ -82,7 +91,8 @@ class WSAL_Views_EmailNotifications extends WSAL_AbstractView {
82
  'wsal-swipebox-js',
83
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
84
  array( 'jquery' ),
85
- filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' )
 
86
  );
87
  wp_enqueue_script( 'wsal-swipebox-js' );
88
 
@@ -91,104 +101,47 @@ class WSAL_Views_EmailNotifications extends WSAL_AbstractView {
91
  'wsal-extensions-js',
92
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
93
  array( 'wsal-swipebox-js' ),
94
- filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' )
 
95
  );
96
  wp_enqueue_script( 'wsal-extensions-js' );
97
  }
98
 
99
  /**
100
- * Method: Get View Render.
101
  */
102
  public function Render() {
103
- ?>
104
- <div class="wrap-advertising-page-single">
105
- <div class="wsal-row">
106
- <div class="wsal-col">
107
- <div class="icon" style='background-image:url("<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/envelope.jpg");'></div>
108
- </div>
109
- <!-- /.wsal-col -->
110
-
111
- <div class="wsal-col">
112
- <h3><?php esc_html_e( 'Email Notifications', 'wp-security-audit-log' ); ?></h3>
113
- <p>
114
- <?php esc_html_e( 'Upgrade to Premium to:', 'wp-security-audit-log' ); ?>
115
- </p>
116
- <p>
117
- <ul class="wsal-features-list">
118
- <li><?php esc_html_e( 'Configure email notifications to be instantly alerted of important changes,', 'wp-security-audit-log' ); ?></li>
119
- <li><?php esc_html_e( 'Configure notifications for when users login, change content, install a plugin or do any other change,', 'wp-security-audit-log' ); ?></li>
120
- <li><?php esc_html_e( 'Configure security email notifications,', 'wp-security-audit-log' ); ?></li>
121
- <li><?php esc_html_e( 'Configure email notifications via a user friendly wizard,', 'wp-security-audit-log' ); ?></li>
122
- <li><?php esc_html_e( 'Edit and create your own templates for email notifications,', 'wp-security-audit-log' ); ?></li>
123
- <li><?php esc_html_e( '& more.', 'wp-security-audit-log' ); ?></li>
124
- </ul>
125
- </p>
126
- <?php
127
- // Buy Now button link.
128
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
129
- $buy_now_target = '';
130
-
131
- // If user is not super admin and website is multisite then change the URL.
132
- if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
133
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
134
- $buy_now_target = 'target="_blank"';
135
- } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
136
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
137
- } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
138
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
139
- $buy_now_target = 'target="_blank"';
140
- }
141
-
142
- $more_info = add_query_arg(
143
- array(
144
- 'utm_source' => 'plugin',
145
- 'utm_medium' => 'page',
146
- 'utm_content' => 'email+more+info',
147
- 'utm_campaign' => 'upgrade+premium',
148
- ),
149
- 'https://www.wpsecurityauditlog.com/premium-features/'
150
- );
151
- ?>
152
- <p>
153
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
154
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
155
- </p>
156
- </div>
157
- <!-- /.wsal-col -->
158
- </div>
159
- <!-- /.wsal-row -->
160
-
161
- <div class="wsal-row">
162
- <div class="wsal-col">
163
- <h3><?php esc_html_e( 'Screenshots', 'wp-security-audit-log' ); ?></h3>
164
-
165
- <p>
166
- <ul class="wsal-features-list">
167
- <li>
168
- <?php esc_html_e( 'Use the trigger builder to configure any type of email notification so you are instantly alerted of important changes on your WordPress.', 'wp-security-audit-log' ); ?><br />
169
- <a class="swipebox" title="<?php esc_attr_e( 'Use the trigger builder to configure any type of email notification so you are instantly alerted of important changes on your WordPress.', 'wp-security-audit-log' ); ?>"
170
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/email-notifications/email_notifications.png">
171
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/email-notifications/email_notifications.png">
172
- </a>
173
- </li>
174
- <li>
175
- <?php esc_html_e( 'Use the wizard to easily get started and quickly configure basic email notifications.', 'wp-security-audit-log' ); ?><br />
176
- <a class="swipebox" title="<?php esc_attr_e( 'Use the wizard to easily get started and quickly configure basic email notifications.', 'wp-security-audit-log' ); ?>"
177
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/email-notifications/email_notifications_wizard.png">
178
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/email-notifications/email_notifications_wizard.png">
179
- </a>
180
- </li>
181
- </ul>
182
- </p>
183
 
184
- <p>
185
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
186
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
187
- </p>
188
- </div>
189
- </div>
190
- <!-- /.wsal-row -->
191
- </div>
192
- <?php
193
  }
194
  }
22
  class WSAL_Views_EmailNotifications extends WSAL_AbstractView {
23
 
24
  /**
25
+ * Get View Title.
26
  */
27
  public function GetTitle() {
28
+ return __( 'Notifications Add-On', 'wp-security-audit-log' );
29
  }
30
 
31
  /**
32
+ * Get View Icon.
33
  */
34
  public function GetIcon() {
35
  return 'dashicons-external';
36
  }
37
 
38
  /**
39
+ * Get View Name.
40
  */
41
  public function GetName() {
42
+ return __( 'Notifications &#8682;', 'wp-security-audit-log' );
43
  }
44
 
45
  /**
46
+ * Get View Weight.
47
  */
48
  public function GetWeight() {
49
  return 8;
50
  }
51
 
52
  /**
53
+ * Check if the page title is visible.
54
+ *
55
+ * @return boolean
56
+ */
57
+ public function is_title_visible() {
58
+ return false;
59
+ }
60
+
61
+ /**
62
+ * Get View Header.
63
  */
64
  public function Header() {
65
  // Extension Page CSS.
80
  }
81
 
82
  /**
83
+ * Get View Footer.
84
  */
85
  public function Footer() {
86
  // jQuery.
91
  'wsal-swipebox-js',
92
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
93
  array( 'jquery' ),
94
+ filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' ),
95
+ false
96
  );
97
  wp_enqueue_script( 'wsal-swipebox-js' );
98
 
101
  'wsal-extensions-js',
102
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
103
  array( 'wsal-swipebox-js' ),
104
+ filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' ),
105
+ false
106
  );
107
  wp_enqueue_script( 'wsal-extensions-js' );
108
  }
109
 
110
  /**
111
+ * Page View.
112
  */
113
  public function Render() {
114
+ $title = __( 'SMS & Email Notifications', 'wp-security-audit-log' );
115
+ $description = __( 'Get instantly alerted of important changes on your site via SMS and email notifications. Upgrade to premium and:', 'wp-security-audit-log' );
116
+ $addon_img = trailingslashit( WSAL_BASE_URL ) . 'img/' . $this->GetSafeViewName() . '.jpg';
117
+ $premium_list = array(
118
+ __( 'Configure any type of SMS & email notifications', 'wp-security-audit-log' ),
119
+ __( 'Receive notifications for when users login, change their password or change content', 'wp-security-audit-log' ),
120
+ __( 'Get alerted of site changes like plugin installs, theme changes etc', 'wp-security-audit-log' ),
121
+ __( 'Enable built-in security email notifications of suspicious user activity', 'wp-security-audit-log' ),
122
+ __( 'Personalize all email and SMS templates', 'wp-security-audit-log' ),
123
+ __( 'Use the trigger builder to configure any type of notification criteria!', 'wp-security-audit-log' ),
124
+ );
125
+ $subtext = __( 'Getting started is really easy. You can use one of the plugin’s built-in notifications or create your own using the easy to use trigger builder.', 'wp-security-audit-log' );
126
+ $screenshots = array(
127
+ array(
128
+ 'desc' => __( 'Email and SMS notifications instantly alert you of important changes on your WordPress site.', 'wp-security-audit-log' ),
129
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/notifications/notifications_1.png',
130
+ ),
131
+ array(
132
+ 'desc' => __( 'Easily enable any of the built-in security and user management notifications.', 'wp-security-audit-log' ),
133
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/notifications/notifications_2.png',
134
+ ),
135
+ array(
136
+ 'desc' => __( 'Use the trigger builder to configure any type of email and SMS notification to get instantly alerted of site changes that are important to you and your business.', 'wp-security-audit-log' ),
137
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/notifications/notifications_3.png',
138
+ ),
139
+ array(
140
+ 'desc' => __( 'All email and SMS templates are configurable, allowing you to personalize them.', 'wp-security-audit-log' ),
141
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/notifications/notifications_4.png',
142
+ ),
143
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
 
145
+ require_once dirname( __FILE__ ) . '/addons/html-view.php';
 
 
 
 
 
 
 
 
146
  }
147
  }
classes/Views/ExternalDB.php CHANGED
@@ -49,6 +49,15 @@ class WSAL_Views_ExternalDB extends WSAL_AbstractView {
49
  return 10;
50
  }
51
 
 
 
 
 
 
 
 
 
 
52
  /**
53
  * Method: Get View Header.
54
  */
@@ -82,7 +91,8 @@ class WSAL_Views_ExternalDB extends WSAL_AbstractView {
82
  'wsal-swipebox-js',
83
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
84
  array( 'jquery' ),
85
- filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' )
 
86
  );
87
  wp_enqueue_script( 'wsal-swipebox-js' );
88
 
@@ -91,103 +101,41 @@ class WSAL_Views_ExternalDB extends WSAL_AbstractView {
91
  'wsal-extensions-js',
92
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
93
  array( 'wsal-swipebox-js' ),
94
- filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' )
 
95
  );
96
  wp_enqueue_script( 'wsal-extensions-js' );
97
  }
98
 
99
  /**
100
- * Method: Get View.
101
  */
102
  public function Render() {
103
- ?>
104
- <div class="wrap-advertising-page-single">
105
- <div class="wsal-row">
106
- <div class="wsal-col">
107
- <div class="icon" style='background-image:url("<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/database.jpg");'></div>
108
- </div>
109
- <!-- /.wsal-col -->
110
-
111
- <div class="wsal-col">
112
- <h3><?php esc_html_e( 'External DB', 'wp-security-audit-log' ); ?></h3>
113
- <p>
114
- <?php esc_html_e( 'Upgrade to Premium to:', 'wp-security-audit-log' ); ?>
115
- </p>
116
- <p>
117
- <ul class="wsal-features-list">
118
- <li><?php esc_html_e( 'Move the audit log to an external database for improved security & performance,', 'wp-security-audit-log' ); ?></li>
119
- <li><?php esc_html_e( 'Centralize the audit log in your centralized logging system,', 'wp-security-audit-log' ); ?></li>
120
- <li><?php esc_html_e( 'Mirror the audit trail to Syslog, Papertrail etc,', 'wp-security-audit-log' ); ?></li>
121
- <li><?php esc_html_e( 'Configure archiving rules to archive old events in an archiving database,', 'wp-security-audit-log' ); ?></li>
122
- <li><?php esc_html_e( '& more.', 'wp-security-audit-log' ); ?></li>
123
- </ul>
124
- </p>
125
- <?php
126
- // Buy Now button link.
127
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
128
- $buy_now_target = '';
129
-
130
- // If user is not super admin and website is multisite then change the URL.
131
- if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
132
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
133
- $buy_now_target = 'target="_blank"';
134
- } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
135
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
136
- } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
137
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
138
- $buy_now_target = 'target="_blank"';
139
- }
140
-
141
- $more_info = add_query_arg(
142
- array(
143
- 'utm_source' => 'plugin',
144
- 'utm_medium' => 'page',
145
- 'utm_content' => 'db+more+info',
146
- 'utm_campaign' => 'upgrade+premium',
147
- ),
148
- 'https://www.wpsecurityauditlog.com/premium-features/'
149
- );
150
- ?>
151
- <p>
152
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
153
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
154
- </p>
155
- </div>
156
- <!-- /.wsal-col -->
157
- </div>
158
- <!-- /.wsal-row -->
159
-
160
- <div class="wsal-row">
161
- <div class="wsal-col">
162
- <h3><?php esc_html_e( 'Screenshots', 'wp-security-audit-log' ); ?></h3>
163
-
164
- <p>
165
- <ul class="wsal-features-list">
166
- <li>
167
- <?php esc_html_e( 'Configure an external database so the WordPress audit trail is stored on it instead of the WordPress database.', 'wp-security-audit-log' ); ?><br />
168
- <a class="swipebox" title="<?php esc_attr_e( 'Configure an external database so the WordPress audit trail is stored on it instead of the WordPress database.', 'wp-security-audit-log' ); ?>"
169
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/external-db/external_database_1.png">
170
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/external-db/external_database_1.png">
171
- </a>
172
- </li>
173
- <li>
174
- <?php esc_html_e( 'Configure mirroring to keep a secondary copy of the WordPress audit trail on Syslog, Papertrail etc.', 'wp-security-audit-log' ); ?><br />
175
- <a class="swipebox" title="<?php esc_attr_e( 'Configure mirroring to keep a secondary copy of the WordPress audit trail on Syslog, Papertrail etc.', 'wp-security-audit-log' ); ?>"
176
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/external-db/extermal_database_mirroring_options.png">
177
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/external-db/extermal_database_mirroring_options.png">
178
- </a>
179
- </li>
180
- </ul>
181
- </p>
182
 
183
- <p>
184
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
185
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
186
- </p>
187
- </div>
188
- </div>
189
- <!-- /.wsal-row -->
190
- </div>
191
- <?php
192
  }
193
  }
49
  return 10;
50
  }
51
 
52
+ /**
53
+ * Check if the page title is visible.
54
+ *
55
+ * @return boolean
56
+ */
57
+ public function is_title_visible() {
58
+ return false;
59
+ }
60
+
61
  /**
62
  * Method: Get View Header.
63
  */
91
  'wsal-swipebox-js',
92
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
93
  array( 'jquery' ),
94
+ filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' ),
95
+ false
96
  );
97
  wp_enqueue_script( 'wsal-swipebox-js' );
98
 
101
  'wsal-extensions-js',
102
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
103
  array( 'wsal-swipebox-js' ),
104
+ filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' ),
105
+ false
106
  );
107
  wp_enqueue_script( 'wsal-extensions-js' );
108
  }
109
 
110
  /**
111
+ * Page View.
112
  */
113
  public function Render() {
114
+ $title = __( 'Audit Log Database & Integration Tools', 'wp-security-audit-log' );
115
+ $description = __( 'There are several benefits to segregating the logs from the main site database, and to be able to mirror the logs to third party and centralized business solutions. Upgrade to premium and:', 'wp-security-audit-log' );
116
+ $addon_img = trailingslashit( WSAL_BASE_URL ) . 'img/' . $this->GetSafeViewName() . '.jpg';
117
+ $premium_list = array(
118
+ __( 'Store the audit logs of your sites on an external database', 'wp-security-audit-log' ),
119
+ __( 'Configuring archiving and store older log data in a segregated database', 'wp-security-audit-log' ),
120
+ __( 'Mirror the logs to syslog, Slack, Papertrail and central business communication services', 'wp-security-audit-log' ),
121
+ __( 'Configure filters to filter what is mirrored and archived in the databases and services', 'wp-security-audit-log' ),
122
+ );
123
+ $subtext = false;
124
+ $screenshots = array(
125
+ array(
126
+ 'desc' => __( 'Easily configure integration and database connections thanks to a user friendly wizard.', 'wp-security-audit-log' ),
127
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/external-db/db_integrations_1.png',
128
+ ),
129
+ array(
130
+ 'desc' => __( 'Configure activity log filters for third party services connections.', 'wp-security-audit-log' ),
131
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/external-db/db_integrations_2.png',
132
+ ),
133
+ array(
134
+ 'desc' => __( 'Configure an unlimited number of connections to different databases and third party services.', 'wp-security-audit-log' ),
135
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/external-db/db_integrations_3.png',
136
+ ),
137
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
+ require_once dirname( __FILE__ ) . '/addons/html-view.php';
 
 
 
 
 
 
 
 
140
  }
141
  }
classes/Views/Help.php CHANGED
@@ -210,32 +210,44 @@ class WSAL_Views_Help extends WSAL_AbstractView {
210
  </li>
211
  </ul>
212
  <?php
 
 
 
 
 
 
 
213
  // Buy Now button link.
214
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
215
  $buy_now_target = '';
 
216
 
217
  // If user is not super admin and website is multisite then change the URL.
218
  if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
219
  $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
 
220
  $buy_now_target = 'target="_blank"';
221
  } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
222
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
 
223
  } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
224
  $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
 
225
  $buy_now_target = 'target="_blank"';
226
  }
227
 
228
  $more_info = add_query_arg(
229
  array(
230
- 'utm_source' => 'plugin',
231
- 'utm_medium' => 'page',
232
- 'utm_content' => 'update+more+info',
233
  'utm_campaign' => 'upgrade+premium',
234
  ),
235
  'https://www.wpsecurityauditlog.com/premium-features/'
236
  );
237
  ?>
238
  <p>
 
239
  <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
240
  <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
241
  </p>
210
  </li>
211
  </ul>
212
  <?php
213
+ // Trial link arguments.
214
+ $trial_args = array(
215
+ 'page' => 'wsal-auditlog-pricing',
216
+ 'billing_cycle' => 'annual',
217
+ 'trial' => 'true',
218
+ );
219
+
220
  // Buy Now button link.
221
+ $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
222
  $buy_now_target = '';
223
+ $trial_link = add_query_arg( $trial_args, admin_url( 'admin.php' ) );
224
 
225
  // If user is not super admin and website is multisite then change the URL.
226
  if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
227
  $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
228
+ $trial_link = 'https://www.wpsecurityauditlog.com/pricing/';
229
  $buy_now_target = 'target="_blank"';
230
  } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
231
+ $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
232
+ $trial_link = add_query_arg( $trial_args, network_admin_url( 'admin.php' ) );
233
  } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
234
  $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
235
+ $trial_link = 'https://www.wpsecurityauditlog.com/pricing/';
236
  $buy_now_target = 'target="_blank"';
237
  }
238
 
239
  $more_info = add_query_arg(
240
  array(
241
+ 'utm_source' => 'plugin',
242
+ 'utm_medium' => 'page',
243
+ 'utm_content' => 'update+more+info',
244
  'utm_campaign' => 'upgrade+premium',
245
  ),
246
  'https://www.wpsecurityauditlog.com/premium-features/'
247
  );
248
  ?>
249
  <p>
250
+ <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $trial_link ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Start Free Trial', 'wp-security-audit-log' ); ?></a>
251
  <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
252
  <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
253
  </p>
classes/Views/LogInUsers.php CHANGED
@@ -49,6 +49,15 @@ class WSAL_Views_LogInUsers extends WSAL_AbstractView {
49
  return 7;
50
  }
51
 
 
 
 
 
 
 
 
 
 
52
  /**
53
  * Method: Get View Header.
54
  */
@@ -82,7 +91,8 @@ class WSAL_Views_LogInUsers extends WSAL_AbstractView {
82
  'wsal-swipebox-js',
83
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
84
  array( 'jquery' ),
85
- filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' )
 
86
  );
87
  wp_enqueue_script( 'wsal-swipebox-js' );
88
 
@@ -91,105 +101,39 @@ class WSAL_Views_LogInUsers extends WSAL_AbstractView {
91
  'wsal-extensions-js',
92
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
93
  array( 'wsal-swipebox-js' ),
94
- filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' )
 
95
  );
96
  wp_enqueue_script( 'wsal-extensions-js' );
97
  }
98
 
99
  /**
100
- * Method: Get View.
101
  */
102
  public function Render() {
103
- ?>
104
- <div class="wrap-advertising-page-single">
105
- <div class="wsal-row">
106
- <div class="wsal-col">
107
- <div class="icon" style='background-image:url("<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/monitoring.jpg");'></div>
108
- </div>
109
- <!-- /.wsal-col -->
110
-
111
- <div class="wsal-col">
112
- <h3><?php esc_html_e( 'Users Login and Management', 'wp-security-audit-log' ); ?></h3>
113
- <p>
114
- <?php esc_html_e( 'Upgrade to Premium to:', 'wp-security-audit-log' ); ?>
115
- </p>
116
- <p>
117
- <ul class="wsal-features-list">
118
- <li><?php esc_html_e( 'See who is logged in to your WordPress website,', 'wp-security-audit-log' ); ?></li>
119
- <li><?php esc_html_e( 'When they logged in and from where,', 'wp-security-audit-log' ); ?></li>
120
- <li><?php esc_html_e( 'The last change they did on your WordPress website,', 'wp-security-audit-log' ); ?></li>
121
- <li><?php esc_html_e( 'Terminate their session with just a click of a button,', 'wp-security-audit-log' ); ?></li>
122
- <li><?php esc_html_e( 'Block multiple sessions for the same user,', 'wp-security-audit-log' ); ?></li>
123
- <li><?php esc_html_e( 'Get alerted when there are multiple sessions with the same username,', 'wp-security-audit-log' ); ?></li>
124
- <li><?php esc_html_e( '& more.', 'wp-security-audit-log' ); ?></li>
125
- </ul>
126
- </p>
127
- <?php
128
- // Buy Now button link.
129
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
130
- $buy_now_target = '';
131
-
132
- // If user is not super admin and website is multisite then change the URL.
133
- if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
134
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
135
- $buy_now_target = 'target="_blank"';
136
- } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
137
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
138
- } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
139
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
140
- $buy_now_target = 'target="_blank"';
141
- }
142
-
143
- $more_info = add_query_arg(
144
- array(
145
- 'utm_source' => 'plugin',
146
- 'utm_medium' => 'page',
147
- 'utm_content' => 'users+sessions+more+info',
148
- 'utm_campaign' => 'upgrade+premium',
149
- ),
150
- 'https://www.wpsecurityauditlog.com/premium-features/'
151
- );
152
- ?>
153
- <p>
154
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
155
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
156
- </p>
157
- </div>
158
- <!-- /.wsal-col -->
159
- </div>
160
- <!-- /.wsal-row -->
161
-
162
- <div class="wsal-row">
163
- <div class="wsal-col">
164
- <h3><?php esc_html_e( 'Screenshots', 'wp-security-audit-log' ); ?></h3>
165
-
166
- <p>
167
- <ul class="wsal-features-list">
168
- <li>
169
- <?php esc_html_e( 'See who is logged in to your WordPress website and WordPress multisite network.', 'wp-security-audit-log' ); ?><br />
170
- <a class="swipebox" title="<?php esc_attr_e( 'See who is logged in to your WordPress website and WordPress multisite network.', 'wp-security-audit-log' ); ?>"
171
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/users-sessions-management/logged_in_users.png">
172
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/users-sessions-management/logged_in_users.png">
173
- </a>
174
- </li>
175
- <li>
176
- <?php esc_html_e( 'Block multiple sessions for the same user and configure related email notifications.', 'wp-security-audit-log' ); ?><br />
177
- <a class="swipebox" title="<?php esc_attr_e( 'Block multiple sessions for the same user and configure related email notifications.', 'wp-security-audit-log' ); ?>"
178
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/users-sessions-management/users_session_management_config.png">
179
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/users-sessions-management/users_session_management_config.png">
180
- </a>
181
- </li>
182
- </ul>
183
- </p>
184
 
185
- <p>
186
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
187
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
188
- </p>
189
- </div>
190
- </div>
191
- <!-- /.wsal-row -->
192
- </div>
193
- <?php
194
  }
195
  }
49
  return 7;
50
  }
51
 
52
+ /**
53
+ * Check if the page title is visible.
54
+ *
55
+ * @return boolean
56
+ */
57
+ public function is_title_visible() {
58
+ return false;
59
+ }
60
+
61
  /**
62
  * Method: Get View Header.
63
  */
91
  'wsal-swipebox-js',
92
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
93
  array( 'jquery' ),
94
+ filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' ),
95
+ false
96
  );
97
  wp_enqueue_script( 'wsal-swipebox-js' );
98
 
101
  'wsal-extensions-js',
102
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
103
  array( 'wsal-swipebox-js' ),
104
+ filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' ),
105
+ false
106
  );
107
  wp_enqueue_script( 'wsal-extensions-js' );
108
  }
109
 
110
  /**
111
+ * Page View.
112
  */
113
  public function Render() {
114
+ $title = __( 'Real-Time Users Sessions Management', 'wp-security-audit-log' );
115
+ $description = __( 'Better manage your users’ logins and sessions. Upgrade to premium and:', 'wp-security-audit-log' );
116
+ $addon_img = trailingslashit( WSAL_BASE_URL ) . 'img/' . $this->GetSafeViewName() . '.png';
117
+ $subtext = false;
118
+ $premium_list = array(
119
+ __( 'See who is logged in to your site', 'wp-security-audit-log' ),
120
+ __( 'When they logged in and from where', 'wp-security-audit-log' ),
121
+ __( 'The last change they have done in real-time', 'wp-security-audit-log' ),
122
+ __( 'Terminate any users’ session with a click of a button', 'wp-security-audit-log' ),
123
+ __( 'Limit or block multiple sessions for the same user', 'wp-security-audit-log' ),
124
+ __( 'Get alerted of multiple same user sessions', 'wp-security-audit-log' ),
125
+ );
126
+ $screenshots = array(
127
+ array(
128
+ 'desc' => __( 'See who is logged in to your WordPress site and multisite network in real-time.', 'wp-security-audit-log' ),
129
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/users-sessions-management/user_sessions_1.png',
130
+ ),
131
+ array(
132
+ 'desc' => __( 'Limit, manage and block multiple same user sessions easily.', 'wp-security-audit-log' ),
133
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/users-sessions-management/user_sessions_2.png',
134
+ ),
135
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
 
137
+ require_once dirname( __FILE__ ) . '/addons/html-view.php';
 
 
 
 
 
 
 
 
138
  }
139
  }
classes/Views/Reports.php CHANGED
@@ -49,6 +49,15 @@ class WSAL_Views_Reports extends WSAL_AbstractView {
49
  return 9;
50
  }
51
 
 
 
 
 
 
 
 
 
 
52
  /**
53
  * Method: Get View Header.
54
  */
@@ -82,7 +91,8 @@ class WSAL_Views_Reports extends WSAL_AbstractView {
82
  'wsal-swipebox-js',
83
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
84
  array( 'jquery' ),
85
- filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' )
 
86
  );
87
  wp_enqueue_script( 'wsal-swipebox-js' );
88
 
@@ -91,104 +101,41 @@ class WSAL_Views_Reports extends WSAL_AbstractView {
91
  'wsal-extensions-js',
92
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
93
  array( 'wsal-swipebox-js' ),
94
- filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' )
 
95
  );
96
  wp_enqueue_script( 'wsal-extensions-js' );
97
  }
98
 
99
  /**
100
- * Method: Get View.
101
  */
102
  public function Render() {
103
- ?>
104
- <div class="wrap-advertising-page-single">
105
- <div class="wsal-row">
106
- <div class="wsal-col">
107
- <div class="icon" style='background-image:url("<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/file.jpg");'></div>
108
- </div>
109
- <!-- /.wsal-col -->
110
-
111
- <div class="wsal-col">
112
- <h3><?php esc_html_e( 'Reports', 'wp-security-audit-log' ); ?></h3>
113
- <p>
114
- <?php esc_html_e( 'Upgrade to Premium to:', 'wp-security-audit-log' ); ?>
115
- </p>
116
- <p>
117
- <ul class="wsal-features-list">
118
- <li><?php esc_html_e( 'Generate user activity, site (in multisite) and any other type of WordPress reports,', 'wp-security-audit-log' ); ?></li>
119
- <li><?php esc_html_e( 'Configure automated daily, weekly, monthly & quarterly reports,', 'wp-security-audit-log' ); ?></li>
120
- <li><?php esc_html_e( 'Receive reports automatically in your email,', 'wp-security-audit-log' ); ?></li>
121
- <li><?php esc_html_e( 'Generate statistics reports on commonly used IP addresses, views per user, etc,', 'wp-security-audit-log' ); ?></li>
122
- <li><?php esc_html_e( 'Export reports to HTML and CSV formats,', 'wp-security-audit-log' ); ?></li>
123
- <li><?php esc_html_e( '& much more.', 'wp-security-audit-log' ); ?></li>
124
- </ul>
125
- </p>
126
- <?php
127
- // Buy Now button link.
128
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
129
- $buy_now_target = '';
130
-
131
- // If user is not super admin and website is multisite then change the URL.
132
- if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
133
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
134
- $buy_now_target = 'target="_blank"';
135
- } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
136
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
137
- } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
138
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
139
- $buy_now_target = 'target="_blank"';
140
- }
141
-
142
- $more_info = add_query_arg(
143
- array(
144
- 'utm_source' => 'plugin',
145
- 'utm_medium' => 'page',
146
- 'utm_content' => 'reports+more+info',
147
- 'utm_campaign' => 'upgrade+premium',
148
- ),
149
- 'https://www.wpsecurityauditlog.com/premium-features/'
150
- );
151
- ?>
152
- <p>
153
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
154
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
155
- </p>
156
- </div>
157
- <!-- /.wsal-col -->
158
- </div>
159
- <!-- /.wsal-row -->
160
-
161
- <div class="wsal-row">
162
- <div class="wsal-col">
163
- <h3><?php esc_html_e( 'Screenshots', 'wp-security-audit-log' ); ?></h3>
164
-
165
- <p>
166
- <ul class="wsal-features-list">
167
- <li>
168
- <?php esc_html_e( 'Generate any type of report and also configure daily, weekly, monthly and quarterly reports which are automatically sent to you via email.', 'wp-security-audit-log' ); ?><br />
169
- <a class="swipebox" title="<?php esc_attr_e( 'Generate any type of report and also configure daily, weekly, monthly and quarterly reports which are automatically sent to you via email.', 'wp-security-audit-log' ); ?>"
170
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/reports/reports_1.png">
171
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/reports/reports_1.png">
172
- </a>
173
- </li>
174
- <li>
175
- <?php esc_html_e( 'Generate statistical reports to get a better overview of what users are doing on your WordPress and WordPress multisite network are doing.', 'wp-security-audit-log' ); ?><br />
176
- <a class="swipebox" title="<?php esc_attr_e( 'Generate statistical reports to get a better overview of what users are doing on your WordPress and WordPress multisite network are doing.', 'wp-security-audit-log' ); ?>"
177
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/reports/reports_2.png">
178
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/reports/reports_2.png">
179
- </a>
180
- </li>
181
- </ul>
182
- </p>
183
 
184
- <p>
185
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
186
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
187
- </p>
188
- </div>
189
- </div>
190
- <!-- /.wsal-row -->
191
- </div>
192
- <?php
193
  }
194
  }
49
  return 9;
50
  }
51
 
52
+ /**
53
+ * Check if the page title is visible.
54
+ *
55
+ * @return boolean
56
+ */
57
+ public function is_title_visible() {
58
+ return false;
59
+ }
60
+
61
  /**
62
  * Method: Get View Header.
63
  */
91
  'wsal-swipebox-js',
92
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
93
  array( 'jquery' ),
94
+ filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' ),
95
+ false
96
  );
97
  wp_enqueue_script( 'wsal-swipebox-js' );
98
 
101
  'wsal-extensions-js',
102
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
103
  array( 'wsal-swipebox-js' ),
104
+ filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' ),
105
+ false
106
  );
107
  wp_enqueue_script( 'wsal-extensions-js' );
108
  }
109
 
110
  /**
111
+ * Page View.
112
  */
113
  public function Render() {
114
+ $title = __( 'Individual, Scheduled & Automated Reports', 'wp-security-audit-log' );
115
+ $description = __( 'Many are not fans of reports, however reports are vital in business. With them you can make informed decisions that allow you to improve user productivity and the business. Upgrade to Premium so you can:', 'wp-security-audit-log' );
116
+ $addon_img = trailingslashit( WSAL_BASE_URL ) . 'img/' . $this->GetSafeViewName() . '.jpg';
117
+ $premium_list = array(
118
+ __( 'Generate any type of user and site (in multisite) activity report', 'wp-security-audit-log' ),
119
+ __( 'Automate and schedule daily, weekly, monthly and quarterly reports', 'wp-security-audit-log' ),
120
+ __( 'Received reports automatically via email', 'wp-security-audit-log' ),
121
+ __( 'Create statistics reports about users’ views, logins, activity from IP addresses & more', 'wp-security-audit-log' ),
122
+ );
123
+ $subtext = __( 'Reports are vital to the success of your business and management of your site.', 'wp-security-audit-log' );
124
+ $screenshots = array(
125
+ array(
126
+ 'desc' => __( 'Generate a HTML or CSV report.', 'wp-security-audit-log' ),
127
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/reports/reports_1.png',
128
+ ),
129
+ array(
130
+ 'desc' => __( 'Easily configure a criteria for your reports.', 'wp-security-audit-log' ),
131
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/reports/reports_2.png',
132
+ ),
133
+ array(
134
+ 'desc' => __( 'Schedule reports that are sent to you by email automatically.', 'wp-security-audit-log' ),
135
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/reports/reports_3.png',
136
+ ),
137
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
+ require_once dirname( __FILE__ ) . '/addons/html-view.php';
 
 
 
 
 
 
 
 
140
  }
141
  }
classes/Views/Search.php CHANGED
@@ -49,6 +49,15 @@ class WSAL_Views_Search extends WSAL_AbstractView {
49
  return 11;
50
  }
51
 
 
 
 
 
 
 
 
 
 
52
  /**
53
  * Method: Get View Header.
54
  */
@@ -82,7 +91,8 @@ class WSAL_Views_Search extends WSAL_AbstractView {
82
  'wsal-swipebox-js',
83
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
84
  array( 'jquery' ),
85
- filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' )
 
86
  );
87
  wp_enqueue_script( 'wsal-swipebox-js' );
88
 
@@ -91,97 +101,42 @@ class WSAL_Views_Search extends WSAL_AbstractView {
91
  'wsal-extensions-js',
92
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
93
  array( 'wsal-swipebox-js' ),
94
- filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' )
 
95
  );
96
  wp_enqueue_script( 'wsal-extensions-js' );
97
  }
98
 
99
  /**
100
- * Method: Get View.
101
  */
102
  public function Render() {
103
- ?>
104
- <div class="wrap-advertising-page-single">
105
- <div class="wsal-row">
106
- <div class="wsal-col">
107
- <div class="icon" style='background-image:url("<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/search.jpg");'></div>
108
- </div>
109
- <!-- /.wsal-col -->
110
-
111
- <div class="wsal-col">
112
- <h3><?php esc_html_e( 'Search', 'wp-security-audit-log' ); ?></h3>
113
- <p>
114
- <?php esc_html_e( 'Upgrade to Premium to:', 'wp-security-audit-log' ); ?>
115
- </p>
116
- <p>
117
- <ul class="wsal-features-list">
118
- <li><?php esc_html_e( 'Easily find and track back a specific change or suspicious user behaviour,', 'wp-security-audit-log' ); ?></li>
119
- <li><?php esc_html_e( 'Easily find the root of a problem to ease troubleshooting,', 'wp-security-audit-log' ); ?></li>
120
- <li><?php esc_html_e( 'Do free-text based searches in the WordPress audit log,', 'wp-security-audit-log' ); ?></li>
121
- <li><?php esc_html_e( 'Use filters to fine tune the search results,', 'wp-security-audit-log' ); ?></li>
122
- <li><?php esc_html_e( 'Save search terms & filters for improved productivity,', 'wp-security-audit-log' ); ?></li>
123
- <li><?php esc_html_e( '& more.', 'wp-security-audit-log' ); ?></li>
124
- </ul>
125
- </p>
126
- <?php
127
- // Buy Now button link.
128
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
129
- $buy_now_target = '';
130
-
131
- // If user is not super admin and website is multisite then change the URL.
132
- if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
133
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
134
- $buy_now_target = 'target="_blank"';
135
- } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
136
- $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
137
- } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
138
- $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
139
- $buy_now_target = 'target="_blank"';
140
- }
141
-
142
- $more_info = add_query_arg(
143
- array(
144
- 'utm_source' => 'plugin',
145
- 'utm_medium' => 'page',
146
- 'utm_content' => 'search+more+info',
147
- 'utm_campaign' => 'upgrade+premium',
148
- ),
149
- 'https://www.wpsecurityauditlog.com/premium-features/'
150
- );
151
- ?>
152
- <p>
153
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
154
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
155
- </p>
156
- </div>
157
- <!-- /.wsal-col -->
158
- </div>
159
- <!-- /.wsal-row -->
160
-
161
- <div class="wsal-row">
162
- <div class="wsal-col">
163
- <h3><?php esc_html_e( 'Screenshots', 'wp-security-audit-log' ); ?></h3>
164
-
165
- <p>
166
- <ul class="wsal-features-list">
167
- <li>
168
- <?php esc_html_e( 'Use the free-text based search to find a specific change and use the filters to fine tune the search results.', 'wp-security-audit-log' ); ?><br />
169
- <a class="swipebox" title="<?php esc_attr_e( 'Use the free-text based search to find a specific change and use the filters to fine tune the search results.', 'wp-security-audit-log' ); ?>"
170
- href="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/search/search.png">
171
- <img width="500" src="<?php echo esc_url( $this->_plugin->GetBaseUrl() ); ?>/img/search/search.png">
172
- </a>
173
- </li>
174
- </ul>
175
- </p>
176
 
177
- <p>
178
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $buy_now ); ?>" <?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
179
- <a class="button-primary wsal-extension-btn" href="<?php echo esc_attr( $more_info ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
180
- </p>
181
- </div>
182
- </div>
183
- <!-- /.wsal-row -->
184
- </div>
185
- <?php
186
  }
187
  }
49
  return 11;
50
  }
51
 
52
+ /**
53
+ * Check if the page title is visible.
54
+ *
55
+ * @return boolean
56
+ */
57
+ public function is_title_visible() {
58
+ return false;
59
+ }
60
+
61
  /**
62
  * Method: Get View Header.
63
  */
91
  'wsal-swipebox-js',
92
  $this->_plugin->GetBaseUrl() . '/js/jquery.swipebox.min.js',
93
  array( 'jquery' ),
94
+ filemtime( $this->_plugin->GetBaseDir() . '/js/jquery.swipebox.min.js' ),
95
+ false
96
  );
97
  wp_enqueue_script( 'wsal-swipebox-js' );
98
 
101
  'wsal-extensions-js',
102
  $this->_plugin->GetBaseUrl() . '/js/extensions.js',
103
  array( 'wsal-swipebox-js' ),
104
+ filemtime( $this->_plugin->GetBaseDir() . '/js/extensions.js' ),
105
+ false
106
  );
107
  wp_enqueue_script( 'wsal-extensions-js' );
108
  }
109
 
110
  /**
111
+ * Page View.
112
  */
113
  public function Render() {
114
+ $title = __( 'Search & Filters for the Activity Log', 'wp-security-audit-log' );
115
+ $description = __( 'You can find all the information you want in the activity log, if you know what you are looking for and have the right tools. Upgrade to premium so you can:', 'wp-security-audit-log' );
116
+ $addon_img = trailingslashit( WSAL_BASE_URL ) . 'img/' . $this->GetSafeViewName() . '.jpg';
117
+ $premium_list = array(
118
+ __( 'Do text searches and use filters to fine tune the search results', 'wp-security-audit-log' ),
119
+ __( 'Easily find when and who did a specific change on your site', 'wp-security-audit-log' ),
120
+ __( 'Easily identify and track back suspicious user behaviour', 'wp-security-audit-log' ),
121
+ __( 'Search for the cause of a problem and ease troubleshooting', 'wp-security-audit-log' ),
122
+ __( 'Save search terms and filters for future use and improved productivity', 'wp-security-audit-log' ),
123
+ );
124
+ $subtext = false;
125
+ $screenshots = array(
126
+ array(
127
+ 'desc' => __( 'Use the text search to find a specific change.', 'wp-security-audit-log' ),
128
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/search/search_1.png',
129
+ ),
130
+ array(
131
+ 'desc' => __( 'Configure any filter you need to fine tune the search results and find what you are looking for with much less effort.', 'wp-security-audit-log' ),
132
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/search/search_2.png',
133
+ ),
134
+ array(
135
+ 'desc' => __( 'Save search terms and filters to run the searches again in the future with just a single click.', 'wp-security-audit-log' ),
136
+ 'img' => trailingslashit( WSAL_BASE_URL ) . 'img/search/search_3.png',
137
+ ),
138
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
+ require_once dirname( __FILE__ ) . '/addons/html-view.php';
 
 
 
 
 
 
 
 
141
  }
142
  }
classes/Views/Settings.php CHANGED
@@ -61,6 +61,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
61
  */
62
  public function __construct( WpSecurityAuditLog $plugin ) {
63
  parent::__construct( $plugin );
 
64
  add_action( 'wp_ajax_AjaxCheckSecurityToken', array( $this, 'AjaxCheckSecurityToken' ) );
65
  add_action( 'wp_ajax_AjaxRunCleanup', array( $this, 'AjaxRunCleanup' ) );
66
  add_action( 'wp_ajax_AjaxGetAllUsers', array( $this, 'AjaxGetAllUsers' ) );
@@ -72,6 +73,22 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
72
  add_action( 'wp_ajax_wsal_stop_file_changes_scan', array( $this, 'stop_file_changes_scan' ) );
73
  add_action( 'wp_ajax_wsal_reset_settings', array( $this, 'reset_settings' ) );
74
  add_action( 'wp_ajax_wsal_purge_activity', array( $this, 'purge_activity' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  // Tab links.
77
  $wsal_setting_tabs = array(
@@ -205,9 +222,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
205
  * @throws Exception - Unrecognized settings tab error.
206
  */
207
  protected function Save() {
208
- check_admin_referer( 'wsal-settings' );
209
-
210
- // Call respective tab save functions if they are set.
211
  if ( ! empty( $this->current_tab ) && ! empty( $this->wsal_setting_tabs[ $this->current_tab ]['save'] ) ) {
212
  call_user_func( $this->wsal_setting_tabs[ $this->current_tab ]['save'] );
213
  } else {
@@ -323,24 +338,32 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
323
  * Method: Get View.
324
  */
325
  public function Render() {
326
- // Filter $_POST array for security.
327
- $post_array = filter_input_array( INPUT_POST );
328
-
329
- if ( isset( $post_array['_wpnonce'] ) && ! wp_verify_nonce( $post_array['_wpnonce'], 'wsal-settings' ) ) {
330
- wp_die( esc_html__( 'Nonce verification failed.', 'wp-security-audit-log' ) );
331
  }
332
 
333
  if ( ! $this->_plugin->settings->CurrentUserCan( 'edit' ) ) {
334
  wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'wp-security-audit-log' ) );
335
  }
336
 
337
- if ( isset( $post_array['submit'] ) ) {
 
 
 
338
  try {
339
- $this->Save();
340
- ?><div class="updated">
341
- <p><?php esc_html_e( 'Settings have been saved.', 'wp-security-audit-log' ); ?></p>
342
- </div>
343
- <?php
 
 
 
 
 
 
 
344
  } catch ( Exception $ex ) {
345
  ?>
346
  <div class="error"><p><?php esc_html_e( 'Error: ', 'wp-security-audit-log' ); ?><?php echo esc_html( $ex->getMessage() ); ?></p></div>
@@ -361,7 +384,6 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
361
  </div>
362
  <?php
363
  }
364
-
365
  ?>
366
  <nav id="wsal-tabs" class="nav-tab-wrapper">
367
  <?php foreach ( $this->wsal_setting_tabs as $tab_id => $tab ) : ?>
@@ -393,7 +415,13 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
393
  }
394
  ?>
395
  </div>
396
- <p class="submit"><input type="submit" name="submit" id="submit" class="button button-primary" value="Save Changes"></p>
 
 
 
 
 
 
397
  </form>
398
  <script type="text/javascript">
399
  <!--
@@ -474,7 +502,33 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
474
  <!-- / Reverse Proxy / Firewall Options -->
475
  </tbody>
476
  </table>
477
- <!-- Reverse Proxy -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478
 
479
  <h3><?php esc_html_e( 'Display latest events widget in Dashboard & Admin bar', 'wp-security-audit-log' ); ?></h3>
480
  <p class="description">
@@ -835,6 +889,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
835
  // Get $_POST global array.
836
  $post_array = filter_input_array( INPUT_POST );
837
 
 
838
  $this->_plugin->settings->set_events_type_nav( sanitize_text_field( $post_array['events-type-nav'] ) );
839
  $this->_plugin->settings->set_use_email( sanitize_text_field( $post_array['use-email'] ) );
840
  $this->_plugin->settings->SetFromEmail( sanitize_email( $post_array['FromEmail'] ) );
@@ -974,7 +1029,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
974
  ?>
975
  </p>
976
  <p>
977
- <a class="button-primary" href="<?php echo esc_url( add_query_arg( 'action', 'AjaxRunCleanup', admin_url( 'admin-ajax.php' ) ) ); ?>"><?php esc_html_e( 'Purge Old Data', 'wp-security-audit-log' ) ?></a>
978
  </p>
979
  <?php endif; ?>
980
  </td>
@@ -1094,34 +1149,6 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
1094
  </table>
1095
  <!-- Audit Log Columns -->
1096
 
1097
- <h3><?php esc_html_e( 'Do you want the activity log viewer to auto refresh?', 'wp-security-audit-log' ); ?></h3>
1098
- <p class="description"><?php esc_html_e( 'The activity log viewer auto refreshes every 30 seconds when opened so you can see the latest events as they happen almost in real time.', 'wp-security-audit-log' ); ?></p>
1099
- <table class="form-table wsal-tab">
1100
- <tbody>
1101
- <tr>
1102
- <th><label for="aroption_on"><?php esc_html_e( 'Refresh Audit Log Viewer', 'wp-security-audit-log' ); ?></label></th>
1103
- <td>
1104
- <fieldset>
1105
- <?php $are = $this->_plugin->settings->IsRefreshAlertsEnabled(); ?>
1106
- <label for="aroption_on">
1107
- <input type="radio" name="EnableAuditViewRefresh" id="aroption_on" style="margin-top: -2px;"
1108
- <?php checked( $are ); ?> value="1">
1109
- <span><?php esc_html_e( 'Auto refresh', 'wp-security-audit-log' ); ?></span>
1110
- </label>
1111
- <br/>
1112
- <label for="aroption_off">
1113
- <input type="radio" name="EnableAuditViewRefresh" id="aroption_off" style="margin-top: -2px;"
1114
- <?php checked( $are, false ); ?> value="0">
1115
- <span><?php esc_html_e( 'Do not auto refresh', 'wp-security-audit-log' ); ?></span>
1116
- </label>
1117
- </fieldset>
1118
- </td>
1119
- </tr>
1120
- <!-- Refresh Audit Log Viewer -->
1121
- </tbody>
1122
- </table>
1123
- <!-- Refresh Audit Log -->
1124
-
1125
  <h3><?php esc_html_e( 'Do you want to keep a log of WordPress background activity?', 'wp-security-audit-log' ); ?></h3>
1126
  <p class="description">
1127
  <?php esc_html_e( 'WordPress does a lot of things in the background that you do not necessarily need to know about, such as; deletion of post revisions, deletion of auto saved drafts etc. By default the plugin does not report them since there might be a lot and are irrelevant to the user.', 'wp-security-audit-log' ); ?>
@@ -1166,7 +1193,6 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
1166
  $this->_plugin->settings->SetPruningDateEnabled( isset( $post_array['PruneBy'] ) ? 'date' === $post_array['PruneBy'] : '' );
1167
  $this->_plugin->settings->SetPruningDate( $pruning_date );
1168
  $this->_plugin->settings->set_pruning_unit( $pruning_unit );
1169
- $this->_plugin->settings->SetRefreshAlertsEnabled( $post_array['EnableAuditViewRefresh'] );
1170
  $this->_plugin->settings->SetTimezone( $post_array['Timezone'] );
1171
  $this->_plugin->settings->set_type_username( $post_array['type_username'] );
1172
  $this->_plugin->settings->SetWPBackend( isset( $post_array['WPBackend'] ) ? sanitize_text_field( $post_array['WPBackend'] ) : false );
@@ -1467,7 +1493,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
1467
  <th><label for="wsal-scan-file-size"><?php esc_html_e( 'File Size Limit', 'wp-security-audit-log' ); ?></label></th>
1468
  <td>
1469
  <fieldset>
1470
- <input type="number" id="wsal-scan-file-size" name="wsal-scan-file-size" min="1" max="100" value="<?php echo isset( $this->scan_settings['scan_file_size_limit'] ) ? esc_attr( $this->scan_settings['scan_file_size_limit'] ) : false ?>" /> <?php esc_html_e( 'MB', 'wp-security-audit-log' ); ?>
1471
  </fieldset>
1472
  </td>
1473
  </tr>
@@ -2187,10 +2213,10 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2187
 
2188
  // Get custom post types.
2189
  $custom_post_types = array();
2190
- $output = 'names'; // names or objects, note names is the default
2191
- $operator = 'and'; // Conditions: and, or.
2192
- $post_types = get_post_types( array(), $output, $operator );
2193
- $post_types = array_diff( $post_types, array( 'attachment', 'revision', 'nav_menu_item', 'customize_changeset', 'custom_css' ) );
2194
  foreach ( $post_types as $post_type ) {
2195
  if ( strpos( $post_type, $get_array['term'] ) !== false ) {
2196
  array_push( $custom_post_types, $post_type );
@@ -2266,10 +2292,12 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2266
  if ( ! in_array( $dir_name, $server_dirs, true ) ) {
2267
  $excluded_option[] = $dir_name;
2268
  } else {
2269
- echo wp_json_encode( array(
2270
- 'success' => false,
2271
- 'message' => esc_html__( 'You can exclude this directory using the check boxes above.', 'wp-security-audit-log' ),
2272
- ) );
 
 
2273
  exit();
2274
  }
2275
  } else {
@@ -2285,10 +2313,12 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2285
  $this->_plugin->SetGlobalOption( 'scan-excluded-directories', $excluded_option );
2286
  }
2287
 
2288
- echo wp_json_encode( array(
2289
- 'success' => true,
2290
- 'message' => esc_html__( 'Option added to excluded types.', 'wp-security-audit-log' ),
2291
- ) );
 
 
2292
  } else {
2293
  if ( 'file' === $data_type ) {
2294
  $message = esc_html__( 'This file is already excluded from the scan.', 'wp-security-audit-log' );
@@ -2297,16 +2327,20 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2297
  } elseif ( 'dir' === $data_type ) {
2298
  $message = esc_html__( 'This directory is already excluded from the scan.', 'wp-security-audit-log' );
2299
  }
2300
- echo wp_json_encode( array(
2301
- 'success' => false,
2302
- 'message' => $message,
2303
- ) );
 
 
2304
  }
2305
  } else {
2306
- echo wp_json_encode( array(
2307
- 'success' => false,
2308
- 'message' => esc_html__( 'Option name is empty.', 'wp-security-audit-log' ),
2309
- ) );
 
 
2310
  }
2311
  exit();
2312
  }
@@ -2399,15 +2433,19 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2399
  $this->_plugin->SetGlobalOption( 'site_content', $site_content );
2400
  }
2401
 
2402
- echo wp_json_encode( array(
2403
- 'success' => true,
2404
- 'message' => esc_html__( 'Option removed from excluded scan types.', 'wp-security-audit-log' ),
2405
- ) );
 
 
2406
  } else {
2407
- echo wp_json_encode( array(
2408
- 'success' => false,
2409
- 'message' => esc_html__( 'Something went wrong.', 'wp-security-audit-log' ),
2410
- ) );
 
 
2411
  }
2412
  exit();
2413
  }
@@ -2431,10 +2469,12 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2431
 
2432
  // Return if a cron is running.
2433
  if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
2434
- echo wp_json_encode( array(
2435
- 'success' => false,
2436
- 'message' => esc_html__( 'A cron job is in progress.', 'wp-security-audit-log' ),
2437
- ) );
 
 
2438
  exit();
2439
  }
2440
 
@@ -2459,16 +2499,20 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2459
  if ( ! $this->_plugin->GetGlobalOption( 'stop-scan', false ) ) {
2460
  if ( 0 === $dir ) {
2461
  // Scan started alert.
2462
- $this->_plugin->alerts->Trigger( 6033, array(
2463
- 'CurrentUserID' => '0',
2464
- 'ScanStatus' => 'started',
2465
- ) );
 
 
2466
  } elseif ( 6 === $dir ) {
2467
  // Scan stopped.
2468
- $this->_plugin->alerts->Trigger( 6033, array(
2469
- 'CurrentUserID' => '0',
2470
- 'ScanStatus' => 'stopped',
2471
- ) );
 
 
2472
  }
2473
  $file_changes->detect_file_changes( true, $dir );
2474
  } else {
@@ -2477,15 +2521,19 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2477
  }
2478
  $this->_plugin->SetGlobalOption( 'stop-scan', false );
2479
 
2480
- echo wp_json_encode( array(
2481
- 'success' => true,
2482
- 'message' => esc_html__( 'Scan started successfully.', 'wp-security-audit-log' ),
2483
- ) );
 
 
2484
  } else {
2485
- echo wp_json_encode( array(
2486
- 'success' => false,
2487
- 'message' => esc_html__( 'Something went wrong.', 'wp-security-audit-log' ),
2488
- ) );
 
 
2489
  }
2490
  exit();
2491
  }
@@ -2504,20 +2552,24 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2504
 
2505
  // Die if nonce verification failed.
2506
  if ( ! wp_verify_nonce( $post_array['nonce'], 'wsal-stop-scan' ) ) {
2507
- echo wp_json_encode( array(
2508
- 'success' => false,
2509
- 'message' => esc_html__( 'Nonce verification failed.', 'wp-security-audit-log' ),
2510
- ) );
 
 
2511
  exit();
2512
  }
2513
 
2514
  // Set stop scan option to true.
2515
  $this->_plugin->SetGlobalOption( 'stop-scan', true );
2516
 
2517
- echo wp_json_encode( array(
2518
- 'success' => true,
2519
- 'message' => esc_html__( 'Scan started successfully.', 'wp-security-audit-log' ),
2520
- ) );
 
 
2521
  exit();
2522
  }
2523
 
61
  */
62
  public function __construct( WpSecurityAuditLog $plugin ) {
63
  parent::__construct( $plugin );
64
+ add_action( 'admin_init', array( $this, 'setup_settings_tabs' ) );
65
  add_action( 'wp_ajax_AjaxCheckSecurityToken', array( $this, 'AjaxCheckSecurityToken' ) );
66
  add_action( 'wp_ajax_AjaxRunCleanup', array( $this, 'AjaxRunCleanup' ) );
67
  add_action( 'wp_ajax_AjaxGetAllUsers', array( $this, 'AjaxGetAllUsers' ) );
73
  add_action( 'wp_ajax_wsal_stop_file_changes_scan', array( $this, 'stop_file_changes_scan' ) );
74
  add_action( 'wp_ajax_wsal_reset_settings', array( $this, 'reset_settings' ) );
75
  add_action( 'wp_ajax_wsal_purge_activity', array( $this, 'purge_activity' ) );
76
+ }
77
+
78
+ /**
79
+ * Setup WSAL Settings Page Tabs.
80
+ *
81
+ * @since 3.4
82
+ */
83
+ public function setup_settings_tabs() {
84
+ // @codingStandardsIgnoreStart
85
+ $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : false;
86
+ // @codingStandardsIgnoreEnd
87
+
88
+ // Verify that the current page is WSAL settings page.
89
+ if ( empty( $page ) || $this->GetSafeViewName() !== $page ) {
90
+ return;
91
+ }
92
 
93
  // Tab links.
94
  $wsal_setting_tabs = array(
222
  * @throws Exception - Unrecognized settings tab error.
223
  */
224
  protected function Save() {
225
+ // Call respective tab save functions if they are set. Nonce is already verified at this point.
 
 
226
  if ( ! empty( $this->current_tab ) && ! empty( $this->wsal_setting_tabs[ $this->current_tab ]['save'] ) ) {
227
  call_user_func( $this->wsal_setting_tabs[ $this->current_tab ]['save'] );
228
  } else {
338
  * Method: Get View.
339
  */
340
  public function Render() {
341
+ // Verify nonce if a form is submitted.
342
+ if ( isset( $_POST['_wpnonce'] ) ) {
343
+ check_admin_referer( 'wsal-settings' );
 
 
344
  }
345
 
346
  if ( ! $this->_plugin->settings->CurrentUserCan( 'edit' ) ) {
347
  wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'wp-security-audit-log' ) );
348
  }
349
 
350
+ // Check to see if section parameter is set in the URL.
351
+ $section = isset( $_GET['section'] ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : false;
352
+
353
+ if ( isset( $_POST['submit'] ) ) {
354
  try {
355
+ $this->Save(); // Save settings.
356
+ if ( 'sms-provider' === $this->current_tab && $section && 'test' === $section ) :
357
+ ?>
358
+ <div class="updated">
359
+ <p><?php esc_html_e( 'Message sent successfully.', 'wp-security-audit-log' ); ?></p>
360
+ </div>
361
+ <?php else : ?>
362
+ <div class="updated">
363
+ <p><?php esc_html_e( 'Settings have been saved.', 'wp-security-audit-log' ); ?></p>
364
+ </div>
365
+ <?php
366
+ endif;
367
  } catch ( Exception $ex ) {
368
  ?>
369
  <div class="error"><p><?php esc_html_e( 'Error: ', 'wp-security-audit-log' ); ?><?php echo esc_html( $ex->getMessage() ); ?></p></div>
384
  </div>
385
  <?php
386
  }
 
387
  ?>
388
  <nav id="wsal-tabs" class="nav-tab-wrapper">
389
  <?php foreach ( $this->wsal_setting_tabs as $tab_id => $tab ) : ?>
415
  }
416
  ?>
417
  </div>
418
+ <?php
419
+ if ( 'sms-provider' === $this->current_tab && $section && 'test' === $section ) {
420
+ submit_button( __( 'Send Message', 'wp-security-audit-log' ) );
421
+ } else {
422
+ submit_button();
423
+ }
424
+ ?>
425
  </form>
426
  <script type="text/javascript">
427
  <!--
502
  <!-- / Reverse Proxy / Firewall Options -->
503
  </tbody>
504
  </table>
505
+ <!-- Events Navigation Type -->
506
+
507
+ <h3><?php esc_html_e( 'Do you want the activity log viewer to auto refresh?', 'wp-security-audit-log' ); ?></h3>
508
+ <p class="description"><?php esc_html_e( 'The activity log viewer auto refreshes every 30 seconds when opened so you can see the latest events as they happen almost in real time.', 'wp-security-audit-log' ); ?></p>
509
+ <table class="form-table wsal-tab">
510
+ <tbody>
511
+ <tr>
512
+ <th><label for="aroption_on"><?php esc_html_e( 'Refresh Audit Log Viewer', 'wp-security-audit-log' ); ?></label></th>
513
+ <td>
514
+ <fieldset>
515
+ <?php $are = $this->_plugin->settings->IsRefreshAlertsEnabled(); ?>
516
+ <label for="aroption_on">
517
+ <input type="radio" name="EnableAuditViewRefresh" id="aroption_on" style="margin-top: -2px;" <?php checked( $are ); ?> value="1">
518
+ <span><?php esc_html_e( 'Auto refresh', 'wp-security-audit-log' ); ?></span>
519
+ </label>
520
+ <br/>
521
+ <label for="aroption_off">
522
+ <input type="radio" name="EnableAuditViewRefresh" id="aroption_off" style="margin-top: -2px;" <?php checked( $are, false ); ?> value="0">
523
+ <span><?php esc_html_e( 'Do not auto refresh', 'wp-security-audit-log' ); ?></span>
524
+ </label>
525
+ </fieldset>
526
+ </td>
527
+ </tr>
528
+ <!-- Refresh Audit Log Viewer -->
529
+ </tbody>
530
+ </table>
531
+ <!-- Refresh Audit Log -->
532
 
533
  <h3><?php esc_html_e( 'Display latest events widget in Dashboard & Admin bar', 'wp-security-audit-log' ); ?></h3>
534
  <p class="description">
889
  // Get $_POST global array.
890
  $post_array = filter_input_array( INPUT_POST );
891
 
892
+ $this->_plugin->settings->SetRefreshAlertsEnabled( $post_array['EnableAuditViewRefresh'] );
893
  $this->_plugin->settings->set_events_type_nav( sanitize_text_field( $post_array['events-type-nav'] ) );
894
  $this->_plugin->settings->set_use_email( sanitize_text_field( $post_array['use-email'] ) );
895
  $this->_plugin->settings->SetFromEmail( sanitize_email( $post_array['FromEmail'] ) );
1029
  ?>
1030
  </p>
1031
  <p>
1032
+ <a class="button-primary" href="<?php echo esc_url( add_query_arg( 'action', 'AjaxRunCleanup', admin_url( 'admin-ajax.php' ) ) ); ?>"><?php esc_html_e( 'Purge Old Data', 'wp-security-audit-log' ); ?></a>
1033
  </p>
1034
  <?php endif; ?>
1035
  </td>
1149
  </table>
1150
  <!-- Audit Log Columns -->
1151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1152
  <h3><?php esc_html_e( 'Do you want to keep a log of WordPress background activity?', 'wp-security-audit-log' ); ?></h3>
1153
  <p class="description">
1154
  <?php esc_html_e( 'WordPress does a lot of things in the background that you do not necessarily need to know about, such as; deletion of post revisions, deletion of auto saved drafts etc. By default the plugin does not report them since there might be a lot and are irrelevant to the user.', 'wp-security-audit-log' ); ?>
1193
  $this->_plugin->settings->SetPruningDateEnabled( isset( $post_array['PruneBy'] ) ? 'date' === $post_array['PruneBy'] : '' );
1194
  $this->_plugin->settings->SetPruningDate( $pruning_date );
1195
  $this->_plugin->settings->set_pruning_unit( $pruning_unit );
 
1196
  $this->_plugin->settings->SetTimezone( $post_array['Timezone'] );
1197
  $this->_plugin->settings->set_type_username( $post_array['type_username'] );
1198
  $this->_plugin->settings->SetWPBackend( isset( $post_array['WPBackend'] ) ? sanitize_text_field( $post_array['WPBackend'] ) : false );
1493
  <th><label for="wsal-scan-file-size"><?php esc_html_e( 'File Size Limit', 'wp-security-audit-log' ); ?></label></th>
1494
  <td>
1495
  <fieldset>
1496
+ <input type="number" id="wsal-scan-file-size" name="wsal-scan-file-size" min="1" max="100" value="<?php echo isset( $this->scan_settings['scan_file_size_limit'] ) ? esc_attr( $this->scan_settings['scan_file_size_limit'] ) : false; ?>" /> <?php esc_html_e( 'MB', 'wp-security-audit-log' ); ?>
1497
  </fieldset>
1498
  </td>
1499
  </tr>
2213
 
2214
  // Get custom post types.
2215
  $custom_post_types = array();
2216
+ $output = 'names'; // names or objects, note names is the default
2217
+ $operator = 'and'; // Conditions: and, or.
2218
+ $post_types = get_post_types( array(), $output, $operator );
2219
+ $post_types = array_diff( $post_types, array( 'attachment', 'revision', 'nav_menu_item', 'customize_changeset', 'custom_css' ) );
2220
  foreach ( $post_types as $post_type ) {
2221
  if ( strpos( $post_type, $get_array['term'] ) !== false ) {
2222
  array_push( $custom_post_types, $post_type );
2292
  if ( ! in_array( $dir_name, $server_dirs, true ) ) {
2293
  $excluded_option[] = $dir_name;
2294
  } else {
2295
+ echo wp_json_encode(
2296
+ array(
2297
+ 'success' => false,
2298
+ 'message' => esc_html__( 'You can exclude this directory using the check boxes above.', 'wp-security-audit-log' ),
2299
+ )
2300
+ );
2301
  exit();
2302
  }
2303
  } else {
2313
  $this->_plugin->SetGlobalOption( 'scan-excluded-directories', $excluded_option );
2314
  }
2315
 
2316
+ echo wp_json_encode(
2317
+ array(
2318
+ 'success' => true,
2319
+ 'message' => esc_html__( 'Option added to excluded types.', 'wp-security-audit-log' ),
2320
+ )
2321
+ );
2322
  } else {
2323
  if ( 'file' === $data_type ) {
2324
  $message = esc_html__( 'This file is already excluded from the scan.', 'wp-security-audit-log' );
2327
  } elseif ( 'dir' === $data_type ) {
2328
  $message = esc_html__( 'This directory is already excluded from the scan.', 'wp-security-audit-log' );
2329
  }
2330
+ echo wp_json_encode(
2331
+ array(
2332
+ 'success' => false,
2333
+ 'message' => $message,
2334
+ )
2335
+ );
2336
  }
2337
  } else {
2338
+ echo wp_json_encode(
2339
+ array(
2340
+ 'success' => false,
2341
+ 'message' => esc_html__( 'Option name is empty.', 'wp-security-audit-log' ),
2342
+ )
2343
+ );
2344
  }
2345
  exit();
2346
  }
2433
  $this->_plugin->SetGlobalOption( 'site_content', $site_content );
2434
  }
2435
 
2436
+ echo wp_json_encode(
2437
+ array(
2438
+ 'success' => true,
2439
+ 'message' => esc_html__( 'Option removed from excluded scan types.', 'wp-security-audit-log' ),
2440
+ )
2441
+ );
2442
  } else {
2443
+ echo wp_json_encode(
2444
+ array(
2445
+ 'success' => false,
2446
+ 'message' => esc_html__( 'Something went wrong.', 'wp-security-audit-log' ),
2447
+ )
2448
+ );
2449
  }
2450
  exit();
2451
  }
2469
 
2470
  // Return if a cron is running.
2471
  if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
2472
+ echo wp_json_encode(
2473
+ array(
2474
+ 'success' => false,
2475
+ 'message' => esc_html__( 'A cron job is in progress.', 'wp-security-audit-log' ),
2476
+ )
2477
+ );
2478
  exit();
2479
  }
2480
 
2499
  if ( ! $this->_plugin->GetGlobalOption( 'stop-scan', false ) ) {
2500
  if ( 0 === $dir ) {
2501
  // Scan started alert.
2502
+ $this->_plugin->alerts->Trigger(
2503
+ 6033, array(
2504
+ 'CurrentUserID' => '0',
2505
+ 'ScanStatus' => 'started',
2506
+ )
2507
+ );
2508
  } elseif ( 6 === $dir ) {
2509
  // Scan stopped.
2510
+ $this->_plugin->alerts->Trigger(
2511
+ 6033, array(
2512
+ 'CurrentUserID' => '0',
2513
+ 'ScanStatus' => 'stopped',
2514
+ )
2515
+ );
2516
  }
2517
  $file_changes->detect_file_changes( true, $dir );
2518
  } else {
2521
  }
2522
  $this->_plugin->SetGlobalOption( 'stop-scan', false );
2523
 
2524
+ echo wp_json_encode(
2525
+ array(
2526
+ 'success' => true,
2527
+ 'message' => esc_html__( 'Scan started successfully.', 'wp-security-audit-log' ),
2528
+ )
2529
+ );
2530
  } else {
2531
+ echo wp_json_encode(
2532
+ array(
2533
+ 'success' => false,
2534
+ 'message' => esc_html__( 'Something went wrong.', 'wp-security-audit-log' ),
2535
+ )
2536
+ );
2537
  }
2538
  exit();
2539
  }
2552
 
2553
  // Die if nonce verification failed.
2554
  if ( ! wp_verify_nonce( $post_array['nonce'], 'wsal-stop-scan' ) ) {
2555
+ echo wp_json_encode(
2556
+ array(
2557
+ 'success' => false,
2558
+ 'message' => esc_html__( 'Nonce verification failed.', 'wp-security-audit-log' ),
2559
+ )
2560
+ );
2561
  exit();
2562
  }
2563
 
2564
  // Set stop scan option to true.
2565
  $this->_plugin->SetGlobalOption( 'stop-scan', true );
2566
 
2567
+ echo wp_json_encode(
2568
+ array(
2569
+ 'success' => true,
2570
+ 'message' => esc_html__( 'Scan started successfully.', 'wp-security-audit-log' ),
2571
+ )
2572
+ );
2573
  exit();
2574
  }
2575
 
classes/Views/ToggleAlerts.php CHANGED
@@ -174,7 +174,7 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
174
  $is_custom = ! empty( $events_diff ) ? true : false; // If difference is not empty then mode is custom.
175
  $log_details = $this->_plugin->GetGlobalOption( 'details-level', false ); // Get log level option.
176
 
177
- $subcat_alerts = array( 1004, 2010, 6007, 2111, 2119, 2016, 2053, 7000, 8009, 8014, 9007, 9047, 9027, 9002, 9057, 9063, 9035, 8809, 8813, 6000, 6001, 6028 );
178
  $public_events = $this->_plugin->alerts->get_public_events(); // Get public events.
179
  ?>
180
  <p>
@@ -432,6 +432,8 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
432
  esc_html_e( 'Settings', 'wp-security-audit-log' );
433
  } elseif ( 8014 === $alert->type ) {
434
  esc_html_e( 'Topics', 'wp-security-audit-log' );
 
 
435
  } elseif ( 9007 === $alert->type ) {
436
  esc_html_e( 'Product Admin', 'wp-security-audit-log' );
437
  } elseif ( 9047 === $alert->type ) {
@@ -446,6 +448,8 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
446
  esc_html_e( 'Coupons', 'wp-security-audit-log' );
447
  } elseif ( 9035 === $alert->type ) {
448
  esc_html_e( 'Orders', 'wp-security-audit-log' );
 
 
449
  } elseif ( 8809 === $alert->type ) {
450
  esc_html_e( 'Website Changes', 'wp-security-audit-log' );
451
  } elseif ( 8813 === $alert->type ) {
174
  $is_custom = ! empty( $events_diff ) ? true : false; // If difference is not empty then mode is custom.
175
  $log_details = $this->_plugin->GetGlobalOption( 'details-level', false ); // Get log level option.
176
 
177
+ $subcat_alerts = array( 1004, 2010, 6007, 2111, 2119, 2016, 2053, 7000, 8009, 8014, 4013, 9007, 9047, 9027, 9002, 9057, 9063, 9035, 9083, 8809, 8813, 6000, 6001, 6028 );
178
  $public_events = $this->_plugin->alerts->get_public_events(); // Get public events.
179
  ?>
180
  <p>
432
  esc_html_e( 'Settings', 'wp-security-audit-log' );
433
  } elseif ( 8014 === $alert->type ) {
434
  esc_html_e( 'Topics', 'wp-security-audit-log' );
435
+ } elseif ( 4013 === $alert->type ) {
436
+ esc_html_e( 'User Profile', 'wp-security-audit-log' );
437
  } elseif ( 9007 === $alert->type ) {
438
  esc_html_e( 'Product Admin', 'wp-security-audit-log' );
439
  } elseif ( 9047 === $alert->type ) {
448
  esc_html_e( 'Coupons', 'wp-security-audit-log' );
449
  } elseif ( 9035 === $alert->type ) {
450
  esc_html_e( 'Orders', 'wp-security-audit-log' );
451
+ } elseif ( 9083 === $alert->type ) {
452
+ esc_html_e( 'User Profile', 'wp-security-audit-log' );
453
  } elseif ( 8809 === $alert->type ) {
454
  esc_html_e( 'Website Changes', 'wp-security-audit-log' );
455
  } elseif ( 8813 === $alert->type ) {
classes/Views/addons/html-view.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addons HTML View in Admin.
4
+ *
5
+ * @package wsal
6
+ */
7
+
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
+ exit; // Exit if accessed directly.
10
+ }
11
+
12
+ // Links.
13
+ $more_info = add_query_arg(
14
+ array(
15
+ 'utm_source' => 'plugin',
16
+ 'utm_medium' => 'page',
17
+ 'utm_content' => 'users+sessions+more+info',
18
+ 'utm_campaign' => 'upgrade+premium',
19
+ ),
20
+ 'https://www.wpsecurityauditlog.com/premium-features/'
21
+ );
22
+
23
+ // Trial link arguments.
24
+ $trial_args = array(
25
+ 'page' => 'wsal-auditlog-pricing',
26
+ 'billing_cycle' => 'annual',
27
+ 'trial' => 'true',
28
+ );
29
+
30
+ // Buy Now button link.
31
+ $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', admin_url( 'admin.php' ) );
32
+ $buy_now_target = '';
33
+ $trial_link = add_query_arg( $trial_args, admin_url( 'admin.php' ) );
34
+
35
+ // If user is not super admin and website is multisite then change the URL.
36
+ if ( $this->_plugin->IsMultisite() && ! is_super_admin() ) {
37
+ $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
38
+ $trial_link = 'https://www.wpsecurityauditlog.com/pricing/';
39
+ $buy_now_target = ' target="_blank"';
40
+ } elseif ( $this->_plugin->IsMultisite() && is_super_admin() ) {
41
+ $buy_now = add_query_arg( 'page', 'wsal-auditlog-pricing', network_admin_url( 'admin.php' ) );
42
+ $trial_link = add_query_arg( $trial_args, network_admin_url( 'admin.php' ) );
43
+ } elseif ( ! $this->_plugin->IsMultisite() && ! current_user_can( 'manage_options' ) ) {
44
+ $buy_now = 'https://www.wpsecurityauditlog.com/pricing/';
45
+ $trial_link = 'https://www.wpsecurityauditlog.com/pricing/';
46
+ $buy_now_target = ' target="_blank"';
47
+ }
48
+ ?>
49
+
50
+ <div class="user-login-row">
51
+ <div class="container">
52
+ <div class="title-wrap">
53
+ <h3><?php echo esc_html( $title ); ?></h3>
54
+ </div>
55
+ <div class="user-login-content-wrap">
56
+ <div class="user-login-content">
57
+ <div class="user-content-right">
58
+ <div class="img-wrap">
59
+ <img src="<?php echo esc_url( $addon_img ); ?>" alt="">
60
+ </div>
61
+ </div>
62
+ <div class="user-content-left">
63
+ <p><?php echo esc_html( $description ); ?></p>
64
+ <ul class="premium-list">
65
+ <?php foreach ( $premium_list as $item ) : ?>
66
+ <li><?php echo esc_html( $item ); ?></li>
67
+ <?php endforeach; ?>
68
+ </ul>
69
+ <?php if ( $subtext ) : ?>
70
+ <p><?php echo esc_html( $subtext ); ?></p>
71
+ <?php endif; ?>
72
+ </div>
73
+ </div>
74
+ <div class="user-login-cta">
75
+ <a href="<?php echo esc_url( $buy_now ); ?>" class="user-gradient-cta"<?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
76
+ <a href="<?php echo esc_url( $more_info ); ?>" class="user-bordered-cta" target="_blank"><?php esc_html_e( 'More Information', 'wp-security-audit-log' ); ?></a>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </div>
81
+ <div class="user-login-row">
82
+ <div class="container">
83
+ <div class="title-wrap">
84
+ <h3><?php esc_html_e( 'Screenshots', 'wp-security-audit-log' ); ?></h3>
85
+ </div>
86
+ <div class="user-login-content-wrap">
87
+ <?php foreach ( $screenshots as $screenshot ) : ?>
88
+ <div class="user-login-content user-screenshots">
89
+ <div class="user-content-right">
90
+ <a class="swipebox img-wrap" href="<?php echo esc_url( $screenshot['img'] ); ?>" title="<?php echo esc_attr( $screenshot['desc'] ); ?>">
91
+ <img src="<?php echo esc_url( $screenshot['img'] ); ?>" alt="">
92
+ </a>
93
+ </div>
94
+ <div class="user-content-left">
95
+ <p><?php echo esc_html( $screenshot['desc'] ); ?></p>
96
+ </div>
97
+ </div>
98
+ <?php endforeach; ?>
99
+ <div class="user-login-cta">
100
+ <a href="<?php echo esc_url( $buy_now ); ?>" class="user-gradient-cta"<?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Upgrade to Premium', 'wp-security-audit-log' ); ?></a>
101
+ <a href="<?php echo esc_url( $trial_link ); ?>" class="user-bordered-cta"<?php echo esc_attr( $buy_now_target ); ?>><?php esc_html_e( 'Start Free 14-Day Premium Trial', 'wp-security-audit-log' ); ?></a>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ </div>
css/auditlog.css CHANGED
@@ -265,57 +265,70 @@ td.column-user {
265
  /**
266
  * Audit Log Admin Notice
267
  */
268
- .wsal_notice__wrapper {
269
- display: -webkit-box;
270
- display: -ms-flexbox;
271
- display: flex;
272
- -webkit-box-align: center;
273
- -ms-flex-align: center;
274
- align-items: center;
275
- -webkit-box-pack: justify;
276
- -ms-flex-pack: justify;
277
- justify-content: space-between;
278
  position: relative;
 
 
 
 
 
279
  margin: 12px 0;
280
  }
281
 
282
  .wsal_notice__wrapper .wsal_notice__content {
283
- display: -webkit-box;
284
- display: -ms-flexbox;
285
- display: flex;
286
- -webkit-box-align: start;
287
- -ms-flex-align: start;
288
- align-items: flex-start;
 
 
 
 
 
 
 
 
289
  }
290
 
291
  .wsal_notice__btns {
 
 
 
292
  text-align: right;
293
  }
294
 
295
  .wsal_notice__btns a.wsal_notice__btn {
296
- /* display: block; */
297
- margin-bottom: 5px;
 
 
298
  }
299
 
300
- .wsal_notice__btns > div {
301
- width: 110px;
302
- margin-top: 5px;
303
  }
304
 
305
- .wsal_notice__btns a.wsal_notice__btn_dismiss {
306
- color: #AAA;
307
- margin-left: 2px;
308
  }
309
 
310
- .wsal_notice__wrapper img {
311
- height: 70px;
312
- margin-right: 5px;
313
  }
314
 
315
- div.wsal_notice__wrapper p {
316
  display: inline-block;
317
- vertical-align: top;
318
- margin-right: 16px;
 
 
 
 
 
319
  }
320
 
321
  .wsal-premium {
265
  /**
266
  * Audit Log Admin Notice
267
  */
268
+ .wsal_notice {
 
 
 
 
 
 
 
 
 
269
  position: relative;
270
+ }
271
+
272
+ .wsal_notice__wrapper {
273
+ display: table;
274
+ width: 100%;
275
  margin: 12px 0;
276
  }
277
 
278
  .wsal_notice__wrapper .wsal_notice__content {
279
+ display: table-cell;
280
+ vertical-align: middle;
281
+ padding-right: 12px;
282
+ }
283
+
284
+ .wsal_notice__wrapper img {
285
+ height: 70px;
286
+ margin-right: 5px;
287
+ }
288
+
289
+ div.wsal_notice__wrapper p {
290
+ display: inline-block;
291
+ width: 89%;
292
+ vertical-align: top;
293
  }
294
 
295
  .wsal_notice__btns {
296
+ display: table-cell;
297
+ vertical-align: top;
298
+ width: 235px;
299
  text-align: right;
300
  }
301
 
302
  .wsal_notice__btns a.wsal_notice__btn {
303
+ background: #00ad50;
304
+ border-color: #00ad50 #009344 #009344 #009344;
305
+ box-shadow: 0 1px 0 #00ad50;
306
+ text-shadow: none;
307
  }
308
 
309
+ .wsal_notice__btns a.wsal_notice__btn:hover {
310
+ background: #00b353;
311
+ border-color: #00ad50 #009344 #009344 #009344;
312
  }
313
 
314
+ .wsal_notice__btns a.button-primary {
315
+ margin-bottom: 7px;
 
316
  }
317
 
318
+ .wsal_notice__btns > div {
319
+ width: 110px;
320
+ margin-top: 5px;
321
  }
322
 
323
+ .wsal_notice__btns a.wsal_notice__btn_dismiss {
324
  display: inline-block;
325
+ color: #AAA;
326
+ font-size: 11px;
327
+ text-decoration: none;
328
+ padding: 0;
329
+ position: absolute;
330
+ right: 14px;
331
+ bottom: 3px;
332
  }
333
 
334
  .wsal-premium {
css/extensions.css CHANGED
@@ -1,182 +1,416 @@
1
- .extension {
2
- position:relative;
3
- float:left;
4
- box-sizing:border-box;
5
- width:300px;
6
- height:250px;
7
- margin:10px 20px 10px 0;
8
- border:1px solid #ccc
9
- }
10
- .extension p {
11
- margin:0;padding:10px
12
- }
13
- .extension h3 {
14
- box-sizing:border-box;
15
- height:110px;
16
- margin:0;
17
- padding:20px 10px 0 120px;
18
- border-bottom:1px solid #ccc;
19
- background:10px 10px/90px 90px no-repeat #fff
20
- }
21
- .extension a {
22
- text-decoration:none
23
- }
24
- .extension a.button-primary {
25
- position: absolute;
26
- bottom: 20px;
27
- }
28
- .all h3 {
29
- background-image:url(../img/all.jpg)
30
- }
31
- .user-managment h3 {
32
- background-image:url(../img/monitoring.jpg)
33
- }
34
- .email-notifications h3 {
35
- background-image:url(../img/envelope.jpg);
36
- }
37
- .reports h3 {
38
- background-image:url(../img/file.jpg);
39
- }
40
- .search-ext h3 {
41
- background-image:url(../img/search.jpg);
42
- }
43
- .external-db h3 {
44
- background-image:url(../img/database.jpg);
45
- }
46
- .wrap-advertising-page {
47
- margin-top: 15px;
48
- padding-top: 9px;
49
- border-top: 1px solid #ccc;
50
- }
51
- .wrap-advertising-page-single {
52
- margin-top: 15px;
53
- padding: 20px;
54
- background-color: #fff;
55
- border: 1px solid #ccc;
56
- }
57
- .wrap-advertising-page-single .icon {
58
- float:left;
59
- width: 110px;
60
- height: 110px;
61
- margin: 0;
62
- background: 0px 10px/90px 90px no-repeat #fff
63
- }
64
- .clear {
65
- clear: both;
66
- }
67
- .button-blue {
68
- color: #fff;
69
- text-decoration: none;
70
- display: inline-block;
71
- font-size: 13px;
72
- line-height: 26px;
73
- height: 28px;
74
- margin: 0;
75
- padding: 0 10px 1px;
76
- cursor: pointer;
77
- border-width: 1px;
78
- border-style: solid;
79
- -webkit-appearance: none;
80
- -webkit-border-radius: 3px;
81
- border-radius: 3px;
82
- white-space: nowrap;
83
- -webkit-box-sizing: border-box;
84
- -moz-box-sizing: border-box;
85
- box-sizing: border-box;
86
- background-color: #0026ff;
87
- }
88
- .text-red {
89
- color: red;
90
- }
91
- .button-blue:hover,
92
- .button-blue:focus {
93
- color: #fff;
94
- }
95
-
96
- .wsal-row {
97
- display: -webkit-box;
98
- display: -ms-flexbox;
99
- display: flex;
100
- -webkit-flex-wrap: wrap;
101
- -ms-flex-wrap: wrap;
102
- flex-wrap: wrap;
103
- }
104
-
105
- .wsal-features-list {
106
- list-style-type: disc;
107
- line-height: 2;
108
- padding: 0 0 0 15px;
109
- }
110
-
111
- .wp-core-ui .wsal-extension-btn {
112
- margin-bottom: 10px;
113
- }
114
-
115
- .wsal-block .activity-block {
116
- padding: 0 20px 5px;
117
- }
118
-
119
- .wsal-block p {
120
- line-height: 2;
121
- }
122
-
123
- .wsal-block p .wsal-youtube-embed {
124
- display: block;
125
- margin: 0 auto;
126
- }
127
-
128
- .rating-link {
129
- display: inline-block;
130
- line-height: 1.5;
131
- color: #ffb900;
132
- text-decoration: none;
133
- box-shadow: none;
134
- }
135
-
136
- .activity-block .rating-link:focus {
137
- outline: 0;
138
- }
139
-
140
- .activity-block .rating-link .dashicons {
141
- font-size: 17px;
142
- }
143
-
144
- .wsal-nav-tabs-wrap {
145
- position: relative;
146
- padding-right: 300px;
147
- }
148
-
149
- .wsal-sidebar-advert {
150
- position: absolute;
151
- top: 10px;
152
- right: 57px;
153
- width: 200px;
154
- }
155
-
156
- .postbox .hndl {
157
- padding: 0 12px;
158
- }
159
-
160
- .swipebox {
161
- display: inline-block;
162
- margin-top: 10px;
163
- }
164
-
165
- .wsal-tab {
166
- display: none;
167
- margin-top: 0px;
168
- }
169
- .wsal-tab th {
170
- padding-left: 20px;
171
- }
172
- .wsal-tab td {
173
- padding-left: 20px;
174
- }
175
-
176
- .wsal-tab__heading {
177
- font-size: 23px;
178
- font-weight: 400;
179
- margin: 0;
180
- padding: 9px 0 4px;
181
- line-height: 29px;
182
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Addon Page Styles
3
+ */
4
+ @charset "UTF-8";
5
+ /* CSS Document */
6
+
7
+ /*==============================================================
8
+ Common Styles Initials
9
+ ==============================================================*/
10
+
11
+ html {
12
+ -webkit-text-size-adjust: none; /* Prevent font scaling in landscape */
13
+ width: 100%;
14
+ height: 100%;
15
+ -webkit-font-smoothing: antialiased;
16
+ -moz-font-smoothing: antialiased;
17
+ -moz-osx-font-smoothing: grayscale;
18
+ }
19
+
20
+ input[type="submit"] {
21
+ -webkit-appearance: none;
22
+ -webkit-border-radius: 0;
23
+ border-radius: 0;
24
+ }
25
+
26
+ *, *:after, *:before {
27
+ box-sizing: border-box;
28
+ margin: 0;
29
+ padding: 0;
30
+ }
31
+
32
+ body {
33
+ /* margin: 0;
34
+ padding: 0;
35
+ font-family: 'Roboto', sans-serif;
36
+ -webkit-font-smoothing: antialiased;
37
+ font-weight: 400;
38
+ width: 100%;
39
+ min-height: 100%;
40
+ color: #23282d;
41
+ background: #fff; */
42
+ }
43
+
44
+ a {
45
+ outline: none;
46
+ text-decoration: none;
47
+ color: #23282d;
48
+ }
49
+
50
+ a:hover, a:focus{
51
+ outline: none;
52
+ text-decoration: none;
53
+ }
54
+
55
+ input, textarea, select {
56
+ outline: none;
57
+ resize: none;
58
+ font-family: 'Roboto', sans-serif;
59
+ }
60
+
61
+ a, input, button{
62
+ outline:none !important;
63
+ }
64
+
65
+ button::-moz-focus-inner {
66
+ border: 0;
67
+ }
68
+
69
+ h1, h2, h3, h4, h5, h6 {
70
+ margin: 0;
71
+ padding: 0;
72
+ font-weight: normal;
73
+ }
74
+
75
+ img {
76
+ border: 0;
77
+ vertical-align: top;
78
+ max-width: 100%;
79
+ height: auto;
80
+ }
81
+
82
+ ul, ol {
83
+ margin: 0;
84
+ padding: 0;
85
+ list-style: none;
86
+ }
87
+
88
+ p {
89
+ margin: 0 0 15px 0;
90
+ padding: 0;
91
+ }
92
+
93
+ /*==============================================================
94
+ Custom Style
95
+ ==============================================================*/
96
+
97
+ .container {
98
+ max-width: 1170px;
99
+ width:100%;
100
+ /* padding: 0 15px; */
101
+ margin: auto;
102
+ }
103
+
104
+ .user-login-row {
105
+ margin-top: 20px;
106
+ }
107
+ .user-login-row .title-wrap {
108
+ padding: 20px 30px;
109
+ border-top-left-radius: 4px;
110
+ border-top-right-radius: 4px;
111
+ background-color: #4f4847;
112
+ }
113
+ .user-login-row .title-wrap h3 {
114
+ font-size: 20px;
115
+ line-height: 24px;
116
+ color: #f7e71c;
117
+ }
118
+ .user-login-content-wrap {
119
+ padding: 30px 15px 30px;
120
+ border-bottom-left-radius: 4px;
121
+ border-bottom-right-radius: 4px;
122
+ background-color: #f7f5eb;
123
+ }
124
+ .user-login-content {
125
+ display: -ms-flexbox;
126
+ display: flex;
127
+ -ms-flex-direction: row-reverse;
128
+ flex-direction: row-reverse;
129
+ -ms-flex-wrap: wrap;
130
+ flex-wrap: wrap;
131
+ padding-bottom: 20px;
132
+ }
133
+ .user-login-content .user-content-left {
134
+ width: 56.86%;
135
+ padding: 0 15px;
136
+ }
137
+ .user-login-content .user-content-left p{
138
+ font-size: 15px;
139
+ line-height: 24px;
140
+ margin-top: 5px;
141
+ }
142
+ .user-login-content .user-content-right {
143
+ width: 43.14%;
144
+ padding: 0 15px;
145
+ }
146
+
147
+ ul.premium-list li {
148
+ font-size: 15px;
149
+ line-height: 24px;
150
+ color: #5b5e61;
151
+ padding: 0 0 10px 24px;
152
+ position: relative;
153
+ }
154
+
155
+ ul.premium-list li:before {
156
+ content: '';
157
+ position: absolute;
158
+ left: 0;
159
+ top: 4px;
160
+ width: 14px;
161
+ height: 14px;
162
+ background-image: url('../img/check-icon.png');
163
+ background-repeat: no-repeat;
164
+ background-position: left center;
165
+ background-size: contain;
166
+ }
167
+
168
+ .user-login-cta {
169
+ padding: 0 15px;
170
+ }
171
+ .user-login-cta a{
172
+ font-family: 'Montserrat', sans-serif;
173
+ display: inline-block;
174
+ margin: 0 20px 10px 0;
175
+ }
176
+ .user-login-cta a:last-child{
177
+ margin-right: 0;
178
+ }
179
+ .user-login-cta a.user-gradient-cta{
180
+ font-size: 15px;
181
+ line-height: 45px;
182
+ font-weight: 500;
183
+ text-transform: uppercase;
184
+ letter-spacing: 0.2px;
185
+ background-color: #109246;
186
+ color: #fff;
187
+ padding: 0 20px;
188
+ border-radius: 5px;
189
+ background: linear-gradient(135deg,#bdd63a,#009344);
190
+ }
191
+ .user-login-cta a.user-bordered-cta{
192
+ font-size: 15px;
193
+ line-height: 39px;
194
+ font-weight: 500;
195
+ text-transform: uppercase;
196
+ letter-spacing: 0.2px;
197
+ background-color: transparent;
198
+ color: #0f9944;
199
+ padding: 0 20px;
200
+ border: solid 3px #0c9743;
201
+ border-radius: 5px;
202
+ }
203
+
204
+ .user-screenshots{
205
+ padding-bottom: 45px;
206
+ }
207
+ .user-screenshots:first-child{
208
+ padding-top: 26px;
209
+ }
210
+ .user-login-content.user-screenshots .user-content-right{
211
+ width: 73.33%;
212
+ }
213
+ .user-login-content.user-screenshots .user-content-left{
214
+ width: 26.67%;
215
+ }
216
+
217
+ @media(max-width: 767px){
218
+ .user-login-row{ padding-bottom: 35px; }
219
+ .user-login-row .title-wrap{ padding: 15px 20px; }
220
+ .user-login-row .title-wrap h3{ font-size: 16px; line-height: 20px; }
221
+ .user-login-content-wrap{ padding: 30px 0px; }
222
+ .user-login-content{ display: block; text-align: center; }
223
+ .user-login-content .user-content-right,
224
+ .user-login-content .user-content-left{ width: 100% !important; }
225
+ .user-login-content .user-content-right .img-wrap{ padding-bottom: 20px; }
226
+ .user-login-content .user-content-left p{ margin-top: 0 ;}
227
+ ul.premium-list{ display: inline-block; }
228
+ ul.premium-list li{ text-align: left; }
229
+ .user-login-cta{text-align: center;}
230
+ .user-login-cta a{ margin: 0 10px 10px !important; }
231
+ .user-screenshots:first-child{ padding-top: 0; }
232
+ .user-login-content{ padding-bottom: 20px; }
233
+ }
234
+
235
+ /* --------------------------------------------
236
+ Old Styles
237
+ -------------------------------------------- */
238
+ .extension {
239
+ position:relative;
240
+ float:left;
241
+ box-sizing:border-box;
242
+ width:300px;
243
+ height:250px;
244
+ margin:10px 20px 10px 0;
245
+ border:1px solid #ccc
246
+ }
247
+ .extension p {
248
+ margin:0;padding:10px
249
+ }
250
+ .extension h3 {
251
+ box-sizing:border-box;
252
+ height:110px;
253
+ margin:0;
254
+ padding:20px 10px 0 120px;
255
+ border-bottom:1px solid #ccc;
256
+ background:10px 10px/90px 90px no-repeat #fff
257
+ }
258
+ .extension a {
259
+ text-decoration:none
260
+ }
261
+ .extension a.button-primary {
262
+ position: absolute;
263
+ bottom: 20px;
264
+ }
265
+ .user-managment h3 {
266
+ background-image:url(../img/monitoring.jpg)
267
+ }
268
+ .email-notifications h3 {
269
+ background-image:url(../img/envelope.jpg);
270
+ }
271
+ .reports h3 {
272
+ background-image:url(../img/file.jpg);
273
+ }
274
+ .search-ext h3 {
275
+ background-image:url(../img/search.jpg);
276
+ }
277
+ .external-db h3 {
278
+ background-image:url(../img/database.jpg);
279
+ }
280
+ .wrap-advertising-page {
281
+ margin-top: 15px;
282
+ padding-top: 9px;
283
+ border-top: 1px solid #ccc;
284
+ }
285
+ .wrap-advertising-page-single {
286
+ margin-top: 15px;
287
+ padding: 20px;
288
+ background-color: #fff;
289
+ border: 1px solid #ccc;
290
+ }
291
+ .wrap-advertising-page-single .icon {
292
+ float:left;
293
+ width: 110px;
294
+ height: 110px;
295
+ margin: 0;
296
+ background: 0px 10px/90px 90px no-repeat #fff
297
+ }
298
+ .clear {
299
+ clear: both;
300
+ }
301
+ .button-blue {
302
+ color: #fff;
303
+ text-decoration: none;
304
+ display: inline-block;
305
+ font-size: 13px;
306
+ line-height: 26px;
307
+ height: 28px;
308
+ margin: 0;
309
+ padding: 0 10px 1px;
310
+ cursor: pointer;
311
+ border-width: 1px;
312
+ border-style: solid;
313
+ -webkit-appearance: none;
314
+ -webkit-border-radius: 3px;
315
+ border-radius: 3px;
316
+ white-space: nowrap;
317
+ -webkit-box-sizing: border-box;
318
+ -moz-box-sizing: border-box;
319
+ box-sizing: border-box;
320
+ background-color: #0026ff;
321
+ }
322
+ .text-red {
323
+ color: red;
324
+ }
325
+ .button-blue:hover,
326
+ .button-blue:focus {
327
+ color: #fff;
328
+ }
329
+
330
+ .wsal-row {
331
+ display: -webkit-box;
332
+ display: -ms-flexbox;
333
+ display: flex;
334
+ -webkit-flex-wrap: wrap;
335
+ -ms-flex-wrap: wrap;
336
+ flex-wrap: wrap;
337
+ }
338
+
339
+ .wsal-features-list {
340
+ list-style-type: disc;
341
+ line-height: 2;
342
+ padding: 0 0 0 15px;
343
+ }
344
+
345
+ .wp-core-ui .wsal-extension-btn {
346
+ margin-bottom: 10px;
347
+ }
348
+
349
+ .wsal-block .activity-block {
350
+ padding: 0 20px 5px;
351
+ }
352
+
353
+ .wsal-block p {
354
+ line-height: 2;
355
+ }
356
+
357
+ .wsal-block p .wsal-youtube-embed {
358
+ display: block;
359
+ margin: 0 auto;
360
+ }
361
+
362
+ .rating-link {
363
+ display: inline-block;
364
+ line-height: 1.5;
365
+ color: #ffb900;
366
+ text-decoration: none;
367
+ box-shadow: none;
368
+ }
369
+
370
+ .activity-block .rating-link:focus {
371
+ outline: 0;
372
+ }
373
+
374
+ .activity-block .rating-link .dashicons {
375
+ font-size: 17px;
376
+ }
377
+
378
+ .wsal-nav-tabs-wrap {
379
+ position: relative;
380
+ padding-right: 300px;
381
+ }
382
+
383
+ .wsal-sidebar-advert {
384
+ position: absolute;
385
+ top: 10px;
386
+ right: 57px;
387
+ width: 200px;
388
+ }
389
+
390
+ .postbox .hndl {
391
+ padding: 0 12px;
392
+ }
393
+
394
+ .swipebox {
395
+ display: inline-block;
396
+ margin-top: 10px;
397
+ }
398
+
399
+ .wsal-tab {
400
+ display: none;
401
+ margin-top: 0px;
402
+ }
403
+ .wsal-tab th {
404
+ padding-left: 20px;
405
+ }
406
+ .wsal-tab td {
407
+ padding-left: 20px;
408
+ }
409
+
410
+ .wsal-tab__heading {
411
+ font-size: 23px;
412
+ font-weight: 400;
413
+ margin: 0;
414
+ padding: 9px 0 4px;
415
+ line-height: 29px;
416
+ }
css/settings.css CHANGED
@@ -253,3 +253,30 @@ a.disabled {
253
  margin-right: 10px;
254
  box-shadow: none;
255
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  margin-right: 10px;
254
  box-shadow: none;
255
  }
256
+
257
+ .nav-sub-tabs {
258
+ list-style: none;
259
+ margin: -8px 0 8px;
260
+ padding: 0;
261
+ font-size: 13px;
262
+ color: #666;
263
+ }
264
+
265
+ .nav-sub-tabs li {
266
+ display: inline-block;
267
+ margin: 0;
268
+ padding: 0;
269
+ white-space: nowrap;
270
+ }
271
+
272
+ .nav-sub-tabs a {
273
+ line-height: 2;
274
+ padding: 3px;
275
+ text-decoration: none;
276
+ }
277
+
278
+ .nav-sub-tabs a.current {
279
+ color: #000;
280
+ font-weight: 600;
281
+ border: none;
282
+ }
defaults.php CHANGED
@@ -139,6 +139,7 @@ function wsaldefaults_wsal_init() {
139
  ),
140
  )
141
  );
 
142
  // Create list of default alerts.
143
  $wsal->alerts->RegisterGroup(
144
  array(
@@ -158,6 +159,7 @@ function wsaldefaults_wsal_init() {
158
  array( 1005, E_WARNING, __( 'User logged in with existing session(s)', 'wp-security-audit-log' ), __( 'Successfully logged in. Another session from %IPAddress% for this user already exist.', 'wp-security-audit-log' ) ),
159
  array( 1006, E_CRITICAL, __( 'User logged out all other sessions with the same username', 'wp-security-audit-log' ), __( 'Logged out all other sessions with the same username.', 'wp-security-audit-log' ) ),
160
  array( 1007, E_CRITICAL, __( 'User session destroyed and logged out', 'wp-security-audit-log' ), __( 'Logged out session %TargetSessionID% which belonged to %TargetUserName%', 'wp-security-audit-log' ) ),
 
161
  array( 2010, E_NOTICE, __( 'User uploaded file from Uploads directory', 'wp-security-audit-log' ), __( 'Uploaded the file %FileName% in %FilePath%.', 'wp-security-audit-log' ) ),
162
  array( 2011, E_WARNING, __( 'User deleted file from Uploads directory', 'wp-security-audit-log' ), __( 'Deleted the file %FileName% from %FilePath%.', 'wp-security-audit-log' ) ),
163
  array( 6007, E_NOTICE, __( 'User requests non-existing pages (404 Error Pages)', 'wp-security-audit-log' ), __( 'Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. %LinkFile%%URL%', 'wp-security-audit-log' ) ),
@@ -469,7 +471,6 @@ function wsaldefaults_wsal_init() {
469
  array( 4010, E_CRITICAL, __( 'Existing user added to a site', 'wp-security-audit-log' ), __( 'Added the existing user %TargetUsername% with %TargetUserRole% role to site %SiteName%.', 'wp-security-audit-log' ) ),
470
  array( 4011, E_CRITICAL, __( 'User removed from site', 'wp-security-audit-log' ), __( 'Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% site.', 'wp-security-audit-log' ) ),
471
  array( 4012, E_CRITICAL, __( 'New network user created', 'wp-security-audit-log' ), __( 'Created a new network user %NewUserData->Username%.', 'wp-security-audit-log' ) ),
472
- array( 4013, E_CRITICAL, __( 'The forum role of a user was changed by another WordPress user', 'wp-security-audit-log' ), __( 'Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole% by %UserChanger%.', 'wp-security-audit-log' ) ),
473
  array( 7000, E_CRITICAL, __( 'New site added on the network', 'wp-security-audit-log' ), __( 'Added the site %SiteName% to the network.', 'wp-security-audit-log' ) ),
474
  array( 7001, E_CRITICAL, __( 'Existing site archived', 'wp-security-audit-log' ), __( 'Archived the site %SiteName%.', 'wp-security-audit-log' ) ),
475
  array( 7002, E_CRITICAL, __( 'Archived site has been unarchived', 'wp-security-audit-log' ), __( 'Unarchived the site %SiteName%.', 'wp-security-audit-log' ) ),
@@ -510,6 +511,7 @@ function wsaldefaults_wsal_init() {
510
  array( 8020, E_WARNING, __( 'User permanently deleted topic', 'wp-security-audit-log' ), __( 'Permanently deleted the topic %TopicName%.', 'wp-security-audit-log' ) ),
511
  array( 8021, E_WARNING, __( 'User restored topic from trash', 'wp-security-audit-log' ), __( 'Restored the topic %TopicName% from trash.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
512
  array( 8022, E_NOTICE, __( 'User changed visibility of a topic', 'wp-security-audit-log' ), __( 'Changed the visibility of the topic %TopicName% from %OldVisibility% to %NewVisibility%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
 
513
  ),
514
 
515
  /**
@@ -605,6 +607,8 @@ function wsaldefaults_wsal_init() {
605
  array( 9039, E_WARNING, __( 'User permanently deleted a WooCommerce order', 'wp-security-audit-log' ), __( 'Permanently deleted the WooCommerce order %OrderTitle%.', 'wp-security-audit-log' ) ),
606
  array( 9040, E_NOTICE, __( 'User edited a WooCommerce order', 'wp-security-audit-log' ), __( 'Edited the WooCommerce order %OrderTitle%. %EditorLinkOrder%.', 'wp-security-audit-log' ) ),
607
  array( 9041, E_WARNING, __( 'User refunded a WooCommerce order', 'wp-security-audit-log' ), __( 'Refunded the WooCommerce order %OrderTitle%. %EditorLinkOrder%.', 'wp-security-audit-log' ) ),
 
 
608
  ),
609
 
610
  /**
@@ -644,4 +648,4 @@ function wsaldefaults_wsal_init() {
644
  load_include_custom_file( $wsal );
645
  }
646
  }
647
- add_action( 'init', 'wsaldefaults_wsal_init' );
139
  ),
140
  )
141
  );
142
+
143
  // Create list of default alerts.
144
  $wsal->alerts->RegisterGroup(
145
  array(
159
  array( 1005, E_WARNING, __( 'User logged in with existing session(s)', 'wp-security-audit-log' ), __( 'Successfully logged in. Another session from %IPAddress% for this user already exist.', 'wp-security-audit-log' ) ),
160
  array( 1006, E_CRITICAL, __( 'User logged out all other sessions with the same username', 'wp-security-audit-log' ), __( 'Logged out all other sessions with the same username.', 'wp-security-audit-log' ) ),
161
  array( 1007, E_CRITICAL, __( 'User session destroyed and logged out', 'wp-security-audit-log' ), __( 'Logged out session %TargetSessionID% which belonged to %TargetUserName%', 'wp-security-audit-log' ) ),
162
+ array( 1008, E_WARNING, __( 'Switched to another user', 'wp-security-audit-log' ), __( 'Switched to %TargetUserName% with role %TargetUserRole%.', 'wp-security-audit-log' ) ),
163
  array( 2010, E_NOTICE, __( 'User uploaded file from Uploads directory', 'wp-security-audit-log' ), __( 'Uploaded the file %FileName% in %FilePath%.', 'wp-security-audit-log' ) ),
164
  array( 2011, E_WARNING, __( 'User deleted file from Uploads directory', 'wp-security-audit-log' ), __( 'Deleted the file %FileName% from %FilePath%.', 'wp-security-audit-log' ) ),
165
  array( 6007, E_NOTICE, __( 'User requests non-existing pages (404 Error Pages)', 'wp-security-audit-log' ), __( 'Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. %LinkFile%%URL%', 'wp-security-audit-log' ) ),
471
  array( 4010, E_CRITICAL, __( 'Existing user added to a site', 'wp-security-audit-log' ), __( 'Added the existing user %TargetUsername% with %TargetUserRole% role to site %SiteName%.', 'wp-security-audit-log' ) ),
472
  array( 4011, E_CRITICAL, __( 'User removed from site', 'wp-security-audit-log' ), __( 'Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% site.', 'wp-security-audit-log' ) ),
473
  array( 4012, E_CRITICAL, __( 'New network user created', 'wp-security-audit-log' ), __( 'Created a new network user %NewUserData->Username%.', 'wp-security-audit-log' ) ),
 
474
  array( 7000, E_CRITICAL, __( 'New site added on the network', 'wp-security-audit-log' ), __( 'Added the site %SiteName% to the network.', 'wp-security-audit-log' ) ),
475
  array( 7001, E_CRITICAL, __( 'Existing site archived', 'wp-security-audit-log' ), __( 'Archived the site %SiteName%.', 'wp-security-audit-log' ) ),
476
  array( 7002, E_CRITICAL, __( 'Archived site has been unarchived', 'wp-security-audit-log' ), __( 'Unarchived the site %SiteName%.', 'wp-security-audit-log' ) ),
511
  array( 8020, E_WARNING, __( 'User permanently deleted topic', 'wp-security-audit-log' ), __( 'Permanently deleted the topic %TopicName%.', 'wp-security-audit-log' ) ),
512
  array( 8021, E_WARNING, __( 'User restored topic from trash', 'wp-security-audit-log' ), __( 'Restored the topic %TopicName% from trash.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
513
  array( 8022, E_NOTICE, __( 'User changed visibility of a topic', 'wp-security-audit-log' ), __( 'Changed the visibility of the topic %TopicName% from %OldVisibility% to %NewVisibility%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
514
+ array( 4013, E_CRITICAL, __( 'The forum role of a user was changed by another WordPress user', 'wp-security-audit-log' ), __( 'Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole% by %UserChanger%.', 'wp-security-audit-log' ) ),
515
  ),
516
 
517
  /**
607
  array( 9039, E_WARNING, __( 'User permanently deleted a WooCommerce order', 'wp-security-audit-log' ), __( 'Permanently deleted the WooCommerce order %OrderTitle%.', 'wp-security-audit-log' ) ),
608
  array( 9040, E_NOTICE, __( 'User edited a WooCommerce order', 'wp-security-audit-log' ), __( 'Edited the WooCommerce order %OrderTitle%. %EditorLinkOrder%.', 'wp-security-audit-log' ) ),
609
  array( 9041, E_WARNING, __( 'User refunded a WooCommerce order', 'wp-security-audit-log' ), __( 'Refunded the WooCommerce order %OrderTitle%. %EditorLinkOrder%.', 'wp-security-audit-log' ) ),
610
+ array( 9083, E_NOTICE, __( 'User changed the billing address details', 'wp-security-audit-log' ), __( 'Changed the %AddressField% in the user\'s %TargetUsername% billing address.%ChangeText%', 'wp-security-audit-log' ) ),
611
+ array( 9084, E_NOTICE, __( 'User changed the shipping address details', 'wp-security-audit-log' ), __( 'Changed the %AddressField% in the user\'s %TargetUsername% shipping address.%ChangeText%', 'wp-security-audit-log' ) ),
612
  ),
613
 
614
  /**
648
  load_include_custom_file( $wsal );
649
  }
650
  }
651
+ add_action( 'init', 'wsaldefaults_wsal_init', 5 );
img/check-icon.png ADDED
Binary file
img/external-db/db_integrations_1.png ADDED
Binary file
img/external-db/db_integrations_2.png ADDED
Binary file
img/external-db/db_integrations_3.png ADDED
Binary file
img/mails/daily-notification/box-shadow-bottom.png ADDED
Binary file
img/mails/daily-notification/box-shadow-left.png ADDED
Binary file
img/mails/daily-notification/box-shadow-right.png ADDED
Binary file
img/mails/daily-notification/box-shadow-up.png ADDED
Binary file
img/mails/daily-notification/documentation.png ADDED
Binary file
img/mails/daily-notification/get-support.png ADDED
Binary file
img/mails/daily-notification/logo.png ADDED
Binary file
img/mails/daily-notification/table-bg.jpg ADDED
Binary file
img/notifications/notifications_1.png ADDED
Binary file
img/notifications/notifications_2.png ADDED
Binary file
img/notifications/notifications_3.png ADDED
Binary file
img/notifications/notifications_4.png ADDED
Binary file
img/reports/reports_1.png CHANGED
Binary file
img/reports/reports_2.png CHANGED
Binary file
img/reports/reports_3.png ADDED
Binary file
img/search/search_1.png ADDED
Binary file
img/search/search_2.png ADDED
Binary file
img/search/search_3.png ADDED
Binary file
img/users-sessions-management/user_sessions_1.png ADDED
Binary file
img/users-sessions-management/user_sessions_2.png ADDED
Binary file
img/wsal-emailnotifications.jpg ADDED
Binary file
img/wsal-externaldb.jpg ADDED
Binary file
img/wsal-loginusers.png ADDED
Binary file
img/wsal-reports.jpg ADDED
Binary file
img/wsal-search.jpg ADDED
Binary file
js/auditlog.js CHANGED
@@ -100,12 +100,9 @@ function WsalAuditLogInit(_WsalData) {
100
  };
101
 
102
  // If audit log auto refresh is enabled.
103
- if (WsalData.autorefresh.enabled) {
104
  // Check for new alerts every 30 secs.
105
- setInterval(WsalChk, 30000);
106
-
107
- // Make the first call on page load.
108
- WsalChk();
109
  }
110
 
111
  WsalSsasInit();
100
  };
101
 
102
  // If audit log auto refresh is enabled.
103
+ if ( WsalData.autorefresh.enabled ) {
104
  // Check for new alerts every 30 secs.
105
+ setInterval( WsalChk, 30000 );
 
 
 
106
  }
107
 
108
  WsalSsasInit();
languages/wp-security-audit-log.pot CHANGED
@@ -3,8 +3,8 @@ msgid ""
3
  msgstr ""
4
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: WP Security Audit Log\n"
6
- "POT-Creation-Date: 2019-02-26 11:17+0100\n"
7
- "PO-Revision-Date: 2019-02-26 11:17+0100\n"
8
  "Last-Translator: \n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
@@ -22,184 +22,183 @@ msgstr ""
22
  "X-Poedit-SearchPathExcluded-0: *.js\n"
23
 
24
  #. translators: Event ID
25
- #: classes/AlertManager.php:322
26
  #, php-format
27
  msgid "Event with code %d has not be registered."
28
  msgstr ""
29
 
30
- #: classes/AlertManager.php:377
31
  #, php-format
32
  msgid "Event %s already registered with WP Security Audit Log."
33
  msgstr ""
34
 
35
- #: classes/AlertManager.php:412
36
  msgid ""
37
  "You have custom events that are using the same ID or IDs which are already "
38
  "registered in the plugin, so they have been disabled."
39
  msgstr ""
40
 
41
- #: classes/AlertManager.php:415
42
  #, php-format
43
  msgid "%4$s to help you solve this issue."
44
  msgstr ""
45
 
46
- #: classes/AlertManager.php:417
47
  msgid "ERROR:"
48
  msgstr ""
49
 
50
- #: classes/AlertManager.php:419
51
  msgid "Contact us"
52
  msgstr ""
53
 
54
- #: classes/AuditLogListView.php:120
55
  msgid "No events so far."
56
  msgstr ""
57
 
58
- #: classes/AuditLogListView.php:171
59
  msgid "Show "
60
  msgstr ""
61
 
62
- #: classes/AuditLogListView.php:179
63
  msgid " Items"
64
  msgstr ""
65
 
66
- #: classes/AuditLogListView.php:186
67
  msgid "— End of Activity Log —"
68
  msgstr ""
69
 
70
- #: classes/AuditLogListView.php:206 classes/Views/AuditLog.php:462
71
- #: classes/Views/AuditLog.php:485
72
  msgid "All Sites"
73
  msgstr ""
74
 
75
- #: classes/AuditLogListView.php:234
76
  msgid "Live Database"
77
  msgstr ""
78
 
79
- #: classes/AuditLogListView.php:237
80
  msgid "Archive Database"
81
  msgstr ""
82
 
83
- #: classes/AuditLogListView.php:294 classes/Views/Settings.php:1080
84
  #: classes/WidgetManager.php:82
85
  msgid "User"
86
  msgstr ""
87
 
88
- #: classes/AuditLogListView.php:296
89
  msgid "Username"
90
  msgstr ""
91
 
92
- #: classes/AuditLogListView.php:301 classes/AuditLogListView.php:327
93
- #: classes/Views/Settings.php:1074
94
  msgid "Event ID"
95
  msgstr ""
96
 
97
- #: classes/AuditLogListView.php:302 classes/AuditLogListView.php:330
98
- #: classes/Views/Settings.php:1076 classes/Views/ToggleAlerts.php:318
99
  msgid "Severity"
100
  msgstr ""
101
 
102
- #: classes/AuditLogListView.php:303 classes/AuditLogListView.php:333
103
  msgid "Date"
104
  msgstr ""
105
 
106
- #: classes/AuditLogListView.php:305 classes/AuditLogListView.php:339
107
  msgid "Source IP"
108
  msgstr ""
109
 
110
- #: classes/AuditLogListView.php:310 classes/AuditLogListView.php:342
111
  msgid "Site"
112
  msgstr ""
113
 
114
- #: classes/AuditLogListView.php:313 classes/AuditLogListView.php:345
115
  msgid "Message"
116
  msgstr ""
117
 
118
- #: classes/AuditLogListView.php:396
119
  msgid "Click to toggle."
120
  msgstr ""
121
 
122
- #: classes/AuditLogListView.php:415
123
  msgid "Disable this type of events."
124
  msgstr ""
125
 
126
- #: classes/AuditLogListView.php:423
127
  msgid "Unknown error code."
128
  msgstr ""
129
 
130
- #: classes/AuditLogListView.php:427 classes/Views/ToggleAlerts.php:490
131
  msgid "Critical"
132
  msgstr ""
133
 
134
- #: classes/AuditLogListView.php:429 classes/Views/ToggleAlerts.php:492
135
  msgid "Warning"
136
  msgstr ""
137
 
138
- #: classes/AuditLogListView.php:431 classes/Views/ToggleAlerts.php:494
139
- #: classes/Views/ToggleAlerts.php:496
140
  msgid "Notification"
141
  msgstr ""
142
 
143
- #: classes/AuditLogListView.php:441 classes/AuditLogListView.php:482
144
  msgid "Unknown"
145
  msgstr ""
146
 
147
- #: classes/AuditLogListView.php:467
148
  msgid "Show me all activity by this User"
149
  msgstr ""
150
 
151
- #: classes/AuditLogListView.php:486 classes/Views/Licensing.php:113
152
  #: classes/Views/Licensing.php:153
153
  msgid "Plugin"
154
  msgstr ""
155
 
156
- #: classes/AuditLogListView.php:490 defaults.php:356
157
  msgid "Plugins"
158
  msgstr ""
159
 
160
- #: classes/AuditLogListView.php:494
161
  msgid "Website Visitor"
162
  msgstr ""
163
 
164
- #: classes/AuditLogListView.php:498 classes/Views/ToggleAlerts.php:420
165
- #: classes/Views/ToggleAlerts.php:454 defaults.php:389
166
  msgid "System"
167
  msgstr ""
168
 
169
- #: classes/AuditLogListView.php:530 classes/AuditLogListView.php:543
170
  msgid "Show me all activity originating from this IP Address"
171
  msgstr ""
172
 
173
- #: classes/AuditLogListView.php:572
174
  msgid "View all details of this change"
175
  msgstr ""
176
 
177
- #: classes/AuditLogListView.php:573 classes/AuditLogListView.php:723
178
- #: classes/Settings.php:1659
179
  msgid "Alert Data Inspector"
180
  msgstr ""
181
 
182
- #: classes/AuditLogListView.php:675 classes/Settings.php:1603
183
  msgid "Download the log file"
184
  msgstr ""
185
 
186
- #: classes/AuditLogListView.php:695 classes/Settings.php:1623
187
  msgid "Download the log file."
188
  msgstr ""
189
 
190
- #: classes/AuditLogListView.php:703 classes/Settings.php:1631
191
- #: classes/Settings.php:1883
192
  msgid "published"
193
  msgstr ""
194
 
195
  #. translators: Mailto link for support.
196
- #: classes/AuditLogListView.php:731 classes/Settings.php:1670
197
- #: classes/Settings.php:1909
198
  #, php-format
199
  msgid "Contact us on %s for assistance"
200
  msgstr ""
201
 
202
- #: classes/AuditLogListView.php:865
203
  msgid "Select All"
204
  msgstr ""
205
 
@@ -241,62 +240,56 @@ msgstr ""
241
  msgid "https://wordpress.org/support/"
242
  msgstr ""
243
 
244
- #: classes/Loggers/Database.php:243 classes/Views/EmailNotifications.php:153
245
- #: classes/Views/EmailNotifications.php:185 classes/Views/ExternalDB.php:152
246
- #: classes/Views/ExternalDB.php:184 classes/Views/Help.php:188
247
- #: classes/Views/Help.php:239 classes/Views/LogInUsers.php:154
248
- #: classes/Views/LogInUsers.php:186 classes/Views/Reports.php:153
249
- #: classes/Views/Reports.php:185 classes/Views/Search.php:153
250
- #: classes/Views/Search.php:178
251
  msgid "Upgrade to Premium"
252
  msgstr ""
253
 
254
- #: classes/Loggers/Database.php:244 classes/Views/EmailNotifications.php:154
255
- #: classes/Views/EmailNotifications.php:186 classes/Views/ExternalDB.php:153
256
- #: classes/Views/ExternalDB.php:185 classes/Views/Help.php:240
257
- #: classes/Views/LogInUsers.php:155 classes/Views/LogInUsers.php:187
258
- #: classes/Views/Reports.php:154 classes/Views/Reports.php:186
259
- #: classes/Views/Search.php:154 classes/Views/Search.php:179
260
  msgid "More Information"
261
  msgstr ""
262
 
263
- #: classes/Sensors/Content.php:1326 classes/Sensors/Content.php:1334
264
- #: classes/Sensors/WooCommerce.php:596 classes/Sensors/WooCommerce.php:602
265
  msgid "Password Protected"
266
  msgstr ""
267
 
268
- #: classes/Sensors/Content.php:1328 classes/Sensors/Content.php:1336
 
269
  msgid "Public"
270
  msgstr ""
271
 
272
- #: classes/Sensors/Content.php:1330 classes/Sensors/Content.php:1338
 
273
  msgid "Private"
274
  msgstr ""
275
 
276
- #: classes/Sensors/Public.php:124
277
  #, php-format
278
  msgid ""
279
  "A comment was posted in response to the post %1$s. The comment was posted by "
280
  "%2$s"
281
  msgstr ""
282
 
283
- #: classes/Sensors/Public.php:653 classes/Sensors/WooCommerce.php:1880
284
  msgid "In stock"
285
  msgstr ""
286
 
287
- #: classes/Sensors/Public.php:655 classes/Sensors/WooCommerce.php:1882
288
  msgid "Out of stock"
289
  msgstr ""
290
 
291
- #: classes/Sensors/Public.php:657 classes/Sensors/WooCommerce.php:1884
292
  msgid "On backorder"
293
  msgstr ""
294
 
295
- #: classes/Sensors/WooCommerce.php:2733
296
  msgid "Visible"
297
  msgstr ""
298
 
299
- #: classes/Sensors/WooCommerce.php:2733
300
  msgid "Non-Visible"
301
  msgstr ""
302
 
@@ -304,15 +297,15 @@ msgstr ""
304
  msgid "This function is deprecated"
305
  msgstr ""
306
 
307
- #: classes/Settings.php:1571
308
  msgid "View Order"
309
  msgstr ""
310
 
311
- #: classes/Settings.php:1682 classes/Settings.php:1921
312
  msgid "plugin settings"
313
  msgstr ""
314
 
315
- #: classes/Settings.php:1685 classes/Settings.php:1924
316
  msgid "contact our support"
317
  msgstr ""
318
 
@@ -332,10 +325,37 @@ msgid ""
332
  "the plugin WP Security Audit Log on the website %2$s on %3$s."
333
  msgstr ""
334
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335
  #: classes/Views/AuditLog.php:91
336
  msgid ""
337
- "Get instantly alerted of important changes via email, do text based searches "
338
- "and filter results, generate reports, see who is logged in and more!"
339
  msgstr ""
340
 
341
  #: classes/Views/AuditLog.php:92
@@ -349,228 +369,226 @@ msgid ""
349
  msgstr ""
350
 
351
  #: classes/Views/AuditLog.php:96
352
- msgid ""
353
- "Upgrade to unlock these powerful features and gain more from your activity "
354
- "logs."
355
  msgstr ""
356
 
357
  #: classes/Views/AuditLog.php:99
358
  msgid ""
359
- "See who is logged in to your WordPress, create user productivity reports, "
360
- "get alerted via email of important changes and more!"
361
  msgstr ""
362
 
363
  #: classes/Views/AuditLog.php:100
364
  msgid ""
365
- "Unlock these powerful features and much more with the premium edition of WP "
366
- "Security Audit Log."
367
  msgstr ""
368
 
369
- #: classes/Views/AuditLog.php:164
370
- msgid "UPGRADE"
371
  msgstr ""
372
 
373
- #: classes/Views/AuditLog.php:166
 
 
 
 
374
  msgid "Tell me more"
375
  msgstr ""
376
 
377
- #: classes/Views/AuditLog.php:167
378
  msgid "Dismiss the banner"
379
  msgstr ""
380
 
381
- #: classes/Views/AuditLog.php:167
382
  msgid "Close"
383
  msgstr ""
384
 
385
- #: classes/Views/AuditLog.php:193
386
  msgid ""
387
  "There are connectivity issues with the database where the WordPress activity "
388
  "log is stored. The logs will be temporary buffered in the WordPress database "
389
  "until the connection is fully restored."
390
  msgstr ""
391
 
392
- #: classes/Views/AuditLog.php:211
393
  msgid ""
394
  "Help us improve WP Security Audit Log! Opt-in to sending us diagnostic non-"
395
  "sensitive data about your plugin usage (<strong>no activity log data is "
396
  "sent</strong>) and subscribe to our newsletter."
397
  msgstr ""
398
 
399
- #: classes/Views/AuditLog.php:214
400
  msgid "Opt-In"
401
  msgstr ""
402
 
403
- #: classes/Views/AuditLog.php:216
404
  msgid "Learn More"
405
  msgstr ""
406
 
407
- #: classes/Views/AuditLog.php:218 classes/Views/AuditLog.php:426
408
- #: classes/Views/Settings.php:503 classes/Views/Settings.php:530
409
- #: classes/Views/Settings.php:621 classes/Views/Settings.php:659
410
- #: classes/Views/Settings.php:1142 classes/Views/Settings.php:1210
411
- #: classes/Views/Settings.php:1865 classes/Views/Settings.php:1928
412
- #: classes/Views/Settings.php:1956 classes/Views/Settings.php:1971
413
- #: classes/Views/Settings.php:1981 classes/Views/SetupWizard.php:519
414
  msgid "No"
415
  msgstr ""
416
 
417
- #: classes/Views/AuditLog.php:258 classes/Views/AuditLog.php:274
418
  msgid "Audit Log Viewer"
419
  msgstr ""
420
 
421
- #: classes/Views/AuditLog.php:374 classes/Views/Licensing.php:82
422
- #: classes/Views/Settings.php:334 classes/Views/ToggleAlerts.php:127
423
  msgid "You do not have sufficient permissions to access this page."
424
  msgstr ""
425
 
426
- #: classes/Views/AuditLog.php:422
427
  msgid ""
428
  "Thank you very much for using the WP Security Audit Log plugin. We have "
429
  "created a wizard to ease the process of configuring the plugin so you can "
430
  "get the best out of it. Would you like to run the wizard?"
431
  msgstr ""
432
 
433
- #: classes/Views/AuditLog.php:425 classes/Views/Settings.php:498
434
- #: classes/Views/Settings.php:525 classes/Views/Settings.php:591
435
- #: classes/Views/Settings.php:649 classes/Views/Settings.php:1137
436
- #: classes/Views/Settings.php:1203 classes/Views/Settings.php:1860
437
- #: classes/Views/Settings.php:1921 classes/Views/Settings.php:1949
438
- #: classes/Views/Settings.php:1970 classes/Views/Settings.php:1980
439
  #: classes/Views/SetupWizard.php:524
440
  msgid "Yes"
441
  msgstr ""
442
 
443
- #: classes/Views/AuditLog.php:461 classes/Views/AuditLog.php:484
444
  msgid "Please enter the number of alerts you would like to see on one page:"
445
  msgstr ""
446
 
447
- #: classes/Views/AuditLog.php:463 classes/Views/AuditLog.php:486
448
  msgid "No Results"
449
  msgstr ""
450
 
451
- #: classes/Views/AuditLog.php:671
452
  msgid "No users found."
453
  msgstr ""
454
 
455
- #: classes/Views/AuditLog.php:674 classes/Views/AuditLog.php:751
456
- #: classes/Views/AuditLog.php:777 classes/Views/AuditLog.php:1082
457
- #: classes/Views/AuditLog.php:1152 classes/Views/Licensing.php:90
458
- #: classes/Views/Settings.php:241 classes/Views/Settings.php:330
459
- #: classes/Views/Settings.php:2127 classes/Views/Settings.php:2155
460
- #: classes/Views/Settings.php:2185 classes/Views/Settings.php:2224
461
- #: classes/Views/Settings.php:2226 classes/Views/Settings.php:2228
462
- #: classes/Views/Settings.php:2335 classes/Views/Settings.php:2337
463
- #: classes/Views/Settings.php:2339 classes/Views/Settings.php:2429
464
- #: classes/Views/Settings.php:2509 classes/Views/SetupWizard.php:81
465
- msgid "Nonce verification failed."
466
- msgstr ""
467
-
468
- #: classes/Views/AuditLog.php:693
469
  msgid "Log file does not exist."
470
  msgstr ""
471
 
472
- #: classes/Views/AuditLog.php:742
473
  msgid "Request to get log file failed."
474
  msgstr ""
475
 
476
- #: classes/Views/AuditLog.php:817
477
  msgid "Freemius opt choice selected."
478
  msgstr ""
479
 
480
- #: classes/Views/AuditLog.php:824
481
  msgid "Freemius opt choice not found."
482
  msgstr ""
483
 
484
- #: classes/Views/AuditLog.php:996
485
  msgid "WordPress Activity Log"
486
  msgstr ""
487
 
488
- #: classes/Views/AuditLog.php:997
489
  msgid ""
490
  "When a user makes a change on your website the plugin will keep a record of "
491
  "that event here. Right now there is nothing because this is a new install."
492
  msgstr ""
493
 
494
- #: classes/Views/AuditLog.php:998
495
  msgid "Thank you for using WP Security Audit Log"
496
  msgstr ""
497
 
498
- #: classes/Views/AuditLog.php:1019
499
  msgid "Error: You do not have sufficient permissions to exclude this URL."
500
  msgstr ""
501
 
502
- #: classes/Views/AuditLog.php:1065
503
  msgid "You do not have sufficient permissions to dismiss this notice."
504
  msgstr ""
505
 
506
- #: classes/Views/AuditLog.php:1135
507
  msgid "Access Denied"
508
  msgstr ""
509
 
510
  #: classes/Views/EmailNotifications.php:28
511
- msgid "Email Notifications Add-On"
512
  msgstr ""
513
 
514
  #: classes/Views/EmailNotifications.php:42
515
- msgid "Email Notifications &#8682;"
516
  msgstr ""
517
 
518
- #: classes/Views/EmailNotifications.php:112
519
- msgid "Email Notifications"
520
  msgstr ""
521
 
522
- #: classes/Views/EmailNotifications.php:114 classes/Views/ExternalDB.php:114
523
- #: classes/Views/LogInUsers.php:114 classes/Views/Reports.php:114
524
- #: classes/Views/Search.php:114
525
- msgid "Upgrade to Premium to:"
526
  msgstr ""
527
 
528
  #: classes/Views/EmailNotifications.php:118
529
- msgid ""
530
- "Configure email notifications to be instantly alerted of important changes,"
531
  msgstr ""
532
 
533
  #: classes/Views/EmailNotifications.php:119
534
  msgid ""
535
- "Configure notifications for when users login, change content, install a "
536
- "plugin or do any other change,"
537
  msgstr ""
538
 
539
  #: classes/Views/EmailNotifications.php:120
540
- msgid "Configure security email notifications,"
541
  msgstr ""
542
 
543
  #: classes/Views/EmailNotifications.php:121
544
- msgid "Configure email notifications via a user friendly wizard,"
 
545
  msgstr ""
546
 
547
  #: classes/Views/EmailNotifications.php:122
548
- msgid "Edit and create your own templates for email notifications,"
549
  msgstr ""
550
 
551
- #: classes/Views/EmailNotifications.php:123 classes/Views/ExternalDB.php:122
552
- #: classes/Views/LogInUsers.php:124 classes/Views/Search.php:123
553
- msgid "& more."
554
  msgstr ""
555
 
556
- #: classes/Views/EmailNotifications.php:163 classes/Views/ExternalDB.php:162
557
- #: classes/Views/LogInUsers.php:164 classes/Views/Reports.php:163
558
- #: classes/Views/Search.php:163
559
- msgid "Screenshots"
 
 
 
 
 
 
 
 
 
 
 
560
  msgstr ""
561
 
562
- #: classes/Views/EmailNotifications.php:168
563
- #: classes/Views/EmailNotifications.php:169
564
  msgid ""
565
- "Use the trigger builder to configure any type of email notification so you "
566
- "are instantly alerted of important changes on your WordPress."
 
567
  msgstr ""
568
 
569
- #: classes/Views/EmailNotifications.php:175
570
- #: classes/Views/EmailNotifications.php:176
571
  msgid ""
572
- "Use the wizard to easily get started and quickly configure basic email "
573
- "notifications."
574
  msgstr ""
575
 
576
  #: classes/Views/ExternalDB.php:28
@@ -581,39 +599,51 @@ msgstr ""
581
  msgid "DB & Integrations &#8682;"
582
  msgstr ""
583
 
584
- #: classes/Views/ExternalDB.php:112
585
- msgid "External DB"
586
  msgstr ""
587
 
588
- #: classes/Views/ExternalDB.php:118
589
  msgid ""
590
- "Move the audit log to an external database for improved security & "
591
- "performance,"
 
 
 
 
 
592
  msgstr ""
593
 
594
  #: classes/Views/ExternalDB.php:119
595
- msgid "Centralize the audit log in your centralized logging system,"
596
  msgstr ""
597
 
598
  #: classes/Views/ExternalDB.php:120
599
- msgid "Mirror the audit trail to Syslog, Papertrail etc,"
 
 
600
  msgstr ""
601
 
602
  #: classes/Views/ExternalDB.php:121
603
  msgid ""
604
- "Configure archiving rules to archive old events in an archiving database,"
 
605
  msgstr ""
606
 
607
- #: classes/Views/ExternalDB.php:167 classes/Views/ExternalDB.php:168
608
  msgid ""
609
- "Configure an external database so the WordPress audit trail is stored on it "
610
- "instead of the WordPress database."
 
 
 
 
611
  msgstr ""
612
 
613
- #: classes/Views/ExternalDB.php:174 classes/Views/ExternalDB.php:175
614
  msgid ""
615
- "Configure mirroring to keep a secondary copy of the WordPress audit trail on "
616
- "Syslog, Papertrail etc."
617
  msgstr ""
618
 
619
  #: classes/Views/Help.php:30 classes/Views/Help.php:44
@@ -764,12 +794,12 @@ msgstr ""
764
  msgid "Licensing"
765
  msgstr ""
766
 
767
- #: classes/Views/Licensing.php:96 classes/Views/Settings.php:341
768
  #: classes/Views/ToggleAlerts.php:144
769
  msgid "Settings have been saved."
770
  msgstr ""
771
 
772
- #: classes/Views/Licensing.php:101 classes/Views/Settings.php:346
773
  #: classes/Views/ToggleAlerts.php:150
774
  msgid "Error: "
775
  msgstr ""
@@ -798,44 +828,46 @@ msgstr ""
798
  msgid "Logged In Users &#8682;"
799
  msgstr ""
800
 
801
- #: classes/Views/LogInUsers.php:112
802
- msgid "Users Login and Management"
803
  msgstr ""
804
 
805
- #: classes/Views/LogInUsers.php:118
806
- msgid "See who is logged in to your WordPress website,"
807
  msgstr ""
808
 
809
  #: classes/Views/LogInUsers.php:119
810
- msgid "When they logged in and from where,"
811
  msgstr ""
812
 
813
  #: classes/Views/LogInUsers.php:120
814
- msgid "The last change they did on your WordPress website,"
815
  msgstr ""
816
 
817
  #: classes/Views/LogInUsers.php:121
818
- msgid "Terminate their session with just a click of a button,"
819
  msgstr ""
820
 
821
  #: classes/Views/LogInUsers.php:122
822
- msgid "Block multiple sessions for the same user,"
823
  msgstr ""
824
 
825
  #: classes/Views/LogInUsers.php:123
826
- msgid "Get alerted when there are multiple sessions with the same username,"
827
  msgstr ""
828
 
829
- #: classes/Views/LogInUsers.php:169 classes/Views/LogInUsers.php:170
830
- msgid ""
831
- "See who is logged in to your WordPress website and WordPress multisite "
832
- "network."
833
  msgstr ""
834
 
835
- #: classes/Views/LogInUsers.php:176 classes/Views/LogInUsers.php:177
836
  msgid ""
837
- "Block multiple sessions for the same user and configure related email "
838
- "notifications."
 
 
 
 
839
  msgstr ""
840
 
841
  #: classes/Views/Reports.php:28
@@ -846,48 +878,51 @@ msgstr ""
846
  msgid "Reports &#8682;"
847
  msgstr ""
848
 
849
- #: classes/Views/Reports.php:112
850
- msgid "Reports"
851
  msgstr ""
852
 
853
- #: classes/Views/Reports.php:118
854
  msgid ""
855
- "Generate user activity, site (in multisite) and any other type of WordPress "
856
- "reports,"
 
 
 
 
 
857
  msgstr ""
858
 
859
  #: classes/Views/Reports.php:119
860
- msgid "Configure automated daily, weekly, monthly & quarterly reports,"
861
  msgstr ""
862
 
863
  #: classes/Views/Reports.php:120
864
- msgid "Receive reports automatically in your email,"
865
  msgstr ""
866
 
867
  #: classes/Views/Reports.php:121
868
  msgid ""
869
- "Generate statistics reports on commonly used IP addresses, views per user, "
870
- "etc,"
871
  msgstr ""
872
 
873
- #: classes/Views/Reports.php:122
874
- msgid "Export reports to HTML and CSV formats,"
 
 
875
  msgstr ""
876
 
877
- #: classes/Views/Reports.php:123
878
- msgid "& much more."
879
  msgstr ""
880
 
881
- #: classes/Views/Reports.php:168 classes/Views/Reports.php:169
882
- msgid ""
883
- "Generate any type of report and also configure daily, weekly, monthly and "
884
- "quarterly reports which are automatically sent to you via email."
885
  msgstr ""
886
 
887
- #: classes/Views/Reports.php:175 classes/Views/Reports.php:176
888
- msgid ""
889
- "Generate statistical reports to get a better overview of what users are "
890
- "doing on your WordPress and WordPress multisite network are doing."
891
  msgstr ""
892
 
893
  #: classes/Views/Search.php:28
@@ -898,174 +933,215 @@ msgstr ""
898
  msgid "Search &#8682;"
899
  msgstr ""
900
 
901
- #: classes/Views/Search.php:112
902
- msgid "Search"
903
  msgstr ""
904
 
905
- #: classes/Views/Search.php:118
906
  msgid ""
907
- "Easily find and track back a specific change or suspicious user behaviour,"
 
 
 
 
 
 
908
  msgstr ""
909
 
910
  #: classes/Views/Search.php:119
911
- msgid "Easily find the root of a problem to ease troubleshooting,"
912
  msgstr ""
913
 
914
  #: classes/Views/Search.php:120
915
- msgid "Do free-text based searches in the WordPress audit log,"
916
  msgstr ""
917
 
918
  #: classes/Views/Search.php:121
919
- msgid "Use filters to fine tune the search results,"
920
  msgstr ""
921
 
922
  #: classes/Views/Search.php:122
923
- msgid "Save search terms & filters for improved productivity,"
 
 
 
 
924
  msgstr ""
925
 
926
- #: classes/Views/Search.php:168 classes/Views/Search.php:169
927
  msgid ""
928
- "Use the free-text based search to find a specific change and use the filters "
929
- "to fine tune the search results."
930
  msgstr ""
931
 
932
- #: classes/Views/Settings.php:79
 
 
 
 
 
 
933
  msgid "General"
934
  msgstr ""
935
 
936
- #: classes/Views/Settings.php:85
937
  msgid "Activity Log"
938
  msgstr ""
939
 
940
- #: classes/Views/Settings.php:91
941
  msgid "File Integrity Scan"
942
  msgstr ""
943
 
944
- #: classes/Views/Settings.php:97 classes/Views/SetupWizard.php:148
945
  msgid "Exclude Objects"
946
  msgstr ""
947
 
948
- #: classes/Views/Settings.php:103
949
  msgid "Advanced Settings"
950
  msgstr ""
951
 
952
- #: classes/Views/Settings.php:144 classes/Views/Settings.php:158
953
- #: classes/Views/ToggleAlerts.php:432 classes/Views/ToggleAlerts.php:456
954
  msgid "Settings"
955
  msgstr ""
956
 
957
- #: classes/Views/Settings.php:214
958
  msgid "Unknown settings tab."
959
  msgstr ""
960
 
961
- #: classes/Views/Settings.php:226 classes/Views/Settings.php:2530
962
- #: classes/Views/Settings.php:2559 classes/Views/SetupWizard.php:66
963
- msgid "Access Denied."
964
  msgstr ""
965
 
966
- #: classes/Views/Settings.php:251 classes/Views/SetupWizard.php:91
967
- msgid "Invalid input."
968
  msgstr ""
969
 
970
- #: classes/Views/Settings.php:354
971
  msgid "Old data successfully purged."
972
  msgstr ""
973
 
974
- #: classes/Views/Settings.php:360
975
  msgid "No data is old enough to be purged."
976
  msgstr ""
977
 
978
- #: classes/Views/Settings.php:443
 
 
 
 
979
  msgid ""
980
  "Need help with setting up the plugin to meet your requirements? <a href="
981
  "\"https://www.wpsecurityauditlog.com/contact/\" target=\"_blank\">Schedule a "
982
  "20 minutes consultation and setup call</a> with our experts for just $50."
983
  msgstr ""
984
 
985
- #: classes/Views/Settings.php:445
986
  msgid "Use infinite scroll or pagination for the event viewer?"
987
  msgstr ""
988
 
989
  #. translators: Learn more link.
990
- #: classes/Views/Settings.php:450
991
  #, php-format
992
  msgid ""
993
  "When using infinite scroll the event viewer and search results %s load up "
994
  "much faster and require less resources."
995
  msgstr ""
996
 
997
- #: classes/Views/Settings.php:451
998
  msgid "(Premium feature)"
999
  msgstr ""
1000
 
1001
- #: classes/Views/Settings.php:458
1002
  msgid "Select event viewer view type:"
1003
  msgstr ""
1004
 
1005
- #: classes/Views/Settings.php:463
1006
  msgid "Infinite Scroll (Recommended)"
1007
  msgstr ""
1008
 
1009
- #: classes/Views/Settings.php:468
1010
  msgid "Pagination"
1011
  msgstr ""
1012
 
1013
- #: classes/Views/Settings.php:479
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1014
  msgid "Display latest events widget in Dashboard & Admin bar"
1015
  msgstr ""
1016
 
1017
  #. translators: Max number of dashboard widget alerts.
1018
- #: classes/Views/Settings.php:484
1019
  #, php-format
1020
  msgid ""
1021
  "The events widget displays the latest %d security events in the dashboard "
1022
  "and the admin bar notification displays the latest event."
1023
  msgstr ""
1024
 
1025
- #: classes/Views/Settings.php:492
1026
  msgid "Dashboard Widget"
1027
  msgstr ""
1028
 
1029
- #: classes/Views/Settings.php:513
1030
  msgid "Admin Bar Notification"
1031
  msgstr ""
1032
 
1033
- #: classes/Views/Settings.php:516
1034
  msgid "Admin Bar Notification (Premium)"
1035
  msgstr ""
1036
 
1037
- #: classes/Views/Settings.php:540
1038
  msgid "Admin Bar Notification Updates"
1039
  msgstr ""
1040
 
1041
- #: classes/Views/Settings.php:543
1042
  msgid "Admin Bar Notification Updates (Premium)"
1043
  msgstr ""
1044
 
1045
- #: classes/Views/Settings.php:552
1046
  msgid "Update in near real time"
1047
  msgstr ""
1048
 
1049
- #: classes/Views/Settings.php:557
1050
  msgid "Update only on page refreshes"
1051
  msgstr ""
1052
 
1053
- #: classes/Views/Settings.php:567
1054
  msgid "Add user notification on the WordPress login page"
1055
  msgstr ""
1056
 
1057
- #: classes/Views/Settings.php:568
1058
  msgid ""
1059
  "Many compliance regulations (such as the GDRP) require website "
1060
  "administrators to tell the users of their website that all the changes they "
1061
  "do when logged in are being logged."
1062
  msgstr ""
1063
 
1064
- #: classes/Views/Settings.php:572
1065
  msgid "Login Page Notification"
1066
  msgstr ""
1067
 
1068
- #: classes/Views/Settings.php:597 wp-security-audit-log.php:1545
1069
  msgid ""
1070
  "For security and auditing purposes, a record of all of your logged-in "
1071
  "actions and changes within the WordPress dashboard will be recorded in an "
@@ -1074,137 +1150,137 @@ msgid ""
1074
  "IP address where you accessed this site from."
1075
  msgstr ""
1076
 
1077
- #: classes/Views/Settings.php:615
1078
  msgid "<strong>Note: </strong>"
1079
  msgstr ""
1080
 
1081
- #: classes/Views/Settings.php:615
1082
  msgid ""
1083
  "The only HTML code allowed in the login page notification is for links ( < a "
1084
  "href >< /a > )."
1085
  msgstr ""
1086
 
1087
- #: classes/Views/Settings.php:631
1088
  msgid "Is your website running behind a firewall or reverse proxy?"
1089
  msgstr ""
1090
 
1091
  #. translators: Learn more link.
1092
- #: classes/Views/Settings.php:636
1093
  #, php-format
1094
  msgid ""
1095
  "If your website is running behind a firewall set this option to yes so the "
1096
  "plugin retrieves the end user’s IP address from the proxy header - %s."
1097
  msgstr ""
1098
 
1099
- #: classes/Views/Settings.php:637
1100
  msgid "learn more"
1101
  msgstr ""
1102
 
1103
- #: classes/Views/Settings.php:644
1104
  msgid "Reverse Proxy / Firewall Options"
1105
  msgstr ""
1106
 
1107
- #: classes/Views/Settings.php:654
1108
  msgid ""
1109
  "Filter internal IP addresses from the proxy headers. Enable this option only "
1110
  "if you are\tare still seeing the internal IP addresses of the firewall or "
1111
  "proxy."
1112
  msgstr ""
1113
 
1114
- #: classes/Views/Settings.php:670
1115
  msgid "Who can change the plugin settings?"
1116
  msgstr ""
1117
 
1118
- #: classes/Views/Settings.php:671
1119
  msgid ""
1120
  "By default only users with administrator or super administrator (multisite) "
1121
  "roles can change the settings of the plugin. Though you can change these "
1122
  "privileges from this section."
1123
  msgstr ""
1124
 
1125
- #: classes/Views/Settings.php:675
1126
  msgid "Restrict Plugin Access"
1127
  msgstr ""
1128
 
1129
- #: classes/Views/Settings.php:681
1130
  msgid "Only me"
1131
  msgstr ""
1132
 
1133
- #: classes/Views/Settings.php:686
1134
  msgid "Only administrators"
1135
  msgstr ""
1136
 
1137
- #: classes/Views/Settings.php:692
1138
  msgid "Only superadmins"
1139
  msgstr ""
1140
 
1141
- #: classes/Views/Settings.php:698
1142
  msgid "All these users or users with these roles"
1143
  msgstr ""
1144
 
1145
- #: classes/Views/Settings.php:700
1146
  msgid ""
1147
  "Specify the username or the users which can change the plugin settings. You "
1148
  "can also specify roles."
1149
  msgstr ""
1150
 
1151
- #: classes/Views/Settings.php:729
1152
  msgid "Allow other users to view the activity log"
1153
  msgstr ""
1154
 
1155
- #: classes/Views/Settings.php:730
1156
  msgid ""
1157
  "By default only users with administrator and super administrator (multisite) "
1158
  "role can view the WordPress activity log. Though you can allow other users "
1159
  "with no admin role to view the events."
1160
  msgstr ""
1161
 
1162
- #: classes/Views/Settings.php:734
1163
  msgid "Can View Events"
1164
  msgstr ""
1165
 
1166
- #: classes/Views/Settings.php:742
1167
  msgid ""
1168
  "Specify the username or the users which do not have an admin role but can "
1169
  "also see the WordPress activity role. You can also specify roles."
1170
  msgstr ""
1171
 
1172
- #: classes/Views/Settings.php:768
1173
  msgid "Which email address should the plugin use as a from address?"
1174
  msgstr ""
1175
 
1176
- #: classes/Views/Settings.php:769
1177
  msgid ""
1178
  "By default when the plugin sends an email notification it uses the email "
1179
  "address specified in this website’s general settings. Though you can change "
1180
  "the email address and display name from this section."
1181
  msgstr ""
1182
 
1183
- #: classes/Views/Settings.php:773
1184
  msgid "From Email & Name"
1185
  msgstr ""
1186
 
1187
- #: classes/Views/Settings.php:779
1188
  msgid "Use the email address from the WordPress general settings"
1189
  msgstr ""
1190
 
1191
- #: classes/Views/Settings.php:784
1192
  msgid "Use another email address"
1193
  msgstr ""
1194
 
1195
- #: classes/Views/Settings.php:788
1196
  msgid "Email Address"
1197
  msgstr ""
1198
 
1199
- #: classes/Views/Settings.php:793
1200
  msgid "Display Name"
1201
  msgstr ""
1202
 
1203
- #: classes/Views/Settings.php:804
1204
  msgid "Do you want to hide the plugin from the list of installed plugins?"
1205
  msgstr ""
1206
 
1207
- #: classes/Views/Settings.php:805
1208
  msgid ""
1209
  "By default all installed plugins are listed in the plugins page. If you do "
1210
  "not want other administrators to see that you installed this plugin set this "
@@ -1212,32 +1288,32 @@ msgid ""
1212
  "plugin on this website."
1213
  msgstr ""
1214
 
1215
- #: classes/Views/Settings.php:809
1216
  msgid "Hide Plugin in Plugins Page"
1217
  msgstr ""
1218
 
1219
- #: classes/Views/Settings.php:814
1220
  msgid "Yes, hide the plugin from the list of installed plugins"
1221
  msgstr ""
1222
 
1223
- #: classes/Views/Settings.php:819
1224
  msgid "No, do not hide the plugin"
1225
  msgstr ""
1226
 
1227
- #: classes/Views/Settings.php:888
1228
  msgid ""
1229
  "For how long do you want to keep the activity log events (Retention "
1230
  "settings) ?"
1231
  msgstr ""
1232
 
1233
- #: classes/Views/Settings.php:891
1234
  msgid ""
1235
  "The plugin uses an efficient way to store the activity log data in the "
1236
  "WordPress database, though the more data you keep the more disk space will "
1237
  "be required. "
1238
  msgstr ""
1239
 
1240
- #: classes/Views/Settings.php:892
1241
  msgid ""
1242
  "<a href=\"https://www.wpsecurityauditlog.com/pricing/\" target=\"_blank"
1243
  "\">Upgrade to Premium</a> to store the activity log data in an external "
@@ -1245,74 +1321,74 @@ msgid ""
1245
  msgstr ""
1246
 
1247
  #. translators: 1: Archive page link tag. 2: Link closing tag.
1248
- #: classes/Views/Settings.php:910
1249
  #, php-format
1250
  msgid ""
1251
  "Retention settings moved to %1$s archiving settings %2$s because archiving "
1252
  "is enabled"
1253
  msgstr ""
1254
 
1255
- #: classes/Views/Settings.php:917
1256
  msgid "Audit Log Retention"
1257
  msgstr ""
1258
 
1259
- #: classes/Views/Settings.php:923
1260
  msgid "Keep all data"
1261
  msgstr ""
1262
 
1263
- #: classes/Views/Settings.php:950
1264
  msgid "Delete events older than"
1265
  msgstr ""
1266
 
1267
- #: classes/Views/Settings.php:957
1268
  msgid "Months"
1269
  msgstr ""
1270
 
1271
- #: classes/Views/Settings.php:958
1272
  msgid "Years"
1273
  msgstr ""
1274
 
1275
- #: classes/Views/Settings.php:966
1276
  msgid "The next scheduled purging of activity log data that is older than "
1277
  msgstr ""
1278
 
1279
- #: classes/Views/Settings.php:973
1280
  msgid "You can run the purging process now by clicking the button below."
1281
  msgstr ""
1282
 
1283
- #: classes/Views/Settings.php:977
1284
  msgid "Purge Old Data"
1285
  msgstr ""
1286
 
1287
- #: classes/Views/Settings.php:988
1288
  msgid "What timestamp you would like to see in the WordPress activity log?"
1289
  msgstr ""
1290
 
1291
- #: classes/Views/Settings.php:989
1292
  msgid ""
1293
  "Note that the WordPress' timezone might be different from that configured on "
1294
  "the server so when you switch from UTC to WordPress timezone or vice versa "
1295
  "you might notice a big difference."
1296
  msgstr ""
1297
 
1298
- #: classes/Views/Settings.php:993
1299
  msgid "Events Timestamp"
1300
  msgstr ""
1301
 
1302
- #: classes/Views/Settings.php:1013
1303
  msgid "UTC"
1304
  msgstr ""
1305
 
1306
- #: classes/Views/Settings.php:1019
1307
  msgid "Timezone configured on this WordPress website"
1308
  msgstr ""
1309
 
1310
- #: classes/Views/Settings.php:1029
1311
  msgid ""
1312
  "What user information should be displayed in the WordPress activity log?"
1313
  msgstr ""
1314
 
1315
- #: classes/Views/Settings.php:1030
1316
  msgid ""
1317
  "Usernames might not be the same as a user's first and last name so it can be "
1318
  "difficult to recognize whose user was that did a change. When there is no "
@@ -1320,72 +1396,50 @@ msgid ""
1320
  "back to the WordPress username."
1321
  msgstr ""
1322
 
1323
- #: classes/Views/Settings.php:1034
1324
  msgid "User Information in Audit Log"
1325
  msgstr ""
1326
 
1327
- #: classes/Views/Settings.php:1040
1328
  msgid "WordPress Username"
1329
  msgstr ""
1330
 
1331
- #: classes/Views/Settings.php:1045
1332
  msgid "First Name & Last Name"
1333
  msgstr ""
1334
 
1335
- #: classes/Views/Settings.php:1050
1336
  msgid "Configured Public Display Name"
1337
  msgstr ""
1338
 
1339
- #: classes/Views/Settings.php:1060
1340
  msgid "Select the columns to be displayed in the WordPress activity log"
1341
  msgstr ""
1342
 
1343
- #: classes/Views/Settings.php:1061
1344
  msgid ""
1345
  "When you deselect a column it won’t be shown in the activity log viewer but "
1346
  "the data will still be recorded by the plugin, so when you select it again "
1347
  "all the data will be displayed."
1348
  msgstr ""
1349
 
1350
- #: classes/Views/Settings.php:1065
1351
  msgid "Audit Log Columns Selection"
1352
  msgstr ""
1353
 
1354
- #: classes/Views/Settings.php:1078
1355
  msgid "Date & Time"
1356
  msgstr ""
1357
 
1358
- #: classes/Views/Settings.php:1082
1359
  msgid "Source IP Address"
1360
  msgstr ""
1361
 
1362
- #: classes/Views/Settings.php:1097
1363
- msgid "Do you want the activity log viewer to auto refresh?"
1364
- msgstr ""
1365
-
1366
- #: classes/Views/Settings.php:1098
1367
- msgid ""
1368
- "The activity log viewer auto refreshes every 30 seconds when opened so you "
1369
- "can see the latest events as they happen almost in real time."
1370
- msgstr ""
1371
-
1372
- #: classes/Views/Settings.php:1102
1373
- msgid "Refresh Audit Log Viewer"
1374
- msgstr ""
1375
-
1376
- #: classes/Views/Settings.php:1109
1377
- msgid "Auto refresh"
1378
- msgstr ""
1379
-
1380
- #: classes/Views/Settings.php:1115
1381
- msgid "Do not auto refresh"
1382
- msgstr ""
1383
-
1384
- #: classes/Views/Settings.php:1125
1385
  msgid "Do you want to keep a log of WordPress background activity?"
1386
  msgstr ""
1387
 
1388
- #: classes/Views/Settings.php:1127
1389
  msgid ""
1390
  "WordPress does a lot of things in the background that you do not necessarily "
1391
  "need to know about, such as; deletion of post revisions, deletion of auto "
@@ -1393,38 +1447,38 @@ msgid ""
1393
  "might be a lot and are irrelevant to the user."
1394
  msgstr ""
1395
 
1396
- #: classes/Views/Settings.php:1132
1397
  msgid "Enable Events for WordPress Background Activity"
1398
  msgstr ""
1399
 
1400
- #: classes/Views/Settings.php:1186
1401
  msgid ""
1402
  "The plugin runs file integrity scans on your website so it keeps a log when "
1403
  "a file is added, modified or deleted. All the settings for the file "
1404
  "integrity scans can be found in this page."
1405
  msgstr ""
1406
 
1407
- #: classes/Views/Settings.php:1187
1408
  msgid ""
1409
  "<a href=\"https://www.wpsecurityauditlog.com/support-documentation/wordpress-"
1410
  "files-changes-warning-activity-logs/\" target=\"_blank\">Refer to the "
1411
  "WordPress file integrity scans feature page</a> for more information."
1412
  msgstr ""
1413
 
1414
- #: classes/Views/Settings.php:1190
1415
  msgid "Do you want the plugin to scan your website for file changes?"
1416
  msgstr ""
1417
 
1418
- #: classes/Views/Settings.php:1195
1419
  msgid "Keep a Log of File Changes"
1420
  msgstr ""
1421
 
1422
- #: classes/Views/Settings.php:1219
1423
  msgid ""
1424
  "Which file changes events do you want to keep a log of in the activity log?"
1425
  msgstr ""
1426
 
1427
- #: classes/Views/Settings.php:1221
1428
  msgid ""
1429
  "By default the plugin will keep a log whenever a file has been added, "
1430
  "modified or deleted. It will also log an event in the activity log when a "
@@ -1432,19 +1486,19 @@ msgid ""
1432
  "link to specify which of these events the plugin should keep a log of."
1433
  msgstr ""
1434
 
1435
- #: classes/Views/Settings.php:1227
1436
  msgid "Alert me when"
1437
  msgstr ""
1438
 
1439
- #: classes/Views/Settings.php:1240
1440
  msgid "Configure Events"
1441
  msgstr ""
1442
 
1443
- #: classes/Views/Settings.php:1249
1444
  msgid "When should the plugin scan your website for file changes?"
1445
  msgstr ""
1446
 
1447
- #: classes/Views/Settings.php:1251
1448
  msgid ""
1449
  "By default the plugin will run file integrity scans once a week. If you can, "
1450
  "ideally you should run file integrity scans on a daily basis. The file "
@@ -1454,283 +1508,283 @@ msgid ""
1454
  "complete."
1455
  msgstr ""
1456
 
1457
- #: classes/Views/Settings.php:1257
1458
  msgid "Scan Frequency"
1459
  msgstr ""
1460
 
1461
- #: classes/Views/Settings.php:1262
1462
  msgid "Daily"
1463
  msgstr ""
1464
 
1465
- #: classes/Views/Settings.php:1263
1466
  msgid "Weekly"
1467
  msgstr ""
1468
 
1469
- #: classes/Views/Settings.php:1264
1470
  msgid "Monthly"
1471
  msgstr ""
1472
 
1473
- #: classes/Views/Settings.php:1282
1474
  msgid "Scan Time"
1475
  msgstr ""
1476
 
1477
- #: classes/Views/Settings.php:1288
1478
  msgid "00:00"
1479
  msgstr ""
1480
 
1481
- #: classes/Views/Settings.php:1289
1482
  msgid "01:00"
1483
  msgstr ""
1484
 
1485
- #: classes/Views/Settings.php:1290
1486
  msgid "02:00"
1487
  msgstr ""
1488
 
1489
- #: classes/Views/Settings.php:1291
1490
  msgid "03:00"
1491
  msgstr ""
1492
 
1493
- #: classes/Views/Settings.php:1292
1494
  msgid "04:00"
1495
  msgstr ""
1496
 
1497
- #: classes/Views/Settings.php:1293
1498
  msgid "05:00"
1499
  msgstr ""
1500
 
1501
- #: classes/Views/Settings.php:1294
1502
  msgid "06:00"
1503
  msgstr ""
1504
 
1505
- #: classes/Views/Settings.php:1295
1506
  msgid "07:00"
1507
  msgstr ""
1508
 
1509
- #: classes/Views/Settings.php:1296
1510
  msgid "08:00"
1511
  msgstr ""
1512
 
1513
- #: classes/Views/Settings.php:1297
1514
  msgid "09:00"
1515
  msgstr ""
1516
 
1517
- #: classes/Views/Settings.php:1298
1518
  msgid "10:00"
1519
  msgstr ""
1520
 
1521
- #: classes/Views/Settings.php:1299
1522
  msgid "11:00"
1523
  msgstr ""
1524
 
1525
- #: classes/Views/Settings.php:1300
1526
  msgid "12:00"
1527
  msgstr ""
1528
 
1529
- #: classes/Views/Settings.php:1301
1530
  msgid "13:00"
1531
  msgstr ""
1532
 
1533
- #: classes/Views/Settings.php:1302
1534
  msgid "14:00"
1535
  msgstr ""
1536
 
1537
- #: classes/Views/Settings.php:1303
1538
  msgid "15:00"
1539
  msgstr ""
1540
 
1541
- #: classes/Views/Settings.php:1304
1542
  msgid "16:00"
1543
  msgstr ""
1544
 
1545
- #: classes/Views/Settings.php:1305
1546
  msgid "17:00"
1547
  msgstr ""
1548
 
1549
- #: classes/Views/Settings.php:1306
1550
  msgid "18:00"
1551
  msgstr ""
1552
 
1553
- #: classes/Views/Settings.php:1307
1554
  msgid "19:00"
1555
  msgstr ""
1556
 
1557
- #: classes/Views/Settings.php:1308
1558
  msgid "20:00"
1559
  msgstr ""
1560
 
1561
- #: classes/Views/Settings.php:1309
1562
  msgid "21:00"
1563
  msgstr ""
1564
 
1565
- #: classes/Views/Settings.php:1310
1566
  msgid "22:00"
1567
  msgstr ""
1568
 
1569
- #: classes/Views/Settings.php:1311
1570
  msgid "23:00"
1571
  msgstr ""
1572
 
1573
- #: classes/Views/Settings.php:1316
1574
  msgid "Monday"
1575
  msgstr ""
1576
 
1577
- #: classes/Views/Settings.php:1317
1578
  msgid "Tuesday"
1579
  msgstr ""
1580
 
1581
- #: classes/Views/Settings.php:1318
1582
  msgid "Wednesday"
1583
  msgstr ""
1584
 
1585
- #: classes/Views/Settings.php:1319
1586
  msgid "Thursday"
1587
  msgstr ""
1588
 
1589
- #: classes/Views/Settings.php:1320
1590
  msgid "Friday"
1591
  msgstr ""
1592
 
1593
- #: classes/Views/Settings.php:1321
1594
  msgid "Saturday"
1595
  msgstr ""
1596
 
1597
- #: classes/Views/Settings.php:1322
1598
  msgid "Sunday"
1599
  msgstr ""
1600
 
1601
- #: classes/Views/Settings.php:1327
1602
  msgid "01"
1603
  msgstr ""
1604
 
1605
- #: classes/Views/Settings.php:1328
1606
  msgid "02"
1607
  msgstr ""
1608
 
1609
- #: classes/Views/Settings.php:1329
1610
  msgid "03"
1611
  msgstr ""
1612
 
1613
- #: classes/Views/Settings.php:1330
1614
  msgid "04"
1615
  msgstr ""
1616
 
1617
- #: classes/Views/Settings.php:1331
1618
  msgid "05"
1619
  msgstr ""
1620
 
1621
- #: classes/Views/Settings.php:1332
1622
  msgid "06"
1623
  msgstr ""
1624
 
1625
- #: classes/Views/Settings.php:1333
1626
  msgid "07"
1627
  msgstr ""
1628
 
1629
- #: classes/Views/Settings.php:1334
1630
  msgid "08"
1631
  msgstr ""
1632
 
1633
- #: classes/Views/Settings.php:1335
1634
  msgid "09"
1635
  msgstr ""
1636
 
1637
- #: classes/Views/Settings.php:1336
1638
  msgid "10"
1639
  msgstr ""
1640
 
1641
- #: classes/Views/Settings.php:1337
1642
  msgid "11"
1643
  msgstr ""
1644
 
1645
- #: classes/Views/Settings.php:1338
1646
  msgid "12"
1647
  msgstr ""
1648
 
1649
- #: classes/Views/Settings.php:1339
1650
  msgid "13"
1651
  msgstr ""
1652
 
1653
- #: classes/Views/Settings.php:1340
1654
  msgid "14"
1655
  msgstr ""
1656
 
1657
- #: classes/Views/Settings.php:1341
1658
  msgid "15"
1659
  msgstr ""
1660
 
1661
- #: classes/Views/Settings.php:1342
1662
  msgid "16"
1663
  msgstr ""
1664
 
1665
- #: classes/Views/Settings.php:1343
1666
  msgid "17"
1667
  msgstr ""
1668
 
1669
- #: classes/Views/Settings.php:1344
1670
  msgid "18"
1671
  msgstr ""
1672
 
1673
- #: classes/Views/Settings.php:1345
1674
  msgid "19"
1675
  msgstr ""
1676
 
1677
- #: classes/Views/Settings.php:1346
1678
  msgid "20"
1679
  msgstr ""
1680
 
1681
- #: classes/Views/Settings.php:1347
1682
  msgid "21"
1683
  msgstr ""
1684
 
1685
- #: classes/Views/Settings.php:1348
1686
  msgid "22"
1687
  msgstr ""
1688
 
1689
- #: classes/Views/Settings.php:1349
1690
  msgid "23"
1691
  msgstr ""
1692
 
1693
- #: classes/Views/Settings.php:1350
1694
  msgid "24"
1695
  msgstr ""
1696
 
1697
- #: classes/Views/Settings.php:1351
1698
  msgid "25"
1699
  msgstr ""
1700
 
1701
- #: classes/Views/Settings.php:1352
1702
  msgid "26"
1703
  msgstr ""
1704
 
1705
- #: classes/Views/Settings.php:1353
1706
  msgid "27"
1707
  msgstr ""
1708
 
1709
- #: classes/Views/Settings.php:1354
1710
  msgid "28"
1711
  msgstr ""
1712
 
1713
- #: classes/Views/Settings.php:1355
1714
  msgid "29"
1715
  msgstr ""
1716
 
1717
- #: classes/Views/Settings.php:1356
1718
  msgid "30"
1719
  msgstr ""
1720
 
1721
- #: classes/Views/Settings.php:1372
1722
  msgid "Hour"
1723
  msgstr ""
1724
 
1725
- #: classes/Views/Settings.php:1388 classes/Views/Settings.php:1404
1726
  msgid "Day"
1727
  msgstr ""
1728
 
1729
- #: classes/Views/Settings.php:1414
1730
  msgid "Which directories should be scanned for file changes?"
1731
  msgstr ""
1732
 
1733
- #: classes/Views/Settings.php:1416
1734
  msgid ""
1735
  "The plugin will scan all the directories in your WordPress website by "
1736
  "default because that is the most secure option. Though if for some reason "
@@ -1738,49 +1792,49 @@ msgid ""
1738
  "them from the below list."
1739
  msgstr ""
1740
 
1741
- #: classes/Views/Settings.php:1422
1742
  msgid "Directories to scan"
1743
  msgstr ""
1744
 
1745
- #: classes/Views/Settings.php:1428
1746
  msgid "Root directory of WordPress (excluding sub directories)"
1747
  msgstr ""
1748
 
1749
- #: classes/Views/Settings.php:1429
1750
  msgid "WP Admin directory (/wp-admin/)"
1751
  msgstr ""
1752
 
1753
- #: classes/Views/Settings.php:1430
1754
  msgid "WP Includes directory (/wp-includes/)"
1755
  msgstr ""
1756
 
1757
- #: classes/Views/Settings.php:1431
1758
  msgid ""
1759
  "/wp-content/ directory (excluding plugins, themes & uploads directories)"
1760
  msgstr ""
1761
 
1762
- #: classes/Views/Settings.php:1432
1763
  msgid "Themes directory (/wp-content/themes/)"
1764
  msgstr ""
1765
 
1766
- #: classes/Views/Settings.php:1433
1767
  msgid "Plugins directory (/wp-content/plugins/)"
1768
  msgstr ""
1769
 
1770
- #: classes/Views/Settings.php:1434
1771
  msgid "Uploads directory (/wp-content/uploads/)"
1772
  msgstr ""
1773
 
1774
- #: classes/Views/Settings.php:1440
1775
  msgid ""
1776
  "Uploads directory of all sub sites on this network (/wp-content/sites/*)"
1777
  msgstr ""
1778
 
1779
- #: classes/Views/Settings.php:1463
1780
  msgid "What is the biggest file size the plugin should scan?"
1781
  msgstr ""
1782
 
1783
- #: classes/Views/Settings.php:1464
1784
  msgid ""
1785
  "By default the plugin does not scan files that are bigger than 5MB. Such "
1786
  "files are not common, hence typically not a target. Though if you are "
@@ -1788,21 +1842,21 @@ msgid ""
1788
  "limit from the below option."
1789
  msgstr ""
1790
 
1791
- #: classes/Views/Settings.php:1467
1792
  msgid "File Size Limit"
1793
  msgstr ""
1794
 
1795
- #: classes/Views/Settings.php:1470
1796
  msgid "MB"
1797
  msgstr ""
1798
 
1799
- #: classes/Views/Settings.php:1476
1800
  msgid ""
1801
  "Do you want to exclude specific files or files with a particular extension "
1802
  "from the scan?"
1803
  msgstr ""
1804
 
1805
- #: classes/Views/Settings.php:1477
1806
  msgid ""
1807
  "The plugin will scan everything that is in the WordPress root directory or "
1808
  "below, even if the files and directories are not part of WordPress. It is "
@@ -1811,54 +1865,54 @@ msgid ""
1811
  "excluded by default."
1812
  msgstr ""
1813
 
1814
- #: classes/Views/Settings.php:1482
1815
  msgid "Exclude All Files in These Directories"
1816
  msgstr ""
1817
 
1818
- #: classes/Views/Settings.php:1495 classes/Views/Settings.php:1531
1819
- #: classes/Views/Settings.php:1561
1820
  msgid "REMOVE"
1821
  msgstr ""
1822
 
1823
- #: classes/Views/Settings.php:1500 classes/Views/Settings.php:1536
1824
- #: classes/Views/Settings.php:1566 classes/Views/SetupWizard.php:533
1825
  #: classes/Views/SetupWizard.php:541 classes/Views/SetupWizard.php:626
1826
  #: classes/Views/SetupWizard.php:645 classes/Views/SetupWizard.php:664
1827
  msgid "ADD"
1828
  msgstr ""
1829
 
1830
- #: classes/Views/Settings.php:1503
1831
  msgid ""
1832
  "Specify the name of the directory and the path to it in relation to the "
1833
  "website's root. For example, if you want to want to exclude all files in the "
1834
  "sub directory dir1/dir2 specify the following:"
1835
  msgstr ""
1836
 
1837
- #: classes/Views/Settings.php:1514
1838
  msgid "Exclude These Files"
1839
  msgstr ""
1840
 
1841
- #: classes/Views/Settings.php:1539
1842
  msgid ""
1843
  "Specify the name and extension of the file(s) you want to exclude. Wildcard "
1844
  "not supported. There is no need to specify the path of the file."
1845
  msgstr ""
1846
 
1847
- #: classes/Views/Settings.php:1548
1848
  msgid "Exclude these File Types"
1849
  msgstr ""
1850
 
1851
- #: classes/Views/Settings.php:1569
1852
  msgid ""
1853
  "Specify the extension of the file types you want to exclude. You should "
1854
  "exclude any type of logs and backup files that tend to be very big."
1855
  msgstr ""
1856
 
1857
- #: classes/Views/Settings.php:1578
1858
  msgid "Launch an instant file integrity scan"
1859
  msgstr ""
1860
 
1861
- #: classes/Views/Settings.php:1580
1862
  msgid ""
1863
  "Click the Scan Now button to launch an instant file integrity scan using the "
1864
  "configured settings. You can navigate away from this page during the scan. "
@@ -1866,25 +1920,25 @@ msgid ""
1866
  "scans."
1867
  msgstr ""
1868
 
1869
- #: classes/Views/Settings.php:1586
1870
  msgid "Launch Instant Scan"
1871
  msgstr ""
1872
 
1873
- #: classes/Views/Settings.php:1592 classes/Views/Settings.php:1599
1874
- #: classes/Views/Settings.php:2091
1875
  msgid "Scan Now"
1876
  msgstr ""
1877
 
1878
- #: classes/Views/Settings.php:1593 classes/Views/Settings.php:1596
1879
- #: classes/Views/Settings.php:1600
1880
  msgid "Stop Scan"
1881
  msgstr ""
1882
 
1883
- #: classes/Views/Settings.php:1595 classes/Views/Settings.php:2093
1884
  msgid "Scan in Progress"
1885
  msgstr ""
1886
 
1887
- #: classes/Views/Settings.php:1679
1888
  msgid ""
1889
  "By default the plugin keeps a log of all user changes done on your WordPress "
1890
  "website. Use the setting below to exclude any objects from the activity log. "
@@ -1892,133 +1946,133 @@ msgid ""
1892
  "object is referred will not be logged in the activity log."
1893
  msgstr ""
1894
 
1895
- #: classes/Views/Settings.php:1683
1896
  msgid "Exclude Users:"
1897
  msgstr ""
1898
 
1899
- #: classes/Views/Settings.php:1704
1900
  msgid "Exclude Roles:"
1901
  msgstr ""
1902
 
1903
- #: classes/Views/Settings.php:1725
1904
  msgid "Exclude IP Addresses:"
1905
  msgstr ""
1906
 
1907
- #: classes/Views/Settings.php:1746
1908
  msgid "Exclude Post Type:"
1909
  msgstr ""
1910
 
1911
- #: classes/Views/Settings.php:1761
1912
  msgid ""
1913
  "WordPress has the post and page post types by default though your website "
1914
  "might use more post types (custom post types). You can exclude all post "
1915
  "types, including the default WordPress ones."
1916
  msgstr ""
1917
 
1918
- #: classes/Views/Settings.php:1768
1919
  msgid "Exclude Custom Fields:"
1920
  msgstr ""
1921
 
1922
- #: classes/Views/Settings.php:1783
1923
  msgid ""
1924
  "You can use the * wildcard to exclude multiple matching custom fields. For "
1925
  "example to exclude all custom fields starting with wp123 enter wp123*"
1926
  msgstr ""
1927
 
1928
- #: classes/Views/Settings.php:1790
1929
  msgid "Exclude Non-Existing URLs:"
1930
  msgstr ""
1931
 
1932
- #: classes/Views/Settings.php:1806
1933
  msgid ""
1934
  "Add the non existing URLs for which you do not want to be alerted of HTTP "
1935
  "404 errors in the activity log by specifying the complete URL.\tExamples "
1936
  "below:"
1937
  msgstr ""
1938
 
1939
- #: classes/Views/Settings.php:1808
1940
  msgid "File: "
1941
  msgstr ""
1942
 
1943
- #: classes/Views/Settings.php:1810
1944
  msgid "Directory: "
1945
  msgstr ""
1946
 
1947
- #: classes/Views/Settings.php:1843
1948
  msgid "These settings are for advanced users."
1949
  msgstr ""
1950
 
1951
- #: classes/Views/Settings.php:1844
1952
  msgid ""
1953
  "If you have any questions <a href=\"https://www.wpsecurityauditlog.com/"
1954
  "contact/\" target=\"_blank\">contact us</a>."
1955
  msgstr ""
1956
 
1957
- #: classes/Views/Settings.php:1847
1958
  msgid ""
1959
  "Troubleshooting setting: Keep a debug log of all the requests this website "
1960
  "receives"
1961
  msgstr ""
1962
 
1963
- #: classes/Views/Settings.php:1848
1964
  msgid ""
1965
  "Only enable the request log on testing, staging and development website. "
1966
  "Never enable logging on a live website unless instructed to do so. Enabling "
1967
  "request logging on a live website may degrade the performance of the website."
1968
  msgstr ""
1969
 
1970
- #: classes/Views/Settings.php:1852
1971
  msgid "Request Log"
1972
  msgstr ""
1973
 
1974
- #: classes/Views/Settings.php:1870
1975
  msgid ""
1976
  "<strong>Note:</strong> The requests debug log file is saved as request.log."
1977
  "php in the /wp-content/uploads/wp-security-audit-log/ directory."
1978
  msgstr ""
1979
 
1980
- #: classes/Views/Settings.php:1882
1981
  msgid "Reset plugin settings to default"
1982
  msgstr ""
1983
 
1984
- #: classes/Views/Settings.php:1883
1985
  msgid ""
1986
  "Click the RESET button to reset ALL plugin settings to default. Note that "
1987
  "the activity log data will be retained and only the plugin settings will be "
1988
  "reset. To purge the data of the activity log use the setting below."
1989
  msgstr ""
1990
 
1991
- #: classes/Views/Settings.php:1887
1992
  msgid "Reset Settings"
1993
  msgstr ""
1994
 
1995
- #: classes/Views/Settings.php:1889
1996
  msgid "RESET"
1997
  msgstr ""
1998
 
1999
- #: classes/Views/Settings.php:1895
2000
  msgid "Purge the WordPress activity log"
2001
  msgstr ""
2002
 
2003
- #: classes/Views/Settings.php:1896
2004
  msgid ""
2005
  "Click the Purge button below to delete all the data from the WordPress "
2006
  "activity log and start afresh."
2007
  msgstr ""
2008
 
2009
- #: classes/Views/Settings.php:1900
2010
  msgid "Purge Activity Log"
2011
  msgstr ""
2012
 
2013
- #: classes/Views/Settings.php:1902
2014
  msgid "PURGE"
2015
  msgstr ""
2016
 
2017
- #: classes/Views/Settings.php:1908
2018
  msgid "MainWP Child Site Stealth Mode"
2019
  msgstr ""
2020
 
2021
- #: classes/Views/Settings.php:1909
2022
  msgid ""
2023
  "This option is enabled automatically when the plugin detects the MainWP "
2024
  "Child plugin on the site. When this setting is enabled plugin access is "
@@ -2027,15 +2081,15 @@ msgid ""
2027
  "Disable this option to change the plugin to the default setup."
2028
  msgstr ""
2029
 
2030
- #: classes/Views/Settings.php:1913
2031
  msgid "Enable MainWP Child Site Stealth Mode"
2032
  msgstr ""
2033
 
2034
- #: classes/Views/Settings.php:1937
2035
  msgid "Do you want to delete the plugin data from the database upon uninstall?"
2036
  msgstr ""
2037
 
2038
- #: classes/Views/Settings.php:1938
2039
  msgid ""
2040
  "The plugin saves the activity log data and settings in the WordPress "
2041
  "database. By default upon uninstalling the plugin the data is kept in the "
@@ -2044,107 +2098,107 @@ msgid ""
2044
  "access it again even when you reinstall the plugin."
2045
  msgstr ""
2046
 
2047
- #: classes/Views/Settings.php:1942
2048
  msgid "Remove Data on Uninstall"
2049
  msgstr ""
2050
 
2051
- #: classes/Views/Settings.php:1967
2052
  msgid "Are you sure you want to reset all the plugin settings to default?"
2053
  msgstr ""
2054
 
2055
- #: classes/Views/Settings.php:1977
2056
  msgid "Are you sure you want to purge all the activity log data?"
2057
  msgstr ""
2058
 
2059
- #: classes/Views/Settings.php:2009
2060
  msgid "MainWP Child plugin is not active on this website."
2061
  msgstr ""
2062
 
2063
- #: classes/Views/Settings.php:2084
2064
  msgid "The specified value is not a valid URL!"
2065
  msgstr ""
2066
 
2067
- #: classes/Views/Settings.php:2085
2068
  msgid "The specified value is not a valid post type!"
2069
  msgstr ""
2070
 
2071
- #: classes/Views/Settings.php:2086
2072
  msgid "The specified value is not a valid IP address!"
2073
  msgstr ""
2074
 
2075
- #: classes/Views/Settings.php:2087
2076
  msgid "The specified value is not a user nor a role!"
2077
  msgstr ""
2078
 
2079
- #: classes/Views/Settings.php:2088
2080
  msgid "Filename cannot be added because it contains invalid characters."
2081
  msgstr ""
2082
 
2083
- #: classes/Views/Settings.php:2089
2084
  msgid "File extension cannot be added because it contains invalid characters."
2085
  msgstr ""
2086
 
2087
- #: classes/Views/Settings.php:2090
2088
  msgid "Directory cannot be added because it contains invalid characters."
2089
  msgstr ""
2090
 
2091
- #: classes/Views/Settings.php:2092
2092
  msgid "Scan Failed"
2093
  msgstr ""
2094
 
2095
- #: classes/Views/Settings.php:2217 classes/Views/Settings.php:2328
2096
  msgid "Invalid setting type."
2097
  msgstr ""
2098
 
2099
- #: classes/Views/Settings.php:2271
2100
  msgid "You can exclude this directory using the check boxes above."
2101
  msgstr ""
2102
 
2103
- #: classes/Views/Settings.php:2290
2104
  msgid "Option added to excluded types."
2105
  msgstr ""
2106
 
2107
- #: classes/Views/Settings.php:2294
2108
  msgid "This file is already excluded from the scan."
2109
  msgstr ""
2110
 
2111
- #: classes/Views/Settings.php:2296
2112
  msgid "This file extension is already excluded from the scan."
2113
  msgstr ""
2114
 
2115
- #: classes/Views/Settings.php:2298
2116
  msgid "This directory is already excluded from the scan."
2117
  msgstr ""
2118
 
2119
- #: classes/Views/Settings.php:2308
2120
  msgid "Option name is empty."
2121
  msgstr ""
2122
 
2123
- #: classes/Views/Settings.php:2404
2124
  msgid "Option removed from excluded scan types."
2125
  msgstr ""
2126
 
2127
- #: classes/Views/Settings.php:2409 classes/Views/Settings.php:2487
2128
  msgid "Something went wrong."
2129
  msgstr ""
2130
 
2131
- #: classes/Views/Settings.php:2436
2132
  msgid "A cron job is in progress."
2133
  msgstr ""
2134
 
2135
- #: classes/Views/Settings.php:2482 classes/Views/Settings.php:2519
2136
  msgid "Scan started successfully."
2137
  msgstr ""
2138
 
2139
- #: classes/Views/Settings.php:2544 classes/Views/Settings.php:2571
2140
  msgid "Tables has been reset."
2141
  msgstr ""
2142
 
2143
- #: classes/Views/Settings.php:2546 classes/Views/Settings.php:2573
2144
  msgid "Reset query failed."
2145
  msgstr ""
2146
 
2147
- #: classes/Views/Settings.php:2549 classes/Views/Settings.php:2576
2148
  msgid "Nonce Verification Failed."
2149
  msgstr ""
2150
 
@@ -2381,7 +2435,7 @@ msgid ""
2381
  "on all the events the plugin can keep a log of."
2382
  msgstr ""
2383
 
2384
- #: classes/Views/ToggleAlerts.php:209 defaults.php:485
2385
  msgid "Third Party Plugins"
2386
  msgstr ""
2387
 
@@ -2390,38 +2444,38 @@ msgid "Visitor Events"
2390
  msgstr ""
2391
 
2392
  #: classes/Views/ToggleAlerts.php:229 classes/Views/ToggleAlerts.php:261
2393
- #: defaults.php:265
2394
  msgid "Custom Post Types"
2395
  msgstr ""
2396
 
2397
  #: classes/Views/ToggleAlerts.php:229 classes/Views/ToggleAlerts.php:261
2398
- #: defaults.php:305
2399
  msgid "Pages"
2400
  msgstr ""
2401
 
2402
  #: classes/Views/ToggleAlerts.php:264 classes/Views/ToggleAlerts.php:271
2403
- #: classes/Views/ToggleAlerts.php:329 defaults.php:489
2404
  msgid "BBPress Forum"
2405
  msgstr ""
2406
 
2407
  #: classes/Views/ToggleAlerts.php:265 classes/Views/ToggleAlerts.php:278
2408
- #: classes/Views/ToggleAlerts.php:342 defaults.php:563
2409
  msgid "WooCommerce"
2410
  msgstr ""
2411
 
2412
  #: classes/Views/ToggleAlerts.php:266 classes/Views/ToggleAlerts.php:285
2413
  #: classes/Views/ToggleAlerts.php:342 classes/Views/ToggleAlerts.php:350
2414
- #: defaults.php:518
2415
  msgid "WooCommerce Products"
2416
  msgstr ""
2417
 
2418
  #: classes/Views/ToggleAlerts.php:267 classes/Views/ToggleAlerts.php:292
2419
- #: classes/Views/ToggleAlerts.php:357 defaults.php:613
2420
  msgid "Yoast SEO"
2421
  msgstr ""
2422
 
2423
  #: classes/Views/ToggleAlerts.php:268 classes/Views/ToggleAlerts.php:301
2424
- #: classes/Views/ToggleAlerts.php:370 defaults.php:466
2425
  msgid "MultiSite"
2426
  msgstr ""
2427
 
@@ -2433,12 +2487,12 @@ msgstr ""
2433
  msgid "Description"
2434
  msgstr ""
2435
 
2436
- #: classes/Views/ToggleAlerts.php:322 classes/Views/ToggleAlerts.php:482
2437
- #: classes/Views/ToggleAlerts.php:610
2438
  msgid "File Changes"
2439
  msgstr ""
2440
 
2441
- #: classes/Views/ToggleAlerts.php:323 defaults.php:196
2442
  msgid "Content"
2443
  msgstr ""
2444
 
@@ -2483,11 +2537,11 @@ msgid ""
2483
  "Your website is a single site so the multisite events have been disabled."
2484
  msgstr ""
2485
 
2486
- #: classes/Views/ToggleAlerts.php:380 defaults.php:170
2487
  msgid "User Profiles"
2488
  msgstr ""
2489
 
2490
- #: classes/Views/ToggleAlerts.php:383 defaults.php:152
2491
  msgid "Other User Activity"
2492
  msgstr ""
2493
 
@@ -2519,7 +2573,7 @@ msgstr ""
2519
  msgid "Tags"
2520
  msgstr ""
2521
 
2522
- #: classes/Views/ToggleAlerts.php:426 classes/Views/ToggleAlerts.php:442
2523
  msgid "Categories"
2524
  msgstr ""
2525
 
@@ -2535,64 +2589,68 @@ msgstr ""
2535
  msgid "Topics"
2536
  msgstr ""
2537
 
2538
- #: classes/Views/ToggleAlerts.php:436
2539
- msgid "Product Admin"
2540
  msgstr ""
2541
 
2542
  #: classes/Views/ToggleAlerts.php:438
2543
- msgid "Product Attribute"
2544
  msgstr ""
2545
 
2546
  #: classes/Views/ToggleAlerts.php:440
 
 
 
 
2547
  msgid "Store Admin"
2548
  msgstr ""
2549
 
2550
- #: classes/Views/ToggleAlerts.php:444
2551
  msgid "Attributes"
2552
  msgstr ""
2553
 
2554
- #: classes/Views/ToggleAlerts.php:446
2555
  msgid "Coupons"
2556
  msgstr ""
2557
 
2558
- #: classes/Views/ToggleAlerts.php:448
2559
  msgid "Orders"
2560
  msgstr ""
2561
 
2562
- #: classes/Views/ToggleAlerts.php:450
2563
  msgid "Website Changes"
2564
  msgstr ""
2565
 
2566
- #: classes/Views/ToggleAlerts.php:452
2567
  msgid "Plugin Settings"
2568
  msgstr ""
2569
 
2570
- #: classes/Views/ToggleAlerts.php:458
2571
  msgid "File Changes Scanning"
2572
  msgstr ""
2573
 
2574
- #: classes/Views/ToggleAlerts.php:514 classes/Views/ToggleAlerts.php:547
2575
  msgid ""
2576
  "Capture 404 requests to file (the log file are created in the /wp-content/"
2577
  "uploads/wp-security-audit-log/404s/ directory)"
2578
  msgstr ""
2579
 
2580
- #: classes/Views/ToggleAlerts.php:522 classes/Views/ToggleAlerts.php:555
2581
  msgid "Purge log files older than one month"
2582
  msgstr ""
2583
 
2584
- #: classes/Views/ToggleAlerts.php:527
2585
  msgid ""
2586
  "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
2587
  "to non-existing pages from the same IP address. Increase the value in this "
2588
  "setting to the desired amount to keep a log of more or less requests."
2589
  msgstr ""
2590
 
2591
- #: classes/Views/ToggleAlerts.php:532 classes/Views/ToggleAlerts.php:565
2592
  msgid "Record the referrer that generated the 404 error."
2593
  msgstr ""
2594
 
2595
- #: classes/Views/ToggleAlerts.php:560
2596
  msgid ""
2597
  "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
2598
  "to non-existing pages from the same IP address. Increase the value in this "
@@ -2601,14 +2659,14 @@ msgid ""
2601
  "scanned the plugin will consume more resources to log all the requests."
2602
  msgstr ""
2603
 
2604
- #: classes/Views/ToggleAlerts.php:577 classes/Views/ToggleAlerts.php:590
2605
  msgid ""
2606
  "Number of login attempts to log. Enter 0 to log all failed login attempts. "
2607
  "(By default the plugin only logs up to 10 failed login because the process "
2608
  "can be very resource intensive in case of a brute force attack)"
2609
  msgstr ""
2610
 
2611
- #: classes/Views/ToggleAlerts.php:603
2612
  msgid ""
2613
  "Log all stock changes. Disable this setting to only keep a log of stock "
2614
  "changes done manually via the WooCommerce dashboard. Therefore automated "
@@ -2616,67 +2674,75 @@ msgid ""
2616
  "plugins will not be logged."
2617
  msgstr ""
2618
 
2619
- #: classes/Views/ToggleAlerts.php:625
2620
  msgid "Configure the file integrity scan settings."
2621
  msgstr ""
2622
 
2623
- #: classes/Views/ToggleAlerts.php:640
2624
  msgid ""
2625
  "The plugin also keeps a log of some events that website visitors (non-logged "
2626
  "in users) do because it is typically required by site admins. You can "
2627
  "disable these events from here:"
2628
  msgstr ""
2629
 
2630
- #: classes/Views/ToggleAlerts.php:642
2631
  msgid "Enable website visitors events"
2632
  msgstr ""
2633
 
2634
- #: classes/Views/ToggleAlerts.php:648
2635
  msgid "Enable"
2636
  msgstr ""
2637
 
2638
- #: classes/Views/ToggleAlerts.php:653
2639
  msgid ""
2640
  "Below is the list of the events which are disabled when the above option is "
2641
  "disabled:"
2642
  msgstr ""
2643
 
2644
- #: classes/Views/ToggleAlerts.php:668
2645
  msgid "Save Changes"
2646
  msgstr ""
2647
 
2648
- #: classes/Views/ToggleAlerts.php:675
2649
  msgid "Log Level Updated"
2650
  msgstr ""
2651
 
2652
  #. translators: Alerts log level.
2653
- #: classes/Views/ToggleAlerts.php:679
2654
  #, php-format
2655
  msgid "The %s log level has been successfully loaded and applied."
2656
  msgstr ""
2657
 
2658
- #: classes/Views/ToggleAlerts.php:683
2659
  msgid "OK"
2660
  msgstr ""
2661
 
2662
- #: classes/Views/ToggleAlerts.php:698
2663
  msgid "Enable File Integrity Scanner"
2664
  msgstr ""
2665
 
2666
- #: classes/Views/ToggleAlerts.php:700
2667
  msgid ""
2668
  "The file integrity scanner is switched off. To enable this event it has to "
2669
  "be switched on."
2670
  msgstr ""
2671
 
2672
- #: classes/Views/ToggleAlerts.php:704
2673
  msgid "SWITCH ON"
2674
  msgstr ""
2675
 
2676
- #: classes/Views/ToggleAlerts.php:705
2677
  msgid "DISABLE EVENT"
2678
  msgstr ""
2679
 
 
 
 
 
 
 
 
 
2680
  #: classes/WidgetManager.php:55
2681
  msgid "Latest Events"
2682
  msgstr ""
@@ -2753,3357 +2819,3385 @@ msgstr ""
2753
  msgid "Debug informational messages."
2754
  msgstr ""
2755
 
2756
- #: defaults.php:148
2757
  msgid "Users Profiles & Activity"
2758
  msgstr ""
2759
 
2760
- #: defaults.php:153
2761
  msgid "User logged in"
2762
  msgstr ""
2763
 
2764
- #: defaults.php:153
2765
  msgid "Successfully logged in."
2766
  msgstr ""
2767
 
2768
- #: defaults.php:154
2769
  msgid "User logged out"
2770
  msgstr ""
2771
 
2772
- #: defaults.php:154
2773
  msgid "Successfully logged out."
2774
  msgstr ""
2775
 
2776
- #: defaults.php:155
2777
  msgid "Login failed"
2778
  msgstr ""
2779
 
2780
- #: defaults.php:155
2781
  msgid "%Attempts% failed login(s) detected."
2782
  msgstr ""
2783
 
2784
- #: defaults.php:156
2785
  msgid "Login failed / non existing user"
2786
  msgstr ""
2787
 
2788
- #: defaults.php:156
2789
  msgid ""
2790
  "%Attempts% failed login(s) detected using non existing user. %LogFileText%"
2791
  msgstr ""
2792
 
2793
- #: defaults.php:157
2794
  msgid "Login blocked"
2795
  msgstr ""
2796
 
2797
- #: defaults.php:157
2798
  msgid ""
2799
  "Blocked from logging in because the same WordPress user is logged in from "
2800
  "%ClientIP%."
2801
  msgstr ""
2802
 
2803
- #: defaults.php:158
2804
  msgid "User logged in with existing session(s)"
2805
  msgstr ""
2806
 
2807
- #: defaults.php:158
2808
  msgid ""
2809
  "Successfully logged in. Another session from %IPAddress% for this user "
2810
  "already exist."
2811
  msgstr ""
2812
 
2813
- #: defaults.php:159
2814
  msgid "User logged out all other sessions with the same username"
2815
  msgstr ""
2816
 
2817
- #: defaults.php:159
2818
  msgid "Logged out all other sessions with the same username."
2819
  msgstr ""
2820
 
2821
- #: defaults.php:160
2822
  msgid "User session destroyed and logged out"
2823
  msgstr ""
2824
 
2825
- #: defaults.php:160
2826
  msgid "Logged out session %TargetSessionID% which belonged to %TargetUserName%"
2827
  msgstr ""
2828
 
2829
- #: defaults.php:161
 
 
 
 
 
 
 
 
2830
  msgid "User uploaded file from Uploads directory"
2831
  msgstr ""
2832
 
2833
- #: defaults.php:161
2834
  msgid "Uploaded the file %FileName% in %FilePath%."
2835
  msgstr ""
2836
 
2837
- #: defaults.php:162
2838
  msgid "User deleted file from Uploads directory"
2839
  msgstr ""
2840
 
2841
- #: defaults.php:162
2842
  msgid "Deleted the file %FileName% from %FilePath%."
2843
  msgstr ""
2844
 
2845
- #: defaults.php:163
2846
  msgid "User requests non-existing pages (404 Error Pages)"
2847
  msgstr ""
2848
 
2849
- #: defaults.php:163
2850
  msgid ""
2851
  "Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. "
2852
  "%LinkFile%%URL%"
2853
  msgstr ""
2854
 
2855
- #: defaults.php:164
2856
  msgid "Website Visitor User requests non-existing pages (404 Error Pages)"
2857
  msgstr ""
2858
 
2859
- #: defaults.php:164
2860
  msgid ""
2861
  "Website Visitor Has requested a non existing page (404 Error Pages) %Attempts"
2862
  "% %Msg%. %LinkFile%%URL%"
2863
  msgstr ""
2864
 
2865
- #: defaults.php:171
2866
  msgid "New user was created on WordPress"
2867
  msgstr ""
2868
 
2869
- #: defaults.php:171
2870
  msgid ""
2871
  "A new user %NewUserData->Username% was created with role of %NewUserData-"
2872
  ">Roles%."
2873
  msgstr ""
2874
 
2875
- #: defaults.php:172
2876
  msgid "User created another WordPress user"
2877
  msgstr ""
2878
 
2879
- #: defaults.php:172
2880
  msgid ""
2881
  "%UserChanger% created a new user %NewUserData->Username% with the role of "
2882
  "%NewUserData->Roles%."
2883
  msgstr ""
2884
 
2885
- #: defaults.php:173
2886
  msgid "The role of a user was changed by another WordPress user"
2887
  msgstr ""
2888
 
2889
- #: defaults.php:173
2890
  msgid ""
2891
  "Changed the role of the user %TargetUsername% from %OldRole% to %NewRole%"
2892
  "%multisite_text%."
2893
  msgstr ""
2894
 
2895
- #: defaults.php:174
2896
  msgid "User has changed his or her password"
2897
  msgstr ""
2898
 
2899
- #: defaults.php:174
2900
  msgid "Changed the password."
2901
  msgstr ""
2902
 
2903
- #: defaults.php:175
2904
  msgid "User changed another user's password"
2905
  msgstr ""
2906
 
2907
- #: defaults.php:175
2908
  msgid ""
2909
  "Changed the password for the user %TargetUserData->Username% with the role "
2910
  "of %TargetUserData->Roles%."
2911
  msgstr ""
2912
 
2913
- #: defaults.php:176
2914
  msgid "User changed his or her email address"
2915
  msgstr ""
2916
 
2917
- #: defaults.php:176
2918
  msgid "Changed the email address from %OldEmail% to %NewEmail%."
2919
  msgstr ""
2920
 
2921
- #: defaults.php:177
2922
  msgid "User changed another user's email address"
2923
  msgstr ""
2924
 
2925
- #: defaults.php:177
2926
  msgid ""
2927
  "Changed the email address of the user %TargetUsername% from %OldEmail% to "
2928
  "%NewEmail%."
2929
  msgstr ""
2930
 
2931
- #: defaults.php:178
2932
  msgid "User was deleted by another user"
2933
  msgstr ""
2934
 
2935
- #: defaults.php:178
2936
  msgid ""
2937
  "Deleted the user %TargetUserData->Username% with the role of %TargetUserData-"
2938
  ">Roles%."
2939
  msgstr ""
2940
 
2941
- #: defaults.php:179
2942
  msgid "User opened the profile page of another user"
2943
  msgstr ""
2944
 
2945
- #: defaults.php:179
2946
  msgid "%UserChanger% opened the profile page of the user %TargetUsername%."
2947
  msgstr ""
2948
 
2949
- #: defaults.php:180
2950
  msgid "User updated a custom field value for a user"
2951
  msgstr ""
2952
 
2953
- #: defaults.php:180
2954
  msgid ""
2955
  "Changed the value of the custom field %custom_field_name%%ReportText% for "
2956
  "the user %TargetUsername%.%ChangeText%"
2957
  msgstr ""
2958
 
2959
- #: defaults.php:181
2960
  msgid "User created a custom field value for a user"
2961
  msgstr ""
2962
 
2963
- #: defaults.php:181
2964
  msgid ""
2965
  "Created the value of the custom field %custom_field_name% with %new_value% "
2966
  "for the user %TargetUsername%."
2967
  msgstr ""
2968
 
2969
- #: defaults.php:182
2970
  msgid "User changed first name for a user"
2971
  msgstr ""
2972
 
2973
- #: defaults.php:182
2974
  msgid ""
2975
  "Changed the first name of the user %TargetUsername% from %old_firstname% to "
2976
  "%new_firstname%"
2977
  msgstr ""
2978
 
2979
- #: defaults.php:183
2980
  msgid "User changed last name for a user"
2981
  msgstr ""
2982
 
2983
- #: defaults.php:183
2984
  msgid ""
2985
  "Changed the last name of the user %TargetUsername% from %old_lastname% to "
2986
  "%new_lastname%"
2987
  msgstr ""
2988
 
2989
- #: defaults.php:184
2990
  msgid "User changed nickname for a user"
2991
  msgstr ""
2992
 
2993
- #: defaults.php:184
2994
  msgid ""
2995
  "Changed the nickname of the user %TargetUsername% from %old_nickname% to "
2996
  "%new_nickname%"
2997
  msgstr ""
2998
 
2999
- #: defaults.php:185
3000
  msgid "User changed the display name for a user"
3001
  msgstr ""
3002
 
3003
- #: defaults.php:185
3004
  msgid ""
3005
  "Changed the Display name publicly of user %TargetUsername% from "
3006
  "%old_displayname% to %new_displayname%"
3007
  msgstr ""
3008
 
3009
- #: defaults.php:192
3010
  msgid "Content & Comments"
3011
  msgstr ""
3012
 
3013
- #: defaults.php:197
3014
  msgid "User created a new post and saved it as draft"
3015
  msgstr ""
3016
 
3017
- #: defaults.php:197
3018
  msgid ""
3019
  "Created a new %PostType% titled %PostTitle% and saved it as draft. "
3020
  "%EditorLinkPost%."
3021
  msgstr ""
3022
 
3023
- #: defaults.php:198
3024
  msgid "User published a post"
3025
  msgstr ""
3026
 
3027
- #: defaults.php:198
3028
  msgid ""
3029
  "Published a %PostType% titled %PostTitle%. URL is %PostUrl%. %EditorLinkPost"
3030
  "%."
3031
  msgstr ""
3032
 
3033
- #: defaults.php:199
3034
  msgid "User modified a post"
3035
  msgstr ""
3036
 
3037
- #: defaults.php:199
3038
  msgid ""
3039
  "Modified the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3040
  "%EditorLinkPost%."
3041
  msgstr ""
3042
 
3043
- #: defaults.php:200
3044
  msgid "User permanently deleted a post from the trash"
3045
  msgstr ""
3046
 
3047
- #: defaults.php:200
3048
  msgid ""
3049
  "Permanently deleted the %PostType% titled %PostTitle%. URL was %PostUrl%."
3050
  msgstr ""
3051
 
3052
- #: defaults.php:201
3053
  msgid "User moved a post to the trash"
3054
  msgstr ""
3055
 
3056
- #: defaults.php:201
3057
  msgid ""
3058
  "Moved the %PostStatus% %PostType% titled %PostTitle% to trash. URL is "
3059
  "%PostUrl%."
3060
  msgstr ""
3061
 
3062
- #: defaults.php:202
3063
  msgid "User restored a post from trash"
3064
  msgstr ""
3065
 
3066
- #: defaults.php:202
3067
  msgid ""
3068
  "The %PostStatus% %PostType% titled %PostTitle% has been restored from trash. "
3069
  "URL is: %PostUrl%. %EditorLinkPost%."
3070
  msgstr ""
3071
 
3072
- #: defaults.php:203
3073
  msgid "User changed post URL"
3074
  msgstr ""
3075
 
3076
- #: defaults.php:203
3077
  msgid ""
3078
  "Changed the URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText"
3079
  "%.%ChangeText% %EditorLinkPost%."
3080
  msgstr ""
3081
 
3082
- #: defaults.php:204
3083
  msgid "User changed post author"
3084
  msgstr ""
3085
 
3086
- #: defaults.php:204
3087
  msgid ""
3088
  "Changed the author of the %PostStatus% %PostType% titled %PostTitle% from "
3089
  "%OldAuthor% to %NewAuthor%. URL is: %PostUrl%. %EditorLinkPost%."
3090
  msgstr ""
3091
 
3092
- #: defaults.php:205
3093
  msgid "User changed post status"
3094
  msgstr ""
3095
 
3096
- #: defaults.php:205
3097
  msgid ""
3098
  "Changed the status of the %PostType% titled %PostTitle% from %OldStatus% to "
3099
  "%NewStatus%. URL is: %PostUrl%. %EditorLinkPost%."
3100
  msgstr ""
3101
 
3102
- #: defaults.php:206
3103
  msgid "User changed the visibility of a post"
3104
  msgstr ""
3105
 
3106
- #: defaults.php:206
3107
  msgid ""
3108
  "Changed the visibility of the %PostStatus% %PostType% titled %PostTitle% "
3109
  "from %OldVisibility% to %NewVisibility%. URL is: %PostUrl%. %EditorLinkPost%."
3110
  msgstr ""
3111
 
3112
- #: defaults.php:207
3113
  msgid "User changed the date of a post"
3114
  msgstr ""
3115
 
3116
- #: defaults.php:207
3117
  msgid ""
3118
  "Changed the date of the %PostStatus% %PostType% titled %PostTitle% from "
3119
  "%OldDate% to %NewDate%. URL is: %PostUrl%. %EditorLinkPost%."
3120
  msgstr ""
3121
 
3122
- #: defaults.php:208
3123
  msgid "User changed the parent of a page"
3124
  msgstr ""
3125
 
3126
- #: defaults.php:208
3127
  msgid ""
3128
  "Changed the parent of the %PostStatus% %PostType% titled %PostTitle% from "
3129
  "%OldParentName% to %NewParentName%. %EditorLinkPost%."
3130
  msgstr ""
3131
 
3132
- #: defaults.php:209
3133
  msgid "User changed the template of a page"
3134
  msgstr ""
3135
 
3136
- #: defaults.php:209
3137
  msgid ""
3138
  "Changed the template of the %PostStatus% %PostType% titled %PostTitle% from "
3139
  "%OldTemplate% to %NewTemplate%. %EditorLinkPost%."
3140
  msgstr ""
3141
 
3142
- #: defaults.php:210
3143
  msgid "User set a post as sticky"
3144
  msgstr ""
3145
 
3146
- #: defaults.php:210
3147
  msgid ""
3148
  "Set the post %PostTitle% as Sticky. Post URL is %PostUrl%. %EditorLinkPost%."
3149
  msgstr ""
3150
 
3151
- #: defaults.php:211
3152
  msgid "User removed post from sticky"
3153
  msgstr ""
3154
 
3155
- #: defaults.php:211
3156
  msgid "Removed the post %PostTitle% from Sticky. %EditorLinkPost%."
3157
  msgstr ""
3158
 
3159
- #: defaults.php:212
3160
  msgid "User modified the content of a post"
3161
  msgstr ""
3162
 
3163
- #: defaults.php:212
3164
  msgid ""
3165
  "Modified the content of the %PostStatus% %PostType% titled %PostTitle%. Post "
3166
  "URL is %PostUrl%. %RevisionLink% %EditorLinkPost%."
3167
  msgstr ""
3168
 
3169
- #: defaults.php:213
3170
  msgid "User submitted a post for review"
3171
  msgstr ""
3172
 
3173
- #: defaults.php:213
3174
  msgid ""
3175
  "Submitted the %PostType% titled %PostTitle% for review. URL is: %PostUrl%. "
3176
  "%EditorLinkPost%."
3177
  msgstr ""
3178
 
3179
- #: defaults.php:214
3180
  msgid "User scheduled a post"
3181
  msgstr ""
3182
 
3183
- #: defaults.php:214
3184
  msgid ""
3185
  "Scheduled the %PostType% titled %PostTitle% to be published on "
3186
  "%PublishingDate%. URL is: %PostUrl%. %EditorLinkPost%."
3187
  msgstr ""
3188
 
3189
- #: defaults.php:215
3190
  msgid "User changed title of a post"
3191
  msgstr ""
3192
 
3193
- #: defaults.php:215
3194
  msgid ""
3195
  "Changed the title of the %PostStatus% %PostType% from %OldTitle% to %NewTitle"
3196
  "%. URL is: %PostUrl%. %EditorLinkPost%."
3197
  msgstr ""
3198
 
3199
- #: defaults.php:216
3200
  msgid "User opened a post in the editor"
3201
  msgstr ""
3202
 
3203
- #: defaults.php:216
3204
  msgid ""
3205
  "Opened the %PostStatus% %PostType% titled %PostTitle% in the editor. URL is: "
3206
  "%PostUrl%. %EditorLinkPost%."
3207
  msgstr ""
3208
 
3209
- #: defaults.php:217
3210
  msgid "User viewed a post"
3211
  msgstr ""
3212
 
3213
- #: defaults.php:217
3214
  msgid ""
3215
  "Viewed the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3216
  "%EditorLinkPost%."
3217
  msgstr ""
3218
 
3219
- #: defaults.php:218
3220
  msgid "A plugin modified a post"
3221
  msgstr ""
3222
 
3223
- #: defaults.php:218
3224
  msgid ""
3225
  "Plugin modified the %PostStatus% %PostType% titled %PostTitle% of type "
3226
  "%PostType%. URL is: %PostUrl%. %EditorLinkPost%."
3227
  msgstr ""
3228
 
3229
- #: defaults.php:219
3230
  msgid "User disabled Comments/Trackbacks and Pingbacks in a post"
3231
  msgstr ""
3232
 
3233
- #: defaults.php:219
3234
  msgid ""
3235
  "Disabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
3236
  "%PostUrl%. %EditorLinkPost%."
3237
  msgstr ""
3238
 
3239
- #: defaults.php:220
3240
  msgid "User enabled Comments/Trackbacks and Pingbacks in a post"
3241
  msgstr ""
3242
 
3243
- #: defaults.php:220
3244
  msgid ""
3245
  "Enabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
3246
  "%PostUrl%. %EditorLinkPost%."
3247
  msgstr ""
3248
 
3249
- #: defaults.php:221
3250
  msgid "User added post tag"
3251
  msgstr ""
3252
 
3253
- #: defaults.php:221
3254
  msgid ""
3255
  "Added the tag %tag% to the %PostStatus% post titled %PostTitle%. URL is: "
3256
  "%PostUrl%. %EditorLinkPost%."
3257
  msgstr ""
3258
 
3259
- #: defaults.php:222
3260
  msgid "User removed post tag"
3261
  msgstr ""
3262
 
3263
- #: defaults.php:222
3264
  msgid ""
3265
  "Removed the tag %tag% from the %PostStatus% post titled %PostTitle%. URL is: "
3266
  "%PostUrl%. %EditorLinkPost%."
3267
  msgstr ""
3268
 
3269
- #: defaults.php:223
3270
  msgid "User created new tag"
3271
  msgstr ""
3272
 
3273
- #: defaults.php:223
3274
  msgid "Added a new tag called %TagName%. View the tag: %TagLink%."
3275
  msgstr ""
3276
 
3277
- #: defaults.php:224
3278
  msgid "User deleted tag"
3279
  msgstr ""
3280
 
3281
- #: defaults.php:224
3282
  msgid "Deleted the tag %TagName%."
3283
  msgstr ""
3284
 
3285
- #: defaults.php:225
3286
  msgid "User renamed tag"
3287
  msgstr ""
3288
 
3289
- #: defaults.php:225
3290
  msgid "Renamed a tag from %old_name% to %new_name%. View the tag: %TagLink%."
3291
  msgstr ""
3292
 
3293
- #: defaults.php:226
3294
  msgid "User changed tag slug"
3295
  msgstr ""
3296
 
3297
- #: defaults.php:226
3298
  msgid ""
3299
  "Changed the slug of tag %tag% from %old_slug% to %new_slug%. View the tag: "
3300
  "%TagLink%."
3301
  msgstr ""
3302
 
3303
- #: defaults.php:227
3304
  msgid "User changed tag description"
3305
  msgstr ""
3306
 
3307
- #: defaults.php:227
3308
  msgid ""
3309
  "Changed the description of the tag %tag%%ReportText%.%ChangeText% View the "
3310
  "tag: %TagLink%."
3311
  msgstr ""
3312
 
3313
- #: defaults.php:228
3314
  msgid "User changed post category"
3315
  msgstr ""
3316
 
3317
- #: defaults.php:228
3318
  msgid ""
3319
  "Changed the category of the %PostStatus% %PostType% titled %PostTitle% from "
3320
  "%OldCategories% to %NewCategories%. URL is: %PostUrl%. %EditorLinkPost%."
3321
  msgstr ""
3322
 
3323
- #: defaults.php:229
3324
  msgid "User created new category"
3325
  msgstr ""
3326
 
3327
- #: defaults.php:229
3328
  msgid ""
3329
  "Created a new category called %CategoryName%. Category slug is %Slug%. "
3330
  "%CategoryLink%."
3331
  msgstr ""
3332
 
3333
- #: defaults.php:230
3334
  msgid "User deleted category"
3335
  msgstr ""
3336
 
3337
- #: defaults.php:230
3338
  msgid ""
3339
  "Deleted the %CategoryName% category. Category slug was %Slug%. %CategoryLink"
3340
  "%."
3341
  msgstr ""
3342
 
3343
- #: defaults.php:231
3344
  msgid "Changed the parent of a category"
3345
  msgstr ""
3346
 
3347
- #: defaults.php:231
3348
  msgid ""
3349
  "Changed the parent of the category %CategoryName% from %OldParent% to "
3350
  "%NewParent%. %CategoryLink%."
3351
  msgstr ""
3352
 
3353
- #: defaults.php:232
3354
  msgid "User changed category name"
3355
  msgstr ""
3356
 
3357
- #: defaults.php:232
3358
  msgid "Changed the name of the category %old_name% to %new_name%."
3359
  msgstr ""
3360
 
3361
- #: defaults.php:233
3362
  msgid "User changed category slug"
3363
  msgstr ""
3364
 
3365
- #: defaults.php:233
3366
  msgid ""
3367
  "Changed the slug of the category %CategoryName% from %old_slug% to %new_slug"
3368
  "%."
3369
  msgstr ""
3370
 
3371
- #: defaults.php:234
3372
  msgid "User created a custom field for a post"
3373
  msgstr ""
3374
 
3375
- #: defaults.php:234
3376
  msgid ""
3377
  "Created a new custom field called %MetaKey% with value %MetaValue% in the "
3378
  "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3379
  "%EditorLinkPost%.<br>%MetaLink%."
3380
  msgstr ""
3381
 
3382
- #: defaults.php:235
3383
  msgid "User updated a custom field value for a post"
3384
  msgstr ""
3385
 
3386
- #: defaults.php:235
3387
  msgid ""
3388
  "Modified the value of the custom field %MetaKey%%ReportText% in the "
3389
  "%PostStatus% %PostType% titled %PostTitle%.%ChangeText% URL is: %PostUrl%. "
3390
  "%EditorLinkPost%.<br>%MetaLink%."
3391
  msgstr ""
3392
 
3393
- #: defaults.php:236
3394
  msgid "User deleted a custom field from a post"
3395
  msgstr ""
3396
 
3397
- #: defaults.php:236
3398
  msgid ""
3399
  "Deleted the custom field %MetaKey% with value %MetaValue% from %PostStatus% "
3400
  "%PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%."
3401
  msgstr ""
3402
 
3403
- #: defaults.php:237
3404
  msgid "User updated a custom field name for a post"
3405
  msgstr ""
3406
 
3407
- #: defaults.php:237
3408
  msgid ""
3409
  "Changed the custom field's name from %MetaKeyOld% to %MetaKeyNew% in the "
3410
  "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3411
  "%EditorLinkPost%.<br>%MetaLink%."
3412
  msgstr ""
3413
 
3414
- #: defaults.php:243
3415
  msgid "Comments"
3416
  msgstr ""
3417
 
3418
- #: defaults.php:244
3419
  msgid "User approved a comment"
3420
  msgstr ""
3421
 
3422
- #: defaults.php:244
3423
  msgid ""
3424
  "Approved the comment posted in response to the post %PostTitle% by %Author% "
3425
  "on %CommentLink%."
3426
  msgstr ""
3427
 
3428
- #: defaults.php:245
3429
  msgid "User unapproved a comment"
3430
  msgstr ""
3431
 
3432
- #: defaults.php:245
3433
  msgid ""
3434
  "Unapproved the comment posted in response to the post %PostTitle% by %Author"
3435
  "% on %CommentLink%."
3436
  msgstr ""
3437
 
3438
- #: defaults.php:246
3439
  msgid "User replied to a comment"
3440
  msgstr ""
3441
 
3442
- #: defaults.php:246
3443
  msgid ""
3444
  "Replied to the comment posted in response to the post %PostTitle% by %Author"
3445
  "% on %CommentLink%."
3446
  msgstr ""
3447
 
3448
- #: defaults.php:247
3449
  msgid "User edited a comment"
3450
  msgstr ""
3451
 
3452
- #: defaults.php:247
3453
  msgid ""
3454
  "Edited a comment posted in response to the post %PostTitle% by %Author% on "
3455
  "%CommentLink%."
3456
  msgstr ""
3457
 
3458
- #: defaults.php:248
3459
  msgid "User marked a comment as Spam"
3460
  msgstr ""
3461
 
3462
- #: defaults.php:248
3463
  msgid ""
3464
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
3465
  "%CommentLink% as Spam."
3466
  msgstr ""
3467
 
3468
- #: defaults.php:249
3469
  msgid "User marked a comment as Not Spam"
3470
  msgstr ""
3471
 
3472
- #: defaults.php:249
3473
  msgid ""
3474
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
3475
  "%CommentLink% as Not Spam."
3476
  msgstr ""
3477
 
3478
- #: defaults.php:250
3479
  msgid "User moved a comment to trash"
3480
  msgstr ""
3481
 
3482
- #: defaults.php:250
3483
  msgid ""
3484
  "Moved the comment posted in response to the post %PostTitle% by %Author% on "
3485
  "%Date% to trash."
3486
  msgstr ""
3487
 
3488
- #: defaults.php:251
3489
  msgid "User restored a comment from the trash"
3490
  msgstr ""
3491
 
3492
- #: defaults.php:251
3493
  msgid ""
3494
  "Restored the comment posted in response to the post %PostTitle% by %Author% "
3495
  "on %CommentLink% from the trash."
3496
  msgstr ""
3497
 
3498
- #: defaults.php:252
3499
  msgid "User permanently deleted a comment"
3500
  msgstr ""
3501
 
3502
- #: defaults.php:252
3503
  msgid ""
3504
  "Permanently deleted the comment posted in response to the post %PostTitle% "
3505
  "by %Author% on %Date%."
3506
  msgstr ""
3507
 
3508
- #: defaults.php:253
3509
  msgid "User posted a comment"
3510
  msgstr ""
3511
 
3512
- #: defaults.php:253 defaults.php:254
3513
  msgid "%CommentMsg% on %CommentLink%."
3514
  msgstr ""
3515
 
3516
- #: defaults.php:254
3517
  msgid "Visitor posted a comment"
3518
  msgstr ""
3519
 
3520
- #: defaults.php:266
3521
  msgid "User modified a draft blog post"
3522
  msgstr ""
3523
 
3524
- #: defaults.php:266
3525
  msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
3526
  msgstr ""
3527
 
3528
- #: defaults.php:267
3529
  msgid "User created a new post with custom post type and saved it as draft"
3530
  msgstr ""
3531
 
3532
- #: defaults.php:267
3533
  msgid ""
3534
  "Created a new custom post called %PostTitle% of type %PostType%. "
3535
  "%EditorLinkPost%."
3536
  msgstr ""
3537
 
3538
- #: defaults.php:268
3539
  msgid "User published a post with custom post type"
3540
  msgstr ""
3541
 
3542
- #: defaults.php:268
3543
  msgid ""
3544
  "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
3545
  "%. %EditorLinkPost%."
3546
  msgstr ""
3547
 
3548
- #: defaults.php:269
3549
  msgid "User modified a post with custom post type"
3550
  msgstr ""
3551
 
3552
- #: defaults.php:269
3553
  msgid ""
3554
  "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
3555
  "%. %EditorLinkPost%."
3556
  msgstr ""
3557
 
3558
- #: defaults.php:270
3559
  msgid "User modified a draft post with custom post type"
3560
  msgstr ""
3561
 
3562
- #: defaults.php:270
3563
  msgid ""
3564
  "Modified the draft custom post %PostTitle% of type is %PostType%. "
3565
  "%EditorLinkPost%."
3566
  msgstr ""
3567
 
3568
- #: defaults.php:271
3569
  msgid "User permanently deleted post with custom post type"
3570
  msgstr ""
3571
 
3572
- #: defaults.php:271
3573
  msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
3574
  msgstr ""
3575
 
3576
- #: defaults.php:272
3577
  msgid "User moved post with custom post type to trash"
3578
  msgstr ""
3579
 
3580
- #: defaults.php:272
3581
  msgid ""
3582
  "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was "
3583
  "%PostUrl%."
3584
  msgstr ""
3585
 
3586
- #: defaults.php:273
3587
  msgid "User restored post with custom post type from trash"
3588
  msgstr ""
3589
 
3590
- #: defaults.php:273
3591
  msgid ""
3592
  "The custom post %PostTitle% of type %PostType% has been restored from trash. "
3593
  "%EditorLinkPost%."
3594
  msgstr ""
3595
 
3596
- #: defaults.php:274
3597
  msgid "User changed the category of a post with custom post type"
3598
  msgstr ""
3599
 
3600
- #: defaults.php:274
3601
  msgid ""
3602
  "Changed the category(ies) of the custom post %PostTitle% of type %PostType% "
3603
  "from %OldCategories% to %NewCategories%. %EditorLinkPost%."
3604
  msgstr ""
3605
 
3606
- #: defaults.php:275
3607
  msgid "User changed the URL of a post with custom post type"
3608
  msgstr ""
3609
 
3610
- #: defaults.php:275
3611
  msgid ""
3612
  "Changed the URL of the custom post %PostTitle% of type %PostType% from "
3613
  "%OldUrl% to %NewUrl%. %EditorLinkPost%."
3614
  msgstr ""
3615
 
3616
- #: defaults.php:276
3617
  msgid "User changed the author or post with custom post type"
3618
  msgstr ""
3619
 
3620
- #: defaults.php:276
3621
  msgid ""
3622
  "Changed the author of custom post %PostTitle% of type %PostType% from "
3623
  "%OldAuthor% to %NewAuthor%. %EditorLinkPost%."
3624
  msgstr ""
3625
 
3626
- #: defaults.php:277
3627
  msgid "User changed the status of post with custom post type"
3628
  msgstr ""
3629
 
3630
- #: defaults.php:277
3631
  msgid ""
3632
  "Changed the status of custom post %PostTitle% of type %PostType% from "
3633
  "%OldStatus% to %NewStatus%. %EditorLinkPost%."
3634
  msgstr ""
3635
 
3636
- #: defaults.php:278
3637
  msgid "User changed the visibility of a post with custom post type"
3638
  msgstr ""
3639
 
3640
- #: defaults.php:278
3641
  msgid ""
3642
  "Changed the visibility of the custom post %PostTitle% of type %PostType% "
3643
  "from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
3644
  msgstr ""
3645
 
3646
- #: defaults.php:279
3647
  msgid "User changed the date of post with custom post type"
3648
  msgstr ""
3649
 
3650
- #: defaults.php:279
3651
  msgid ""
3652
  "Changed the date of the custom post %PostTitle% of type %PostType% from "
3653
  "%OldDate% to %NewDate%. %EditorLinkPost%."
3654
  msgstr ""
3655
 
3656
- #: defaults.php:280
3657
  msgid "User created a custom field for a custom post type"
3658
  msgstr ""
3659
 
3660
- #: defaults.php:280
3661
  msgid ""
3662
  "Created a new custom field %MetaKey% with value %MetaValue% in custom post "
3663
  "%PostTitle% of type %PostType%. %EditorLinkPost%.<br>%MetaLink%."
3664
  msgstr ""
3665
 
3666
- #: defaults.php:281
3667
  msgid "User updated a custom field for a custom post type"
3668
  msgstr ""
3669
 
3670
- #: defaults.php:281
3671
  msgid ""
3672
  "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
3673
  "%MetaValueNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost"
3674
  "%.<br>%MetaLink%."
3675
  msgstr ""
3676
 
3677
- #: defaults.php:282
3678
  msgid "User deleted a custom field from a custom post type"
3679
  msgstr ""
3680
 
3681
- #: defaults.php:282
3682
  msgid ""
3683
  "Deleted the custom field %MetaKey% with id %MetaID% from custom post "
3684
  "%PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
3685
  msgstr ""
3686
 
3687
- #: defaults.php:283
3688
  msgid "User updated a custom field name for a custom post type"
3689
  msgstr ""
3690
 
3691
- #: defaults.php:283
3692
  msgid ""
3693
  "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom "
3694
  "post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
3695
  msgstr ""
3696
 
3697
- #: defaults.php:284
3698
  msgid "User modified content for a published custom post type"
3699
  msgstr ""
3700
 
3701
- #: defaults.php:284
3702
  msgid ""
3703
  "Modified the content of the published custom post type %PostTitle%. Post URL "
3704
  "is %PostUrl%.%EditorLinkPost%."
3705
  msgstr ""
3706
 
3707
- #: defaults.php:285
3708
  msgid "User modified content for a draft post"
3709
  msgstr ""
3710
 
3711
- #: defaults.php:285
3712
  msgid ""
3713
  "Modified the content of the draft post %PostTitle%.%RevisionLink% "
3714
  "%EditorLinkPost%."
3715
  msgstr ""
3716
 
3717
- #: defaults.php:286
3718
  msgid "User modified content for a draft custom post type"
3719
  msgstr ""
3720
 
3721
- #: defaults.php:286
3722
  msgid ""
3723
  "Modified the content of the draft custom post type %PostTitle%."
3724
  "%EditorLinkPost%."
3725
  msgstr ""
3726
 
3727
- #: defaults.php:287
3728
  msgid "User modified content of a post"
3729
  msgstr ""
3730
 
3731
- #: defaults.php:287
3732
  msgid ""
3733
  "Modified the content of post %PostTitle% which is submitted for review."
3734
  "%RevisionLink% %EditorLinkPost%."
3735
  msgstr ""
3736
 
3737
- #: defaults.php:288
3738
  msgid "User scheduled a custom post type"
3739
  msgstr ""
3740
 
3741
- #: defaults.php:288
3742
  msgid ""
3743
  "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. "
3744
  "%EditorLinkPost%."
3745
  msgstr ""
3746
 
3747
- #: defaults.php:289
3748
  msgid "User changed title of a custom post type"
3749
  msgstr ""
3750
 
3751
- #: defaults.php:289
3752
  msgid ""
3753
  "Changed the title of the custom post %OldTitle% to %NewTitle%. "
3754
  "%EditorLinkPost%."
3755
  msgstr ""
3756
 
3757
- #: defaults.php:290
3758
  msgid "User opened a custom post type in the editor"
3759
  msgstr ""
3760
 
3761
- #: defaults.php:290
3762
  msgid ""
3763
  "Opened the custom post %PostTitle% of type %PostType% in the editor. View "
3764
  "the post: %EditorLinkPost%."
3765
  msgstr ""
3766
 
3767
- #: defaults.php:291
3768
  msgid "User viewed a custom post type"
3769
  msgstr ""
3770
 
3771
- #: defaults.php:291
3772
  msgid ""
3773
  "Viewed the custom post %PostTitle% of type %PostType%. View the post: "
3774
  "%PostUrl%."
3775
  msgstr ""
3776
 
3777
- #: defaults.php:292
3778
  msgid "A plugin created a custom post"
3779
  msgstr ""
3780
 
3781
- #: defaults.php:292
3782
  msgid "A plugin automatically created the following custom post: %PostTitle%."
3783
  msgstr ""
3784
 
3785
- #: defaults.php:293
3786
  msgid "A plugin deleted a custom post"
3787
  msgstr ""
3788
 
3789
- #: defaults.php:293
3790
  msgid "A plugin automatically deleted the following custom post: %PostTitle%."
3791
  msgstr ""
3792
 
3793
- #: defaults.php:294
3794
  msgid "A plugin modified a custom post"
3795
  msgstr ""
3796
 
3797
- #: defaults.php:294
3798
  msgid ""
3799
  "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
3800
  msgstr ""
3801
 
3802
- #: defaults.php:306
3803
  msgid "User created a new WordPress page and saved it as draft"
3804
  msgstr ""
3805
 
3806
- #: defaults.php:306
3807
  msgid ""
3808
  "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage"
3809
  "%."
3810
  msgstr ""
3811
 
3812
- #: defaults.php:307
3813
  msgid "User published a WordPress page"
3814
  msgstr ""
3815
 
3816
- #: defaults.php:307
3817
  msgid ""
3818
  "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
3819
  msgstr ""
3820
 
3821
- #: defaults.php:308
3822
  msgid "User modified a published WordPress page"
3823
  msgstr ""
3824
 
3825
- #: defaults.php:308
3826
  msgid ""
3827
  "Modified the published page %PostTitle%. Page URL is %PostUrl%. "
3828
  "%EditorLinkPage%."
3829
  msgstr ""
3830
 
3831
- #: defaults.php:309
3832
  msgid "User modified a draft WordPress page"
3833
  msgstr ""
3834
 
3835
- #: defaults.php:309
3836
  msgid ""
3837
  "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
3838
  msgstr ""
3839
 
3840
- #: defaults.php:310
3841
  msgid "User permanently deleted a page from the trash"
3842
  msgstr ""
3843
 
3844
- #: defaults.php:310
3845
  msgid "Permanently deleted the page %PostTitle%."
3846
  msgstr ""
3847
 
3848
- #: defaults.php:311
3849
  msgid "User moved WordPress page to the trash"
3850
  msgstr ""
3851
 
3852
- #: defaults.php:311
3853
  msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
3854
  msgstr ""
3855
 
3856
- #: defaults.php:312
3857
  msgid "User restored a WordPress page from trash"
3858
  msgstr ""
3859
 
3860
- #: defaults.php:312
3861
  msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
3862
  msgstr ""
3863
 
3864
- #: defaults.php:313
3865
  msgid "User changed page URL"
3866
  msgstr ""
3867
 
3868
- #: defaults.php:313
3869
  msgid ""
3870
  "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. "
3871
  "%EditorLinkPage%."
3872
  msgstr ""
3873
 
3874
- #: defaults.php:314
3875
  msgid "User changed page author"
3876
  msgstr ""
3877
 
3878
- #: defaults.php:314
3879
  msgid ""
3880
  "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. "
3881
  "%EditorLinkPage%."
3882
  msgstr ""
3883
 
3884
- #: defaults.php:315
3885
  msgid "User changed page status"
3886
  msgstr ""
3887
 
3888
- #: defaults.php:315
3889
  msgid ""
3890
  "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. "
3891
  "%EditorLinkPage%."
3892
  msgstr ""
3893
 
3894
- #: defaults.php:316
3895
  msgid "User changed the visibility of a page post"
3896
  msgstr ""
3897
 
3898
- #: defaults.php:316
3899
  msgid ""
3900
  "Changed the visibility of the page %PostTitle% from %OldVisibility% to "
3901
  "%NewVisibility%. %EditorLinkPage%."
3902
  msgstr ""
3903
 
3904
- #: defaults.php:317
3905
  msgid "User changed the date of a page post"
3906
  msgstr ""
3907
 
3908
- #: defaults.php:317
3909
  msgid ""
3910
  "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. "
3911
  "%EditorLinkPage%."
3912
  msgstr ""
3913
 
3914
- #: defaults.php:318
3915
  msgid "User created a custom field for a page"
3916
  msgstr ""
3917
 
3918
- #: defaults.php:318
3919
  msgid ""
3920
  "Created a new custom field called %MetaKey% with value %MetaValue% in the "
3921
  "page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3922
  msgstr ""
3923
 
3924
- #: defaults.php:319
3925
  msgid "User updated a custom field value for a page"
3926
  msgstr ""
3927
 
3928
- #: defaults.php:319
3929
  msgid ""
3930
  "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
3931
  "%MetaValueNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3932
  msgstr ""
3933
 
3934
- #: defaults.php:320
3935
  msgid "User deleted a custom field from a page"
3936
  msgstr ""
3937
 
3938
- #: defaults.php:320
3939
  msgid ""
3940
  "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% "
3941
  "%EditorLinkPage%.<br>%MetaLink%."
3942
  msgstr ""
3943
 
3944
- #: defaults.php:321
3945
  msgid "User updated a custom field name for a page"
3946
  msgstr ""
3947
 
3948
- #: defaults.php:321
3949
  msgid ""
3950
  "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page "
3951
  "%PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3952
  msgstr ""
3953
 
3954
- #: defaults.php:322
3955
  msgid "User modified content for a published page"
3956
  msgstr ""
3957
 
3958
- #: defaults.php:322
3959
  msgid ""
3960
  "Modified the content of the published page %PostTitle%. Page URL is %PostUrl"
3961
  "%. %RevisionLink% %EditorLinkPage%."
3962
  msgstr ""
3963
 
3964
- #: defaults.php:323
3965
  msgid "User modified content for a draft page"
3966
  msgstr ""
3967
 
3968
- #: defaults.php:323
3969
  msgid ""
3970
  "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage"
3971
  "%."
3972
  msgstr ""
3973
 
3974
- #: defaults.php:324
3975
  msgid "User scheduled a page"
3976
  msgstr ""
3977
 
3978
- #: defaults.php:324
3979
  msgid ""
3980
  "Scheduled the page %PostTitle% to be published %PublishingDate%. "
3981
  "%EditorLinkPage%."
3982
  msgstr ""
3983
 
3984
- #: defaults.php:325
3985
  msgid "User changed title of a page"
3986
  msgstr ""
3987
 
3988
- #: defaults.php:325
3989
  msgid ""
3990
  "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
3991
  msgstr ""
3992
 
3993
- #: defaults.php:326
3994
  msgid "User opened a page in the editor"
3995
  msgstr ""
3996
 
3997
- #: defaults.php:326
3998
  msgid ""
3999
  "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
4000
  msgstr ""
4001
 
4002
- #: defaults.php:327
4003
  msgid "User viewed a page"
4004
  msgstr ""
4005
 
4006
- #: defaults.php:327
4007
  msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
4008
  msgstr ""
4009
 
4010
- #: defaults.php:328
4011
  msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
4012
  msgstr ""
4013
 
4014
- #: defaults.php:328
4015
  msgid ""
4016
  "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
4017
  msgstr ""
4018
 
4019
- #: defaults.php:329
4020
  msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
4021
  msgstr ""
4022
 
4023
- #: defaults.php:329
4024
  msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
4025
  msgstr ""
4026
 
4027
- #: defaults.php:330
4028
  msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
4029
  msgstr ""
4030
 
4031
- #: defaults.php:330
4032
  msgid ""
4033
  "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
4034
  msgstr ""
4035
 
4036
- #: defaults.php:331
4037
  msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
4038
  msgstr ""
4039
 
4040
- #: defaults.php:331
4041
  msgid ""
4042
  "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
4043
  msgstr ""
4044
 
4045
- #: defaults.php:332
4046
  msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
4047
  msgstr ""
4048
 
4049
- #: defaults.php:332
4050
  msgid ""
4051
  "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
4052
  msgstr ""
4053
 
4054
- #: defaults.php:333
4055
  msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
4056
  msgstr ""
4057
 
4058
- #: defaults.php:333
4059
  msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
4060
  msgstr ""
4061
 
4062
- #: defaults.php:334
4063
  msgid "A plugin created a page"
4064
  msgstr ""
4065
 
4066
- #: defaults.php:334
4067
  msgid "A plugin automatically created the following page: %PostTitle%."
4068
  msgstr ""
4069
 
4070
- #: defaults.php:335
4071
  msgid "A plugin deleted a page"
4072
  msgstr ""
4073
 
4074
- #: defaults.php:335
4075
  msgid "A plugin automatically deleted the following page: %PostTitle%."
4076
  msgstr ""
4077
 
4078
- #: defaults.php:336
4079
  msgid "A plugin modified a page"
4080
  msgstr ""
4081
 
4082
- #: defaults.php:336
4083
  msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
4084
  msgstr ""
4085
 
4086
- #: defaults.php:343
4087
  msgid "WordPress Install"
4088
  msgstr ""
4089
 
4090
- #: defaults.php:347
4091
  msgid "Database"
4092
  msgstr ""
4093
 
4094
- #: defaults.php:348
4095
  msgid "Unknown component created tables"
4096
  msgstr ""
4097
 
4098
- #: defaults.php:348
4099
  msgid ""
4100
  "An unknown component created these tables in the database: %TableNames%."
4101
  msgstr ""
4102
 
4103
- #: defaults.php:349
4104
  msgid "Unknown component modified tables structure"
4105
  msgstr ""
4106
 
4107
- #: defaults.php:349
4108
  msgid ""
4109
  "An unknown component modified the structure of these database tables: "
4110
  "%TableNames%."
4111
  msgstr ""
4112
 
4113
- #: defaults.php:350
4114
  msgid "Unknown component deleted tables"
4115
  msgstr ""
4116
 
4117
- #: defaults.php:350
4118
  msgid ""
4119
  "An unknown component deleted the following tables from the database: "
4120
  "%TableNames%."
4121
  msgstr ""
4122
 
4123
- #: defaults.php:357
4124
  msgid "User installed a plugin"
4125
  msgstr ""
4126
 
4127
- #: defaults.php:357
4128
  msgid "Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%."
4129
  msgstr ""
4130
 
4131
- #: defaults.php:358
4132
  msgid "User activated a WordPress plugin"
4133
  msgstr ""
4134
 
4135
- #: defaults.php:358
4136
  msgid "Activated the plugin %PluginData->Name% installed in %PluginFile%."
4137
  msgstr ""
4138
 
4139
- #: defaults.php:359
4140
  msgid "User deactivated a WordPress plugin"
4141
  msgstr ""
4142
 
4143
- #: defaults.php:359
4144
  msgid "Deactivated the plugin %PluginData->Name% installed in %PluginFile%."
4145
  msgstr ""
4146
 
4147
- #: defaults.php:360
4148
  msgid "User uninstalled a plugin"
4149
  msgstr ""
4150
 
4151
- #: defaults.php:360
4152
  msgid ""
4153
  "Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile"
4154
  "%."
4155
  msgstr ""
4156
 
4157
- #: defaults.php:361
4158
  msgid "User upgraded a plugin"
4159
  msgstr ""
4160
 
4161
- #: defaults.php:361
4162
  msgid "Upgraded the plugin %PluginData->Name% installed in %PluginFile%."
4163
  msgstr ""
4164
 
4165
- #: defaults.php:362
4166
  msgid "Plugin created tables"
4167
  msgstr ""
4168
 
4169
- #: defaults.php:362
4170
  msgid ""
4171
  "Plugin %Plugin->Name% created these tables in the database: %TableNames%."
4172
  msgstr ""
4173
 
4174
- #: defaults.php:363
4175
  msgid "Plugin modified tables structure"
4176
  msgstr ""
4177
 
4178
- #: defaults.php:363
4179
  msgid ""
4180
  "Plugin %Plugin->Name% modified the structure of these database tables: "
4181
  "%TableNames%."
4182
  msgstr ""
4183
 
4184
- #: defaults.php:364
4185
  msgid "Plugin deleted tables"
4186
  msgstr ""
4187
 
4188
- #: defaults.php:364
4189
  msgid ""
4190
  "Plugin %Plugin->Name% deleted the following tables from the database: "
4191
  "%TableNames%."
4192
  msgstr ""
4193
 
4194
- #: defaults.php:365
4195
  msgid "A plugin created a post"
4196
  msgstr ""
4197
 
4198
- #: defaults.php:365
4199
  msgid ""
4200
  "A plugin automatically created the following %PostType% called %PostTitle%. "
4201
  "View the post: %EditorLinkPost%."
4202
  msgstr ""
4203
 
4204
- #: defaults.php:366
4205
  msgid "A plugin deleted a post"
4206
  msgstr ""
4207
 
4208
- #: defaults.php:366
4209
  msgid ""
4210
  "A plugin automatically deleted the following %PostType% called %PostTitle%."
4211
  msgstr ""
4212
 
4213
- #: defaults.php:367
4214
  msgid "User changed a file using the plugin editor"
4215
  msgstr ""
4216
 
4217
- #: defaults.php:367
4218
  msgid "Modified %File% with the Plugin Editor."
4219
  msgstr ""
4220
 
4221
- #: defaults.php:373
4222
  msgid "Themes"
4223
  msgstr ""
4224
 
4225
- #: defaults.php:374
4226
  msgid "User installed a theme"
4227
  msgstr ""
4228
 
4229
- #: defaults.php:374
4230
  msgid ""
4231
  "Installed the theme \"%Theme->Name%\" in %Theme->get_template_directory%."
4232
  msgstr ""
4233
 
4234
- #: defaults.php:375
4235
  msgid "User activated a theme"
4236
  msgstr ""
4237
 
4238
- #: defaults.php:375
4239
  msgid ""
4240
  "Activated the theme \"%Theme->Name%\", installed in %Theme-"
4241
  ">get_template_directory%."
4242
  msgstr ""
4243
 
4244
- #: defaults.php:376
4245
  msgid "User uninstalled a theme"
4246
  msgstr ""
4247
 
4248
- #: defaults.php:376
4249
  msgid ""
4250
  "Deleted the theme \"%Theme->Name%\" installed in %Theme-"
4251
  ">get_template_directory%."
4252
  msgstr ""
4253
 
4254
- #: defaults.php:377
4255
  msgid "Activated theme on network"
4256
  msgstr ""
4257
 
4258
- #: defaults.php:377
4259
  msgid ""
4260
  "Network activated the theme %Theme->Name% installed in %Theme-"
4261
  ">get_template_directory%."
4262
  msgstr ""
4263
 
4264
- #: defaults.php:378
4265
  msgid "Deactivated theme from network"
4266
  msgstr ""
4267
 
4268
- #: defaults.php:378
4269
  msgid ""
4270
  "Network deactivated the theme %Theme->Name% installed in %Theme-"
4271
  ">get_template_directory%."
4272
  msgstr ""
4273
 
4274
- #: defaults.php:379
4275
  msgid "Theme created tables"
4276
  msgstr ""
4277
 
4278
- #: defaults.php:379
4279
  msgid "Theme %Theme->Name% created these tables in the database: %TableNames%."
4280
  msgstr ""
4281
 
4282
- #: defaults.php:380
4283
  msgid "Theme modified tables structure"
4284
  msgstr ""
4285
 
4286
- #: defaults.php:380
4287
  msgid ""
4288
  "Theme %Theme->Name% modified the structure of these database tables: "
4289
  "%TableNames%."
4290
  msgstr ""
4291
 
4292
- #: defaults.php:381
4293
  msgid "Theme deleted tables"
4294
  msgstr ""
4295
 
4296
- #: defaults.php:381
4297
  msgid ""
4298
  "Theme %Theme->Name% deleted the following tables from the database: "
4299
  "%TableNames%."
4300
  msgstr ""
4301
 
4302
- #: defaults.php:382
4303
  msgid "User updated a theme"
4304
  msgstr ""
4305
 
4306
- #: defaults.php:382
4307
  msgid ""
4308
  "Updated the theme \"%Theme->Name%\" installed in %Theme-"
4309
  ">get_template_directory%."
4310
  msgstr ""
4311
 
4312
- #: defaults.php:383
4313
  msgid "User changed a file using the theme editor"
4314
  msgstr ""
4315
 
4316
- #: defaults.php:383
4317
  msgid "Modified %File% with the Theme Editor."
4318
  msgstr ""
4319
 
4320
- #: defaults.php:390
4321
  msgid "Unknown Error"
4322
  msgstr ""
4323
 
4324
- #: defaults.php:390
4325
  msgid "An unexpected error has occurred ."
4326
  msgstr ""
4327
 
4328
- #: defaults.php:391
4329
  msgid "PHP error"
4330
  msgstr ""
4331
 
4332
- #: defaults.php:391 defaults.php:392 defaults.php:393 defaults.php:394
4333
- #: defaults.php:395
4334
  msgid "%Message%."
4335
  msgstr ""
4336
 
4337
- #: defaults.php:392
4338
  msgid "PHP warning"
4339
  msgstr ""
4340
 
4341
- #: defaults.php:393
4342
  msgid "PHP notice"
4343
  msgstr ""
4344
 
4345
- #: defaults.php:394
4346
  msgid "PHP exception"
4347
  msgstr ""
4348
 
4349
- #: defaults.php:395
4350
  msgid "PHP shutdown error"
4351
  msgstr ""
4352
 
4353
- #: defaults.php:396
4354
  msgid "Events automatically pruned by system"
4355
  msgstr ""
4356
 
4357
- #: defaults.php:396
4358
  msgid "System automatically deleted %EventCount% event(s)."
4359
  msgstr ""
4360
 
4361
- #: defaults.php:397
4362
  msgid "WordPress was updated"
4363
  msgstr ""
4364
 
4365
- #: defaults.php:397
4366
  msgid "Updated WordPress from version %OldVersion% to %NewVersion%."
4367
  msgstr ""
4368
 
4369
- #: defaults.php:398
4370
  msgid "Reset plugin's settings to default"
4371
  msgstr ""
4372
 
4373
- #: defaults.php:398
4374
  msgid "Reset plugin's settings to default."
4375
  msgstr ""
4376
 
4377
- #: defaults.php:399
4378
  msgid "Purged the activity log"
4379
  msgstr ""
4380
 
4381
- #: defaults.php:399
4382
  msgid "Purged the activity log."
4383
  msgstr ""
4384
 
4385
- #: defaults.php:400
4386
  msgid "File content has been modified"
4387
  msgstr ""
4388
 
4389
- #: defaults.php:400
4390
  msgid "The content of the file %FileLocation% has been modified."
4391
  msgstr ""
4392
 
4393
- #: defaults.php:401
4394
  msgid "File added to the site"
4395
  msgstr ""
4396
 
4397
- #: defaults.php:401
4398
  msgid "The file %FileLocation% has been added to your website."
4399
  msgstr ""
4400
 
4401
- #: defaults.php:402
4402
  msgid "File deleted from the site"
4403
  msgstr ""
4404
 
4405
- #: defaults.php:402
4406
  msgid "The file %FileLocation% has been deleted from your website."
4407
  msgstr ""
4408
 
4409
- #: defaults.php:403
4410
  msgid "File not scanned because it is bigger than the maximum file size limit"
4411
  msgstr ""
4412
 
4413
- #: defaults.php:403
4414
  msgid ""
4415
  "The file %FileLocation% was not scanned because it is bigger than the "
4416
  "maximum file size limit. If you want to include these files in the scan "
4417
  "increase the file size limit from the %FileSettings%."
4418
  msgstr ""
4419
 
4420
- #: defaults.php:404
4421
  msgid "File integrity scan stopped due to the limit of 1 million files"
4422
  msgstr ""
4423
 
4424
- #: defaults.php:404
4425
  msgid ""
4426
  "The file changes scanning engine has reached the limit of 1 million files "
4427
  "and stopped the scan. Please %ContactSupport% for more information."
4428
  msgstr ""
4429
 
4430
- #: defaults.php:405
4431
  msgid "File integrity scan started/stopped"
4432
  msgstr ""
4433
 
4434
- #: defaults.php:405
4435
  msgid "The file integrity scanner has %ScanStatus%."
4436
  msgstr ""
4437
 
4438
- #: defaults.php:406
4439
  msgid "Advertising Add-ons"
4440
  msgstr ""
4441
 
4442
- #: defaults.php:406
4443
  msgid "%PromoName% %PromoMessage%"
4444
  msgstr ""
4445
 
4446
- #: defaults.php:412
4447
  msgid "Menus"
4448
  msgstr ""
4449
 
4450
- #: defaults.php:413
4451
  msgid "User created new menu"
4452
  msgstr ""
4453
 
4454
- #: defaults.php:413
4455
  msgid "Created a new menu called %MenuName%."
4456
  msgstr ""
4457
 
4458
- #: defaults.php:414
4459
  msgid "User added content to a menu"
4460
  msgstr ""
4461
 
4462
- #: defaults.php:414
4463
  msgid "Added the %ContentType% called %ContentName% to menu %MenuName%."
4464
  msgstr ""
4465
 
4466
- #: defaults.php:415
4467
  msgid "User removed content from a menu"
4468
  msgstr ""
4469
 
4470
- #: defaults.php:415
4471
  msgid ""
4472
  "Removed the %ContentType% called %ContentName% from the menu %MenuName%."
4473
  msgstr ""
4474
 
4475
- #: defaults.php:416
4476
  msgid "User deleted menu"
4477
  msgstr ""
4478
 
4479
- #: defaults.php:416
4480
  msgid "Deleted the menu %MenuName%."
4481
  msgstr ""
4482
 
4483
- #: defaults.php:417
4484
  msgid "User changed menu setting"
4485
  msgstr ""
4486
 
4487
- #: defaults.php:417
4488
  msgid "%Status% the menu setting %MenuSetting% in %MenuName%."
4489
  msgstr ""
4490
 
4491
- #: defaults.php:418
4492
  msgid "User modified content in a menu"
4493
  msgstr ""
4494
 
4495
- #: defaults.php:418
4496
  msgid "Modified the %ContentType% called %ContentName% in menu %MenuName%."
4497
  msgstr ""
4498
 
4499
- #: defaults.php:419
4500
  msgid "User changed name of a menu"
4501
  msgstr ""
4502
 
4503
- #: defaults.php:419
4504
  msgid "Changed the name of menu %OldMenuName% to %NewMenuName%."
4505
  msgstr ""
4506
 
4507
- #: defaults.php:420
4508
  msgid "User changed order of the objects in a menu"
4509
  msgstr ""
4510
 
4511
- #: defaults.php:420
4512
  msgid "Changed the order of the %ItemName% in menu %MenuName%."
4513
  msgstr ""
4514
 
4515
- #: defaults.php:421
4516
  msgid "User moved objects as a sub-item"
4517
  msgstr ""
4518
 
4519
- #: defaults.php:421
4520
  msgid "Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%."
4521
  msgstr ""
4522
 
4523
- #: defaults.php:427
4524
  msgid "Widgets"
4525
  msgstr ""
4526
 
4527
- #: defaults.php:428
4528
  msgid "User added a new widget"
4529
  msgstr ""
4530
 
4531
- #: defaults.php:428
4532
  msgid "Added a new %WidgetName% widget in %Sidebar%."
4533
  msgstr ""
4534
 
4535
- #: defaults.php:429
4536
  msgid "User modified a widget"
4537
  msgstr ""
4538
 
4539
- #: defaults.php:429
4540
  msgid "Modified the %WidgetName% widget in %Sidebar%."
4541
  msgstr ""
4542
 
4543
- #: defaults.php:430
4544
  msgid "User deleted widget"
4545
  msgstr ""
4546
 
4547
- #: defaults.php:430
4548
  msgid "Deleted the %WidgetName% widget from %Sidebar%."
4549
  msgstr ""
4550
 
4551
- #: defaults.php:431
4552
  msgid "User moved widget"
4553
  msgstr ""
4554
 
4555
- #: defaults.php:431
4556
  msgid "Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%."
4557
  msgstr ""
4558
 
4559
- #: defaults.php:432
4560
  msgid "User changed widget position"
4561
  msgstr ""
4562
 
4563
- #: defaults.php:432
4564
  msgid "Changed the position of the widget %WidgetName% in sidebar %Sidebar%."
4565
  msgstr ""
4566
 
4567
- #: defaults.php:438
4568
  msgid "WordPress Settings"
4569
  msgstr ""
4570
 
4571
- #: defaults.php:439
4572
  msgid "Option Anyone Can Register in WordPress settings changed"
4573
  msgstr ""
4574
 
4575
- #: defaults.php:439
4576
  msgid "%NewValue% the option \"Anyone can register\"."
4577
  msgstr ""
4578
 
4579
- #: defaults.php:440
4580
  msgid "New User Default Role changed"
4581
  msgstr ""
4582
 
4583
- #: defaults.php:440
4584
  msgid "Changed the New User Default Role from %OldRole% to %NewRole%."
4585
  msgstr ""
4586
 
4587
- #: defaults.php:441
4588
  msgid "WordPress Administrator Notification email changed"
4589
  msgstr ""
4590
 
4591
- #: defaults.php:441
4592
  msgid ""
4593
  "Changed the WordPress administrator notifications email address from "
4594
  "%OldEmail% to %NewEmail%."
4595
  msgstr ""
4596
 
4597
- #: defaults.php:442
4598
  msgid "User changes the WordPress Permalinks"
4599
  msgstr ""
4600
 
4601
- #: defaults.php:442
4602
  msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%."
4603
  msgstr ""
4604
 
4605
- #: defaults.php:443
4606
  msgid ""
4607
  "Enabled/Disabled the option Discourage search engines from indexing this site"
4608
  msgstr ""
4609
 
4610
- #: defaults.php:443
4611
  msgid "%Status% the option Discourage search engines from indexing this site."
4612
  msgstr ""
4613
 
4614
- #: defaults.php:444
4615
  msgid "Enabled/Disabled comments on all the website"
4616
  msgstr ""
4617
 
4618
- #: defaults.php:444
4619
  msgid "%Status% comments on all the website."
4620
  msgstr ""
4621
 
4622
- #: defaults.php:445
4623
  msgid "Enabled/Disabled the option Comment author must fill out name and email"
4624
  msgstr ""
4625
 
4626
- #: defaults.php:445
4627
  msgid "%Status% the option Comment author must fill out name and email."
4628
  msgstr ""
4629
 
4630
- #: defaults.php:446
4631
  msgid ""
4632
  "Enabled/Disabled the option Users must be logged in and registered to comment"
4633
  msgstr ""
4634
 
4635
- #: defaults.php:446
4636
  msgid "%Status% the option Users must be logged in and registered to comment."
4637
  msgstr ""
4638
 
4639
- #: defaults.php:447
4640
  msgid "Enabled/Disabled the option to automatically close comments"
4641
  msgstr ""
4642
 
4643
- #: defaults.php:447
4644
  msgid "%Status% the option to automatically close comments after %Value% days."
4645
  msgstr ""
4646
 
4647
- #: defaults.php:448
4648
  msgid "Changed the value of the option Automatically close comments"
4649
  msgstr ""
4650
 
4651
- #: defaults.php:448
4652
  msgid ""
4653
  "Changed the value of the option Automatically close comments from %OldValue% "
4654
  "to %NewValue% days."
4655
  msgstr ""
4656
 
4657
- #: defaults.php:449
4658
  msgid "Enabled/Disabled the option for comments to be manually approved"
4659
  msgstr ""
4660
 
4661
- #: defaults.php:449
4662
  msgid "%Status% the option for comments to be manually approved."
4663
  msgstr ""
4664
 
4665
- #: defaults.php:450
4666
  msgid ""
4667
  "Enabled/Disabled the option for an author to have previously approved "
4668
  "comments for the comments to appear"
4669
  msgstr ""
4670
 
4671
- #: defaults.php:450
4672
  msgid ""
4673
  "%Status% the option for an author to have previously approved comments for "
4674
  "the comments to appear."
4675
  msgstr ""
4676
 
4677
- #: defaults.php:451
4678
  msgid ""
4679
  "Changed the number of links that a comment must have to be held in the queue"
4680
  msgstr ""
4681
 
4682
- #: defaults.php:451
4683
  msgid ""
4684
  "Changed the number of links from %OldValue% to %NewValue% that a comment "
4685
  "must have to be held in the queue."
4686
  msgstr ""
4687
 
4688
- #: defaults.php:452
4689
  msgid "Modified the list of keywords for comments moderation"
4690
  msgstr ""
4691
 
4692
- #: defaults.php:452
4693
  msgid "Modified the list of keywords for comments moderation."
4694
  msgstr ""
4695
 
4696
- #: defaults.php:453
4697
  msgid "Modified the list of keywords for comments blacklisting"
4698
  msgstr ""
4699
 
4700
- #: defaults.php:453
4701
  msgid "Modified the list of keywords for comments blacklisting."
4702
  msgstr ""
4703
 
4704
- #: defaults.php:454
4705
  msgid "Option WordPress Address (URL) in WordPress settings changed"
4706
  msgstr ""
4707
 
4708
- #: defaults.php:454
4709
  msgid "Changed the WordPress address (URL) from %old_url% to %new_url%."
4710
  msgstr ""
4711
 
4712
- #: defaults.php:455
4713
  msgid "Option Site Address (URL) in WordPress settings changed"
4714
  msgstr ""
4715
 
4716
- #: defaults.php:455
4717
  msgid "Changed the site address (URL) from %old_url% to %new_url%."
4718
  msgstr ""
4719
 
4720
- #: defaults.php:462
4721
  msgid "Multisite Network"
4722
  msgstr ""
4723
 
4724
- #: defaults.php:467
4725
  msgid "User granted Super Admin privileges"
4726
  msgstr ""
4727
 
4728
- #: defaults.php:467
4729
  msgid "Granted Super Admin privileges to %TargetUsername%."
4730
  msgstr ""
4731
 
4732
- #: defaults.php:468
4733
  msgid "User revoked from Super Admin privileges"
4734
  msgstr ""
4735
 
4736
- #: defaults.php:468
4737
  msgid "Revoked Super Admin privileges from %TargetUsername%."
4738
  msgstr ""
4739
 
4740
- #: defaults.php:469
4741
  msgid "Existing user added to a site"
4742
  msgstr ""
4743
 
4744
- #: defaults.php:469
4745
  msgid ""
4746
  "Added the existing user %TargetUsername% with %TargetUserRole% role to site "
4747
  "%SiteName%."
4748
  msgstr ""
4749
 
4750
- #: defaults.php:470
4751
  msgid "User removed from site"
4752
  msgstr ""
4753
 
4754
- #: defaults.php:470
4755
  msgid ""
4756
  "Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% "
4757
  "site."
4758
  msgstr ""
4759
 
4760
- #: defaults.php:471
4761
  msgid "New network user created"
4762
  msgstr ""
4763
 
4764
- #: defaults.php:471
4765
  msgid "Created a new network user %NewUserData->Username%."
4766
  msgstr ""
4767
 
4768
- #: defaults.php:472
4769
- msgid "The forum role of a user was changed by another WordPress user"
4770
- msgstr ""
4771
-
4772
- #: defaults.php:472
4773
- msgid ""
4774
- "Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole"
4775
- "% by %UserChanger%."
4776
- msgstr ""
4777
-
4778
- #: defaults.php:473
4779
  msgid "New site added on the network"
4780
  msgstr ""
4781
 
4782
- #: defaults.php:473
4783
  msgid "Added the site %SiteName% to the network."
4784
  msgstr ""
4785
 
4786
- #: defaults.php:474
4787
  msgid "Existing site archived"
4788
  msgstr ""
4789
 
4790
- #: defaults.php:474
4791
  msgid "Archived the site %SiteName%."
4792
  msgstr ""
4793
 
4794
- #: defaults.php:475
4795
  msgid "Archived site has been unarchived"
4796
  msgstr ""
4797
 
4798
- #: defaults.php:475
4799
  msgid "Unarchived the site %SiteName%."
4800
  msgstr ""
4801
 
4802
- #: defaults.php:476
4803
  msgid "Deactivated site has been activated"
4804
  msgstr ""
4805
 
4806
- #: defaults.php:476
4807
  msgid "Activated the site %SiteName%."
4808
  msgstr ""
4809
 
4810
- #: defaults.php:477
4811
  msgid "Site has been deactivated"
4812
  msgstr ""
4813
 
4814
- #: defaults.php:477
4815
  msgid "Deactivated the site %SiteName%."
4816
  msgstr ""
4817
 
4818
- #: defaults.php:478
4819
  msgid "Existing site deleted from network"
4820
  msgstr ""
4821
 
4822
- #: defaults.php:478
4823
  msgid "Deleted the site %SiteName%."
4824
  msgstr ""
4825
 
4826
- #: defaults.php:490
4827
  msgid "User created new forum"
4828
  msgstr ""
4829
 
4830
- #: defaults.php:490
4831
  msgid ""
4832
  "Created new forum %ForumName%. Forum URL is %ForumURL%. %EditorLinkForum%."
4833
  msgstr ""
4834
 
4835
- #: defaults.php:491
4836
  msgid "User changed status of a forum"
4837
  msgstr ""
4838
 
4839
- #: defaults.php:491
4840
  msgid ""
4841
  "Changed the status of the forum %ForumName% from %OldStatus% to %NewStatus%. "
4842
  "%EditorLinkForum%."
4843
  msgstr ""
4844
 
4845
- #: defaults.php:492
4846
  msgid "User changed visibility of a forum"
4847
  msgstr ""
4848
 
4849
- #: defaults.php:492
4850
  msgid ""
4851
  "Changed the visibility of the forum %ForumName% from %OldVisibility% to "
4852
  "%NewVisibility%. %EditorLinkForum%."
4853
  msgstr ""
4854
 
4855
- #: defaults.php:493
4856
  msgid "User changed the URL of a forum"
4857
  msgstr ""
4858
 
4859
- #: defaults.php:493
4860
  msgid ""
4861
  "Changed the URL of the forum %ForumName% from %OldUrl% to %NewUrl%. "
4862
  "%EditorLinkForum%."
4863
  msgstr ""
4864
 
4865
- #: defaults.php:494
4866
  msgid "User changed order of a forum"
4867
  msgstr ""
4868
 
4869
- #: defaults.php:494
4870
  msgid ""
4871
  "Changed the order of the forum %ForumName% from %OldOrder% to %NewOrder%. "
4872
  "%EditorLinkForum%."
4873
  msgstr ""
4874
 
4875
- #: defaults.php:495
4876
  msgid "User moved forum to trash"
4877
  msgstr ""
4878
 
4879
- #: defaults.php:495
4880
  msgid "Moved the forum %ForumName% to trash."
4881
  msgstr ""
4882
 
4883
- #: defaults.php:496
4884
  msgid "User permanently deleted forum"
4885
  msgstr ""
4886
 
4887
- #: defaults.php:496
4888
  msgid "Permanently deleted the forum %ForumName%."
4889
  msgstr ""
4890
 
4891
- #: defaults.php:497
4892
  msgid "User restored forum from trash"
4893
  msgstr ""
4894
 
4895
- #: defaults.php:497
4896
  msgid "Restored the forum %ForumName% from trash. %EditorLinkForum%."
4897
  msgstr ""
4898
 
4899
- #: defaults.php:498
4900
  msgid "User changed the parent of a forum"
4901
  msgstr ""
4902
 
4903
- #: defaults.php:498
4904
  msgid ""
4905
  "Changed the parent of the forum %ForumName% from %OldParent% to %NewParent%. "
4906
  "%EditorLinkForum%."
4907
  msgstr ""
4908
 
4909
- #: defaults.php:499
4910
  msgid "User changed type of a forum"
4911
  msgstr ""
4912
 
4913
- #: defaults.php:499
4914
  msgid ""
4915
  "Changed the type of the forum %ForumName% from %OldType% to %NewType%. "
4916
  "%EditorLinkForum%."
4917
  msgstr ""
4918
 
4919
- #: defaults.php:500
4920
  msgid "User changed forum's role"
4921
  msgstr ""
4922
 
4923
- #: defaults.php:500
4924
  msgid "Changed the forum's auto role from %OldRole% to %NewRole%."
4925
  msgstr ""
4926
 
4927
- #: defaults.php:501
4928
  msgid "User changed option of a forum"
4929
  msgstr ""
4930
 
4931
- #: defaults.php:501
4932
  msgid "%Status% the option for anonymous posting on forum."
4933
  msgstr ""
4934
 
4935
- #: defaults.php:502
4936
  msgid "User changed time to disallow post editing"
4937
  msgstr ""
4938
 
4939
- #: defaults.php:502
4940
  msgid ""
4941
  "Changed the time to disallow post editing from %OldTime% to %NewTime% "
4942
  "minutes in the forums."
4943
  msgstr ""
4944
 
4945
- #: defaults.php:503
4946
  msgid "User changed the forum setting posting throttle time"
4947
  msgstr ""
4948
 
4949
- #: defaults.php:503
4950
  msgid ""
4951
  "Changed the posting throttle time from %OldTime% to %NewTime% seconds in the "
4952
  "forums."
4953
  msgstr ""
4954
 
4955
- #: defaults.php:504
4956
  msgid "User created new topic"
4957
  msgstr ""
4958
 
4959
- #: defaults.php:504
4960
  msgid "Created a new topic %TopicName%. %EditorLinkTopic%."
4961
  msgstr ""
4962
 
4963
- #: defaults.php:505
4964
  msgid "User changed status of a topic"
4965
  msgstr ""
4966
 
4967
- #: defaults.php:505
4968
  msgid ""
4969
  "Changed the status of the topic %TopicName% from %OldStatus% to %NewStatus%. "
4970
  "%EditorLinkTopic%."
4971
  msgstr ""
4972
 
4973
- #: defaults.php:506
4974
  msgid "User changed type of a topic"
4975
  msgstr ""
4976
 
4977
- #: defaults.php:506
4978
  msgid ""
4979
  "Changed the type of the topic %TopicName% from %OldType% to %NewType%. "
4980
  "%EditorLinkTopic%."
4981
  msgstr ""
4982
 
4983
- #: defaults.php:507
4984
  msgid "User changed URL of a topic"
4985
  msgstr ""
4986
 
4987
- #: defaults.php:507
4988
  msgid "Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%."
4989
  msgstr ""
4990
 
4991
- #: defaults.php:508
4992
  msgid "User changed the forum of a topic"
4993
  msgstr ""
4994
 
4995
- #: defaults.php:508
4996
  msgid ""
4997
  "Changed the forum of the topic %TopicName% from %OldForum% to %NewForum%. "
4998
  "%EditorLinkTopic%."
4999
  msgstr ""
5000
 
5001
- #: defaults.php:509
5002
  msgid "User moved topic to trash"
5003
  msgstr ""
5004
 
5005
- #: defaults.php:509
5006
  msgid "Moved the topic %TopicName% to trash."
5007
  msgstr ""
5008
 
5009
- #: defaults.php:510
5010
  msgid "User permanently deleted topic"
5011
  msgstr ""
5012
 
5013
- #: defaults.php:510
5014
  msgid "Permanently deleted the topic %TopicName%."
5015
  msgstr ""
5016
 
5017
- #: defaults.php:511
5018
  msgid "User restored topic from trash"
5019
  msgstr ""
5020
 
5021
- #: defaults.php:511
5022
  msgid "Restored the topic %TopicName% from trash. %EditorLinkTopic%."
5023
  msgstr ""
5024
 
5025
- #: defaults.php:512
5026
  msgid "User changed visibility of a topic"
5027
  msgstr ""
5028
 
5029
- #: defaults.php:512
5030
  msgid ""
5031
  "Changed the visibility of the topic %TopicName% from %OldVisibility% to "
5032
  "%NewVisibility%. %EditorLinkTopic%."
5033
  msgstr ""
5034
 
5035
- #: defaults.php:519
 
 
 
 
 
 
 
 
 
 
5036
  msgid "User created a new product"
5037
  msgstr ""
5038
 
5039
- #: defaults.php:519
5040
  msgid ""
5041
  "Created a new product called %ProductTitle% and saved it as draft. View the "
5042
  "product: %EditorLinkProduct%."
5043
  msgstr ""
5044
 
5045
- #: defaults.php:520
5046
  msgid "User published a product"
5047
  msgstr ""
5048
 
5049
- #: defaults.php:520
5050
  msgid ""
5051
  "Published a product called %ProductTitle%. Product URL is %ProductUrl%. View "
5052
  "the product: %EditorLinkProduct%."
5053
  msgstr ""
5054
 
5055
- #: defaults.php:521
5056
  msgid "User changed the category of a product"
5057
  msgstr ""
5058
 
5059
- #: defaults.php:521
5060
  msgid ""
5061
  "Changed the category of the %ProductStatus% product %ProductTitle% from "
5062
  "%OldCategories% to %NewCategories%. View the product: %EditorLinkProduct%."
5063
  msgstr ""
5064
 
5065
- #: defaults.php:522
5066
  msgid "User modified the short description of a product"
5067
  msgstr ""
5068
 
5069
- #: defaults.php:522
5070
  msgid ""
5071
  "Modified the short description of the %ProductStatus% product %ProductTitle%."
5072
  "%ChangeText% View the product: %EditorLinkProduct%."
5073
  msgstr ""
5074
 
5075
- #: defaults.php:523
5076
  msgid "User modified the text of a product"
5077
  msgstr ""
5078
 
5079
- #: defaults.php:523
5080
  msgid ""
5081
  "Modified the text of the %ProductStatus% product %ProductTitle%. View the "
5082
  "product: %EditorLinkProduct%."
5083
  msgstr ""
5084
 
5085
- #: defaults.php:524
5086
  msgid "User changed the URL of a product"
5087
  msgstr ""
5088
 
5089
- #: defaults.php:524
5090
  msgid ""
5091
  "Changed the URL of the %ProductStatus% product %ProductTitle%%ReportText%."
5092
  "%ChangeText% View the product: %EditorLinkProduct%."
5093
  msgstr ""
5094
 
5095
- #: defaults.php:525
5096
  msgid "User changed the date of a product"
5097
  msgstr ""
5098
 
5099
- #: defaults.php:525
5100
  msgid ""
5101
  "Changed the date of the %ProductStatus% product %ProductTitle% from %OldDate"
5102
  "% to %NewDate%. View the product: %EditorLinkProduct%."
5103
  msgstr ""
5104
 
5105
- #: defaults.php:526
5106
  msgid "User changed the visibility of a product"
5107
  msgstr ""
5108
 
5109
- #: defaults.php:526
5110
  msgid ""
5111
  "Changed the visibility of the %ProductStatus% product %ProductTitle% from "
5112
  "%OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct%."
5113
  msgstr ""
5114
 
5115
- #: defaults.php:527
5116
  msgid "User modified the product"
5117
  msgstr ""
5118
 
5119
- #: defaults.php:527
5120
  msgid ""
5121
  "Modified the %ProductStatus% product %ProductTitle%. Product URL is "
5122
  "%ProductUrl%. View the product: %EditorLinkProduct%."
5123
  msgstr ""
5124
 
5125
- #: defaults.php:528
5126
  msgid "User modified the draft product"
5127
  msgstr ""
5128
 
5129
- #: defaults.php:528
5130
  msgid ""
5131
  "Modified the draft product %ProductTitle%. View the product: "
5132
  "%EditorLinkProduct%."
5133
  msgstr ""
5134
 
5135
- #: defaults.php:529
5136
  msgid "User moved a product to trash"
5137
  msgstr ""
5138
 
5139
- #: defaults.php:529
5140
  msgid ""
5141
  "Moved the %ProductStatus% product %ProductTitle% to trash. Product URL was "
5142
  "%ProductUrl%."
5143
  msgstr ""
5144
 
5145
- #: defaults.php:530
5146
  msgid "User permanently deleted a product"
5147
  msgstr ""
5148
 
5149
- #: defaults.php:530
5150
  msgid "Permanently deleted the product %ProductTitle%."
5151
  msgstr ""
5152
 
5153
- #: defaults.php:531
5154
  msgid "User restored a product from the trash"
5155
  msgstr ""
5156
 
5157
- #: defaults.php:531
5158
  msgid ""
5159
  "Product %ProductTitle% has been restored from trash. View product: "
5160
  "%EditorLinkProduct%."
5161
  msgstr ""
5162
 
5163
- #: defaults.php:532
5164
  msgid "User changed status of a product"
5165
  msgstr ""
5166
 
5167
- #: defaults.php:532
5168
  msgid ""
5169
  "Changed the status of the product %ProductTitle% from %OldStatus% to "
5170
  "%NewStatus%. View the product: %EditorLinkProduct%."
5171
  msgstr ""
5172
 
5173
- #: defaults.php:533
5174
  msgid "User opened a product in the editor"
5175
  msgstr ""
5176
 
5177
- #: defaults.php:533
5178
  msgid ""
5179
  "Opened the %ProductStatus% product page %ProductTitle% in editor. View the "
5180
  "product: %EditorLinkProduct%."
5181
  msgstr ""
5182
 
5183
- #: defaults.php:534
5184
  msgid "User viewed a product"
5185
  msgstr ""
5186
 
5187
- #: defaults.php:534
5188
  msgid ""
5189
  "Viewed the %ProductStatus% product page %ProductTitle%. View the product: "
5190
  "%EditorLinkProduct%."
5191
  msgstr ""
5192
 
5193
- #: defaults.php:535
5194
  msgid "User renamed a product"
5195
  msgstr ""
5196
 
5197
- #: defaults.php:535
5198
  msgid ""
5199
  "Renamed the %ProductStatus% product from %OldTitle% to %NewTitle%. View the "
5200
  "product: %EditorLinkProduct%."
5201
  msgstr ""
5202
 
5203
- #: defaults.php:536
5204
  msgid "User changed the Product Data of a product"
5205
  msgstr ""
5206
 
5207
- #: defaults.php:536
5208
  msgid ""
5209
  "Changed the Product Type of the %ProductStatus% product %ProductTitle% from "
5210
  "%OldType% to %NewType%. View the product: %EditorLinkProduct%."
5211
  msgstr ""
5212
 
5213
- #: defaults.php:537
5214
  msgid "User changed type of a price"
5215
  msgstr ""
5216
 
5217
- #: defaults.php:537
5218
  msgid ""
5219
  "Changed the %PriceType% of the %ProductStatus% product %ProductTitle% from "
5220
  "%OldPrice% to %NewPrice%. View the product: %EditorLinkProduct%."
5221
  msgstr ""
5222
 
5223
- #: defaults.php:538
5224
  msgid "User changed the SKU of a product"
5225
  msgstr ""
5226
 
5227
- #: defaults.php:538
5228
  msgid ""
5229
  "Changed the SKU of the %ProductStatus% product %ProductTitle% from %OldSku% "
5230
  "to %NewSku%. View the product: %EditorLinkProduct%."
5231
  msgstr ""
5232
 
5233
- #: defaults.php:539
5234
  msgid "User changed the stock status of a product"
5235
  msgstr ""
5236
 
5237
- #: defaults.php:539
5238
  msgid ""
5239
  "Changed the stock status of the %ProductStatus% product %ProductTitle% from "
5240
  "%OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%."
5241
  msgstr ""
5242
 
5243
- #: defaults.php:540
5244
  msgid "User changed the stock quantity"
5245
  msgstr ""
5246
 
5247
- #: defaults.php:540
5248
  msgid ""
5249
  "Changed the stock quantity of the %ProductStatus% product %ProductTitle% "
5250
  "from %OldValue% to %NewValue%. View the product: %EditorLinkProduct%"
5251
  msgstr ""
5252
 
5253
- #: defaults.php:541
5254
  msgid "User set a product type"
5255
  msgstr ""
5256
 
5257
- #: defaults.php:541
5258
  msgid ""
5259
  "Changed the type of the %ProductStatus% simple product %ProductTitle% from "
5260
  "%OldType% to %NewType%. View the product: %EditorLinkProduct%."
5261
  msgstr ""
5262
 
5263
- #: defaults.php:542
5264
  msgid "User changed the weight of a product"
5265
  msgstr ""
5266
 
5267
- #: defaults.php:542
5268
  msgid ""
5269
  "Changed the weight of the %ProductStatus% product %ProductTitle% from "
5270
  "%OldWeight% to %NewWeight%. View the product: %EditorLinkProduct%."
5271
  msgstr ""
5272
 
5273
- #: defaults.php:543
5274
  msgid "User changed the dimensions of a product"
5275
  msgstr ""
5276
 
5277
- #: defaults.php:543
5278
  msgid ""
5279
  "Changed the %DimensionType% dimensions of the %ProductStatus% product "
5280
  "%ProductTitle% from %OldDimension% to %NewDimension%. View the product: "
5281
  "%EditorLinkProduct%."
5282
  msgstr ""
5283
 
5284
- #: defaults.php:544
5285
  msgid "User added the Downloadable File to a product"
5286
  msgstr ""
5287
 
5288
- #: defaults.php:544
5289
  msgid ""
5290
  "Added the Downloadable File %FileName% with File URL %FileUrl% to the "
5291
  "%ProductStatus% product %ProductTitle%. View the product: %EditorLinkProduct"
5292
  "%."
5293
  msgstr ""
5294
 
5295
- #: defaults.php:545
5296
  msgid "User Removed the Downloadable File from a product"
5297
  msgstr ""
5298
 
5299
- #: defaults.php:545
5300
  msgid ""
5301
  "Removed the Downloadable File %FileName% with File URL %FileUrl% from the "
5302
  "%ProductStatus% product %ProductTitle%. View the product: %EditorLinkProduct"
5303
  "%."
5304
  msgstr ""
5305
 
5306
- #: defaults.php:546
5307
  msgid "User changed the name of a Downloadable File in a product"
5308
  msgstr ""
5309
 
5310
- #: defaults.php:546
5311
  msgid ""
5312
  "Changed the name of a Downloadable File from %OldName% to %NewName% in "
5313
  "%ProductStatus% product %ProductTitle%. View the product: %EditorLinkProduct"
5314
  "%."
5315
  msgstr ""
5316
 
5317
- #: defaults.php:547
5318
  msgid "User changed the URL of the Downloadable File in a product"
5319
  msgstr ""
5320
 
5321
- #: defaults.php:547
5322
  msgid ""
5323
  "Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl"
5324
  "% in %ProductStatus% product %ProductTitle%. View the product: "
5325
  "%EditorLinkProduct%."
5326
  msgstr ""
5327
 
5328
- #: defaults.php:548
5329
  msgid "User changed the catalog visibility of a product"
5330
  msgstr ""
5331
 
5332
- #: defaults.php:548
5333
  msgid ""
5334
  "Changed the catalog visibility of the %ProductStatus% product %ProductTitle% "
5335
  "from %OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct"
5336
  "%."
5337
  msgstr ""
5338
 
5339
- #: defaults.php:549
5340
  msgid "User changed the setting Featured Product of a product"
5341
  msgstr ""
5342
 
5343
- #: defaults.php:549
5344
  msgid ""
5345
  "%Status% the setting Featured Product in the %ProductStatus% product "
5346
  "%ProductTitle%. View the product: %EditorLinkProduct%."
5347
  msgstr ""
5348
 
5349
- #: defaults.php:550
5350
  msgid "User changed the Allow Backorders setting of a product"
5351
  msgstr ""
5352
 
5353
- #: defaults.php:550
5354
  msgid ""
5355
  "Changed the Allow Backorders setting of the %ProductStatus% product "
5356
  "%ProductTitle% from %OldStatus% to %NewStatus%. View the product: "
5357
  "%EditorLinkProduct%."
5358
  msgstr ""
5359
 
5360
- #: defaults.php:551
5361
  msgid "User added/removed products to upsell of a product"
5362
  msgstr ""
5363
 
5364
- #: defaults.php:551
5365
  msgid ""
5366
  "%Status% the product %UpsellTitle% to Upsells in the %ProductStatus% product "
5367
  "%ProductTitle%. View the product: %EditorLinkProduct%."
5368
  msgstr ""
5369
 
5370
- #: defaults.php:552
5371
  msgid "User added/removed products to cross-sells of a product"
5372
  msgstr ""
5373
 
5374
- #: defaults.php:552
5375
  msgid ""
5376
  "%Status% the product %CrossSellTitle% to Cross-sells in the %ProductStatus% "
5377
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
5378
  msgstr ""
5379
 
5380
- #: defaults.php:553
5381
  msgid "Added a new attribute of a product"
5382
  msgstr ""
5383
 
5384
- #: defaults.php:553
5385
  msgid ""
5386
  "Added a new attribute called %AttributeName% with value %AttributeValue% in "
5387
  "the %ProductStatus% product %ProductTitle%. View the product: "
5388
  "%EditorLinkProduct%."
5389
  msgstr ""
5390
 
5391
- #: defaults.php:554
5392
  msgid "Modified the value of an attribute of a product"
5393
  msgstr ""
5394
 
5395
- #: defaults.php:554
5396
  msgid ""
5397
  "Modified the value of the attribute %AttributeName% from %OldValue% to "
5398
  "%NewValue% in the %ProductStatus% product %ProductTitle%. View the product: "
5399
  "%EditorLinkProduct%."
5400
  msgstr ""
5401
 
5402
- #: defaults.php:555
5403
  msgid "Changed the name of an attribute of a product"
5404
  msgstr ""
5405
 
5406
- #: defaults.php:555
5407
  msgid ""
5408
  "Changed the attribute's name from %OldValue% to %NewValue% in the "
5409
  "%ProductStatus% product %ProductTitle%. URL is: %ProductUrl%. View the "
5410
  "product: %EditorLinkProduct%."
5411
  msgstr ""
5412
 
5413
- #: defaults.php:556
5414
  msgid "Deleted an attribute of a product"
5415
  msgstr ""
5416
 
5417
- #: defaults.php:556
5418
  msgid ""
5419
  "Deleted the attribute %AttributeName% with value %AttributeValue% from "
5420
  "%ProductStatus% product %ProductTitle%. URL is: %ProductUrl%. View the "
5421
  "product: %EditorLinkProduct%."
5422
  msgstr ""
5423
 
5424
- #: defaults.php:557
5425
  msgid "Set the attribute visibility of a product"
5426
  msgstr ""
5427
 
5428
- #: defaults.php:557
5429
  msgid ""
5430
  "Set the attribute %AttributeName% as %AttributeVisiblilty% on product page "
5431
  "in %ProductStatus% product %ProductTitle%. View the product: "
5432
  "%EditorLinkProduct%."
5433
  msgstr ""
5434
 
5435
- #: defaults.php:564
5436
  msgid "User changed the Weight Unit"
5437
  msgstr ""
5438
 
5439
- #: defaults.php:564
5440
  msgid "Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce."
5441
  msgstr ""
5442
 
5443
- #: defaults.php:565
5444
  msgid "User changed the Dimensions Unit"
5445
  msgstr ""
5446
 
5447
- #: defaults.php:565
5448
  msgid "Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce."
5449
  msgstr ""
5450
 
5451
- #: defaults.php:566
5452
  msgid "User changed the Base Location"
5453
  msgstr ""
5454
 
5455
- #: defaults.php:566
5456
  msgid ""
5457
  "Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce."
5458
  msgstr ""
5459
 
5460
- #: defaults.php:567
5461
  msgid "User Enabled/Disabled taxes"
5462
  msgstr ""
5463
 
5464
- #: defaults.php:567
5465
  msgid "%Status% taxes in the WooCommerce store."
5466
  msgstr ""
5467
 
5468
- #: defaults.php:568
5469
  msgid "User changed the currency"
5470
  msgstr ""
5471
 
5472
- #: defaults.php:568
5473
  msgid ""
5474
  "Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce."
5475
  msgstr ""
5476
 
5477
- #: defaults.php:569
5478
  msgid "User Enabled/Disabled the use of coupons during checkout"
5479
  msgstr ""
5480
 
5481
- #: defaults.php:569
5482
  msgid "%Status% the use of coupons during checkout in WooCommerce."
5483
  msgstr ""
5484
 
5485
- #: defaults.php:570
5486
  msgid "User Enabled/Disabled guest checkout"
5487
  msgstr ""
5488
 
5489
- #: defaults.php:570
5490
  msgid "%Status% guest checkout in WooCommerce."
5491
  msgstr ""
5492
 
5493
- #: defaults.php:571
5494
  msgid "User Enabled/Disabled cash on delivery"
5495
  msgstr ""
5496
 
5497
- #: defaults.php:571
5498
  msgid "%Status% the option Cash on Delivery in WooCommerce."
5499
  msgstr ""
5500
 
5501
- #: defaults.php:572
5502
  msgid "User enabled a payment gateway"
5503
  msgstr ""
5504
 
5505
- #: defaults.php:572
5506
  msgid "Enabled the payment gateway %GatewayName%."
5507
  msgstr ""
5508
 
5509
- #: defaults.php:573
5510
  msgid "User disabled a payment gateway"
5511
  msgstr ""
5512
 
5513
- #: defaults.php:573
5514
  msgid "Disabled the payment gateway %GatewayName%."
5515
  msgstr ""
5516
 
5517
- #: defaults.php:574
5518
  msgid "User modified a payment gateway"
5519
  msgstr ""
5520
 
5521
- #: defaults.php:574
5522
  msgid "Modified the payment gateway %GatewayName%."
5523
  msgstr ""
5524
 
5525
- #: defaults.php:575
5526
  msgid "User modified prices with tax option"
5527
  msgstr ""
5528
 
5529
- #: defaults.php:575
5530
  msgid "Set the option that prices are %TaxStatus% of tax."
5531
  msgstr ""
5532
 
5533
- #: defaults.php:576
5534
  msgid "User modified tax calculation base"
5535
  msgstr ""
5536
 
5537
- #: defaults.php:576
5538
  msgid "Set the setting Calculate tax based on to %Setting%."
5539
  msgstr ""
5540
 
5541
- #: defaults.php:577
5542
  msgid "User modified shipping tax class"
5543
  msgstr ""
5544
 
5545
- #: defaults.php:577
5546
  msgid "Set the Shipping tax class to %Setting%."
5547
  msgstr ""
5548
 
5549
- #: defaults.php:578
5550
  msgid "User enabled/disabled rounding of tax"
5551
  msgstr ""
5552
 
5553
- #: defaults.php:578
5554
  msgid "%Status% rounding of tax at subtotal level."
5555
  msgstr ""
5556
 
5557
- #: defaults.php:579
5558
  msgid "User modified a shipping zone"
5559
  msgstr ""
5560
 
5561
- #: defaults.php:579
5562
  msgid "%ShippingZoneStatus% the shipping zone %ShippingZoneName%."
5563
  msgstr ""
5564
 
5565
- #: defaults.php:580
5566
  msgid "User created a new product category"
5567
  msgstr ""
5568
 
5569
- #: defaults.php:580
5570
  msgid ""
5571
  "Created a new product category called %CategoryName% in WooCommerce. Product "
5572
  "category slug is %Slug%."
5573
  msgstr ""
5574
 
5575
- #: defaults.php:581
5576
  msgid "User deleted a product category"
5577
  msgstr ""
5578
 
5579
- #: defaults.php:581
5580
  msgid ""
5581
  "Deleted the product category called %CategoryName% in WooCommerce. Product "
5582
  "category slug was %CategorySlug%."
5583
  msgstr ""
5584
 
5585
- #: defaults.php:582
5586
  msgid "User changed the slug of a product category"
5587
  msgstr ""
5588
 
5589
- #: defaults.php:582
5590
  msgid ""
5591
  "Changed the Slug of the product category %CategoryName% in WooCommerce from "
5592
  "%OldSlug% to %NewSlug%."
5593
  msgstr ""
5594
 
5595
- #: defaults.php:583
5596
  msgid "User changed the parent category of a product category"
5597
  msgstr ""
5598
 
5599
- #: defaults.php:583
5600
  msgid ""
5601
  "Changed the Parent Category of the product category %CategoryName% in "
5602
  "WooCommerce from %OldParentCat% to %NewParentCat%."
5603
  msgstr ""
5604
 
5605
- #: defaults.php:584
5606
  msgid "User changed the display type of a product category"
5607
  msgstr ""
5608
 
5609
- #: defaults.php:584
5610
  msgid ""
5611
  "Changed the Display Type of the product category %CategoryName% in "
5612
  "WooCommerce from %OldDisplayType% to %NewDisplayType%."
5613
  msgstr ""
5614
 
5615
- #: defaults.php:585
5616
  msgid "User changed the name of a product category"
5617
  msgstr ""
5618
 
5619
- #: defaults.php:585
5620
  msgid ""
5621
  "Changed the name of the product category %CategoryName% in WooCommerce from "
5622
  "%OldName% to %NewName%."
5623
  msgstr ""
5624
 
5625
- #: defaults.php:586
5626
  msgid "User created a new attribute"
5627
  msgstr ""
5628
 
5629
- #: defaults.php:586
5630
  msgid ""
5631
  "Created a new Attribute called %AttributeName% with slug %AttributeSlug% in "
5632
  "WooCommerce."
5633
  msgstr ""
5634
 
5635
- #: defaults.php:587
5636
  msgid "User deleted an attribute"
5637
  msgstr ""
5638
 
5639
- #: defaults.php:587
5640
  msgid ""
5641
  "Deleted the Attribute called %AttributeName% with Slug %AttributeSlug% from "
5642
  "WooCommerce."
5643
  msgstr ""
5644
 
5645
- #: defaults.php:588
5646
  msgid "User changed the slug of an attribute"
5647
  msgstr ""
5648
 
5649
- #: defaults.php:588
5650
  msgid ""
5651
  "Changed the Slug of the Attribute %AttributeName% in WooCommerce from "
5652
  "%OldSlug% to %NewSlug%."
5653
  msgstr ""
5654
 
5655
- #: defaults.php:589
5656
  msgid "User changed the name of an attribute"
5657
  msgstr ""
5658
 
5659
- #: defaults.php:589
5660
  msgid ""
5661
  "Changed the Name of the Attribute %AttributeName% in WooCommerce from "
5662
  "%OldName% to %NewName%."
5663
  msgstr ""
5664
 
5665
- #: defaults.php:590
5666
  msgid "User changed the default sort order of an attribute"
5667
  msgstr ""
5668
 
5669
- #: defaults.php:590
5670
  msgid ""
5671
  "Changed the Default Sort Order of the Attribute %AttributeName% in "
5672
  "WooCommerce from %OldSortOrder% to %NewSortOrder%."
5673
  msgstr ""
5674
 
5675
- #: defaults.php:591
5676
  msgid "User enabled/disabled the option Enable Archives of an attribute"
5677
  msgstr ""
5678
 
5679
- #: defaults.php:591
5680
  msgid ""
5681
  "%ArchivesStatus% the option Enable Archives in the Attribute %AttributeName% "
5682
  "in WooCommerce."
5683
  msgstr ""
5684
 
5685
- #: defaults.php:592
5686
  msgid "User published a new coupon"
5687
  msgstr ""
5688
 
5689
- #: defaults.php:592
5690
  msgid "Published a new coupon called %CouponName% in WooCommerce."
5691
  msgstr ""
5692
 
5693
- #: defaults.php:593
5694
  msgid "User changed the discount type of a coupon"
5695
  msgstr ""
5696
 
5697
- #: defaults.php:593
5698
  msgid ""
5699
  "Changed the Discount Type of the %CouponStatus% WooCommerce coupon "
5700
  "%CouponName% from %OldDiscountType% to %NewDiscountType%."
5701
  msgstr ""
5702
 
5703
- #: defaults.php:594
5704
  msgid "User changed the coupon amount of a coupon"
5705
  msgstr ""
5706
 
5707
- #: defaults.php:594
5708
  msgid ""
5709
  "Changed the Coupon Amount of the %CouponStatus% WooCommerce coupon "
5710
  "%CouponName% from %OldAmount% to %NewAmount%."
5711
  msgstr ""
5712
 
5713
- #: defaults.php:595
5714
  msgid "User changed the coupon expire date of a coupon"
5715
  msgstr ""
5716
 
5717
- #: defaults.php:595
5718
  msgid ""
5719
  "Changed the Coupon Expire Date of the %CouponStatus% WooCommerce coupon "
5720
  "%CouponName% from %OldDate% to %NewDate%."
5721
  msgstr ""
5722
 
5723
- #: defaults.php:596
5724
  msgid "User changed the usage restriction settings of a coupon"
5725
  msgstr ""
5726
 
5727
- #: defaults.php:596
5728
  msgid ""
5729
  "Changed the Usage Restriction settings of the %CouponStatus% WooCommerce "
5730
  "coupon %CouponName%."
5731
  msgstr ""
5732
 
5733
- #: defaults.php:597
5734
  msgid "User changed the usage limits settings of a coupon"
5735
  msgstr ""
5736
 
5737
- #: defaults.php:597
5738
  msgid ""
5739
  "Changed the Usage Limits settings of the %CouponStatus% WooCommerce coupon "
5740
  "%CouponName%."
5741
  msgstr ""
5742
 
5743
- #: defaults.php:598
5744
  msgid "User changed the description of a coupon"
5745
  msgstr ""
5746
 
5747
- #: defaults.php:598
5748
  msgid ""
5749
  "Changed the Description of the %CouponStatus% WooCommerce coupon %CouponName"
5750
  "%."
5751
  msgstr ""
5752
 
5753
- #: defaults.php:599
5754
  msgid "User changed the status of a coupon"
5755
  msgstr ""
5756
 
5757
- #: defaults.php:599
5758
  msgid ""
5759
  "Changed the Status of the WooCommerce coupon %CouponName% from %OldStatus% "
5760
  "to %NewStatus%."
5761
  msgstr ""
5762
 
5763
- #: defaults.php:600
5764
  msgid "User renamed a WooCommerce coupon"
5765
  msgstr ""
5766
 
5767
- #: defaults.php:600
5768
  msgid "Renamed the WooCommerce coupon %OldName% to %NewName%."
5769
  msgstr ""
5770
 
5771
- #: defaults.php:601
5772
  msgid "A WooCommerce order has been placed"
5773
  msgstr ""
5774
 
5775
- #: defaults.php:601
5776
  msgid ""
5777
  "A WooCommerce order %OrderTitle% has just been placed. %EditorLinkOrder%."
5778
  msgstr ""
5779
 
5780
- #: defaults.php:602
5781
  msgid "WooCommerce order status changed"
5782
  msgstr ""
5783
 
5784
- #: defaults.php:602
5785
  msgid ""
5786
  "Marked the WooCommerce order %OrderTitle% as %OrderStatus%. %EditorLinkOrder"
5787
  "%."
5788
  msgstr ""
5789
 
5790
- #: defaults.php:603
5791
  msgid "User moved a WooCommerce order to trash"
5792
  msgstr ""
5793
 
5794
- #: defaults.php:603
5795
  msgid "Moved the WooCommerce order %OrderTitle% to trash."
5796
  msgstr ""
5797
 
5798
- #: defaults.php:604
5799
  msgid "User moved a WooCommerce order out of trash"
5800
  msgstr ""
5801
 
5802
- #: defaults.php:604
5803
  msgid ""
5804
  "Moved the WooCommerce order %OrderTitle% out of trash. %EditorLinkOrder%."
5805
  msgstr ""
5806
 
5807
- #: defaults.php:605
5808
  msgid "User permanently deleted a WooCommerce order"
5809
  msgstr ""
5810
 
5811
- #: defaults.php:605
5812
  msgid "Permanently deleted the WooCommerce order %OrderTitle%."
5813
  msgstr ""
5814
 
5815
- #: defaults.php:606
5816
  msgid "User edited a WooCommerce order"
5817
  msgstr ""
5818
 
5819
- #: defaults.php:606
5820
  msgid "Edited the WooCommerce order %OrderTitle%. %EditorLinkOrder%."
5821
  msgstr ""
5822
 
5823
- #: defaults.php:607
5824
  msgid "User refunded a WooCommerce order"
5825
  msgstr ""
5826
 
5827
- #: defaults.php:607
5828
  msgid "Refunded the WooCommerce order %OrderTitle%. %EditorLinkOrder%."
5829
  msgstr ""
5830
 
5831
- #: defaults.php:614
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5832
  msgid "User changed title of a SEO post"
5833
  msgstr ""
5834
 
5835
- #: defaults.php:614
5836
  msgid ""
5837
  "Changed the SEO title of the %PostStatus% %PostType%%ReportText%.%ChangeText"
5838
  "% %EditorLinkPost%."
5839
  msgstr ""
5840
 
5841
- #: defaults.php:615
5842
  msgid "User changed the meta description of a SEO post"
5843
  msgstr ""
5844
 
5845
- #: defaults.php:615
5846
  msgid ""
5847
  "Changed the Meta description of the %PostStatus% %PostType% titled %PostTitle"
5848
  "%%ReportText%.%ChangeText% %EditorLinkPost%."
5849
  msgstr ""
5850
 
5851
- #: defaults.php:616
5852
  msgid ""
5853
  "User changed setting to allow search engines to show post in search results "
5854
  "of a SEO post"
5855
  msgstr ""
5856
 
5857
- #: defaults.php:616
5858
  msgid ""
5859
  "Changed the setting to allow search engines to show post in search results "
5860
  "from %OldStatus% to %NewStatus% in the %PostStatus% %PostType% titled "
5861
  "%PostTitle%. %EditorLinkPost%."
5862
  msgstr ""
5863
 
5864
- #: defaults.php:617
5865
  msgid ""
5866
  "User Enabled/Disabled the option for search engine to follow links of a SEO "
5867
  "post"
5868
  msgstr ""
5869
 
5870
- #: defaults.php:617
5871
  msgid ""
5872
  "%NewStatus% the option for search engine to follow links in the %PostType% "
5873
  "titled %PostTitle%. %EditorLinkPost%."
5874
  msgstr ""
5875
 
5876
- #: defaults.php:618
5877
  msgid "User set the meta robots advanced setting of a SEO post"
5878
  msgstr ""
5879
 
5880
- #: defaults.php:618
5881
  msgid ""
5882
  "Set the Meta Robots Advanced setting to %NewStatus% in the %PostStatus% "
5883
  "%PostType% titled %PostTitle%. %EditorLinkPost%."
5884
  msgstr ""
5885
 
5886
- #: defaults.php:619
5887
  msgid "User changed the canonical URL of a SEO post"
5888
  msgstr ""
5889
 
5890
- #: defaults.php:619
5891
  msgid ""
5892
  "Changed the Canonical URL of the %PostStatus% %PostType% titled %PostTitle%"
5893
  "%ReportText%.%ChangeText% %EditorLinkPost%."
5894
  msgstr ""
5895
 
5896
- #: defaults.php:620
5897
  msgid "User changed the focus keyword of a SEO post"
5898
  msgstr ""
5899
 
5900
- #: defaults.php:620
5901
  msgid ""
5902
  "Changed the focus keyword of the %PostStatus% %PostType% titled %PostTitle% "
5903
  "from %old_keywords% to %new_keywords%. %EditorLinkPost%."
5904
  msgstr ""
5905
 
5906
- #: defaults.php:621
5907
  msgid "User Enabled/Disabled the option Cornerston Content of a SEO post"
5908
  msgstr ""
5909
 
5910
- #: defaults.php:621
5911
  msgid ""
5912
  "%Status% the option Cornerston Content on the %PostStatus% %PostType% titled "
5913
  "%PostTitle%. %EditorLinkPost%."
5914
  msgstr ""
5915
 
5916
- #: defaults.php:622
5917
  msgid "User changed the Title Separator setting"
5918
  msgstr ""
5919
 
5920
- #: defaults.php:622
5921
  msgid ""
5922
  "Changed the Title Separator from %old% to %new% in the Yoast SEO plugin "
5923
  "settings."
5924
  msgstr ""
5925
 
5926
- #: defaults.php:623
5927
  msgid "User changed the Homepage Title setting"
5928
  msgstr ""
5929
 
5930
- #: defaults.php:623
5931
  msgid ""
5932
  "Changed the Homepage Title%ReportText% in the Yoast SEO plugin settings."
5933
  "%ChangeText%"
5934
  msgstr ""
5935
 
5936
- #: defaults.php:624
5937
  msgid "User changed the Homepage Meta description setting"
5938
  msgstr ""
5939
 
5940
- #: defaults.php:624
5941
  msgid ""
5942
  "Changed the Homepage Meta description%ReportText% in the Yoast SEO plugin "
5943
  "settings.%ChangeText%"
5944
  msgstr ""
5945
 
5946
- #: defaults.php:625
5947
  msgid "User changed the Company or Person setting"
5948
  msgstr ""
5949
 
5950
- #: defaults.php:625
5951
  msgid ""
5952
  "Changed the Company or Person setting from %old% to %new% in the YOAST SEO "
5953
  "plugin settings."
5954
  msgstr ""
5955
 
5956
- #: defaults.php:626
5957
  msgid ""
5958
  "User Enabled/Disabled the option Show Posts/Pages in Search Results in the "
5959
  "Yoast SEO plugin settings"
5960
  msgstr ""
5961
 
5962
- #: defaults.php:626
5963
  msgid ""
5964
  "%Status% the option Show %SEOPostType% in Search Results in the Yoast SEO "
5965
  "plugin settings."
5966
  msgstr ""
5967
 
5968
- #: defaults.php:627
5969
  msgid ""
5970
  "User changed the Posts/Pages title template in the Yoast SEO plugin settings"
5971
  msgstr ""
5972
 
5973
- #: defaults.php:627
5974
  msgid ""
5975
  "Changed the %SEOPostType% title template from %old% to %new% in the Yoast "
5976
  "SEO plugin settings."
5977
  msgstr ""
5978
 
5979
- #: defaults.php:628
5980
  msgid "User Enabled/Disabled SEO analysis in the Yoast SEO plugin settings"
5981
  msgstr ""
5982
 
5983
- #: defaults.php:628
5984
  msgid "%Status% SEO analysis in the Yoast SEO plugin settings."
5985
  msgstr ""
5986
 
5987
- #: defaults.php:629
5988
  msgid ""
5989
  "User Enabled/Disabled readability analysis in the Yoast SEO plugin settings"
5990
  msgstr ""
5991
 
5992
- #: defaults.php:629
5993
  msgid "%Status% Readability analysis in the Yoast SEO plugin settings."
5994
  msgstr ""
5995
 
5996
- #: defaults.php:630
5997
  msgid ""
5998
  "User Enabled/Disabled cornerstone content in the Yoast SEO plugin settings"
5999
  msgstr ""
6000
 
6001
- #: defaults.php:630
6002
  msgid "%Status% Cornerstone content in the Yoast SEO plugin settings."
6003
  msgstr ""
6004
 
6005
- #: defaults.php:631
6006
  msgid ""
6007
  "User Enabled/Disabled the text link counter in the Yoast SEO plugin settings"
6008
  msgstr ""
6009
 
6010
- #: defaults.php:631
6011
  msgid "%Status% the Text link counter in the Yoast SEO plugin settings."
6012
  msgstr ""
6013
 
6014
- #: defaults.php:632
6015
  msgid "User Enabled/Disabled XML sitemaps in the Yoast SEO plugin settings"
6016
  msgstr ""
6017
 
6018
- #: defaults.php:632
6019
  msgid "%Status% XML Sitemaps in the Yoast SEO plugin settings."
6020
  msgstr ""
6021
 
6022
- #: defaults.php:633
6023
  msgid "User Enabled/Disabled ryte integration in the Yoast SEO plugin settings"
6024
  msgstr ""
6025
 
6026
- #: defaults.php:633
6027
  msgid "%Status% Ryte Integration in the Yoast SEO plugin settings."
6028
  msgstr ""
6029
 
6030
- #: defaults.php:634
6031
  msgid ""
6032
  "User Enabled/Disabled the admin bar menu in the Yoast SEO plugin settings"
6033
  msgstr ""
6034
 
6035
- #: defaults.php:634
6036
  msgid "%Status% the Admin bar menu in the Yoast SEO plugin settings."
6037
  msgstr ""
6038
 
6039
- #: defaults.php:635
6040
  msgid ""
6041
  "User changed the Posts/Pages meta description template in the Yoast SEO "
6042
  "plugin settings"
6043
  msgstr ""
6044
 
6045
- #: defaults.php:635
6046
  msgid ""
6047
  "Changed the %SEOPostType% meta description template from %old% to %new% in "
6048
  "the Yoast SEO plugin settings."
6049
  msgstr ""
6050
 
6051
- #: defaults.php:636
6052
  msgid ""
6053
  "User set the option Date in Snippet Preview for Posts/Pages in the Yoast SEO "
6054
  "plugin settings"
6055
  msgstr ""
6056
 
6057
- #: defaults.php:636
6058
  msgid ""
6059
  "%Status% the option Date in Snippet Preview for %SEOPostType% in the Yoast "
6060
  "SEO plugin settings."
6061
  msgstr ""
6062
 
6063
- #: defaults.php:637
6064
  msgid ""
6065
  "User set the option Yoast SEO Meta Box for Posts/Pages in the Yoast SEO "
6066
  "plugin settings"
6067
  msgstr ""
6068
 
6069
- #: defaults.php:637
6070
  msgid ""
6071
  "%Status% the option Yoast SEO Meta Box for %SEOPostType% in the Yoast SEO "
6072
  "plugin settings."
6073
  msgstr ""
6074
 
6075
- #: defaults.php:638
6076
  msgid ""
6077
  "User Enabled/Disabled the advanced settings for authors in the Yoast SEO "
6078
  "plugin settings"
6079
  msgstr ""
6080
 
6081
- #: defaults.php:638
6082
  msgid "%Status% the advanced settings for authors in the Yoast SEO settings."
6083
  msgstr ""
6084
 
6085
  #. translators: Username
6086
- #: wp-security-audit-log.php:459 wp-security-audit-log.php:486
6087
  #, php-format
6088
  msgid "Hey %1$s"
6089
  msgstr ""
6090
 
6091
- #: wp-security-audit-log.php:460
6092
  msgid ""
6093
  "Never miss an important update! Opt-in to our security and feature updates "
6094
  "notifications, and non-sensitive diagnostic tracking with freemius.com."
6095
  msgstr ""
6096
 
6097
- #: wp-security-audit-log.php:461 wp-security-audit-log.php:489
6098
  msgid "Note: "
6099
  msgstr ""
6100
 
6101
- #: wp-security-audit-log.php:462 wp-security-audit-log.php:490
6102
  msgid "NO AUDIT LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS."
6103
  msgstr ""
6104
 
6105
  #. translators: 1: Plugin name. 2: Freemius link.
6106
- #: wp-security-audit-log.php:488
6107
  #, php-format
6108
  msgid ""
6109
  "Please help us improve %2$s! If you opt-in, some non-sensitive data about "
@@ -6112,7 +6206,7 @@ msgid ""
6112
  msgstr ""
6113
 
6114
  #. translators: Plugin name
6115
- #: wp-security-audit-log.php:510
6116
  #, php-format
6117
  msgid ""
6118
  "Get a free 7-day trial of the premium edition of %s. No credit card "
@@ -6120,97 +6214,104 @@ msgid ""
6120
  msgstr ""
6121
 
6122
  #. Plugin Name of the plugin/theme
6123
- #: wp-security-audit-log.php:511
6124
  msgid "WP Security Audit Log"
6125
  msgstr ""
6126
 
6127
- #: wp-security-audit-log.php:515
6128
  msgid "Start free trial"
6129
  msgstr ""
6130
 
6131
- #: wp-security-audit-log.php:660
 
 
 
 
 
 
 
6132
  msgid ""
6133
  "Error: You do not have sufficient permissions to disable this custom field."
6134
  msgstr ""
6135
 
6136
- #: wp-security-audit-log.php:696
6137
  msgid "Error: You do not have sufficient permissions to disable this alert."
6138
  msgstr ""
6139
 
6140
- #: wp-security-audit-log.php:820
6141
  #, php-format
6142
  msgid ""
6143
  "You are using a version of PHP that is older than %s, which is no longer "
6144
  "supported."
6145
  msgstr ""
6146
 
6147
- #: wp-security-audit-log.php:822
6148
  msgid ""
6149
  "Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
6150
  "\">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you "
6151
  "are using."
6152
  msgstr ""
6153
 
6154
- #: wp-security-audit-log.php:824
6155
  msgid ""
6156
  "The WP Security Audit Log plugin is a multisite network tool, so it has to "
6157
  "be activated at network level."
6158
  msgstr ""
6159
 
6160
- #: wp-security-audit-log.php:826
6161
  msgid "Redirect me to the network dashboard"
6162
  msgstr ""
6163
 
6164
- #: wp-security-audit-log.php:909
6165
  msgid ""
6166
  "This plugin uses 3 tables in the WordPress database to store the activity "
6167
  "log and settings. It seems that these tables were not created."
6168
  msgstr ""
6169
 
6170
- #: wp-security-audit-log.php:911
6171
  msgid ""
6172
  "This could happen because the database user does not have the right "
6173
  "privileges to create the tables in the database. We recommend you to update "
6174
  "the privileges and try enabling the plugin again."
6175
  msgstr ""
6176
 
6177
- #: wp-security-audit-log.php:913
6178
  #, php-format
6179
  msgid ""
6180
  "If after doing so you still have issues, please send us an email on %s for "
6181
  "assistance."
6182
  msgstr ""
6183
 
6184
- #: wp-security-audit-log.php:913
6185
  msgid "support@wpsecurityauditlog.com"
6186
  msgstr ""
6187
 
6188
- #: wp-security-audit-log.php:1564
6189
  msgid "Every 6 hours"
6190
  msgstr ""
6191
 
6192
- #: wp-security-audit-log.php:1568
6193
  msgid "Every 45 minutes"
6194
  msgstr ""
6195
 
6196
- #: wp-security-audit-log.php:1572
6197
  msgid "Every 30 minutes"
6198
  msgstr ""
6199
 
6200
- #: wp-security-audit-log.php:1576
6201
  msgid "Every 15 minutes"
6202
  msgstr ""
6203
 
6204
- #: wp-security-audit-log.php:1580
6205
  msgid "Every 10 minutes"
6206
  msgstr ""
6207
 
6208
- #: wp-security-audit-log.php:1584
6209
  msgid "Every 1 minute"
6210
  msgstr ""
6211
 
6212
  #. translators: 1. Deprecated method name 2. Version since deprecated
6213
- #: wp-security-audit-log.php:1598
6214
  #, php-format
6215
  msgid "Method %1$s is deprecated since version %2$s!"
6216
  msgstr ""
3
  msgstr ""
4
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: WP Security Audit Log\n"
6
+ "POT-Creation-Date: 2019-04-03 19:53+0200\n"
7
+ "PO-Revision-Date: 2019-04-03 19:53+0200\n"
8
  "Last-Translator: \n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
22
  "X-Poedit-SearchPathExcluded-0: *.js\n"
23
 
24
  #. translators: Event ID
25
+ #: classes/AlertManager.php:323
26
  #, php-format
27
  msgid "Event with code %d has not be registered."
28
  msgstr ""
29
 
30
+ #: classes/AlertManager.php:378
31
  #, php-format
32
  msgid "Event %s already registered with WP Security Audit Log."
33
  msgstr ""
34
 
35
+ #: classes/AlertManager.php:413
36
  msgid ""
37
  "You have custom events that are using the same ID or IDs which are already "
38
  "registered in the plugin, so they have been disabled."
39
  msgstr ""
40
 
41
+ #: classes/AlertManager.php:416
42
  #, php-format
43
  msgid "%4$s to help you solve this issue."
44
  msgstr ""
45
 
46
+ #: classes/AlertManager.php:418
47
  msgid "ERROR:"
48
  msgstr ""
49
 
50
+ #: classes/AlertManager.php:420
51
  msgid "Contact us"
52
  msgstr ""
53
 
54
+ #: classes/AuditLogListView.php:129
55
  msgid "No events so far."
56
  msgstr ""
57
 
58
+ #: classes/AuditLogListView.php:180
59
  msgid "Show "
60
  msgstr ""
61
 
62
+ #: classes/AuditLogListView.php:188
63
  msgid " Items"
64
  msgstr ""
65
 
66
+ #: classes/AuditLogListView.php:195
67
  msgid "— End of Activity Log —"
68
  msgstr ""
69
 
70
+ #: classes/AuditLogListView.php:215 classes/Views/AuditLog.php:470
 
71
  msgid "All Sites"
72
  msgstr ""
73
 
74
+ #: classes/AuditLogListView.php:243
75
  msgid "Live Database"
76
  msgstr ""
77
 
78
+ #: classes/AuditLogListView.php:246
79
  msgid "Archive Database"
80
  msgstr ""
81
 
82
+ #: classes/AuditLogListView.php:303 classes/Views/Settings.php:1135
83
  #: classes/WidgetManager.php:82
84
  msgid "User"
85
  msgstr ""
86
 
87
+ #: classes/AuditLogListView.php:305
88
  msgid "Username"
89
  msgstr ""
90
 
91
+ #: classes/AuditLogListView.php:310 classes/AuditLogListView.php:336
92
+ #: classes/Views/Settings.php:1129
93
  msgid "Event ID"
94
  msgstr ""
95
 
96
+ #: classes/AuditLogListView.php:311 classes/AuditLogListView.php:339
97
+ #: classes/Views/Settings.php:1131 classes/Views/ToggleAlerts.php:318
98
  msgid "Severity"
99
  msgstr ""
100
 
101
+ #: classes/AuditLogListView.php:312 classes/AuditLogListView.php:342
102
  msgid "Date"
103
  msgstr ""
104
 
105
+ #: classes/AuditLogListView.php:314 classes/AuditLogListView.php:348
106
  msgid "Source IP"
107
  msgstr ""
108
 
109
+ #: classes/AuditLogListView.php:319 classes/AuditLogListView.php:351
110
  msgid "Site"
111
  msgstr ""
112
 
113
+ #: classes/AuditLogListView.php:322 classes/AuditLogListView.php:354
114
  msgid "Message"
115
  msgstr ""
116
 
117
+ #: classes/AuditLogListView.php:410
118
  msgid "Click to toggle."
119
  msgstr ""
120
 
121
+ #: classes/AuditLogListView.php:429
122
  msgid "Disable this type of events."
123
  msgstr ""
124
 
125
+ #: classes/AuditLogListView.php:437
126
  msgid "Unknown error code."
127
  msgstr ""
128
 
129
+ #: classes/AuditLogListView.php:441 classes/Views/ToggleAlerts.php:494
130
  msgid "Critical"
131
  msgstr ""
132
 
133
+ #: classes/AuditLogListView.php:443 classes/Views/ToggleAlerts.php:496
134
  msgid "Warning"
135
  msgstr ""
136
 
137
+ #: classes/AuditLogListView.php:445 classes/Views/ToggleAlerts.php:498
138
+ #: classes/Views/ToggleAlerts.php:500
139
  msgid "Notification"
140
  msgstr ""
141
 
142
+ #: classes/AuditLogListView.php:455 classes/AuditLogListView.php:496
143
  msgid "Unknown"
144
  msgstr ""
145
 
146
+ #: classes/AuditLogListView.php:481
147
  msgid "Show me all activity by this User"
148
  msgstr ""
149
 
150
+ #: classes/AuditLogListView.php:500 classes/Views/Licensing.php:113
151
  #: classes/Views/Licensing.php:153
152
  msgid "Plugin"
153
  msgstr ""
154
 
155
+ #: classes/AuditLogListView.php:504 defaults.php:358
156
  msgid "Plugins"
157
  msgstr ""
158
 
159
+ #: classes/AuditLogListView.php:508
160
  msgid "Website Visitor"
161
  msgstr ""
162
 
163
+ #: classes/AuditLogListView.php:512 classes/Views/ToggleAlerts.php:420
164
+ #: classes/Views/ToggleAlerts.php:458 defaults.php:391
165
  msgid "System"
166
  msgstr ""
167
 
168
+ #: classes/AuditLogListView.php:544 classes/AuditLogListView.php:557
169
  msgid "Show me all activity originating from this IP Address"
170
  msgstr ""
171
 
172
+ #: classes/AuditLogListView.php:586
173
  msgid "View all details of this change"
174
  msgstr ""
175
 
176
+ #: classes/AuditLogListView.php:587 classes/AuditLogListView.php:737
177
+ #: classes/Settings.php:1657
178
  msgid "Alert Data Inspector"
179
  msgstr ""
180
 
181
+ #: classes/AuditLogListView.php:689 classes/Settings.php:1601
182
  msgid "Download the log file"
183
  msgstr ""
184
 
185
+ #: classes/AuditLogListView.php:709 classes/Settings.php:1621
186
  msgid "Download the log file."
187
  msgstr ""
188
 
189
+ #: classes/AuditLogListView.php:717 classes/Settings.php:1629
190
+ #: classes/Settings.php:1875
191
  msgid "published"
192
  msgstr ""
193
 
194
  #. translators: Mailto link for support.
195
+ #: classes/AuditLogListView.php:745 classes/Settings.php:1668
196
+ #: classes/Settings.php:1901
197
  #, php-format
198
  msgid "Contact us on %s for assistance"
199
  msgstr ""
200
 
201
+ #: classes/AuditLogListView.php:879
202
  msgid "Select All"
203
  msgstr ""
204
 
240
  msgid "https://wordpress.org/support/"
241
  msgstr ""
242
 
243
+ #: classes/Loggers/Database.php:243 classes/Views/Help.php:188
244
+ #: classes/Views/Help.php:251 classes/Views/addons/html-view.php:75
245
+ #: classes/Views/addons/html-view.php:100
 
 
 
 
246
  msgid "Upgrade to Premium"
247
  msgstr ""
248
 
249
+ #: classes/Loggers/Database.php:244 classes/Views/Help.php:252
250
+ #: classes/Views/addons/html-view.php:76
 
 
 
 
251
  msgid "More Information"
252
  msgstr ""
253
 
254
+ #: classes/Sensors/Content.php:977 classes/Sensors/Content.php:985
255
+ #: classes/Sensors/WooCommerce.php:535 classes/Sensors/WooCommerce.php:543
256
  msgid "Password Protected"
257
  msgstr ""
258
 
259
+ #: classes/Sensors/Content.php:979 classes/Sensors/Content.php:987
260
+ #: classes/Sensors/WooCommerce.php:537 classes/Sensors/WooCommerce.php:545
261
  msgid "Public"
262
  msgstr ""
263
 
264
+ #: classes/Sensors/Content.php:981 classes/Sensors/Content.php:989
265
+ #: classes/Sensors/WooCommerce.php:539 classes/Sensors/WooCommerce.php:547
266
  msgid "Private"
267
  msgstr ""
268
 
269
+ #: classes/Sensors/Public.php:129
270
  #, php-format
271
  msgid ""
272
  "A comment was posted in response to the post %1$s. The comment was posted by "
273
  "%2$s"
274
  msgstr ""
275
 
276
+ #: classes/Sensors/Public.php:695 classes/Sensors/WooCommerce.php:1819
277
  msgid "In stock"
278
  msgstr ""
279
 
280
+ #: classes/Sensors/Public.php:697 classes/Sensors/WooCommerce.php:1821
281
  msgid "Out of stock"
282
  msgstr ""
283
 
284
+ #: classes/Sensors/Public.php:699 classes/Sensors/WooCommerce.php:1823
285
  msgid "On backorder"
286
  msgstr ""
287
 
288
+ #: classes/Sensors/WooCommerce.php:2718
289
  msgid "Visible"
290
  msgstr ""
291
 
292
+ #: classes/Sensors/WooCommerce.php:2718
293
  msgid "Non-Visible"
294
  msgstr ""
295
 
297
  msgid "This function is deprecated"
298
  msgstr ""
299
 
300
+ #: classes/Settings.php:1569
301
  msgid "View Order"
302
  msgstr ""
303
 
304
+ #: classes/Settings.php:1680 classes/Settings.php:1913
305
  msgid "plugin settings"
306
  msgstr ""
307
 
308
+ #: classes/Settings.php:1683 classes/Settings.php:1916
309
  msgid "contact our support"
310
  msgstr ""
311
 
325
  "the plugin WP Security Audit Log on the website %2$s on %3$s."
326
  msgstr ""
327
 
328
+ #: classes/ViewManager.php:260
329
+ msgid "Free Premium Trial"
330
+ msgstr ""
331
+
332
+ #: classes/ViewManager.php:485 classes/Views/Settings.php:241
333
+ #: classes/Views/Settings.php:2582 classes/Views/Settings.php:2611
334
+ #: classes/Views/SetupWizard.php:66
335
+ msgid "Access Denied."
336
+ msgstr ""
337
+
338
+ #: classes/ViewManager.php:516
339
+ msgid "Log count parameter expected."
340
+ msgstr ""
341
+
342
+ #: classes/ViewManager.php:524 classes/Views/AuditLog.php:658
343
+ #: classes/Views/AuditLog.php:735 classes/Views/AuditLog.php:761
344
+ #: classes/Views/AuditLog.php:1066 classes/Views/AuditLog.php:1136
345
+ #: classes/Views/Licensing.php:90 classes/Views/Settings.php:256
346
+ #: classes/Views/Settings.php:2153 classes/Views/Settings.php:2181
347
+ #: classes/Views/Settings.php:2211 classes/Views/Settings.php:2250
348
+ #: classes/Views/Settings.php:2252 classes/Views/Settings.php:2254
349
+ #: classes/Views/Settings.php:2369 classes/Views/Settings.php:2371
350
+ #: classes/Views/Settings.php:2373 classes/Views/Settings.php:2467
351
+ #: classes/Views/Settings.php:2558 classes/Views/SetupWizard.php:81
352
+ msgid "Nonce verification failed."
353
+ msgstr ""
354
+
355
  #: classes/Views/AuditLog.php:91
356
  msgid ""
357
+ "Get instantly alerted of important changes via email, search the activity "
358
+ "log and use filters, generate reports, see who is logged in and more!"
359
  msgstr ""
360
 
361
  #: classes/Views/AuditLog.php:92
369
  msgstr ""
370
 
371
  #: classes/Views/AuditLog.php:96
372
+ msgid "Upgrade to benefit more from the activity logs."
 
 
373
  msgstr ""
374
 
375
  #: classes/Views/AuditLog.php:99
376
  msgid ""
377
+ "See who is logged in real-time, generate reports, get alerted via email of "
378
+ "important changes and more!"
379
  msgstr ""
380
 
381
  #: classes/Views/AuditLog.php:100
382
  msgid ""
383
+ "Unlock these and other features with the premium edition of WP Security "
384
+ "Audit Log."
385
  msgstr ""
386
 
387
+ #: classes/Views/AuditLog.php:173
388
+ msgid "UPGRADE NOW"
389
  msgstr ""
390
 
391
+ #: classes/Views/AuditLog.php:174 classes/Views/Help.php:250
392
+ msgid "Start Free Trial"
393
+ msgstr ""
394
+
395
+ #: classes/Views/AuditLog.php:175
396
  msgid "Tell me more"
397
  msgstr ""
398
 
399
+ #: classes/Views/AuditLog.php:177
400
  msgid "Dismiss the banner"
401
  msgstr ""
402
 
403
+ #: classes/Views/AuditLog.php:177
404
  msgid "Close"
405
  msgstr ""
406
 
407
+ #: classes/Views/AuditLog.php:202
408
  msgid ""
409
  "There are connectivity issues with the database where the WordPress activity "
410
  "log is stored. The logs will be temporary buffered in the WordPress database "
411
  "until the connection is fully restored."
412
  msgstr ""
413
 
414
+ #: classes/Views/AuditLog.php:220
415
  msgid ""
416
  "Help us improve WP Security Audit Log! Opt-in to sending us diagnostic non-"
417
  "sensitive data about your plugin usage (<strong>no activity log data is "
418
  "sent</strong>) and subscribe to our newsletter."
419
  msgstr ""
420
 
421
+ #: classes/Views/AuditLog.php:223
422
  msgid "Opt-In"
423
  msgstr ""
424
 
425
+ #: classes/Views/AuditLog.php:225
426
  msgid "Learn More"
427
  msgstr ""
428
 
429
+ #: classes/Views/AuditLog.php:227 classes/Views/AuditLog.php:435
430
+ #: classes/Views/Settings.php:557 classes/Views/Settings.php:584
431
+ #: classes/Views/Settings.php:675 classes/Views/Settings.php:713
432
+ #: classes/Views/Settings.php:1169 classes/Views/Settings.php:1236
433
+ #: classes/Views/Settings.php:1891 classes/Views/Settings.php:1954
434
+ #: classes/Views/Settings.php:1982 classes/Views/Settings.php:1997
435
+ #: classes/Views/Settings.php:2007 classes/Views/SetupWizard.php:519
436
  msgid "No"
437
  msgstr ""
438
 
439
+ #: classes/Views/AuditLog.php:267 classes/Views/AuditLog.php:283
440
  msgid "Audit Log Viewer"
441
  msgstr ""
442
 
443
+ #: classes/Views/AuditLog.php:383 classes/Views/Licensing.php:82
444
+ #: classes/Views/Settings.php:347 classes/Views/ToggleAlerts.php:127
445
  msgid "You do not have sufficient permissions to access this page."
446
  msgstr ""
447
 
448
+ #: classes/Views/AuditLog.php:431
449
  msgid ""
450
  "Thank you very much for using the WP Security Audit Log plugin. We have "
451
  "created a wizard to ease the process of configuring the plugin so you can "
452
  "get the best out of it. Would you like to run the wizard?"
453
  msgstr ""
454
 
455
+ #: classes/Views/AuditLog.php:434 classes/Views/Settings.php:552
456
+ #: classes/Views/Settings.php:579 classes/Views/Settings.php:645
457
+ #: classes/Views/Settings.php:703 classes/Views/Settings.php:1164
458
+ #: classes/Views/Settings.php:1229 classes/Views/Settings.php:1886
459
+ #: classes/Views/Settings.php:1947 classes/Views/Settings.php:1975
460
+ #: classes/Views/Settings.php:1996 classes/Views/Settings.php:2006
461
  #: classes/Views/SetupWizard.php:524
462
  msgid "Yes"
463
  msgstr ""
464
 
465
+ #: classes/Views/AuditLog.php:469
466
  msgid "Please enter the number of alerts you would like to see on one page:"
467
  msgstr ""
468
 
469
+ #: classes/Views/AuditLog.php:471
470
  msgid "No Results"
471
  msgstr ""
472
 
473
+ #: classes/Views/AuditLog.php:655
474
  msgid "No users found."
475
  msgstr ""
476
 
477
+ #: classes/Views/AuditLog.php:677
 
 
 
 
 
 
 
 
 
 
 
 
 
478
  msgid "Log file does not exist."
479
  msgstr ""
480
 
481
+ #: classes/Views/AuditLog.php:726
482
  msgid "Request to get log file failed."
483
  msgstr ""
484
 
485
+ #: classes/Views/AuditLog.php:801
486
  msgid "Freemius opt choice selected."
487
  msgstr ""
488
 
489
+ #: classes/Views/AuditLog.php:808
490
  msgid "Freemius opt choice not found."
491
  msgstr ""
492
 
493
+ #: classes/Views/AuditLog.php:980
494
  msgid "WordPress Activity Log"
495
  msgstr ""
496
 
497
+ #: classes/Views/AuditLog.php:981
498
  msgid ""
499
  "When a user makes a change on your website the plugin will keep a record of "
500
  "that event here. Right now there is nothing because this is a new install."
501
  msgstr ""
502
 
503
+ #: classes/Views/AuditLog.php:982
504
  msgid "Thank you for using WP Security Audit Log"
505
  msgstr ""
506
 
507
+ #: classes/Views/AuditLog.php:1003
508
  msgid "Error: You do not have sufficient permissions to exclude this URL."
509
  msgstr ""
510
 
511
+ #: classes/Views/AuditLog.php:1049
512
  msgid "You do not have sufficient permissions to dismiss this notice."
513
  msgstr ""
514
 
515
+ #: classes/Views/AuditLog.php:1119
516
  msgid "Access Denied"
517
  msgstr ""
518
 
519
  #: classes/Views/EmailNotifications.php:28
520
+ msgid "Notifications Add-On"
521
  msgstr ""
522
 
523
  #: classes/Views/EmailNotifications.php:42
524
+ msgid "Notifications &#8682;"
525
  msgstr ""
526
 
527
+ #: classes/Views/EmailNotifications.php:114
528
+ msgid "SMS & Email Notifications"
529
  msgstr ""
530
 
531
+ #: classes/Views/EmailNotifications.php:115
532
+ msgid ""
533
+ "Get instantly alerted of important changes on your site via SMS and email "
534
+ "notifications. Upgrade to premium and:"
535
  msgstr ""
536
 
537
  #: classes/Views/EmailNotifications.php:118
538
+ msgid "Configure any type of SMS & email notifications"
 
539
  msgstr ""
540
 
541
  #: classes/Views/EmailNotifications.php:119
542
  msgid ""
543
+ "Receive notifications for when users login, change their password or change "
544
+ "content"
545
  msgstr ""
546
 
547
  #: classes/Views/EmailNotifications.php:120
548
+ msgid "Get alerted of site changes like plugin installs, theme changes etc"
549
  msgstr ""
550
 
551
  #: classes/Views/EmailNotifications.php:121
552
+ msgid ""
553
+ "Enable built-in security email notifications of suspicious user activity"
554
  msgstr ""
555
 
556
  #: classes/Views/EmailNotifications.php:122
557
+ msgid "Personalize all email and SMS templates"
558
  msgstr ""
559
 
560
+ #: classes/Views/EmailNotifications.php:123
561
+ msgid "Use the trigger builder to configure any type of notification criteria!"
 
562
  msgstr ""
563
 
564
+ #: classes/Views/EmailNotifications.php:125
565
+ msgid ""
566
+ "Getting started is really easy. You can use one of the plugin’s built-in "
567
+ "notifications or create your own using the easy to use trigger builder."
568
+ msgstr ""
569
+
570
+ #: classes/Views/EmailNotifications.php:128
571
+ msgid ""
572
+ "Email and SMS notifications instantly alert you of important changes on your "
573
+ "WordPress site."
574
+ msgstr ""
575
+
576
+ #: classes/Views/EmailNotifications.php:132
577
+ msgid ""
578
+ "Easily enable any of the built-in security and user management notifications."
579
  msgstr ""
580
 
581
+ #: classes/Views/EmailNotifications.php:136
 
582
  msgid ""
583
+ "Use the trigger builder to configure any type of email and SMS notification "
584
+ "to get instantly alerted of site changes that are important to you and your "
585
+ "business."
586
  msgstr ""
587
 
588
+ #: classes/Views/EmailNotifications.php:140
 
589
  msgid ""
590
+ "All email and SMS templates are configurable, allowing you to personalize "
591
+ "them."
592
  msgstr ""
593
 
594
  #: classes/Views/ExternalDB.php:28
599
  msgid "DB & Integrations &#8682;"
600
  msgstr ""
601
 
602
+ #: classes/Views/ExternalDB.php:114
603
+ msgid "Audit Log Database & Integration Tools"
604
  msgstr ""
605
 
606
+ #: classes/Views/ExternalDB.php:115
607
  msgid ""
608
+ "There are several benefits to segregating the logs from the main site "
609
+ "database, and to be able to mirror the logs to third party and centralized "
610
+ "business solutions. Upgrade to premium and:"
611
+ msgstr ""
612
+
613
+ #: classes/Views/ExternalDB.php:118
614
+ msgid "Store the audit logs of your sites on an external database"
615
  msgstr ""
616
 
617
  #: classes/Views/ExternalDB.php:119
618
+ msgid "Configuring archiving and store older log data in a segregated database"
619
  msgstr ""
620
 
621
  #: classes/Views/ExternalDB.php:120
622
+ msgid ""
623
+ "Mirror the logs to syslog, Slack, Papertrail and central business "
624
+ "communication services"
625
  msgstr ""
626
 
627
  #: classes/Views/ExternalDB.php:121
628
  msgid ""
629
+ "Configure filters to filter what is mirrored and archived in the databases "
630
+ "and services"
631
  msgstr ""
632
 
633
+ #: classes/Views/ExternalDB.php:126
634
  msgid ""
635
+ "Easily configure integration and database connections thanks to a user "
636
+ "friendly wizard."
637
+ msgstr ""
638
+
639
+ #: classes/Views/ExternalDB.php:130
640
+ msgid "Configure activity log filters for third party services connections."
641
  msgstr ""
642
 
643
+ #: classes/Views/ExternalDB.php:134
644
  msgid ""
645
+ "Configure an unlimited number of connections to different databases and "
646
+ "third party services."
647
  msgstr ""
648
 
649
  #: classes/Views/Help.php:30 classes/Views/Help.php:44
794
  msgid "Licensing"
795
  msgstr ""
796
 
797
+ #: classes/Views/Licensing.php:96 classes/Views/Settings.php:363
798
  #: classes/Views/ToggleAlerts.php:144
799
  msgid "Settings have been saved."
800
  msgstr ""
801
 
802
+ #: classes/Views/Licensing.php:101 classes/Views/Settings.php:369
803
  #: classes/Views/ToggleAlerts.php:150
804
  msgid "Error: "
805
  msgstr ""
828
  msgid "Logged In Users &#8682;"
829
  msgstr ""
830
 
831
+ #: classes/Views/LogInUsers.php:114
832
+ msgid "Real-Time Users Sessions Management"
833
  msgstr ""
834
 
835
+ #: classes/Views/LogInUsers.php:115
836
+ msgid "Better manage your users’ logins and sessions. Upgrade to premium and:"
837
  msgstr ""
838
 
839
  #: classes/Views/LogInUsers.php:119
840
+ msgid "See who is logged in to your site"
841
  msgstr ""
842
 
843
  #: classes/Views/LogInUsers.php:120
844
+ msgid "When they logged in and from where"
845
  msgstr ""
846
 
847
  #: classes/Views/LogInUsers.php:121
848
+ msgid "The last change they have done in real-time"
849
  msgstr ""
850
 
851
  #: classes/Views/LogInUsers.php:122
852
+ msgid "Terminate any users’ session with a click of a button"
853
  msgstr ""
854
 
855
  #: classes/Views/LogInUsers.php:123
856
+ msgid "Limit or block multiple sessions for the same user"
857
  msgstr ""
858
 
859
+ #: classes/Views/LogInUsers.php:124
860
+ msgid "Get alerted of multiple same user sessions"
 
 
861
  msgstr ""
862
 
863
+ #: classes/Views/LogInUsers.php:128
864
  msgid ""
865
+ "See who is logged in to your WordPress site and multisite network in real-"
866
+ "time."
867
+ msgstr ""
868
+
869
+ #: classes/Views/LogInUsers.php:132
870
+ msgid "Limit, manage and block multiple same user sessions easily."
871
  msgstr ""
872
 
873
  #: classes/Views/Reports.php:28
878
  msgid "Reports &#8682;"
879
  msgstr ""
880
 
881
+ #: classes/Views/Reports.php:114
882
+ msgid "Individual, Scheduled & Automated Reports"
883
  msgstr ""
884
 
885
+ #: classes/Views/Reports.php:115
886
  msgid ""
887
+ "Many are not fans of reports, however reports are vital in business. With "
888
+ "them you can make informed decisions that allow you to improve user "
889
+ "productivity and the business. Upgrade to Premium so you can:"
890
+ msgstr ""
891
+
892
+ #: classes/Views/Reports.php:118
893
+ msgid "Generate any type of user and site (in multisite) activity report"
894
  msgstr ""
895
 
896
  #: classes/Views/Reports.php:119
897
+ msgid "Automate and schedule daily, weekly, monthly and quarterly reports"
898
  msgstr ""
899
 
900
  #: classes/Views/Reports.php:120
901
+ msgid "Received reports automatically via email"
902
  msgstr ""
903
 
904
  #: classes/Views/Reports.php:121
905
  msgid ""
906
+ "Create statistics reports about users’ views, logins, activity from IP "
907
+ "addresses & more"
908
  msgstr ""
909
 
910
+ #: classes/Views/Reports.php:123
911
+ msgid ""
912
+ "Reports are vital to the success of your business and management of your "
913
+ "site."
914
  msgstr ""
915
 
916
+ #: classes/Views/Reports.php:126
917
+ msgid "Generate a HTML or CSV report."
918
  msgstr ""
919
 
920
+ #: classes/Views/Reports.php:130
921
+ msgid "Easily configure a criteria for your reports."
 
 
922
  msgstr ""
923
 
924
+ #: classes/Views/Reports.php:134
925
+ msgid "Schedule reports that are sent to you by email automatically."
 
 
926
  msgstr ""
927
 
928
  #: classes/Views/Search.php:28
933
  msgid "Search &#8682;"
934
  msgstr ""
935
 
936
+ #: classes/Views/Search.php:114
937
+ msgid "Search & Filters for the Activity Log"
938
  msgstr ""
939
 
940
+ #: classes/Views/Search.php:115
941
  msgid ""
942
+ "You can find all the information you want in the activity log, if you know "
943
+ "what you are looking for and have the right tools. Upgrade to premium so you "
944
+ "can:"
945
+ msgstr ""
946
+
947
+ #: classes/Views/Search.php:118
948
+ msgid "Do text searches and use filters to fine tune the search results"
949
  msgstr ""
950
 
951
  #: classes/Views/Search.php:119
952
+ msgid "Easily find when and who did a specific change on your site"
953
  msgstr ""
954
 
955
  #: classes/Views/Search.php:120
956
+ msgid "Easily identify and track back suspicious user behaviour"
957
  msgstr ""
958
 
959
  #: classes/Views/Search.php:121
960
+ msgid "Search for the cause of a problem and ease troubleshooting"
961
  msgstr ""
962
 
963
  #: classes/Views/Search.php:122
964
+ msgid "Save search terms and filters for future use and improved productivity"
965
+ msgstr ""
966
+
967
+ #: classes/Views/Search.php:127
968
+ msgid "Use the text search to find a specific change."
969
  msgstr ""
970
 
971
+ #: classes/Views/Search.php:131
972
  msgid ""
973
+ "Configure any filter you need to fine tune the search results and find what "
974
+ "you are looking for with much less effort."
975
  msgstr ""
976
 
977
+ #: classes/Views/Search.php:135
978
+ msgid ""
979
+ "Save search terms and filters to run the searches again in the future with "
980
+ "just a single click."
981
+ msgstr ""
982
+
983
+ #: classes/Views/Settings.php:96
984
  msgid "General"
985
  msgstr ""
986
 
987
+ #: classes/Views/Settings.php:102
988
  msgid "Activity Log"
989
  msgstr ""
990
 
991
+ #: classes/Views/Settings.php:108
992
  msgid "File Integrity Scan"
993
  msgstr ""
994
 
995
+ #: classes/Views/Settings.php:114 classes/Views/SetupWizard.php:148
996
  msgid "Exclude Objects"
997
  msgstr ""
998
 
999
+ #: classes/Views/Settings.php:120
1000
  msgid "Advanced Settings"
1001
  msgstr ""
1002
 
1003
+ #: classes/Views/Settings.php:161 classes/Views/Settings.php:175
1004
+ #: classes/Views/ToggleAlerts.php:432 classes/Views/ToggleAlerts.php:460
1005
  msgid "Settings"
1006
  msgstr ""
1007
 
1008
+ #: classes/Views/Settings.php:229
1009
  msgid "Unknown settings tab."
1010
  msgstr ""
1011
 
1012
+ #: classes/Views/Settings.php:266 classes/Views/SetupWizard.php:91
1013
+ msgid "Invalid input."
 
1014
  msgstr ""
1015
 
1016
+ #: classes/Views/Settings.php:359
1017
+ msgid "Message sent successfully."
1018
  msgstr ""
1019
 
1020
+ #: classes/Views/Settings.php:377
1021
  msgid "Old data successfully purged."
1022
  msgstr ""
1023
 
1024
+ #: classes/Views/Settings.php:383
1025
  msgid "No data is old enough to be purged."
1026
  msgstr ""
1027
 
1028
+ #: classes/Views/Settings.php:420
1029
+ msgid "Send Message"
1030
+ msgstr ""
1031
+
1032
+ #: classes/Views/Settings.php:471
1033
  msgid ""
1034
  "Need help with setting up the plugin to meet your requirements? <a href="
1035
  "\"https://www.wpsecurityauditlog.com/contact/\" target=\"_blank\">Schedule a "
1036
  "20 minutes consultation and setup call</a> with our experts for just $50."
1037
  msgstr ""
1038
 
1039
+ #: classes/Views/Settings.php:473
1040
  msgid "Use infinite scroll or pagination for the event viewer?"
1041
  msgstr ""
1042
 
1043
  #. translators: Learn more link.
1044
+ #: classes/Views/Settings.php:478
1045
  #, php-format
1046
  msgid ""
1047
  "When using infinite scroll the event viewer and search results %s load up "
1048
  "much faster and require less resources."
1049
  msgstr ""
1050
 
1051
+ #: classes/Views/Settings.php:479
1052
  msgid "(Premium feature)"
1053
  msgstr ""
1054
 
1055
+ #: classes/Views/Settings.php:486
1056
  msgid "Select event viewer view type:"
1057
  msgstr ""
1058
 
1059
+ #: classes/Views/Settings.php:491
1060
  msgid "Infinite Scroll (Recommended)"
1061
  msgstr ""
1062
 
1063
+ #: classes/Views/Settings.php:496
1064
  msgid "Pagination"
1065
  msgstr ""
1066
 
1067
+ #: classes/Views/Settings.php:507
1068
+ msgid "Do you want the activity log viewer to auto refresh?"
1069
+ msgstr ""
1070
+
1071
+ #: classes/Views/Settings.php:508
1072
+ msgid ""
1073
+ "The activity log viewer auto refreshes every 30 seconds when opened so you "
1074
+ "can see the latest events as they happen almost in real time."
1075
+ msgstr ""
1076
+
1077
+ #: classes/Views/Settings.php:512
1078
+ msgid "Refresh Audit Log Viewer"
1079
+ msgstr ""
1080
+
1081
+ #: classes/Views/Settings.php:518
1082
+ msgid "Auto refresh"
1083
+ msgstr ""
1084
+
1085
+ #: classes/Views/Settings.php:523
1086
+ msgid "Do not auto refresh"
1087
+ msgstr ""
1088
+
1089
+ #: classes/Views/Settings.php:533
1090
  msgid "Display latest events widget in Dashboard & Admin bar"
1091
  msgstr ""
1092
 
1093
  #. translators: Max number of dashboard widget alerts.
1094
+ #: classes/Views/Settings.php:538
1095
  #, php-format
1096
  msgid ""
1097
  "The events widget displays the latest %d security events in the dashboard "
1098
  "and the admin bar notification displays the latest event."
1099
  msgstr ""
1100
 
1101
+ #: classes/Views/Settings.php:546
1102
  msgid "Dashboard Widget"
1103
  msgstr ""
1104
 
1105
+ #: classes/Views/Settings.php:567
1106
  msgid "Admin Bar Notification"
1107
  msgstr ""
1108
 
1109
+ #: classes/Views/Settings.php:570
1110
  msgid "Admin Bar Notification (Premium)"
1111
  msgstr ""
1112
 
1113
+ #: classes/Views/Settings.php:594
1114
  msgid "Admin Bar Notification Updates"
1115
  msgstr ""
1116
 
1117
+ #: classes/Views/Settings.php:597
1118
  msgid "Admin Bar Notification Updates (Premium)"
1119
  msgstr ""
1120
 
1121
+ #: classes/Views/Settings.php:606
1122
  msgid "Update in near real time"
1123
  msgstr ""
1124
 
1125
+ #: classes/Views/Settings.php:611
1126
  msgid "Update only on page refreshes"
1127
  msgstr ""
1128
 
1129
+ #: classes/Views/Settings.php:621
1130
  msgid "Add user notification on the WordPress login page"
1131
  msgstr ""
1132
 
1133
+ #: classes/Views/Settings.php:622
1134
  msgid ""
1135
  "Many compliance regulations (such as the GDRP) require website "
1136
  "administrators to tell the users of their website that all the changes they "
1137
  "do when logged in are being logged."
1138
  msgstr ""
1139
 
1140
+ #: classes/Views/Settings.php:626
1141
  msgid "Login Page Notification"
1142
  msgstr ""
1143
 
1144
+ #: classes/Views/Settings.php:651 wp-security-audit-log.php:1565
1145
  msgid ""
1146
  "For security and auditing purposes, a record of all of your logged-in "
1147
  "actions and changes within the WordPress dashboard will be recorded in an "
1150
  "IP address where you accessed this site from."
1151
  msgstr ""
1152
 
1153
+ #: classes/Views/Settings.php:669
1154
  msgid "<strong>Note: </strong>"
1155
  msgstr ""
1156
 
1157
+ #: classes/Views/Settings.php:669
1158
  msgid ""
1159
  "The only HTML code allowed in the login page notification is for links ( < a "
1160
  "href >< /a > )."
1161
  msgstr ""
1162
 
1163
+ #: classes/Views/Settings.php:685
1164
  msgid "Is your website running behind a firewall or reverse proxy?"
1165
  msgstr ""
1166
 
1167
  #. translators: Learn more link.
1168
+ #: classes/Views/Settings.php:690
1169
  #, php-format
1170
  msgid ""
1171
  "If your website is running behind a firewall set this option to yes so the "
1172
  "plugin retrieves the end user’s IP address from the proxy header - %s."
1173
  msgstr ""
1174
 
1175
+ #: classes/Views/Settings.php:691
1176
  msgid "learn more"
1177
  msgstr ""
1178
 
1179
+ #: classes/Views/Settings.php:698
1180
  msgid "Reverse Proxy / Firewall Options"
1181
  msgstr ""
1182
 
1183
+ #: classes/Views/Settings.php:708
1184
  msgid ""
1185
  "Filter internal IP addresses from the proxy headers. Enable this option only "
1186
  "if you are\tare still seeing the internal IP addresses of the firewall or "
1187
  "proxy."
1188
  msgstr ""
1189
 
1190
+ #: classes/Views/Settings.php:724
1191
  msgid "Who can change the plugin settings?"
1192
  msgstr ""
1193
 
1194
+ #: classes/Views/Settings.php:725
1195
  msgid ""
1196
  "By default only users with administrator or super administrator (multisite) "
1197
  "roles can change the settings of the plugin. Though you can change these "
1198
  "privileges from this section."
1199
  msgstr ""
1200
 
1201
+ #: classes/Views/Settings.php:729
1202
  msgid "Restrict Plugin Access"
1203
  msgstr ""
1204
 
1205
+ #: classes/Views/Settings.php:735
1206
  msgid "Only me"
1207
  msgstr ""
1208
 
1209
+ #: classes/Views/Settings.php:740
1210
  msgid "Only administrators"
1211
  msgstr ""
1212
 
1213
+ #: classes/Views/Settings.php:746
1214
  msgid "Only superadmins"
1215
  msgstr ""
1216
 
1217
+ #: classes/Views/Settings.php:752
1218
  msgid "All these users or users with these roles"
1219
  msgstr ""
1220
 
1221
+ #: classes/Views/Settings.php:754
1222
  msgid ""
1223
  "Specify the username or the users which can change the plugin settings. You "
1224
  "can also specify roles."
1225
  msgstr ""
1226
 
1227
+ #: classes/Views/Settings.php:783
1228
  msgid "Allow other users to view the activity log"
1229
  msgstr ""
1230
 
1231
+ #: classes/Views/Settings.php:784
1232
  msgid ""
1233
  "By default only users with administrator and super administrator (multisite) "
1234
  "role can view the WordPress activity log. Though you can allow other users "
1235
  "with no admin role to view the events."
1236
  msgstr ""
1237
 
1238
+ #: classes/Views/Settings.php:788
1239
  msgid "Can View Events"
1240
  msgstr ""
1241
 
1242
+ #: classes/Views/Settings.php:796
1243
  msgid ""
1244
  "Specify the username or the users which do not have an admin role but can "
1245
  "also see the WordPress activity role. You can also specify roles."
1246
  msgstr ""
1247
 
1248
+ #: classes/Views/Settings.php:822
1249
  msgid "Which email address should the plugin use as a from address?"
1250
  msgstr ""
1251
 
1252
+ #: classes/Views/Settings.php:823
1253
  msgid ""
1254
  "By default when the plugin sends an email notification it uses the email "
1255
  "address specified in this website’s general settings. Though you can change "
1256
  "the email address and display name from this section."
1257
  msgstr ""
1258
 
1259
+ #: classes/Views/Settings.php:827
1260
  msgid "From Email & Name"
1261
  msgstr ""
1262
 
1263
+ #: classes/Views/Settings.php:833
1264
  msgid "Use the email address from the WordPress general settings"
1265
  msgstr ""
1266
 
1267
+ #: classes/Views/Settings.php:838
1268
  msgid "Use another email address"
1269
  msgstr ""
1270
 
1271
+ #: classes/Views/Settings.php:842
1272
  msgid "Email Address"
1273
  msgstr ""
1274
 
1275
+ #: classes/Views/Settings.php:847
1276
  msgid "Display Name"
1277
  msgstr ""
1278
 
1279
+ #: classes/Views/Settings.php:858
1280
  msgid "Do you want to hide the plugin from the list of installed plugins?"
1281
  msgstr ""
1282
 
1283
+ #: classes/Views/Settings.php:859
1284
  msgid ""
1285
  "By default all installed plugins are listed in the plugins page. If you do "
1286
  "not want other administrators to see that you installed this plugin set this "
1288
  "plugin on this website."
1289
  msgstr ""
1290
 
1291
+ #: classes/Views/Settings.php:863
1292
  msgid "Hide Plugin in Plugins Page"
1293
  msgstr ""
1294
 
1295
+ #: classes/Views/Settings.php:868
1296
  msgid "Yes, hide the plugin from the list of installed plugins"
1297
  msgstr ""
1298
 
1299
+ #: classes/Views/Settings.php:873
1300
  msgid "No, do not hide the plugin"
1301
  msgstr ""
1302
 
1303
+ #: classes/Views/Settings.php:943
1304
  msgid ""
1305
  "For how long do you want to keep the activity log events (Retention "
1306
  "settings) ?"
1307
  msgstr ""
1308
 
1309
+ #: classes/Views/Settings.php:946
1310
  msgid ""
1311
  "The plugin uses an efficient way to store the activity log data in the "
1312
  "WordPress database, though the more data you keep the more disk space will "
1313
  "be required. "
1314
  msgstr ""
1315
 
1316
+ #: classes/Views/Settings.php:947
1317
  msgid ""
1318
  "<a href=\"https://www.wpsecurityauditlog.com/pricing/\" target=\"_blank"
1319
  "\">Upgrade to Premium</a> to store the activity log data in an external "
1321
  msgstr ""
1322
 
1323
  #. translators: 1: Archive page link tag. 2: Link closing tag.
1324
+ #: classes/Views/Settings.php:965
1325
  #, php-format
1326
  msgid ""
1327
  "Retention settings moved to %1$s archiving settings %2$s because archiving "
1328
  "is enabled"
1329
  msgstr ""
1330
 
1331
+ #: classes/Views/Settings.php:972
1332
  msgid "Audit Log Retention"
1333
  msgstr ""
1334
 
1335
+ #: classes/Views/Settings.php:978
1336
  msgid "Keep all data"
1337
  msgstr ""
1338
 
1339
+ #: classes/Views/Settings.php:1005
1340
  msgid "Delete events older than"
1341
  msgstr ""
1342
 
1343
+ #: classes/Views/Settings.php:1012
1344
  msgid "Months"
1345
  msgstr ""
1346
 
1347
+ #: classes/Views/Settings.php:1013
1348
  msgid "Years"
1349
  msgstr ""
1350
 
1351
+ #: classes/Views/Settings.php:1021
1352
  msgid "The next scheduled purging of activity log data that is older than "
1353
  msgstr ""
1354
 
1355
+ #: classes/Views/Settings.php:1028
1356
  msgid "You can run the purging process now by clicking the button below."
1357
  msgstr ""
1358
 
1359
+ #: classes/Views/Settings.php:1032
1360
  msgid "Purge Old Data"
1361
  msgstr ""
1362
 
1363
+ #: classes/Views/Settings.php:1043
1364
  msgid "What timestamp you would like to see in the WordPress activity log?"
1365
  msgstr ""
1366
 
1367
+ #: classes/Views/Settings.php:1044
1368
  msgid ""
1369
  "Note that the WordPress' timezone might be different from that configured on "
1370
  "the server so when you switch from UTC to WordPress timezone or vice versa "
1371
  "you might notice a big difference."
1372
  msgstr ""
1373
 
1374
+ #: classes/Views/Settings.php:1048
1375
  msgid "Events Timestamp"
1376
  msgstr ""
1377
 
1378
+ #: classes/Views/Settings.php:1068
1379
  msgid "UTC"
1380
  msgstr ""
1381
 
1382
+ #: classes/Views/Settings.php:1074
1383
  msgid "Timezone configured on this WordPress website"
1384
  msgstr ""
1385
 
1386
+ #: classes/Views/Settings.php:1084
1387
  msgid ""
1388
  "What user information should be displayed in the WordPress activity log?"
1389
  msgstr ""
1390
 
1391
+ #: classes/Views/Settings.php:1085
1392
  msgid ""
1393
  "Usernames might not be the same as a user's first and last name so it can be "
1394
  "difficult to recognize whose user was that did a change. When there is no "
1396
  "back to the WordPress username."
1397
  msgstr ""
1398
 
1399
+ #: classes/Views/Settings.php:1089
1400
  msgid "User Information in Audit Log"
1401
  msgstr ""
1402
 
1403
+ #: classes/Views/Settings.php:1095
1404
  msgid "WordPress Username"
1405
  msgstr ""
1406
 
1407
+ #: classes/Views/Settings.php:1100
1408
  msgid "First Name & Last Name"
1409
  msgstr ""
1410
 
1411
+ #: classes/Views/Settings.php:1105
1412
  msgid "Configured Public Display Name"
1413
  msgstr ""
1414
 
1415
+ #: classes/Views/Settings.php:1115
1416
  msgid "Select the columns to be displayed in the WordPress activity log"
1417
  msgstr ""
1418
 
1419
+ #: classes/Views/Settings.php:1116
1420
  msgid ""
1421
  "When you deselect a column it won’t be shown in the activity log viewer but "
1422
  "the data will still be recorded by the plugin, so when you select it again "
1423
  "all the data will be displayed."
1424
  msgstr ""
1425
 
1426
+ #: classes/Views/Settings.php:1120
1427
  msgid "Audit Log Columns Selection"
1428
  msgstr ""
1429
 
1430
+ #: classes/Views/Settings.php:1133
1431
  msgid "Date & Time"
1432
  msgstr ""
1433
 
1434
+ #: classes/Views/Settings.php:1137
1435
  msgid "Source IP Address"
1436
  msgstr ""
1437
 
1438
+ #: classes/Views/Settings.php:1152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1439
  msgid "Do you want to keep a log of WordPress background activity?"
1440
  msgstr ""
1441
 
1442
+ #: classes/Views/Settings.php:1154
1443
  msgid ""
1444
  "WordPress does a lot of things in the background that you do not necessarily "
1445
  "need to know about, such as; deletion of post revisions, deletion of auto "
1447
  "might be a lot and are irrelevant to the user."
1448
  msgstr ""
1449
 
1450
+ #: classes/Views/Settings.php:1159
1451
  msgid "Enable Events for WordPress Background Activity"
1452
  msgstr ""
1453
 
1454
+ #: classes/Views/Settings.php:1212
1455
  msgid ""
1456
  "The plugin runs file integrity scans on your website so it keeps a log when "
1457
  "a file is added, modified or deleted. All the settings for the file "
1458
  "integrity scans can be found in this page."
1459
  msgstr ""
1460
 
1461
+ #: classes/Views/Settings.php:1213
1462
  msgid ""
1463
  "<a href=\"https://www.wpsecurityauditlog.com/support-documentation/wordpress-"
1464
  "files-changes-warning-activity-logs/\" target=\"_blank\">Refer to the "
1465
  "WordPress file integrity scans feature page</a> for more information."
1466
  msgstr ""
1467
 
1468
+ #: classes/Views/Settings.php:1216
1469
  msgid "Do you want the plugin to scan your website for file changes?"
1470
  msgstr ""
1471
 
1472
+ #: classes/Views/Settings.php:1221
1473
  msgid "Keep a Log of File Changes"
1474
  msgstr ""
1475
 
1476
+ #: classes/Views/Settings.php:1245
1477
  msgid ""
1478
  "Which file changes events do you want to keep a log of in the activity log?"
1479
  msgstr ""
1480
 
1481
+ #: classes/Views/Settings.php:1247
1482
  msgid ""
1483
  "By default the plugin will keep a log whenever a file has been added, "
1484
  "modified or deleted. It will also log an event in the activity log when a "
1486
  "link to specify which of these events the plugin should keep a log of."
1487
  msgstr ""
1488
 
1489
+ #: classes/Views/Settings.php:1253
1490
  msgid "Alert me when"
1491
  msgstr ""
1492
 
1493
+ #: classes/Views/Settings.php:1266
1494
  msgid "Configure Events"
1495
  msgstr ""
1496
 
1497
+ #: classes/Views/Settings.php:1275
1498
  msgid "When should the plugin scan your website for file changes?"
1499
  msgstr ""
1500
 
1501
+ #: classes/Views/Settings.php:1277
1502
  msgid ""
1503
  "By default the plugin will run file integrity scans once a week. If you can, "
1504
  "ideally you should run file integrity scans on a daily basis. The file "
1508
  "complete."
1509
  msgstr ""
1510
 
1511
+ #: classes/Views/Settings.php:1283
1512
  msgid "Scan Frequency"
1513
  msgstr ""
1514
 
1515
+ #: classes/Views/Settings.php:1288
1516
  msgid "Daily"
1517
  msgstr ""
1518
 
1519
+ #: classes/Views/Settings.php:1289
1520
  msgid "Weekly"
1521
  msgstr ""
1522
 
1523
+ #: classes/Views/Settings.php:1290
1524
  msgid "Monthly"
1525
  msgstr ""
1526
 
1527
+ #: classes/Views/Settings.php:1308
1528
  msgid "Scan Time"
1529
  msgstr ""
1530
 
1531
+ #: classes/Views/Settings.php:1314
1532
  msgid "00:00"
1533
  msgstr ""
1534
 
1535
+ #: classes/Views/Settings.php:1315
1536
  msgid "01:00"
1537
  msgstr ""
1538
 
1539
+ #: classes/Views/Settings.php:1316
1540
  msgid "02:00"
1541
  msgstr ""
1542
 
1543
+ #: classes/Views/Settings.php:1317
1544
  msgid "03:00"
1545
  msgstr ""
1546
 
1547
+ #: classes/Views/Settings.php:1318
1548
  msgid "04:00"
1549
  msgstr ""
1550
 
1551
+ #: classes/Views/Settings.php:1319
1552
  msgid "05:00"
1553
  msgstr ""
1554
 
1555
+ #: classes/Views/Settings.php:1320
1556
  msgid "06:00"
1557
  msgstr ""
1558
 
1559
+ #: classes/Views/Settings.php:1321
1560
  msgid "07:00"
1561
  msgstr ""
1562
 
1563
+ #: classes/Views/Settings.php:1322
1564
  msgid "08:00"
1565
  msgstr ""
1566
 
1567
+ #: classes/Views/Settings.php:1323
1568
  msgid "09:00"
1569
  msgstr ""
1570
 
1571
+ #: classes/Views/Settings.php:1324
1572
  msgid "10:00"
1573
  msgstr ""
1574
 
1575
+ #: classes/Views/Settings.php:1325
1576
  msgid "11:00"
1577
  msgstr ""
1578
 
1579
+ #: classes/Views/Settings.php:1326
1580
  msgid "12:00"
1581
  msgstr ""
1582
 
1583
+ #: classes/Views/Settings.php:1327
1584
  msgid "13:00"
1585
  msgstr ""
1586
 
1587
+ #: classes/Views/Settings.php:1328
1588
  msgid "14:00"
1589
  msgstr ""
1590
 
1591
+ #: classes/Views/Settings.php:1329
1592
  msgid "15:00"
1593
  msgstr ""
1594
 
1595
+ #: classes/Views/Settings.php:1330
1596
  msgid "16:00"
1597
  msgstr ""
1598
 
1599
+ #: classes/Views/Settings.php:1331
1600
  msgid "17:00"
1601
  msgstr ""
1602
 
1603
+ #: classes/Views/Settings.php:1332
1604
  msgid "18:00"
1605
  msgstr ""
1606
 
1607
+ #: classes/Views/Settings.php:1333
1608
  msgid "19:00"
1609
  msgstr ""
1610
 
1611
+ #: classes/Views/Settings.php:1334
1612
  msgid "20:00"
1613
  msgstr ""
1614
 
1615
+ #: classes/Views/Settings.php:1335
1616
  msgid "21:00"
1617
  msgstr ""
1618
 
1619
+ #: classes/Views/Settings.php:1336
1620
  msgid "22:00"
1621
  msgstr ""
1622
 
1623
+ #: classes/Views/Settings.php:1337
1624
  msgid "23:00"
1625
  msgstr ""
1626
 
1627
+ #: classes/Views/Settings.php:1342
1628
  msgid "Monday"
1629
  msgstr ""
1630
 
1631
+ #: classes/Views/Settings.php:1343
1632
  msgid "Tuesday"
1633
  msgstr ""
1634
 
1635
+ #: classes/Views/Settings.php:1344
1636
  msgid "Wednesday"
1637
  msgstr ""
1638
 
1639
+ #: classes/Views/Settings.php:1345
1640
  msgid "Thursday"
1641
  msgstr ""
1642
 
1643
+ #: classes/Views/Settings.php:1346
1644
  msgid "Friday"
1645
  msgstr ""
1646
 
1647
+ #: classes/Views/Settings.php:1347
1648
  msgid "Saturday"
1649
  msgstr ""
1650
 
1651
+ #: classes/Views/Settings.php:1348
1652
  msgid "Sunday"
1653
  msgstr ""
1654
 
1655
+ #: classes/Views/Settings.php:1353
1656
  msgid "01"
1657
  msgstr ""
1658
 
1659
+ #: classes/Views/Settings.php:1354
1660
  msgid "02"
1661
  msgstr ""
1662
 
1663
+ #: classes/Views/Settings.php:1355
1664
  msgid "03"
1665
  msgstr ""
1666
 
1667
+ #: classes/Views/Settings.php:1356
1668
  msgid "04"
1669
  msgstr ""
1670
 
1671
+ #: classes/Views/Settings.php:1357
1672
  msgid "05"
1673
  msgstr ""
1674
 
1675
+ #: classes/Views/Settings.php:1358
1676
  msgid "06"
1677
  msgstr ""
1678
 
1679
+ #: classes/Views/Settings.php:1359
1680
  msgid "07"
1681
  msgstr ""
1682
 
1683
+ #: classes/Views/Settings.php:1360
1684
  msgid "08"
1685
  msgstr ""
1686
 
1687
+ #: classes/Views/Settings.php:1361
1688
  msgid "09"
1689
  msgstr ""
1690
 
1691
+ #: classes/Views/Settings.php:1362
1692
  msgid "10"
1693
  msgstr ""
1694
 
1695
+ #: classes/Views/Settings.php:1363
1696
  msgid "11"
1697
  msgstr ""
1698
 
1699
+ #: classes/Views/Settings.php:1364
1700
  msgid "12"
1701
  msgstr ""
1702
 
1703
+ #: classes/Views/Settings.php:1365
1704
  msgid "13"
1705
  msgstr ""
1706
 
1707
+ #: classes/Views/Settings.php:1366
1708
  msgid "14"
1709
  msgstr ""
1710
 
1711
+ #: classes/Views/Settings.php:1367
1712
  msgid "15"
1713
  msgstr ""
1714
 
1715
+ #: classes/Views/Settings.php:1368
1716
  msgid "16"
1717
  msgstr ""
1718
 
1719
+ #: classes/Views/Settings.php:1369
1720
  msgid "17"
1721
  msgstr ""
1722
 
1723
+ #: classes/Views/Settings.php:1370
1724
  msgid "18"
1725
  msgstr ""
1726
 
1727
+ #: classes/Views/Settings.php:1371
1728
  msgid "19"
1729
  msgstr ""
1730
 
1731
+ #: classes/Views/Settings.php:1372
1732
  msgid "20"
1733
  msgstr ""
1734
 
1735
+ #: classes/Views/Settings.php:1373
1736
  msgid "21"
1737
  msgstr ""
1738
 
1739
+ #: classes/Views/Settings.php:1374
1740
  msgid "22"
1741
  msgstr ""
1742
 
1743
+ #: classes/Views/Settings.php:1375
1744
  msgid "23"
1745
  msgstr ""
1746
 
1747
+ #: classes/Views/Settings.php:1376
1748
  msgid "24"
1749
  msgstr ""
1750
 
1751
+ #: classes/Views/Settings.php:1377
1752
  msgid "25"
1753
  msgstr ""
1754
 
1755
+ #: classes/Views/Settings.php:1378
1756
  msgid "26"
1757
  msgstr ""
1758
 
1759
+ #: classes/Views/Settings.php:1379
1760
  msgid "27"
1761
  msgstr ""
1762
 
1763
+ #: classes/Views/Settings.php:1380
1764
  msgid "28"
1765
  msgstr ""
1766
 
1767
+ #: classes/Views/Settings.php:1381
1768
  msgid "29"
1769
  msgstr ""
1770
 
1771
+ #: classes/Views/Settings.php:1382
1772
  msgid "30"
1773
  msgstr ""
1774
 
1775
+ #: classes/Views/Settings.php:1398
1776
  msgid "Hour"
1777
  msgstr ""
1778
 
1779
+ #: classes/Views/Settings.php:1414 classes/Views/Settings.php:1430
1780
  msgid "Day"
1781
  msgstr ""
1782
 
1783
+ #: classes/Views/Settings.php:1440
1784
  msgid "Which directories should be scanned for file changes?"
1785
  msgstr ""
1786
 
1787
+ #: classes/Views/Settings.php:1442
1788
  msgid ""
1789
  "The plugin will scan all the directories in your WordPress website by "
1790
  "default because that is the most secure option. Though if for some reason "
1792
  "them from the below list."
1793
  msgstr ""
1794
 
1795
+ #: classes/Views/Settings.php:1448
1796
  msgid "Directories to scan"
1797
  msgstr ""
1798
 
1799
+ #: classes/Views/Settings.php:1454
1800
  msgid "Root directory of WordPress (excluding sub directories)"
1801
  msgstr ""
1802
 
1803
+ #: classes/Views/Settings.php:1455
1804
  msgid "WP Admin directory (/wp-admin/)"
1805
  msgstr ""
1806
 
1807
+ #: classes/Views/Settings.php:1456
1808
  msgid "WP Includes directory (/wp-includes/)"
1809
  msgstr ""
1810
 
1811
+ #: classes/Views/Settings.php:1457
1812
  msgid ""
1813
  "/wp-content/ directory (excluding plugins, themes & uploads directories)"
1814
  msgstr ""
1815
 
1816
+ #: classes/Views/Settings.php:1458
1817
  msgid "Themes directory (/wp-content/themes/)"
1818
  msgstr ""
1819
 
1820
+ #: classes/Views/Settings.php:1459
1821
  msgid "Plugins directory (/wp-content/plugins/)"
1822
  msgstr ""
1823
 
1824
+ #: classes/Views/Settings.php:1460
1825
  msgid "Uploads directory (/wp-content/uploads/)"
1826
  msgstr ""
1827
 
1828
+ #: classes/Views/Settings.php:1466
1829
  msgid ""
1830
  "Uploads directory of all sub sites on this network (/wp-content/sites/*)"
1831
  msgstr ""
1832
 
1833
+ #: classes/Views/Settings.php:1489
1834
  msgid "What is the biggest file size the plugin should scan?"
1835
  msgstr ""
1836
 
1837
+ #: classes/Views/Settings.php:1490
1838
  msgid ""
1839
  "By default the plugin does not scan files that are bigger than 5MB. Such "
1840
  "files are not common, hence typically not a target. Though if you are "
1842
  "limit from the below option."
1843
  msgstr ""
1844
 
1845
+ #: classes/Views/Settings.php:1493
1846
  msgid "File Size Limit"
1847
  msgstr ""
1848
 
1849
+ #: classes/Views/Settings.php:1496
1850
  msgid "MB"
1851
  msgstr ""
1852
 
1853
+ #: classes/Views/Settings.php:1502
1854
  msgid ""
1855
  "Do you want to exclude specific files or files with a particular extension "
1856
  "from the scan?"
1857
  msgstr ""
1858
 
1859
+ #: classes/Views/Settings.php:1503
1860
  msgid ""
1861
  "The plugin will scan everything that is in the WordPress root directory or "
1862
  "below, even if the files and directories are not part of WordPress. It is "
1865
  "excluded by default."
1866
  msgstr ""
1867
 
1868
+ #: classes/Views/Settings.php:1508
1869
  msgid "Exclude All Files in These Directories"
1870
  msgstr ""
1871
 
1872
+ #: classes/Views/Settings.php:1521 classes/Views/Settings.php:1557
1873
+ #: classes/Views/Settings.php:1587
1874
  msgid "REMOVE"
1875
  msgstr ""
1876
 
1877
+ #: classes/Views/Settings.php:1526 classes/Views/Settings.php:1562
1878
+ #: classes/Views/Settings.php:1592 classes/Views/SetupWizard.php:533
1879
  #: classes/Views/SetupWizard.php:541 classes/Views/SetupWizard.php:626
1880
  #: classes/Views/SetupWizard.php:645 classes/Views/SetupWizard.php:664
1881
  msgid "ADD"
1882
  msgstr ""
1883
 
1884
+ #: classes/Views/Settings.php:1529
1885
  msgid ""
1886
  "Specify the name of the directory and the path to it in relation to the "
1887
  "website's root. For example, if you want to want to exclude all files in the "
1888
  "sub directory dir1/dir2 specify the following:"
1889
  msgstr ""
1890
 
1891
+ #: classes/Views/Settings.php:1540
1892
  msgid "Exclude These Files"
1893
  msgstr ""
1894
 
1895
+ #: classes/Views/Settings.php:1565
1896
  msgid ""
1897
  "Specify the name and extension of the file(s) you want to exclude. Wildcard "
1898
  "not supported. There is no need to specify the path of the file."
1899
  msgstr ""
1900
 
1901
+ #: classes/Views/Settings.php:1574
1902
  msgid "Exclude these File Types"
1903
  msgstr ""
1904
 
1905
+ #: classes/Views/Settings.php:1595
1906
  msgid ""
1907
  "Specify the extension of the file types you want to exclude. You should "
1908
  "exclude any type of logs and backup files that tend to be very big."
1909
  msgstr ""
1910
 
1911
+ #: classes/Views/Settings.php:1604
1912
  msgid "Launch an instant file integrity scan"
1913
  msgstr ""
1914
 
1915
+ #: classes/Views/Settings.php:1606
1916
  msgid ""
1917
  "Click the Scan Now button to launch an instant file integrity scan using the "
1918
  "configured settings. You can navigate away from this page during the scan. "
1920
  "scans."
1921
  msgstr ""
1922
 
1923
+ #: classes/Views/Settings.php:1612
1924
  msgid "Launch Instant Scan"
1925
  msgstr ""
1926
 
1927
+ #: classes/Views/Settings.php:1618 classes/Views/Settings.php:1625
1928
+ #: classes/Views/Settings.php:2117
1929
  msgid "Scan Now"
1930
  msgstr ""
1931
 
1932
+ #: classes/Views/Settings.php:1619 classes/Views/Settings.php:1622
1933
+ #: classes/Views/Settings.php:1626
1934
  msgid "Stop Scan"
1935
  msgstr ""
1936
 
1937
+ #: classes/Views/Settings.php:1621 classes/Views/Settings.php:2119
1938
  msgid "Scan in Progress"
1939
  msgstr ""
1940
 
1941
+ #: classes/Views/Settings.php:1705
1942
  msgid ""
1943
  "By default the plugin keeps a log of all user changes done on your WordPress "
1944
  "website. Use the setting below to exclude any objects from the activity log. "
1946
  "object is referred will not be logged in the activity log."
1947
  msgstr ""
1948
 
1949
+ #: classes/Views/Settings.php:1709
1950
  msgid "Exclude Users:"
1951
  msgstr ""
1952
 
1953
+ #: classes/Views/Settings.php:1730
1954
  msgid "Exclude Roles:"
1955
  msgstr ""
1956
 
1957
+ #: classes/Views/Settings.php:1751
1958
  msgid "Exclude IP Addresses:"
1959
  msgstr ""
1960
 
1961
+ #: classes/Views/Settings.php:1772
1962
  msgid "Exclude Post Type:"
1963
  msgstr ""
1964
 
1965
+ #: classes/Views/Settings.php:1787
1966
  msgid ""
1967
  "WordPress has the post and page post types by default though your website "
1968
  "might use more post types (custom post types). You can exclude all post "
1969
  "types, including the default WordPress ones."
1970
  msgstr ""
1971
 
1972
+ #: classes/Views/Settings.php:1794
1973
  msgid "Exclude Custom Fields:"
1974
  msgstr ""
1975
 
1976
+ #: classes/Views/Settings.php:1809
1977
  msgid ""
1978
  "You can use the * wildcard to exclude multiple matching custom fields. For "
1979
  "example to exclude all custom fields starting with wp123 enter wp123*"
1980
  msgstr ""
1981
 
1982
+ #: classes/Views/Settings.php:1816
1983
  msgid "Exclude Non-Existing URLs:"
1984
  msgstr ""
1985
 
1986
+ #: classes/Views/Settings.php:1832
1987
  msgid ""
1988
  "Add the non existing URLs for which you do not want to be alerted of HTTP "
1989
  "404 errors in the activity log by specifying the complete URL.\tExamples "
1990
  "below:"
1991
  msgstr ""
1992
 
1993
+ #: classes/Views/Settings.php:1834
1994
  msgid "File: "
1995
  msgstr ""
1996
 
1997
+ #: classes/Views/Settings.php:1836
1998
  msgid "Directory: "
1999
  msgstr ""
2000
 
2001
+ #: classes/Views/Settings.php:1869
2002
  msgid "These settings are for advanced users."
2003
  msgstr ""
2004
 
2005
+ #: classes/Views/Settings.php:1870
2006
  msgid ""
2007
  "If you have any questions <a href=\"https://www.wpsecurityauditlog.com/"
2008
  "contact/\" target=\"_blank\">contact us</a>."
2009
  msgstr ""
2010
 
2011
+ #: classes/Views/Settings.php:1873
2012
  msgid ""
2013
  "Troubleshooting setting: Keep a debug log of all the requests this website "
2014
  "receives"
2015
  msgstr ""
2016
 
2017
+ #: classes/Views/Settings.php:1874
2018
  msgid ""
2019
  "Only enable the request log on testing, staging and development website. "
2020
  "Never enable logging on a live website unless instructed to do so. Enabling "
2021
  "request logging on a live website may degrade the performance of the website."
2022
  msgstr ""
2023
 
2024
+ #: classes/Views/Settings.php:1878
2025
  msgid "Request Log"
2026
  msgstr ""
2027
 
2028
+ #: classes/Views/Settings.php:1896
2029
  msgid ""
2030
  "<strong>Note:</strong> The requests debug log file is saved as request.log."
2031
  "php in the /wp-content/uploads/wp-security-audit-log/ directory."
2032
  msgstr ""
2033
 
2034
+ #: classes/Views/Settings.php:1908
2035
  msgid "Reset plugin settings to default"
2036
  msgstr ""
2037
 
2038
+ #: classes/Views/Settings.php:1909
2039
  msgid ""
2040
  "Click the RESET button to reset ALL plugin settings to default. Note that "
2041
  "the activity log data will be retained and only the plugin settings will be "
2042
  "reset. To purge the data of the activity log use the setting below."
2043
  msgstr ""
2044
 
2045
+ #: classes/Views/Settings.php:1913
2046
  msgid "Reset Settings"
2047
  msgstr ""
2048
 
2049
+ #: classes/Views/Settings.php:1915
2050
  msgid "RESET"
2051
  msgstr ""
2052
 
2053
+ #: classes/Views/Settings.php:1921
2054
  msgid "Purge the WordPress activity log"
2055
  msgstr ""
2056
 
2057
+ #: classes/Views/Settings.php:1922
2058
  msgid ""
2059
  "Click the Purge button below to delete all the data from the WordPress "
2060
  "activity log and start afresh."
2061
  msgstr ""
2062
 
2063
+ #: classes/Views/Settings.php:1926
2064
  msgid "Purge Activity Log"
2065
  msgstr ""
2066
 
2067
+ #: classes/Views/Settings.php:1928
2068
  msgid "PURGE"
2069
  msgstr ""
2070
 
2071
+ #: classes/Views/Settings.php:1934
2072
  msgid "MainWP Child Site Stealth Mode"
2073
  msgstr ""
2074
 
2075
+ #: classes/Views/Settings.php:1935
2076
  msgid ""
2077
  "This option is enabled automatically when the plugin detects the MainWP "
2078
  "Child plugin on the site. When this setting is enabled plugin access is "
2081
  "Disable this option to change the plugin to the default setup."
2082
  msgstr ""
2083
 
2084
+ #: classes/Views/Settings.php:1939
2085
  msgid "Enable MainWP Child Site Stealth Mode"
2086
  msgstr ""
2087
 
2088
+ #: classes/Views/Settings.php:1963
2089
  msgid "Do you want to delete the plugin data from the database upon uninstall?"
2090
  msgstr ""
2091
 
2092
+ #: classes/Views/Settings.php:1964
2093
  msgid ""
2094
  "The plugin saves the activity log data and settings in the WordPress "
2095
  "database. By default upon uninstalling the plugin the data is kept in the "
2098
  "access it again even when you reinstall the plugin."
2099
  msgstr ""
2100
 
2101
+ #: classes/Views/Settings.php:1968
2102
  msgid "Remove Data on Uninstall"
2103
  msgstr ""
2104
 
2105
+ #: classes/Views/Settings.php:1993
2106
  msgid "Are you sure you want to reset all the plugin settings to default?"
2107
  msgstr ""
2108
 
2109
+ #: classes/Views/Settings.php:2003
2110
  msgid "Are you sure you want to purge all the activity log data?"
2111
  msgstr ""
2112
 
2113
+ #: classes/Views/Settings.php:2035
2114
  msgid "MainWP Child plugin is not active on this website."
2115
  msgstr ""
2116
 
2117
+ #: classes/Views/Settings.php:2110
2118
  msgid "The specified value is not a valid URL!"
2119
  msgstr ""
2120
 
2121
+ #: classes/Views/Settings.php:2111
2122
  msgid "The specified value is not a valid post type!"
2123
  msgstr ""
2124
 
2125
+ #: classes/Views/Settings.php:2112
2126
  msgid "The specified value is not a valid IP address!"
2127
  msgstr ""
2128
 
2129
+ #: classes/Views/Settings.php:2113
2130
  msgid "The specified value is not a user nor a role!"
2131
  msgstr ""
2132
 
2133
+ #: classes/Views/Settings.php:2114
2134
  msgid "Filename cannot be added because it contains invalid characters."
2135
  msgstr ""
2136
 
2137
+ #: classes/Views/Settings.php:2115
2138
  msgid "File extension cannot be added because it contains invalid characters."
2139
  msgstr ""
2140
 
2141
+ #: classes/Views/Settings.php:2116
2142
  msgid "Directory cannot be added because it contains invalid characters."
2143
  msgstr ""
2144
 
2145
+ #: classes/Views/Settings.php:2118
2146
  msgid "Scan Failed"
2147
  msgstr ""
2148
 
2149
+ #: classes/Views/Settings.php:2243 classes/Views/Settings.php:2362
2150
  msgid "Invalid setting type."
2151
  msgstr ""
2152
 
2153
+ #: classes/Views/Settings.php:2298
2154
  msgid "You can exclude this directory using the check boxes above."
2155
  msgstr ""
2156
 
2157
+ #: classes/Views/Settings.php:2319
2158
  msgid "Option added to excluded types."
2159
  msgstr ""
2160
 
2161
+ #: classes/Views/Settings.php:2324
2162
  msgid "This file is already excluded from the scan."
2163
  msgstr ""
2164
 
2165
+ #: classes/Views/Settings.php:2326
2166
  msgid "This file extension is already excluded from the scan."
2167
  msgstr ""
2168
 
2169
+ #: classes/Views/Settings.php:2328
2170
  msgid "This directory is already excluded from the scan."
2171
  msgstr ""
2172
 
2173
+ #: classes/Views/Settings.php:2341
2174
  msgid "Option name is empty."
2175
  msgstr ""
2176
 
2177
+ #: classes/Views/Settings.php:2439
2178
  msgid "Option removed from excluded scan types."
2179
  msgstr ""
2180
 
2181
+ #: classes/Views/Settings.php:2446 classes/Views/Settings.php:2534
2182
  msgid "Something went wrong."
2183
  msgstr ""
2184
 
2185
+ #: classes/Views/Settings.php:2475
2186
  msgid "A cron job is in progress."
2187
  msgstr ""
2188
 
2189
+ #: classes/Views/Settings.php:2527 classes/Views/Settings.php:2570
2190
  msgid "Scan started successfully."
2191
  msgstr ""
2192
 
2193
+ #: classes/Views/Settings.php:2596 classes/Views/Settings.php:2623
2194
  msgid "Tables has been reset."
2195
  msgstr ""
2196
 
2197
+ #: classes/Views/Settings.php:2598 classes/Views/Settings.php:2625
2198
  msgid "Reset query failed."
2199
  msgstr ""
2200
 
2201
+ #: classes/Views/Settings.php:2601 classes/Views/Settings.php:2628
2202
  msgid "Nonce Verification Failed."
2203
  msgstr ""
2204
 
2435
  "on all the events the plugin can keep a log of."
2436
  msgstr ""
2437
 
2438
+ #: classes/Views/ToggleAlerts.php:209 defaults.php:486
2439
  msgid "Third Party Plugins"
2440
  msgstr ""
2441
 
2444
  msgstr ""
2445
 
2446
  #: classes/Views/ToggleAlerts.php:229 classes/Views/ToggleAlerts.php:261
2447
+ #: defaults.php:267
2448
  msgid "Custom Post Types"
2449
  msgstr ""
2450
 
2451
  #: classes/Views/ToggleAlerts.php:229 classes/Views/ToggleAlerts.php:261
2452
+ #: defaults.php:307
2453
  msgid "Pages"
2454
  msgstr ""
2455
 
2456
  #: classes/Views/ToggleAlerts.php:264 classes/Views/ToggleAlerts.php:271
2457
+ #: classes/Views/ToggleAlerts.php:329 defaults.php:490
2458
  msgid "BBPress Forum"
2459
  msgstr ""
2460
 
2461
  #: classes/Views/ToggleAlerts.php:265 classes/Views/ToggleAlerts.php:278
2462
+ #: classes/Views/ToggleAlerts.php:342 defaults.php:565
2463
  msgid "WooCommerce"
2464
  msgstr ""
2465
 
2466
  #: classes/Views/ToggleAlerts.php:266 classes/Views/ToggleAlerts.php:285
2467
  #: classes/Views/ToggleAlerts.php:342 classes/Views/ToggleAlerts.php:350
2468
+ #: defaults.php:520
2469
  msgid "WooCommerce Products"
2470
  msgstr ""
2471
 
2472
  #: classes/Views/ToggleAlerts.php:267 classes/Views/ToggleAlerts.php:292
2473
+ #: classes/Views/ToggleAlerts.php:357 defaults.php:617
2474
  msgid "Yoast SEO"
2475
  msgstr ""
2476
 
2477
  #: classes/Views/ToggleAlerts.php:268 classes/Views/ToggleAlerts.php:301
2478
+ #: classes/Views/ToggleAlerts.php:370 defaults.php:468
2479
  msgid "MultiSite"
2480
  msgstr ""
2481
 
2487
  msgid "Description"
2488
  msgstr ""
2489
 
2490
+ #: classes/Views/ToggleAlerts.php:322 classes/Views/ToggleAlerts.php:486
2491
+ #: classes/Views/ToggleAlerts.php:614
2492
  msgid "File Changes"
2493
  msgstr ""
2494
 
2495
+ #: classes/Views/ToggleAlerts.php:323 defaults.php:198
2496
  msgid "Content"
2497
  msgstr ""
2498
 
2537
  "Your website is a single site so the multisite events have been disabled."
2538
  msgstr ""
2539
 
2540
+ #: classes/Views/ToggleAlerts.php:380 defaults.php:172
2541
  msgid "User Profiles"
2542
  msgstr ""
2543
 
2544
+ #: classes/Views/ToggleAlerts.php:383 defaults.php:153
2545
  msgid "Other User Activity"
2546
  msgstr ""
2547
 
2573
  msgid "Tags"
2574
  msgstr ""
2575
 
2576
+ #: classes/Views/ToggleAlerts.php:426 classes/Views/ToggleAlerts.php:444
2577
  msgid "Categories"
2578
  msgstr ""
2579
 
2589
  msgid "Topics"
2590
  msgstr ""
2591
 
2592
+ #: classes/Views/ToggleAlerts.php:436 classes/Views/ToggleAlerts.php:452
2593
+ msgid "User Profile"
2594
  msgstr ""
2595
 
2596
  #: classes/Views/ToggleAlerts.php:438
2597
+ msgid "Product Admin"
2598
  msgstr ""
2599
 
2600
  #: classes/Views/ToggleAlerts.php:440
2601
+ msgid "Product Attribute"
2602
+ msgstr ""
2603
+
2604
+ #: classes/Views/ToggleAlerts.php:442
2605
  msgid "Store Admin"
2606
  msgstr ""
2607
 
2608
+ #: classes/Views/ToggleAlerts.php:446
2609
  msgid "Attributes"
2610
  msgstr ""
2611
 
2612
+ #: classes/Views/ToggleAlerts.php:448
2613
  msgid "Coupons"
2614
  msgstr ""
2615
 
2616
+ #: classes/Views/ToggleAlerts.php:450
2617
  msgid "Orders"
2618
  msgstr ""
2619
 
2620
+ #: classes/Views/ToggleAlerts.php:454
2621
  msgid "Website Changes"
2622
  msgstr ""
2623
 
2624
+ #: classes/Views/ToggleAlerts.php:456
2625
  msgid "Plugin Settings"
2626
  msgstr ""
2627
 
2628
+ #: classes/Views/ToggleAlerts.php:462
2629
  msgid "File Changes Scanning"
2630
  msgstr ""
2631
 
2632
+ #: classes/Views/ToggleAlerts.php:518 classes/Views/ToggleAlerts.php:551
2633
  msgid ""
2634
  "Capture 404 requests to file (the log file are created in the /wp-content/"
2635
  "uploads/wp-security-audit-log/404s/ directory)"
2636
  msgstr ""
2637
 
2638
+ #: classes/Views/ToggleAlerts.php:526 classes/Views/ToggleAlerts.php:559
2639
  msgid "Purge log files older than one month"
2640
  msgstr ""
2641
 
2642
+ #: classes/Views/ToggleAlerts.php:531
2643
  msgid ""
2644
  "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
2645
  "to non-existing pages from the same IP address. Increase the value in this "
2646
  "setting to the desired amount to keep a log of more or less requests."
2647
  msgstr ""
2648
 
2649
+ #: classes/Views/ToggleAlerts.php:536 classes/Views/ToggleAlerts.php:569
2650
  msgid "Record the referrer that generated the 404 error."
2651
  msgstr ""
2652
 
2653
+ #: classes/Views/ToggleAlerts.php:564
2654
  msgid ""
2655
  "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
2656
  "to non-existing pages from the same IP address. Increase the value in this "
2659
  "scanned the plugin will consume more resources to log all the requests."
2660
  msgstr ""
2661
 
2662
+ #: classes/Views/ToggleAlerts.php:581 classes/Views/ToggleAlerts.php:594
2663
  msgid ""
2664
  "Number of login attempts to log. Enter 0 to log all failed login attempts. "
2665
  "(By default the plugin only logs up to 10 failed login because the process "
2666
  "can be very resource intensive in case of a brute force attack)"
2667
  msgstr ""
2668
 
2669
+ #: classes/Views/ToggleAlerts.php:607
2670
  msgid ""
2671
  "Log all stock changes. Disable this setting to only keep a log of stock "
2672
  "changes done manually via the WooCommerce dashboard. Therefore automated "
2674
  "plugins will not be logged."
2675
  msgstr ""
2676
 
2677
+ #: classes/Views/ToggleAlerts.php:629
2678
  msgid "Configure the file integrity scan settings."
2679
  msgstr ""
2680
 
2681
+ #: classes/Views/ToggleAlerts.php:644
2682
  msgid ""
2683
  "The plugin also keeps a log of some events that website visitors (non-logged "
2684
  "in users) do because it is typically required by site admins. You can "
2685
  "disable these events from here:"
2686
  msgstr ""
2687
 
2688
+ #: classes/Views/ToggleAlerts.php:646
2689
  msgid "Enable website visitors events"
2690
  msgstr ""
2691
 
2692
+ #: classes/Views/ToggleAlerts.php:652
2693
  msgid "Enable"
2694
  msgstr ""
2695
 
2696
+ #: classes/Views/ToggleAlerts.php:657
2697
  msgid ""
2698
  "Below is the list of the events which are disabled when the above option is "
2699
  "disabled:"
2700
  msgstr ""
2701
 
2702
+ #: classes/Views/ToggleAlerts.php:672
2703
  msgid "Save Changes"
2704
  msgstr ""
2705
 
2706
+ #: classes/Views/ToggleAlerts.php:679
2707
  msgid "Log Level Updated"
2708
  msgstr ""
2709
 
2710
  #. translators: Alerts log level.
2711
+ #: classes/Views/ToggleAlerts.php:683
2712
  #, php-format
2713
  msgid "The %s log level has been successfully loaded and applied."
2714
  msgstr ""
2715
 
2716
+ #: classes/Views/ToggleAlerts.php:687
2717
  msgid "OK"
2718
  msgstr ""
2719
 
2720
+ #: classes/Views/ToggleAlerts.php:702
2721
  msgid "Enable File Integrity Scanner"
2722
  msgstr ""
2723
 
2724
+ #: classes/Views/ToggleAlerts.php:704
2725
  msgid ""
2726
  "The file integrity scanner is switched off. To enable this event it has to "
2727
  "be switched on."
2728
  msgstr ""
2729
 
2730
+ #: classes/Views/ToggleAlerts.php:708
2731
  msgid "SWITCH ON"
2732
  msgstr ""
2733
 
2734
+ #: classes/Views/ToggleAlerts.php:709
2735
  msgid "DISABLE EVENT"
2736
  msgstr ""
2737
 
2738
+ #: classes/Views/addons/html-view.php:84
2739
+ msgid "Screenshots"
2740
+ msgstr ""
2741
+
2742
+ #: classes/Views/addons/html-view.php:101
2743
+ msgid "Start Free 14-Day Premium Trial"
2744
+ msgstr ""
2745
+
2746
  #: classes/WidgetManager.php:55
2747
  msgid "Latest Events"
2748
  msgstr ""
2819
  msgid "Debug informational messages."
2820
  msgstr ""
2821
 
2822
+ #: defaults.php:149
2823
  msgid "Users Profiles & Activity"
2824
  msgstr ""
2825
 
2826
+ #: defaults.php:154
2827
  msgid "User logged in"
2828
  msgstr ""
2829
 
2830
+ #: defaults.php:154
2831
  msgid "Successfully logged in."
2832
  msgstr ""
2833
 
2834
+ #: defaults.php:155
2835
  msgid "User logged out"
2836
  msgstr ""
2837
 
2838
+ #: defaults.php:155
2839
  msgid "Successfully logged out."
2840
  msgstr ""
2841
 
2842
+ #: defaults.php:156
2843
  msgid "Login failed"
2844
  msgstr ""
2845
 
2846
+ #: defaults.php:156
2847
  msgid "%Attempts% failed login(s) detected."
2848
  msgstr ""
2849
 
2850
+ #: defaults.php:157
2851
  msgid "Login failed / non existing user"
2852
  msgstr ""
2853
 
2854
+ #: defaults.php:157
2855
  msgid ""
2856
  "%Attempts% failed login(s) detected using non existing user. %LogFileText%"
2857
  msgstr ""
2858
 
2859
+ #: defaults.php:158
2860
  msgid "Login blocked"
2861
  msgstr ""
2862
 
2863
+ #: defaults.php:158
2864
  msgid ""
2865
  "Blocked from logging in because the same WordPress user is logged in from "
2866
  "%ClientIP%."
2867
  msgstr ""
2868
 
2869
+ #: defaults.php:159
2870
  msgid "User logged in with existing session(s)"
2871
  msgstr ""
2872
 
2873
+ #: defaults.php:159
2874
  msgid ""
2875
  "Successfully logged in. Another session from %IPAddress% for this user "
2876
  "already exist."
2877
  msgstr ""
2878
 
2879
+ #: defaults.php:160
2880
  msgid "User logged out all other sessions with the same username"
2881
  msgstr ""
2882
 
2883
+ #: defaults.php:160
2884
  msgid "Logged out all other sessions with the same username."
2885
  msgstr ""
2886
 
2887
+ #: defaults.php:161
2888
  msgid "User session destroyed and logged out"
2889
  msgstr ""
2890
 
2891
+ #: defaults.php:161
2892
  msgid "Logged out session %TargetSessionID% which belonged to %TargetUserName%"
2893
  msgstr ""
2894
 
2895
+ #: defaults.php:162
2896
+ msgid "Switched to another user"
2897
+ msgstr ""
2898
+
2899
+ #: defaults.php:162
2900
+ msgid "Switched to %TargetUserName% with role %TargetUserRole%."
2901
+ msgstr ""
2902
+
2903
+ #: defaults.php:163
2904
  msgid "User uploaded file from Uploads directory"
2905
  msgstr ""
2906
 
2907
+ #: defaults.php:163
2908
  msgid "Uploaded the file %FileName% in %FilePath%."
2909
  msgstr ""
2910
 
2911
+ #: defaults.php:164
2912
  msgid "User deleted file from Uploads directory"
2913
  msgstr ""
2914
 
2915
+ #: defaults.php:164
2916
  msgid "Deleted the file %FileName% from %FilePath%."
2917
  msgstr ""
2918
 
2919
+ #: defaults.php:165
2920
  msgid "User requests non-existing pages (404 Error Pages)"
2921
  msgstr ""
2922
 
2923
+ #: defaults.php:165
2924
  msgid ""
2925
  "Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. "
2926
  "%LinkFile%%URL%"
2927
  msgstr ""
2928
 
2929
+ #: defaults.php:166
2930
  msgid "Website Visitor User requests non-existing pages (404 Error Pages)"
2931
  msgstr ""
2932
 
2933
+ #: defaults.php:166
2934
  msgid ""
2935
  "Website Visitor Has requested a non existing page (404 Error Pages) %Attempts"
2936
  "% %Msg%. %LinkFile%%URL%"
2937
  msgstr ""
2938
 
2939
+ #: defaults.php:173
2940
  msgid "New user was created on WordPress"
2941
  msgstr ""
2942
 
2943
+ #: defaults.php:173
2944
  msgid ""
2945
  "A new user %NewUserData->Username% was created with role of %NewUserData-"
2946
  ">Roles%."
2947
  msgstr ""
2948
 
2949
+ #: defaults.php:174
2950
  msgid "User created another WordPress user"
2951
  msgstr ""
2952
 
2953
+ #: defaults.php:174
2954
  msgid ""
2955
  "%UserChanger% created a new user %NewUserData->Username% with the role of "
2956
  "%NewUserData->Roles%."
2957
  msgstr ""
2958
 
2959
+ #: defaults.php:175
2960
  msgid "The role of a user was changed by another WordPress user"
2961
  msgstr ""
2962
 
2963
+ #: defaults.php:175
2964
  msgid ""
2965
  "Changed the role of the user %TargetUsername% from %OldRole% to %NewRole%"
2966
  "%multisite_text%."
2967
  msgstr ""
2968
 
2969
+ #: defaults.php:176
2970
  msgid "User has changed his or her password"
2971
  msgstr ""
2972
 
2973
+ #: defaults.php:176
2974
  msgid "Changed the password."
2975
  msgstr ""
2976
 
2977
+ #: defaults.php:177
2978
  msgid "User changed another user's password"
2979
  msgstr ""
2980
 
2981
+ #: defaults.php:177
2982
  msgid ""
2983
  "Changed the password for the user %TargetUserData->Username% with the role "
2984
  "of %TargetUserData->Roles%."
2985
  msgstr ""
2986
 
2987
+ #: defaults.php:178
2988
  msgid "User changed his or her email address"
2989
  msgstr ""
2990
 
2991
+ #: defaults.php:178
2992
  msgid "Changed the email address from %OldEmail% to %NewEmail%."
2993
  msgstr ""
2994
 
2995
+ #: defaults.php:179
2996
  msgid "User changed another user's email address"
2997
  msgstr ""
2998
 
2999
+ #: defaults.php:179
3000
  msgid ""
3001
  "Changed the email address of the user %TargetUsername% from %OldEmail% to "
3002
  "%NewEmail%."
3003
  msgstr ""
3004
 
3005
+ #: defaults.php:180
3006
  msgid "User was deleted by another user"
3007
  msgstr ""
3008
 
3009
+ #: defaults.php:180
3010
  msgid ""
3011
  "Deleted the user %TargetUserData->Username% with the role of %TargetUserData-"
3012
  ">Roles%."
3013
  msgstr ""
3014
 
3015
+ #: defaults.php:181
3016
  msgid "User opened the profile page of another user"
3017
  msgstr ""
3018
 
3019
+ #: defaults.php:181
3020
  msgid "%UserChanger% opened the profile page of the user %TargetUsername%."
3021
  msgstr ""
3022
 
3023
+ #: defaults.php:182
3024
  msgid "User updated a custom field value for a user"
3025
  msgstr ""
3026
 
3027
+ #: defaults.php:182
3028
  msgid ""
3029
  "Changed the value of the custom field %custom_field_name%%ReportText% for "
3030
  "the user %TargetUsername%.%ChangeText%"
3031
  msgstr ""
3032
 
3033
+ #: defaults.php:183
3034
  msgid "User created a custom field value for a user"
3035
  msgstr ""
3036
 
3037
+ #: defaults.php:183
3038
  msgid ""
3039
  "Created the value of the custom field %custom_field_name% with %new_value% "
3040
  "for the user %TargetUsername%."
3041
  msgstr ""
3042
 
3043
+ #: defaults.php:184
3044
  msgid "User changed first name for a user"
3045
  msgstr ""
3046
 
3047
+ #: defaults.php:184
3048
  msgid ""
3049
  "Changed the first name of the user %TargetUsername% from %old_firstname% to "
3050
  "%new_firstname%"
3051
  msgstr ""
3052
 
3053
+ #: defaults.php:185
3054
  msgid "User changed last name for a user"
3055
  msgstr ""
3056
 
3057
+ #: defaults.php:185
3058
  msgid ""
3059
  "Changed the last name of the user %TargetUsername% from %old_lastname% to "
3060
  "%new_lastname%"
3061
  msgstr ""
3062
 
3063
+ #: defaults.php:186
3064
  msgid "User changed nickname for a user"
3065
  msgstr ""
3066
 
3067
+ #: defaults.php:186
3068
  msgid ""
3069
  "Changed the nickname of the user %TargetUsername% from %old_nickname% to "
3070
  "%new_nickname%"
3071
  msgstr ""
3072
 
3073
+ #: defaults.php:187
3074
  msgid "User changed the display name for a user"
3075
  msgstr ""
3076
 
3077
+ #: defaults.php:187
3078
  msgid ""
3079
  "Changed the Display name publicly of user %TargetUsername% from "
3080
  "%old_displayname% to %new_displayname%"
3081
  msgstr ""
3082
 
3083
+ #: defaults.php:194
3084
  msgid "Content & Comments"
3085
  msgstr ""
3086
 
3087
+ #: defaults.php:199
3088
  msgid "User created a new post and saved it as draft"
3089
  msgstr ""
3090
 
3091
+ #: defaults.php:199
3092
  msgid ""
3093
  "Created a new %PostType% titled %PostTitle% and saved it as draft. "
3094
  "%EditorLinkPost%."
3095
  msgstr ""
3096
 
3097
+ #: defaults.php:200
3098
  msgid "User published a post"
3099
  msgstr ""
3100
 
3101
+ #: defaults.php:200
3102
  msgid ""
3103
  "Published a %PostType% titled %PostTitle%. URL is %PostUrl%. %EditorLinkPost"
3104
  "%."
3105
  msgstr ""
3106
 
3107
+ #: defaults.php:201
3108
  msgid "User modified a post"
3109
  msgstr ""
3110
 
3111
+ #: defaults.php:201
3112
  msgid ""
3113
  "Modified the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3114
  "%EditorLinkPost%."
3115
  msgstr ""
3116
 
3117
+ #: defaults.php:202
3118
  msgid "User permanently deleted a post from the trash"
3119
  msgstr ""
3120
 
3121
+ #: defaults.php:202
3122
  msgid ""
3123
  "Permanently deleted the %PostType% titled %PostTitle%. URL was %PostUrl%."
3124
  msgstr ""
3125
 
3126
+ #: defaults.php:203
3127
  msgid "User moved a post to the trash"
3128
  msgstr ""
3129
 
3130
+ #: defaults.php:203
3131
  msgid ""
3132
  "Moved the %PostStatus% %PostType% titled %PostTitle% to trash. URL is "
3133
  "%PostUrl%."
3134
  msgstr ""
3135
 
3136
+ #: defaults.php:204
3137
  msgid "User restored a post from trash"
3138
  msgstr ""
3139
 
3140
+ #: defaults.php:204
3141
  msgid ""
3142
  "The %PostStatus% %PostType% titled %PostTitle% has been restored from trash. "
3143
  "URL is: %PostUrl%. %EditorLinkPost%."
3144
  msgstr ""
3145
 
3146
+ #: defaults.php:205
3147
  msgid "User changed post URL"
3148
  msgstr ""
3149
 
3150
+ #: defaults.php:205
3151
  msgid ""
3152
  "Changed the URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText"
3153
  "%.%ChangeText% %EditorLinkPost%."
3154
  msgstr ""
3155
 
3156
+ #: defaults.php:206
3157
  msgid "User changed post author"
3158
  msgstr ""
3159
 
3160
+ #: defaults.php:206
3161
  msgid ""
3162
  "Changed the author of the %PostStatus% %PostType% titled %PostTitle% from "
3163
  "%OldAuthor% to %NewAuthor%. URL is: %PostUrl%. %EditorLinkPost%."
3164
  msgstr ""
3165
 
3166
+ #: defaults.php:207
3167
  msgid "User changed post status"
3168
  msgstr ""
3169
 
3170
+ #: defaults.php:207
3171
  msgid ""
3172
  "Changed the status of the %PostType% titled %PostTitle% from %OldStatus% to "
3173
  "%NewStatus%. URL is: %PostUrl%. %EditorLinkPost%."
3174
  msgstr ""
3175
 
3176
+ #: defaults.php:208
3177
  msgid "User changed the visibility of a post"
3178
  msgstr ""
3179
 
3180
+ #: defaults.php:208
3181
  msgid ""
3182
  "Changed the visibility of the %PostStatus% %PostType% titled %PostTitle% "
3183
  "from %OldVisibility% to %NewVisibility%. URL is: %PostUrl%. %EditorLinkPost%."
3184
  msgstr ""
3185
 
3186
+ #: defaults.php:209
3187
  msgid "User changed the date of a post"
3188
  msgstr ""
3189
 
3190
+ #: defaults.php:209
3191
  msgid ""
3192
  "Changed the date of the %PostStatus% %PostType% titled %PostTitle% from "
3193
  "%OldDate% to %NewDate%. URL is: %PostUrl%. %EditorLinkPost%."
3194
  msgstr ""
3195
 
3196
+ #: defaults.php:210
3197
  msgid "User changed the parent of a page"
3198
  msgstr ""
3199
 
3200
+ #: defaults.php:210
3201
  msgid ""
3202
  "Changed the parent of the %PostStatus% %PostType% titled %PostTitle% from "
3203
  "%OldParentName% to %NewParentName%. %EditorLinkPost%."
3204
  msgstr ""
3205
 
3206
+ #: defaults.php:211
3207
  msgid "User changed the template of a page"
3208
  msgstr ""
3209
 
3210
+ #: defaults.php:211
3211
  msgid ""
3212
  "Changed the template of the %PostStatus% %PostType% titled %PostTitle% from "
3213
  "%OldTemplate% to %NewTemplate%. %EditorLinkPost%."
3214
  msgstr ""
3215
 
3216
+ #: defaults.php:212
3217
  msgid "User set a post as sticky"
3218
  msgstr ""
3219
 
3220
+ #: defaults.php:212
3221
  msgid ""
3222
  "Set the post %PostTitle% as Sticky. Post URL is %PostUrl%. %EditorLinkPost%."
3223
  msgstr ""
3224
 
3225
+ #: defaults.php:213
3226
  msgid "User removed post from sticky"
3227
  msgstr ""
3228
 
3229
+ #: defaults.php:213
3230
  msgid "Removed the post %PostTitle% from Sticky. %EditorLinkPost%."
3231
  msgstr ""
3232
 
3233
+ #: defaults.php:214
3234
  msgid "User modified the content of a post"
3235
  msgstr ""
3236
 
3237
+ #: defaults.php:214
3238
  msgid ""
3239
  "Modified the content of the %PostStatus% %PostType% titled %PostTitle%. Post "
3240
  "URL is %PostUrl%. %RevisionLink% %EditorLinkPost%."
3241
  msgstr ""
3242
 
3243
+ #: defaults.php:215
3244
  msgid "User submitted a post for review"
3245
  msgstr ""
3246
 
3247
+ #: defaults.php:215
3248
  msgid ""
3249
  "Submitted the %PostType% titled %PostTitle% for review. URL is: %PostUrl%. "
3250
  "%EditorLinkPost%."
3251
  msgstr ""
3252
 
3253
+ #: defaults.php:216
3254
  msgid "User scheduled a post"
3255
  msgstr ""
3256
 
3257
+ #: defaults.php:216
3258
  msgid ""
3259
  "Scheduled the %PostType% titled %PostTitle% to be published on "
3260
  "%PublishingDate%. URL is: %PostUrl%. %EditorLinkPost%."
3261
  msgstr ""
3262
 
3263
+ #: defaults.php:217
3264
  msgid "User changed title of a post"
3265
  msgstr ""
3266
 
3267
+ #: defaults.php:217
3268
  msgid ""
3269
  "Changed the title of the %PostStatus% %PostType% from %OldTitle% to %NewTitle"
3270
  "%. URL is: %PostUrl%. %EditorLinkPost%."
3271
  msgstr ""
3272
 
3273
+ #: defaults.php:218
3274
  msgid "User opened a post in the editor"
3275
  msgstr ""
3276
 
3277
+ #: defaults.php:218
3278
  msgid ""
3279
  "Opened the %PostStatus% %PostType% titled %PostTitle% in the editor. URL is: "
3280
  "%PostUrl%. %EditorLinkPost%."
3281
  msgstr ""
3282
 
3283
+ #: defaults.php:219
3284
  msgid "User viewed a post"
3285
  msgstr ""
3286
 
3287
+ #: defaults.php:219
3288
  msgid ""
3289
  "Viewed the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3290
  "%EditorLinkPost%."
3291
  msgstr ""
3292
 
3293
+ #: defaults.php:220
3294
  msgid "A plugin modified a post"
3295
  msgstr ""
3296
 
3297
+ #: defaults.php:220
3298
  msgid ""
3299
  "Plugin modified the %PostStatus% %PostType% titled %PostTitle% of type "
3300
  "%PostType%. URL is: %PostUrl%. %EditorLinkPost%."
3301
  msgstr ""
3302
 
3303
+ #: defaults.php:221
3304
  msgid "User disabled Comments/Trackbacks and Pingbacks in a post"
3305
  msgstr ""
3306
 
3307
+ #: defaults.php:221
3308
  msgid ""
3309
  "Disabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
3310
  "%PostUrl%. %EditorLinkPost%."
3311
  msgstr ""
3312
 
3313
+ #: defaults.php:222
3314
  msgid "User enabled Comments/Trackbacks and Pingbacks in a post"
3315
  msgstr ""
3316
 
3317
+ #: defaults.php:222
3318
  msgid ""
3319
  "Enabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
3320
  "%PostUrl%. %EditorLinkPost%."
3321
  msgstr ""
3322
 
3323
+ #: defaults.php:223
3324
  msgid "User added post tag"
3325
  msgstr ""
3326
 
3327
+ #: defaults.php:223
3328
  msgid ""
3329
  "Added the tag %tag% to the %PostStatus% post titled %PostTitle%. URL is: "
3330
  "%PostUrl%. %EditorLinkPost%."
3331
  msgstr ""
3332
 
3333
+ #: defaults.php:224
3334
  msgid "User removed post tag"
3335
  msgstr ""
3336
 
3337
+ #: defaults.php:224
3338
  msgid ""
3339
  "Removed the tag %tag% from the %PostStatus% post titled %PostTitle%. URL is: "
3340
  "%PostUrl%. %EditorLinkPost%."
3341
  msgstr ""
3342
 
3343
+ #: defaults.php:225
3344
  msgid "User created new tag"
3345
  msgstr ""
3346
 
3347
+ #: defaults.php:225
3348
  msgid "Added a new tag called %TagName%. View the tag: %TagLink%."
3349
  msgstr ""
3350
 
3351
+ #: defaults.php:226
3352
  msgid "User deleted tag"
3353
  msgstr ""
3354
 
3355
+ #: defaults.php:226
3356
  msgid "Deleted the tag %TagName%."
3357
  msgstr ""
3358
 
3359
+ #: defaults.php:227
3360
  msgid "User renamed tag"
3361
  msgstr ""
3362
 
3363
+ #: defaults.php:227
3364
  msgid "Renamed a tag from %old_name% to %new_name%. View the tag: %TagLink%."
3365
  msgstr ""
3366
 
3367
+ #: defaults.php:228
3368
  msgid "User changed tag slug"
3369
  msgstr ""
3370
 
3371
+ #: defaults.php:228
3372
  msgid ""
3373
  "Changed the slug of tag %tag% from %old_slug% to %new_slug%. View the tag: "
3374
  "%TagLink%."
3375
  msgstr ""
3376
 
3377
+ #: defaults.php:229
3378
  msgid "User changed tag description"
3379
  msgstr ""
3380
 
3381
+ #: defaults.php:229
3382
  msgid ""
3383
  "Changed the description of the tag %tag%%ReportText%.%ChangeText% View the "
3384
  "tag: %TagLink%."
3385
  msgstr ""
3386
 
3387
+ #: defaults.php:230
3388
  msgid "User changed post category"
3389
  msgstr ""
3390
 
3391
+ #: defaults.php:230
3392
  msgid ""
3393
  "Changed the category of the %PostStatus% %PostType% titled %PostTitle% from "
3394
  "%OldCategories% to %NewCategories%. URL is: %PostUrl%. %EditorLinkPost%."
3395
  msgstr ""
3396
 
3397
+ #: defaults.php:231
3398
  msgid "User created new category"
3399
  msgstr ""
3400
 
3401
+ #: defaults.php:231
3402
  msgid ""
3403
  "Created a new category called %CategoryName%. Category slug is %Slug%. "
3404
  "%CategoryLink%."
3405
  msgstr ""
3406
 
3407
+ #: defaults.php:232
3408
  msgid "User deleted category"
3409
  msgstr ""
3410
 
3411
+ #: defaults.php:232
3412
  msgid ""
3413
  "Deleted the %CategoryName% category. Category slug was %Slug%. %CategoryLink"
3414
  "%."
3415
  msgstr ""
3416
 
3417
+ #: defaults.php:233
3418
  msgid "Changed the parent of a category"
3419
  msgstr ""
3420
 
3421
+ #: defaults.php:233
3422
  msgid ""
3423
  "Changed the parent of the category %CategoryName% from %OldParent% to "
3424
  "%NewParent%. %CategoryLink%."
3425
  msgstr ""
3426
 
3427
+ #: defaults.php:234
3428
  msgid "User changed category name"
3429
  msgstr ""
3430
 
3431
+ #: defaults.php:234
3432
  msgid "Changed the name of the category %old_name% to %new_name%."
3433
  msgstr ""
3434
 
3435
+ #: defaults.php:235
3436
  msgid "User changed category slug"
3437
  msgstr ""
3438
 
3439
+ #: defaults.php:235
3440
  msgid ""
3441
  "Changed the slug of the category %CategoryName% from %old_slug% to %new_slug"
3442
  "%."
3443
  msgstr ""
3444
 
3445
+ #: defaults.php:236
3446
  msgid "User created a custom field for a post"
3447
  msgstr ""
3448
 
3449
+ #: defaults.php:236
3450
  msgid ""
3451
  "Created a new custom field called %MetaKey% with value %MetaValue% in the "
3452
  "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3453
  "%EditorLinkPost%.<br>%MetaLink%."
3454
  msgstr ""
3455
 
3456
+ #: defaults.php:237
3457
  msgid "User updated a custom field value for a post"
3458
  msgstr ""
3459
 
3460
+ #: defaults.php:237
3461
  msgid ""
3462
  "Modified the value of the custom field %MetaKey%%ReportText% in the "
3463
  "%PostStatus% %PostType% titled %PostTitle%.%ChangeText% URL is: %PostUrl%. "
3464
  "%EditorLinkPost%.<br>%MetaLink%."
3465
  msgstr ""
3466
 
3467
+ #: defaults.php:238
3468
  msgid "User deleted a custom field from a post"
3469
  msgstr ""
3470
 
3471
+ #: defaults.php:238
3472
  msgid ""
3473
  "Deleted the custom field %MetaKey% with value %MetaValue% from %PostStatus% "
3474
  "%PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%."
3475
  msgstr ""
3476
 
3477
+ #: defaults.php:239
3478
  msgid "User updated a custom field name for a post"
3479
  msgstr ""
3480
 
3481
+ #: defaults.php:239
3482
  msgid ""
3483
  "Changed the custom field's name from %MetaKeyOld% to %MetaKeyNew% in the "
3484
  "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3485
  "%EditorLinkPost%.<br>%MetaLink%."
3486
  msgstr ""
3487
 
3488
+ #: defaults.php:245
3489
  msgid "Comments"
3490
  msgstr ""
3491
 
3492
+ #: defaults.php:246
3493
  msgid "User approved a comment"
3494
  msgstr ""
3495
 
3496
+ #: defaults.php:246
3497
  msgid ""
3498
  "Approved the comment posted in response to the post %PostTitle% by %Author% "
3499
  "on %CommentLink%."
3500
  msgstr ""
3501
 
3502
+ #: defaults.php:247
3503
  msgid "User unapproved a comment"
3504
  msgstr ""
3505
 
3506
+ #: defaults.php:247
3507
  msgid ""
3508
  "Unapproved the comment posted in response to the post %PostTitle% by %Author"
3509
  "% on %CommentLink%."
3510
  msgstr ""
3511
 
3512
+ #: defaults.php:248
3513
  msgid "User replied to a comment"
3514
  msgstr ""
3515
 
3516
+ #: defaults.php:248
3517
  msgid ""
3518
  "Replied to the comment posted in response to the post %PostTitle% by %Author"
3519
  "% on %CommentLink%."
3520
  msgstr ""
3521
 
3522
+ #: defaults.php:249
3523
  msgid "User edited a comment"
3524
  msgstr ""
3525
 
3526
+ #: defaults.php:249
3527
  msgid ""
3528
  "Edited a comment posted in response to the post %PostTitle% by %Author% on "
3529
  "%CommentLink%."
3530
  msgstr ""
3531
 
3532
+ #: defaults.php:250
3533
  msgid "User marked a comment as Spam"
3534
  msgstr ""
3535
 
3536
+ #: defaults.php:250
3537
  msgid ""
3538
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
3539
  "%CommentLink% as Spam."
3540
  msgstr ""
3541
 
3542
+ #: defaults.php:251
3543
  msgid "User marked a comment as Not Spam"
3544
  msgstr ""
3545
 
3546
+ #: defaults.php:251
3547
  msgid ""
3548
  "Marked the comment posted in response to the post %PostTitle% by %Author% on "
3549
  "%CommentLink% as Not Spam."
3550
  msgstr ""
3551
 
3552
+ #: defaults.php:252
3553
  msgid "User moved a comment to trash"
3554
  msgstr ""
3555
 
3556
+ #: defaults.php:252
3557
  msgid ""
3558
  "Moved the comment posted in response to the post %PostTitle% by %Author% on "
3559
  "%Date% to trash."
3560
  msgstr ""
3561
 
3562
+ #: defaults.php:253
3563
  msgid "User restored a comment from the trash"
3564
  msgstr ""
3565
 
3566
+ #: defaults.php:253
3567
  msgid ""
3568
  "Restored the comment posted in response to the post %PostTitle% by %Author% "
3569
  "on %CommentLink% from the trash."
3570
  msgstr ""
3571
 
3572
+ #: defaults.php:254
3573
  msgid "User permanently deleted a comment"
3574
  msgstr ""
3575
 
3576
+ #: defaults.php:254
3577
  msgid ""
3578
  "Permanently deleted the comment posted in response to the post %PostTitle% "
3579
  "by %Author% on %Date%."
3580
  msgstr ""
3581
 
3582
+ #: defaults.php:255
3583
  msgid "User posted a comment"
3584
  msgstr ""
3585
 
3586
+ #: defaults.php:255 defaults.php:256
3587
  msgid "%CommentMsg% on %CommentLink%."
3588
  msgstr ""
3589
 
3590
+ #: defaults.php:256
3591
  msgid "Visitor posted a comment"
3592
  msgstr ""
3593
 
3594
+ #: defaults.php:268
3595
  msgid "User modified a draft blog post"
3596
  msgstr ""
3597
 
3598
+ #: defaults.php:268
3599
  msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
3600
  msgstr ""
3601
 
3602
+ #: defaults.php:269
3603
  msgid "User created a new post with custom post type and saved it as draft"
3604
  msgstr ""
3605
 
3606
+ #: defaults.php:269
3607
  msgid ""
3608
  "Created a new custom post called %PostTitle% of type %PostType%. "
3609
  "%EditorLinkPost%."
3610
  msgstr ""
3611
 
3612
+ #: defaults.php:270
3613
  msgid "User published a post with custom post type"
3614
  msgstr ""
3615
 
3616
+ #: defaults.php:270
3617
  msgid ""
3618
  "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
3619
  "%. %EditorLinkPost%."
3620
  msgstr ""
3621
 
3622
+ #: defaults.php:271
3623
  msgid "User modified a post with custom post type"
3624
  msgstr ""
3625
 
3626
+ #: defaults.php:271
3627
  msgid ""
3628
  "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
3629
  "%. %EditorLinkPost%."
3630
  msgstr ""
3631
 
3632
+ #: defaults.php:272
3633
  msgid "User modified a draft post with custom post type"
3634
  msgstr ""
3635
 
3636
+ #: defaults.php:272
3637
  msgid ""
3638
  "Modified the draft custom post %PostTitle% of type is %PostType%. "
3639
  "%EditorLinkPost%."
3640
  msgstr ""
3641
 
3642
+ #: defaults.php:273
3643
  msgid "User permanently deleted post with custom post type"
3644
  msgstr ""
3645
 
3646
+ #: defaults.php:273
3647
  msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
3648
  msgstr ""
3649
 
3650
+ #: defaults.php:274
3651
  msgid "User moved post with custom post type to trash"
3652
  msgstr ""
3653
 
3654
+ #: defaults.php:274
3655
  msgid ""
3656
  "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was "
3657
  "%PostUrl%."
3658
  msgstr ""
3659
 
3660
+ #: defaults.php:275
3661
  msgid "User restored post with custom post type from trash"
3662
  msgstr ""
3663
 
3664
+ #: defaults.php:275
3665
  msgid ""
3666
  "The custom post %PostTitle% of type %PostType% has been restored from trash. "
3667
  "%EditorLinkPost%."
3668
  msgstr ""
3669
 
3670
+ #: defaults.php:276
3671
  msgid "User changed the category of a post with custom post type"
3672
  msgstr ""
3673
 
3674
+ #: defaults.php:276
3675
  msgid ""
3676
  "Changed the category(ies) of the custom post %PostTitle% of type %PostType% "
3677
  "from %OldCategories% to %NewCategories%. %EditorLinkPost%."
3678
  msgstr ""
3679
 
3680
+ #: defaults.php:277
3681
  msgid "User changed the URL of a post with custom post type"
3682
  msgstr ""
3683
 
3684
+ #: defaults.php:277
3685
  msgid ""
3686
  "Changed the URL of the custom post %PostTitle% of type %PostType% from "
3687
  "%OldUrl% to %NewUrl%. %EditorLinkPost%."
3688
  msgstr ""
3689
 
3690
+ #: defaults.php:278
3691
  msgid "User changed the author or post with custom post type"
3692
  msgstr ""
3693
 
3694
+ #: defaults.php:278
3695
  msgid ""
3696
  "Changed the author of custom post %PostTitle% of type %PostType% from "
3697
  "%OldAuthor% to %NewAuthor%. %EditorLinkPost%."
3698
  msgstr ""
3699
 
3700
+ #: defaults.php:279
3701
  msgid "User changed the status of post with custom post type"
3702
  msgstr ""
3703
 
3704
+ #: defaults.php:279
3705
  msgid ""
3706
  "Changed the status of custom post %PostTitle% of type %PostType% from "
3707
  "%OldStatus% to %NewStatus%. %EditorLinkPost%."
3708
  msgstr ""
3709
 
3710
+ #: defaults.php:280
3711
  msgid "User changed the visibility of a post with custom post type"
3712
  msgstr ""
3713
 
3714
+ #: defaults.php:280
3715
  msgid ""
3716
  "Changed the visibility of the custom post %PostTitle% of type %PostType% "
3717
  "from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
3718
  msgstr ""
3719
 
3720
+ #: defaults.php:281
3721
  msgid "User changed the date of post with custom post type"
3722
  msgstr ""
3723
 
3724
+ #: defaults.php:281
3725
  msgid ""
3726
  "Changed the date of the custom post %PostTitle% of type %PostType% from "
3727
  "%OldDate% to %NewDate%. %EditorLinkPost%."
3728
  msgstr ""
3729
 
3730
+ #: defaults.php:282
3731
  msgid "User created a custom field for a custom post type"
3732
  msgstr ""
3733
 
3734
+ #: defaults.php:282
3735
  msgid ""
3736
  "Created a new custom field %MetaKey% with value %MetaValue% in custom post "
3737
  "%PostTitle% of type %PostType%. %EditorLinkPost%.<br>%MetaLink%."
3738
  msgstr ""
3739
 
3740
+ #: defaults.php:283
3741
  msgid "User updated a custom field for a custom post type"
3742
  msgstr ""
3743
 
3744
+ #: defaults.php:283
3745
  msgid ""
3746
  "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
3747
  "%MetaValueNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost"
3748
  "%.<br>%MetaLink%."
3749
  msgstr ""
3750
 
3751
+ #: defaults.php:284
3752
  msgid "User deleted a custom field from a custom post type"
3753
  msgstr ""
3754
 
3755
+ #: defaults.php:284
3756
  msgid ""
3757
  "Deleted the custom field %MetaKey% with id %MetaID% from custom post "
3758
  "%PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
3759
  msgstr ""
3760
 
3761
+ #: defaults.php:285
3762
  msgid "User updated a custom field name for a custom post type"
3763
  msgstr ""
3764
 
3765
+ #: defaults.php:285
3766
  msgid ""
3767
  "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom "
3768
  "post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
3769
  msgstr ""
3770
 
3771
+ #: defaults.php:286
3772
  msgid "User modified content for a published custom post type"
3773
  msgstr ""
3774
 
3775
+ #: defaults.php:286
3776
  msgid ""
3777
  "Modified the content of the published custom post type %PostTitle%. Post URL "
3778
  "is %PostUrl%.%EditorLinkPost%."
3779
  msgstr ""
3780
 
3781
+ #: defaults.php:287
3782
  msgid "User modified content for a draft post"
3783
  msgstr ""
3784
 
3785
+ #: defaults.php:287
3786
  msgid ""
3787
  "Modified the content of the draft post %PostTitle%.%RevisionLink% "
3788
  "%EditorLinkPost%."
3789
  msgstr ""
3790
 
3791
+ #: defaults.php:288
3792
  msgid "User modified content for a draft custom post type"
3793
  msgstr ""
3794
 
3795
+ #: defaults.php:288
3796
  msgid ""
3797
  "Modified the content of the draft custom post type %PostTitle%."
3798
  "%EditorLinkPost%."
3799
  msgstr ""
3800
 
3801
+ #: defaults.php:289
3802
  msgid "User modified content of a post"
3803
  msgstr ""
3804
 
3805
+ #: defaults.php:289
3806
  msgid ""
3807
  "Modified the content of post %PostTitle% which is submitted for review."
3808
  "%RevisionLink% %EditorLinkPost%."
3809
  msgstr ""
3810
 
3811
+ #: defaults.php:290
3812
  msgid "User scheduled a custom post type"
3813
  msgstr ""
3814
 
3815
+ #: defaults.php:290
3816
  msgid ""
3817
  "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. "
3818
  "%EditorLinkPost%."
3819
  msgstr ""
3820
 
3821
+ #: defaults.php:291
3822
  msgid "User changed title of a custom post type"
3823
  msgstr ""
3824
 
3825
+ #: defaults.php:291
3826
  msgid ""
3827
  "Changed the title of the custom post %OldTitle% to %NewTitle%. "
3828
  "%EditorLinkPost%."
3829
  msgstr ""
3830
 
3831
+ #: defaults.php:292
3832
  msgid "User opened a custom post type in the editor"
3833
  msgstr ""
3834
 
3835
+ #: defaults.php:292
3836
  msgid ""
3837
  "Opened the custom post %PostTitle% of type %PostType% in the editor. View "
3838
  "the post: %EditorLinkPost%."
3839
  msgstr ""
3840
 
3841
+ #: defaults.php:293
3842
  msgid "User viewed a custom post type"
3843
  msgstr ""
3844
 
3845
+ #: defaults.php:293
3846
  msgid ""
3847
  "Viewed the custom post %PostTitle% of type %PostType%. View the post: "
3848
  "%PostUrl%."
3849
  msgstr ""
3850
 
3851
+ #: defaults.php:294
3852
  msgid "A plugin created a custom post"
3853
  msgstr ""
3854
 
3855
+ #: defaults.php:294
3856
  msgid "A plugin automatically created the following custom post: %PostTitle%."
3857
  msgstr ""
3858
 
3859
+ #: defaults.php:295
3860
  msgid "A plugin deleted a custom post"
3861
  msgstr ""
3862
 
3863
+ #: defaults.php:295
3864
  msgid "A plugin automatically deleted the following custom post: %PostTitle%."
3865
  msgstr ""
3866
 
3867
+ #: defaults.php:296
3868
  msgid "A plugin modified a custom post"
3869
  msgstr ""
3870
 
3871
+ #: defaults.php:296
3872
  msgid ""
3873
  "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
3874
  msgstr ""
3875
 
3876
+ #: defaults.php:308
3877
  msgid "User created a new WordPress page and saved it as draft"
3878
  msgstr ""
3879
 
3880
+ #: defaults.php:308
3881
  msgid ""
3882
  "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage"
3883
  "%."
3884
  msgstr ""
3885
 
3886
+ #: defaults.php:309
3887
  msgid "User published a WordPress page"
3888
  msgstr ""
3889
 
3890
+ #: defaults.php:309
3891
  msgid ""
3892
  "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
3893
  msgstr ""
3894
 
3895
+ #: defaults.php:310
3896
  msgid "User modified a published WordPress page"
3897
  msgstr ""
3898
 
3899
+ #: defaults.php:310
3900
  msgid ""
3901
  "Modified the published page %PostTitle%. Page URL is %PostUrl%. "
3902
  "%EditorLinkPage%."
3903
  msgstr ""
3904
 
3905
+ #: defaults.php:311
3906
  msgid "User modified a draft WordPress page"
3907
  msgstr ""
3908
 
3909
+ #: defaults.php:311
3910
  msgid ""
3911
  "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
3912
  msgstr ""
3913
 
3914
+ #: defaults.php:312
3915
  msgid "User permanently deleted a page from the trash"
3916
  msgstr ""
3917
 
3918
+ #: defaults.php:312
3919
  msgid "Permanently deleted the page %PostTitle%."
3920
  msgstr ""
3921
 
3922
+ #: defaults.php:313
3923
  msgid "User moved WordPress page to the trash"
3924
  msgstr ""
3925
 
3926
+ #: defaults.php:313
3927
  msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
3928
  msgstr ""
3929
 
3930
+ #: defaults.php:314
3931
  msgid "User restored a WordPress page from trash"
3932
  msgstr ""
3933
 
3934
+ #: defaults.php:314
3935
  msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
3936
  msgstr ""
3937
 
3938
+ #: defaults.php:315
3939
  msgid "User changed page URL"
3940
  msgstr ""
3941
 
3942
+ #: defaults.php:315
3943
  msgid ""
3944
  "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. "
3945
  "%EditorLinkPage%."
3946
  msgstr ""
3947
 
3948
+ #: defaults.php:316
3949
  msgid "User changed page author"
3950
  msgstr ""
3951
 
3952
+ #: defaults.php:316
3953
  msgid ""
3954
  "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. "
3955
  "%EditorLinkPage%."
3956
  msgstr ""
3957
 
3958
+ #: defaults.php:317
3959
  msgid "User changed page status"
3960
  msgstr ""
3961
 
3962
+ #: defaults.php:317
3963
  msgid ""
3964
  "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. "
3965
  "%EditorLinkPage%."
3966
  msgstr ""
3967
 
3968
+ #: defaults.php:318
3969
  msgid "User changed the visibility of a page post"
3970
  msgstr ""
3971
 
3972
+ #: defaults.php:318
3973
  msgid ""
3974
  "Changed the visibility of the page %PostTitle% from %OldVisibility% to "
3975
  "%NewVisibility%. %EditorLinkPage%."
3976
  msgstr ""
3977
 
3978
+ #: defaults.php:319
3979
  msgid "User changed the date of a page post"
3980
  msgstr ""
3981
 
3982
+ #: defaults.php:319
3983
  msgid ""
3984
  "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. "
3985
  "%EditorLinkPage%."
3986
  msgstr ""
3987
 
3988
+ #: defaults.php:320
3989
  msgid "User created a custom field for a page"
3990
  msgstr ""
3991
 
3992
+ #: defaults.php:320
3993
  msgid ""
3994
  "Created a new custom field called %MetaKey% with value %MetaValue% in the "
3995
  "page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3996
  msgstr ""
3997
 
3998
+ #: defaults.php:321
3999
  msgid "User updated a custom field value for a page"
4000
  msgstr ""
4001
 
4002
+ #: defaults.php:321
4003
  msgid ""
4004
  "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
4005
  "%MetaValueNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
4006
  msgstr ""
4007
 
4008
+ #: defaults.php:322
4009
  msgid "User deleted a custom field from a page"
4010
  msgstr ""
4011
 
4012
+ #: defaults.php:322
4013
  msgid ""
4014
  "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% "
4015
  "%EditorLinkPage%.<br>%MetaLink%."
4016
  msgstr ""
4017
 
4018
+ #: defaults.php:323
4019
  msgid "User updated a custom field name for a page"
4020
  msgstr ""
4021
 
4022
+ #: defaults.php:323
4023
  msgid ""
4024
  "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page "
4025
  "%PostTitle% %EditorLinkPage%.<br>%MetaLink%."
4026
  msgstr ""
4027
 
4028
+ #: defaults.php:324
4029
  msgid "User modified content for a published page"
4030
  msgstr ""
4031
 
4032
+ #: defaults.php:324
4033
  msgid ""
4034
  "Modified the content of the published page %PostTitle%. Page URL is %PostUrl"
4035
  "%. %RevisionLink% %EditorLinkPage%."
4036
  msgstr ""
4037
 
4038
+ #: defaults.php:325
4039
  msgid "User modified content for a draft page"
4040
  msgstr ""
4041
 
4042
+ #: defaults.php:325
4043
  msgid ""
4044
  "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage"
4045
  "%."
4046
  msgstr ""
4047
 
4048
+ #: defaults.php:326
4049
  msgid "User scheduled a page"
4050
  msgstr ""
4051
 
4052
+ #: defaults.php:326
4053
  msgid ""
4054
  "Scheduled the page %PostTitle% to be published %PublishingDate%. "
4055
  "%EditorLinkPage%."
4056
  msgstr ""
4057
 
4058
+ #: defaults.php:327
4059
  msgid "User changed title of a page"
4060
  msgstr ""
4061
 
4062
+ #: defaults.php:327
4063
  msgid ""
4064
  "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
4065
  msgstr ""
4066
 
4067
+ #: defaults.php:328
4068
  msgid "User opened a page in the editor"
4069
  msgstr ""
4070
 
4071
+ #: defaults.php:328
4072
  msgid ""
4073
  "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
4074
  msgstr ""
4075
 
4076
+ #: defaults.php:329
4077
  msgid "User viewed a page"
4078
  msgstr ""
4079
 
4080
+ #: defaults.php:329
4081
  msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
4082
  msgstr ""
4083
 
4084
+ #: defaults.php:330
4085
  msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
4086
  msgstr ""
4087
 
4088
+ #: defaults.php:330
4089
  msgid ""
4090
  "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
4091
  msgstr ""
4092
 
4093
+ #: defaults.php:331
4094
  msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
4095
  msgstr ""
4096
 
4097
+ #: defaults.php:331
4098
  msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
4099
  msgstr ""
4100
 
4101
+ #: defaults.php:332
4102
  msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
4103
  msgstr ""
4104
 
4105
+ #: defaults.php:332
4106
  msgid ""
4107
  "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
4108
  msgstr ""
4109
 
4110
+ #: defaults.php:333
4111
  msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
4112
  msgstr ""
4113
 
4114
+ #: defaults.php:333
4115
  msgid ""
4116
  "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
4117
  msgstr ""
4118
 
4119
+ #: defaults.php:334
4120
  msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
4121
  msgstr ""
4122
 
4123
+ #: defaults.php:334
4124
  msgid ""
4125
  "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
4126
  msgstr ""
4127
 
4128
+ #: defaults.php:335
4129
  msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
4130
  msgstr ""
4131
 
4132
+ #: defaults.php:335
4133
  msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
4134
  msgstr ""
4135
 
4136
+ #: defaults.php:336
4137
  msgid "A plugin created a page"
4138
  msgstr ""
4139
 
4140
+ #: defaults.php:336
4141
  msgid "A plugin automatically created the following page: %PostTitle%."
4142
  msgstr ""
4143
 
4144
+ #: defaults.php:337
4145
  msgid "A plugin deleted a page"
4146
  msgstr ""
4147
 
4148
+ #: defaults.php:337
4149
  msgid "A plugin automatically deleted the following page: %PostTitle%."
4150
  msgstr ""
4151
 
4152
+ #: defaults.php:338
4153
  msgid "A plugin modified a page"
4154
  msgstr ""
4155
 
4156
+ #: defaults.php:338
4157
  msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
4158
  msgstr ""
4159
 
4160
+ #: defaults.php:345
4161
  msgid "WordPress Install"
4162
  msgstr ""
4163
 
4164
+ #: defaults.php:349
4165
  msgid "Database"
4166
  msgstr ""
4167
 
4168
+ #: defaults.php:350
4169
  msgid "Unknown component created tables"
4170
  msgstr ""
4171
 
4172
+ #: defaults.php:350
4173
  msgid ""
4174
  "An unknown component created these tables in the database: %TableNames%."
4175
  msgstr ""
4176
 
4177
+ #: defaults.php:351
4178
  msgid "Unknown component modified tables structure"
4179
  msgstr ""
4180
 
4181
+ #: defaults.php:351
4182
  msgid ""
4183
  "An unknown component modified the structure of these database tables: "
4184
  "%TableNames%."
4185
  msgstr ""
4186
 
4187
+ #: defaults.php:352
4188
  msgid "Unknown component deleted tables"
4189
  msgstr ""
4190
 
4191
+ #: defaults.php:352
4192
  msgid ""
4193
  "An unknown component deleted the following tables from the database: "
4194
  "%TableNames%."
4195
  msgstr ""
4196
 
4197
+ #: defaults.php:359
4198
  msgid "User installed a plugin"
4199
  msgstr ""
4200
 
4201
+ #: defaults.php:359
4202
  msgid "Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%."
4203
  msgstr ""
4204
 
4205
+ #: defaults.php:360
4206
  msgid "User activated a WordPress plugin"
4207
  msgstr ""
4208
 
4209
+ #: defaults.php:360
4210
  msgid "Activated the plugin %PluginData->Name% installed in %PluginFile%."
4211
  msgstr ""
4212
 
4213
+ #: defaults.php:361
4214
  msgid "User deactivated a WordPress plugin"
4215
  msgstr ""
4216
 
4217
+ #: defaults.php:361
4218
  msgid "Deactivated the plugin %PluginData->Name% installed in %PluginFile%."
4219
  msgstr ""
4220
 
4221
+ #: defaults.php:362
4222
  msgid "User uninstalled a plugin"
4223
  msgstr ""
4224
 
4225
+ #: defaults.php:362
4226
  msgid ""
4227
  "Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile"
4228
  "%."
4229
  msgstr ""
4230
 
4231
+ #: defaults.php:363
4232
  msgid "User upgraded a plugin"
4233
  msgstr ""
4234
 
4235
+ #: defaults.php:363
4236
  msgid "Upgraded the plugin %PluginData->Name% installed in %PluginFile%."
4237
  msgstr ""
4238
 
4239
+ #: defaults.php:364
4240
  msgid "Plugin created tables"
4241
  msgstr ""
4242
 
4243
+ #: defaults.php:364
4244
  msgid ""
4245
  "Plugin %Plugin->Name% created these tables in the database: %TableNames%."
4246
  msgstr ""
4247
 
4248
+ #: defaults.php:365
4249
  msgid "Plugin modified tables structure"
4250
  msgstr ""
4251
 
4252
+ #: defaults.php:365
4253
  msgid ""
4254
  "Plugin %Plugin->Name% modified the structure of these database tables: "
4255
  "%TableNames%."
4256
  msgstr ""
4257
 
4258
+ #: defaults.php:366
4259
  msgid "Plugin deleted tables"
4260
  msgstr ""
4261
 
4262
+ #: defaults.php:366
4263
  msgid ""
4264
  "Plugin %Plugin->Name% deleted the following tables from the database: "
4265
  "%TableNames%."
4266
  msgstr ""
4267
 
4268
+ #: defaults.php:367
4269
  msgid "A plugin created a post"
4270
  msgstr ""
4271
 
4272
+ #: defaults.php:367
4273
  msgid ""
4274
  "A plugin automatically created the following %PostType% called %PostTitle%. "
4275
  "View the post: %EditorLinkPost%."
4276
  msgstr ""
4277
 
4278
+ #: defaults.php:368
4279
  msgid "A plugin deleted a post"
4280
  msgstr ""
4281
 
4282
+ #: defaults.php:368
4283
  msgid ""
4284
  "A plugin automatically deleted the following %PostType% called %PostTitle%."
4285
  msgstr ""
4286
 
4287
+ #: defaults.php:369
4288
  msgid "User changed a file using the plugin editor"
4289
  msgstr ""
4290
 
4291
+ #: defaults.php:369
4292
  msgid "Modified %File% with the Plugin Editor."
4293
  msgstr ""
4294
 
4295
+ #: defaults.php:375
4296
  msgid "Themes"
4297
  msgstr ""
4298
 
4299
+ #: defaults.php:376
4300
  msgid "User installed a theme"
4301
  msgstr ""
4302
 
4303
+ #: defaults.php:376
4304
  msgid ""
4305
  "Installed the theme \"%Theme->Name%\" in %Theme->get_template_directory%."
4306
  msgstr ""
4307
 
4308
+ #: defaults.php:377
4309
  msgid "User activated a theme"
4310
  msgstr ""
4311
 
4312
+ #: defaults.php:377
4313
  msgid ""
4314
  "Activated the theme \"%Theme->Name%\", installed in %Theme-"
4315
  ">get_template_directory%."
4316
  msgstr ""
4317
 
4318
+ #: defaults.php:378
4319
  msgid "User uninstalled a theme"
4320
  msgstr ""
4321
 
4322
+ #: defaults.php:378
4323
  msgid ""
4324
  "Deleted the theme \"%Theme->Name%\" installed in %Theme-"
4325
  ">get_template_directory%."
4326
  msgstr ""
4327
 
4328
+ #: defaults.php:379
4329
  msgid "Activated theme on network"
4330
  msgstr ""
4331
 
4332
+ #: defaults.php:379
4333
  msgid ""
4334
  "Network activated the theme %Theme->Name% installed in %Theme-"
4335
  ">get_template_directory%."
4336
  msgstr ""
4337
 
4338
+ #: defaults.php:380
4339
  msgid "Deactivated theme from network"
4340
  msgstr ""
4341
 
4342
+ #: defaults.php:380
4343
  msgid ""
4344
  "Network deactivated the theme %Theme->Name% installed in %Theme-"
4345
  ">get_template_directory%."
4346
  msgstr ""
4347
 
4348
+ #: defaults.php:381
4349
  msgid "Theme created tables"
4350
  msgstr ""
4351
 
4352
+ #: defaults.php:381
4353
  msgid "Theme %Theme->Name% created these tables in the database: %TableNames%."
4354
  msgstr ""
4355
 
4356
+ #: defaults.php:382
4357
  msgid "Theme modified tables structure"
4358
  msgstr ""
4359
 
4360
+ #: defaults.php:382
4361
  msgid ""
4362
  "Theme %Theme->Name% modified the structure of these database tables: "
4363
  "%TableNames%."
4364
  msgstr ""
4365
 
4366
+ #: defaults.php:383
4367
  msgid "Theme deleted tables"
4368
  msgstr ""
4369
 
4370
+ #: defaults.php:383
4371
  msgid ""
4372
  "Theme %Theme->Name% deleted the following tables from the database: "
4373
  "%TableNames%."
4374
  msgstr ""
4375
 
4376
+ #: defaults.php:384
4377
  msgid "User updated a theme"
4378
  msgstr ""
4379
 
4380
+ #: defaults.php:384
4381
  msgid ""
4382
  "Updated the theme \"%Theme->Name%\" installed in %Theme-"
4383
  ">get_template_directory%."
4384
  msgstr ""
4385
 
4386
+ #: defaults.php:385
4387
  msgid "User changed a file using the theme editor"
4388
  msgstr ""
4389
 
4390
+ #: defaults.php:385
4391
  msgid "Modified %File% with the Theme Editor."
4392
  msgstr ""
4393
 
4394
+ #: defaults.php:392
4395
  msgid "Unknown Error"
4396
  msgstr ""
4397
 
4398
+ #: defaults.php:392
4399
  msgid "An unexpected error has occurred ."
4400
  msgstr ""
4401
 
4402
+ #: defaults.php:393
4403
  msgid "PHP error"
4404
  msgstr ""
4405
 
4406
+ #: defaults.php:393 defaults.php:394 defaults.php:395 defaults.php:396
4407
+ #: defaults.php:397
4408
  msgid "%Message%."
4409
  msgstr ""
4410
 
4411
+ #: defaults.php:394
4412
  msgid "PHP warning"
4413
  msgstr ""
4414
 
4415
+ #: defaults.php:395
4416
  msgid "PHP notice"
4417
  msgstr ""
4418
 
4419
+ #: defaults.php:396
4420
  msgid "PHP exception"
4421
  msgstr ""
4422
 
4423
+ #: defaults.php:397
4424
  msgid "PHP shutdown error"
4425
  msgstr ""
4426
 
4427
+ #: defaults.php:398
4428
  msgid "Events automatically pruned by system"
4429
  msgstr ""
4430
 
4431
+ #: defaults.php:398
4432
  msgid "System automatically deleted %EventCount% event(s)."
4433
  msgstr ""
4434
 
4435
+ #: defaults.php:399
4436
  msgid "WordPress was updated"
4437
  msgstr ""
4438
 
4439
+ #: defaults.php:399
4440
  msgid "Updated WordPress from version %OldVersion% to %NewVersion%."
4441
  msgstr ""
4442
 
4443
+ #: defaults.php:400
4444
  msgid "Reset plugin's settings to default"
4445
  msgstr ""
4446
 
4447
+ #: defaults.php:400
4448
  msgid "Reset plugin's settings to default."
4449
  msgstr ""
4450
 
4451
+ #: defaults.php:401
4452
  msgid "Purged the activity log"
4453
  msgstr ""
4454
 
4455
+ #: defaults.php:401
4456
  msgid "Purged the activity log."
4457
  msgstr ""
4458
 
4459
+ #: defaults.php:402
4460
  msgid "File content has been modified"
4461
  msgstr ""
4462
 
4463
+ #: defaults.php:402
4464
  msgid "The content of the file %FileLocation% has been modified."
4465
  msgstr ""
4466
 
4467
+ #: defaults.php:403
4468
  msgid "File added to the site"
4469
  msgstr ""
4470
 
4471
+ #: defaults.php:403
4472
  msgid "The file %FileLocation% has been added to your website."
4473
  msgstr ""
4474
 
4475
+ #: defaults.php:404
4476
  msgid "File deleted from the site"
4477
  msgstr ""
4478
 
4479
+ #: defaults.php:404
4480
  msgid "The file %FileLocation% has been deleted from your website."
4481
  msgstr ""
4482
 
4483
+ #: defaults.php:405
4484
  msgid "File not scanned because it is bigger than the maximum file size limit"
4485
  msgstr ""
4486
 
4487
+ #: defaults.php:405
4488
  msgid ""
4489
  "The file %FileLocation% was not scanned because it is bigger than the "
4490
  "maximum file size limit. If you want to include these files in the scan "
4491
  "increase the file size limit from the %FileSettings%."
4492
  msgstr ""
4493
 
4494
+ #: defaults.php:406
4495
  msgid "File integrity scan stopped due to the limit of 1 million files"
4496
  msgstr ""
4497
 
4498
+ #: defaults.php:406
4499
  msgid ""
4500
  "The file changes scanning engine has reached the limit of 1 million files "
4501
  "and stopped the scan. Please %ContactSupport% for more information."
4502
  msgstr ""
4503
 
4504
+ #: defaults.php:407
4505
  msgid "File integrity scan started/stopped"
4506
  msgstr ""
4507
 
4508
+ #: defaults.php:407
4509
  msgid "The file integrity scanner has %ScanStatus%."
4510
  msgstr ""
4511
 
4512
+ #: defaults.php:408
4513
  msgid "Advertising Add-ons"
4514
  msgstr ""
4515
 
4516
+ #: defaults.php:408
4517
  msgid "%PromoName% %PromoMessage%"
4518
  msgstr ""
4519
 
4520
+ #: defaults.php:414
4521
  msgid "Menus"
4522
  msgstr ""
4523
 
4524
+ #: defaults.php:415
4525
  msgid "User created new menu"
4526
  msgstr ""
4527
 
4528
+ #: defaults.php:415
4529
  msgid "Created a new menu called %MenuName%."
4530
  msgstr ""
4531
 
4532
+ #: defaults.php:416
4533
  msgid "User added content to a menu"
4534
  msgstr ""
4535
 
4536
+ #: defaults.php:416
4537
  msgid "Added the %ContentType% called %ContentName% to menu %MenuName%."
4538
  msgstr ""
4539
 
4540
+ #: defaults.php:417
4541
  msgid "User removed content from a menu"
4542
  msgstr ""
4543
 
4544
+ #: defaults.php:417
4545
  msgid ""
4546
  "Removed the %ContentType% called %ContentName% from the menu %MenuName%."
4547
  msgstr ""
4548
 
4549
+ #: defaults.php:418
4550
  msgid "User deleted menu"
4551
  msgstr ""
4552
 
4553
+ #: defaults.php:418
4554
  msgid "Deleted the menu %MenuName%."
4555
  msgstr ""
4556
 
4557
+ #: defaults.php:419
4558
  msgid "User changed menu setting"
4559
  msgstr ""
4560
 
4561
+ #: defaults.php:419
4562
  msgid "%Status% the menu setting %MenuSetting% in %MenuName%."
4563
  msgstr ""
4564
 
4565
+ #: defaults.php:420
4566
  msgid "User modified content in a menu"
4567
  msgstr ""
4568
 
4569
+ #: defaults.php:420
4570
  msgid "Modified the %ContentType% called %ContentName% in menu %MenuName%."
4571
  msgstr ""
4572
 
4573
+ #: defaults.php:421
4574
  msgid "User changed name of a menu"
4575
  msgstr ""
4576
 
4577
+ #: defaults.php:421
4578
  msgid "Changed the name of menu %OldMenuName% to %NewMenuName%."
4579
  msgstr ""
4580
 
4581
+ #: defaults.php:422
4582
  msgid "User changed order of the objects in a menu"
4583
  msgstr ""
4584
 
4585
+ #: defaults.php:422
4586
  msgid "Changed the order of the %ItemName% in menu %MenuName%."
4587
  msgstr ""
4588
 
4589
+ #: defaults.php:423
4590
  msgid "User moved objects as a sub-item"
4591
  msgstr ""
4592
 
4593
+ #: defaults.php:423
4594
  msgid "Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%."
4595
  msgstr ""
4596
 
4597
+ #: defaults.php:429
4598
  msgid "Widgets"
4599
  msgstr ""
4600
 
4601
+ #: defaults.php:430
4602
  msgid "User added a new widget"
4603
  msgstr ""
4604
 
4605
+ #: defaults.php:430
4606
  msgid "Added a new %WidgetName% widget in %Sidebar%."
4607
  msgstr ""
4608
 
4609
+ #: defaults.php:431
4610
  msgid "User modified a widget"
4611
  msgstr ""
4612
 
4613
+ #: defaults.php:431
4614
  msgid "Modified the %WidgetName% widget in %Sidebar%."
4615
  msgstr ""
4616
 
4617
+ #: defaults.php:432
4618
  msgid "User deleted widget"
4619
  msgstr ""
4620
 
4621
+ #: defaults.php:432
4622
  msgid "Deleted the %WidgetName% widget from %Sidebar%."
4623
  msgstr ""
4624
 
4625
+ #: defaults.php:433
4626
  msgid "User moved widget"
4627
  msgstr ""
4628
 
4629
+ #: defaults.php:433
4630
  msgid "Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%."
4631
  msgstr ""
4632
 
4633
+ #: defaults.php:434
4634
  msgid "User changed widget position"
4635
  msgstr ""
4636
 
4637
+ #: defaults.php:434
4638
  msgid "Changed the position of the widget %WidgetName% in sidebar %Sidebar%."
4639
  msgstr ""
4640
 
4641
+ #: defaults.php:440
4642
  msgid "WordPress Settings"
4643
  msgstr ""
4644
 
4645
+ #: defaults.php:441
4646
  msgid "Option Anyone Can Register in WordPress settings changed"
4647
  msgstr ""
4648
 
4649
+ #: defaults.php:441
4650
  msgid "%NewValue% the option \"Anyone can register\"."
4651
  msgstr ""
4652
 
4653
+ #: defaults.php:442
4654
  msgid "New User Default Role changed"
4655
  msgstr ""
4656
 
4657
+ #: defaults.php:442
4658
  msgid "Changed the New User Default Role from %OldRole% to %NewRole%."
4659
  msgstr ""
4660
 
4661
+ #: defaults.php:443
4662
  msgid "WordPress Administrator Notification email changed"
4663
  msgstr ""
4664
 
4665
+ #: defaults.php:443
4666
  msgid ""
4667
  "Changed the WordPress administrator notifications email address from "
4668
  "%OldEmail% to %NewEmail%."
4669
  msgstr ""
4670
 
4671
+ #: defaults.php:444
4672
  msgid "User changes the WordPress Permalinks"
4673
  msgstr ""
4674
 
4675
+ #: defaults.php:444
4676
  msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%."
4677
  msgstr ""
4678
 
4679
+ #: defaults.php:445
4680
  msgid ""
4681
  "Enabled/Disabled the option Discourage search engines from indexing this site"
4682
  msgstr ""
4683
 
4684
+ #: defaults.php:445
4685
  msgid "%Status% the option Discourage search engines from indexing this site."
4686
  msgstr ""
4687
 
4688
+ #: defaults.php:446
4689
  msgid "Enabled/Disabled comments on all the website"
4690
  msgstr ""
4691
 
4692
+ #: defaults.php:446
4693
  msgid "%Status% comments on all the website."
4694
  msgstr ""
4695
 
4696
+ #: defaults.php:447
4697
  msgid "Enabled/Disabled the option Comment author must fill out name and email"
4698
  msgstr ""
4699
 
4700
+ #: defaults.php:447
4701
  msgid "%Status% the option Comment author must fill out name and email."
4702
  msgstr ""
4703
 
4704
+ #: defaults.php:448
4705
  msgid ""
4706
  "Enabled/Disabled the option Users must be logged in and registered to comment"
4707
  msgstr ""
4708
 
4709
+ #: defaults.php:448
4710
  msgid "%Status% the option Users must be logged in and registered to comment."
4711
  msgstr ""
4712
 
4713
+ #: defaults.php:449
4714
  msgid "Enabled/Disabled the option to automatically close comments"
4715
  msgstr ""
4716
 
4717
+ #: defaults.php:449
4718
  msgid "%Status% the option to automatically close comments after %Value% days."
4719
  msgstr ""
4720
 
4721
+ #: defaults.php:450
4722
  msgid "Changed the value of the option Automatically close comments"
4723
  msgstr ""
4724
 
4725
+ #: defaults.php:450
4726
  msgid ""
4727
  "Changed the value of the option Automatically close comments from %OldValue% "
4728
  "to %NewValue% days."
4729
  msgstr ""
4730
 
4731
+ #: defaults.php:451
4732
  msgid "Enabled/Disabled the option for comments to be manually approved"
4733
  msgstr ""
4734
 
4735
+ #: defaults.php:451
4736
  msgid "%Status% the option for comments to be manually approved."
4737
  msgstr ""
4738
 
4739
+ #: defaults.php:452
4740
  msgid ""
4741
  "Enabled/Disabled the option for an author to have previously approved "
4742
  "comments for the comments to appear"
4743
  msgstr ""
4744
 
4745
+ #: defaults.php:452
4746
  msgid ""
4747
  "%Status% the option for an author to have previously approved comments for "
4748
  "the comments to appear."
4749
  msgstr ""
4750
 
4751
+ #: defaults.php:453
4752
  msgid ""
4753
  "Changed the number of links that a comment must have to be held in the queue"
4754
  msgstr ""
4755
 
4756
+ #: defaults.php:453
4757
  msgid ""
4758
  "Changed the number of links from %OldValue% to %NewValue% that a comment "
4759
  "must have to be held in the queue."
4760
  msgstr ""
4761
 
4762
+ #: defaults.php:454
4763
  msgid "Modified the list of keywords for comments moderation"
4764
  msgstr ""
4765
 
4766
+ #: defaults.php:454
4767
  msgid "Modified the list of keywords for comments moderation."
4768
  msgstr ""
4769
 
4770
+ #: defaults.php:455
4771
  msgid "Modified the list of keywords for comments blacklisting"
4772
  msgstr ""
4773
 
4774
+ #: defaults.php:455
4775
  msgid "Modified the list of keywords for comments blacklisting."
4776
  msgstr ""
4777
 
4778
+ #: defaults.php:456
4779
  msgid "Option WordPress Address (URL) in WordPress settings changed"
4780
  msgstr ""
4781
 
4782
+ #: defaults.php:456
4783
  msgid "Changed the WordPress address (URL) from %old_url% to %new_url%."
4784
  msgstr ""
4785
 
4786
+ #: defaults.php:457
4787
  msgid "Option Site Address (URL) in WordPress settings changed"
4788
  msgstr ""
4789
 
4790
+ #: defaults.php:457
4791
  msgid "Changed the site address (URL) from %old_url% to %new_url%."
4792
  msgstr ""
4793
 
4794
+ #: defaults.php:464
4795
  msgid "Multisite Network"
4796
  msgstr ""
4797
 
4798
+ #: defaults.php:469
4799
  msgid "User granted Super Admin privileges"
4800
  msgstr ""
4801
 
4802
+ #: defaults.php:469
4803
  msgid "Granted Super Admin privileges to %TargetUsername%."
4804
  msgstr ""
4805
 
4806
+ #: defaults.php:470
4807
  msgid "User revoked from Super Admin privileges"
4808
  msgstr ""
4809
 
4810
+ #: defaults.php:470
4811
  msgid "Revoked Super Admin privileges from %TargetUsername%."
4812
  msgstr ""
4813
 
4814
+ #: defaults.php:471
4815
  msgid "Existing user added to a site"
4816
  msgstr ""
4817
 
4818
+ #: defaults.php:471
4819
  msgid ""
4820
  "Added the existing user %TargetUsername% with %TargetUserRole% role to site "
4821
  "%SiteName%."
4822
  msgstr ""
4823
 
4824
+ #: defaults.php:472
4825
  msgid "User removed from site"
4826
  msgstr ""
4827
 
4828
+ #: defaults.php:472
4829
  msgid ""
4830
  "Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% "
4831
  "site."
4832
  msgstr ""
4833
 
4834
+ #: defaults.php:473
4835
  msgid "New network user created"
4836
  msgstr ""
4837
 
4838
+ #: defaults.php:473
4839
  msgid "Created a new network user %NewUserData->Username%."
4840
  msgstr ""
4841
 
4842
+ #: defaults.php:474
 
 
 
 
 
 
 
 
 
 
4843
  msgid "New site added on the network"
4844
  msgstr ""
4845
 
4846
+ #: defaults.php:474
4847
  msgid "Added the site %SiteName% to the network."
4848
  msgstr ""
4849
 
4850
+ #: defaults.php:475
4851
  msgid "Existing site archived"
4852
  msgstr ""
4853
 
4854
+ #: defaults.php:475
4855
  msgid "Archived the site %SiteName%."
4856
  msgstr ""
4857
 
4858
+ #: defaults.php:476
4859
  msgid "Archived site has been unarchived"
4860
  msgstr ""
4861
 
4862
+ #: defaults.php:476
4863
  msgid "Unarchived the site %SiteName%."
4864
  msgstr ""
4865
 
4866
+ #: defaults.php:477
4867
  msgid "Deactivated site has been activated"
4868
  msgstr ""
4869
 
4870
+ #: defaults.php:477
4871
  msgid "Activated the site %SiteName%."
4872
  msgstr ""
4873
 
4874
+ #: defaults.php:478
4875
  msgid "Site has been deactivated"
4876
  msgstr ""
4877
 
4878
+ #: defaults.php:478
4879
  msgid "Deactivated the site %SiteName%."
4880
  msgstr ""
4881
 
4882
+ #: defaults.php:479
4883
  msgid "Existing site deleted from network"
4884
  msgstr ""
4885
 
4886
+ #: defaults.php:479
4887
  msgid "Deleted the site %SiteName%."
4888
  msgstr ""
4889
 
4890
+ #: defaults.php:491
4891
  msgid "User created new forum"
4892
  msgstr ""
4893
 
4894
+ #: defaults.php:491
4895
  msgid ""
4896
  "Created new forum %ForumName%. Forum URL is %ForumURL%. %EditorLinkForum%."
4897
  msgstr ""
4898
 
4899
+ #: defaults.php:492
4900
  msgid "User changed status of a forum"
4901
  msgstr ""
4902
 
4903
+ #: defaults.php:492
4904
  msgid ""
4905
  "Changed the status of the forum %ForumName% from %OldStatus% to %NewStatus%. "
4906
  "%EditorLinkForum%."
4907
  msgstr ""
4908
 
4909
+ #: defaults.php:493
4910
  msgid "User changed visibility of a forum"
4911
  msgstr ""
4912
 
4913
+ #: defaults.php:493
4914
  msgid ""
4915
  "Changed the visibility of the forum %ForumName% from %OldVisibility% to "
4916
  "%NewVisibility%. %EditorLinkForum%."
4917
  msgstr ""
4918
 
4919
+ #: defaults.php:494
4920
  msgid "User changed the URL of a forum"
4921
  msgstr ""
4922
 
4923
+ #: defaults.php:494
4924
  msgid ""
4925
  "Changed the URL of the forum %ForumName% from %OldUrl% to %NewUrl%. "
4926
  "%EditorLinkForum%."
4927
  msgstr ""
4928
 
4929
+ #: defaults.php:495
4930
  msgid "User changed order of a forum"
4931
  msgstr ""
4932
 
4933
+ #: defaults.php:495
4934
  msgid ""
4935
  "Changed the order of the forum %ForumName% from %OldOrder% to %NewOrder%. "
4936
  "%EditorLinkForum%."
4937
  msgstr ""
4938
 
4939
+ #: defaults.php:496
4940
  msgid "User moved forum to trash"
4941
  msgstr ""
4942
 
4943
+ #: defaults.php:496
4944
  msgid "Moved the forum %ForumName% to trash."
4945
  msgstr ""
4946
 
4947
+ #: defaults.php:497
4948
  msgid "User permanently deleted forum"
4949
  msgstr ""
4950
 
4951
+ #: defaults.php:497
4952
  msgid "Permanently deleted the forum %ForumName%."
4953
  msgstr ""
4954
 
4955
+ #: defaults.php:498
4956
  msgid "User restored forum from trash"
4957
  msgstr ""
4958
 
4959
+ #: defaults.php:498
4960
  msgid "Restored the forum %ForumName% from trash. %EditorLinkForum%."
4961
  msgstr ""
4962
 
4963
+ #: defaults.php:499
4964
  msgid "User changed the parent of a forum"
4965
  msgstr ""
4966
 
4967
+ #: defaults.php:499
4968
  msgid ""
4969
  "Changed the parent of the forum %ForumName% from %OldParent% to %NewParent%. "
4970
  "%EditorLinkForum%."
4971
  msgstr ""
4972
 
4973
+ #: defaults.php:500
4974
  msgid "User changed type of a forum"
4975
  msgstr ""
4976
 
4977
+ #: defaults.php:500
4978
  msgid ""
4979
  "Changed the type of the forum %ForumName% from %OldType% to %NewType%. "
4980
  "%EditorLinkForum%."
4981
  msgstr ""
4982
 
4983
+ #: defaults.php:501
4984
  msgid "User changed forum's role"
4985
  msgstr ""
4986
 
4987
+ #: defaults.php:501
4988
  msgid "Changed the forum's auto role from %OldRole% to %NewRole%."
4989
  msgstr ""
4990
 
4991
+ #: defaults.php:502
4992
  msgid "User changed option of a forum"
4993
  msgstr ""
4994
 
4995
+ #: defaults.php:502
4996
  msgid "%Status% the option for anonymous posting on forum."
4997
  msgstr ""
4998
 
4999
+ #: defaults.php:503
5000
  msgid "User changed time to disallow post editing"
5001
  msgstr ""
5002
 
5003
+ #: defaults.php:503
5004
  msgid ""
5005
  "Changed the time to disallow post editing from %OldTime% to %NewTime% "
5006
  "minutes in the forums."
5007
  msgstr ""
5008
 
5009
+ #: defaults.php:504
5010
  msgid "User changed the forum setting posting throttle time"
5011
  msgstr ""
5012
 
5013
+ #: defaults.php:504
5014
  msgid ""
5015
  "Changed the posting throttle time from %OldTime% to %NewTime% seconds in the "
5016
  "forums."
5017
  msgstr ""
5018
 
5019
+ #: defaults.php:505
5020
  msgid "User created new topic"
5021
  msgstr ""
5022
 
5023
+ #: defaults.php:505
5024
  msgid "Created a new topic %TopicName%. %EditorLinkTopic%."
5025
  msgstr ""
5026
 
5027
+ #: defaults.php:506
5028
  msgid "User changed status of a topic"
5029
  msgstr ""
5030
 
5031
+ #: defaults.php:506
5032
  msgid ""
5033
  "Changed the status of the topic %TopicName% from %OldStatus% to %NewStatus%. "
5034
  "%EditorLinkTopic%."
5035
  msgstr ""
5036
 
5037
+ #: defaults.php:507
5038
  msgid "User changed type of a topic"
5039
  msgstr ""
5040
 
5041
+ #: defaults.php:507
5042
  msgid ""
5043
  "Changed the type of the topic %TopicName% from %OldType% to %NewType%. "
5044
  "%EditorLinkTopic%."
5045
  msgstr ""
5046
 
5047
+ #: defaults.php:508
5048
  msgid "User changed URL of a topic"
5049
  msgstr ""
5050
 
5051
+ #: defaults.php:508
5052
  msgid "Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%."
5053
  msgstr ""
5054
 
5055
+ #: defaults.php:509
5056
  msgid "User changed the forum of a topic"
5057
  msgstr ""
5058
 
5059
+ #: defaults.php:509
5060
  msgid ""
5061
  "Changed the forum of the topic %TopicName% from %OldForum% to %NewForum%. "
5062
  "%EditorLinkTopic%."
5063
  msgstr ""
5064
 
5065
+ #: defaults.php:510
5066
  msgid "User moved topic to trash"
5067
  msgstr ""
5068
 
5069
+ #: defaults.php:510
5070
  msgid "Moved the topic %TopicName% to trash."
5071
  msgstr ""
5072
 
5073
+ #: defaults.php:511
5074
  msgid "User permanently deleted topic"
5075
  msgstr ""
5076
 
5077
+ #: defaults.php:511
5078
  msgid "Permanently deleted the topic %TopicName%."
5079
  msgstr ""
5080
 
5081
+ #: defaults.php:512
5082
  msgid "User restored topic from trash"
5083
  msgstr ""
5084
 
5085
+ #: defaults.php:512
5086
  msgid "Restored the topic %TopicName% from trash. %EditorLinkTopic%."
5087
  msgstr ""
5088
 
5089
+ #: defaults.php:513
5090
  msgid "User changed visibility of a topic"
5091
  msgstr ""
5092
 
5093
+ #: defaults.php:513
5094
  msgid ""
5095
  "Changed the visibility of the topic %TopicName% from %OldVisibility% to "
5096
  "%NewVisibility%. %EditorLinkTopic%."
5097
  msgstr ""
5098
 
5099
+ #: defaults.php:514
5100
+ msgid "The forum role of a user was changed by another WordPress user"
5101
+ msgstr ""
5102
+
5103
+ #: defaults.php:514
5104
+ msgid ""
5105
+ "Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole"
5106
+ "% by %UserChanger%."
5107
+ msgstr ""
5108
+
5109
+ #: defaults.php:521
5110
  msgid "User created a new product"
5111
  msgstr ""
5112
 
5113
+ #: defaults.php:521
5114
  msgid ""
5115
  "Created a new product called %ProductTitle% and saved it as draft. View the "
5116
  "product: %EditorLinkProduct%."
5117
  msgstr ""
5118
 
5119
+ #: defaults.php:522
5120
  msgid "User published a product"
5121
  msgstr ""
5122
 
5123
+ #: defaults.php:522
5124
  msgid ""
5125
  "Published a product called %ProductTitle%. Product URL is %ProductUrl%. View "
5126
  "the product: %EditorLinkProduct%."
5127
  msgstr ""
5128
 
5129
+ #: defaults.php:523
5130
  msgid "User changed the category of a product"
5131
  msgstr ""
5132
 
5133
+ #: defaults.php:523
5134
  msgid ""
5135
  "Changed the category of the %ProductStatus% product %ProductTitle% from "
5136
  "%OldCategories% to %NewCategories%. View the product: %EditorLinkProduct%."
5137
  msgstr ""
5138
 
5139
+ #: defaults.php:524
5140
  msgid "User modified the short description of a product"
5141
  msgstr ""
5142
 
5143
+ #: defaults.php:524
5144
  msgid ""
5145
  "Modified the short description of the %ProductStatus% product %ProductTitle%."
5146
  "%ChangeText% View the product: %EditorLinkProduct%."
5147
  msgstr ""
5148
 
5149
+ #: defaults.php:525
5150
  msgid "User modified the text of a product"
5151
  msgstr ""
5152
 
5153
+ #: defaults.php:525
5154
  msgid ""
5155
  "Modified the text of the %ProductStatus% product %ProductTitle%. View the "
5156
  "product: %EditorLinkProduct%."
5157
  msgstr ""
5158
 
5159
+ #: defaults.php:526
5160
  msgid "User changed the URL of a product"
5161
  msgstr ""
5162
 
5163
+ #: defaults.php:526
5164
  msgid ""
5165
  "Changed the URL of the %ProductStatus% product %ProductTitle%%ReportText%."
5166
  "%ChangeText% View the product: %EditorLinkProduct%."
5167
  msgstr ""
5168
 
5169
+ #: defaults.php:527
5170
  msgid "User changed the date of a product"
5171
  msgstr ""
5172
 
5173
+ #: defaults.php:527
5174
  msgid ""
5175
  "Changed the date of the %ProductStatus% product %ProductTitle% from %OldDate"
5176
  "% to %NewDate%. View the product: %EditorLinkProduct%."
5177
  msgstr ""
5178
 
5179
+ #: defaults.php:528
5180
  msgid "User changed the visibility of a product"
5181
  msgstr ""
5182
 
5183
+ #: defaults.php:528
5184
  msgid ""
5185
  "Changed the visibility of the %ProductStatus% product %ProductTitle% from "
5186
  "%OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct%."
5187
  msgstr ""
5188
 
5189
+ #: defaults.php:529
5190
  msgid "User modified the product"
5191
  msgstr ""
5192
 
5193
+ #: defaults.php:529
5194
  msgid ""
5195
  "Modified the %ProductStatus% product %ProductTitle%. Product URL is "
5196
  "%ProductUrl%. View the product: %EditorLinkProduct%."
5197
  msgstr ""
5198
 
5199
+ #: defaults.php:530
5200
  msgid "User modified the draft product"
5201
  msgstr ""
5202
 
5203
+ #: defaults.php:530
5204
  msgid ""
5205
  "Modified the draft product %ProductTitle%. View the product: "
5206
  "%EditorLinkProduct%."
5207
  msgstr ""
5208
 
5209
+ #: defaults.php:531
5210
  msgid "User moved a product to trash"
5211
  msgstr ""
5212
 
5213
+ #: defaults.php:531
5214
  msgid ""
5215
  "Moved the %ProductStatus% product %ProductTitle% to trash. Product URL was "
5216
  "%ProductUrl%."
5217
  msgstr ""
5218
 
5219
+ #: defaults.php:532
5220
  msgid "User permanently deleted a product"
5221
  msgstr ""
5222
 
5223
+ #: defaults.php:532
5224
  msgid "Permanently deleted the product %ProductTitle%."
5225
  msgstr ""
5226
 
5227
+ #: defaults.php:533
5228
  msgid "User restored a product from the trash"
5229
  msgstr ""
5230
 
5231
+ #: defaults.php:533
5232
  msgid ""
5233
  "Product %ProductTitle% has been restored from trash. View product: "
5234
  "%EditorLinkProduct%."
5235
  msgstr ""
5236
 
5237
+ #: defaults.php:534
5238
  msgid "User changed status of a product"
5239
  msgstr ""
5240
 
5241
+ #: defaults.php:534
5242
  msgid ""
5243
  "Changed the status of the product %ProductTitle% from %OldStatus% to "
5244
  "%NewStatus%. View the product: %EditorLinkProduct%."
5245
  msgstr ""
5246
 
5247
+ #: defaults.php:535
5248
  msgid "User opened a product in the editor"
5249
  msgstr ""
5250
 
5251
+ #: defaults.php:535
5252
  msgid ""
5253
  "Opened the %ProductStatus% product page %ProductTitle% in editor. View the "
5254
  "product: %EditorLinkProduct%."
5255
  msgstr ""
5256
 
5257
+ #: defaults.php:536
5258
  msgid "User viewed a product"
5259
  msgstr ""
5260
 
5261
+ #: defaults.php:536
5262
  msgid ""
5263
  "Viewed the %ProductStatus% product page %ProductTitle%. View the product: "
5264
  "%EditorLinkProduct%."
5265
  msgstr ""
5266
 
5267
+ #: defaults.php:537
5268
  msgid "User renamed a product"
5269
  msgstr ""
5270
 
5271
+ #: defaults.php:537
5272
  msgid ""
5273
  "Renamed the %ProductStatus% product from %OldTitle% to %NewTitle%. View the "
5274
  "product: %EditorLinkProduct%."
5275
  msgstr ""
5276
 
5277
+ #: defaults.php:538
5278
  msgid "User changed the Product Data of a product"
5279
  msgstr ""
5280
 
5281
+ #: defaults.php:538
5282
  msgid ""
5283
  "Changed the Product Type of the %ProductStatus% product %ProductTitle% from "
5284
  "%OldType% to %NewType%. View the product: %EditorLinkProduct%."
5285
  msgstr ""
5286
 
5287
+ #: defaults.php:539
5288
  msgid "User changed type of a price"
5289
  msgstr ""
5290
 
5291
+ #: defaults.php:539
5292
  msgid ""
5293
  "Changed the %PriceType% of the %ProductStatus% product %ProductTitle% from "
5294
  "%OldPrice% to %NewPrice%. View the product: %EditorLinkProduct%."
5295
  msgstr ""
5296
 
5297
+ #: defaults.php:540
5298
  msgid "User changed the SKU of a product"
5299
  msgstr ""
5300
 
5301
+ #: defaults.php:540
5302
  msgid ""
5303
  "Changed the SKU of the %ProductStatus% product %ProductTitle% from %OldSku% "
5304
  "to %NewSku%. View the product: %EditorLinkProduct%."
5305
  msgstr ""
5306
 
5307
+ #: defaults.php:541
5308
  msgid "User changed the stock status of a product"
5309
  msgstr ""
5310
 
5311
+ #: defaults.php:541
5312
  msgid ""
5313
  "Changed the stock status of the %ProductStatus% product %ProductTitle% from "
5314
  "%OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%."
5315
  msgstr ""
5316
 
5317
+ #: defaults.php:542
5318
  msgid "User changed the stock quantity"
5319
  msgstr ""
5320
 
5321
+ #: defaults.php:542
5322
  msgid ""
5323
  "Changed the stock quantity of the %ProductStatus% product %ProductTitle% "
5324
  "from %OldValue% to %NewValue%. View the product: %EditorLinkProduct%"
5325
  msgstr ""
5326
 
5327
+ #: defaults.php:543
5328
  msgid "User set a product type"
5329
  msgstr ""
5330
 
5331
+ #: defaults.php:543
5332
  msgid ""
5333
  "Changed the type of the %ProductStatus% simple product %ProductTitle% from "
5334
  "%OldType% to %NewType%. View the product: %EditorLinkProduct%."
5335
  msgstr ""
5336
 
5337
+ #: defaults.php:544
5338
  msgid "User changed the weight of a product"
5339
  msgstr ""
5340
 
5341
+ #: defaults.php:544
5342
  msgid ""
5343
  "Changed the weight of the %ProductStatus% product %ProductTitle% from "
5344
  "%OldWeight% to %NewWeight%. View the product: %EditorLinkProduct%."
5345
  msgstr ""
5346
 
5347
+ #: defaults.php:545
5348
  msgid "User changed the dimensions of a product"
5349
  msgstr ""
5350
 
5351
+ #: defaults.php:545
5352
  msgid ""
5353
  "Changed the %DimensionType% dimensions of the %ProductStatus% product "
5354
  "%ProductTitle% from %OldDimension% to %NewDimension%. View the product: "
5355
  "%EditorLinkProduct%."
5356
  msgstr ""
5357
 
5358
+ #: defaults.php:546
5359
  msgid "User added the Downloadable File to a product"
5360
  msgstr ""
5361
 
5362
+ #: defaults.php:546
5363
  msgid ""
5364
  "Added the Downloadable File %FileName% with File URL %FileUrl% to the "
5365
  "%ProductStatus% product %ProductTitle%. View the product: %EditorLinkProduct"
5366
  "%."
5367
  msgstr ""
5368
 
5369
+ #: defaults.php:547
5370
  msgid "User Removed the Downloadable File from a product"
5371
  msgstr ""
5372
 
5373
+ #: defaults.php:547
5374
  msgid ""
5375
  "Removed the Downloadable File %FileName% with File URL %FileUrl% from the "
5376
  "%ProductStatus% product %ProductTitle%. View the product: %EditorLinkProduct"
5377
  "%."
5378
  msgstr ""
5379
 
5380
+ #: defaults.php:548
5381
  msgid "User changed the name of a Downloadable File in a product"
5382
  msgstr ""
5383
 
5384
+ #: defaults.php:548
5385
  msgid ""
5386
  "Changed the name of a Downloadable File from %OldName% to %NewName% in "
5387
  "%ProductStatus% product %ProductTitle%. View the product: %EditorLinkProduct"
5388
  "%."
5389
  msgstr ""
5390
 
5391
+ #: defaults.php:549
5392
  msgid "User changed the URL of the Downloadable File in a product"
5393
  msgstr ""
5394
 
5395
+ #: defaults.php:549
5396
  msgid ""
5397
  "Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl"
5398
  "% in %ProductStatus% product %ProductTitle%. View the product: "
5399
  "%EditorLinkProduct%."
5400
  msgstr ""
5401
 
5402
+ #: defaults.php:550
5403
  msgid "User changed the catalog visibility of a product"
5404
  msgstr ""
5405
 
5406
+ #: defaults.php:550
5407
  msgid ""
5408
  "Changed the catalog visibility of the %ProductStatus% product %ProductTitle% "
5409
  "from %OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct"
5410
  "%."
5411
  msgstr ""
5412
 
5413
+ #: defaults.php:551
5414
  msgid "User changed the setting Featured Product of a product"
5415
  msgstr ""
5416
 
5417
+ #: defaults.php:551
5418
  msgid ""
5419
  "%Status% the setting Featured Product in the %ProductStatus% product "
5420
  "%ProductTitle%. View the product: %EditorLinkProduct%."
5421
  msgstr ""
5422
 
5423
+ #: defaults.php:552
5424
  msgid "User changed the Allow Backorders setting of a product"
5425
  msgstr ""
5426
 
5427
+ #: defaults.php:552
5428
  msgid ""
5429
  "Changed the Allow Backorders setting of the %ProductStatus% product "
5430
  "%ProductTitle% from %OldStatus% to %NewStatus%. View the product: "
5431
  "%EditorLinkProduct%."
5432
  msgstr ""
5433
 
5434
+ #: defaults.php:553
5435
  msgid "User added/removed products to upsell of a product"
5436
  msgstr ""
5437
 
5438
+ #: defaults.php:553
5439
  msgid ""
5440
  "%Status% the product %UpsellTitle% to Upsells in the %ProductStatus% product "
5441
  "%ProductTitle%. View the product: %EditorLinkProduct%."
5442
  msgstr ""
5443
 
5444
+ #: defaults.php:554
5445
  msgid "User added/removed products to cross-sells of a product"
5446
  msgstr ""
5447
 
5448
+ #: defaults.php:554
5449
  msgid ""
5450
  "%Status% the product %CrossSellTitle% to Cross-sells in the %ProductStatus% "
5451
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
5452
  msgstr ""
5453
 
5454
+ #: defaults.php:555
5455
  msgid "Added a new attribute of a product"
5456
  msgstr ""
5457
 
5458
+ #: defaults.php:555
5459
  msgid ""
5460
  "Added a new attribute called %AttributeName% with value %AttributeValue% in "
5461
  "the %ProductStatus% product %ProductTitle%. View the product: "
5462
  "%EditorLinkProduct%."
5463
  msgstr ""
5464
 
5465
+ #: defaults.php:556
5466
  msgid "Modified the value of an attribute of a product"
5467
  msgstr ""
5468
 
5469
+ #: defaults.php:556
5470
  msgid ""
5471
  "Modified the value of the attribute %AttributeName% from %OldValue% to "
5472
  "%NewValue% in the %ProductStatus% product %ProductTitle%. View the product: "
5473
  "%EditorLinkProduct%."
5474
  msgstr ""
5475
 
5476
+ #: defaults.php:557
5477
  msgid "Changed the name of an attribute of a product"
5478
  msgstr ""
5479
 
5480
+ #: defaults.php:557
5481
  msgid ""
5482
  "Changed the attribute's name from %OldValue% to %NewValue% in the "
5483
  "%ProductStatus% product %ProductTitle%. URL is: %ProductUrl%. View the "
5484
  "product: %EditorLinkProduct%."
5485
  msgstr ""
5486
 
5487
+ #: defaults.php:558
5488
  msgid "Deleted an attribute of a product"
5489
  msgstr ""
5490
 
5491
+ #: defaults.php:558
5492
  msgid ""
5493
  "Deleted the attribute %AttributeName% with value %AttributeValue% from "
5494
  "%ProductStatus% product %ProductTitle%. URL is: %ProductUrl%. View the "
5495
  "product: %EditorLinkProduct%."
5496
  msgstr ""
5497
 
5498
+ #: defaults.php:559
5499
  msgid "Set the attribute visibility of a product"
5500
  msgstr ""
5501
 
5502
+ #: defaults.php:559
5503
  msgid ""
5504
  "Set the attribute %AttributeName% as %AttributeVisiblilty% on product page "
5505
  "in %ProductStatus% product %ProductTitle%. View the product: "
5506
  "%EditorLinkProduct%."
5507
  msgstr ""
5508
 
5509
+ #: defaults.php:566
5510
  msgid "User changed the Weight Unit"
5511
  msgstr ""
5512
 
5513
+ #: defaults.php:566
5514
  msgid "Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce."
5515
  msgstr ""
5516
 
5517
+ #: defaults.php:567
5518
  msgid "User changed the Dimensions Unit"
5519
  msgstr ""
5520
 
5521
+ #: defaults.php:567
5522
  msgid "Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce."
5523
  msgstr ""
5524
 
5525
+ #: defaults.php:568
5526
  msgid "User changed the Base Location"
5527
  msgstr ""
5528
 
5529
+ #: defaults.php:568
5530
  msgid ""
5531
  "Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce."
5532
  msgstr ""
5533
 
5534
+ #: defaults.php:569
5535
  msgid "User Enabled/Disabled taxes"
5536
  msgstr ""
5537
 
5538
+ #: defaults.php:569
5539
  msgid "%Status% taxes in the WooCommerce store."
5540
  msgstr ""
5541
 
5542
+ #: defaults.php:570
5543
  msgid "User changed the currency"
5544
  msgstr ""
5545
 
5546
+ #: defaults.php:570
5547
  msgid ""
5548
  "Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce."
5549
  msgstr ""
5550
 
5551
+ #: defaults.php:571
5552
  msgid "User Enabled/Disabled the use of coupons during checkout"
5553
  msgstr ""
5554
 
5555
+ #: defaults.php:571
5556
  msgid "%Status% the use of coupons during checkout in WooCommerce."
5557
  msgstr ""
5558
 
5559
+ #: defaults.php:572
5560
  msgid "User Enabled/Disabled guest checkout"
5561
  msgstr ""
5562
 
5563
+ #: defaults.php:572
5564
  msgid "%Status% guest checkout in WooCommerce."
5565
  msgstr ""
5566
 
5567
+ #: defaults.php:573
5568
  msgid "User Enabled/Disabled cash on delivery"
5569
  msgstr ""
5570
 
5571
+ #: defaults.php:573
5572
  msgid "%Status% the option Cash on Delivery in WooCommerce."
5573
  msgstr ""
5574
 
5575
+ #: defaults.php:574
5576
  msgid "User enabled a payment gateway"
5577
  msgstr ""
5578
 
5579
+ #: defaults.php:574
5580
  msgid "Enabled the payment gateway %GatewayName%."
5581
  msgstr ""
5582
 
5583
+ #: defaults.php:575
5584
  msgid "User disabled a payment gateway"
5585
  msgstr ""
5586
 
5587
+ #: defaults.php:575
5588
  msgid "Disabled the payment gateway %GatewayName%."
5589
  msgstr ""
5590
 
5591
+ #: defaults.php:576
5592
  msgid "User modified a payment gateway"
5593
  msgstr ""
5594
 
5595
+ #: defaults.php:576
5596
  msgid "Modified the payment gateway %GatewayName%."
5597
  msgstr ""
5598
 
5599
+ #: defaults.php:577
5600
  msgid "User modified prices with tax option"
5601
  msgstr ""
5602
 
5603
+ #: defaults.php:577
5604
  msgid "Set the option that prices are %TaxStatus% of tax."
5605
  msgstr ""
5606
 
5607
+ #: defaults.php:578
5608
  msgid "User modified tax calculation base"
5609
  msgstr ""
5610
 
5611
+ #: defaults.php:578
5612
  msgid "Set the setting Calculate tax based on to %Setting%."
5613
  msgstr ""
5614
 
5615
+ #: defaults.php:579
5616
  msgid "User modified shipping tax class"
5617
  msgstr ""
5618
 
5619
+ #: defaults.php:579
5620
  msgid "Set the Shipping tax class to %Setting%."
5621
  msgstr ""
5622
 
5623
+ #: defaults.php:580
5624
  msgid "User enabled/disabled rounding of tax"
5625
  msgstr ""
5626
 
5627
+ #: defaults.php:580
5628
  msgid "%Status% rounding of tax at subtotal level."
5629
  msgstr ""
5630
 
5631
+ #: defaults.php:581
5632
  msgid "User modified a shipping zone"
5633
  msgstr ""
5634
 
5635
+ #: defaults.php:581
5636
  msgid "%ShippingZoneStatus% the shipping zone %ShippingZoneName%."
5637
  msgstr ""
5638
 
5639
+ #: defaults.php:582
5640
  msgid "User created a new product category"
5641
  msgstr ""
5642
 
5643
+ #: defaults.php:582
5644
  msgid ""
5645
  "Created a new product category called %CategoryName% in WooCommerce. Product "
5646
  "category slug is %Slug%."
5647
  msgstr ""
5648
 
5649
+ #: defaults.php:583
5650
  msgid "User deleted a product category"
5651
  msgstr ""
5652
 
5653
+ #: defaults.php:583
5654
  msgid ""
5655
  "Deleted the product category called %CategoryName% in WooCommerce. Product "
5656
  "category slug was %CategorySlug%."
5657
  msgstr ""
5658
 
5659
+ #: defaults.php:584
5660
  msgid "User changed the slug of a product category"
5661
  msgstr ""
5662
 
5663
+ #: defaults.php:584
5664
  msgid ""
5665
  "Changed the Slug of the product category %CategoryName% in WooCommerce from "
5666
  "%OldSlug% to %NewSlug%."
5667
  msgstr ""
5668
 
5669
+ #: defaults.php:585
5670
  msgid "User changed the parent category of a product category"
5671
  msgstr ""
5672
 
5673
+ #: defaults.php:585
5674
  msgid ""
5675
  "Changed the Parent Category of the product category %CategoryName% in "
5676
  "WooCommerce from %OldParentCat% to %NewParentCat%."
5677
  msgstr ""
5678
 
5679
+ #: defaults.php:586
5680
  msgid "User changed the display type of a product category"
5681
  msgstr ""
5682
 
5683
+ #: defaults.php:586
5684
  msgid ""
5685
  "Changed the Display Type of the product category %CategoryName% in "
5686
  "WooCommerce from %OldDisplayType% to %NewDisplayType%."
5687
  msgstr ""
5688
 
5689
+ #: defaults.php:587
5690
  msgid "User changed the name of a product category"
5691
  msgstr ""
5692
 
5693
+ #: defaults.php:587
5694
  msgid ""
5695
  "Changed the name of the product category %CategoryName% in WooCommerce from "
5696
  "%OldName% to %NewName%."
5697
  msgstr ""
5698
 
5699
+ #: defaults.php:588
5700
  msgid "User created a new attribute"
5701
  msgstr ""
5702
 
5703
+ #: defaults.php:588
5704
  msgid ""
5705
  "Created a new Attribute called %AttributeName% with slug %AttributeSlug% in "
5706
  "WooCommerce."
5707
  msgstr ""
5708
 
5709
+ #: defaults.php:589
5710
  msgid "User deleted an attribute"
5711
  msgstr ""
5712
 
5713
+ #: defaults.php:589
5714
  msgid ""
5715
  "Deleted the Attribute called %AttributeName% with Slug %AttributeSlug% from "
5716
  "WooCommerce."
5717
  msgstr ""
5718
 
5719
+ #: defaults.php:590
5720
  msgid "User changed the slug of an attribute"
5721
  msgstr ""
5722
 
5723
+ #: defaults.php:590
5724
  msgid ""
5725
  "Changed the Slug of the Attribute %AttributeName% in WooCommerce from "
5726
  "%OldSlug% to %NewSlug%."
5727
  msgstr ""
5728
 
5729
+ #: defaults.php:591
5730
  msgid "User changed the name of an attribute"
5731
  msgstr ""
5732
 
5733
+ #: defaults.php:591
5734
  msgid ""
5735
  "Changed the Name of the Attribute %AttributeName% in WooCommerce from "
5736
  "%OldName% to %NewName%."
5737
  msgstr ""
5738
 
5739
+ #: defaults.php:592
5740
  msgid "User changed the default sort order of an attribute"
5741
  msgstr ""
5742
 
5743
+ #: defaults.php:592
5744
  msgid ""
5745
  "Changed the Default Sort Order of the Attribute %AttributeName% in "
5746
  "WooCommerce from %OldSortOrder% to %NewSortOrder%."
5747
  msgstr ""
5748
 
5749
+ #: defaults.php:593
5750
  msgid "User enabled/disabled the option Enable Archives of an attribute"
5751
  msgstr ""
5752
 
5753
+ #: defaults.php:593
5754
  msgid ""
5755
  "%ArchivesStatus% the option Enable Archives in the Attribute %AttributeName% "
5756
  "in WooCommerce."
5757
  msgstr ""
5758
 
5759
+ #: defaults.php:594
5760
  msgid "User published a new coupon"
5761
  msgstr ""
5762
 
5763
+ #: defaults.php:594
5764
  msgid "Published a new coupon called %CouponName% in WooCommerce."
5765
  msgstr ""
5766
 
5767
+ #: defaults.php:595
5768
  msgid "User changed the discount type of a coupon"
5769
  msgstr ""
5770
 
5771
+ #: defaults.php:595
5772
  msgid ""
5773
  "Changed the Discount Type of the %CouponStatus% WooCommerce coupon "
5774
  "%CouponName% from %OldDiscountType% to %NewDiscountType%."
5775
  msgstr ""
5776
 
5777
+ #: defaults.php:596
5778
  msgid "User changed the coupon amount of a coupon"
5779
  msgstr ""
5780
 
5781
+ #: defaults.php:596
5782
  msgid ""
5783
  "Changed the Coupon Amount of the %CouponStatus% WooCommerce coupon "
5784
  "%CouponName% from %OldAmount% to %NewAmount%."
5785
  msgstr ""
5786
 
5787
+ #: defaults.php:597
5788
  msgid "User changed the coupon expire date of a coupon"
5789
  msgstr ""
5790
 
5791
+ #: defaults.php:597
5792
  msgid ""
5793
  "Changed the Coupon Expire Date of the %CouponStatus% WooCommerce coupon "
5794
  "%CouponName% from %OldDate% to %NewDate%."
5795
  msgstr ""
5796
 
5797
+ #: defaults.php:598
5798
  msgid "User changed the usage restriction settings of a coupon"
5799
  msgstr ""
5800
 
5801
+ #: defaults.php:598
5802
  msgid ""
5803
  "Changed the Usage Restriction settings of the %CouponStatus% WooCommerce "
5804
  "coupon %CouponName%."
5805
  msgstr ""
5806
 
5807
+ #: defaults.php:599
5808
  msgid "User changed the usage limits settings of a coupon"
5809
  msgstr ""
5810
 
5811
+ #: defaults.php:599
5812
  msgid ""
5813
  "Changed the Usage Limits settings of the %CouponStatus% WooCommerce coupon "
5814
  "%CouponName%."
5815
  msgstr ""
5816
 
5817
+ #: defaults.php:600
5818
  msgid "User changed the description of a coupon"
5819
  msgstr ""
5820
 
5821
+ #: defaults.php:600
5822
  msgid ""
5823
  "Changed the Description of the %CouponStatus% WooCommerce coupon %CouponName"
5824
  "%."
5825
  msgstr ""
5826
 
5827
+ #: defaults.php:601
5828
  msgid "User changed the status of a coupon"
5829
  msgstr ""
5830
 
5831
+ #: defaults.php:601
5832
  msgid ""
5833
  "Changed the Status of the WooCommerce coupon %CouponName% from %OldStatus% "
5834
  "to %NewStatus%."
5835
  msgstr ""
5836
 
5837
+ #: defaults.php:602
5838
  msgid "User renamed a WooCommerce coupon"
5839
  msgstr ""
5840
 
5841
+ #: defaults.php:602
5842
  msgid "Renamed the WooCommerce coupon %OldName% to %NewName%."
5843
  msgstr ""
5844
 
5845
+ #: defaults.php:603
5846
  msgid "A WooCommerce order has been placed"
5847
  msgstr ""
5848
 
5849
+ #: defaults.php:603
5850
  msgid ""
5851
  "A WooCommerce order %OrderTitle% has just been placed. %EditorLinkOrder%."
5852
  msgstr ""
5853
 
5854
+ #: defaults.php:604
5855
  msgid "WooCommerce order status changed"
5856
  msgstr ""
5857
 
5858
+ #: defaults.php:604
5859
  msgid ""
5860
  "Marked the WooCommerce order %OrderTitle% as %OrderStatus%. %EditorLinkOrder"
5861
  "%."
5862
  msgstr ""
5863
 
5864
+ #: defaults.php:605
5865
  msgid "User moved a WooCommerce order to trash"
5866
  msgstr ""
5867
 
5868
+ #: defaults.php:605
5869
  msgid "Moved the WooCommerce order %OrderTitle% to trash."
5870
  msgstr ""
5871
 
5872
+ #: defaults.php:606
5873
  msgid "User moved a WooCommerce order out of trash"
5874
  msgstr ""
5875
 
5876
+ #: defaults.php:606
5877
  msgid ""
5878
  "Moved the WooCommerce order %OrderTitle% out of trash. %EditorLinkOrder%."
5879
  msgstr ""
5880
 
5881
+ #: defaults.php:607
5882
  msgid "User permanently deleted a WooCommerce order"
5883
  msgstr ""
5884
 
5885
+ #: defaults.php:607
5886
  msgid "Permanently deleted the WooCommerce order %OrderTitle%."
5887
  msgstr ""
5888
 
5889
+ #: defaults.php:608
5890
  msgid "User edited a WooCommerce order"
5891
  msgstr ""
5892
 
5893
+ #: defaults.php:608
5894
  msgid "Edited the WooCommerce order %OrderTitle%. %EditorLinkOrder%."
5895
  msgstr ""
5896
 
5897
+ #: defaults.php:609
5898
  msgid "User refunded a WooCommerce order"
5899
  msgstr ""
5900
 
5901
+ #: defaults.php:609
5902
  msgid "Refunded the WooCommerce order %OrderTitle%. %EditorLinkOrder%."
5903
  msgstr ""
5904
 
5905
+ #: defaults.php:610
5906
+ msgid "User changed the billing address details"
5907
+ msgstr ""
5908
+
5909
+ #: defaults.php:610
5910
+ msgid ""
5911
+ "Changed the %AddressField% in the user's %TargetUsername% billing address."
5912
+ "%ChangeText%"
5913
+ msgstr ""
5914
+
5915
+ #: defaults.php:611
5916
+ msgid "User changed the shipping address details"
5917
+ msgstr ""
5918
+
5919
+ #: defaults.php:611
5920
+ msgid ""
5921
+ "Changed the %AddressField% in the user's %TargetUsername% shipping address."
5922
+ "%ChangeText%"
5923
+ msgstr ""
5924
+
5925
+ #: defaults.php:618
5926
  msgid "User changed title of a SEO post"
5927
  msgstr ""
5928
 
5929
+ #: defaults.php:618
5930
  msgid ""
5931
  "Changed the SEO title of the %PostStatus% %PostType%%ReportText%.%ChangeText"
5932
  "% %EditorLinkPost%."
5933
  msgstr ""
5934
 
5935
+ #: defaults.php:619
5936
  msgid "User changed the meta description of a SEO post"
5937
  msgstr ""
5938
 
5939
+ #: defaults.php:619
5940
  msgid ""
5941
  "Changed the Meta description of the %PostStatus% %PostType% titled %PostTitle"
5942
  "%%ReportText%.%ChangeText% %EditorLinkPost%."
5943
  msgstr ""
5944
 
5945
+ #: defaults.php:620
5946
  msgid ""
5947
  "User changed setting to allow search engines to show post in search results "
5948
  "of a SEO post"
5949
  msgstr ""
5950
 
5951
+ #: defaults.php:620
5952
  msgid ""
5953
  "Changed the setting to allow search engines to show post in search results "
5954
  "from %OldStatus% to %NewStatus% in the %PostStatus% %PostType% titled "
5955
  "%PostTitle%. %EditorLinkPost%."
5956
  msgstr ""
5957
 
5958
+ #: defaults.php:621
5959
  msgid ""
5960
  "User Enabled/Disabled the option for search engine to follow links of a SEO "
5961
  "post"
5962
  msgstr ""
5963
 
5964
+ #: defaults.php:621
5965
  msgid ""
5966
  "%NewStatus% the option for search engine to follow links in the %PostType% "
5967
  "titled %PostTitle%. %EditorLinkPost%."
5968
  msgstr ""
5969
 
5970
+ #: defaults.php:622
5971
  msgid "User set the meta robots advanced setting of a SEO post"
5972
  msgstr ""
5973
 
5974
+ #: defaults.php:622
5975
  msgid ""
5976
  "Set the Meta Robots Advanced setting to %NewStatus% in the %PostStatus% "
5977
  "%PostType% titled %PostTitle%. %EditorLinkPost%."
5978
  msgstr ""
5979
 
5980
+ #: defaults.php:623
5981
  msgid "User changed the canonical URL of a SEO post"
5982
  msgstr ""
5983
 
5984
+ #: defaults.php:623
5985
  msgid ""
5986
  "Changed the Canonical URL of the %PostStatus% %PostType% titled %PostTitle%"
5987
  "%ReportText%.%ChangeText% %EditorLinkPost%."
5988
  msgstr ""
5989
 
5990
+ #: defaults.php:624
5991
  msgid "User changed the focus keyword of a SEO post"
5992
  msgstr ""
5993
 
5994
+ #: defaults.php:624
5995
  msgid ""
5996
  "Changed the focus keyword of the %PostStatus% %PostType% titled %PostTitle% "
5997
  "from %old_keywords% to %new_keywords%. %EditorLinkPost%."
5998
  msgstr ""
5999
 
6000
+ #: defaults.php:625
6001
  msgid "User Enabled/Disabled the option Cornerston Content of a SEO post"
6002
  msgstr ""
6003
 
6004
+ #: defaults.php:625
6005
  msgid ""
6006
  "%Status% the option Cornerston Content on the %PostStatus% %PostType% titled "
6007
  "%PostTitle%. %EditorLinkPost%."
6008
  msgstr ""
6009
 
6010
+ #: defaults.php:626
6011
  msgid "User changed the Title Separator setting"
6012
  msgstr ""
6013
 
6014
+ #: defaults.php:626
6015
  msgid ""
6016
  "Changed the Title Separator from %old% to %new% in the Yoast SEO plugin "
6017
  "settings."
6018
  msgstr ""
6019
 
6020
+ #: defaults.php:627
6021
  msgid "User changed the Homepage Title setting"
6022
  msgstr ""
6023
 
6024
+ #: defaults.php:627
6025
  msgid ""
6026
  "Changed the Homepage Title%ReportText% in the Yoast SEO plugin settings."
6027
  "%ChangeText%"
6028
  msgstr ""
6029
 
6030
+ #: defaults.php:628
6031
  msgid "User changed the Homepage Meta description setting"
6032
  msgstr ""
6033
 
6034
+ #: defaults.php:628
6035
  msgid ""
6036
  "Changed the Homepage Meta description%ReportText% in the Yoast SEO plugin "
6037
  "settings.%ChangeText%"
6038
  msgstr ""
6039
 
6040
+ #: defaults.php:629
6041
  msgid "User changed the Company or Person setting"
6042
  msgstr ""
6043
 
6044
+ #: defaults.php:629
6045
  msgid ""
6046
  "Changed the Company or Person setting from %old% to %new% in the YOAST SEO "
6047
  "plugin settings."
6048
  msgstr ""
6049
 
6050
+ #: defaults.php:630
6051
  msgid ""
6052
  "User Enabled/Disabled the option Show Posts/Pages in Search Results in the "
6053
  "Yoast SEO plugin settings"
6054
  msgstr ""
6055
 
6056
+ #: defaults.php:630
6057
  msgid ""
6058
  "%Status% the option Show %SEOPostType% in Search Results in the Yoast SEO "
6059
  "plugin settings."
6060
  msgstr ""
6061
 
6062
+ #: defaults.php:631
6063
  msgid ""
6064
  "User changed the Posts/Pages title template in the Yoast SEO plugin settings"
6065
  msgstr ""
6066
 
6067
+ #: defaults.php:631
6068
  msgid ""
6069
  "Changed the %SEOPostType% title template from %old% to %new% in the Yoast "
6070
  "SEO plugin settings."
6071
  msgstr ""
6072
 
6073
+ #: defaults.php:632
6074
  msgid "User Enabled/Disabled SEO analysis in the Yoast SEO plugin settings"
6075
  msgstr ""
6076
 
6077
+ #: defaults.php:632
6078
  msgid "%Status% SEO analysis in the Yoast SEO plugin settings."
6079
  msgstr ""
6080
 
6081
+ #: defaults.php:633
6082
  msgid ""
6083
  "User Enabled/Disabled readability analysis in the Yoast SEO plugin settings"
6084
  msgstr ""
6085
 
6086
+ #: defaults.php:633
6087
  msgid "%Status% Readability analysis in the Yoast SEO plugin settings."
6088
  msgstr ""
6089
 
6090
+ #: defaults.php:634
6091
  msgid ""
6092
  "User Enabled/Disabled cornerstone content in the Yoast SEO plugin settings"
6093
  msgstr ""
6094
 
6095
+ #: defaults.php:634
6096
  msgid "%Status% Cornerstone content in the Yoast SEO plugin settings."
6097
  msgstr ""
6098
 
6099
+ #: defaults.php:635
6100
  msgid ""
6101
  "User Enabled/Disabled the text link counter in the Yoast SEO plugin settings"
6102
  msgstr ""
6103
 
6104
+ #: defaults.php:635
6105
  msgid "%Status% the Text link counter in the Yoast SEO plugin settings."
6106
  msgstr ""
6107
 
6108
+ #: defaults.php:636
6109
  msgid "User Enabled/Disabled XML sitemaps in the Yoast SEO plugin settings"
6110
  msgstr ""
6111
 
6112
+ #: defaults.php:636
6113
  msgid "%Status% XML Sitemaps in the Yoast SEO plugin settings."
6114
  msgstr ""
6115
 
6116
+ #: defaults.php:637
6117
  msgid "User Enabled/Disabled ryte integration in the Yoast SEO plugin settings"
6118
  msgstr ""
6119
 
6120
+ #: defaults.php:637
6121
  msgid "%Status% Ryte Integration in the Yoast SEO plugin settings."
6122
  msgstr ""
6123
 
6124
+ #: defaults.php:638
6125
  msgid ""
6126
  "User Enabled/Disabled the admin bar menu in the Yoast SEO plugin settings"
6127
  msgstr ""
6128
 
6129
+ #: defaults.php:638
6130
  msgid "%Status% the Admin bar menu in the Yoast SEO plugin settings."
6131
  msgstr ""
6132
 
6133
+ #: defaults.php:639
6134
  msgid ""
6135
  "User changed the Posts/Pages meta description template in the Yoast SEO "
6136
  "plugin settings"
6137
  msgstr ""
6138
 
6139
+ #: defaults.php:639
6140
  msgid ""
6141
  "Changed the %SEOPostType% meta description template from %old% to %new% in "
6142
  "the Yoast SEO plugin settings."
6143
  msgstr ""
6144
 
6145
+ #: defaults.php:640
6146
  msgid ""
6147
  "User set the option Date in Snippet Preview for Posts/Pages in the Yoast SEO "
6148
  "plugin settings"
6149
  msgstr ""
6150
 
6151
+ #: defaults.php:640
6152
  msgid ""
6153
  "%Status% the option Date in Snippet Preview for %SEOPostType% in the Yoast "
6154
  "SEO plugin settings."
6155
  msgstr ""
6156
 
6157
+ #: defaults.php:641
6158
  msgid ""
6159
  "User set the option Yoast SEO Meta Box for Posts/Pages in the Yoast SEO "
6160
  "plugin settings"
6161
  msgstr ""
6162
 
6163
+ #: defaults.php:641
6164
  msgid ""
6165
  "%Status% the option Yoast SEO Meta Box for %SEOPostType% in the Yoast SEO "
6166
  "plugin settings."
6167
  msgstr ""
6168
 
6169
+ #: defaults.php:642
6170
  msgid ""
6171
  "User Enabled/Disabled the advanced settings for authors in the Yoast SEO "
6172
  "plugin settings"
6173
  msgstr ""
6174
 
6175
+ #: defaults.php:642
6176
  msgid "%Status% the advanced settings for authors in the Yoast SEO settings."
6177
  msgstr ""
6178
 
6179
  #. translators: Username
6180
+ #: wp-security-audit-log.php:462 wp-security-audit-log.php:489
6181
  #, php-format
6182
  msgid "Hey %1$s"
6183
  msgstr ""
6184
 
6185
+ #: wp-security-audit-log.php:463
6186
  msgid ""
6187
  "Never miss an important update! Opt-in to our security and feature updates "
6188
  "notifications, and non-sensitive diagnostic tracking with freemius.com."
6189
  msgstr ""
6190
 
6191
+ #: wp-security-audit-log.php:464 wp-security-audit-log.php:492
6192
  msgid "Note: "
6193
  msgstr ""
6194
 
6195
+ #: wp-security-audit-log.php:465 wp-security-audit-log.php:493
6196
  msgid "NO AUDIT LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS."
6197
  msgstr ""
6198
 
6199
  #. translators: 1: Plugin name. 2: Freemius link.
6200
+ #: wp-security-audit-log.php:491
6201
  #, php-format
6202
  msgid ""
6203
  "Please help us improve %2$s! If you opt-in, some non-sensitive data about "
6206
  msgstr ""
6207
 
6208
  #. translators: Plugin name
6209
+ #: wp-security-audit-log.php:513
6210
  #, php-format
6211
  msgid ""
6212
  "Get a free 7-day trial of the premium edition of %s. No credit card "
6214
  msgstr ""
6215
 
6216
  #. Plugin Name of the plugin/theme
6217
+ #: wp-security-audit-log.php:514
6218
  msgid "WP Security Audit Log"
6219
  msgstr ""
6220
 
6221
+ #: wp-security-audit-log.php:518
6222
  msgid "Start free trial"
6223
  msgstr ""
6224
 
6225
+ #: wp-security-audit-log.php:585
6226
+ #, php-format
6227
+ msgid ""
6228
+ "The license is limited to %s sub-sites. You need to upgrade your license to "
6229
+ "cover all the sub-sites on this network."
6230
+ msgstr ""
6231
+
6232
+ #: wp-security-audit-log.php:680
6233
  msgid ""
6234
  "Error: You do not have sufficient permissions to disable this custom field."
6235
  msgstr ""
6236
 
6237
+ #: wp-security-audit-log.php:716
6238
  msgid "Error: You do not have sufficient permissions to disable this alert."
6239
  msgstr ""
6240
 
6241
+ #: wp-security-audit-log.php:840
6242
  #, php-format
6243
  msgid ""
6244
  "You are using a version of PHP that is older than %s, which is no longer "
6245
  "supported."
6246
  msgstr ""
6247
 
6248
+ #: wp-security-audit-log.php:842
6249
  msgid ""
6250
  "Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
6251
  "\">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you "
6252
  "are using."
6253
  msgstr ""
6254
 
6255
+ #: wp-security-audit-log.php:844
6256
  msgid ""
6257
  "The WP Security Audit Log plugin is a multisite network tool, so it has to "
6258
  "be activated at network level."
6259
  msgstr ""
6260
 
6261
+ #: wp-security-audit-log.php:846
6262
  msgid "Redirect me to the network dashboard"
6263
  msgstr ""
6264
 
6265
+ #: wp-security-audit-log.php:929
6266
  msgid ""
6267
  "This plugin uses 3 tables in the WordPress database to store the activity "
6268
  "log and settings. It seems that these tables were not created."
6269
  msgstr ""
6270
 
6271
+ #: wp-security-audit-log.php:931
6272
  msgid ""
6273
  "This could happen because the database user does not have the right "
6274
  "privileges to create the tables in the database. We recommend you to update "
6275
  "the privileges and try enabling the plugin again."
6276
  msgstr ""
6277
 
6278
+ #: wp-security-audit-log.php:933
6279
  #, php-format
6280
  msgid ""
6281
  "If after doing so you still have issues, please send us an email on %s for "
6282
  "assistance."
6283
  msgstr ""
6284
 
6285
+ #: wp-security-audit-log.php:933
6286
  msgid "support@wpsecurityauditlog.com"
6287
  msgstr ""
6288
 
6289
+ #: wp-security-audit-log.php:1584
6290
  msgid "Every 6 hours"
6291
  msgstr ""
6292
 
6293
+ #: wp-security-audit-log.php:1588
6294
  msgid "Every 45 minutes"
6295
  msgstr ""
6296
 
6297
+ #: wp-security-audit-log.php:1592
6298
  msgid "Every 30 minutes"
6299
  msgstr ""
6300
 
6301
+ #: wp-security-audit-log.php:1596
6302
  msgid "Every 15 minutes"
6303
  msgstr ""
6304
 
6305
+ #: wp-security-audit-log.php:1600
6306
  msgid "Every 10 minutes"
6307
  msgstr ""
6308
 
6309
+ #: wp-security-audit-log.php:1604
6310
  msgid "Every 1 minute"
6311
  msgstr ""
6312
 
6313
  #. translators: 1. Deprecated method name 2. Version since deprecated
6314
+ #: wp-security-audit-log.php:1618
6315
  #, php-format
6316
  msgid "Method %1$s is deprecated since version %2$s!"
6317
  msgstr ""
readme.txt CHANGED
@@ -3,10 +3,10 @@ Contributors: WPWhiteSecurity, robert681
3
  Plugin URI: http://www.wpsecurityauditlog.com
4
  License: GPLv3
5
  License URI: http://www.gnu.org/licenses/gpl.html
6
- Tags: wordpress security plugin, wordpress security audit log, audit log, activity logs, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, wordpress security monitor, wordpress admin, wordpress admin monitoring, user activity, admin, multisite, dashboard, notification, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
7
  Requires at least: 3.6
8
- Tested up to: 5.1.0
9
- Stable tag: 3.3.1.2
10
  Requires PHP: 5.4.43
11
 
12
  An easy to use & comprehensive WordPress activity log plugin to log all changes on WordPress sites & multisite networks.
@@ -75,11 +75,12 @@ Refer to [WordPress Activity Log Events](https://www.wpsecurityauditlog.com/supp
75
  * Log off any user with just a click,
76
  * Generate HTML and CSV reports,
77
  * Export the activity log in CSV (ideal for integrations),
78
- * Get instantly notified via email of important changes,
 
79
  * Search the activity log using text-based searches,
80
  * Use built-in filters to fine tune the searches,
81
  * Store activity log in an external database to improve security,
82
- * Integrate & centralize the WordPress activity log in syslog, Papertrail and other third party log management solutions,
83
  * Configure archiving and mirroring of logs.
84
 
85
  See our [premium features page](https://www.wpsecurityauditlog.com/premium-features/) for more detailed information.
@@ -195,19 +196,42 @@ Please refer to our [Support & Documentation pages](https://www.wpsecurityauditl
195
 
196
  == Changelog ==
197
 
198
- Release notes: [Activity Log Coverage of WooCommerce Variable Products](https://www.wpsecurityauditlog.com/releases/support-woocommerce-variable-products)
199
 
200
- = 3.3.1.2 (2019-02-25) =
201
 
202
- * **New Activity Log Events for WooCommerce**
203
- * Event ID 9078: Changed the option to include / exclude taxes in product prices.
204
- * Event ID 9079: Changed the option on what type of shipping to calculate tax on.
205
- * Event ID 9080: Changed the shipping tax class.
206
- * Event ID 9081: Enabled / Disabled the rounding of the sub total.
207
- * Event ID 9082: Added / Deleted / Modified a shipping zone on WooCommerce.
 
 
 
 
208
 
209
  * **Plugin Improvements**
210
- * Better handling of plugin activation on multisite - plugin can only be activated from the network dashboard.
 
 
 
 
 
 
 
 
 
211
 
212
  * **Bug Fixes**
213
- * Updated Freemius SDK which includes a security fix.
 
 
 
 
 
 
 
 
 
 
3
  Plugin URI: http://www.wpsecurityauditlog.com
4
  License: GPLv3
5
  License URI: http://www.gnu.org/licenses/gpl.html
6
+ Tags: wordpress security plugin, wordpress security audit log, audit log, activity logs, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, wordpress security monitor, wordpress admin, wordpress admin monitoring, user activity, admin, multisite, dashboard, notification, wordpress monitoring, email notification, wordpress email alerts, SMS messages, tracking, user tracking, user activity report, wordpress audit trail
7
  Requires at least: 3.6
8
+ Tested up to: 5.1.1
9
+ Stable tag: 3.4
10
  Requires PHP: 5.4.43
11
 
12
  An easy to use & comprehensive WordPress activity log plugin to log all changes on WordPress sites & multisite networks.
75
  * Log off any user with just a click,
76
  * Generate HTML and CSV reports,
77
  * Export the activity log in CSV (ideal for integrations),
78
+ * Get notified via email of important changes,
79
+ * Get instant SMS message notifications of critical site changes,
80
  * Search the activity log using text-based searches,
81
  * Use built-in filters to fine tune the searches,
82
  * Store activity log in an external database to improve security,
83
+ * Mirror the WordPress activity logs to Slack, Papertrail, Syslog and other central log management and collaboration solutions,
84
  * Configure archiving and mirroring of logs.
85
 
86
  See our [premium features page](https://www.wpsecurityauditlog.com/premium-features/) for more detailed information.
196
 
197
  == Changelog ==
198
 
199
+ Release notes: [Announcing SMS Notifications for the WordPress audit logs](https://www.wpsecurityauditlog.com/releases/update-3-4-sms-notifications-integration/)
200
 
201
+ = 3.4 (2019-04-03) =
202
 
203
+ * **New Features**
204
+ * [SMS notifications (integration with Twilio)](https://www.wpsecurityauditlog.com/support-documentation/configure-plugin-send-sms/) for the WordPress audit logs.
205
+ * Integration with Bit.ly to shorten URL in SMSs.
206
+ * Added buttons to test email and SMS notifications.
207
+ * Support for User Switching plugin.
208
+
209
+ * **New Activity Log Event IDs**
210
+ * Event ID 1008: user logged in as another user.
211
+ * Event ID 9083: user changed the billing address (WooCommerce).
212
+ * Event ID 9084: user changed the shipping address (WooCommerce).
213
 
214
  * **Plugin Improvements**
215
+ * Added more pre-configured SMS & email notifications.
216
+ * Improved all sensors to also detect changes that are not done via the dashboard.
217
+ * Optimized some metadata database queries (reduced qeuries by 75%).
218
+ * Improved the content sensor (better detection of content changes).
219
+ * Optimized the database query that fetches list of logged in users.
220
+ * Removed email notifications wizard.
221
+ * Standardized all tabs and titles in the [Emails & SMS Notifications](https://www.wpsecurityauditlog.com/premium-features/email-notifications-wordpress-activity-log/) feature.
222
+ * Improved the help text in the Emails & SMS Notifications feature.
223
+ * Removed the limit of 5 criteria in the notifications trigger builder.
224
+ * Removed declaration of emails' Mime-type - this is automatically set so there is no need for it.
225
 
226
  * **Bug Fixes**
227
+ * WooCommerce order name was not reported in event ID 9040 (changed order detail) in some edge cases.
228
+ * Maximum execution time configured in the [WordPress activity log reports](https://www.wpsecurityauditlog.com/premium-features/reports-wordpress-activity-log/) engine now is only used when generating a report.
229
+ * CSV reports were not being generated.
230
+ * Audit trail auto refresh was not working when using infinite scroll viewer option.
231
+ * Plugin reporting event 9032 (disabled use of WooCommerce coupons) by mistake.
232
+ * Event IDs 2046 and 2051 were not being reported when files were modified via the editors.
233
+ * Plugin reporting event 2002 when there were changes in a post's Yoast SEO metabox.
234
+ * Removed all reference to obsolete plugin setting: wsal-archiving-date-e.
235
+ * Admins on multisite child sites could see the activity logs of other sites.
236
+ * Event ID 2073 (post submitted for review) was not being reported in Gutenberg.
237
+ * Event 2074 (scheduled post) was not being reported in Gutenberg.
sdk/freemius/includes/class-freemius.php CHANGED
@@ -11351,7 +11351,7 @@
11351
  );
11352
 
11353
  if ( false !== $error ) {
11354
- $result['error'] = $error;
11355
  } else {
11356
  $result['next_page'] = $next_page;
11357
  }
11351
  );
11352
 
11353
  if ( false !== $error ) {
11354
+ $result['error'] = $this->apply_filters( 'opt_in_error_message', $error );
11355
  } else {
11356
  $result['next_page'] = $next_page;
11357
  }
wp-security-audit-log.php CHANGED
@@ -4,7 +4,7 @@
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: 3.3.1.2
8
  * Text Domain: wp-security-audit-log
9
  * Author URI: http://www.wpwhitesecurity.com/
10
  * License: GPL2
@@ -54,11 +54,11 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
54
  *
55
  * @var string
56
  */
57
- public $version = '3.3.1.2';
58
 
59
  // Plugin constants.
60
  const PLG_CLS_PRFX = 'WSAL_';
61
- const MIN_PHP_VERSION = '5.3.0';
62
  const OPT_PRFX = 'wsal-';
63
 
64
  /**
@@ -238,7 +238,7 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
238
  register_activation_hook( __FILE__, array( $this, 'Install' ) );
239
 
240
  // Listen for init event.
241
- add_action( 'init', array( $this, 'init' ) );
242
 
243
  // Listen for cleanup event.
244
  add_action( 'wsal_cleanup', array( $this, 'CleanUp' ) );
@@ -284,6 +284,8 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
284
  wsal_freemius()->add_filter( 'show_admin_notice', array( $this, 'freemius_show_admin_notice' ), 10, 2 );
285
  wsal_freemius()->add_filter( 'show_delegation_option', '__return_false' );
286
  wsal_freemius()->add_filter( 'enable_per_site_activation', '__return_false' );
 
 
287
  }
288
 
289
  /**
@@ -397,6 +399,7 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
397
  'target' => array(),
398
  ),
399
  'br' => array(),
 
400
  'em' => array(),
401
  'strong' => array(),
402
  'p' => array(
@@ -567,6 +570,23 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
567
  return false;
568
  }
569
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  /**
571
  * Start to trigger the events after installation.
572
  *
@@ -1305,7 +1325,7 @@ if ( ! function_exists( 'wsal_freemius' ) ) {
1305
  * Set a global option.
1306
  *
1307
  * @param string $option - Option name.
1308
- * @param mixed $value - New value for option.
1309
  * @param string $prefix - (Optional) A prefix used before option name.
1310
  */
1311
  public function SetGlobalOption( $option, $value, $prefix = self::OPT_PRFX ) {
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: 3.4
8
  * Text Domain: wp-security-audit-log
9
  * Author URI: http://www.wpwhitesecurity.com/
10
  * License: GPL2
54
  *
55
  * @var string
56
  */
57
+ public $version = '3.4';
58
 
59
  // Plugin constants.
60
  const PLG_CLS_PRFX = 'WSAL_';
61
+ const MIN_PHP_VERSION = '5.5.0';
62
  const OPT_PRFX = 'wsal-';
63
 
64
  /**
238
  register_activation_hook( __FILE__, array( $this, 'Install' ) );
239
 
240
  // Listen for init event.
241
+ add_action( 'init', array( $this, 'init' ), 5 );
242
 
243
  // Listen for cleanup event.
244
  add_action( 'wsal_cleanup', array( $this, 'CleanUp' ) );
284
  wsal_freemius()->add_filter( 'show_admin_notice', array( $this, 'freemius_show_admin_notice' ), 10, 2 );
285
  wsal_freemius()->add_filter( 'show_delegation_option', '__return_false' );
286
  wsal_freemius()->add_filter( 'enable_per_site_activation', '__return_false' );
287
+ wsal_freemius()->add_filter( 'show_trial', '__return_false' );
288
+ wsal_freemius()->add_filter( 'opt_in_error_message', array( $this, 'limited_license_activation_error' ), 10, 1 );
289
  }
290
 
291
  /**
399
  'target' => array(),
400
  ),
401
  'br' => array(),
402
+ 'code' => array(),
403
  'em' => array(),
404
  'strong' => array(),
405
  'p' => array(
570
  return false;
571
  }
572
 
573
+ /**
574
+ * Limited License Activation Error.
575
+ *
576
+ * @param string $error - Error Message.
577
+ * @return string
578
+ */
579
+ public function limited_license_activation_error( $error ) {
580
+ $site_count = null;
581
+ preg_match( '!\d+!', $error, $site_count );
582
+
583
+ if ( ! empty( $site_count[0] ) ) {
584
+ /* Translators: Number of sites */
585
+ $error = sprintf( esc_html__( 'The license is limited to %s sub-sites. You need to upgrade your license to cover all the sub-sites on this network.', 'wp-security-audit-log' ), $site_count[0] );
586
+ }
587
+ return $error;
588
+ }
589
+
590
  /**
591
  * Start to trigger the events after installation.
592
  *
1325
  * Set a global option.
1326
  *
1327
  * @param string $option - Option name.
1328
+ * @param mixed $value - New value for option.
1329
  * @param string $prefix - (Optional) A prefix used before option name.
1330
  */
1331
  public function SetGlobalOption( $option, $value, $prefix = self::OPT_PRFX ) {