WP Security Audit Log - Version 3.3

Version Description

(2018-12-13) =

Release Notes: Slack Support & New External Connections UI

  • New Features

    • Slack support - mirror WordPress activity log for Slack.
    • New UI and totally revamped the external databases & services connections module.
    • Ability to mirror the WordPress activity logs to multiple destinations.
  • Improvements

    • Maximum file size for WordPress file integrity scans is now configurable.
    • Updated the Freemius SDK to 2.2.2 (addresses a MainWP conflict fix).
    • Plugin access can now be restricted to super administrators only on a multisite network.
    • Multiple scan started / stopped events per directory merged into one.
    • Added 1 and 4 hours option to terminate idle users sessions setting.
    • Plugin now always keeps a log a post updates, even if update is not done via the editor.
    • Better handling of terminated users sessions (in hung state, blocking legit logins).
    • Access to plugin now can be restricted to super admin role on multisite networks.
    • User info in daily activity log summary email is now variable - the same as configured in the plugin settings.
    • Limited Freemius user messages to users who can view & manage the plugin.
    • Addded support for a dot in the time format (e.g: d.-m-Y G:i)
    • Bug Fixes
    • Better handling of data from the REST API Support ticket.
    • Fixed: two daily activity log emails were being sent instead of one.
    • Restricted the starter license (had access to some pro features).
    • Fixed a number of minor warnings when running the plugin on PHP7.
    • Logins when using the Two-Factor plugin are now logged properly.
    • Fixed - first time setup wizard prompt not always showing.
Download this release

Release Info

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

Code changes from version 3.2.5 to 3.3

Files changed (62) hide show
  1. classes/Adapters/MySQL/ActiveRecordAdapter.php +8 -8
  2. classes/AlertManager.php +60 -8
  3. classes/Autoloader.php +1 -3
  4. classes/Connector/MySQLDB.php +16 -8
  5. classes/Connector/wp-db-custom.php +24 -23
  6. classes/Ref.php +4 -11
  7. classes/SensorManager.php +13 -3
  8. classes/Sensors/Comments.php +16 -21
  9. classes/Sensors/Content.php +56 -61
  10. classes/Sensors/FileChanges.php +22 -36
  11. classes/Sensors/LogInOut.php +64 -19
  12. classes/Sensors/Public.php +543 -0
  13. classes/Sensors/System.php +72 -251
  14. classes/Sensors/UserProfile.php +0 -26
  15. classes/Sensors/WooCommerce.php +1 -40
  16. classes/Settings.php +159 -3
  17. classes/SimpleProfiler.php +0 -48
  18. classes/ViewManager.php +2 -1
  19. classes/Views/AuditLog.php +1 -3
  20. classes/Views/Help.php +0 -2
  21. classes/Views/Licensing.php +1 -1
  22. classes/Views/Settings.php +76 -46
  23. classes/Views/ToggleAlerts.php +51 -4
  24. css/auditlog.css +0 -1
  25. css/dist/wsal-wizard.build.css +2 -0
  26. defaults.php +507 -505
  27. js/select2/LICENSE +18 -0
  28. js/select2/select2-bootstrap.css +87 -0
  29. js/select2/select2-spinner.gif +0 -0
  30. js/select2/select2.css +704 -0
  31. js/select2/select2.js +3508 -0
  32. js/select2/select2.min.js +23 -0
  33. js/select2/select2.png +0 -0
  34. js/select2/select2x2.png +0 -0
  35. languages/wp-security-audit-log.pot +1671 -3163
  36. readme.txt +32 -16
  37. sdk/freemius/assets/css/admin/deactivation-feedback.css +0 -1
  38. sdk/freemius/assets/css/admin/dialog-boxes.css +2 -2
  39. sdk/freemius/assets/css/admin/license-activation.css +0 -1
  40. sdk/freemius/assets/scss/_colors.scss +11 -0
  41. sdk/freemius/assets/scss/admin/_buttons.scss +28 -0
  42. sdk/freemius/assets/scss/admin/_subscription-cancellation.scss +30 -0
  43. sdk/freemius/assets/scss/admin/dialog-boxes.scss +3 -1
  44. sdk/freemius/assets/scss/admin/plugin-upgrade-notice.scss +8 -0
  45. sdk/freemius/includes/class-freemius.php +735 -217
  46. sdk/freemius/includes/class-fs-plugin-updater.php +312 -68
  47. sdk/freemius/includes/class-fs-storage.php +1 -0
  48. sdk/freemius/includes/entities/class-fs-plugin.php +22 -0
  49. sdk/freemius/includes/entities/class-fs-site.php +2 -0
  50. sdk/freemius/includes/fs-essential-functions.php +4 -2
  51. sdk/freemius/includes/fs-plugin-info-dialog.php +37 -7
  52. sdk/freemius/includes/i18n.php +3 -3
  53. sdk/freemius/includes/managers/class-fs-admin-menu-manager.php +12 -0
  54. sdk/freemius/includes/managers/class-fs-admin-notice-manager.php +43 -0
  55. sdk/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +2 -6
  56. sdk/freemius/includes/supplements/fs-essential-functions-2.2.1.php +45 -0
  57. sdk/freemius/languages/freemius-da_DK.mo +0 -0
  58. sdk/freemius/languages/freemius-da_DK.po +2431 -9
  59. sdk/freemius/languages/freemius-en.mo +0 -0
  60. sdk/freemius/languages/freemius-en.po +543 -428
  61. sdk/freemius/languages/freemius-es_ES.mo +0 -0
  62. sdk/freemius/languages/freemius-es_ES.po +189 -164
classes/Adapters/MySQL/ActiveRecordAdapter.php CHANGED
@@ -127,7 +127,7 @@ class WSAL_Adapters_MySQL_ActiveRecord implements WSAL_Adapters_ActiveRecordInte
127
  */
128
  public function IsInstalled() {
129
  $_wpdb = $this->connection;
130
- $sql = 'SHOW TABLES LIKE "' . $this->GetTable() . '"';
131
 
132
  // Table transient.
133
  $wsal_table_transient = 'wsal_' . strtolower( $this->GetTable() ) . '_status';
@@ -179,7 +179,7 @@ class WSAL_Adapters_MySQL_ActiveRecord implements WSAL_Adapters_ActiveRecordInte
179
 
180
  // Query table exists.
181
  $table_exists_query = 'SHOW TABLES LIKE "' . $this->GetTable() . '"';
182
- $result = $_wpdb->query( $table_exists_query );
183
  return $result;
184
  }
185
 
@@ -190,9 +190,9 @@ class WSAL_Adapters_MySQL_ActiveRecord implements WSAL_Adapters_ActiveRecordInte
190
  * @return integer|boolean - Either the number of modified/inserted rows or false on failure.
191
  */
192
  public function Save( $active_record ) {
193
- $_wpdb = $this->connection;
194
- $copy = $active_record;
195
- $data = array();
196
  $format = array();
197
 
198
  foreach ( $this->GetColumns() as $index => $key ) {
@@ -200,7 +200,7 @@ class WSAL_Adapters_MySQL_ActiveRecord implements WSAL_Adapters_ActiveRecordInte
200
  $_id_index = $index;
201
  }
202
 
203
- $val = $copy->$key;
204
  $deffmt = '%s';
205
  if ( is_int( $copy->$key ) ) {
206
  $deffmt = '%d';
@@ -239,8 +239,8 @@ class WSAL_Adapters_MySQL_ActiveRecord implements WSAL_Adapters_ActiveRecordInte
239
  */
240
  public function Load( $cond = '%d', $args = array( 1 ) ) {
241
  $_wpdb = $this->connection;
242
- $sql = $_wpdb->prepare( 'SELECT * FROM ' . $this->GetTable() . ' WHERE ' . $cond, $args );
243
- $data = $_wpdb->get_row( $sql, ARRAY_A );
244
  return $data;
245
  }
246
 
127
  */
128
  public function IsInstalled() {
129
  $_wpdb = $this->connection;
130
+ $sql = 'SHOW TABLES LIKE "' . $this->GetTable() . '"';
131
 
132
  // Table transient.
133
  $wsal_table_transient = 'wsal_' . strtolower( $this->GetTable() ) . '_status';
179
 
180
  // Query table exists.
181
  $table_exists_query = 'SHOW TABLES LIKE "' . $this->GetTable() . '"';
182
+ $result = $_wpdb->query( $table_exists_query );
183
  return $result;
184
  }
185
 
190
  * @return integer|boolean - Either the number of modified/inserted rows or false on failure.
191
  */
192
  public function Save( $active_record ) {
193
+ $_wpdb = $this->connection;
194
+ $copy = $active_record;
195
+ $data = array();
196
  $format = array();
197
 
198
  foreach ( $this->GetColumns() as $index => $key ) {
200
  $_id_index = $index;
201
  }
202
 
203
+ $val = $copy->$key;
204
  $deffmt = '%s';
205
  if ( is_int( $copy->$key ) ) {
206
  $deffmt = '%d';
239
  */
240
  public function Load( $cond = '%d', $args = array( 1 ) ) {
241
  $_wpdb = $this->connection;
242
+ $sql = $_wpdb->prepare( 'SELECT * FROM ' . $this->GetTable() . ' WHERE ' . $cond, $args );
243
+ $data = $_wpdb->get_row( $sql, ARRAY_A );
244
  return $data;
245
  }
246
 
classes/AlertManager.php CHANGED
@@ -14,6 +14,15 @@ final class WSAL_AlertManager {
14
  */
15
  protected $_alerts = array();
16
 
 
 
 
 
 
 
 
 
 
17
  /**
18
  * Array of loggers (WSAL_AbstractLogger).
19
  *
@@ -71,6 +80,17 @@ final class WSAL_AlertManager {
71
 
72
  add_action( 'shutdown', array( $this, '_CommitPipeline' ) );
73
  add_action( 'wsal_init', array( $this, 'schedule_log_events' ) );
 
 
 
 
 
 
 
 
 
 
 
74
  }
75
 
76
  /**
@@ -105,7 +125,8 @@ final class WSAL_AlertManager {
105
  * @param string $file Path to file.
106
  */
107
  public function AddFromFile( $file ) {
108
- $this->AddFromClass( $this->plugin->GetClassFileClassName( $file ) );
 
109
  }
110
 
111
  /**
@@ -248,7 +269,7 @@ final class WSAL_AlertManager {
248
  $this->Log( $type, $data );
249
  } elseif ( $_retry ) {
250
  // This is the last attempt at loading alerts from default file.
251
- $this->plugin->LoadDefaults();
252
  return $this->_CommitItem( $type, $data, $cond, false );
253
  } else {
254
  // In general this shouldn't happen, but it could, so we handle it here.
@@ -361,7 +382,11 @@ final class WSAL_AlertManager {
361
  * @return boolean True if enabled, false otherwise.
362
  */
363
  public function IsEnabled( $type ) {
364
- return ! in_array( $type, $this->GetDisabledAlerts() );
 
 
 
 
365
  }
366
 
367
  /**
@@ -446,15 +471,13 @@ final class WSAL_AlertManager {
446
  /**
447
  * Return alert given alert type.
448
  *
449
- * @param integer $type - Alert type.
450
  * @param mixed $default - Returned if alert is not found.
451
  * @return WSAL_Alert
452
  */
453
  public function GetAlert( $type, $default = null ) {
454
- foreach ( $this->_alerts as $alert ) {
455
- if ( $alert->type == $type ) {
456
- return $alert;
457
- }
458
  }
459
  return $default;
460
  }
@@ -468,6 +491,17 @@ final class WSAL_AlertManager {
468
  return $this->_alerts;
469
  }
470
 
 
 
 
 
 
 
 
 
 
 
 
471
  /**
472
  * Method: Returns array of alerts by category.
473
  *
@@ -790,4 +824,22 @@ final class WSAL_AlertManager {
790
  }
791
  return $admin_bar_event;
792
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
793
  }
14
  */
15
  protected $_alerts = array();
16
 
17
+ /**
18
+ * Array of Deprecated Events
19
+ *
20
+ * @since 3.3
21
+ *
22
+ * @var array
23
+ */
24
+ protected $deprecated_events = array();
25
+
26
  /**
27
  * Array of loggers (WSAL_AbstractLogger).
28
  *
80
 
81
  add_action( 'shutdown', array( $this, '_CommitPipeline' ) );
82
  add_action( 'wsal_init', array( $this, 'schedule_log_events' ) );
83
+
84
+ /**
85
+ * Filter: `wsal_deprecated_event_ids`
86
+ *
87
+ * Deprecated event ids filter.
88
+ *
89
+ * @since 3.3
90
+ *
91
+ * @param array $deprecated_events - Array of deprecated event ids.
92
+ */
93
+ $this->deprecated_events = apply_filters( 'wsal_deprecated_event_ids', array( 2004, 2005, 2006, 2007, 2009, 2013, 2015, 2018, 2020, 2022, 2026, 2028, 2059, 2060, 2061, 2064, 2066, 2069, 2075, 2087, 2102, 2103, 2113, 2114, 2115, 2116, 2117, 2118, 5020, 5026, 2107, 2003, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2056, 2057, 2058, 2063, 2067, 2068, 2070, 2072, 2076, 2088, 2104, 2105, 5021, 5027, 2108 ) );
94
  }
95
 
96
  /**
125
  * @param string $file Path to file.
126
  */
127
  public function AddFromFile( $file ) {
128
+ $file = basename( $file, '.php' );
129
+ $this->AddFromClass( WSAL_CLASS_PREFIX . 'Loggers_' . $file );
130
  }
131
 
132
  /**
269
  $this->Log( $type, $data );
270
  } elseif ( $_retry ) {
271
  // This is the last attempt at loading alerts from default file.
272
+ $this->plugin->load_defaults();
273
  return $this->_CommitItem( $type, $data, $cond, false );
274
  } else {
275
  // In general this shouldn't happen, but it could, so we handle it here.
382
  * @return boolean True if enabled, false otherwise.
383
  */
384
  public function IsEnabled( $type ) {
385
+ $disabled_events = $this->GetDisabledAlerts();
386
+ if ( 'no' !== $this->plugin->GetGlobalOption( 'disable-visitor-events', 'no' ) ) {
387
+ $disabled_events = array_merge( $disabled_events, $this->get_public_events() );
388
+ }
389
+ return ! in_array( $type, $disabled_events, true );
390
  }
391
 
392
  /**
471
  /**
472
  * Return alert given alert type.
473
  *
474
+ * @param integer $type - Alert type.
475
  * @param mixed $default - Returned if alert is not found.
476
  * @return WSAL_Alert
477
  */
478
  public function GetAlert( $type, $default = null ) {
479
+ if ( isset( $this->_alerts[ $type ] ) ) {
480
+ return $this->_alerts[ $type ];
 
 
481
  }
482
  return $default;
483
  }
491
  return $this->_alerts;
492
  }
493
 
494
+ /**
495
+ * Returns all deprecated events.
496
+ *
497
+ * @since 3.3
498
+ *
499
+ * @return WSAL_Alert[]
500
+ */
501
+ public function get_deprecated_events() {
502
+ return $this->deprecated_events;
503
+ }
504
+
505
  /**
506
  * Method: Returns array of alerts by category.
507
  *
824
  }
825
  return $admin_bar_event;
826
  }
827
+
828
+ /**
829
+ * Return Public Event IDs.
830
+ *
831
+ * @since 3.3
832
+ *
833
+ * @return array
834
+ */
835
+ public function get_public_events() {
836
+ /**
837
+ * Filter: `wsal_public_event_ids`
838
+ *
839
+ * Filter array of public event ids.
840
+ *
841
+ * @param array $public_events - Array of public event ids.
842
+ */
843
+ return apply_filters( 'wsal_public_event_ids', array( 1000, 1002, 1003, 1004, 1005, 1007, 2101, 2126, 4000, 4001, 4012, 6023, 9073 ) ); // Public events.
844
+ }
845
  }
classes/Autoloader.php CHANGED
@@ -57,9 +57,7 @@ class WSAL_Autoloader {
57
  if ( strstr( $class, $prefix ) !== false ) {
58
  $file = $path . str_replace( '_', DIRECTORY_SEPARATOR, substr( $class, strlen( $prefix ) ) ) . '.php';
59
  if ( file_exists( $file ) ) {
60
- $s = $this->plugin->profiler->Start( 'Autoload ' . basename( $file ) );
61
- require_once( $file );
62
- $s->Stop();
63
  return class_exists( $class, false ) || interface_exists( $class, false );
64
  }
65
  }
57
  if ( strstr( $class, $prefix ) !== false ) {
58
  $file = $path . str_replace( '_', DIRECTORY_SEPARATOR, substr( $class, strlen( $prefix ) ) ) . '.php';
59
  if ( file_exists( $file ) ) {
60
+ require_once $file;
 
 
61
  return class_exists( $class, false ) || interface_exists( $class, false );
62
  }
63
  }
classes/Connector/MySQLDB.php CHANGED
@@ -471,10 +471,10 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
471
  * @param array $args - Archive Database and limit by date.
472
  */
473
  public function MirroringAlertsToDB( $args ) {
474
- $last_created_on = null;
475
  $first_occurrence_id = null;
476
- $_wpdb = $this->getConnection();
477
- $mirroring_db = $args['mirroring_db'];
478
 
479
  // Load data Occurrences from WP.
480
  $occurrence = new WSAL_Adapters_MySQL_Occurrence( $_wpdb );
@@ -482,15 +482,23 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
482
  return null;
483
  }
484
 
485
- $sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE created_on > ' . $args['last_created_on'];
 
 
 
 
 
 
 
 
486
  $occurrences = $_wpdb->get_results( $sql, ARRAY_A );
487
 
488
  if ( ! empty( $occurrences ) ) {
489
  $occurrence_new = new WSAL_Adapters_MySQL_Occurrence( $mirroring_db );
490
 
491
- $sql = 'INSERT INTO ' . $occurrence_new->GetTable() . ' (id, site_id, alert_id, created_on, is_read) VALUES ' ;
492
  foreach ( $occurrences as $entry ) {
493
- $sql .= '(' . $entry['id'] . ', ' . $entry['site_id'] . ', ' . $entry['alert_id'] . ', ' . $entry['created_on'] . ', ' . $entry['is_read'] . '), ';
494
  $last_created_on = $entry['created_on'];
495
  // Save the first id.
496
  if ( empty( $first_occurrence_id ) ) {
@@ -507,13 +515,13 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
507
  return null;
508
  }
509
  if ( ! empty( $first_occurrence_id ) ) {
510
- $sql = 'SELECT * FROM ' . $meta->GetTable() . ' WHERE occurrence_id >= ' . $first_occurrence_id;
511
  $metadata = $_wpdb->get_results( $sql, ARRAY_A );
512
 
513
  if ( ! empty( $metadata ) ) {
514
  $meta_new = new WSAL_Adapters_MySQL_Meta( $mirroring_db );
515
 
516
- $sql = 'INSERT INTO ' . $meta_new->GetTable() . ' (occurrence_id, name, value) VALUES ' ;
517
  foreach ( $metadata as $entry ) {
518
  $sql .= '(' . $entry['occurrence_id'] . ', \'' . $entry['name'] . '\', \'' . str_replace( array( "'", "\'" ), "\'", $entry['value'] ) . '\'), ';
519
  }
471
  * @param array $args - Archive Database and limit by date.
472
  */
473
  public function MirroringAlertsToDB( $args ) {
474
+ $last_created_on = null;
475
  $first_occurrence_id = null;
476
+ $_wpdb = $this->getConnection();
477
+ $mirroring_db = $args['mirroring_db'];
478
 
479
  // Load data Occurrences from WP.
480
  $occurrence = new WSAL_Adapters_MySQL_Occurrence( $_wpdb );
482
  return null;
483
  }
484
 
485
+ if ( isset( $args['filter'] ) && 'event-codes' === $args['filter'] && isset( $args['events'] ) ) {
486
+ $sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE created_on > ' . $args['last_created_on'] . ' AND alert_id IN ' . $args['events'];
487
+ } elseif ( isset( $args['filter'] ) && 'except-codes' === $args['filter'] && isset( $args['events'] ) ) {
488
+ $sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE created_on > ' . $args['last_created_on'] . ' AND alert_id NOT IN ' . $args['events'];
489
+ } else {
490
+ $sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' WHERE created_on > ' . $args['last_created_on'];
491
+ }
492
+
493
+ // Query the events.
494
  $occurrences = $_wpdb->get_results( $sql, ARRAY_A );
495
 
496
  if ( ! empty( $occurrences ) ) {
497
  $occurrence_new = new WSAL_Adapters_MySQL_Occurrence( $mirroring_db );
498
 
499
+ $sql = 'INSERT INTO ' . $occurrence_new->GetTable() . ' (id, site_id, alert_id, created_on, is_read) VALUES ';
500
  foreach ( $occurrences as $entry ) {
501
+ $sql .= '(' . $entry['id'] . ', ' . $entry['site_id'] . ', ' . $entry['alert_id'] . ', ' . $entry['created_on'] . ', ' . $entry['is_read'] . '), ';
502
  $last_created_on = $entry['created_on'];
503
  // Save the first id.
504
  if ( empty( $first_occurrence_id ) ) {
515
  return null;
516
  }
517
  if ( ! empty( $first_occurrence_id ) ) {
518
+ $sql = 'SELECT * FROM ' . $meta->GetTable() . ' WHERE occurrence_id >= ' . $first_occurrence_id;
519
  $metadata = $_wpdb->get_results( $sql, ARRAY_A );
520
 
521
  if ( ! empty( $metadata ) ) {
522
  $meta_new = new WSAL_Adapters_MySQL_Meta( $mirroring_db );
523
 
524
+ $sql = 'INSERT INTO ' . $meta_new->GetTable() . ' (occurrence_id, name, value) VALUES ';
525
  foreach ( $metadata as $entry ) {
526
  $sql .= '(' . $entry['occurrence_id'] . ', \'' . $entry['name'] . '\', \'' . str_replace( array( "'", "\'" ), "\'", $entry['value'] ) . '\'), ';
527
  }
classes/Connector/wp-db-custom.php CHANGED
@@ -26,15 +26,15 @@ class wpdbCustom extends wpdb {
26
  * and hide the print of the error
27
  *
28
  * @global string $wp_version
29
- * @param string $dbuser - MySQL database user.
30
- * @param string $dbpassword - MySQL database password.
31
- * @param string $dbname - MySQL database name.
32
- * @param string $dbhost - MySQL database host.
33
- * @param bool $is_ssl - Set if connection is SSL encrypted.
34
- * @param bool $is_cc - Set if connection has client certificates.
35
- * @param string $ssl_ca - Certificate Authority.
36
- * @param string $ssl_cert - Client Certificate.
37
- * @param string $ssl_key - Client Key.
38
  * @param bool $test_connection - Set to true if testing connection.
39
  */
40
  public function __construct( $dbuser, $dbpassword, $dbname, $dbhost, $is_ssl, $is_cc, $ssl_ca, $ssl_cert, $ssl_key, $test_connection = false ) {
@@ -51,10 +51,11 @@ class wpdbCustom extends wpdb {
51
  $this->use_mysqli = true;
52
  }
53
  }
54
- $this->dbuser = $dbuser;
55
  $this->dbpassword = $dbpassword;
56
- $this->dbname = $dbname;
57
- $this->dbhost = $dbhost;
 
58
  // wp-config.php creation will manually connect when ready.
59
  if ( defined( 'WP_SETUP_CONFIG' ) ) {
60
  return;
@@ -102,7 +103,7 @@ class wpdbCustom extends wpdb {
102
  * Deprecated in 3.9+ when using MySQLi. No equivalent
103
  * $new_link parameter exists for mysqli_* functions.
104
  */
105
- $new_link = defined( 'MYSQL_NEW_LINK' ) ? MYSQL_NEW_LINK : true;
106
  $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
107
 
108
  if ( $this->use_mysqli ) {
@@ -110,15 +111,15 @@ class wpdbCustom extends wpdb {
110
 
111
  // mysqli_real_connect doesn't support the host param including a port or socket
112
  // like mysql_connect does. This duplicates how mysql_connect detects a port and/or socket file.
113
- $port = null;
114
- $socket = null;
115
- $host = $this->dbhost;
116
  $port_or_socket = strstr( $host, ':' );
117
  if ( ! empty( $port_or_socket ) ) {
118
- $host = substr( $host, 0, strpos( $host, ':' ) );
119
  $port_or_socket = substr( $port_or_socket, 1 );
120
  if ( 0 !== strpos( $port_or_socket, '/' ) ) {
121
- $port = intval( $port_or_socket );
122
  $maybe_socket = strstr( $port_or_socket, ':' );
123
  if ( ! empty( $maybe_socket ) ) {
124
  $socket = substr( $maybe_socket, 1 );
@@ -149,11 +150,11 @@ class wpdbCustom extends wpdb {
149
  if ( $ssl_opts_set ) {
150
  mysqli_ssl_set(
151
  $this->dbh,
152
- $ssl_opts[ 'KEY' ],
153
- $ssl_opts[ 'CERT' ],
154
- $ssl_opts[ 'CA' ],
155
- $ssl_opts[ 'CA_PATH' ],
156
- $ssl_opts[ 'CIPHER' ]
157
  );
158
  }
159
 
26
  * and hide the print of the error
27
  *
28
  * @global string $wp_version
29
+ * @param string $dbuser - MySQL database user.
30
+ * @param string $dbpassword - MySQL database password.
31
+ * @param string $dbname - MySQL database name.
32
+ * @param string $dbhost - MySQL database host.
33
+ * @param bool $is_ssl - Set if connection is SSL encrypted.
34
+ * @param bool $is_cc - Set if connection has client certificates.
35
+ * @param string $ssl_ca - Certificate Authority.
36
+ * @param string $ssl_cert - Client Certificate.
37
+ * @param string $ssl_key - Client Key.
38
  * @param bool $test_connection - Set to true if testing connection.
39
  */
40
  public function __construct( $dbuser, $dbpassword, $dbname, $dbhost, $is_ssl, $is_cc, $ssl_ca, $ssl_cert, $ssl_key, $test_connection = false ) {
51
  $this->use_mysqli = true;
52
  }
53
  }
54
+ $this->dbuser = $dbuser;
55
  $this->dbpassword = $dbpassword;
56
+ $this->dbname = $dbname;
57
+ $this->dbhost = $dbhost;
58
+
59
  // wp-config.php creation will manually connect when ready.
60
  if ( defined( 'WP_SETUP_CONFIG' ) ) {
61
  return;
103
  * Deprecated in 3.9+ when using MySQLi. No equivalent
104
  * $new_link parameter exists for mysqli_* functions.
105
  */
106
+ $new_link = defined( 'MYSQL_NEW_LINK' ) ? MYSQL_NEW_LINK : true;
107
  $client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
108
 
109
  if ( $this->use_mysqli ) {
111
 
112
  // mysqli_real_connect doesn't support the host param including a port or socket
113
  // like mysql_connect does. This duplicates how mysql_connect detects a port and/or socket file.
114
+ $port = null;
115
+ $socket = null;
116
+ $host = $this->dbhost;
117
  $port_or_socket = strstr( $host, ':' );
118
  if ( ! empty( $port_or_socket ) ) {
119
+ $host = substr( $host, 0, strpos( $host, ':' ) );
120
  $port_or_socket = substr( $port_or_socket, 1 );
121
  if ( 0 !== strpos( $port_or_socket, '/' ) ) {
122
+ $port = intval( $port_or_socket );
123
  $maybe_socket = strstr( $port_or_socket, ':' );
124
  if ( ! empty( $maybe_socket ) ) {
125
  $socket = substr( $maybe_socket, 1 );
150
  if ( $ssl_opts_set ) {
151
  mysqli_ssl_set(
152
  $this->dbh,
153
+ $ssl_opts['KEY'],
154
+ $ssl_opts['CERT'],
155
+ $ssl_opts['CA'],
156
+ $ssl_opts['CA_PATH'],
157
+ $ssl_opts['CIPHER']
158
  );
159
  }
160
 
classes/Ref.php CHANGED
@@ -1483,24 +1483,17 @@ class WSAL_Ref {
1483
  // mysql connection (mysql extension is deprecated from php 5.4/5.5)
1484
  case 'mysql link':
1485
  case 'mysql link persistent':
1486
- $dbs = array();
1487
- $query = @mysql_list_dbs( $subject );
1488
- while ( $row = @mysql_fetch_array( $query ) ) {
1489
- $dbs[] = $row['Database'];
1490
- }
1491
-
1492
  $meta = array(
1493
- 'host' => ltrim( @mysql_get_host_info( $subject ), 'MySQL host info: ' ),
1494
- 'server_version' => @mysql_get_server_info( $subject ),
1495
- 'protocol_version' => @mysql_get_proto_info( $subject ),
1496
- 'databases' => $dbs,
1497
  );
1498
 
1499
  break;
1500
 
1501
  // mysql result
1502
  case 'mysql result':
1503
- while ( $row = @mysql_fetch_object( $subject ) ) {
1504
  $meta[] = (array) $row;
1505
 
1506
  if ( $this->hasInstanceTimedOut() ) {
1483
  // mysql connection (mysql extension is deprecated from php 5.4/5.5)
1484
  case 'mysql link':
1485
  case 'mysql link persistent':
 
 
 
 
 
 
1486
  $meta = array(
1487
+ 'host' => ltrim( @mysqli_get_host_info( $subject ), 'MySQL host info: ' ),
1488
+ 'server_version' => @mysqli_get_server_info( $subject ),
1489
+ 'protocol_version' => @mysqli_get_proto_info( $subject ),
 
1490
  );
1491
 
1492
  break;
1493
 
1494
  // mysql result
1495
  case 'mysql result':
1496
+ while ( $row = @mysqli_fetch_object( $subject ) ) {
1497
  $meta[] = (array) $row;
1498
 
1499
  if ( $this->hasInstanceTimedOut() ) {
classes/SensorManager.php CHANGED
@@ -174,6 +174,19 @@ final class WSAL_SensorManager extends WSAL_AbstractSensor {
174
  'wsal-auditlog-pricing',
175
  );
176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  // Get current page query argument via $_GET array.
178
  $current_page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
179
 
@@ -191,9 +204,6 @@ final class WSAL_SensorManager extends WSAL_AbstractSensor {
191
  return false;
192
  }
193
 
194
- // Get file name.
195
- $filename = basename( $filepath, '.php' );
196
-
197
  // If filename exists then continue.
198
  if ( $filename ) {
199
  // Conditional loading based on filename.
174
  'wsal-auditlog-pricing',
175
  );
176
 
177
+ // Get file name.
178
+ $filename = basename( $filepath, '.php' );
179
+
180
+ // Load LogInOut sensor on login page.
181
+ if ( 'wp-login.php' === $pagenow && 'LogInOut' === $filename ) {
182
+ return true;
183
+ }
184
+
185
+ // Only load Public sensor when the user is not on wp-admin.
186
+ if ( ! is_admin() && ! is_user_logged_in() && 'Public' !== $filename ) {
187
+ return false;
188
+ }
189
+
190
  // Get current page query argument via $_GET array.
191
  $current_page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
192
 
204
  return false;
205
  }
206
 
 
 
 
207
  // If filename exists then continue.
208
  if ( $filename ) {
209
  // Conditional loading based on filename.
classes/Sensors/Comments.php CHANGED
@@ -65,12 +65,12 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
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(
71
- 'PostTitle' => $post->post_title,
72
- 'Author' => $comment->comment_author,
73
- 'Date' => $comment->comment_date,
74
  'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
75
  );
76
 
@@ -145,22 +145,17 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
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 ) {
159
- // Set the fields.
160
- $fields['CommentMsg'] = sprintf( 'A comment was posted in response to the post <strong>%s</strong>. The comment was posted by <strong>%s</strong>', $post->post_title, $this->CheckAuthor( $comment ) );
161
- $fields['Username'] = 'Website Visitor';
162
- $this->plugin->alerts->Trigger( 2126, $fields );
163
- } else {
164
  // Get user roles.
165
  $user_roles = $user_data->roles;
166
 
@@ -170,9 +165,9 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
170
  }
171
 
172
  // Set the fields.
173
- $fields['Username'] = $user_data->user_login;
174
  $fields['CurrentUserRoles'] = $user_roles;
175
- $fields['CommentMsg'] = sprintf( 'Posted a comment in response to the post <strong>%s</strong>', $post->post_title );
176
  $this->plugin->alerts->Trigger( 2099, $fields );
177
  }
178
  }
@@ -189,12 +184,12 @@ class WSAL_Sensors_Comments extends WSAL_AbstractSensor {
189
  private function EventGeneric( $comment_id, $alert_code ) {
190
  $comment = get_comment( $comment_id );
191
  if ( ! empty( $comment ) ) {
192
- $post = get_post( $comment->comment_post_ID );
193
  $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
194
- $fields = array(
195
- 'PostTitle' => $post->post_title,
196
- 'Author' => $comment->comment_author,
197
- 'Date' => $comment->comment_date,
198
  'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
199
  );
200
 
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(
71
+ 'PostTitle' => $post->post_title,
72
+ 'Author' => $comment->comment_author,
73
+ 'Date' => $comment->comment_date,
74
  'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
75
  );
76
 
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
 
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
  }
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(
190
+ 'PostTitle' => $post->post_title,
191
+ 'Author' => $comment->comment_author,
192
+ 'Date' => $comment->comment_date,
193
  'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
194
  );
195
 
classes/Sensors/Content.php CHANGED
@@ -119,13 +119,10 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
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
 
123
  add_action( 'create_category', array( $this, 'EventCategoryCreation' ), 10, 1 );
124
  add_action( 'create_post_tag', array( $this, 'EventTagCreation' ), 10, 1 );
125
-
126
- add_action( 'wp_head', array( $this, 'ViewingPost' ), 10 );
127
- add_filter( 'post_edit_form_tag', array( $this, 'EditingPost' ), 10, 1 );
128
-
129
  add_filter( 'wp_update_term_data', array( $this, 'event_terms_rename' ), 10, 4 );
130
 
131
  // Check if MainWP Child Plugin exists.
@@ -536,6 +533,38 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
536
  && ( 'unpublish' === $post_array['action'] || 'publish' === $post_array['action'] )
537
  ) {
538
  $this->check_mainwp_status_change( $post, $old_status, $new_status );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
539
  }
540
  }
541
 
@@ -594,7 +623,11 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
594
  } elseif ( $this->_old_post && 'mainwp' === $dashboard ) {
595
  if ( 'auto-draft' === $old_status ) {
596
  // Get MainWP $_POST members.
597
- $new_post = filter_input( INPUT_POST, 'new_post', FILTER_SANITIZE_STRING );
 
 
 
 
598
  $new_post = maybe_unserialize( base64_decode( $new_post ) );
599
  $post_catgs = filter_input( INPUT_POST, 'post_category', FILTER_SANITIZE_STRING );
600
 
@@ -893,7 +926,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
893
  */
894
  protected function CheckDateChange( $oldpost, $newpost ) {
895
  $from = strtotime( $oldpost->post_date );
896
- $to = strtotime( $newpost->post_date );
897
 
898
  if ( 'draft' == $oldpost->post_status ) {
899
  return 0;
@@ -903,14 +936,14 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
903
  $editor_link = $this->GetEditorLink( $oldpost );
904
  $this->plugin->alerts->Trigger(
905
  2027, array(
906
- 'PostID' => $oldpost->ID,
907
- 'PostType' => $oldpost->post_type,
908
- 'PostTitle' => $oldpost->post_title,
909
- 'PostStatus' => $oldpost->post_status,
910
- 'PostDate' => $newpost->post_date,
911
- 'PostUrl' => get_permalink( $oldpost->ID ),
912
- 'OldDate' => $oldpost->post_date,
913
- 'NewDate' => $newpost->post_date,
914
  $editor_link['name'] => $editor_link['value'],
915
  )
916
  );
@@ -927,8 +960,8 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
927
  * @param stdClass $post - The post.
928
  */
929
  protected function CheckCategoriesChange( $old_cats, $new_cats, $post ) {
930
- $old_cats = implode( ', ', $old_cats );
931
- $new_cats = implode( ', ', $new_cats );
932
 
933
  if ( $old_cats !== $new_cats ) {
934
  $event = $this->GetEventTypeForPostType( $post, 2016, 0, 2016 );
@@ -1072,10 +1105,10 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1072
  $removed_tags = array_diff( $old_tags, $new_tags );
1073
 
1074
  // Convert tags arrays to string.
1075
- $old_tags = implode( ', ', $old_tags );
1076
- $new_tags = implode( ', ', $new_tags );
1077
- $added_tags = implode( ', ', $added_tags );
1078
- $removed_tags = implode( ', ', $removed_tags );
1079
 
1080
  // Declare event variables.
1081
  $add_event = '';
@@ -1667,14 +1700,14 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1667
  /**
1668
  * Check auto draft and the setting: Hide Plugin in Plugins Page
1669
  *
1670
- * @param integer $code - Alert code.
1671
  * @param string $title - Title.
1672
  * @return boolean
1673
  */
1674
  private function CheckAutoDraft( $code, $title ) {
1675
  if ( 2008 == $code && 'auto-draft' == $title ) {
1676
  // To do: Check setting else return false.
1677
- if ( $this->plugin->settings->IsWPBackend() == 1 ) {
1678
  return true;
1679
  } else {
1680
  return false;
@@ -1745,7 +1778,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1745
  * Ignore post from BBPress, WooCommerce Plugin
1746
  * Triggered on the Sensors
1747
  *
1748
- * @param stdClass $post - The post.
1749
  */
1750
  private function CheckOtherSensors( $post ) {
1751
  if ( empty( $post ) || ! isset( $post->post_type ) ) {
@@ -1790,44 +1823,6 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
1790
  }
1791
  }
1792
 
1793
- /**
1794
- * Alerts for Viewing of Posts, Pages and Custom Posts.
1795
- */
1796
- public function ViewingPost() {
1797
- // Retrieve the current post object.
1798
- $post = get_queried_object();
1799
- if ( is_user_logged_in() && ! is_admin() ) {
1800
- if ( $this->CheckOtherSensors( $post ) ) {
1801
- return $post->post_title;
1802
- }
1803
-
1804
- // Filter $_SERVER array for security.
1805
- $server_array = filter_input_array( INPUT_SERVER );
1806
-
1807
- $current_path = isset( $server_array['REQUEST_URI'] ) ? $server_array['REQUEST_URI'] : false;
1808
- if ( ! empty( $server_array['HTTP_REFERER'] )
1809
- && ! empty( $current_path )
1810
- && strpos( $server_array['HTTP_REFERER'], $current_path ) !== false ) {
1811
- // Ignore this if we were on the same page so we avoid double audit entries.
1812
- return;
1813
- }
1814
- if ( ! empty( $post->post_title ) ) {
1815
- $editor_link = $this->GetEditorLink( $post );
1816
- $this->plugin->alerts->Trigger(
1817
- 2101, array(
1818
- 'PostID' => $post->ID,
1819
- 'PostType' => $post->post_type,
1820
- 'PostTitle' => $post->post_title,
1821
- 'PostStatus' => $post->post_status,
1822
- 'PostDate' => $post->post_date,
1823
- 'PostUrl' => get_permalink( $post->ID ),
1824
- $editor_link['name'] => $editor_link['value'],
1825
- )
1826
- );
1827
- }
1828
- }
1829
- }
1830
-
1831
  /**
1832
  * Alerts for Editing of Posts, Pages and Custom Post Types.
1833
  *
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
 
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
 
128
  // Check if MainWP Child Plugin exists.
533
  && ( 'unpublish' === $post_array['action'] || 'publish' === $post_array['action'] )
534
  ) {
535
  $this->check_mainwp_status_change( $post, $old_status, $new_status );
536
+ } else {
537
+ // Ignore nav menu post type or post revision.
538
+ if ( 'nav_menu_item' === get_post_type( $post->ID ) || wp_is_post_revision( $post->ID ) ) {
539
+ return;
540
+ }
541
+
542
+ $event = 0;
543
+ if ( 'auto-draft' === $old_status && ( 'auto-draft' !== $new_status && 'inherit' !== $new_status ) ) {
544
+ // Post published.
545
+ $event = 2001;
546
+ } elseif ( 'auto-draft' === $new_status || ( 'new' === $old_status && 'inherit' === $new_status ) ) {
547
+ // Ignore it.
548
+ } elseif ( 'trash' === $new_status ) {
549
+ // Post deleted.
550
+ } elseif ( 'trash' === $old_status ) {
551
+ // Post restored.
552
+ } else {
553
+ // Post edited.
554
+ $event = 2002;
555
+ }
556
+
557
+ if ( $event ) {
558
+ // Get event data.
559
+ $editor_link = $this->GetEditorLink( $post ); // Editor link.
560
+ $event_data = $this->get_post_event_data( $post ); // Post event data.
561
+
562
+ // Set editor link in the event data.
563
+ $event_data[ $editor_link['name'] ] = $editor_link['value'];
564
+
565
+ // Log the event.
566
+ $this->plugin->alerts->Trigger( $event, $event_data );
567
+ }
568
  }
569
  }
570
 
623
  } elseif ( $this->_old_post && 'mainwp' === $dashboard ) {
624
  if ( 'auto-draft' === $old_status ) {
625
  // Get MainWP $_POST members.
626
+ // @codingStandardsIgnoreStart
627
+ $new_post = isset( $_POST['new_post'] ) ? sanitize_text_field( wp_unslash( $_POST['new_post'] ) ) : false;
628
+ // @codingStandardsIgnoreEnd
629
+
630
+ // Get WordPress Post.
631
  $new_post = maybe_unserialize( base64_decode( $new_post ) );
632
  $post_catgs = filter_input( INPUT_POST, 'post_category', FILTER_SANITIZE_STRING );
633
 
926
  */
927
  protected function CheckDateChange( $oldpost, $newpost ) {
928
  $from = strtotime( $oldpost->post_date );
929
+ $to = strtotime( $newpost->post_date );
930
 
931
  if ( 'draft' == $oldpost->post_status ) {
932
  return 0;
936
  $editor_link = $this->GetEditorLink( $oldpost );
937
  $this->plugin->alerts->Trigger(
938
  2027, array(
939
+ 'PostID' => $oldpost->ID,
940
+ 'PostType' => $oldpost->post_type,
941
+ 'PostTitle' => $oldpost->post_title,
942
+ 'PostStatus' => $oldpost->post_status,
943
+ 'PostDate' => $newpost->post_date,
944
+ 'PostUrl' => get_permalink( $oldpost->ID ),
945
+ 'OldDate' => $oldpost->post_date,
946
+ 'NewDate' => $newpost->post_date,
947
  $editor_link['name'] => $editor_link['value'],
948
  )
949
  );
960
  * @param stdClass $post - The post.
961
  */
962
  protected function CheckCategoriesChange( $old_cats, $new_cats, $post ) {
963
+ $old_cats = implode( ', ', (array) $old_cats );
964
+ $new_cats = implode( ', ', (array) $new_cats );
965
 
966
  if ( $old_cats !== $new_cats ) {
967
  $event = $this->GetEventTypeForPostType( $post, 2016, 0, 2016 );
1105
  $removed_tags = array_diff( $old_tags, $new_tags );
1106
 
1107
  // Convert tags arrays to string.
1108
+ $old_tags = implode( ', ', (array) $old_tags );
1109
+ $new_tags = implode( ', ', (array) $new_tags );
1110
+ $added_tags = implode( ', ', (array) $added_tags );
1111
+ $removed_tags = implode( ', ', (array) $removed_tags );
1112
 
1113
  // Declare event variables.
1114
  $add_event = '';
1700
  /**
1701
  * Check auto draft and the setting: Hide Plugin in Plugins Page
1702
  *
1703
+ * @param integer $code - Alert code.
1704
  * @param string $title - Title.
1705
  * @return boolean
1706
  */
1707
  private function CheckAutoDraft( $code, $title ) {
1708
  if ( 2008 == $code && 'auto-draft' == $title ) {
1709
  // To do: Check setting else return false.
1710
+ if ( 1 == $this->plugin->settings->IsWPBackend() ) {
1711
  return true;
1712
  } else {
1713
  return false;
1778
  * Ignore post from BBPress, WooCommerce Plugin
1779
  * Triggered on the Sensors
1780
  *
1781
+ * @param WP_Post $post - The post.
1782
  */
1783
  private function CheckOtherSensors( $post ) {
1784
  if ( empty( $post ) || ! isset( $post->post_type ) ) {
1823
  }
1824
  }
1825
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1826
  /**
1827
  * Alerts for Editing of Posts, Pages and Custom Post Types.
1828
  *
classes/Sensors/FileChanges.php CHANGED
@@ -164,6 +164,7 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
164
  'excluded_extensions' => $this->plugin->GetGlobalOption( 'scan-excluded-extensions', array( 'jpg', 'jpeg', 'png', 'bmp', 'pdf', 'txt', 'log', 'mo', 'po', 'mp3', 'wav', 'gif', 'ico', 'jpe', 'psd', 'raw', 'svg', 'tif', 'tiff', 'aif', 'flac', 'm4a', 'oga', 'ogg', 'ra', 'wma', 'asf', 'avi', 'mkv', 'mov', 'mp4', 'mpe', 'mpeg', 'mpg', 'ogv', 'qt', 'rm', 'vob', 'webm', 'wm', 'wmv' ) ),
165
  'excluded_files' => $this->plugin->GetGlobalOption( 'scan_excluded_files', array() ),
166
  'last_scanned' => $this->plugin->GetGlobalOption( 'last-scanned', false ),
 
167
  );
168
 
169
  // Set the scan hours.
@@ -319,13 +320,6 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
319
  // Reset scan counter.
320
  $this->reset_scan_counter();
321
 
322
- // Scan started alert.
323
- $this->plugin->alerts->Trigger( 6033, array(
324
- 'CurrentUserID' => '0',
325
- 'ScanStatus' => 'started',
326
- 'ScanLocation' => ! empty( $path_to_scan ) ? $path_to_scan : ABSPATH,
327
- ) );
328
-
329
  // Scan the path.
330
  $scanned_files = $this->scan_path( $path_to_scan );
331
 
@@ -481,21 +475,6 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
481
  $this->plugin->alerts->Trigger( 6032, array(
482
  'CurrentUserID' => '0',
483
  ) );
484
-
485
- // Scan stopped with errors.
486
- $this->plugin->alerts->Trigger( 6033, array(
487
- 'CurrentUserID' => '0',
488
- 'ScanStatus' => 'stopped',
489
- 'ScanLocation' => ! empty( $path_to_scan ) ? $path_to_scan : ABSPATH,
490
- 'ScanError' => 1,
491
- ) );
492
- } else {
493
- // Scan stopped.
494
- $this->plugin->alerts->Trigger( 6033, array(
495
- 'CurrentUserID' => '0',
496
- 'ScanStatus' => 'stopped',
497
- 'ScanLocation' => ! empty( $path_to_scan ) ? $path_to_scan : ABSPATH,
498
- ) );
499
  }
500
 
501
  /**
@@ -506,13 +485,6 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
506
  do_action( 'wsal_last_scanned_directory', $next_to_scan );
507
  } else {
508
  $this->plugin->SetGlobalOption( "is_initial_scan_$next_to_scan", 'no' ); // Initial scan check set to false.
509
-
510
- // Scan stopped.
511
- $this->plugin->alerts->Trigger( 6033, array(
512
- 'CurrentUserID' => '0',
513
- 'ScanStatus' => 'stopped',
514
- 'ScanLocation' => ! empty( $path_to_scan ) ? $path_to_scan : ABSPATH,
515
- ) );
516
  }
517
 
518
  // Store scanned files list.
@@ -533,6 +505,20 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
533
  if ( ! $manual ) {
534
  if ( 0 === $next_to_scan ) {
535
  $this->plugin->SetGlobalOption( 'last-scanned', 'root' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
536
  } else {
537
  $this->plugin->SetGlobalOption( 'last-scanned', $next_to_scan );
538
  }
@@ -564,9 +550,10 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
564
  return $files; // Return if directory fails to open.
565
  }
566
 
567
- // Multsite checks.
568
- $is_multisite = is_multisite();
569
- $directories = $this->scan_settings['scan_directories']; // Get directories to be scanned.
 
570
 
571
  // Scan the directory for files.
572
  while ( false !== ( $item = @readdir( $dir_handle ) ) ) {
@@ -674,13 +661,13 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
674
  break; // And break the loop.
675
  }
676
 
677
- // 5MB = 5242880 bytes.
678
- if ( filesize( $absolute_name ) < 5242880 ) { // Check if file size is less than 5MB.
679
  $this->scan_file_count = $this->scan_file_count + 1;
680
  // File data.
681
  $files[ $absolute_name ] = @md5_file( $absolute_name ); // File hash.
682
  } else {
683
- // File size is more than 2MB event.
684
  $this->plugin->alerts->Trigger( 6031, array(
685
  'FileLocation' => $absolute_name,
686
  'CurrentUserID' => '0',
@@ -1065,4 +1052,3 @@ class WSAL_Sensors_FileChanges extends WSAL_AbstractSensor {
1065
  }
1066
  }
1067
  }
1068
-
164
  'excluded_extensions' => $this->plugin->GetGlobalOption( 'scan-excluded-extensions', array( 'jpg', 'jpeg', 'png', 'bmp', 'pdf', 'txt', 'log', 'mo', 'po', 'mp3', 'wav', 'gif', 'ico', 'jpe', 'psd', 'raw', 'svg', 'tif', 'tiff', 'aif', 'flac', 'm4a', 'oga', 'ogg', 'ra', 'wma', 'asf', 'avi', 'mkv', 'mov', 'mp4', 'mpe', 'mpeg', 'mpg', 'ogv', 'qt', 'rm', 'vob', 'webm', 'wm', 'wmv' ) ),
165
  'excluded_files' => $this->plugin->GetGlobalOption( 'scan_excluded_files', array() ),
166
  'last_scanned' => $this->plugin->GetGlobalOption( 'last-scanned', false ),
167
+ 'file_size_limit' => $this->plugin->GetGlobalOption( 'scan-file-size-limit', 5 ),
168
  );
169
 
170
  // Set the scan hours.
320
  // Reset scan counter.
321
  $this->reset_scan_counter();
322
 
 
 
 
 
 
 
 
323
  // Scan the path.
324
  $scanned_files = $this->scan_path( $path_to_scan );
325
 
475
  $this->plugin->alerts->Trigger( 6032, array(
476
  'CurrentUserID' => '0',
477
  ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478
  }
479
 
480
  /**
485
  do_action( 'wsal_last_scanned_directory', $next_to_scan );
486
  } else {
487
  $this->plugin->SetGlobalOption( "is_initial_scan_$next_to_scan", 'no' ); // Initial scan check set to false.
 
 
 
 
 
 
 
488
  }
489
 
490
  // Store scanned files list.
505
  if ( ! $manual ) {
506
  if ( 0 === $next_to_scan ) {
507
  $this->plugin->SetGlobalOption( 'last-scanned', 'root' );
508
+
509
+ // Scan started alert.
510
+ $this->plugin->alerts->Trigger( 6033, array(
511
+ 'CurrentUserID' => '0',
512
+ 'ScanStatus' => 'started',
513
+ ) );
514
+ } elseif ( 6 === $next_to_scan ) {
515
+ $this->plugin->SetGlobalOption( 'last-scanned', $next_to_scan );
516
+
517
+ // Scan stopped.
518
+ $this->plugin->alerts->Trigger( 6033, array(
519
+ 'CurrentUserID' => '0',
520
+ 'ScanStatus' => 'stopped',
521
+ ) );
522
  } else {
523
  $this->plugin->SetGlobalOption( 'last-scanned', $next_to_scan );
524
  }
550
  return $files; // Return if directory fails to open.
551
  }
552
 
553
+ $is_multisite = is_multisite(); // Multsite checks.
554
+ $directories = $this->scan_settings['scan_directories']; // Get directories to be scanned.
555
+ $file_size_limit = $this->scan_settings['file_size_limit']; // Get file size limit.
556
+ $file_size_limit = $file_size_limit * 1048576; // Calculate file size limit in bytes; 1MB = 1048576 bytes.
557
 
558
  // Scan the directory for files.
559
  while ( false !== ( $item = @readdir( $dir_handle ) ) ) {
661
  break; // And break the loop.
662
  }
663
 
664
+ // Check file size limit.
665
+ if ( filesize( $absolute_name ) < $file_size_limit ) {
666
  $this->scan_file_count = $this->scan_file_count + 1;
667
  // File data.
668
  $files[ $absolute_name ] = @md5_file( $absolute_name ); // File hash.
669
  } else {
670
+ // File size is more than the limit.
671
  $this->plugin->alerts->Trigger( 6031, array(
672
  'FileLocation' => $absolute_name,
673
  'CurrentUserID' => '0',
1052
  }
1053
  }
1054
  }
 
classes/Sensors/LogInOut.php CHANGED
@@ -32,7 +32,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
32
  * Transient name.
33
  * WordPress will prefix the name with "_transient_" or "_transient_timeout_" in the options table.
34
  */
35
- const TRANSIENT_FAILEDLOGINS = 'wsal-failedlogins-known';
36
  const TRANSIENT_FAILEDLOGINS_UNKNOWN = 'wsal-failedlogins-unknown';
37
 
38
  /**
@@ -53,6 +53,10 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
53
  add_action( 'clear_auth_cookie', array( $this, 'GetCurrentUser' ), 10 );
54
  add_filter( 'wp_login_blocked', array( $this, 'EventLoginBlocked' ), 10, 1 );
55
 
 
 
 
 
56
  // Directory for logged in users log files.
57
  $user_upload_dir = wp_upload_dir();
58
  $failed_login_dir = trailingslashit( $user_upload_dir['basedir'] . '/wp-security-audit-log/failed-logins/' );
@@ -90,6 +94,47 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
90
  $this->_current_user = wp_get_current_user();
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  /**
94
  * Event Login.
95
  *
@@ -151,7 +196,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
151
  }
152
  $this->plugin->alerts->Trigger(
153
  1000, array(
154
- 'Username' => $user_login,
155
  'CurrentUserRoles' => $user_roles,
156
  ), true
157
  );
@@ -164,7 +209,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
164
  if ( 0 != $this->_current_user->ID ) {
165
  $this->plugin->alerts->Trigger(
166
  1001, array(
167
- 'CurrentUserID' => $this->_current_user->ID,
168
  'CurrentUserRoles' => $this->plugin->settings->GetCurrentUserRoles( $this->_current_user->roles ),
169
  ), true
170
  );
@@ -271,14 +316,14 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
271
  // Filter $_POST global array for security.
272
  $post_array = filter_input_array( INPUT_POST );
273
 
274
- $username = isset( $post_array['log'] ) ? $post_array['log'] : $username;
275
- $username = sanitize_user( $username );
276
  $new_alert_code = 1003;
277
- $user = get_user_by( 'login', $username );
278
- $site_id = (function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0);
279
  if ( $user ) {
280
  $new_alert_code = 1002;
281
- $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
282
  if ( $this->plugin->settings->IsLoginSuperAdmin( $username ) ) {
283
  $user_roles[] = 'superadmin';
284
  }
@@ -374,7 +419,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
374
  $occ_unknown->UpdateMetaValue( 'Users', $users );
375
  } else {
376
  // In this case the value doesn't exist so set the value to array.
377
- $users = array();
378
  $users[] = $username;
379
  }
380
 
@@ -387,10 +432,10 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
387
  // Log an alert for a login attempt with unknown username.
388
  $this->plugin->alerts->Trigger(
389
  $new_alert_code, array(
390
- 'Attempts' => 1,
391
- 'Users' => $users,
392
  'LogFileText' => '',
393
- 'ClientIP' => $ip,
394
  )
395
  );
396
  }
@@ -408,7 +453,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
408
  $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
409
  $this->plugin->alerts->Trigger(
410
  4003, array(
411
- 'Username' => $user->user_login,
412
  'CurrentUserRoles' => $user_roles,
413
  ), true
414
  );
@@ -421,7 +466,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
421
  * @param string $username - Username.
422
  */
423
  public function EventLoginBlocked( $username ) {
424
- $user = get_user_by( 'login', $username );
425
  $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
426
 
427
  if ( $this->plugin->settings->IsLoginSuperAdmin( $username ) ) {
@@ -429,7 +474,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
429
  }
430
  $this->plugin->alerts->Trigger(
431
  1004, array(
432
- 'Username' => $username,
433
  'CurrentUserRoles' => $user_roles,
434
  ), true
435
  );
@@ -443,18 +488,18 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor {
443
  * @return string $latest_filename - File name.
444
  */
445
  private function GetLastModified( $uploads_dir_path, $filename ) {
446
- $filename = substr( $filename, 0, -4 );
447
- $latest_mtime = 0;
448
  $latest_filename = '';
449
  if ( $handle = opendir( $uploads_dir_path ) ) {
450
- while ( false !== ($entry = readdir( $handle )) ) {
451
  if ( '.' != $entry && '..' != $entry ) {
452
  $entry = strip_tags( $entry ); // Strip HTML Tags.
453
  $entry = preg_replace( '/[\r\n\t ]+/', ' ', $entry ); // Remove Break/Tabs/Return Carriage.
454
  $entry = preg_replace( '/[\"\*\/\:\<\>\?\'\|]+/', ' ', $entry ); // Remove Illegal Chars for folder and filename.
455
  if ( preg_match( '/^' . $filename . '/i', $entry ) > 0 ) {
456
  if ( filemtime( $uploads_dir_path . $entry ) > $latest_mtime ) {
457
- $latest_mtime = filemtime( $uploads_dir_path . $entry );
458
  $latest_filename = $entry;
459
  }
460
  }
32
  * Transient name.
33
  * WordPress will prefix the name with "_transient_" or "_transient_timeout_" in the options table.
34
  */
35
+ const TRANSIENT_FAILEDLOGINS = 'wsal-failedlogins-known';
36
  const TRANSIENT_FAILEDLOGINS_UNKNOWN = 'wsal-failedlogins-unknown';
37
 
38
  /**
53
  add_action( 'clear_auth_cookie', array( $this, 'GetCurrentUser' ), 10 );
54
  add_filter( 'wp_login_blocked', array( $this, 'EventLoginBlocked' ), 10, 1 );
55
 
56
+ if ( is_plugin_active( 'two-factor/two-factor.php' ) ) {
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/' );
94
  $this->_current_user = wp_get_current_user();
95
  }
96
 
97
+ /**
98
+ * Login Event for Two-Factor plugin.
99
+ *
100
+ * @since 3.3
101
+ *
102
+ * @param string $redirect_url – Redirect URL.
103
+ * @return string
104
+ */
105
+ public function event_2fa_login( $redirect_url ) {
106
+ // @codingStandardsIgnoreStart
107
+ $provider = isset( $_POST['provider'] ) ? sanitize_text_field( wp_unslash( $_POST['provider'] ) ) : '';
108
+ $user_id = isset( $_POST['wp-auth-id'] ) ? (int) sanitize_text_field( wp_unslash( $_POST['wp-auth-id'] ) ) : '';
109
+ // @codingStandardsIgnoreEnd
110
+
111
+ // Default Two-Factor options.
112
+ $providers_2fa = array( 'Two_Factor_Email', 'Two_Factor_Totp', 'Two_Factor_FIDO_U2F', 'Two_Factor_Backup_Codes', 'Two_Factor_Dummy' );
113
+
114
+ // Get users.
115
+ $user = get_userdata( $user_id );
116
+ if ( ! $user ) {
117
+ return $redirect_url;
118
+ }
119
+
120
+ // If provider and user are set and provider is known then log the event.
121
+ if ( $provider && $user && in_array( $provider, $providers_2fa, true ) ) {
122
+ // Get user roles.
123
+ $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
124
+ if ( $this->plugin->settings->IsLoginSuperAdmin( $user->user_login ) ) {
125
+ $user_roles[] = 'superadmin';
126
+ }
127
+
128
+ $this->plugin->alerts->Trigger(
129
+ 1000, array(
130
+ 'Username' => $user->user_login,
131
+ 'CurrentUserRoles' => $user_roles,
132
+ ), true
133
+ );
134
+ }
135
+ return $redirect_url;
136
+ }
137
+
138
  /**
139
  * Event Login.
140
  *
196
  }
197
  $this->plugin->alerts->Trigger(
198
  1000, array(
199
+ 'Username' => $user_login,
200
  'CurrentUserRoles' => $user_roles,
201
  ), true
202
  );
209
  if ( 0 != $this->_current_user->ID ) {
210
  $this->plugin->alerts->Trigger(
211
  1001, array(
212
+ 'CurrentUserID' => $this->_current_user->ID,
213
  'CurrentUserRoles' => $this->plugin->settings->GetCurrentUserRoles( $this->_current_user->roles ),
214
  ), true
215
  );
316
  // Filter $_POST global array for security.
317
  $post_array = filter_input_array( INPUT_POST );
318
 
319
+ $username = isset( $post_array['log'] ) ? $post_array['log'] : $username;
320
+ $username = sanitize_user( $username );
321
  $new_alert_code = 1003;
322
+ $user = get_user_by( 'login', $username );
323
+ $site_id = ( function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0 );
324
  if ( $user ) {
325
  $new_alert_code = 1002;
326
+ $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
327
  if ( $this->plugin->settings->IsLoginSuperAdmin( $username ) ) {
328
  $user_roles[] = 'superadmin';
329
  }
419
  $occ_unknown->UpdateMetaValue( 'Users', $users );
420
  } else {
421
  // In this case the value doesn't exist so set the value to array.
422
+ $users = array();
423
  $users[] = $username;
424
  }
425
 
432
  // Log an alert for a login attempt with unknown username.
433
  $this->plugin->alerts->Trigger(
434
  $new_alert_code, array(
435
+ 'Attempts' => 1,
436
+ 'Users' => $users,
437
  'LogFileText' => '',
438
+ 'ClientIP' => $ip,
439
  )
440
  );
441
  }
453
  $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
454
  $this->plugin->alerts->Trigger(
455
  4003, array(
456
+ 'Username' => $user->user_login,
457
  'CurrentUserRoles' => $user_roles,
458
  ), true
459
  );
466
  * @param string $username - Username.
467
  */
468
  public function EventLoginBlocked( $username ) {
469
+ $user = get_user_by( 'login', $username );
470
  $user_roles = $this->plugin->settings->GetCurrentUserRoles( $user->roles );
471
 
472
  if ( $this->plugin->settings->IsLoginSuperAdmin( $username ) ) {
474
  }
475
  $this->plugin->alerts->Trigger(
476
  1004, array(
477
+ 'Username' => $username,
478
  'CurrentUserRoles' => $user_roles,
479
  ), true
480
  );
488
  * @return string $latest_filename - File name.
489
  */
490
  private function GetLastModified( $uploads_dir_path, $filename ) {
491
+ $filename = substr( $filename, 0, -4 );
492
+ $latest_mtime = 0;
493
  $latest_filename = '';
494
  if ( $handle = opendir( $uploads_dir_path ) ) {
495
+ while ( false !== ( $entry = readdir( $handle ) ) ) {
496
  if ( '.' != $entry && '..' != $entry ) {
497
  $entry = strip_tags( $entry ); // Strip HTML Tags.
498
  $entry = preg_replace( '/[\r\n\t ]+/', ' ', $entry ); // Remove Break/Tabs/Return Carriage.
499
  $entry = preg_replace( '/[\"\*\/\:\<\>\?\'\|]+/', ' ', $entry ); // Remove Illegal Chars for folder and filename.
500
  if ( preg_match( '/^' . $filename . '/i', $entry ) > 0 ) {
501
  if ( filemtime( $uploads_dir_path . $entry ) > $latest_mtime ) {
502
+ $latest_mtime = filemtime( $uploads_dir_path . $entry );
503
  $latest_filename = $entry;
504
  }
505
  }
classes/Sensors/Public.php ADDED
@@ -0,0 +1,543 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sensor: Public Activity
4
+ *
5
+ * Public/Visitor activity sensor class file.
6
+ *
7
+ * @since 3.3
8
+ * @package Wsal
9
+ */
10
+
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+
16
+ /**
17
+ * System Activity sensor.
18
+ *
19
+ * @package Wsal
20
+ */
21
+ class WSAL_Sensors_Public extends WSAL_AbstractSensor {
22
+
23
+ /**
24
+ * 404 Visitor Transient.
25
+ *
26
+ * WordPress will prefix the name with "_transient_"
27
+ * or "_transient_timeout_" in the options table.
28
+ */
29
+ const TRANSIENT_VISITOR_404 = 'wsal-visitor-404-attempts';
30
+
31
+ /**
32
+ * Visitor Events.
33
+ *
34
+ * @var boolean
35
+ */
36
+ protected $visitor_events;
37
+
38
+ /**
39
+ * Listening to events using WP hooks.
40
+ */
41
+ public function HookEvents() {
42
+ // Set if visitor events is enabled/disabled.
43
+ $disabled_visitor_events = $this->plugin->GetGlobalOption( 'disable-visitor-events', 'no' );
44
+
45
+ // Viewing post event.
46
+ add_action( 'wp_head', array( $this, 'viewing_post' ), 10 );
47
+
48
+ // If user is visitor & visitor events are not disabled then hook the following events.
49
+ if ( ! is_user_logged_in() && 'no' === $disabled_visitor_events ) {
50
+ add_action( 'user_register', array( $this, 'event_user_register' ) );
51
+ add_action( 'comment_post', array( $this, 'event_comment' ), 10, 2 );
52
+ add_filter( 'template_redirect', array( $this, 'event_404' ) );
53
+ } elseif ( is_user_logged_in() ) {
54
+ add_action( 'user_register', array( $this, 'event_user_register' ) );
55
+ add_action( 'comment_post', array( $this, 'event_comment' ), 10, 2 );
56
+ add_filter( 'template_redirect', array( $this, 'event_404' ) );
57
+ }
58
+
59
+ // Check if WooCommerce plugin exists.
60
+ if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
61
+ add_action( 'wp_head', array( $this, 'viewing_product' ), 10 );
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Triggered when a user is registered.
67
+ *
68
+ * @param int $user_id - User ID of the registered user.
69
+ */
70
+ public function event_user_register( $user_id ) {
71
+ $user = get_userdata( $user_id );
72
+ $ismu = function_exists( 'is_multisite' ) && is_multisite();
73
+ $event = $ismu ? 4012 : ( is_user_logged_in() ? 4001 : 4000 );
74
+ $current_user = wp_get_current_user();
75
+ $this->plugin->alerts->Trigger(
76
+ $event, array(
77
+ 'NewUserID' => $user_id,
78
+ 'UserChanger' => ! empty( $current_user ) ? $current_user->user_login : '',
79
+ 'NewUserData' => (object) array(
80
+ 'Username' => $user->user_login,
81
+ 'FirstName' => $user->user_firstname,
82
+ 'LastName' => $user->user_lastname,
83
+ 'Email' => $user->user_email,
84
+ 'Roles' => is_array( $user->roles ) ? implode( ', ', $user->roles ) : $user->roles,
85
+ ),
86
+ ), true
87
+ );
88
+ }
89
+
90
+ /**
91
+ * Post View Event.
92
+ *
93
+ * Alerts for Viewing of Posts and Custom Post Types.
94
+ */
95
+ public function viewing_post() {
96
+ // Retrieve the current post object.
97
+ $post = get_queried_object();
98
+ if ( is_user_logged_in() && ! is_admin() ) {
99
+ if ( $this->check_other_sensors( $post ) ) {
100
+ return $post->post_title;
101
+ }
102
+
103
+ // Filter $_SERVER array for security.
104
+ $server_array = filter_input_array( INPUT_SERVER );
105
+
106
+ $current_path = isset( $server_array['REQUEST_URI'] ) ? $server_array['REQUEST_URI'] : false;
107
+ if ( ! empty( $server_array['HTTP_REFERER'] )
108
+ && ! empty( $current_path )
109
+ && strpos( $server_array['HTTP_REFERER'], $current_path ) !== false ) {
110
+ // Ignore this if we were on the same page so we avoid double audit entries.
111
+ return;
112
+ }
113
+
114
+ if ( ! empty( $post->post_title ) ) {
115
+ $this->plugin->alerts->Trigger(
116
+ 2101, array(
117
+ 'PostID' => $post->ID,
118
+ 'PostType' => $post->post_type,
119
+ 'PostTitle' => $post->post_title,
120
+ 'PostStatus' => $post->post_status,
121
+ 'PostDate' => $post->post_date,
122
+ 'PostUrl' => get_permalink( $post->ID ),
123
+ 'EditorLinkPost' => get_edit_post_link( $post->ID ),
124
+ )
125
+ );
126
+ }
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Ignore post from BBPress, WooCommerce Plugin
132
+ * Triggered on the Sensors
133
+ *
134
+ * @param WP_Post $post - The post.
135
+ */
136
+ private function check_other_sensors( $post ) {
137
+ if ( empty( $post ) || ! isset( $post->post_type ) ) {
138
+ return false;
139
+ }
140
+ switch ( $post->post_type ) {
141
+ case 'forum':
142
+ case 'topic':
143
+ case 'reply':
144
+ case 'product':
145
+ return true;
146
+ default:
147
+ return false;
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Fires immediately after a comment is inserted into the database.
153
+ *
154
+ * @param int $comment_id – The comment ID.
155
+ * @param mixed $comment_approved – 1 if the comment is approved, 0 if not, 'spam' if spam.
156
+ */
157
+ public function event_comment( $comment_id, $comment_approved = null ) {
158
+ // @codingStandardsIgnoreStart
159
+ $post_comment = isset( $_POST['comment'] ) ? sanitize_text_field( wp_unslash( $_POST['comment'] ) ) : false;
160
+ // @codingStandardsIgnoreEnd
161
+
162
+ if ( $post_comment ) {
163
+ $comment = get_comment( $comment_id );
164
+ if ( ! empty( $comment ) ) {
165
+ if ( 'spam' !== $comment->comment_approved ) {
166
+ $post = get_post( $comment->comment_post_ID );
167
+ $comment_link = get_permalink( $post->ID ) . '#comment-' . $comment_id;
168
+ $fields = array(
169
+ 'Date' => $comment->comment_date,
170
+ 'CommentLink' => '<a target="_blank" href="' . $comment_link . '">' . $comment->comment_date . '</a>',
171
+ );
172
+
173
+ // Get user data.
174
+ $user_data = get_user_by( 'email', $comment->comment_author_email );
175
+
176
+ if ( ! $user_data ) {
177
+ // Set the fields.
178
+ /* Translators: 1: Post Title, 2: Comment Author */
179
+ $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>' );
180
+ $fields['Username'] = 'Website Visitor';
181
+ $this->plugin->alerts->Trigger( 2126, $fields );
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ /**
189
+ * Shows the username if the comment is owned by a user
190
+ * and the email if the comment was posted by a non WordPress user
191
+ *
192
+ * @param WP_Comment $comment – WP Comment object.
193
+ * @return string – Author username or email.
194
+ */
195
+ private function check_author( $comment ) {
196
+ if ( username_exists( $comment->comment_author ) ) {
197
+ return $comment->comment_author;
198
+ } else {
199
+ return $comment->comment_author_email;
200
+ }
201
+ }
202
+
203
+ /**
204
+ * Event 404 Not found.
205
+ */
206
+ public function event_404() {
207
+ $attempts = 1;
208
+
209
+ global $wp_query;
210
+ if ( ! $wp_query->is_404 ) {
211
+ return;
212
+ }
213
+
214
+ $msg = 'times';
215
+ list( $y, $m, $d ) = explode( '-', date( 'Y-m-d' ) );
216
+ $site_id = function_exists( 'get_current_blog_id' ) ? get_current_blog_id() : 0;
217
+ $ip = $this->plugin->settings->GetMainClientIP();
218
+
219
+ if ( ! is_user_logged_in() ) {
220
+ $username = 'Website Visitor';
221
+ } else {
222
+ $username = wp_get_current_user()->user_login;
223
+ }
224
+
225
+ // Request URL.
226
+ $request_uri = filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING );
227
+ if ( ! empty( $request_uri ) ) {
228
+ $url_404 = home_url() . $request_uri;
229
+ } elseif ( isset( $_SERVER['REQUEST_URI'] ) && ! empty( $_SERVER['REQUEST_URI'] ) ) {
230
+ $url_404 = home_url() . sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
231
+ }
232
+
233
+ // Remove forward slash from the URL.
234
+ $url_404 = untrailingslashit( $url_404 );
235
+
236
+ // Check for excluded 404 URls.
237
+ if ( $this->is_excluded_url( $url_404 ) ) {
238
+ return;
239
+ }
240
+
241
+ if ( 'Website Visitor' === $username ) {
242
+ // Check if the alert is disabled from the "Enable/Disable Alerts" section.
243
+ if ( ! $this->plugin->alerts->IsEnabled( 6023 ) ) {
244
+ return;
245
+ }
246
+
247
+ if ( $this->is_past_visitor_404_limit( $site_id, $username, $ip ) ) {
248
+ return;
249
+ }
250
+
251
+ $obj_occurrence = new WSAL_Models_Occurrence();
252
+ $occurrence = $obj_occurrence->CheckAlert404(
253
+ array(
254
+ $ip,
255
+ $username,
256
+ 6023,
257
+ $site_id,
258
+ mktime( 0, 0, 0, $m, $d, $y ),
259
+ mktime( 0, 0, 0, $m, $d + 1, $y ) - 1,
260
+ )
261
+ );
262
+
263
+ $occurrence = count( $occurrence ) ? $occurrence[0] : null;
264
+ if ( ! empty( $occurrence ) ) {
265
+ // Update existing record.
266
+ $this->increment_visitor_404( $site_id, $username, $ip );
267
+ $new = ( (int) $occurrence->GetMetaValue( 'Attempts', 0 ) ) + 1;
268
+
269
+ if ( $new > $this->get_visitor_404_log_limit() ) {
270
+ $new = 'more than ' . $this->get_visitor_404_log_limit();
271
+ $msg .= ' This could possible be a scan, therefore keep an eye on the activity from this IP Address';
272
+ }
273
+
274
+ $link_file = $this->write_log( $new, $ip, $username, $url_404 );
275
+
276
+ $occurrence->UpdateMetaValue( 'Attempts', $new );
277
+ $occurrence->UpdateMetaValue( 'Username', $username );
278
+ $occurrence->UpdateMetaValue( 'Msg', $msg );
279
+ $occurrence->UpdateMetaValue( 'URL', $url_404 );
280
+ if ( ! empty( $link_file ) ) {
281
+ $occurrence->UpdateMetaValue( 'LinkFile', $link_file );
282
+ }
283
+ $occurrence->created_on = null;
284
+ $occurrence->Save();
285
+ } else {
286
+ $link_file = $this->write_log( 1, $ip, $username, $url_404 );
287
+ // Create a new record.
288
+ $fields = array(
289
+ 'Attempts' => 1,
290
+ 'Username' => $username,
291
+ 'Msg' => $msg,
292
+ 'URL' => $url_404,
293
+ );
294
+ if ( ! empty( $link_file ) ) {
295
+ $fields['LinkFile'] = $link_file;
296
+ }
297
+ $this->plugin->alerts->Trigger( 6023, $fields );
298
+ }
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Method: Return true if URL is excluded otherwise false.
304
+ *
305
+ * @param string $url - 404 URL.
306
+ * @return boolean
307
+ */
308
+ public function is_excluded_url( $url ) {
309
+ if ( empty( $url ) ) {
310
+ return false;
311
+ }
312
+
313
+ if ( in_array( $url, $this->plugin->settings->get_excluded_urls() ) ) {
314
+ return true;
315
+ }
316
+ }
317
+
318
+ /**
319
+ * Check visitor 404 limit.
320
+ *
321
+ * @param integer $site_id - Blog ID.
322
+ * @param string $username - Username.
323
+ * @param string $ip - IP address.
324
+ * @return boolean passed limit true|false
325
+ */
326
+ protected function is_past_visitor_404_limit( $site_id, $username, $ip ) {
327
+ $get_fn = $this->plugin->IsMultisite() ? 'get_site_transient' : 'get_transient';
328
+ $data = $get_fn( self::TRANSIENT_VISITOR_404 );
329
+ return ( false !== $data ) && isset( $data[ $site_id . ':' . $username . ':' . $ip ] ) && ( $data[ $site_id . ':' . $username . ':' . $ip ] > $this->get_visitor_404_log_limit() );
330
+ }
331
+
332
+ /**
333
+ * Increment visitor 404 limit.
334
+ *
335
+ * @param integer $site_id - Blog ID.
336
+ * @param string $username - Username.
337
+ * @param string $ip - IP address.
338
+ */
339
+ protected function increment_visitor_404( $site_id, $username, $ip ) {
340
+ $get_fn = $this->plugin->IsMultisite() ? 'get_site_transient' : 'get_transient';
341
+ $set_fn = $this->plugin->IsMultisite() ? 'set_site_transient' : 'set_transient';
342
+ $data = $get_fn( self::TRANSIENT_VISITOR_404 );
343
+
344
+ if ( ! $data ) {
345
+ $data = array();
346
+ }
347
+
348
+ if ( ! isset( $data[ $site_id . ':' . $username . ':' . $ip ] ) ) {
349
+ $data[ $site_id . ':' . $username . ':' . $ip ] = 1;
350
+ }
351
+ $data[ $site_id . ':' . $username . ':' . $ip ]++;
352
+ $set_fn( self::TRANSIENT_VISITOR_404, $data, DAY_IN_SECONDS );
353
+ }
354
+
355
+ /**
356
+ * 404 visitor limit count.
357
+ *
358
+ * @return integer limit
359
+ */
360
+ protected function get_visitor_404_log_limit() {
361
+ return $this->plugin->settings->GetVisitor404LogLimit();
362
+ }
363
+
364
+ /**
365
+ * Write Log.
366
+ *
367
+ * Write a new line on 404 log file.
368
+ * Folder: /uploads/wp-security-audit-log/404s/
369
+ *
370
+ * @param int $attempts - Number of attempt.
371
+ * @param string $ip - IP address.
372
+ * @param string $username - Username.
373
+ * @param string $url - 404 URL.
374
+ */
375
+ private function write_log( $attempts, $ip, $username = '', $url ) {
376
+ $name_file = null;
377
+
378
+ if ( 'on' === $this->plugin->GetGlobalOption( 'log-visitor-404', 'off' ) ) {
379
+ // Get option to log referrer.
380
+ $log_referrer = $this->plugin->GetGlobalOption( 'log-visitor-404-referrer' );
381
+
382
+ // Check localhost.
383
+ if ( '127.0.0.1' == $ip || '::1' == $ip ) {
384
+ $ip = 'localhost';
385
+ }
386
+
387
+ if ( 'on' === $log_referrer ) {
388
+ // Get the referer.
389
+ $referrer = filter_input( INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_STRING );
390
+ if ( empty( $referrer ) && isset( $_SERVER['HTTP_REFERER'] ) && ! empty( $_SERVER['HTTP_REFERER'] ) ) {
391
+ $referrer = sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) );
392
+ }
393
+
394
+ // Data to write.
395
+ $data = '';
396
+
397
+ // Append IP if it exists.
398
+ $data = ( $ip ) ? $ip . ',' : '';
399
+
400
+ // Create/Append to the log file.
401
+ $data = $data . 'Request URL ' . $url . ',Referer ' . $referrer . ',';
402
+ } else {
403
+ // Data to write.
404
+ $data = '';
405
+
406
+ // Append IP if it exists.
407
+ $data = ( $ip ) ? $ip . ',' : '';
408
+
409
+ // Create/Append to the log file.
410
+ $data = $data . 'Request URL ' . $url . ',';
411
+ }
412
+
413
+ $username = '';
414
+ $upload_dir = wp_upload_dir();
415
+ $uploads_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-security-audit-log/404s/';
416
+ $uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/404s/';
417
+
418
+ // Check directory.
419
+ if ( $this->CheckDirectory( $uploads_dir_path ) ) {
420
+ $filename = '6023_' . date( 'Ymd' ) . '.log';
421
+ $fp = $uploads_dir_path . $filename;
422
+ $name_file = $uploads_url . $filename;
423
+ if ( ! $file = fopen( $fp, 'a' ) ) {
424
+ $i = 1;
425
+ $file_opened = false;
426
+ do {
427
+ $fp2 = substr( $fp, 0, -4 ) . '_' . $i . '.log';
428
+ if ( ! file_exists( $fp2 ) ) {
429
+ if ( $file = fopen( $fp2, 'a' ) ) {
430
+ $file_opened = true;
431
+ $name_file = $uploads_url . substr( $name_file, 0, -4 ) . '_' . $i . '.log';
432
+ }
433
+ } else {
434
+ $latest_filename = $this->GetLastModified( $uploads_dir_path, $filename );
435
+ $fp_last = $uploads_dir_path . $latest_filename;
436
+ if ( $file = fopen( $fp_last, 'a' ) ) {
437
+ $file_opened = true;
438
+ $name_file = $uploads_url . $latest_filename;
439
+ }
440
+ }
441
+ $i++;
442
+ } while ( ! $file_opened );
443
+ }
444
+ fwrite( $file, sprintf( "%s\n", $data ) );
445
+ fclose( $file );
446
+ }
447
+ }
448
+ return $name_file;
449
+ }
450
+
451
+ /**
452
+ * Viewing Product Event.
453
+ *
454
+ * Alerts for viewing of product post type for WooCommerce.
455
+ */
456
+ public function viewing_product() {
457
+ // Retrieve the current post object.
458
+ $product = get_queried_object();
459
+
460
+ // Check product post type.
461
+ if ( ! empty( $product ) && $product instanceof WP_Post && 'product' !== $product->post_type ) {
462
+ return $product;
463
+ }
464
+
465
+ if ( is_user_logged_in() && ! is_admin() ) {
466
+ // Filter $_SERVER array for security.
467
+ $server_array = filter_input_array( INPUT_SERVER );
468
+
469
+ $current_path = isset( $server_array['REQUEST_URI'] ) ? $server_array['REQUEST_URI'] : false;
470
+ if ( ! empty( $server_array['HTTP_REFERER'] )
471
+ && ! empty( $current_path )
472
+ && strpos( $server_array['HTTP_REFERER'], $current_path ) !== false ) {
473
+ // Ignore this if we were on the same page so we avoid double audit entries.
474
+ return;
475
+ }
476
+ if ( ! empty( $product->post_title ) ) {
477
+ $editor_link = $this->get_product_editor_link( $product );
478
+ $this->plugin->alerts->Trigger(
479
+ 9073, array(
480
+ 'PostID' => $product->ID,
481
+ 'PostType' => $product->post_type,
482
+ 'ProductStatus' => $product->post_status,
483
+ 'ProductTitle' => $product->post_title,
484
+ 'ProductUrl' => get_permalink( $product->ID ),
485
+ $editor_link['name'] => $editor_link['value'],
486
+ )
487
+ );
488
+ }
489
+ }
490
+ }
491
+
492
+ /**
493
+ * Get editor link.
494
+ *
495
+ * @param WP_Post $post - Product post object.
496
+ * @return array $editor_link - Name and value link.
497
+ */
498
+ private function get_product_editor_link( $post ) {
499
+ // Meta value key.
500
+ $name = 'EditorLinkProduct';
501
+
502
+ // Get editor post link URL.
503
+ $value = get_edit_post_link( $post->ID );
504
+
505
+ // If the URL is not empty then set values.
506
+ if ( ! empty( $value ) ) {
507
+ $editor_link = array(
508
+ 'name' => $name, // Meta key.
509
+ 'value' => $value, // Meta value.
510
+ );
511
+ } else {
512
+ // Get post object.
513
+ $post = get_post( $post->ID );
514
+
515
+ // Set URL action.
516
+ if ( 'revision' === $post->post_type ) {
517
+ $action = '';
518
+ } else {
519
+ $action = '&action=edit';
520
+ }
521
+
522
+ // Get and check post type object.
523
+ $post_type_object = get_post_type_object( $post->post_type );
524
+ if ( ! $post_type_object ) {
525
+ return;
526
+ }
527
+
528
+ // Set editor link manually.
529
+ if ( $post_type_object->_edit_link ) {
530
+ $link = admin_url( sprintf( $post_type_object->_edit_link . $action, $post->ID ) );
531
+ } else {
532
+ $link = '';
533
+ }
534
+
535
+ $editor_link = array(
536
+ 'name' => $name, // Meta key.
537
+ 'value' => $link, // Meta value.
538
+ );
539
+ }
540
+
541
+ return $editor_link;
542
+ }
543
+ }
classes/Sensors/System.php CHANGED
@@ -47,38 +47,37 @@ if ( ! defined( 'ABSPATH' ) ) {
47
  class WSAL_Sensors_System extends WSAL_AbstractSensor {
48
 
49
  /**
50
- * Transient name.
 
51
  * WordPress will prefix the name with "_transient_"
52
  * or "_transient_timeout_" in the options table.
53
  */
54
- const TRANSIENT_404 = 'wsal-404-attempts';
55
- const TRANSIENT_VISITOR_404 = 'wsal-visitor-404-attempts';
56
 
57
  /**
58
  * Listening to events using WP hooks.
59
  */
60
  public function HookEvents() {
61
-
62
  add_action( 'wsal_prune', array( $this, 'EventPruneEvents' ), 10, 2 );
63
  add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
64
 
65
  add_action( 'automatic_updates_complete', array( $this, 'WPUpdate' ), 10, 1 );
66
  add_filter( 'template_redirect', array( $this, 'Event404' ) );
67
 
 
68
  $upload_dir = wp_upload_dir();
 
69
  $uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/404s/';
70
  if ( ! $this->CheckDirectory( $uploads_dir_path ) ) {
71
  wp_mkdir_p( $uploads_dir_path );
72
  }
73
 
74
  // Directory for logged in users log files.
75
- $user_upload_dir = wp_upload_dir();
76
- $user_upload_path = trailingslashit( $user_upload_dir['basedir'] . '/wp-security-audit-log/404s/users/' );
77
  $this->remove_sub_directories( $user_upload_path ); // Remove it.
78
 
79
  // Directory for visitor log files.
80
- $visitor_upload_dir = wp_upload_dir();
81
- $visitor_upload_path = trailingslashit( $visitor_upload_dir['basedir'] . '/wp-security-audit-log/404s/visitors/' );
82
  $this->remove_sub_directories( $visitor_upload_path ); // Remove it.
83
 
84
  // Cron Job 404 log files pruning.
@@ -168,15 +167,6 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
168
  return $this->plugin->settings->Get404LogLimit();
169
  }
170
 
171
- /**
172
- * 404 visitor limit count.
173
- *
174
- * @return integer limit
175
- */
176
- protected function GetVisitor404LogLimit() {
177
- return $this->plugin->settings->GetVisitor404LogLimit();
178
- }
179
-
180
  /**
181
  * Expiration of the transient saved in the WP database.
182
  *
@@ -196,24 +186,10 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
196
  */
197
  protected function IsPast404Limit( $site_id, $username, $ip ) {
198
  $get_fn = $this->IsMultisite() ? 'get_site_transient' : 'get_transient';
199
- $data = $get_fn( self::TRANSIENT_404 );
200
  return ( false !== $data ) && isset( $data[ $site_id . ':' . $username . ':' . $ip ] ) && ($data[ $site_id . ':' . $username . ':' . $ip ] > $this->Get404LogLimit());
201
  }
202
 
203
- /**
204
- * Check visitor 404 limit.
205
- *
206
- * @param integer $site_id - Blog ID.
207
- * @param string $username - Username.
208
- * @param string $ip - IP address.
209
- * @return boolean passed limit true|false
210
- */
211
- protected function IsPastVisitor404Limit( $site_id, $username, $ip ) {
212
- $get_fn = $this->IsMultisite() ? 'get_site_transient' : 'get_transient';
213
- $data = $get_fn( self::TRANSIENT_VISITOR_404 );
214
- return ( false !== $data ) && isset( $data[ $site_id . ':' . $username . ':' . $ip ] ) && ( $data[ $site_id . ':' . $username . ':' . $ip ] > $this->GetVisitor404LogLimit() );
215
- }
216
-
217
  /**
218
  * Increment 404 limit.
219
  *
@@ -236,28 +212,6 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
236
  $set_fn( self::TRANSIENT_404, $data, $this->Get404Expiration() );
237
  }
238
 
239
- /**
240
- * Increment visitor 404 limit.
241
- *
242
- * @param integer $site_id - Blog ID.
243
- * @param string $username - Username.
244
- * @param string $ip - IP address.
245
- */
246
- protected function IncrementVisitor404( $site_id, $username, $ip ) {
247
- $get_fn = $this->IsMultisite() ? 'get_site_transient' : 'get_transient';
248
- $set_fn = $this->IsMultisite() ? 'set_site_transient' : 'set_transient';
249
-
250
- $data = $get_fn( self::TRANSIENT_VISITOR_404 );
251
- if ( ! $data ) {
252
- $data = array();
253
- }
254
- if ( ! isset( $data[ $site_id . ':' . $username . ':' . $ip ] ) ) {
255
- $data[ $site_id . ':' . $username . ':' . $ip ] = 1;
256
- }
257
- $data[ $site_id . ':' . $username . ':' . $ip ]++;
258
- $set_fn( self::TRANSIENT_VISITOR_404, $data, $this->Get404Expiration() );
259
- }
260
-
261
  /**
262
  * Event 404 Not found.
263
  */
@@ -356,65 +310,6 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
356
  }
357
  $this->plugin->alerts->Trigger( 6007, $fields );
358
  }
359
- } else {
360
- // Check if the alert is disabled from the "Enable/Disable Alerts" section.
361
- if ( ! $this->plugin->alerts->IsEnabled( 6023 ) ) {
362
- return;
363
- }
364
-
365
- if ( $this->IsPastVisitor404Limit( $site_id, $username, $ip ) ) {
366
- return;
367
- }
368
-
369
- $obj_occurrence = new WSAL_Models_Occurrence();
370
-
371
- $occ = $obj_occurrence->CheckAlert404(
372
- array(
373
- $ip,
374
- $username,
375
- 6023,
376
- $site_id,
377
- mktime( 0, 0, 0, $m, $d, $y ),
378
- mktime( 0, 0, 0, $m, $d + 1, $y ) - 1,
379
- )
380
- );
381
-
382
- $occ = count( $occ ) ? $occ[0] : null;
383
- if ( ! empty( $occ ) ) {
384
- // Update existing record.
385
- $this->IncrementVisitor404( $site_id, $username, $ip );
386
- $new = ( (int) $occ->GetMetaValue( 'Attempts', 0 ) ) + 1;
387
-
388
- if ( $new > $this->GetVisitor404LogLimit() ) {
389
- $new = 'more than ' . $this->GetVisitor404LogLimit();
390
- $msg .= ' This could possible be a scan, therefore keep an eye on the activity from this IP Address';
391
- }
392
-
393
- $link_file = $this->WriteLog( $new, $ip, $username, false, $url_404 );
394
-
395
- $occ->UpdateMetaValue( 'Attempts', $new );
396
- $occ->UpdateMetaValue( 'Username', $username );
397
- $occ->UpdateMetaValue( 'Msg', $msg );
398
- $occ->UpdateMetaValue( 'URL', $url_404 );
399
- if ( ! empty( $link_file ) ) {
400
- $occ->UpdateMetaValue( 'LinkFile', $link_file );
401
- }
402
- $occ->created_on = null;
403
- $occ->Save();
404
- } else {
405
- $link_file = $this->WriteLog( 1, $ip, $username, false, $url_404 );
406
- // Create a new record.
407
- $fields = array(
408
- 'Attempts' => 1,
409
- 'Username' => $username,
410
- 'Msg' => $msg,
411
- 'URL' => $url_404,
412
- );
413
- if ( ! empty( $link_file ) ) {
414
- $fields['LinkFile'] = $link_file;
415
- }
416
- $this->plugin->alerts->Trigger( 6023, $fields );
417
- }
418
  }
419
  }
420
 
@@ -858,164 +753,90 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
858
  * Write a new line on 404 log file.
859
  * Folder: /uploads/wp-security-audit-log/404s/
860
  *
861
- * @param int $attempts - Number of attempt.
862
- * @param string $ip - IP address.
863
- * @param string $username - Username.
864
  * @param bool $logged_in - True if logged in.
865
- * @param string $url - 404 URL.
866
  */
867
  private function WriteLog( $attempts, $ip, $username = '', $logged_in = true, $url ) {
868
  $name_file = null;
869
 
870
- if ( $logged_in ) {
871
- if ( 'on' === $this->plugin->GetGlobalOption( 'log-404', 'off' ) ) {
872
- // Get option to log referrer.
873
- $log_referrer = $this->plugin->GetGlobalOption( 'log-404-referrer' );
874
-
875
- // Check localhost.
876
- if ( '127.0.0.1' == $ip || '::1' == $ip ) {
877
- $ip = 'localhost';
878
- }
879
-
880
- if ( 'on' === $log_referrer ) {
881
- // Get the referer.
882
- $referrer = filter_input( INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_STRING );
883
- if ( empty( $referrer ) && isset( $_SERVER['HTTP_REFERER'] ) && ! empty( $_SERVER['HTTP_REFERER'] ) ) {
884
- $referrer = sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) );
885
- }
886
-
887
- // Data to write.
888
- $data = '';
889
 
890
- // Append IP if it exists.
891
- $data = ( $ip ) ? $ip . ',' : '';
892
-
893
- // Create/Append to the log file.
894
- $data = $data . 'Request URL ' . $url . ',Referer ' . $referrer . ',';
895
- } else {
896
- // Data to write.
897
- $data = '';
898
-
899
- // Append IP if it exists.
900
- $data = ( $ip ) ? $ip . ',' : '';
901
-
902
- // Create/Append to the log file.
903
- $data = $data . 'Request URL ' . $url . ',';
904
- }
905
-
906
- if ( ! is_user_logged_in() ) {
907
- $username = '';
908
- } else {
909
- $username = $username . '_';
910
- }
911
-
912
- $upload_dir = wp_upload_dir();
913
- $uploads_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-security-audit-log/404s/';
914
- $uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/404s/';
915
-
916
- // Check directory.
917
- if ( $this->CheckDirectory( $uploads_dir_path ) ) {
918
- $filename = '6007_' . date( 'Ymd' ) . '.log';
919
- $fp = $uploads_dir_path . $filename;
920
- $name_file = $uploads_url . $filename;
921
- if ( ! $file = fopen( $fp, 'a' ) ) {
922
- $i = 1;
923
- $file_opened = false;
924
- do {
925
- $fp2 = substr( $fp, 0, -4 ) . '_' . $i . '.log';
926
- if ( ! file_exists( $fp2 ) ) {
927
- if ( $file = fopen( $fp2, 'a' ) ) {
928
- $file_opened = true;
929
- $name_file = $uploads_url . substr( $name_file, 0, -4 ) . '_' . $i . '.log';
930
- }
931
- } else {
932
- $latest_filename = $this->GetLastModified( $uploads_dir_path, $filename );
933
- $fp_last = $uploads_dir_path . $latest_filename;
934
- if ( $file = fopen( $fp_last, 'a' ) ) {
935
- $file_opened = true;
936
- $name_file = $uploads_url . $latest_filename;
937
- }
938
- }
939
- $i++;
940
- } while ( ! $file_opened );
941
- }
942
- fwrite( $file, sprintf( "%s\n", $data ) );
943
- fclose( $file );
944
- }
945
  }
946
- } else {
947
- if ( 'on' === $this->plugin->GetGlobalOption( 'log-visitor-404', 'off' ) ) {
948
- // Get option to log referrer.
949
- $log_referrer = $this->plugin->GetGlobalOption( 'log-visitor-404-referrer' );
950
 
951
- // Check localhost.
952
- if ( '127.0.0.1' == $ip || '::1' == $ip ) {
953
- $ip = 'localhost';
 
 
954
  }
955
 
956
- if ( 'on' === $log_referrer ) {
957
- // Get the referer.
958
- $referrer = filter_input( INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_STRING );
959
- if ( empty( $referrer ) && isset( $_SERVER['HTTP_REFERER'] ) && ! empty( $_SERVER['HTTP_REFERER'] ) ) {
960
- $referrer = sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) );
961
- }
962
-
963
- // Data to write.
964
- $data = '';
965
 
966
- // Append IP if it exists.
967
- $data = ( $ip ) ? $ip . ',' : '';
968
 
969
- // Create/Append to the log file.
970
- $data = $data . 'Request URL ' . $url . ',Referer ' . $referrer . ',';
971
- } else {
972
- // Data to write.
973
- $data = '';
974
 
975
- // Append IP if it exists.
976
- $data = ( $ip ) ? $ip . ',' : '';
977
 
978
- // Create/Append to the log file.
979
- $data = $data . 'Request URL ' . $url . ',';
980
- }
981
 
 
982
  $username = '';
983
- $upload_dir = wp_upload_dir();
984
- $uploads_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-security-audit-log/404s/';
985
- $uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/404s/';
986
-
987
- // Check directory.
988
- if ( $this->CheckDirectory( $uploads_dir_path ) ) {
989
- $filename = '6023_' . date( 'Ymd' ) . '.log';
990
- $fp = $uploads_dir_path . $filename;
991
- $name_file = $uploads_url . $filename;
992
- if ( ! $file = fopen( $fp, 'a' ) ) {
993
- $i = 1;
994
- $file_opened = false;
995
- do {
996
- $fp2 = substr( $fp, 0, -4 ) . '_' . $i . '.log';
997
- if ( ! file_exists( $fp2 ) ) {
998
- if ( $file = fopen( $fp2, 'a' ) ) {
999
- $file_opened = true;
1000
- $name_file = $uploads_url . substr( $name_file, 0, -4 ) . '_' . $i . '.log';
1001
- }
1002
- } else {
1003
- $latest_filename = $this->GetLastModified( $uploads_dir_path, $filename );
1004
- $fp_last = $uploads_dir_path . $latest_filename;
1005
- if ( $file = fopen( $fp_last, 'a' ) ) {
1006
- $file_opened = true;
1007
- $name_file = $uploads_url . $latest_filename;
1008
- }
1009
  }
1010
- $i++;
1011
- } while ( ! $file_opened );
1012
- }
1013
- fwrite( $file, sprintf( "%s\n", $data ) );
1014
- fclose( $file );
 
 
 
 
 
1015
  }
 
 
1016
  }
1017
  }
1018
-
1019
  return $name_file;
1020
  }
1021
 
47
  class WSAL_Sensors_System extends WSAL_AbstractSensor {
48
 
49
  /**
50
+ * 404 User Transient.
51
+ *
52
  * WordPress will prefix the name with "_transient_"
53
  * or "_transient_timeout_" in the options table.
54
  */
55
+ const TRANSIENT_404 = 'wsal-404-attempts';
 
56
 
57
  /**
58
  * Listening to events using WP hooks.
59
  */
60
  public function HookEvents() {
 
61
  add_action( 'wsal_prune', array( $this, 'EventPruneEvents' ), 10, 2 );
62
  add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
63
 
64
  add_action( 'automatic_updates_complete', array( $this, 'WPUpdate' ), 10, 1 );
65
  add_filter( 'template_redirect', array( $this, 'Event404' ) );
66
 
67
+ // Get WP upload directory.
68
  $upload_dir = wp_upload_dir();
69
+
70
  $uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/404s/';
71
  if ( ! $this->CheckDirectory( $uploads_dir_path ) ) {
72
  wp_mkdir_p( $uploads_dir_path );
73
  }
74
 
75
  // Directory for logged in users log files.
76
+ $user_upload_path = trailingslashit( $upload_dir['basedir'] . '/wp-security-audit-log/404s/users/' );
 
77
  $this->remove_sub_directories( $user_upload_path ); // Remove it.
78
 
79
  // Directory for visitor log files.
80
+ $visitor_upload_path = trailingslashit( $upload_dir['basedir'] . '/wp-security-audit-log/404s/visitors/' );
 
81
  $this->remove_sub_directories( $visitor_upload_path ); // Remove it.
82
 
83
  // Cron Job 404 log files pruning.
167
  return $this->plugin->settings->Get404LogLimit();
168
  }
169
 
 
 
 
 
 
 
 
 
 
170
  /**
171
  * Expiration of the transient saved in the WP database.
172
  *
186
  */
187
  protected function IsPast404Limit( $site_id, $username, $ip ) {
188
  $get_fn = $this->IsMultisite() ? 'get_site_transient' : 'get_transient';
189
+ $data = $get_fn( self::TRANSIENT_404 );
190
  return ( false !== $data ) && isset( $data[ $site_id . ':' . $username . ':' . $ip ] ) && ($data[ $site_id . ':' . $username . ':' . $ip ] > $this->Get404LogLimit());
191
  }
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  /**
194
  * Increment 404 limit.
195
  *
212
  $set_fn( self::TRANSIENT_404, $data, $this->Get404Expiration() );
213
  }
214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  /**
216
  * Event 404 Not found.
217
  */
310
  }
311
  $this->plugin->alerts->Trigger( 6007, $fields );
312
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  }
314
  }
315
 
753
  * Write a new line on 404 log file.
754
  * Folder: /uploads/wp-security-audit-log/404s/
755
  *
756
+ * @param int $attempts - Number of attempt.
757
+ * @param string $ip - IP address.
758
+ * @param string $username - Username.
759
  * @param bool $logged_in - True if logged in.
760
+ * @param string $url - 404 URL.
761
  */
762
  private function WriteLog( $attempts, $ip, $username = '', $logged_in = true, $url ) {
763
  $name_file = null;
764
 
765
+ if ( $logged_in && 'on' === $this->plugin->GetGlobalOption( 'log-404', 'off' ) ) {
766
+ // Get option to log referrer.
767
+ $log_referrer = $this->plugin->GetGlobalOption( 'log-404-referrer' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
768
 
769
+ // Check localhost.
770
+ if ( '127.0.0.1' == $ip || '::1' == $ip ) {
771
+ $ip = 'localhost';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
772
  }
 
 
 
 
773
 
774
+ if ( 'on' === $log_referrer ) {
775
+ // Get the referer.
776
+ $referrer = filter_input( INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_STRING );
777
+ if ( empty( $referrer ) && isset( $_SERVER['HTTP_REFERER'] ) && ! empty( $_SERVER['HTTP_REFERER'] ) ) {
778
+ $referrer = sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) );
779
  }
780
 
781
+ // Data to write.
782
+ $data = '';
 
 
 
 
 
 
 
783
 
784
+ // Append IP if it exists.
785
+ $data = ( $ip ) ? $ip . ',' : '';
786
 
787
+ // Create/Append to the log file.
788
+ $data = $data . 'Request URL ' . $url . ',Referer ' . $referrer . ',';
789
+ } else {
790
+ // Data to write.
791
+ $data = '';
792
 
793
+ // Append IP if it exists.
794
+ $data = ( $ip ) ? $ip . ',' : '';
795
 
796
+ // Create/Append to the log file.
797
+ $data = $data . 'Request URL ' . $url . ',';
798
+ }
799
 
800
+ if ( ! is_user_logged_in() ) {
801
  $username = '';
802
+ } else {
803
+ $username = $username . '_';
804
+ }
805
+
806
+ $upload_dir = wp_upload_dir();
807
+ $uploads_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-security-audit-log/404s/';
808
+ $uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/404s/';
809
+
810
+ // Check directory.
811
+ if ( $this->CheckDirectory( $uploads_dir_path ) ) {
812
+ $filename = '6007_' . date( 'Ymd' ) . '.log';
813
+ $fp = $uploads_dir_path . $filename;
814
+ $name_file = $uploads_url . $filename;
815
+ if ( ! $file = fopen( $fp, 'a' ) ) {
816
+ $i = 1;
817
+ $file_opened = false;
818
+ do {
819
+ $fp2 = substr( $fp, 0, -4 ) . '_' . $i . '.log';
820
+ if ( ! file_exists( $fp2 ) ) {
821
+ if ( $file = fopen( $fp2, 'a' ) ) {
822
+ $file_opened = true;
823
+ $name_file = $uploads_url . substr( $name_file, 0, -4 ) . '_' . $i . '.log';
 
 
 
 
824
  }
825
+ } else {
826
+ $latest_filename = $this->GetLastModified( $uploads_dir_path, $filename );
827
+ $fp_last = $uploads_dir_path . $latest_filename;
828
+ if ( $file = fopen( $fp_last, 'a' ) ) {
829
+ $file_opened = true;
830
+ $name_file = $uploads_url . $latest_filename;
831
+ }
832
+ }
833
+ $i++;
834
+ } while ( ! $file_opened );
835
  }
836
+ fwrite( $file, sprintf( "%s\n", $data ) );
837
+ fclose( $file );
838
  }
839
  }
 
840
  return $name_file;
841
  }
842
 
classes/Sensors/UserProfile.php CHANGED
@@ -39,7 +39,6 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
39
  */
40
  public function HookEvents() {
41
  add_action( 'admin_init', array( $this, 'EventAdminInit' ) );
42
- add_action( 'user_register', array( $this, 'EventUserRegister' ) );
43
  add_action( 'edit_user_profile_update', array( $this, 'EventUserChanged' ) );
44
  add_action( 'personal_options_update', array( $this, 'EventUserChanged' ) );
45
  add_action( 'delete_user', array( $this, 'EventUserDeleted' ) );
@@ -70,31 +69,6 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor {
70
  }
71
  }
72
 
73
- /**
74
- * Triggered when a user is registered.
75
- *
76
- * @param int $user_id - User ID of the registered user.
77
- */
78
- public function EventUserRegister( $user_id ) {
79
- $user = get_userdata( $user_id );
80
- $ismu = function_exists( 'is_multisite' ) && is_multisite();
81
- $event = $ismu ? 4012 : ( is_user_logged_in() ? 4001 : 4000 );
82
- $current_user = wp_get_current_user();
83
- $this->plugin->alerts->Trigger(
84
- $event, array(
85
- 'NewUserID' => $user_id,
86
- 'UserChanger' => ! empty( $current_user ) ? $current_user->user_login : '',
87
- 'NewUserData' => (object) array(
88
- 'Username' => $user->user_login,
89
- 'FirstName' => $user->user_firstname,
90
- 'LastName' => $user->user_lastname,
91
- 'Email' => $user->user_email,
92
- 'Roles' => is_array( $user->roles ) ? implode( ', ', $user->roles ) : $user->roles,
93
- ),
94
- ), true
95
- );
96
- }
97
-
98
  /**
99
  * Triggered when a user role is changed.
100
  *
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' ) );
69
  }
70
  }
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  /**
73
  * Triggered when a user role is changed.
74
  *
classes/Sensors/WooCommerce.php CHANGED
@@ -123,13 +123,13 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
123
  add_action( 'wp_trash_post', array( $this, 'EventTrashed' ), 10, 1 );
124
  add_action( 'untrash_post', array( $this, 'EventUntrashed' ) );
125
 
 
126
  add_action( 'create_product_cat', array( $this, 'EventCategoryCreation' ), 10, 1 );
127
 
128
  // Detect live change in stock.
129
  add_filter( 'woocommerce_order_item_quantity', array( $this, 'set_old_stock' ), 10, 3 );
130
  add_action( 'woocommerce_product_set_stock', array( $this, 'product_stock_changed' ), 10, 1 );
131
 
132
- add_action( 'wp_head', array( $this, 'viewing_product' ), 10 );
133
  add_filter( 'post_edit_form_tag', array( $this, 'editing_product' ), 10, 1 );
134
  }
135
 
@@ -1381,45 +1381,6 @@ class WSAL_Sensors_WooCommerce extends WSAL_AbstractSensor {
1381
  return $editor_link;
1382
  }
1383
 
1384
- /**
1385
- * Alerts for viewing of product post type for WooCommerce.
1386
- */
1387
- public function viewing_product() {
1388
- // Retrieve the current post object.
1389
- $product = get_queried_object();
1390
-
1391
- // Check product post type.
1392
- if ( ! empty( $product ) && $product instanceof WP_Post && 'product' !== $product->post_type ) {
1393
- return $product;
1394
- }
1395
-
1396
- if ( is_user_logged_in() && ! is_admin() ) {
1397
- // Filter $_SERVER array for security.
1398
- $server_array = filter_input_array( INPUT_SERVER );
1399
-
1400
- $current_path = isset( $server_array['REQUEST_URI'] ) ? $server_array['REQUEST_URI'] : false;
1401
- if ( ! empty( $server_array['HTTP_REFERER'] )
1402
- && ! empty( $current_path )
1403
- && strpos( $server_array['HTTP_REFERER'], $current_path ) !== false ) {
1404
- // Ignore this if we were on the same page so we avoid double audit entries.
1405
- return;
1406
- }
1407
- if ( ! empty( $product->post_title ) ) {
1408
- $editor_link = $this->GetEditorLink( $product );
1409
- $this->plugin->alerts->Trigger(
1410
- 9073, array(
1411
- 'PostID' => $product->ID,
1412
- 'PostType' => $product->post_type,
1413
- 'ProductStatus' => $product->post_status,
1414
- 'ProductTitle' => $product->post_title,
1415
- 'ProductUrl' => get_permalink( $product->ID ),
1416
- $editor_link['name'] => $editor_link['value'],
1417
- )
1418
- );
1419
- }
1420
- }
1421
- }
1422
-
1423
  /**
1424
  * Alerts for editing of product post type for WooCommerce.
1425
  *
123
  add_action( 'wp_trash_post', array( $this, 'EventTrashed' ), 10, 1 );
124
  add_action( 'untrash_post', array( $this, 'EventUntrashed' ) );
125
 
126
+ // Product category events.
127
  add_action( 'create_product_cat', array( $this, 'EventCategoryCreation' ), 10, 1 );
128
 
129
  // Detect live change in stock.
130
  add_filter( 'woocommerce_order_item_quantity', array( $this, 'set_old_stock' ), 10, 3 );
131
  add_action( 'woocommerce_product_set_stock', array( $this, 'product_stock_changed' ), 10, 1 );
132
 
 
133
  add_filter( 'post_edit_form_tag', array( $this, 'editing_product' ), 10, 1 );
134
  }
135
 
1381
  return $editor_link;
1382
  }
1383
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1384
  /**
1385
  * Alerts for editing of product post type for WooCommerce.
1386
  *
classes/Settings.php CHANGED
@@ -653,8 +653,8 @@ class WSAL_Settings {
653
  * Returns access tokens for a particular action.
654
  *
655
  * @param string $action - Type of action.
656
- * @throws Exception - Unknown action exception.
657
- * @return string[] List of tokens (usernames, roles etc).
658
  */
659
  public function GetAccessTokens( $action ) {
660
  $allowed = array();
@@ -662,9 +662,16 @@ class WSAL_Settings {
662
  case 'view':
663
  $allowed = $this->GetAllowedPluginViewers();
664
  $allowed = array_merge( $allowed, $this->GetAllowedPluginEditors() );
665
- if ( ! $this->IsRestrictAdmins() ) {
666
  $allowed = array_merge( $allowed, $this->GetSuperAdmins() );
667
  $allowed = array_merge( $allowed, $this->GetAdmins() );
 
 
 
 
 
 
 
668
  }
669
  break;
670
  case 'edit':
@@ -1620,6 +1627,17 @@ class WSAL_Settings {
1620
  $value = str_replace( ',', ', ', $value );
1621
  return $highlight_start_tag . esc_html( $value ) . $highlight_end_tag;
1622
 
 
 
 
 
 
 
 
 
 
 
 
1623
  default:
1624
  return $highlight_start_tag . esc_html( $value ) . $highlight_end_tag;
1625
  }
@@ -1687,4 +1705,142 @@ class WSAL_Settings {
1687
 
1688
  return isset( $get_array['wsal-cbid'] ) ? (int) $get_array['wsal-cbid'] : 0;
1689
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1690
  }
653
  * Returns access tokens for a particular action.
654
  *
655
  * @param string $action - Type of action.
656
+ * @throws Exception - Unknown action exception.
657
+ * @return array - List of tokens (usernames, roles etc).
658
  */
659
  public function GetAccessTokens( $action ) {
660
  $allowed = array();
662
  case 'view':
663
  $allowed = $this->GetAllowedPluginViewers();
664
  $allowed = array_merge( $allowed, $this->GetAllowedPluginEditors() );
665
+ if ( ! $this->_plugin->IsMultisite() && ! $this->IsRestrictAdmins() ) {
666
  $allowed = array_merge( $allowed, $this->GetSuperAdmins() );
667
  $allowed = array_merge( $allowed, $this->GetAdmins() );
668
+ } elseif ( $this->_plugin->IsMultisite() && ! $this->IsRestrictAdmins() ) {
669
+ if ( 'only_superadmins' === $this->get_restrict_plugin_setting() ) {
670
+ $allowed = array_merge( $allowed, $this->GetSuperAdmins() );
671
+ } else {
672
+ $allowed = array_merge( $allowed, $this->GetSuperAdmins() );
673
+ $allowed = array_merge( $allowed, $this->GetAdmins() );
674
+ }
675
  }
676
  break;
677
  case 'edit':
1627
  $value = str_replace( ',', ', ', $value );
1628
  return $highlight_start_tag . esc_html( $value ) . $highlight_end_tag;
1629
 
1630
+ case '%FileSettings%' === $name:
1631
+ $file_settings_args = array(
1632
+ 'page' => 'wsal-settings',
1633
+ 'tab' => 'file-changes',
1634
+ );
1635
+ $file_settings = add_query_arg( $file_settings_args, admin_url( 'admin.php' ) );
1636
+ return '<a href="' . esc_url( $file_settings ) . '">' . esc_html__( 'plugin settings', 'wp-security-audit-log' ) . '</a>';
1637
+
1638
+ case '%ContactSupport%' === $name:
1639
+ return '<a href="https://www.wpsecurityauditlog.com/contact/" target="_blank">' . esc_html__( 'contact our support', 'wp-security-audit-log' ) . '</a>';
1640
+
1641
  default:
1642
  return $highlight_start_tag . esc_html( $value ) . $highlight_end_tag;
1643
  }
1705
 
1706
  return isset( $get_array['wsal-cbid'] ) ? (int) $get_array['wsal-cbid'] : 0;
1707
  }
1708
+
1709
+ /**
1710
+ * Method: Meta data formater.
1711
+ *
1712
+ * @since 3.3
1713
+ *
1714
+ * @param string $name - Name of the data.
1715
+ * @param mix $value - Value of the data.
1716
+ * @param integer $occ_id - Event occurrence ID.
1717
+ * @param mixed $highlight - Highlight format.
1718
+ * @return string
1719
+ */
1720
+ public function slack_meta_formatter( $name, $value, $occ_id, $highlight ) {
1721
+ switch ( true ) {
1722
+ case '%Message%' === $name:
1723
+ return esc_html( $value );
1724
+
1725
+ case '%PromoLink%' === $name:
1726
+ case '%CommentLink%' === $name:
1727
+ case '%CommentMsg%' === $name:
1728
+ return $value;
1729
+
1730
+ case '%MetaLink%' === $name:
1731
+ return '';
1732
+
1733
+ case '%RevisionLink%' === $name:
1734
+ $check_value = (string) $value;
1735
+ if ( 'NULL' !== $check_value ) {
1736
+ return ' Click <' . esc_url( $value ) . '|here> to see the content changes.';
1737
+ } else {
1738
+ return false;
1739
+ }
1740
+
1741
+ case '%EditorLinkPost%' === $name:
1742
+ return ' View the <' . esc_url( $value ) . '|post>';
1743
+
1744
+ case '%EditorLinkPage%' === $name:
1745
+ return ' View the <' . esc_url( $value ) . '|page>';
1746
+
1747
+ case '%CategoryLink%' === $name:
1748
+ return ' View the <' . esc_url( $value ) . '|category>';
1749
+
1750
+ case '%TagLink%' === $name:
1751
+ return ' View the <' . esc_url( $value ) . '|tag>';
1752
+
1753
+ case '%EditorLinkForum%' === $name:
1754
+ return ' View the <' . esc_url( $value ) . '|forum>';
1755
+
1756
+ case '%EditorLinkTopic%' === $name:
1757
+ return ' View the <' . esc_url( $value ) . '|topic>';
1758
+
1759
+ case in_array( $name, array( '%MetaValue%', '%MetaValueOld%', '%MetaValueNew%' ), true ):
1760
+ return '*' . ( strlen( $value ) > 50 ? ( esc_html( substr( $value, 0, 50 ) ) . '...' ) : esc_html( $value ) ) . '*';
1761
+
1762
+ case '%ClientIP%' === $name:
1763
+ if ( is_string( $value ) ) {
1764
+ return '*' . str_replace( array( '"', '[', ']' ), '', $value ) . '*';
1765
+ } else {
1766
+ return '_unknown_';
1767
+ }
1768
+
1769
+ case '%LinkFile%' === $name:
1770
+ if ( 'NULL' != $value ) {
1771
+ return '';
1772
+ } else {
1773
+ return 'Click <' . esc_url( add_query_arg( 'page', 'wsal-togglealerts', admin_url( 'admin.php' ) ) ) . '|here> to log such requests to file';
1774
+ }
1775
+
1776
+ case '%URL%' === $name:
1777
+ return '.';
1778
+
1779
+ case '%LogFileLink%' === $name: // Failed login file link.
1780
+ return '';
1781
+
1782
+ case '%Attempts%' === $name: // Failed login attempts.
1783
+ $check_value = (int) $value;
1784
+ if ( 0 === $check_value ) {
1785
+ return '';
1786
+ } else {
1787
+ return $value;
1788
+ }
1789
+
1790
+ case '%LogFileText%' === $name: // Failed login file text.
1791
+ return '';
1792
+
1793
+ case strncmp( $value, 'http://', 7 ) === 0:
1794
+ case strncmp( $value, 'https://', 7 ) === 0:
1795
+ return '<' . esc_html( $value ) . '|' . esc_html( $value ) . '>';
1796
+
1797
+ case '%PostStatus%' === $name:
1798
+ if ( ! empty( $value ) && 'publish' === $value ) {
1799
+ return '*' . esc_html__( 'published', 'wp-security-audit-log' ) . '*';
1800
+ } else {
1801
+ return '*' . esc_html( $value ) . '*';
1802
+ }
1803
+
1804
+ case '%multisite_text%' === $name:
1805
+ if ( $this->_plugin->IsMultisite() && $value ) {
1806
+ $site_info = get_blog_details( $value, true );
1807
+ if ( $site_info ) {
1808
+ return ' on site <' . esc_url( $site_info->siteurl ) . '|' . esc_html( $site_info->blogname ) . '>';
1809
+ }
1810
+ return;
1811
+ }
1812
+ return;
1813
+
1814
+ case '%ReportText%' === $name:
1815
+ return;
1816
+
1817
+ case '%ChangeText%' === $name:
1818
+ return;
1819
+
1820
+ case '%ScanError%' === $name:
1821
+ if ( 'NULL' === $value ) {
1822
+ return false;
1823
+ }
1824
+ /* translators: Mailto link for support. */
1825
+ return ' with errors. ' . sprintf( __( 'Contact us on %s for assistance', 'wp-security-audit-log' ), '<mailto:support@wpsecurityauditlog.com|support@wpsecurityauditlog.com>' );
1826
+
1827
+ case '%TableNames%' === $name:
1828
+ $value = str_replace( ',', ', ', $value );
1829
+ return '*' . esc_html( $value ) . '*';
1830
+
1831
+ case '%FileSettings%' === $name:
1832
+ $file_settings_args = array(
1833
+ 'page' => 'wsal-settings',
1834
+ 'tab' => 'file-changes',
1835
+ );
1836
+ $file_settings = add_query_arg( $file_settings_args, admin_url( 'admin.php' ) );
1837
+ return '<' . esc_url( $file_settings ) . '|' . esc_html__( 'plugin settings', 'wp-security-audit-log' ) . '>';
1838
+
1839
+ case '%ContactSupport%' === $name:
1840
+ return '<https://www.wpsecurityauditlog.com/contact|' . esc_html__( 'contact our support', 'wp-security-audit-log' ) . '>';
1841
+
1842
+ default:
1843
+ return '*' . esc_html( $value ) . '*';
1844
+ }
1845
+ }
1846
  }
classes/SimpleProfiler.php DELETED
@@ -1,48 +0,0 @@
1
- <?php
2
- /**
3
- * @package Wsal
4
- */
5
- class WSAL_SimpleProfiler {
6
-
7
- protected $_items = array();
8
-
9
- public function Start( $name ) {
10
- $item = new WSAL_SimpleProfiler_Item( $name );
11
- $this->_items[] = $item;
12
- return $item;
13
- }
14
-
15
- public function AsComment() {
16
- echo '<!-- ' . esc_html( PHP_EOL );
17
- foreach ( $this->_items as $item ) {
18
- echo ' ' . esc_html( $item . PHP_EOL );
19
- }
20
- echo '-->' . esc_html( PHP_EOL );
21
- }
22
-
23
- public function GetItems() {
24
- return $this->_items;
25
- }
26
- }
27
-
28
- class WSAL_SimpleProfiler_Item {
29
-
30
- public function __construct( $name ) {
31
- $this->name = $name;
32
- $this->t_bgn = microtime( true );
33
- $this->m_bgn = memory_get_usage();
34
- }
35
-
36
- public function Stop() {
37
- $this->t_end = microtime( true );
38
- $this->m_end = memory_get_usage();
39
- }
40
-
41
- public function __toString() {
42
- $t_diff = $this->t_end - $this->t_bgn;
43
- $m_diff = $this->m_end - $this->m_bgn;
44
- return number_format( $t_diff, 6 ) . 's '
45
- . str_pad( number_format( $m_diff, 0 ), 12, ' ', STR_PAD_LEFT ) . 'b '
46
- . $this->name;
47
- }
48
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/ViewManager.php CHANGED
@@ -137,7 +137,8 @@ class WSAL_ViewManager {
137
  * @param string $file Path to file.
138
  */
139
  public function AddFromFile( $file ) {
140
- $this->AddFromClass( $this->_plugin->GetClassFileClassName( $file ) );
 
141
  }
142
 
143
  /**
137
  * @param string $file Path to file.
138
  */
139
  public function AddFromFile( $file ) {
140
+ $file = basename( $file, '.php' );
141
+ $this->AddFromClass( WSAL_CLASS_PREFIX . 'Views_' . $file );
142
  }
143
 
144
  /**
classes/Views/AuditLog.php CHANGED
@@ -150,9 +150,7 @@ class WSAL_Views_AuditLog extends WSAL_AbstractView {
150
  <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>
151
  <div>
152
  <a href="<?php echo esc_url( $more_info ); ?>" target="_blank"><?php esc_html_e( 'Tell me more', 'wp-security-audit-log' ); ?></a>
153
- <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' ); ?>">
154
- <span class="dashicons dashicons-dismiss"></span>
155
- </a>
156
  </div>
157
  </div>
158
  <!-- /.wsal_notice__btns -->
150
  <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>
151
  <div>
152
  <a href="<?php echo esc_url( $more_info ); ?>" target="_blank"><?php esc_html_e( 'Tell me more', 'wp-security-audit-log' ); ?></a>
153
+ <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>
 
 
154
  </div>
155
  </div>
156
  <!-- /.wsal_notice__btns -->
classes/Views/Help.php CHANGED
@@ -410,8 +410,6 @@ class WSAL_Views_Help extends WSAL_AbstractView {
410
 
411
  // PHP configs.
412
  $sysinfo .= "\n" . '-- PHP Configuration --' . "\n\n";
413
- $sysinfo .= 'PHP Safe Mode: ';
414
- $sysinfo .= ini_get( 'safe_mode' ) ? 'Yes' . "\n" : 'No' . "\n";
415
  $sysinfo .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n";
416
  $sysinfo .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n";
417
  $sysinfo .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n";
410
 
411
  // PHP configs.
412
  $sysinfo .= "\n" . '-- PHP Configuration --' . "\n\n";
 
 
413
  $sysinfo .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n";
414
  $sysinfo .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n";
415
  $sysinfo .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n";
classes/Views/Licensing.php CHANGED
@@ -105,7 +105,7 @@ class WSAL_Views_Licensing extends WSAL_AbstractView {
105
  }
106
  ?>
107
  <form id="audit-log-licensing" method="post">
108
- <input type="hidden" name="page" value="<?php echo filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING ); ?>" />
109
  <?php wp_nonce_field( 'wsal-licensing' ); ?>
110
  <table class="wp-list-table widefat fixed">
111
  <thead>
105
  }
106
  ?>
107
  <form id="audit-log-licensing" method="post">
108
+ <input type="hidden" name="page" value="<?php echo isset( $_GET['page'] ) ? esc_attr( sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) : false; ?>" />
109
  <?php wp_nonce_field( 'wsal-licensing' ); ?>
110
  <table class="wp-list-table widefat fixed">
111
  <thead>
classes/Views/Settings.php CHANGED
@@ -39,16 +39,18 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
39
  /**
40
  * WSAL Setting Tabs.
41
  *
42
- * @var array
43
  * @since 3.2.3
 
 
44
  */
45
  private $wsal_setting_tabs = array();
46
 
47
  /**
48
  * Current Setting Tab.
49
  *
50
- * @var string
51
  * @since 3.2.3
 
 
52
  */
53
  private $current_tab = '';
54
 
@@ -193,6 +195,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
193
  'scan_excluded_dirs' => $this->_plugin->GetGlobalOption( 'scan-excluded-directories', array() ),
194
  'scan_excluded_extensions' => $this->_plugin->GetGlobalOption( 'scan-excluded-extensions', array( 'jpg', 'jpeg', 'png', 'bmp', 'pdf', 'txt', 'log', 'mo', 'po', 'mp3', 'wav', 'gif', 'ico', 'jpe', 'psd', 'raw', 'svg', 'tif', 'tiff', 'aif', 'flac', 'm4a', 'oga', 'ogg', 'ra', 'wma', 'asf', 'avi', 'mkv', 'mov', 'mp4', 'mpe', 'mpeg', 'mpg', 'ogv', 'qt', 'rm', 'vob', 'webm', 'wm', 'wmv' ) ),
195
  'scan_in_progress' => $this->_plugin->GetGlobalOption( 'scan-in-progress', false ),
 
196
  );
197
  }
198
 
@@ -293,9 +296,12 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
293
  }
294
 
295
  if ( $archiving ) {
296
- $redirect_url = add_query_arg( 'page', 'wsal-ext-settings', admin_url( 'admin.php' ) );
297
- $redirect_url .= '#archiving';
298
- wp_safe_redirect( $redirect_url );
 
 
 
299
  } else {
300
  if ( $items ) {
301
  $redirect_args = array(
@@ -372,7 +378,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
372
  </nav>
373
 
374
  <form id="audit-log-settings" method="post">
375
- <input type="hidden" name="page" value="<?php echo filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING ); ?>" />
376
  <input type="hidden" id="ajaxurl" value="<?php echo esc_attr( admin_url( 'admin-ajax.php' ) ); ?>" />
377
  <?php wp_nonce_field( 'wsal-settings' ); ?>
378
 
@@ -434,9 +440,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
434
  */
435
  private function tab_general() {
436
  ?>
437
- <p class="description">
438
- <?php echo wp_kses( __( 'Need help with setting up the plugin to meet your requirements? <a href="https://www.wpsecurityauditlog.com/contact/" target="_blank">Schedule a 20 minutes consultation and setup call</a> with our experts for just $50.', 'wp-security-audit-log' ), $this->_plugin->allowed_html_tags ); ?>
439
- </p>
440
 
441
  <h3><?php esc_html_e( 'Display latest events widget in dashboard & Admin bar', 'wp-security-audit-log' ); ?></h3>
442
  <p class="description">
@@ -500,9 +504,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
500
  <!-- Dashboard Widget -->
501
 
502
  <h3><?php esc_html_e( 'Add user notification on the WordPress login page', 'wp-security-audit-log' ); ?></h3>
503
- <p class="description">
504
- <?php esc_html_e( 'Many compliance regulations (such as the GDRP) require website administrators to tell the users of their website that all the changes they do when logged in are being logged.', 'wp-security-audit-log' ); ?>
505
- </p>
506
  <table class="form-table wsal-tab">
507
  <tbody>
508
  <tr>
@@ -536,8 +538,8 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
536
  // Allowed HTML tags for this setting.
537
  $allowed_tags = array(
538
  'a' => array(
539
- 'href' => array(),
540
- 'title' => array(),
541
  'target' => array(),
542
  ),
543
  );
@@ -605,9 +607,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
605
  <!-- Reverse Proxy -->
606
 
607
  <h3><?php esc_html_e( 'Who can change the plugin settings?', 'wp-security-audit-log' ); ?></h3>
608
- <p class="description">
609
- <?php esc_html_e( 'By default only users with administrator or super administrator (multisite) roles can change the settings of the plugin. Though you can change these privileges from this section.', 'wp-security-audit-log' ); ?>
610
- </p>
611
  <table class="form-table wsal-tab">
612
  <tbody>
613
  <tr>
@@ -625,20 +625,22 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
625
  <?php esc_html_e( 'Only administrators', 'wp-security-audit-log' ); ?>
626
  </label>
627
  <br/>
 
 
 
 
 
 
 
628
  <label for="only_selected_users">
629
  <input type="radio" name="restrict-plugin-settings" id="only_selected_users" value="only_selected_users" <?php checked( $restrict_settings, 'only_selected_users' ); ?> />
630
  <?php esc_html_e( 'All these users or users with these roles', 'wp-security-audit-log' ); ?>
631
  </label>
632
-
633
- <p class="description">
634
- <?php esc_html_e( 'Specify the username or the users which can change the plugin settings. You can also specify roles.', 'wp-security-audit-log' ); ?>
635
- </p>
636
-
637
  <label>
638
  <input type="text" id="EditorQueryBox" style="width: 250px;">
639
  <input type="button" id="EditorQueryAdd" style="" class="button-primary" value="Add">
640
  </label>
641
-
642
  <div id="EditorList">
643
  <?php
644
  foreach ( $this->_plugin->settings->GetAllowedPluginEditors() as $item ) :
@@ -664,9 +666,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
664
  <!-- Restrict Plugin Access -->
665
 
666
  <h3><?php esc_html_e( 'Allow other users to view the activity log', 'wp-security-audit-log' ); ?></h3>
667
- <p class="description">
668
- <?php esc_html_e( 'By default only users with administrator and super administrator (multisite) role can view the WordPress activity log. Though you can allow other users with no admin role to view the events.', 'wp-security-audit-log' ); ?>
669
- </p>
670
  <table class="form-table wsal-tab">
671
  <tbody>
672
  <tr>
@@ -705,9 +705,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
705
  <!-- Can View Events -->
706
 
707
  <h3><?php esc_html_e( 'Which email address should the plugin use as a from address?', 'wp-security-audit-log' ); ?></h3>
708
- <p class="description">
709
- <?php esc_html_e( 'By default when the plugin sends an email notification it uses the email address specified in this website’s general settings. Though you can change the email address and display name from this section.', 'wp-security-audit-log' ); ?>
710
- </p>
711
  <table class="form-table wsal-tab">
712
  <tbody>
713
  <tr>
@@ -743,9 +741,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
743
  <!-- From Email & Name -->
744
 
745
  <h3><?php esc_html_e( 'Do you want to hide the plugin from the list of installed plugins?', 'wp-security-audit-log' ); ?></h3>
746
- <p class="description">
747
- <?php esc_html_e( 'By default all installed plugins are listed in the plugins page. If you do not want other administrators to see that you installed this plugin set this option to Yes so the WP Security Audit Log is not listed as an installed plugin on this website.', 'wp-security-audit-log' ); ?>
748
- </p>
749
  <table class="form-table wsal-tab">
750
  <tbody>
751
  <tr>
@@ -783,7 +779,10 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
783
  $this->_plugin->settings->SetDisplayName( sanitize_text_field( $post_array['DisplayName'] ) );
784
 
785
  $this->_plugin->settings->SetWidgetsEnabled( sanitize_text_field( $post_array['EnableDashboardWidgets'] ) );
786
- $this->_plugin->settings->set_admin_bar_notif( sanitize_text_field( $post_array['admin_bar_notif'] ) );
 
 
 
787
 
788
  // Get plugin viewers.
789
  $viewers = isset( $post_array['Viewers'] ) ? array_map( 'sanitize_text_field', $post_array['Viewers'] ) : array();
@@ -792,13 +791,15 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
792
  // Get plugin editors.
793
  $editors = isset( $post_array['Editors'] ) ? array_map( 'sanitize_text_field', $post_array['Editors'] ) : array();
794
  $restrict_settings = isset( $post_array['restrict-plugin-settings'] ) ? sanitize_text_field( $post_array['restrict-plugin-settings'] ) : false;
795
- if ( ! empty( $restrict_settings ) && 'only_me' === $restrict_settings ) {
796
- // Add current username to plugin editors.
797
- $editors = array(); // Empty the array to remove previous editors in restrict mode.
798
- $editors[] = wp_get_current_user()->user_login;
799
- } elseif ( ! empty( $restrict_settings ) && 'only_selected_users' !== $restrict_settings ) {
800
- // Empty the editors if option is not user or user roles.
801
- $editors = array();
 
 
802
  }
803
  $this->_plugin->settings->SetAllowedPluginEditors( $editors );
804
 
@@ -837,7 +838,11 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
837
  <?php if ( $this->_plugin->settings->IsArchivingEnabled() ) : ?>
838
  <p class="description">
839
  <?php
840
- $archiving_page = add_query_arg( 'page', 'wsal-ext-settings', admin_url( 'admin.php' ) ) . '#archiving';
 
 
 
 
841
  /* translators: 1: Archive page link tag. 2: Link closing tag. */
842
  echo '<span class="dashicons dashicons-warning"></span> ' . sprintf( esc_html__( 'Retention settings moved to %1$s archiving settings %2$s because archiving is enabled', 'wp-security-audit-log' ), '<a href="' . esc_url( $archiving_page ) . '" target="_blank">', '</a>' );
843
  ?>
@@ -1061,18 +1066,16 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
1061
  <table class="form-table wsal-tab">
1062
  <tbody>
1063
  <tr>
1064
- <th><label for="wp_backend_no"><?php esc_html_e( 'Disable Events for WordPress Background Activity', 'wp-security-audit-log' ); ?></label></th>
1065
  <td>
1066
  <fieldset>
1067
  <label for="wp_backend_yes">
1068
- <input type="radio" name="WPBackend" value="1" id="wp_backend_yes"
1069
- <?php checked( $this->_plugin->settings->IsWPBackend() ); ?> />
1070
  <?php esc_html_e( 'Yes', 'wp-security-audit-log' ); ?>
1071
  </label>
1072
  <br/>
1073
  <label for="wp_backend_no">
1074
- <input type="radio" name="WPBackend" value="0" id="wp_backend_no"
1075
- <?php checked( $this->_plugin->settings->IsWPBackend(), false ); ?> />
1076
  <?php esc_html_e( 'No', 'wp-security-audit-log' ); ?>
1077
  </label>
1078
  </fieldset>
@@ -1394,6 +1397,19 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
1394
  </table>
1395
  <!-- wsal-scan-directories -->
1396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1397
  <h3><?php esc_html_e( 'Do you want to exclude specific files or files with a particular extension from the scan?', 'wp-security-audit-log' ); ?></h3>
1398
  <p class="description"><?php esc_html_e( 'The plugin will scan everything that is in the WordPress root directory or below, even if the files and directories are not part of WordPress. It is recommended to scan all source code files and only exclude files that cannot be tampered, such as text files, media files etc, most of which are already excluded by default.', 'wp-security-audit-log' ); ?></p>
1399
  <table class="form-table wsal-tab">
@@ -1585,6 +1601,7 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
1585
  $this->_plugin->SetGlobalOption( 'scan-hour', isset( $post_array['wsal-scan-hour'] ) ? $post_array['wsal-scan-hour'] : false );
1586
  $this->_plugin->SetGlobalOption( 'scan-day', isset( $post_array['wsal-scan-day'] ) ? $post_array['wsal-scan-day'] : false );
1587
  $this->_plugin->SetGlobalOption( 'scan-date', isset( $post_array['wsal-scan-date'] ) ? $post_array['wsal-scan-date'] : false );
 
1588
 
1589
  // Check and save scan directories.
1590
  if (
@@ -2382,6 +2399,19 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
2382
  // Run a manual scan on all directories.
2383
  for ( $dir = 0; $dir < 7; $dir++ ) {
2384
  if ( ! $this->_plugin->GetGlobalOption( 'stop-scan', false ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
2385
  $file_changes->detect_file_changes( true, $dir );
2386
  } else {
2387
  break;
39
  /**
40
  * WSAL Setting Tabs.
41
  *
 
42
  * @since 3.2.3
43
+ *
44
+ * @var array
45
  */
46
  private $wsal_setting_tabs = array();
47
 
48
  /**
49
  * Current Setting Tab.
50
  *
 
51
  * @since 3.2.3
52
+ *
53
+ * @var string
54
  */
55
  private $current_tab = '';
56
 
195
  'scan_excluded_dirs' => $this->_plugin->GetGlobalOption( 'scan-excluded-directories', array() ),
196
  'scan_excluded_extensions' => $this->_plugin->GetGlobalOption( 'scan-excluded-extensions', array( 'jpg', 'jpeg', 'png', 'bmp', 'pdf', 'txt', 'log', 'mo', 'po', 'mp3', 'wav', 'gif', 'ico', 'jpe', 'psd', 'raw', 'svg', 'tif', 'tiff', 'aif', 'flac', 'm4a', 'oga', 'ogg', 'ra', 'wma', 'asf', 'avi', 'mkv', 'mov', 'mp4', 'mpe', 'mpeg', 'mpg', 'ogv', 'qt', 'rm', 'vob', 'webm', 'wm', 'wmv' ) ),
197
  'scan_in_progress' => $this->_plugin->GetGlobalOption( 'scan-in-progress', false ),
198
+ 'scan_file_size_limit' => $this->_plugin->GetGlobalOption( 'scan-file-size-limit', 5 ),
199
  );
200
  }
201
 
296
  }
297
 
298
  if ( $archiving ) {
299
+ $archiving_args = array(
300
+ 'page' => 'wsal-ext-settings',
301
+ 'tab' => 'archiving',
302
+ );
303
+ $archiving_url = add_query_arg( $archiving_args, admin_url( 'admin.php' ) );
304
+ wp_safe_redirect( $archiving_url );
305
  } else {
306
  if ( $items ) {
307
  $redirect_args = array(
378
  </nav>
379
 
380
  <form id="audit-log-settings" method="post">
381
+ <input type="hidden" name="page" value="<?php echo isset( $_GET['page'] ) ? esc_attr( sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) : false; ?>" />
382
  <input type="hidden" id="ajaxurl" value="<?php echo esc_attr( admin_url( 'admin-ajax.php' ) ); ?>" />
383
  <?php wp_nonce_field( 'wsal-settings' ); ?>
384
 
440
  */
441
  private function tab_general() {
442
  ?>
443
+ <p class="description"><?php echo wp_kses( __( 'Need help with setting up the plugin to meet your requirements? <a href="https://www.wpsecurityauditlog.com/contact/" target="_blank">Schedule a 20 minutes consultation and setup call</a> with our experts for just $50.', 'wp-security-audit-log' ), $this->_plugin->allowed_html_tags ); ?></p>
 
 
444
 
445
  <h3><?php esc_html_e( 'Display latest events widget in dashboard & Admin bar', 'wp-security-audit-log' ); ?></h3>
446
  <p class="description">
504
  <!-- Dashboard Widget -->
505
 
506
  <h3><?php esc_html_e( 'Add user notification on the WordPress login page', 'wp-security-audit-log' ); ?></h3>
507
+ <p class="description"><?php esc_html_e( 'Many compliance regulations (such as the GDRP) require website administrators to tell the users of their website that all the changes they do when logged in are being logged.', 'wp-security-audit-log' ); ?></p>
 
 
508
  <table class="form-table wsal-tab">
509
  <tbody>
510
  <tr>
538
  // Allowed HTML tags for this setting.
539
  $allowed_tags = array(
540
  'a' => array(
541
+ 'href' => array(),
542
+ 'title' => array(),
543
  'target' => array(),
544
  ),
545
  );
607
  <!-- Reverse Proxy -->
608
 
609
  <h3><?php esc_html_e( 'Who can change the plugin settings?', 'wp-security-audit-log' ); ?></h3>
610
+ <p class="description"><?php esc_html_e( 'By default only users with administrator or super administrator (multisite) roles can change the settings of the plugin. Though you can change these privileges from this section.', 'wp-security-audit-log' ); ?></p>
 
 
611
  <table class="form-table wsal-tab">
612
  <tbody>
613
  <tr>
625
  <?php esc_html_e( 'Only administrators', 'wp-security-audit-log' ); ?>
626
  </label>
627
  <br/>
628
+ <?php if ( $this->_plugin->IsMultisite() ) : ?>
629
+ <label for="only_superadmins">
630
+ <input type="radio" name="restrict-plugin-settings" id="only_superadmins" value="only_superadmins" <?php checked( $restrict_settings, 'only_superadmins' ); ?> />
631
+ <?php esc_html_e( 'Only superadmins', 'wp-security-audit-log' ); ?>
632
+ </label>
633
+ <br/>
634
+ <?php endif; ?>
635
  <label for="only_selected_users">
636
  <input type="radio" name="restrict-plugin-settings" id="only_selected_users" value="only_selected_users" <?php checked( $restrict_settings, 'only_selected_users' ); ?> />
637
  <?php esc_html_e( 'All these users or users with these roles', 'wp-security-audit-log' ); ?>
638
  </label>
639
+ <p class="description"><?php esc_html_e( 'Specify the username or the users which can change the plugin settings. You can also specify roles.', 'wp-security-audit-log' ); ?></p>
 
 
 
 
640
  <label>
641
  <input type="text" id="EditorQueryBox" style="width: 250px;">
642
  <input type="button" id="EditorQueryAdd" style="" class="button-primary" value="Add">
643
  </label>
 
644
  <div id="EditorList">
645
  <?php
646
  foreach ( $this->_plugin->settings->GetAllowedPluginEditors() as $item ) :
666
  <!-- Restrict Plugin Access -->
667
 
668
  <h3><?php esc_html_e( 'Allow other users to view the activity log', 'wp-security-audit-log' ); ?></h3>
669
+ <p class="description"><?php esc_html_e( 'By default only users with administrator and super administrator (multisite) role can view the WordPress activity log. Though you can allow other users with no admin role to view the events.', 'wp-security-audit-log' ); ?></p>
 
 
670
  <table class="form-table wsal-tab">
671
  <tbody>
672
  <tr>
705
  <!-- Can View Events -->
706
 
707
  <h3><?php esc_html_e( 'Which email address should the plugin use as a from address?', 'wp-security-audit-log' ); ?></h3>
708
+ <p class="description"><?php esc_html_e( 'By default when the plugin sends an email notification it uses the email address specified in this website’s general settings. Though you can change the email address and display name from this section.', 'wp-security-audit-log' ); ?></p>
 
 
709
  <table class="form-table wsal-tab">
710
  <tbody>
711
  <tr>
741
  <!-- From Email & Name -->
742
 
743
  <h3><?php esc_html_e( 'Do you want to hide the plugin from the list of installed plugins?', 'wp-security-audit-log' ); ?></h3>
744
+ <p class="description"><?php esc_html_e( 'By default all installed plugins are listed in the plugins page. If you do not want other administrators to see that you installed this plugin set this option to Yes so the WP Security Audit Log is not listed as an installed plugin on this website.', 'wp-security-audit-log' ); ?></p>
 
 
745
  <table class="form-table wsal-tab">
746
  <tbody>
747
  <tr>
779
  $this->_plugin->settings->SetDisplayName( sanitize_text_field( $post_array['DisplayName'] ) );
780
 
781
  $this->_plugin->settings->SetWidgetsEnabled( sanitize_text_field( $post_array['EnableDashboardWidgets'] ) );
782
+
783
+ if ( ! wsal_freemius()->is_free_plan() ) {
784
+ $this->_plugin->settings->set_admin_bar_notif( sanitize_text_field( $post_array['admin_bar_notif'] ) );
785
+ }
786
 
787
  // Get plugin viewers.
788
  $viewers = isset( $post_array['Viewers'] ) ? array_map( 'sanitize_text_field', $post_array['Viewers'] ) : array();
791
  // Get plugin editors.
792
  $editors = isset( $post_array['Editors'] ) ? array_map( 'sanitize_text_field', $post_array['Editors'] ) : array();
793
  $restrict_settings = isset( $post_array['restrict-plugin-settings'] ) ? sanitize_text_field( $post_array['restrict-plugin-settings'] ) : false;
794
+ if ( ! empty( $restrict_settings ) ) {
795
+ if ( 'only_me' === $restrict_settings ) {
796
+ // Add current username to plugin editors.
797
+ $editors = array(); // Empty the array to remove previous editors in restrict mode.
798
+ $editors[] = wp_get_current_user()->user_login;
799
+ } elseif ( 'only_selected_users' !== $restrict_settings ) {
800
+ // Empty the editors if option is not user or user roles.
801
+ $editors = array();
802
+ }
803
  }
804
  $this->_plugin->settings->SetAllowedPluginEditors( $editors );
805
 
838
  <?php if ( $this->_plugin->settings->IsArchivingEnabled() ) : ?>
839
  <p class="description">
840
  <?php
841
+ $archiving_args = array(
842
+ 'page' => 'wsal-ext-settings',
843
+ 'tab' => 'archiving',
844
+ );
845
+ $archiving_page = add_query_arg( $archiving_args, admin_url( 'admin.php' ) );
846
  /* translators: 1: Archive page link tag. 2: Link closing tag. */
847
  echo '<span class="dashicons dashicons-warning"></span> ' . sprintf( esc_html__( 'Retention settings moved to %1$s archiving settings %2$s because archiving is enabled', 'wp-security-audit-log' ), '<a href="' . esc_url( $archiving_page ) . '" target="_blank">', '</a>' );
848
  ?>
1066
  <table class="form-table wsal-tab">
1067
  <tbody>
1068
  <tr>
1069
+ <th><label for="wp_backend_no"><?php esc_html_e( 'Enable Events for WordPress Background Activity', 'wp-security-audit-log' ); ?></label></th>
1070
  <td>
1071
  <fieldset>
1072
  <label for="wp_backend_yes">
1073
+ <input type="radio" name="WPBackend" value="1" id="wp_backend_yes" <?php checked( $this->_plugin->settings->IsWPBackend() ); ?> />
 
1074
  <?php esc_html_e( 'Yes', 'wp-security-audit-log' ); ?>
1075
  </label>
1076
  <br/>
1077
  <label for="wp_backend_no">
1078
+ <input type="radio" name="WPBackend" value="0" id="wp_backend_no" <?php checked( $this->_plugin->settings->IsWPBackend(), false ); ?> />
 
1079
  <?php esc_html_e( 'No', 'wp-security-audit-log' ); ?>
1080
  </label>
1081
  </fieldset>
1397
  </table>
1398
  <!-- wsal-scan-directories -->
1399
 
1400
+ <h3><?php esc_html_e( 'What is the biggest file size the plugin should scan?', 'wp-security-audit-log' ); ?></h3>
1401
+ <p class="description"><?php esc_html_e( 'By default the plugin does not scan files that are bigger than 5MB. Such files are not common, hence typically not a target. Though if you are getting a lot of 6032 Events, it is recommended to increase the file size limit from the below option.', 'wp-security-audit-log' ); ?></p>
1402
+ <table class="form-table wsal-tab">
1403
+ <tr>
1404
+ <th><label for="wsal-scan-file-size"><?php esc_html_e( 'File Size Limit', 'wp-security-audit-log' ); ?></label></th>
1405
+ <td>
1406
+ <fieldset>
1407
+ <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' ); ?>
1408
+ </fieldset>
1409
+ </td>
1410
+ </tr>
1411
+ </table>
1412
+
1413
  <h3><?php esc_html_e( 'Do you want to exclude specific files or files with a particular extension from the scan?', 'wp-security-audit-log' ); ?></h3>
1414
  <p class="description"><?php esc_html_e( 'The plugin will scan everything that is in the WordPress root directory or below, even if the files and directories are not part of WordPress. It is recommended to scan all source code files and only exclude files that cannot be tampered, such as text files, media files etc, most of which are already excluded by default.', 'wp-security-audit-log' ); ?></p>
1415
  <table class="form-table wsal-tab">
1601
  $this->_plugin->SetGlobalOption( 'scan-hour', isset( $post_array['wsal-scan-hour'] ) ? $post_array['wsal-scan-hour'] : false );
1602
  $this->_plugin->SetGlobalOption( 'scan-day', isset( $post_array['wsal-scan-day'] ) ? $post_array['wsal-scan-day'] : false );
1603
  $this->_plugin->SetGlobalOption( 'scan-date', isset( $post_array['wsal-scan-date'] ) ? $post_array['wsal-scan-date'] : false );
1604
+ $this->_plugin->SetGlobalOption( 'scan-file-size-limit', isset( $post_array['wsal-scan-file-size'] ) ? $post_array['wsal-scan-file-size'] : false );
1605
 
1606
  // Check and save scan directories.
1607
  if (
2399
  // Run a manual scan on all directories.
2400
  for ( $dir = 0; $dir < 7; $dir++ ) {
2401
  if ( ! $this->_plugin->GetGlobalOption( 'stop-scan', false ) ) {
2402
+ if ( 0 === $dir ) {
2403
+ // Scan started alert.
2404
+ $this->_plugin->alerts->Trigger( 6033, array(
2405
+ 'CurrentUserID' => '0',
2406
+ 'ScanStatus' => 'started',
2407
+ ) );
2408
+ } elseif ( 6 === $dir ) {
2409
+ // Scan stopped.
2410
+ $this->_plugin->alerts->Trigger( 6033, array(
2411
+ 'CurrentUserID' => '0',
2412
+ 'ScanStatus' => 'stopped',
2413
+ ) );
2414
+ }
2415
  $file_changes->detect_file_changes( true, $dir );
2416
  } else {
2417
  break;
classes/Views/ToggleAlerts.php CHANGED
@@ -130,6 +130,9 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
130
 
131
  // Set the option.
132
  $this->_plugin->SetGlobalOption( 'scan-file-changes', $file_change_toggle );
 
 
 
133
  }
134
 
135
  // Log level form submission.
@@ -153,7 +156,8 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
153
  $is_custom = ! empty( $events_diff ) ? true : false; // If difference is not empty then mode is custom.
154
  $log_details = $this->_plugin->GetGlobalOption( 'details-level', false ); // Get log level option.
155
 
156
- $subcat_alerts = array( 1004, 2010, 6007, 2111, 2119, 2016, 2053, 7000, 8009, 8014, 9007, 9027, 9002, 8809, 8813, 6000, 6001, 6019 );
 
157
  ?>
158
  <p>
159
  <form method="post" id="wsal-alerts-level">
@@ -182,12 +186,19 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
182
  </form>
183
  </p>
184
  <h2 id="wsal-tabs" class="nav-tab-wrapper">
185
- <?php foreach ( $safe_names as $name => $safe ) : ?>
 
 
 
 
 
 
 
186
  <a href="#tab-<?php echo esc_attr( $safe ); ?>" class="nav-tab"><?php echo esc_html( $name ); ?></a>
187
  <?php endforeach; ?>
188
  </h2>
189
  <form id="audit-log-viewer" method="post">
190
- <input type="hidden" name="page" value="<?php echo filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING ); ?>" />
191
  <?php wp_nonce_field( 'wsal-togglealerts' ); ?>
192
 
193
  <div class="nav-tabs">
@@ -419,6 +430,8 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
419
  esc_html_e( 'Settings', 'wp-security-audit-log' );
420
  } elseif ( 6019 === $alert->type ) {
421
  esc_html_e( 'Cron Jobs', 'wp-security-audit-log' );
 
 
422
  }
423
  ?>
424
  </h3>
@@ -435,7 +448,13 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
435
  class="alert"
436
  <?php checked( $active[ $alert->type ] ); ?>
437
  value="<?php echo esc_attr( (int) $alert->type ); ?>"
438
- <?php echo esc_attr( $disabled ); ?>
 
 
 
 
 
 
439
  <?php echo ( __( 'File Changes', 'wp-security-audit-log' ) === $subname ) ? 'onclick="wsal_toggle_file_changes(this)"' : false; ?>
440
  />
441
  </th>
@@ -580,6 +599,34 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView {
580
  ?>
581
  </div>
582
  <?php endforeach; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
583
  </div>
584
  <p class="submit"><input type="submit" name="submit" id="submit" class="button button-primary" value="<?php echo esc_attr( __( 'Save Changes', 'wp-security-audit-log' ) ); ?>"></p>
585
  </form>
130
 
131
  // Set the option.
132
  $this->_plugin->SetGlobalOption( 'scan-file-changes', $file_change_toggle );
133
+
134
+ // Set the visitor events option.
135
+ $this->_plugin->SetGlobalOption( 'disable-visitor-events', isset( $post_array['disable-visitor-events'] ) ? 'no' : 'yes' );
136
  }
137
 
138
  // Log level form submission.
156
  $is_custom = ! empty( $events_diff ) ? true : false; // If difference is not empty then mode is custom.
157
  $log_details = $this->_plugin->GetGlobalOption( 'details-level', false ); // Get log level option.
158
 
159
+ $subcat_alerts = array( 1004, 2010, 6007, 2111, 2119, 2016, 2053, 7000, 8009, 8014, 9007, 9027, 9002, 8809, 8813, 6000, 6001, 6019, 6028 );
160
+ $public_events = $this->_plugin->alerts->get_public_events(); // Get public events.
161
  ?>
162
  <p>
163
  <form method="post" id="wsal-alerts-level">
186
  </form>
187
  </p>
188
  <h2 id="wsal-tabs" class="nav-tab-wrapper">
189
+ <?php
190
+ foreach ( $safe_names as $name => $safe ) :
191
+ if ( __( 'Third Party Plugins', 'wp-security-audit-log' ) === $name ) :
192
+ ?>
193
+ <a href="#tab-visitor-events" class="nav-tab">
194
+ <?php esc_html_e( 'Visitor Events', 'wp-security-audit-log' ); ?>
195
+ </a>
196
+ <?php endif; ?>
197
  <a href="#tab-<?php echo esc_attr( $safe ); ?>" class="nav-tab"><?php echo esc_html( $name ); ?></a>
198
  <?php endforeach; ?>
199
  </h2>
200
  <form id="audit-log-viewer" method="post">
201
+ <input type="hidden" name="page" value="<?php echo isset( $_GET['page'] ) ? esc_attr( sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) : false; ?>" />
202
  <?php wp_nonce_field( 'wsal-togglealerts' ); ?>
203
 
204
  <div class="nav-tabs">
430
  esc_html_e( 'Settings', 'wp-security-audit-log' );
431
  } elseif ( 6019 === $alert->type ) {
432
  esc_html_e( 'Cron Jobs', 'wp-security-audit-log' );
433
+ } elseif ( 6028 === $alert->type ) {
434
+ esc_html_e( 'File Changes Scanning', 'wp-security-audit-log' );
435
  }
436
  ?>
437
  </h3>
448
  class="alert"
449
  <?php checked( $active[ $alert->type ] ); ?>
450
  value="<?php echo esc_attr( (int) $alert->type ); ?>"
451
+ <?php
452
+ if ( ! empty( $disabled ) ) {
453
+ echo esc_attr( $disabled );
454
+ } elseif ( 'no' !== $this->_plugin->GetGlobalOption( 'disable-visitor-events', 'no' ) && in_array( $alert->type, $public_events, true ) ) {
455
+ echo 'disabled';
456
+ }
457
+ ?>
458
  <?php echo ( __( 'File Changes', 'wp-security-audit-log' ) === $subname ) ? 'onclick="wsal_toggle_file_changes(this)"' : false; ?>
459
  />
460
  </th>
599
  ?>
600
  </div>
601
  <?php endforeach; ?>
602
+ <div class="wsal-tab" id="tab-visitor-events">
603
+ <h4><?php esc_html_e( 'The plugin also keeps a log of some events that website visitors (non-logged in users) do because it is typically required by site admins. You can disable these events from here:', 'wp-security-audit-log' ); ?></h4>
604
+ <table class="form-table">
605
+ <th><label for="enable-visitor-events"><?php esc_html_e( 'Enable website visitors events', 'wp-security-audit-log' ); ?></label></th>
606
+ <td>
607
+ <fieldset>
608
+ <?php $disable_visitor_events = $this->_plugin->GetGlobalOption( 'disable-visitor-events', 'no' ); ?>
609
+ <label for="disable-visitor-events">
610
+ <input type="checkbox" id="disable-visitor-events" name="disable-visitor-events" <?php checked( $disable_visitor_events, 'no' ); ?> value="no" />
611
+ <?php esc_html_e( 'Enable', 'wp-security-audit-log' ); ?>
612
+ </label>
613
+ </fieldset>
614
+ </td>
615
+ </table>
616
+ <p class="description"><?php esc_html_e( 'Below is the list of the events which are disabled when the above option is disabled:', 'wp-security-audit-log' ); ?></p>
617
+ <ul>
618
+ <?php
619
+ $wsal_alerts = $this->_plugin->alerts->GetAlerts(); // Get alerts list.
620
+ foreach ( $public_events as $public_event ) :
621
+ if ( isset( $wsal_alerts[ $public_event ] ) ) :
622
+ ?>
623
+ <li><?php echo esc_html( $wsal_alerts[ $public_event ]->type . ' — ' . $wsal_alerts[ $public_event ]->desc ); ?></li>
624
+ <?php
625
+ endif;
626
+ endforeach;
627
+ ?>
628
+ </ul>
629
+ </div>
630
  </div>
631
  <p class="submit"><input type="submit" name="submit" id="submit" class="button button-primary" value="<?php echo esc_attr( __( 'Save Changes', 'wp-security-audit-log' ) ); ?>"></p>
632
  </form>
css/auditlog.css CHANGED
@@ -305,7 +305,6 @@ td.column-user {
305
  .wsal_notice__btns a.wsal_notice__btn_dismiss {
306
  color: #AAA;
307
  margin-left: 2px;
308
- text-decoration: none;
309
  }
310
 
311
  .wsal_notice__wrapper img {
305
  .wsal_notice__btns a.wsal_notice__btn_dismiss {
306
  color: #AAA;
307
  margin-left: 2px;
 
308
  }
309
 
310
  .wsal_notice__wrapper img {
css/dist/wsal-wizard.build.css CHANGED
@@ -167,3 +167,5 @@
167
  .sectoken-other {
168
  background: #FFE;
169
  border-color: #ED5; }
 
 
167
  .sectoken-other {
168
  background: #FFE;
169
  border-color: #ED5; }
170
+
171
+ /*# sourceMappingURL=wsal-wizard.build.css.map*/
defaults.php CHANGED
@@ -52,544 +52,546 @@ function load_include_custom_file( $wsal ) {
52
  * Define Default Alerts.
53
  *
54
  * Define default alerts for the plugin.
55
- *
56
- * @param WpSecurityAuditLog $wsal - Instance of main plugin.
57
  */
58
- function wsaldefaults_wsal_init( WpSecurityAuditLog $wsal ) {
59
- $wsal->constants->UseConstants(
60
- array(
61
- // Default PHP constants.
62
- array(
63
- 'name' => 'E_ERROR',
64
- 'description' => __( 'Fatal run-time error.', 'wp-security-audit-log' ),
65
- ),
66
- array(
67
- 'name' => 'E_WARNING',
68
- 'description' => __( 'Run-time warning (non-fatal error).', 'wp-security-audit-log' ),
69
- ),
70
- array(
71
- 'name' => 'E_PARSE',
72
- 'description' => __( 'Compile-time parse error.', 'wp-security-audit-log' ),
73
- ),
74
- array(
75
- 'name' => 'E_NOTICE',
76
- 'description' => __( 'Run-time notice.', 'wp-security-audit-log' ),
77
- ),
78
- array(
79
- 'name' => 'E_CORE_ERROR',
80
- 'description' => __( 'Fatal error that occurred during startup.', 'wp-security-audit-log' ),
81
- ),
82
- array(
83
- 'name' => 'E_CORE_WARNING',
84
- 'description' => __( 'Warnings that occurred during startup.', 'wp-security-audit-log' ),
85
- ),
86
- array(
87
- 'name' => 'E_COMPILE_ERROR',
88
- 'description' => __( 'Fatal compile-time error.', 'wp-security-audit-log' ),
89
- ),
90
- array(
91
- 'name' => 'E_COMPILE_WARNING',
92
- 'description' => __( 'Compile-time warning.', 'wp-security-audit-log' ),
93
- ),
94
- array(
95
- 'name' => 'E_USER_ERROR',
96
- 'description' => __( 'User-generated error message.', 'wp-security-audit-log' ),
97
- ),
98
- array(
99
- 'name' => 'E_USER_WARNING',
100
- 'description' => __( 'User-generated warning message.', 'wp-security-audit-log' ),
101
- ),
102
- array(
103
- 'name' => 'E_USER_NOTICE',
104
- 'description' => __( 'User-generated notice message.', 'wp-security-audit-log' ),
105
- ),
106
- array(
107
- 'name' => 'E_STRICT',
108
- 'description' => __( 'Non-standard/optimal code warning.', 'wp-security-audit-log' ),
109
- ),
110
- array(
111
- 'name' => 'E_RECOVERABLE_ERROR',
112
- 'description' => __( 'Catchable fatal error.', 'wp-security-audit-log' ),
113
- ),
114
- array(
115
- 'name' => 'E_DEPRECATED',
116
- 'description' => __( 'Run-time deprecation notices.', 'wp-security-audit-log' ),
117
- ),
118
- array(
119
- 'name' => 'E_USER_DEPRECATED',
120
- 'description' => __( 'Run-time user deprecation notices.', 'wp-security-audit-log' ),
121
- ),
122
- // Custom constants.
123
  array(
124
- 'name' => 'E_CRITICAL',
125
- 'description' => __( 'Critical, high-impact messages.', 'wp-security-audit-log' ),
126
- ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  array(
128
- 'name' => 'E_DEBUG',
129
- 'description' => __( 'Debug informational messages.', 'wp-security-audit-log' ),
130
- ),
131
- )
132
- );
133
- // Create list of default alerts.
134
- $wsal->alerts->RegisterGroup(
135
- array(
136
- /**
137
- * Section: Users Profiles & Activity
138
- */
139
- __( 'Users Profiles & Activity', 'wp-security-audit-log' ) => array(
140
  /**
141
- * Alerts: Other User Activity
142
  */
143
- __( 'Other User Activity', 'wp-security-audit-log' ) => array(
144
- array( 1000, E_NOTICE, __( 'User logged in', 'wp-security-audit-log' ), __( 'Successfully logged in.', 'wp-security-audit-log' ) ),
145
- array( 1001, E_NOTICE, __( 'User logged out', 'wp-security-audit-log' ), __( 'Successfully logged out.', 'wp-security-audit-log' ) ),
146
- array( 1002, E_WARNING, __( 'Login failed', 'wp-security-audit-log' ), __( '%Attempts% failed login(s) detected.', 'wp-security-audit-log' ) ),
147
- array( 1003, E_WARNING, __( 'Login failed / non existing user', 'wp-security-audit-log' ), __( '%Attempts% failed login(s) detected using non existing user. %LogFileText%', 'wp-security-audit-log' ) ),
148
- array( 1004, E_WARNING, __( 'Login blocked', 'wp-security-audit-log' ), __( 'Blocked from logging in because the same WordPress user is logged in from %ClientIP%.', 'wp-security-audit-log' ) ),
149
- 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' ) ),
150
- 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' ) ),
151
- 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' ) ),
152
- array( 2010, E_NOTICE, __( 'User uploaded file from Uploads directory', 'wp-security-audit-log' ), __( 'Uploaded the file %FileName% in %FilePath%.', 'wp-security-audit-log' ) ),
153
- array( 2011, E_WARNING, __( 'User deleted file from Uploads directory', 'wp-security-audit-log' ), __( 'Deleted the file %FileName% from %FilePath%.', 'wp-security-audit-log' ) ),
154
- 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' ) ),
155
- array( 6023, E_NOTICE, __( 'Website Visitor User requests non-existing pages (404 Error Pages)', 'wp-security-audit-log' ), __( 'Website Visitor Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. %LinkFile%%URL%', 'wp-security-audit-log' ) ),
156
- ),
 
 
 
 
157
 
158
- /**
159
- * Alerts: User Profiles
160
- */
161
- __( 'User Profiles', 'wp-security-audit-log' ) => array(
162
- array( 4000, E_CRITICAL, __( 'New user was created on WordPress', 'wp-security-audit-log' ), __( 'A new user %NewUserData->Username% was created with role of %NewUserData->Roles%.', 'wp-security-audit-log' ) ),
163
- array( 4001, E_CRITICAL, __( 'User created another WordPress user', 'wp-security-audit-log' ), __( '%UserChanger% created a new user %NewUserData->Username% with the role of %NewUserData->Roles%.', 'wp-security-audit-log' ) ),
164
- array( 4002, E_CRITICAL, __( 'The role of a user was changed by another WordPress user', 'wp-security-audit-log' ), __( 'Changed the role of the user %TargetUsername% from %OldRole% to %NewRole%%multisite_text%.', 'wp-security-audit-log' ) ),
165
- array( 4003, E_CRITICAL, __( 'User has changed his or her password', 'wp-security-audit-log' ), __( 'Changed the password.', 'wp-security-audit-log' ) ),
166
- array( 4004, E_CRITICAL, __( 'User changed another user\'s password', 'wp-security-audit-log' ), __( 'Changed the password for the user %TargetUserData->Username% with the role of %TargetUserData->Roles%.', 'wp-security-audit-log' ) ),
167
- array( 4005, E_NOTICE, __( 'User changed his or her email address', 'wp-security-audit-log' ), __( 'Changed the email address from %OldEmail% to %NewEmail%.', 'wp-security-audit-log' ) ),
168
- array( 4006, E_NOTICE, __( 'User changed another user\'s email address', 'wp-security-audit-log' ), __( 'Changed the email address of the user %TargetUsername% from %OldEmail% to %NewEmail%.', 'wp-security-audit-log' ) ),
169
- array( 4007, E_CRITICAL, __( 'User was deleted by another user', 'wp-security-audit-log' ), __( 'Deleted the user %TargetUserData->Username% with the role of %TargetUserData->Roles%.', 'wp-security-audit-log' ) ),
170
- array( 4014, E_NOTICE, __( 'User opened the profile page of another user', 'wp-security-audit-log' ), __( '%UserChanger% opened the profile page of the user %TargetUsername%.', 'wp-security-audit-log' ) ),
171
- array( 4015, E_NOTICE, __( 'User updated a custom field value for a user', 'wp-security-audit-log' ), __( 'Changed the value of the custom field %custom_field_name%%ReportText% for the user %TargetUsername%.%ChangeText%', 'wp-security-audit-log' ) ),
172
- array( 4016, E_NOTICE, __( 'User created a custom field value for a user', 'wp-security-audit-log' ), __( 'Created the value of the custom field %custom_field_name% with %new_value% for the user %TargetUsername%.', 'wp-security-audit-log' ) ),
173
- array( 4017, E_NOTICE, __( 'User changed first name for a user', 'wp-security-audit-log' ), __( 'Changed the first name of the user %TargetUsername% from %old_firstname% to %new_firstname%', 'wp-security-audit-log' ) ),
174
- array( 4018, E_NOTICE, __( 'User changed last name for a user', 'wp-security-audit-log' ), __( 'Changed the last name of the user %TargetUsername% from %old_lastname% to %new_lastname%', 'wp-security-audit-log' ) ),
175
- array( 4019, E_NOTICE, __( 'User changed nickname for a user', 'wp-security-audit-log' ), __( 'Changed the nickname of the user %TargetUsername% from %old_nickname% to %new_nickname%', 'wp-security-audit-log' ) ),
176
- array( 4020, E_WARNING, __( 'User changed the display name for a user', 'wp-security-audit-log' ), __( 'Changed the Display name publicly of user %TargetUsername% from %old_displayname% to %new_displayname%', 'wp-security-audit-log' ) ),
 
177
  ),
178
- ),
179
 
180
- /**
181
- * Section: Content & Comments
182
- */
183
- __( 'Content & Comments', 'wp-security-audit-log' ) => array(
184
  /**
185
- * Alerts: Content
186
  */
187
- __( 'Content', 'wp-security-audit-log' ) => array(
188
- array( 2000, E_NOTICE, __( 'User created a new post and saved it as draft', 'wp-security-audit-log' ), __( 'Created a new %PostType% titled %PostTitle% and saved it as draft. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
189
- array( 2001, E_NOTICE, __( 'User published a post', 'wp-security-audit-log' ), __( 'Published a %PostType% titled %PostTitle%. URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
190
- array( 2002, E_NOTICE, __( 'User modified a post', 'wp-security-audit-log' ), __( 'Modified the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
191
- array( 2008, E_WARNING, __( 'User permanently deleted a post from the trash', 'wp-security-audit-log' ), __( 'Permanently deleted the %PostType% titled %PostTitle%. URL was %PostUrl%.', 'wp-security-audit-log' ) ),
192
- array( 2012, E_WARNING, __( 'User moved a post to the trash', 'wp-security-audit-log' ), __( 'Moved the %PostStatus% %PostType% titled %PostTitle% to trash. URL is %PostUrl%.', 'wp-security-audit-log' ) ),
193
- array( 2014, E_CRITICAL, __( 'User restored a post from trash', 'wp-security-audit-log' ), __( 'The %PostStatus% %PostType% titled %PostTitle% has been restored from trash. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
194
- array( 2017, E_NOTICE, __( 'User changed post URL', 'wp-security-audit-log' ), __( 'Changed the URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
195
- array( 2019, E_NOTICE, __( 'User changed post author', 'wp-security-audit-log' ), __( 'Changed the author of the %PostStatus% %PostType% titled %PostTitle% from %OldAuthor% to %NewAuthor%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
196
- array( 2021, E_NOTICE, __( 'User changed post status', 'wp-security-audit-log' ), __( 'Changed the status of the %PostType% titled %PostTitle% from %OldStatus% to %NewStatus%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
197
- array( 2025, E_WARNING, __( 'User changed the visibility of a post', 'wp-security-audit-log' ), __( 'Changed the visibility of the %PostStatus% %PostType% titled %PostTitle% from %OldVisibility% to %NewVisibility%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
198
- array( 2027, E_NOTICE, __( 'User changed the date of a post', 'wp-security-audit-log' ), __( 'Changed the date of the %PostStatus% %PostType% titled %PostTitle% from %OldDate% to %NewDate%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
199
- array( 2047, E_NOTICE, __( 'User changed the parent of a page', 'wp-security-audit-log' ), __( 'Changed the parent of the %PostStatus% %PostType% titled %PostTitle% from %OldParentName% to %NewParentName%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
200
- array( 2048, E_CRITICAL, __( 'User changed the template of a page', 'wp-security-audit-log' ), __( 'Changed the template of the %PostStatus% %PostType% titled %PostTitle% from %OldTemplate% to %NewTemplate%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
201
- array( 2049, E_NOTICE, __( 'User set a post as sticky', 'wp-security-audit-log' ), __( 'Set the post %PostTitle% as Sticky. Post URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
202
- array( 2050, E_NOTICE, __( 'User removed post from sticky', 'wp-security-audit-log' ), __( 'Removed the post %PostTitle% from Sticky. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
203
- array( 2065, E_WARNING, __( 'User modified the content of a post', 'wp-security-audit-log' ), __( 'Modified the content of the %PostStatus% %PostType% titled %PostTitle%. Post URL is %PostUrl%. %RevisionLink% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
204
- array( 2073, E_NOTICE, __( 'User submitted a post for review', 'wp-security-audit-log' ), __( 'Submitted the %PostType% titled %PostTitle% for review. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
205
- array( 2074, E_NOTICE, __( 'User scheduled a post', 'wp-security-audit-log' ), __( 'Scheduled the %PostType% titled %PostTitle% to be published on %PublishingDate%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
206
- array( 2086, E_NOTICE, __( 'User changed title of a post', 'wp-security-audit-log' ), __( 'Changed the title of the %PostStatus% %PostType% from %OldTitle% to %NewTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
207
- array( 2100, E_NOTICE, __( 'User opened a post in the editor', 'wp-security-audit-log' ), __( 'Opened the %PostStatus% %PostType% titled %PostTitle% in the editor. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
208
- array( 2101, E_NOTICE, __( 'User viewed a post', 'wp-security-audit-log' ), __( 'Viewed the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
209
- array( 2106, E_NOTICE, __( 'A plugin modified a post', 'wp-security-audit-log' ), __( 'Plugin modified the %PostStatus% %PostType% titled %PostTitle% of type %PostType%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
210
- array( 2111, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks in a post', 'wp-security-audit-log' ), __( 'Disabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
211
- array( 2112, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks in a post', 'wp-security-audit-log' ), __( 'Enabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
212
- array( 2119, E_NOTICE, __( 'User added post tag', 'wp-security-audit-log' ), __( 'Added the tag %tag% to the %PostStatus% post titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
213
- array( 2120, E_NOTICE, __( 'User removed post tag', 'wp-security-audit-log' ), __( 'Removed the tag %tag% from the %PostStatus% post titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
214
- array( 2121, E_NOTICE, __( 'User created new tag', 'wp-security-audit-log' ), __( 'Added a new tag called %TagName%. View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
215
- array( 2122, E_NOTICE, __( 'User deleted tag', 'wp-security-audit-log' ), __( 'Deleted the tag %TagName%.', 'wp-security-audit-log' ) ),
216
- array( 2123, E_NOTICE, __( 'User renamed tag', 'wp-security-audit-log' ), __( 'Renamed a tag from %old_name% to %new_name%. View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
217
- array( 2124, E_NOTICE, __( 'User changed tag slug', 'wp-security-audit-log' ), __( 'Changed the slug of tag %tag% from %old_slug% to %new_slug%. View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
218
- array( 2125, E_NOTICE, __( 'User changed tag description', 'wp-security-audit-log' ), __( 'Changed the description of the tag %tag%%ReportText%.%ChangeText% View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
219
- array( 2016, E_NOTICE, __( 'User changed post category', 'wp-security-audit-log' ), __( 'Changed the category of the %PostStatus% %PostType% titled %PostTitle% from %OldCategories% to %NewCategories%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
220
- array( 2023, E_NOTICE, __( 'User created new category', 'wp-security-audit-log' ), __( 'Created a new category called %CategoryName%. Category slug is %Slug%. %CategoryLink%.', 'wp-security-audit-log' ) ),
221
- array( 2024, E_WARNING, __( 'User deleted category', 'wp-security-audit-log' ), __( 'Deleted the %CategoryName% category. Category slug was %Slug%. %CategoryLink%.', 'wp-security-audit-log' ) ),
222
- array( 2052, E_NOTICE, __( 'Changed the parent of a category', 'wp-security-audit-log' ), __( 'Changed the parent of the category %CategoryName% from %OldParent% to %NewParent%. %CategoryLink%.', 'wp-security-audit-log' ) ),
223
- array( 2127, E_WARNING, __( 'User changed category name', 'wp-security-audit-log' ), __( 'Changed the name of the category %old_name% to %new_name%.', 'wp-security-audit-log' ) ),
224
- array( 2128, E_CRITICAL, __( 'User changed category slug', 'wp-security-audit-log' ), __( 'Changed the slug of the category %CategoryName% from %old_slug% to %new_slug%.', 'wp-security-audit-log' ) ),
225
- array( 2053, E_CRITICAL, __( 'User created a custom field for a post', 'wp-security-audit-log' ), __( 'Created a new custom field called %MetaKey% with value %MetaValue% in the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.<br>%MetaLink%.', 'wp-security-audit-log' ) ),
226
- array( 2054, E_CRITICAL, __( 'User updated a custom field value for a post', 'wp-security-audit-log' ), __( 'Modified the value of the custom field %MetaKey%%ReportText% in the %PostStatus% %PostType% titled %PostTitle%.%ChangeText% URL is: %PostUrl%. %EditorLinkPost%.<br>%MetaLink%.', 'wp-security-audit-log' ) ),
227
- array( 2055, E_CRITICAL, __( 'User deleted a custom field from a post', 'wp-security-audit-log' ), __( 'Deleted the custom field %MetaKey% with value %MetaValue% from %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
228
- array( 2062, E_CRITICAL, __( 'User updated a custom field name for a post', 'wp-security-audit-log' ), __( 'Changed the custom field\'s name from %MetaKeyOld% to %MetaKeyNew% in the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.<br>%MetaLink%.', 'wp-security-audit-log' ) ),
229
- ),
 
 
 
 
230
 
231
- /**
232
- * Alerts: Comments
233
- */
234
- __( 'Comments', 'wp-security-audit-log' ) => array(
235
- array( 2090, E_NOTICE, __( 'User approved a comment', 'wp-security-audit-log' ), __( 'Approved the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
236
- array( 2091, E_NOTICE, __( 'User unapproved a comment', 'wp-security-audit-log' ), __( 'Unapproved the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
237
- array( 2092, E_NOTICE, __( 'User replied to a comment', 'wp-security-audit-log' ), __( 'Replied to the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
238
- array( 2093, E_NOTICE, __( 'User edited a comment', 'wp-security-audit-log' ), __( 'Edited a comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
239
- array( 2094, E_NOTICE, __( 'User marked a comment as Spam', 'wp-security-audit-log' ), __( 'Marked the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% as Spam.', 'wp-security-audit-log' ) ),
240
- array( 2095, E_NOTICE, __( 'User marked a comment as Not Spam', 'wp-security-audit-log' ), __( 'Marked the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% as Not Spam.', 'wp-security-audit-log' ) ),
241
- array( 2096, E_NOTICE, __( 'User moved a comment to trash', 'wp-security-audit-log' ), __( 'Moved the comment posted in response to the post %PostTitle% by %Author% on %Date% to trash.', 'wp-security-audit-log' ) ),
242
- array( 2097, E_NOTICE, __( 'User restored a comment from the trash', 'wp-security-audit-log' ), __( 'Restored the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% from the trash.', 'wp-security-audit-log' ) ),
243
- array( 2098, E_NOTICE, __( 'User permanently deleted a comment', 'wp-security-audit-log' ), __( 'Permanently deleted the comment posted in response to the post %PostTitle% by %Author% on %Date%.', 'wp-security-audit-log' ) ),
244
- array( 2099, E_NOTICE, __( 'User posted a comment', 'wp-security-audit-log' ), __( '%CommentMsg% on %CommentLink%.', 'wp-security-audit-log' ) ),
245
- array( 2126, E_NOTICE, __( 'Visitor posted a comment', 'wp-security-audit-log' ), __( '%CommentMsg% on %CommentLink%.', 'wp-security-audit-log' ) ),
246
- ),
247
 
248
- /**
249
- * Alerts: Custom Post Types
250
- *
251
- * IMPORTANT: These alerts should not be removed from here
252
- * for backwards compatibilty.
253
- *
254
- * @deprecated 3.1.0
255
- */
256
- __( 'Custom Post Types', 'wp-security-audit-log' ) => array(
257
- array( 2003, E_NOTICE, __( 'User modified a draft blog post', 'wp-security-audit-log' ), __( 'Modified the draft post with the %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
258
- array( 2029, E_NOTICE, __( 'User created a new post with custom post type and saved it as draft', 'wp-security-audit-log' ), __( 'Created a new custom post called %PostTitle% of type %PostType%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
259
- array( 2030, E_NOTICE, __( 'User published a post with custom post type', 'wp-security-audit-log' ), __( 'Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
260
- array( 2031, E_NOTICE, __( 'User modified a post with custom post type', 'wp-security-audit-log' ), __( 'Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
261
- array( 2032, E_NOTICE, __( 'User modified a draft post with custom post type', 'wp-security-audit-log' ), __( 'Modified the draft custom post %PostTitle% of type is %PostType%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
262
- array( 2033, E_WARNING, __( 'User permanently deleted post with custom post type', 'wp-security-audit-log' ), __( 'Permanently Deleted the custom post %PostTitle% of type %PostType%.', 'wp-security-audit-log' ) ),
263
- array( 2034, E_WARNING, __( 'User moved post with custom post type to trash', 'wp-security-audit-log' ), __( 'Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was %PostUrl%.', 'wp-security-audit-log' ) ),
264
- array( 2035, E_CRITICAL, __( 'User restored post with custom post type from trash', 'wp-security-audit-log' ), __( 'The custom post %PostTitle% of type %PostType% has been restored from trash. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
265
- array( 2036, E_NOTICE, __( 'User changed the category of a post with custom post type', 'wp-security-audit-log' ), __( 'Changed the category(ies) of the custom post %PostTitle% of type %PostType% from %OldCategories% to %NewCategories%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
266
- array( 2037, E_NOTICE, __( 'User changed the URL of a post with custom post type', 'wp-security-audit-log' ), __( 'Changed the URL of the custom post %PostTitle% of type %PostType% from %OldUrl% to %NewUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
267
- array( 2038, E_NOTICE, __( 'User changed the author or post with custom post type', 'wp-security-audit-log' ), __( 'Changed the author of custom post %PostTitle% of type %PostType% from %OldAuthor% to %NewAuthor%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
268
- array( 2039, E_NOTICE, __( 'User changed the status of post with custom post type', 'wp-security-audit-log' ), __( 'Changed the status of custom post %PostTitle% of type %PostType% from %OldStatus% to %NewStatus%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
269
- array( 2040, E_WARNING, __( 'User changed the visibility of a post with custom post type', 'wp-security-audit-log' ), __( 'Changed the visibility of the custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
270
- array( 2041, E_NOTICE, __( 'User changed the date of post with custom post type', 'wp-security-audit-log' ), __( 'Changed the date of the custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
271
- array( 2056, E_CRITICAL, __( 'User created a custom field for a custom post type', 'wp-security-audit-log' ), __( 'Created a new custom field %MetaKey% with value %MetaValue% in custom post %PostTitle% of type %PostType%.' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
272
- array( 2057, E_CRITICAL, __( 'User updated a custom field for a custom post type', 'wp-security-audit-log' ), __( 'Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in custom post %PostTitle% of type %PostType%' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
273
- array( 2058, E_CRITICAL, __( 'User deleted a custom field from a custom post type', 'wp-security-audit-log' ), __( 'Deleted the custom field %MetaKey% with id %MetaID% from custom post %PostTitle% of type %PostType%' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
274
- array( 2063, E_CRITICAL, __( 'User updated a custom field name for a custom post type', 'wp-security-audit-log' ), __( 'Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom post %PostTitle% of type %PostType%' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
275
- array( 2067, E_WARNING, __( 'User modified content for a published custom post type', 'wp-security-audit-log' ), __( 'Modified the content of the published custom post type %PostTitle%. Post URL is %PostUrl%.' . '%EditorLinkPost%.', 'wp-security-audit-log' ) ),
276
- array( 2068, E_NOTICE, __( 'User modified content for a draft post', 'wp-security-audit-log' ), __( 'Modified the content of the draft post %PostTitle%.' . '%RevisionLink%' . ' %EditorLinkPost%.', 'wp-security-audit-log' ) ),
277
- array( 2070, E_NOTICE, __( 'User modified content for a draft custom post type', 'wp-security-audit-log' ), __( 'Modified the content of the draft custom post type %PostTitle%.' . '%EditorLinkPost%.', 'wp-security-audit-log' ) ),
278
- array( 2072, E_NOTICE, __( 'User modified content of a post', 'wp-security-audit-log' ), __( 'Modified the content of post %PostTitle% which is submitted for review.' . '%RevisionLink%' . ' %EditorLinkPost%.', 'wp-security-audit-log' ) ),
279
- array( 2076, E_NOTICE, __( 'User scheduled a custom post type', 'wp-security-audit-log' ), __( 'Scheduled the custom post type %PostTitle% to be published %PublishingDate%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
280
- array( 2088, E_NOTICE, __( 'User changed title of a custom post type', 'wp-security-audit-log' ), __( 'Changed the title of the custom post %OldTitle% to %NewTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
281
- array( 2104, E_NOTICE, __( 'User opened a custom post type in the editor', 'wp-security-audit-log' ), __( 'Opened the custom post %PostTitle% of type %PostType% in the editor. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
282
- array( 2105, E_NOTICE, __( 'User viewed a custom post type', 'wp-security-audit-log' ), __( 'Viewed the custom post %PostTitle% of type %PostType%. View the post: %PostUrl%.', 'wp-security-audit-log' ) ),
283
- array( 5021, E_CRITICAL, __( 'A plugin created a custom post', 'wp-security-audit-log' ), __( 'A plugin automatically created the following custom post: %PostTitle%.', 'wp-security-audit-log' ) ),
284
- array( 5027, E_CRITICAL, __( 'A plugin deleted a custom post', 'wp-security-audit-log' ), __( 'A plugin automatically deleted the following custom post: %PostTitle%.', 'wp-security-audit-log' ) ),
285
- array( 2108, E_NOTICE, __( 'A plugin modified a custom post', 'wp-security-audit-log' ), __( 'Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
286
- ),
287
 
288
- /**
289
- * Alerts: Pages
290
- *
291
- * IMPORTANT: These alerts should not be removed from here
292
- * for backwards compatibilty.
293
- *
294
- * @deprecated 3.1.0
295
- */
296
- __( 'Pages', 'wp-security-audit-log' ) => array(
297
- array( 2004, E_NOTICE, __( 'User created a new WordPress page and saved it as draft', 'wp-security-audit-log' ), __( 'Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
298
- array( 2005, E_NOTICE, __( 'User published a WordPress page', 'wp-security-audit-log' ), __( 'Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
299
- array( 2006, E_NOTICE, __( 'User modified a published WordPress page', 'wp-security-audit-log' ), __( 'Modified the published page %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
300
- array( 2007, E_NOTICE, __( 'User modified a draft WordPress page', 'wp-security-audit-log' ), __( 'Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
301
- array( 2009, E_WARNING, __( 'User permanently deleted a page from the trash', 'wp-security-audit-log' ), __( 'Permanently deleted the page %PostTitle%.', 'wp-security-audit-log' ) ),
302
- array( 2013, E_WARNING, __( 'User moved WordPress page to the trash', 'wp-security-audit-log' ), __( 'Moved the page %PostTitle% to trash. Page URL was %PostUrl%.', 'wp-security-audit-log' ) ),
303
- array( 2015, E_CRITICAL, __( 'User restored a WordPress page from trash', 'wp-security-audit-log' ), __( 'Page %PostTitle% has been restored from trash. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
304
- array( 2018, E_NOTICE, __( 'User changed page URL', 'wp-security-audit-log' ), __( 'Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
305
- array( 2020, E_NOTICE, __( 'User changed page author', 'wp-security-audit-log' ), __( 'Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
306
- array( 2022, E_NOTICE, __( 'User changed page status', 'wp-security-audit-log' ), __( 'Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
307
- array( 2026, E_WARNING, __( 'User changed the visibility of a page post', 'wp-security-audit-log' ), __( 'Changed the visibility of the page %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
308
- array( 2028, E_NOTICE, __( 'User changed the date of a page post', 'wp-security-audit-log' ), __( 'Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
309
- array( 2059, E_CRITICAL, __( 'User created a custom field for a page', 'wp-security-audit-log' ), __( 'Created a new custom field called %MetaKey% with value %MetaValue% in the page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
310
- array( 2060, E_CRITICAL, __( 'User updated a custom field value for a page', 'wp-security-audit-log' ), __( 'Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in the page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
311
- array( 2061, E_CRITICAL, __( 'User deleted a custom field from a page', 'wp-security-audit-log' ), __( 'Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
312
- array( 2064, E_CRITICAL, __( 'User updated a custom field name for a page', 'wp-security-audit-log' ), __( 'Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
313
- array( 2066, E_WARNING, __( 'User modified content for a published page', 'wp-security-audit-log' ), __( 'Modified the content of the published page %PostTitle%. Page URL is %PostUrl%. %RevisionLink% %EditorLinkPage%.', 'wp-security-audit-log' ) ),
314
- array( 2069, E_NOTICE, __( 'User modified content for a draft page', 'wp-security-audit-log' ), __( 'Modified the content of draft page %PostTitle%.' . '%RevisionLink%' . ' %EditorLinkPage%.', 'wp-security-audit-log' ) ),
315
- array( 2075, E_NOTICE, __( 'User scheduled a page', 'wp-security-audit-log' ), __( 'Scheduled the page %PostTitle% to be published %PublishingDate%.' . ' %EditorLinkPage%.', 'wp-security-audit-log' ) ),
316
- array( 2087, E_NOTICE, __( 'User changed title of a page', 'wp-security-audit-log' ), __( 'Changed the title of the page %OldTitle% to %NewTitle%.' . ' %EditorLinkPage%.', 'wp-security-audit-log' ) ),
317
- array( 2102, E_NOTICE, __( 'User opened a page in the editor', 'wp-security-audit-log' ), __( 'Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%.', 'wp-security-audit-log' ) ),
318
- array( 2103, E_NOTICE, __( 'User viewed a page', 'wp-security-audit-log' ), __( 'Viewed the page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
319
- array( 2113, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log' ), __( 'Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log' ) ),
320
- array( 2114, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log' ), __( 'Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log' ) ),
321
- array( 2115, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks on a published page', 'wp-security-audit-log' ), __( 'Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
322
- array( 2116, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks on a published page', 'wp-security-audit-log' ), __( 'Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
323
- array( 2117, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks on a draft page', 'wp-security-audit-log' ), __( 'Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
324
- array( 2118, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks on a draft page', 'wp-security-audit-log' ), __( 'Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
325
- array( 5020, E_CRITICAL, __( 'A plugin created a page', 'wp-security-audit-log' ), __( 'A plugin automatically created the following page: %PostTitle%.', 'wp-security-audit-log' ) ),
326
- array( 5026, E_CRITICAL, __( 'A plugin deleted a page', 'wp-security-audit-log' ), __( 'A plugin automatically deleted the following page: %PostTitle%.', 'wp-security-audit-log' ) ),
327
- array( 2107, E_NOTICE, __( 'A plugin modified a page', 'wp-security-audit-log' ), __( 'Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%.', 'wp-security-audit-log' ) ),
 
328
  ),
329
- ),
330
 
331
- /**
332
- * Section: WordPress Install
333
- */
334
- __( 'WordPress Install', 'wp-security-audit-log' ) => array(
335
  /**
336
- * Alerts: Database
337
  */
338
- __( 'Database', 'wp-security-audit-log' ) => array(
339
- array( 5016, E_CRITICAL, __( 'Unknown component created tables', 'wp-security-audit-log' ), __( 'An unknown component created these tables in the database: %TableNames%.', 'wp-security-audit-log' ) ),
340
- array( 5017, E_CRITICAL, __( 'Unknown component modified tables structure', 'wp-security-audit-log' ), __( 'An unknown component modified the structure of these database tables: %TableNames%.', 'wp-security-audit-log' ) ),
341
- array( 5018, E_CRITICAL, __( 'Unknown component deleted tables', 'wp-security-audit-log' ), __( 'An unknown component deleted the following tables from the database: %TableNames%.', 'wp-security-audit-log' ) ),
342
- ),
 
 
 
 
343
 
344
- /**
345
- * Alerts: Plugins
346
- */
347
- __( 'Plugins', 'wp-security-audit-log' ) => array(
348
- array( 5000, E_CRITICAL, __( 'User installed a plugin', 'wp-security-audit-log' ), __( 'Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%.', 'wp-security-audit-log' ) ),
349
- array( 5001, E_CRITICAL, __( 'User activated a WordPress plugin', 'wp-security-audit-log' ), __( 'Activated the plugin %PluginData->Name% installed in %PluginFile%.', 'wp-security-audit-log' ) ),
350
- array( 5002, E_CRITICAL, __( 'User deactivated a WordPress plugin', 'wp-security-audit-log' ), __( 'Deactivated the plugin %PluginData->Name% installed in %PluginFile%.', 'wp-security-audit-log' ) ),
351
- array( 5003, E_CRITICAL, __( 'User uninstalled a plugin', 'wp-security-audit-log' ), __( 'Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile%.', 'wp-security-audit-log' ) ),
352
- array( 5004, E_WARNING, __( 'User upgraded a plugin', 'wp-security-audit-log' ), __( 'Upgraded the plugin %PluginData->Name% installed in %PluginFile%.', 'wp-security-audit-log' ) ),
353
- array( 5010, E_CRITICAL, __( 'Plugin created tables', 'wp-security-audit-log' ), __( 'Plugin %Plugin->Name% created these tables in the database: %TableNames%.', 'wp-security-audit-log' ) ),
354
- array( 5011, E_CRITICAL, __( 'Plugin modified tables structure', 'wp-security-audit-log' ), __( 'Plugin %Plugin->Name% modified the structure of these database tables: %TableNames%.', 'wp-security-audit-log' ) ),
355
- array( 5012, E_CRITICAL, __( 'Plugin deleted tables', 'wp-security-audit-log' ), __( 'Plugin %Plugin->Name% deleted the following tables from the database: %TableNames%.', 'wp-security-audit-log' ) ),
356
- array( 5019, E_CRITICAL, __( 'A plugin created a post', 'wp-security-audit-log' ), __( 'A plugin automatically created the following %PostType% called %PostTitle%. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
357
- array( 5025, E_CRITICAL, __( 'A plugin deleted a post', 'wp-security-audit-log' ), __( 'A plugin automatically deleted the following %PostType% called %PostTitle%.', 'wp-security-audit-log' ) ),
358
- array( 2051, E_CRITICAL, __( 'User changed a file using the plugin editor', 'wp-security-audit-log' ), __( 'Modified %File% with the Plugin Editor.', 'wp-security-audit-log' ) ),
359
- ),
360
 
361
- /**
362
- * Alerts: Themes
363
- */
364
- __( 'Themes', 'wp-security-audit-log' ) => array(
365
- array( 5005, E_WARNING, __( 'User installed a theme', 'wp-security-audit-log' ), __( 'Installed the theme "%Theme->Name%" in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
366
- array( 5006, E_CRITICAL, __( 'User activated a theme', 'wp-security-audit-log' ), __( 'Activated the theme "%Theme->Name%", installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
367
- array( 5007, E_CRITICAL, __( 'User uninstalled a theme', 'wp-security-audit-log' ), __( 'Deleted the theme "%Theme->Name%" installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
368
- array( 5008, E_CRITICAL, __( 'Activated theme on network', 'wp-security-audit-log' ), __( 'Network activated the theme %Theme->Name% installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
369
- array( 5009, E_CRITICAL, __( 'Deactivated theme from network', 'wp-security-audit-log' ), __( 'Network deactivated the theme %Theme->Name% installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
370
- array( 5013, E_CRITICAL, __( 'Theme created tables', 'wp-security-audit-log' ), __( 'Theme %Theme->Name% created these tables in the database: %TableNames%.', 'wp-security-audit-log' ) ),
371
- array( 5014, E_CRITICAL, __( 'Theme modified tables structure', 'wp-security-audit-log' ), __( 'Theme %Theme->Name% modified the structure of these database tables: %TableNames%.', 'wp-security-audit-log' ) ),
372
- array( 5015, E_CRITICAL, __( 'Theme deleted tables', 'wp-security-audit-log' ), __( 'Theme %Theme->Name% deleted the following tables from the database: %TableNames%.', 'wp-security-audit-log' ) ),
373
- array( 5031, E_WARNING, __( 'User updated a theme', 'wp-security-audit-log' ), __( 'Updated the theme "%Theme->Name%" installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
374
- array( 2046, E_CRITICAL, __( 'User changed a file using the theme editor', 'wp-security-audit-log' ), __( 'Modified %File% with the Theme Editor.', 'wp-security-audit-log' ) ),
375
- ),
376
 
377
- /**
378
- * Alerts: System
379
- */
380
- __( 'System', 'wp-security-audit-log' ) => array(
381
- array( 0000, E_CRITICAL, __( 'Unknown Error', 'wp-security-audit-log' ), __( 'An unexpected error has occurred .', 'wp-security-audit-log' ) ),
382
- array( 0001, E_CRITICAL, __( 'PHP error', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
383
- array( 0002, E_WARNING, __( 'PHP warning', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
384
- array( 0003, E_NOTICE, __( 'PHP notice', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
385
- array( 0004, E_CRITICAL, __( 'PHP exception', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
386
- array( 0005, E_CRITICAL, __( 'PHP shutdown error', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
387
- array( 6000, E_NOTICE, __( 'Events automatically pruned by system', 'wp-security-audit-log' ), __( 'System automatically deleted %EventCount% event(s).', 'wp-security-audit-log' ) ),
388
- array( 6004, E_CRITICAL, __( 'WordPress was updated', 'wp-security-audit-log' ), __( 'Updated WordPress from version %OldVersion% to %NewVersion%.', 'wp-security-audit-log' ) ),
389
- array( 6006, E_NOTICE, __( 'Reset plugin\'s settings to default', 'wp-security-audit-log' ), __( 'Reset plugin\'s settings to default.', 'wp-security-audit-log' ) ),
390
- array( 6028, E_CRITICAL, __( 'File content has been modified', 'wp-security-audit-log' ), __( 'The content of the file %FileLocation% has been modified.', 'wp-security-audit-log' ) ),
391
- array( 6029, E_CRITICAL, __( 'File added to the site', 'wp-security-audit-log' ), __( 'The file %FileLocation% has been added to your website.', 'wp-security-audit-log' ) ),
392
- array( 6030, E_CRITICAL, __( 'File deleted from the site', 'wp-security-audit-log' ), __( 'The file %FileLocation% has been deleted from your website.', 'wp-security-audit-log' ) ),
393
- array( 6031, E_CRITICAL, __( 'File not scanned because it is bigger than 5MB', 'wp-security-audit-log' ), __( 'The file %FileLocation% was not scanned because it is bigger than 5MB. Please <a href="https://www.wpsecurityauditlog.com/contact/" target="_blank">contact our support</a> for more information.', 'wp-security-audit-log' ) ),
394
- array( 6032, E_CRITICAL, __( 'File integrity scan stopped due to the limit of 1 million files', 'wp-security-audit-log' ), __( 'The file changes scanning engine has reached the limit of 1 million files and stopped the scan. Please <a href="https://www.wpsecurityauditlog.com/contact/" target="_blank">contact our support</a> for more information.', 'wp-security-audit-log' ) ),
395
- array( 6033, E_NOTICE, __( 'File integrity scan started/stopped', 'wp-security-audit-log' ), __( 'The file integrity scanner has %ScanStatus% scanning %ScanLocation%%ScanError%.', 'wp-security-audit-log' ) ),
396
- array( 6034, E_NOTICE, __( 'Purged the activity log', 'wp-security-audit-log' ), __( 'Purged the activity log.', 'wp-security-audit-log' ) ),
397
- array( 9999, E_CRITICAL, __( 'Advertising Add-ons', 'wp-security-audit-log' ), __( '%PromoName% %PromoMessage%', 'wp-security-audit-log' ) ),
398
- ),
399
 
400
- /**
401
- * Alerts: Menus
402
- */
403
- __( 'Menus', 'wp-security-audit-log' ) => array(
404
- array( 2078, E_NOTICE, __( 'User created new menu', 'wp-security-audit-log' ), __( 'Created a new menu called %MenuName%.', 'wp-security-audit-log' ) ),
405
- array( 2079, E_WARNING, __( 'User added content to a menu', 'wp-security-audit-log' ), __( 'Added the %ContentType% called %ContentName% to menu %MenuName%.', 'wp-security-audit-log' ) ),
406
- array( 2080, E_WARNING, __( 'User removed content from a menu', 'wp-security-audit-log' ), __( 'Removed the %ContentType% called %ContentName% from the menu %MenuName%.', 'wp-security-audit-log' ) ),
407
- array( 2081, E_CRITICAL, __( 'User deleted menu', 'wp-security-audit-log' ), __( 'Deleted the menu %MenuName%.', 'wp-security-audit-log' ) ),
408
- array( 2082, E_WARNING, __( 'User changed menu setting', 'wp-security-audit-log' ), __( '%Status% the menu setting %MenuSetting% in %MenuName%.', 'wp-security-audit-log' ) ),
409
- array( 2083, E_NOTICE, __( 'User modified content in a menu', 'wp-security-audit-log' ), __( 'Modified the %ContentType% called %ContentName% in menu %MenuName%.', 'wp-security-audit-log' ) ),
410
- array( 2084, E_WARNING, __( 'User changed name of a menu', 'wp-security-audit-log' ), __( 'Changed the name of menu %OldMenuName% to %NewMenuName%.', 'wp-security-audit-log' ) ),
411
- array( 2085, E_NOTICE, __( 'User changed order of the objects in a menu', 'wp-security-audit-log' ), __( 'Changed the order of the %ItemName% in menu %MenuName%.', 'wp-security-audit-log' ) ),
412
- array( 2089, E_NOTICE, __( 'User moved objects as a sub-item', 'wp-security-audit-log' ), __( 'Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%.', 'wp-security-audit-log' ) ),
413
- ),
414
 
415
- /**
416
- * Alerts: Widgets
417
- */
418
- __( 'Widgets', 'wp-security-audit-log' ) => array(
419
- array( 2042, E_CRITICAL, __( 'User added a new widget', 'wp-security-audit-log' ), __( 'Added a new %WidgetName% widget in %Sidebar%.', 'wp-security-audit-log' ) ),
420
- array( 2043, E_WARNING, __( 'User modified a widget', 'wp-security-audit-log' ), __( 'Modified the %WidgetName% widget in %Sidebar%.', 'wp-security-audit-log' ) ),
421
- array( 2044, E_CRITICAL, __( 'User deleted widget', 'wp-security-audit-log' ), __( 'Deleted the %WidgetName% widget from %Sidebar%.', 'wp-security-audit-log' ) ),
422
- array( 2045, E_NOTICE, __( 'User moved widget', 'wp-security-audit-log' ), __( 'Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%.', 'wp-security-audit-log' ) ),
423
- array( 2071, E_NOTICE, __( 'User changed widget position', 'wp-security-audit-log' ), __( 'Changed the position of the widget %WidgetName% in sidebar %Sidebar%.', 'wp-security-audit-log' ) ),
424
- ),
425
 
426
- /**
427
- * Alerts: WordPress Settings
428
- */
429
- __( 'WordPress Settings', 'wp-security-audit-log' ) => array(
430
- array( 6001, E_CRITICAL, __( 'Option Anyone Can Register in WordPress settings changed', 'wp-security-audit-log' ), __( '%NewValue% the option "Anyone can register".', 'wp-security-audit-log' ) ),
431
- array( 6002, E_CRITICAL, __( 'New User Default Role changed', 'wp-security-audit-log' ), __( 'Changed the New User Default Role from %OldRole% to %NewRole%.', 'wp-security-audit-log' ) ),
432
- array( 6003, E_CRITICAL, __( 'WordPress Administrator Notification email changed', 'wp-security-audit-log' ), __( 'Changed the WordPress administrator notifications email address from %OldEmail% to %NewEmail%.', 'wp-security-audit-log' ) ),
433
- array( 6005, E_CRITICAL, __( 'User changes the WordPress Permalinks', 'wp-security-audit-log' ), __( 'Changed the WordPress permalinks from %OldPattern% to %NewPattern%.', 'wp-security-audit-log' ) ),
434
- array( 6008, E_CRITICAL, __( 'Enabled/Disabled the option Discourage search engines from indexing this site', 'wp-security-audit-log' ), __( '%Status% the option Discourage search engines from indexing this site.', 'wp-security-audit-log' ) ),
435
- array( 6009, E_CRITICAL, __( 'Enabled/Disabled comments on all the website', 'wp-security-audit-log' ), __( '%Status% comments on all the website.', 'wp-security-audit-log' ) ),
436
- array( 6010, E_CRITICAL, __( 'Enabled/Disabled the option Comment author must fill out name and email', 'wp-security-audit-log' ), __( '%Status% the option Comment author must fill out name and email.', 'wp-security-audit-log' ) ),
437
- array( 6011, E_CRITICAL, __( 'Enabled/Disabled the option Users must be logged in and registered to comment', 'wp-security-audit-log' ), __( '%Status% the option Users must be logged in and registered to comment.', 'wp-security-audit-log' ) ),
438
- array( 6012, E_CRITICAL, __( 'Enabled/Disabled the option to automatically close comments', 'wp-security-audit-log' ), __( '%Status% the option to automatically close comments after %Value% days.', 'wp-security-audit-log' ) ),
439
- array( 6013, E_NOTICE, __( 'Changed the value of the option Automatically close comments', 'wp-security-audit-log' ), __( 'Changed the value of the option Automatically close comments from %OldValue% to %NewValue% days.', 'wp-security-audit-log' ) ),
440
- array( 6014, E_CRITICAL, __( 'Enabled/Disabled the option for comments to be manually approved', 'wp-security-audit-log' ), __( '%Status% the option for comments to be manually approved.', 'wp-security-audit-log' ) ),
441
- array( 6015, E_CRITICAL, __( 'Enabled/Disabled the option for an author to have previously approved comments for the comments to appear', 'wp-security-audit-log' ), __( '%Status% the option for an author to have previously approved comments for the comments to appear.', 'wp-security-audit-log' ) ),
442
- array( 6016, E_CRITICAL, __( 'Changed the number of links that a comment must have to be held in the queue', 'wp-security-audit-log' ), __( 'Changed the number of links from %OldValue% to %NewValue% that a comment must have to be held in the queue.', 'wp-security-audit-log' ) ),
443
- array( 6017, E_CRITICAL, __( 'Modified the list of keywords for comments moderation', 'wp-security-audit-log' ), __( 'Modified the list of keywords for comments moderation.', 'wp-security-audit-log' ) ),
444
- array( 6018, E_CRITICAL, __( 'Modified the list of keywords for comments blacklisting', 'wp-security-audit-log' ), __( 'Modified the list of keywords for comments blacklisting.', 'wp-security-audit-log' ) ),
445
- array( 6024, E_CRITICAL, __( 'Option WordPress Address (URL) in WordPress settings changed', 'wp-security-audit-log' ), __( 'Changed the WordPress address (URL) from %old_url% to %new_url%.', 'wp-security-audit-log' ) ),
446
- array( 6025, E_CRITICAL, __( 'Option Site Address (URL) in WordPress settings changed', 'wp-security-audit-log' ), __( 'Changed the site address (URL) from %old_url% to %new_url%.', 'wp-security-audit-log' ) ),
447
- array( 6019, E_CRITICAL, __( 'Created a New cron job', 'wp-security-audit-log' ), __( 'A new cron job called %name% was created and is scheduled to run %schedule%.', 'wp-security-audit-log' ) ),
448
- array( 6020, E_CRITICAL, __( 'Changed status of the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% was %status%.', 'wp-security-audit-log' ) ),
449
- array( 6021, E_CRITICAL, __( 'Deleted the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% was deleted.', 'wp-security-audit-log' ) ),
450
- array( 6022, E_NOTICE, __( 'Started the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% has just started.', 'wp-security-audit-log' ) ),
 
451
  ),
452
- ),
453
 
454
- /**
455
- * Section: Multisite Network
456
- */
457
- __( 'Multisite Network', 'wp-security-audit-log' ) => array(
458
  /**
459
- * Alerts: MultiSite
460
  */
461
- __( 'MultiSite', 'wp-security-audit-log' ) => array(
462
- array( 4008, E_CRITICAL, __( 'User granted Super Admin privileges', 'wp-security-audit-log' ), __( 'Granted Super Admin privileges to %TargetUsername%.', 'wp-security-audit-log' ) ),
463
- array( 4009, E_CRITICAL, __( 'User revoked from Super Admin privileges', 'wp-security-audit-log' ), __( 'Revoked Super Admin privileges from %TargetUsername%.', 'wp-security-audit-log' ) ),
464
- 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' ) ),
465
- 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' ) ),
466
- array( 4012, E_CRITICAL, __( 'New network user created', 'wp-security-audit-log' ), __( 'Created a new network user %NewUserData->Username%.', 'wp-security-audit-log' ) ),
467
- 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' ) ),
468
- 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' ) ),
469
- array( 7001, E_CRITICAL, __( 'Existing site archived', 'wp-security-audit-log' ), __( 'Archived the site %SiteName%.', 'wp-security-audit-log' ) ),
470
- array( 7002, E_CRITICAL, __( 'Archived site has been unarchived', 'wp-security-audit-log' ), __( 'Unarchived the site %SiteName%.', 'wp-security-audit-log' ) ),
471
- array( 7003, E_CRITICAL, __( 'Deactivated site has been activated', 'wp-security-audit-log' ), __( 'Activated the site %SiteName%.', 'wp-security-audit-log' ) ),
472
- array( 7004, E_CRITICAL, __( 'Site has been deactivated', 'wp-security-audit-log' ), __( 'Deactivated the site %SiteName%.', 'wp-security-audit-log' ) ),
473
- array( 7005, E_CRITICAL, __( 'Existing site deleted from network', 'wp-security-audit-log' ), __( 'Deleted the site %SiteName%.', 'wp-security-audit-log' ) ),
 
 
 
 
 
474
  ),
475
- ),
476
 
477
- /**
478
- * Section: Third Party Support
479
- */
480
- __( 'Third Party Plugins', 'wp-security-audit-log' ) => array(
481
  /**
482
- * Alerts: BBPress Forum
483
  */
484
- __( 'BBPress Forum', 'wp-security-audit-log' ) => array(
485
- array( 8000, E_CRITICAL, __( 'User created new forum', 'wp-security-audit-log' ), __( 'Created new forum %ForumName%. Forum URL is %ForumURL%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
486
- array( 8001, E_NOTICE, __( 'User changed status of a forum', 'wp-security-audit-log' ), __( 'Changed the status of the forum %ForumName% from %OldStatus% to %NewStatus%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
487
- array( 8002, E_NOTICE, __( 'User changed visibility of a forum', 'wp-security-audit-log' ), __( 'Changed the visibility of the forum %ForumName% from %OldVisibility% to %NewVisibility%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
488
- array( 8003, E_CRITICAL, __( 'User changed the URL of a forum', 'wp-security-audit-log' ), __( 'Changed the URL of the forum %ForumName% from %OldUrl% to %NewUrl%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
489
- array( 8004, E_NOTICE, __( 'User changed order of a forum', 'wp-security-audit-log' ), __( 'Changed the order of the forum %ForumName% from %OldOrder% to %NewOrder%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
490
- array( 8005, E_CRITICAL, __( 'User moved forum to trash', 'wp-security-audit-log' ), __( 'Moved the forum %ForumName% to trash.', 'wp-security-audit-log' ) ),
491
- array( 8006, E_WARNING, __( 'User permanently deleted forum', 'wp-security-audit-log' ), __( 'Permanently deleted the forum %ForumName%.', 'wp-security-audit-log' ) ),
492
- array( 8007, E_WARNING, __( 'User restored forum from trash', 'wp-security-audit-log' ), __( 'Restored the forum %ForumName% from trash.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
493
- array( 8008, E_NOTICE, __( 'User changed the parent of a forum', 'wp-security-audit-log' ), __( 'Changed the parent of the forum %ForumName% from %OldParent% to %NewParent%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
494
- array( 8011, E_NOTICE, __( 'User changed type of a forum', 'wp-security-audit-log' ), __( 'Changed the type of the forum %ForumName% from %OldType% to %NewType%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
495
- array( 8009, E_WARNING, __( 'User changed forum\'s role', 'wp-security-audit-log' ), __( 'Changed the forum\'s auto role from %OldRole% to %NewRole%.', 'wp-security-audit-log' ) ),
496
- array( 8010, E_WARNING, __( 'User changed option of a forum', 'wp-security-audit-log' ), __( '%Status% the option for anonymous posting on forum.', 'wp-security-audit-log' ) ),
497
- array( 8012, E_NOTICE, __( 'User changed time to disallow post editing', 'wp-security-audit-log' ), __( 'Changed the time to disallow post editing from %OldTime% to %NewTime% minutes in the forums.', 'wp-security-audit-log' ) ),
498
- array( 8013, E_WARNING, __( 'User changed the forum setting posting throttle time', 'wp-security-audit-log' ), __( 'Changed the posting throttle time from %OldTime% to %NewTime% seconds in the forums.', 'wp-security-audit-log' ) ),
499
- array( 8014, E_NOTICE, __( 'User created new topic', 'wp-security-audit-log' ), __( 'Created a new topic %TopicName%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
500
- array( 8015, E_NOTICE, __( 'User changed status of a topic', 'wp-security-audit-log' ), __( 'Changed the status of the topic %TopicName% from %OldStatus% to %NewStatus%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
501
- array( 8016, E_NOTICE, __( 'User changed type of a topic', 'wp-security-audit-log' ), __( 'Changed the type of the topic %TopicName% from %OldType% to %NewType%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
502
- array( 8017, E_CRITICAL, __( 'User changed URL of a topic', 'wp-security-audit-log' ), __( 'Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%.', 'wp-security-audit-log' ) ),
503
- array( 8018, E_NOTICE, __( 'User changed the forum of a topic', 'wp-security-audit-log' ), __( 'Changed the forum of the topic %TopicName% from %OldForum% to %NewForum%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
504
- array( 8019, E_CRITICAL, __( 'User moved topic to trash', 'wp-security-audit-log' ), __( 'Moved the topic %TopicName% to trash.', 'wp-security-audit-log' ) ),
505
- array( 8020, E_WARNING, __( 'User permanently deleted topic', 'wp-security-audit-log' ), __( 'Permanently deleted the topic %TopicName%.', 'wp-security-audit-log' ) ),
506
- array( 8021, E_WARNING, __( 'User restored topic from trash', 'wp-security-audit-log' ), __( 'Restored the topic %TopicName% from trash.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
507
- 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' ) ),
508
- ),
 
 
 
 
509
 
510
- /**
511
- * Alerts: WooCommerce Products
512
- */
513
- __( 'WooCommerce Products', 'wp-security-audit-log' ) => array(
514
- array( 9000, E_NOTICE, __( 'User created a new product', 'wp-security-audit-log' ), __( 'Created a new product called %ProductTitle% and saved it as draft. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
515
- array( 9001, E_NOTICE, __( 'User published a product', 'wp-security-audit-log' ), __( 'Published a product called %ProductTitle%. Product URL is %ProductUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
516
- array( 9003, E_NOTICE, __( 'User changed the category of a product', 'wp-security-audit-log' ), __( 'Changed the category of the product %ProductTitle% from %OldCategories% to %NewCategories%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
517
- array( 9004, E_NOTICE, __( 'User modified the short description of a product', 'wp-security-audit-log' ), __( 'Modified the short description of the product %ProductTitle%.%ChangeText% View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
518
- array( 9005, E_NOTICE, __( 'User modified the text of a product', 'wp-security-audit-log' ), __( 'Modified the text of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
519
- array( 9006, E_NOTICE, __( 'User changed the URL of a product', 'wp-security-audit-log' ), __( 'Changed the URL of the product %ProductTitle%%ReportText%.%ChangeText% View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
520
- array( 9008, E_NOTICE, __( 'User changed the date of a product', 'wp-security-audit-log' ), __( 'Changed the date of the product %ProductTitle% from %OldDate% to %NewDate%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
521
- array( 9009, E_NOTICE, __( 'User changed the visibility of a product', 'wp-security-audit-log' ), __( 'Changed the visibility of the product %ProductTitle% from %OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
522
- array( 9010, E_NOTICE, __( 'User modified the published product', 'wp-security-audit-log' ), __( 'Modified the published product %ProductTitle%. Product URL is %ProductUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
523
- array( 9011, E_NOTICE, __( 'User modified the draft product', 'wp-security-audit-log' ), __( 'Modified the draft product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
524
- array( 9012, E_WARNING, __( 'User moved a product to trash', 'wp-security-audit-log' ), __( 'Moved the product %ProductTitle% to trash. Product URL was %ProductUrl%.', 'wp-security-audit-log' ) ),
525
- array( 9013, E_WARNING, __( 'User permanently deleted a product', 'wp-security-audit-log' ), __( 'Permanently deleted the product %ProductTitle%.', 'wp-security-audit-log' ) ),
526
- array( 9014, E_CRITICAL, __( 'User restored a product from the trash', 'wp-security-audit-log' ), __( 'Product %ProductTitle% has been restored from trash. View product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
527
- array( 9015, E_NOTICE, __( 'User changed status of a product', 'wp-security-audit-log' ), __( 'Changed the status of the product %ProductTitle% from %OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
528
- array( 9072, E_NOTICE, __( 'User opened a product in the editor', 'wp-security-audit-log' ), __( 'Opened the %ProductStatus% product page %ProductTitle% in editor. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
529
- array( 9073, E_NOTICE, __( 'User viewed a product', 'wp-security-audit-log' ), __( 'Viewed the %ProductStatus% product page %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
530
- array( 9007, E_NOTICE, __( 'User changed the Product Data of a product', 'wp-security-audit-log' ), __( 'Changed the Product Data of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
531
- array( 9016, E_WARNING, __( 'User changed type of a price', 'wp-security-audit-log' ), __( 'Changed the %PriceType% of the product %ProductTitle% from %OldPrice% to %NewPrice%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
532
- array( 9017, E_WARNING, __( 'User changed the SKU of a product', 'wp-security-audit-log' ), __( 'Changed the SKU of the product %ProductTitle% from %OldSku% to %NewSku%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
533
- array( 9018, E_CRITICAL, __( 'User changed the stock status of a product', 'wp-security-audit-log' ), __( 'Changed the stock status of the product %ProductTitle% from %OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
534
- array( 9019, E_WARNING, __( 'User changed the stock quantity', 'wp-security-audit-log' ), __( 'Changed the stock quantity of the product %ProductTitle% from %OldValue% to %NewValue%. View the product: %EditorLinkProduct%', 'wp-security-audit-log' ) ),
535
- array( 9020, E_WARNING, __( 'User set a product type', 'wp-security-audit-log' ), __( 'Set the product %ProductTitle% as %Type%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
536
- array( 9021, E_WARNING, __( 'User changed the weight of a product', 'wp-security-audit-log' ), __( 'Changed the weight of the product %ProductTitle% from %OldWeight% to %NewWeight%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
537
- array( 9022, E_WARNING, __( 'User changed the dimensions of a product', 'wp-security-audit-log' ), __( 'Changed the %DimensionType% dimensions of the product %ProductTitle% from %OldDimension% to %NewDimension%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
538
- array( 9023, E_WARNING, __( 'User added the Downloadable File to a product', 'wp-security-audit-log' ), __( 'Added the Downloadable File %FileName% with File URL %FileUrl% to the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
539
- array( 9024, E_WARNING, __( 'User Removed the Downloadable File from a product', 'wp-security-audit-log' ), __( 'Removed the Downloadable File %FileName% with File URL %FileUrl% from the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
540
- array( 9025, E_WARNING, __( 'User changed the name of a Downloadable File in a product', 'wp-security-audit-log' ), __( 'Changed the name of a Downloadable File from %OldName% to %NewName% in product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
541
- array( 9026, E_WARNING, __( 'User changed the URL of the Downloadable File in a product', 'wp-security-audit-log' ), __( 'Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl% in product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
542
- ),
543
 
544
- /**
545
- * Alerts: WooCommerce
546
- */
547
- __( 'WooCommerce', 'wp-security-audit-log' ) => array(
548
- array( 9027, E_WARNING, __( 'User changed the Weight Unit', 'wp-security-audit-log' ), __( 'Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce.', 'wp-security-audit-log' ) ),
549
- array( 9028, E_WARNING, __( 'User changed the Dimensions Unit', 'wp-security-audit-log' ), __( 'Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce.', 'wp-security-audit-log' ) ),
550
- array( 9029, E_CRITICAL, __( 'User changed the Base Location', 'wp-security-audit-log' ), __( 'Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce.', 'wp-security-audit-log' ) ),
551
- array( 9030, E_CRITICAL, __( 'User Enabled/Disabled taxes', 'wp-security-audit-log' ), __( '%Status% taxes in the WooCommerce store.', 'wp-security-audit-log' ) ),
552
- array( 9031, E_CRITICAL, __( 'User changed the currency', 'wp-security-audit-log' ), __( 'Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce.', 'wp-security-audit-log' ) ),
553
- array( 9032, E_CRITICAL, __( 'User Enabled/Disabled the use of coupons during checkout', 'wp-security-audit-log' ), __( '%Status% the use of coupons during checkout in WooCommerce.', 'wp-security-audit-log' ) ),
554
- array( 9033, E_CRITICAL, __( 'User Enabled/Disabled guest checkout', 'wp-security-audit-log' ), __( '%Status% guest checkout in WooCommerce.', 'wp-security-audit-log' ) ),
555
- array( 9034, E_CRITICAL, __( 'User Enabled/Disabled cash on delivery', 'wp-security-audit-log' ), __( '%Status% the option Enable cash on delivery in WooCommerce.', 'wp-security-audit-log' ) ),
556
- array( 9002, E_NOTICE, __( 'User created a new product category', 'wp-security-audit-log' ), __( 'Created a new product category called %CategoryName% in WooCommerce. Product category slug is %Slug%.', 'wp-security-audit-log' ) ),
557
- ),
558
 
559
- /**
560
- * Alerts: Yoast SEO
561
- */
562
- __( 'Yoast SEO', 'wp-security-audit-log' ) => array(
563
- array( 8801, E_NOTICE, __( 'User changed title of a SEO post', 'wp-security-audit-log' ), __( 'Changed the SEO title of the %PostStatus% %PostType%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
564
- array( 8802, E_NOTICE, __( 'User changed the meta description of a SEO post', 'wp-security-audit-log' ), __( 'Changed the Meta description of the %PostStatus% %PostType% titled %PostTitle%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
565
- array( 8803, E_NOTICE, __( 'User changed setting to allow search engines to show post in search results of a SEO post', 'wp-security-audit-log' ), __( 'Changed the setting to allow search engines to show post in search results from %OldStatus% to %NewStatus% in the %PostStatus% %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
566
- array( 8804, E_NOTICE, __( 'User Enabled/Disabled the option for search engine to follow links of a SEO post', 'wp-security-audit-log' ), __( '%NewStatus% the option for search engine to follow links in the %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
567
- array( 8805, E_NOTICE, __( 'User set the meta robots advanced setting of a SEO post', 'wp-security-audit-log' ), __( 'Set the Meta Robots Advanced setting to %NewStatus% in the %PostStatus% %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
568
- array( 8806, E_NOTICE, __( 'User changed the canonical URL of a SEO post', 'wp-security-audit-log' ), __( 'Changed the Canonical URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
569
- array( 8807, E_NOTICE, __( 'User changed the focus keyword of a SEO post', 'wp-security-audit-log' ), __( 'Changed the focus keyword of the %PostStatus% %PostType% titled %PostTitle% from %old_keywords% to %new_keywords%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
570
- array( 8808, E_NOTICE, __( 'User Enabled/Disabled the option Cornerston Content of a SEO post', 'wp-security-audit-log' ), __( '%Status% the option Cornerston Content on the %PostStatus% %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
571
- array( 8809, E_WARNING, __( 'User changed the Title Separator setting', 'wp-security-audit-log' ), __( 'Changed the Title Separator from %old% to %new% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
572
- array( 8810, E_WARNING, __( 'User changed the Homepage Title setting', 'wp-security-audit-log' ), __( 'Changed the Homepage Title%ReportText% in the Yoast SEO plugin settings.%ChangeText%', 'wp-security-audit-log' ) ),
573
- array( 8811, E_WARNING, __( 'User changed the Homepage Meta description setting', 'wp-security-audit-log' ), __( 'Changed the Homepage Meta description%ReportText% in the Yoast SEO plugin settings.%ChangeText%', 'wp-security-audit-log' ) ),
574
- array( 8812, E_WARNING, __( 'User changed the Company or Person setting', 'wp-security-audit-log' ), __( 'Changed the Company or Person setting from %old% to %new% in the YOAST SEO plugin settings.', 'wp-security-audit-log' ) ),
575
- array( 8813, E_WARNING, __( 'User Enabled/Disabled the option Show Posts/Pages in Search Results in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the option Show %SEOPostType% in Search Results in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
576
- array( 8814, E_WARNING, __( 'User changed the Posts/Pages title template in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( 'Changed the %SEOPostType% title template from %old% to %new% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
577
- array( 8815, E_WARNING, __( 'User Enabled/Disabled SEO analysis in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% SEO analysis in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
578
- array( 8816, E_WARNING, __( 'User Enabled/Disabled readability analysis in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% Readability analysis in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
579
- array( 8817, E_WARNING, __( 'User Enabled/Disabled cornerstone content in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% Cornerstone content in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
580
- array( 8818, E_WARNING, __( 'User Enabled/Disabled the text link counter in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the Text link counter in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
581
- array( 8819, E_WARNING, __( 'User Enabled/Disabled XML sitemaps in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% XML Sitemaps in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
582
- array( 8820, E_WARNING, __( 'User Enabled/Disabled ryte integration in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% Ryte Integration in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
583
- array( 8821, E_WARNING, __( 'User Enabled/Disabled the admin bar menu in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the Admin bar menu in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
584
- array( 8822, E_WARNING, __( 'User changed the Posts/Pages meta description template in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( 'Changed the %SEOPostType% meta description template from %old% to %new% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
585
- array( 8823, E_WARNING, __( 'User set the option Date in Snippet Preview for Posts/Pages in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the option Date in Snippet Preview for %SEOPostType% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
586
- array( 8824, E_WARNING, __( 'User set the option Yoast SEO Meta Box for Posts/Pages in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the option Yoast SEO Meta Box for %SEOPostType% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
587
- array( 8825, E_WARNING, __( 'User Enabled/Disabled the advanced settings for authors in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the advanced settings for authors in the Yoast SEO settings.', 'wp-security-audit-log' ) ),
 
588
  ),
589
- ),
590
- )
591
- );
592
- // Load Custom alerts.
593
- load_include_custom_file( $wsal );
594
  }
595
- add_action( 'wsal_init', 'wsaldefaults_wsal_init' );
52
  * Define Default Alerts.
53
  *
54
  * Define default alerts for the plugin.
 
 
55
  */
56
+ function wsaldefaults_wsal_init() {
57
+ $wsal = WpSecurityAuditLog::GetInstance();
58
+
59
+ if ( is_admin() || $wsal->load_wsal_on_frontend() ) {
60
+ $wsal->constants->UseConstants(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  array(
62
+ // Default PHP constants.
63
+ array(
64
+ 'name' => 'E_ERROR',
65
+ 'description' => __( 'Fatal run-time error.', 'wp-security-audit-log' ),
66
+ ),
67
+ array(
68
+ 'name' => 'E_WARNING',
69
+ 'description' => __( 'Run-time warning (non-fatal error).', 'wp-security-audit-log' ),
70
+ ),
71
+ array(
72
+ 'name' => 'E_PARSE',
73
+ 'description' => __( 'Compile-time parse error.', 'wp-security-audit-log' ),
74
+ ),
75
+ array(
76
+ 'name' => 'E_NOTICE',
77
+ 'description' => __( 'Run-time notice.', 'wp-security-audit-log' ),
78
+ ),
79
+ array(
80
+ 'name' => 'E_CORE_ERROR',
81
+ 'description' => __( 'Fatal error that occurred during startup.', 'wp-security-audit-log' ),
82
+ ),
83
+ array(
84
+ 'name' => 'E_CORE_WARNING',
85
+ 'description' => __( 'Warnings that occurred during startup.', 'wp-security-audit-log' ),
86
+ ),
87
+ array(
88
+ 'name' => 'E_COMPILE_ERROR',
89
+ 'description' => __( 'Fatal compile-time error.', 'wp-security-audit-log' ),
90
+ ),
91
+ array(
92
+ 'name' => 'E_COMPILE_WARNING',
93
+ 'description' => __( 'Compile-time warning.', 'wp-security-audit-log' ),
94
+ ),
95
+ array(
96
+ 'name' => 'E_USER_ERROR',
97
+ 'description' => __( 'User-generated error message.', 'wp-security-audit-log' ),
98
+ ),
99
+ array(
100
+ 'name' => 'E_USER_WARNING',
101
+ 'description' => __( 'User-generated warning message.', 'wp-security-audit-log' ),
102
+ ),
103
+ array(
104
+ 'name' => 'E_USER_NOTICE',
105
+ 'description' => __( 'User-generated notice message.', 'wp-security-audit-log' ),
106
+ ),
107
+ array(
108
+ 'name' => 'E_STRICT',
109
+ 'description' => __( 'Non-standard/optimal code warning.', 'wp-security-audit-log' ),
110
+ ),
111
+ array(
112
+ 'name' => 'E_RECOVERABLE_ERROR',
113
+ 'description' => __( 'Catchable fatal error.', 'wp-security-audit-log' ),
114
+ ),
115
+ array(
116
+ 'name' => 'E_DEPRECATED',
117
+ 'description' => __( 'Run-time deprecation notices.', 'wp-security-audit-log' ),
118
+ ),
119
+ array(
120
+ 'name' => 'E_USER_DEPRECATED',
121
+ 'description' => __( 'Run-time user deprecation notices.', 'wp-security-audit-log' ),
122
+ ),
123
+ // Custom constants.
124
+ array(
125
+ 'name' => 'E_CRITICAL',
126
+ 'description' => __( 'Critical, high-impact messages.', 'wp-security-audit-log' ),
127
+ ),
128
+ array(
129
+ 'name' => 'E_DEBUG',
130
+ 'description' => __( 'Debug informational messages.', 'wp-security-audit-log' ),
131
+ ),
132
+ )
133
+ );
134
+ // Create list of default alerts.
135
+ $wsal->alerts->RegisterGroup(
136
  array(
 
 
 
 
 
 
 
 
 
 
 
 
137
  /**
138
+ * Section: Users Profiles & Activity
139
  */
140
+ __( 'Users Profiles & Activity', 'wp-security-audit-log' ) => array(
141
+ /**
142
+ * Alerts: Other User Activity
143
+ */
144
+ __( 'Other User Activity', 'wp-security-audit-log' ) => array(
145
+ array( 1000, E_NOTICE, __( 'User logged in', 'wp-security-audit-log' ), __( 'Successfully logged in.', 'wp-security-audit-log' ) ),
146
+ array( 1001, E_NOTICE, __( 'User logged out', 'wp-security-audit-log' ), __( 'Successfully logged out.', 'wp-security-audit-log' ) ),
147
+ array( 1002, E_WARNING, __( 'Login failed', 'wp-security-audit-log' ), __( '%Attempts% failed login(s) detected.', 'wp-security-audit-log' ) ),
148
+ array( 1003, E_WARNING, __( 'Login failed / non existing user', 'wp-security-audit-log' ), __( '%Attempts% failed login(s) detected using non existing user. %LogFileText%', 'wp-security-audit-log' ) ),
149
+ array( 1004, E_WARNING, __( 'Login blocked', 'wp-security-audit-log' ), __( 'Blocked from logging in because the same WordPress user is logged in from %ClientIP%.', 'wp-security-audit-log' ) ),
150
+ 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' ) ),
151
+ 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' ) ),
152
+ 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' ) ),
153
+ array( 2010, E_NOTICE, __( 'User uploaded file from Uploads directory', 'wp-security-audit-log' ), __( 'Uploaded the file %FileName% in %FilePath%.', 'wp-security-audit-log' ) ),
154
+ array( 2011, E_WARNING, __( 'User deleted file from Uploads directory', 'wp-security-audit-log' ), __( 'Deleted the file %FileName% from %FilePath%.', 'wp-security-audit-log' ) ),
155
+ 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' ) ),
156
+ array( 6023, E_NOTICE, __( 'Website Visitor User requests non-existing pages (404 Error Pages)', 'wp-security-audit-log' ), __( 'Website Visitor Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. %LinkFile%%URL%', 'wp-security-audit-log' ) ),
157
+ ),
158
 
159
+ /**
160
+ * Alerts: User Profiles
161
+ */
162
+ __( 'User Profiles', 'wp-security-audit-log' ) => array(
163
+ array( 4000, E_CRITICAL, __( 'New user was created on WordPress', 'wp-security-audit-log' ), __( 'A new user %NewUserData->Username% was created with role of %NewUserData->Roles%.', 'wp-security-audit-log' ) ),
164
+ array( 4001, E_CRITICAL, __( 'User created another WordPress user', 'wp-security-audit-log' ), __( '%UserChanger% created a new user %NewUserData->Username% with the role of %NewUserData->Roles%.', 'wp-security-audit-log' ) ),
165
+ array( 4002, E_CRITICAL, __( 'The role of a user was changed by another WordPress user', 'wp-security-audit-log' ), __( 'Changed the role of the user %TargetUsername% from %OldRole% to %NewRole%%multisite_text%.', 'wp-security-audit-log' ) ),
166
+ array( 4003, E_CRITICAL, __( 'User has changed his or her password', 'wp-security-audit-log' ), __( 'Changed the password.', 'wp-security-audit-log' ) ),
167
+ array( 4004, E_CRITICAL, __( 'User changed another user\'s password', 'wp-security-audit-log' ), __( 'Changed the password for the user %TargetUserData->Username% with the role of %TargetUserData->Roles%.', 'wp-security-audit-log' ) ),
168
+ array( 4005, E_NOTICE, __( 'User changed his or her email address', 'wp-security-audit-log' ), __( 'Changed the email address from %OldEmail% to %NewEmail%.', 'wp-security-audit-log' ) ),
169
+ array( 4006, E_NOTICE, __( 'User changed another user\'s email address', 'wp-security-audit-log' ), __( 'Changed the email address of the user %TargetUsername% from %OldEmail% to %NewEmail%.', 'wp-security-audit-log' ) ),
170
+ array( 4007, E_CRITICAL, __( 'User was deleted by another user', 'wp-security-audit-log' ), __( 'Deleted the user %TargetUserData->Username% with the role of %TargetUserData->Roles%.', 'wp-security-audit-log' ) ),
171
+ array( 4014, E_NOTICE, __( 'User opened the profile page of another user', 'wp-security-audit-log' ), __( '%UserChanger% opened the profile page of the user %TargetUsername%.', 'wp-security-audit-log' ) ),
172
+ array( 4015, E_NOTICE, __( 'User updated a custom field value for a user', 'wp-security-audit-log' ), __( 'Changed the value of the custom field %custom_field_name%%ReportText% for the user %TargetUsername%.%ChangeText%', 'wp-security-audit-log' ) ),
173
+ array( 4016, E_NOTICE, __( 'User created a custom field value for a user', 'wp-security-audit-log' ), __( 'Created the value of the custom field %custom_field_name% with %new_value% for the user %TargetUsername%.', 'wp-security-audit-log' ) ),
174
+ array( 4017, E_NOTICE, __( 'User changed first name for a user', 'wp-security-audit-log' ), __( 'Changed the first name of the user %TargetUsername% from %old_firstname% to %new_firstname%', 'wp-security-audit-log' ) ),
175
+ array( 4018, E_NOTICE, __( 'User changed last name for a user', 'wp-security-audit-log' ), __( 'Changed the last name of the user %TargetUsername% from %old_lastname% to %new_lastname%', 'wp-security-audit-log' ) ),
176
+ array( 4019, E_NOTICE, __( 'User changed nickname for a user', 'wp-security-audit-log' ), __( 'Changed the nickname of the user %TargetUsername% from %old_nickname% to %new_nickname%', 'wp-security-audit-log' ) ),
177
+ array( 4020, E_WARNING, __( 'User changed the display name for a user', 'wp-security-audit-log' ), __( 'Changed the Display name publicly of user %TargetUsername% from %old_displayname% to %new_displayname%', 'wp-security-audit-log' ) ),
178
+ ),
179
  ),
 
180
 
 
 
 
 
181
  /**
182
+ * Section: Content & Comments
183
  */
184
+ __( 'Content & Comments', 'wp-security-audit-log' ) => array(
185
+ /**
186
+ * Alerts: Content
187
+ */
188
+ __( 'Content', 'wp-security-audit-log' ) => array(
189
+ array( 2000, E_NOTICE, __( 'User created a new post and saved it as draft', 'wp-security-audit-log' ), __( 'Created a new %PostType% titled %PostTitle% and saved it as draft. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
190
+ array( 2001, E_NOTICE, __( 'User published a post', 'wp-security-audit-log' ), __( 'Published a %PostType% titled %PostTitle%. URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
191
+ array( 2002, E_NOTICE, __( 'User modified a post', 'wp-security-audit-log' ), __( 'Modified the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
192
+ array( 2008, E_WARNING, __( 'User permanently deleted a post from the trash', 'wp-security-audit-log' ), __( 'Permanently deleted the %PostType% titled %PostTitle%. URL was %PostUrl%.', 'wp-security-audit-log' ) ),
193
+ array( 2012, E_WARNING, __( 'User moved a post to the trash', 'wp-security-audit-log' ), __( 'Moved the %PostStatus% %PostType% titled %PostTitle% to trash. URL is %PostUrl%.', 'wp-security-audit-log' ) ),
194
+ array( 2014, E_CRITICAL, __( 'User restored a post from trash', 'wp-security-audit-log' ), __( 'The %PostStatus% %PostType% titled %PostTitle% has been restored from trash. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
195
+ array( 2017, E_NOTICE, __( 'User changed post URL', 'wp-security-audit-log' ), __( 'Changed the URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
196
+ array( 2019, E_NOTICE, __( 'User changed post author', 'wp-security-audit-log' ), __( 'Changed the author of the %PostStatus% %PostType% titled %PostTitle% from %OldAuthor% to %NewAuthor%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
197
+ array( 2021, E_NOTICE, __( 'User changed post status', 'wp-security-audit-log' ), __( 'Changed the status of the %PostType% titled %PostTitle% from %OldStatus% to %NewStatus%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
198
+ array( 2025, E_WARNING, __( 'User changed the visibility of a post', 'wp-security-audit-log' ), __( 'Changed the visibility of the %PostStatus% %PostType% titled %PostTitle% from %OldVisibility% to %NewVisibility%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
199
+ array( 2027, E_NOTICE, __( 'User changed the date of a post', 'wp-security-audit-log' ), __( 'Changed the date of the %PostStatus% %PostType% titled %PostTitle% from %OldDate% to %NewDate%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
200
+ array( 2047, E_NOTICE, __( 'User changed the parent of a page', 'wp-security-audit-log' ), __( 'Changed the parent of the %PostStatus% %PostType% titled %PostTitle% from %OldParentName% to %NewParentName%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
201
+ array( 2048, E_CRITICAL, __( 'User changed the template of a page', 'wp-security-audit-log' ), __( 'Changed the template of the %PostStatus% %PostType% titled %PostTitle% from %OldTemplate% to %NewTemplate%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
202
+ array( 2049, E_NOTICE, __( 'User set a post as sticky', 'wp-security-audit-log' ), __( 'Set the post %PostTitle% as Sticky. Post URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
203
+ array( 2050, E_NOTICE, __( 'User removed post from sticky', 'wp-security-audit-log' ), __( 'Removed the post %PostTitle% from Sticky. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
204
+ array( 2065, E_WARNING, __( 'User modified the content of a post', 'wp-security-audit-log' ), __( 'Modified the content of the %PostStatus% %PostType% titled %PostTitle%. Post URL is %PostUrl%. %RevisionLink% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
205
+ array( 2073, E_NOTICE, __( 'User submitted a post for review', 'wp-security-audit-log' ), __( 'Submitted the %PostType% titled %PostTitle% for review. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
206
+ array( 2074, E_NOTICE, __( 'User scheduled a post', 'wp-security-audit-log' ), __( 'Scheduled the %PostType% titled %PostTitle% to be published on %PublishingDate%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
207
+ array( 2086, E_NOTICE, __( 'User changed title of a post', 'wp-security-audit-log' ), __( 'Changed the title of the %PostStatus% %PostType% from %OldTitle% to %NewTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
208
+ array( 2100, E_NOTICE, __( 'User opened a post in the editor', 'wp-security-audit-log' ), __( 'Opened the %PostStatus% %PostType% titled %PostTitle% in the editor. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
209
+ array( 2101, E_NOTICE, __( 'User viewed a post', 'wp-security-audit-log' ), __( 'Viewed the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
210
+ array( 2106, E_NOTICE, __( 'A plugin modified a post', 'wp-security-audit-log' ), __( 'Plugin modified the %PostStatus% %PostType% titled %PostTitle% of type %PostType%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
211
+ array( 2111, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks in a post', 'wp-security-audit-log' ), __( 'Disabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
212
+ array( 2112, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks in a post', 'wp-security-audit-log' ), __( 'Enabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
213
+ array( 2119, E_NOTICE, __( 'User added post tag', 'wp-security-audit-log' ), __( 'Added the tag %tag% to the %PostStatus% post titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
214
+ array( 2120, E_NOTICE, __( 'User removed post tag', 'wp-security-audit-log' ), __( 'Removed the tag %tag% from the %PostStatus% post titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
215
+ array( 2121, E_NOTICE, __( 'User created new tag', 'wp-security-audit-log' ), __( 'Added a new tag called %TagName%. View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
216
+ array( 2122, E_NOTICE, __( 'User deleted tag', 'wp-security-audit-log' ), __( 'Deleted the tag %TagName%.', 'wp-security-audit-log' ) ),
217
+ array( 2123, E_NOTICE, __( 'User renamed tag', 'wp-security-audit-log' ), __( 'Renamed a tag from %old_name% to %new_name%. View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
218
+ array( 2124, E_NOTICE, __( 'User changed tag slug', 'wp-security-audit-log' ), __( 'Changed the slug of tag %tag% from %old_slug% to %new_slug%. View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
219
+ array( 2125, E_NOTICE, __( 'User changed tag description', 'wp-security-audit-log' ), __( 'Changed the description of the tag %tag%%ReportText%.%ChangeText% View the tag: %TagLink%.', 'wp-security-audit-log' ) ),
220
+ array( 2016, E_NOTICE, __( 'User changed post category', 'wp-security-audit-log' ), __( 'Changed the category of the %PostStatus% %PostType% titled %PostTitle% from %OldCategories% to %NewCategories%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
221
+ array( 2023, E_NOTICE, __( 'User created new category', 'wp-security-audit-log' ), __( 'Created a new category called %CategoryName%. Category slug is %Slug%. %CategoryLink%.', 'wp-security-audit-log' ) ),
222
+ array( 2024, E_WARNING, __( 'User deleted category', 'wp-security-audit-log' ), __( 'Deleted the %CategoryName% category. Category slug was %Slug%. %CategoryLink%.', 'wp-security-audit-log' ) ),
223
+ array( 2052, E_NOTICE, __( 'Changed the parent of a category', 'wp-security-audit-log' ), __( 'Changed the parent of the category %CategoryName% from %OldParent% to %NewParent%. %CategoryLink%.', 'wp-security-audit-log' ) ),
224
+ array( 2127, E_WARNING, __( 'User changed category name', 'wp-security-audit-log' ), __( 'Changed the name of the category %old_name% to %new_name%.', 'wp-security-audit-log' ) ),
225
+ array( 2128, E_CRITICAL, __( 'User changed category slug', 'wp-security-audit-log' ), __( 'Changed the slug of the category %CategoryName% from %old_slug% to %new_slug%.', 'wp-security-audit-log' ) ),
226
+ array( 2053, E_CRITICAL, __( 'User created a custom field for a post', 'wp-security-audit-log' ), __( 'Created a new custom field called %MetaKey% with value %MetaValue% in the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.<br>%MetaLink%.', 'wp-security-audit-log' ) ),
227
+ array( 2054, E_CRITICAL, __( 'User updated a custom field value for a post', 'wp-security-audit-log' ), __( 'Modified the value of the custom field %MetaKey%%ReportText% in the %PostStatus% %PostType% titled %PostTitle%.%ChangeText% URL is: %PostUrl%. %EditorLinkPost%.<br>%MetaLink%.', 'wp-security-audit-log' ) ),
228
+ array( 2055, E_CRITICAL, __( 'User deleted a custom field from a post', 'wp-security-audit-log' ), __( 'Deleted the custom field %MetaKey% with value %MetaValue% from %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
229
+ array( 2062, E_CRITICAL, __( 'User updated a custom field name for a post', 'wp-security-audit-log' ), __( 'Changed the custom field\'s name from %MetaKeyOld% to %MetaKeyNew% in the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%.<br>%MetaLink%.', 'wp-security-audit-log' ) ),
230
+ ),
231
 
232
+ /**
233
+ * Alerts: Comments
234
+ */
235
+ __( 'Comments', 'wp-security-audit-log' ) => array(
236
+ array( 2090, E_NOTICE, __( 'User approved a comment', 'wp-security-audit-log' ), __( 'Approved the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
237
+ array( 2091, E_NOTICE, __( 'User unapproved a comment', 'wp-security-audit-log' ), __( 'Unapproved the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
238
+ array( 2092, E_NOTICE, __( 'User replied to a comment', 'wp-security-audit-log' ), __( 'Replied to the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
239
+ array( 2093, E_NOTICE, __( 'User edited a comment', 'wp-security-audit-log' ), __( 'Edited a comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log' ) ),
240
+ array( 2094, E_NOTICE, __( 'User marked a comment as Spam', 'wp-security-audit-log' ), __( 'Marked the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% as Spam.', 'wp-security-audit-log' ) ),
241
+ array( 2095, E_NOTICE, __( 'User marked a comment as Not Spam', 'wp-security-audit-log' ), __( 'Marked the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% as Not Spam.', 'wp-security-audit-log' ) ),
242
+ array( 2096, E_NOTICE, __( 'User moved a comment to trash', 'wp-security-audit-log' ), __( 'Moved the comment posted in response to the post %PostTitle% by %Author% on %Date% to trash.', 'wp-security-audit-log' ) ),
243
+ array( 2097, E_NOTICE, __( 'User restored a comment from the trash', 'wp-security-audit-log' ), __( 'Restored the comment posted in response to the post %PostTitle% by %Author% on %CommentLink% from the trash.', 'wp-security-audit-log' ) ),
244
+ array( 2098, E_NOTICE, __( 'User permanently deleted a comment', 'wp-security-audit-log' ), __( 'Permanently deleted the comment posted in response to the post %PostTitle% by %Author% on %Date%.', 'wp-security-audit-log' ) ),
245
+ array( 2099, E_NOTICE, __( 'User posted a comment', 'wp-security-audit-log' ), __( '%CommentMsg% on %CommentLink%.', 'wp-security-audit-log' ) ),
246
+ array( 2126, E_NOTICE, __( 'Visitor posted a comment', 'wp-security-audit-log' ), __( '%CommentMsg% on %CommentLink%.', 'wp-security-audit-log' ) ),
247
+ ),
248
 
249
+ /**
250
+ * Alerts: Custom Post Types
251
+ *
252
+ * IMPORTANT: These alerts should not be removed from here
253
+ * for backwards compatibilty.
254
+ *
255
+ * @deprecated 3.1.0
256
+ */
257
+ __( 'Custom Post Types', 'wp-security-audit-log' ) => array(
258
+ array( 2003, E_NOTICE, __( 'User modified a draft blog post', 'wp-security-audit-log' ), __( 'Modified the draft post with the %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
259
+ array( 2029, E_NOTICE, __( 'User created a new post with custom post type and saved it as draft', 'wp-security-audit-log' ), __( 'Created a new custom post called %PostTitle% of type %PostType%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
260
+ array( 2030, E_NOTICE, __( 'User published a post with custom post type', 'wp-security-audit-log' ), __( 'Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
261
+ array( 2031, E_NOTICE, __( 'User modified a post with custom post type', 'wp-security-audit-log' ), __( 'Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
262
+ array( 2032, E_NOTICE, __( 'User modified a draft post with custom post type', 'wp-security-audit-log' ), __( 'Modified the draft custom post %PostTitle% of type is %PostType%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
263
+ array( 2033, E_WARNING, __( 'User permanently deleted post with custom post type', 'wp-security-audit-log' ), __( 'Permanently Deleted the custom post %PostTitle% of type %PostType%.', 'wp-security-audit-log' ) ),
264
+ array( 2034, E_WARNING, __( 'User moved post with custom post type to trash', 'wp-security-audit-log' ), __( 'Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was %PostUrl%.', 'wp-security-audit-log' ) ),
265
+ array( 2035, E_CRITICAL, __( 'User restored post with custom post type from trash', 'wp-security-audit-log' ), __( 'The custom post %PostTitle% of type %PostType% has been restored from trash. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
266
+ array( 2036, E_NOTICE, __( 'User changed the category of a post with custom post type', 'wp-security-audit-log' ), __( 'Changed the category(ies) of the custom post %PostTitle% of type %PostType% from %OldCategories% to %NewCategories%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
267
+ array( 2037, E_NOTICE, __( 'User changed the URL of a post with custom post type', 'wp-security-audit-log' ), __( 'Changed the URL of the custom post %PostTitle% of type %PostType% from %OldUrl% to %NewUrl%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
268
+ array( 2038, E_NOTICE, __( 'User changed the author or post with custom post type', 'wp-security-audit-log' ), __( 'Changed the author of custom post %PostTitle% of type %PostType% from %OldAuthor% to %NewAuthor%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
269
+ array( 2039, E_NOTICE, __( 'User changed the status of post with custom post type', 'wp-security-audit-log' ), __( 'Changed the status of custom post %PostTitle% of type %PostType% from %OldStatus% to %NewStatus%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
270
+ array( 2040, E_WARNING, __( 'User changed the visibility of a post with custom post type', 'wp-security-audit-log' ), __( 'Changed the visibility of the custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
271
+ array( 2041, E_NOTICE, __( 'User changed the date of post with custom post type', 'wp-security-audit-log' ), __( 'Changed the date of the custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
272
+ array( 2056, E_CRITICAL, __( 'User created a custom field for a custom post type', 'wp-security-audit-log' ), __( 'Created a new custom field %MetaKey% with value %MetaValue% in custom post %PostTitle% of type %PostType%.' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
273
+ array( 2057, E_CRITICAL, __( 'User updated a custom field for a custom post type', 'wp-security-audit-log' ), __( 'Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in custom post %PostTitle% of type %PostType%' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
274
+ array( 2058, E_CRITICAL, __( 'User deleted a custom field from a custom post type', 'wp-security-audit-log' ), __( 'Deleted the custom field %MetaKey% with id %MetaID% from custom post %PostTitle% of type %PostType%' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
275
+ array( 2063, E_CRITICAL, __( 'User updated a custom field name for a custom post type', 'wp-security-audit-log' ), __( 'Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom post %PostTitle% of type %PostType%' . ' %EditorLinkPost%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
276
+ array( 2067, E_WARNING, __( 'User modified content for a published custom post type', 'wp-security-audit-log' ), __( 'Modified the content of the published custom post type %PostTitle%. Post URL is %PostUrl%.' . '%EditorLinkPost%.', 'wp-security-audit-log' ) ),
277
+ array( 2068, E_NOTICE, __( 'User modified content for a draft post', 'wp-security-audit-log' ), __( 'Modified the content of the draft post %PostTitle%.' . '%RevisionLink%' . ' %EditorLinkPost%.', 'wp-security-audit-log' ) ),
278
+ array( 2070, E_NOTICE, __( 'User modified content for a draft custom post type', 'wp-security-audit-log' ), __( 'Modified the content of the draft custom post type %PostTitle%.' . '%EditorLinkPost%.', 'wp-security-audit-log' ) ),
279
+ array( 2072, E_NOTICE, __( 'User modified content of a post', 'wp-security-audit-log' ), __( 'Modified the content of post %PostTitle% which is submitted for review.' . '%RevisionLink%' . ' %EditorLinkPost%.', 'wp-security-audit-log' ) ),
280
+ array( 2076, E_NOTICE, __( 'User scheduled a custom post type', 'wp-security-audit-log' ), __( 'Scheduled the custom post type %PostTitle% to be published %PublishingDate%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
281
+ array( 2088, E_NOTICE, __( 'User changed title of a custom post type', 'wp-security-audit-log' ), __( 'Changed the title of the custom post %OldTitle% to %NewTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
282
+ array( 2104, E_NOTICE, __( 'User opened a custom post type in the editor', 'wp-security-audit-log' ), __( 'Opened the custom post %PostTitle% of type %PostType% in the editor. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
283
+ array( 2105, E_NOTICE, __( 'User viewed a custom post type', 'wp-security-audit-log' ), __( 'Viewed the custom post %PostTitle% of type %PostType%. View the post: %PostUrl%.', 'wp-security-audit-log' ) ),
284
+ array( 5021, E_CRITICAL, __( 'A plugin created a custom post', 'wp-security-audit-log' ), __( 'A plugin automatically created the following custom post: %PostTitle%.', 'wp-security-audit-log' ) ),
285
+ array( 5027, E_CRITICAL, __( 'A plugin deleted a custom post', 'wp-security-audit-log' ), __( 'A plugin automatically deleted the following custom post: %PostTitle%.', 'wp-security-audit-log' ) ),
286
+ array( 2108, E_NOTICE, __( 'A plugin modified a custom post', 'wp-security-audit-log' ), __( 'Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
287
+ ),
288
 
289
+ /**
290
+ * Alerts: Pages
291
+ *
292
+ * IMPORTANT: These alerts should not be removed from here
293
+ * for backwards compatibilty.
294
+ *
295
+ * @deprecated 3.1.0
296
+ */
297
+ __( 'Pages', 'wp-security-audit-log' ) => array(
298
+ array( 2004, E_NOTICE, __( 'User created a new WordPress page and saved it as draft', 'wp-security-audit-log' ), __( 'Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
299
+ array( 2005, E_NOTICE, __( 'User published a WordPress page', 'wp-security-audit-log' ), __( 'Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
300
+ array( 2006, E_NOTICE, __( 'User modified a published WordPress page', 'wp-security-audit-log' ), __( 'Modified the published page %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
301
+ array( 2007, E_NOTICE, __( 'User modified a draft WordPress page', 'wp-security-audit-log' ), __( 'Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
302
+ array( 2009, E_WARNING, __( 'User permanently deleted a page from the trash', 'wp-security-audit-log' ), __( 'Permanently deleted the page %PostTitle%.', 'wp-security-audit-log' ) ),
303
+ array( 2013, E_WARNING, __( 'User moved WordPress page to the trash', 'wp-security-audit-log' ), __( 'Moved the page %PostTitle% to trash. Page URL was %PostUrl%.', 'wp-security-audit-log' ) ),
304
+ array( 2015, E_CRITICAL, __( 'User restored a WordPress page from trash', 'wp-security-audit-log' ), __( 'Page %PostTitle% has been restored from trash. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
305
+ array( 2018, E_NOTICE, __( 'User changed page URL', 'wp-security-audit-log' ), __( 'Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
306
+ array( 2020, E_NOTICE, __( 'User changed page author', 'wp-security-audit-log' ), __( 'Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
307
+ array( 2022, E_NOTICE, __( 'User changed page status', 'wp-security-audit-log' ), __( 'Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
308
+ array( 2026, E_WARNING, __( 'User changed the visibility of a page post', 'wp-security-audit-log' ), __( 'Changed the visibility of the page %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
309
+ array( 2028, E_NOTICE, __( 'User changed the date of a page post', 'wp-security-audit-log' ), __( 'Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPage%.', 'wp-security-audit-log' ) ),
310
+ array( 2059, E_CRITICAL, __( 'User created a custom field for a page', 'wp-security-audit-log' ), __( 'Created a new custom field called %MetaKey% with value %MetaValue% in the page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
311
+ array( 2060, E_CRITICAL, __( 'User updated a custom field value for a page', 'wp-security-audit-log' ), __( 'Modified the value of the custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in the page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
312
+ array( 2061, E_CRITICAL, __( 'User deleted a custom field from a page', 'wp-security-audit-log' ), __( 'Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
313
+ array( 2064, E_CRITICAL, __( 'User updated a custom field name for a page', 'wp-security-audit-log' ), __( 'Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page %PostTitle%' . ' %EditorLinkPage%.' . '<br>%MetaLink%.', 'wp-security-audit-log' ) ),
314
+ array( 2066, E_WARNING, __( 'User modified content for a published page', 'wp-security-audit-log' ), __( 'Modified the content of the published page %PostTitle%. Page URL is %PostUrl%. %RevisionLink% %EditorLinkPage%.', 'wp-security-audit-log' ) ),
315
+ array( 2069, E_NOTICE, __( 'User modified content for a draft page', 'wp-security-audit-log' ), __( 'Modified the content of draft page %PostTitle%.' . '%RevisionLink%' . ' %EditorLinkPage%.', 'wp-security-audit-log' ) ),
316
+ array( 2075, E_NOTICE, __( 'User scheduled a page', 'wp-security-audit-log' ), __( 'Scheduled the page %PostTitle% to be published %PublishingDate%.' . ' %EditorLinkPage%.', 'wp-security-audit-log' ) ),
317
+ array( 2087, E_NOTICE, __( 'User changed title of a page', 'wp-security-audit-log' ), __( 'Changed the title of the page %OldTitle% to %NewTitle%.' . ' %EditorLinkPage%.', 'wp-security-audit-log' ) ),
318
+ array( 2102, E_NOTICE, __( 'User opened a page in the editor', 'wp-security-audit-log' ), __( 'Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%.', 'wp-security-audit-log' ) ),
319
+ array( 2103, E_NOTICE, __( 'User viewed a page', 'wp-security-audit-log' ), __( 'Viewed the page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
320
+ array( 2113, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log' ), __( 'Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log' ) ),
321
+ array( 2114, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log' ), __( 'Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log' ) ),
322
+ array( 2115, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks on a published page', 'wp-security-audit-log' ), __( 'Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
323
+ array( 2116, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks on a published page', 'wp-security-audit-log' ), __( 'Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
324
+ array( 2117, E_NOTICE, __( 'User disabled Comments/Trackbacks and Pingbacks on a draft page', 'wp-security-audit-log' ), __( 'Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
325
+ array( 2118, E_NOTICE, __( 'User enabled Comments/Trackbacks and Pingbacks on a draft page', 'wp-security-audit-log' ), __( 'Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%.', 'wp-security-audit-log' ) ),
326
+ array( 5020, E_CRITICAL, __( 'A plugin created a page', 'wp-security-audit-log' ), __( 'A plugin automatically created the following page: %PostTitle%.', 'wp-security-audit-log' ) ),
327
+ array( 5026, E_CRITICAL, __( 'A plugin deleted a page', 'wp-security-audit-log' ), __( 'A plugin automatically deleted the following page: %PostTitle%.', 'wp-security-audit-log' ) ),
328
+ array( 2107, E_NOTICE, __( 'A plugin modified a page', 'wp-security-audit-log' ), __( 'Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%.', 'wp-security-audit-log' ) ),
329
+ ),
330
  ),
 
331
 
 
 
 
 
332
  /**
333
+ * Section: WordPress Install
334
  */
335
+ __( 'WordPress Install', 'wp-security-audit-log' ) => array(
336
+ /**
337
+ * Alerts: Database
338
+ */
339
+ __( 'Database', 'wp-security-audit-log' ) => array(
340
+ array( 5016, E_CRITICAL, __( 'Unknown component created tables', 'wp-security-audit-log' ), __( 'An unknown component created these tables in the database: %TableNames%.', 'wp-security-audit-log' ) ),
341
+ array( 5017, E_CRITICAL, __( 'Unknown component modified tables structure', 'wp-security-audit-log' ), __( 'An unknown component modified the structure of these database tables: %TableNames%.', 'wp-security-audit-log' ) ),
342
+ array( 5018, E_CRITICAL, __( 'Unknown component deleted tables', 'wp-security-audit-log' ), __( 'An unknown component deleted the following tables from the database: %TableNames%.', 'wp-security-audit-log' ) ),
343
+ ),
344
 
345
+ /**
346
+ * Alerts: Plugins
347
+ */
348
+ __( 'Plugins', 'wp-security-audit-log' ) => array(
349
+ array( 5000, E_CRITICAL, __( 'User installed a plugin', 'wp-security-audit-log' ), __( 'Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%.', 'wp-security-audit-log' ) ),
350
+ array( 5001, E_CRITICAL, __( 'User activated a WordPress plugin', 'wp-security-audit-log' ), __( 'Activated the plugin %PluginData->Name% installed in %PluginFile%.', 'wp-security-audit-log' ) ),
351
+ array( 5002, E_CRITICAL, __( 'User deactivated a WordPress plugin', 'wp-security-audit-log' ), __( 'Deactivated the plugin %PluginData->Name% installed in %PluginFile%.', 'wp-security-audit-log' ) ),
352
+ array( 5003, E_CRITICAL, __( 'User uninstalled a plugin', 'wp-security-audit-log' ), __( 'Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile%.', 'wp-security-audit-log' ) ),
353
+ array( 5004, E_WARNING, __( 'User upgraded a plugin', 'wp-security-audit-log' ), __( 'Upgraded the plugin %PluginData->Name% installed in %PluginFile%.', 'wp-security-audit-log' ) ),
354
+ array( 5010, E_CRITICAL, __( 'Plugin created tables', 'wp-security-audit-log' ), __( 'Plugin %Plugin->Name% created these tables in the database: %TableNames%.', 'wp-security-audit-log' ) ),
355
+ array( 5011, E_CRITICAL, __( 'Plugin modified tables structure', 'wp-security-audit-log' ), __( 'Plugin %Plugin->Name% modified the structure of these database tables: %TableNames%.', 'wp-security-audit-log' ) ),
356
+ array( 5012, E_CRITICAL, __( 'Plugin deleted tables', 'wp-security-audit-log' ), __( 'Plugin %Plugin->Name% deleted the following tables from the database: %TableNames%.', 'wp-security-audit-log' ) ),
357
+ array( 5019, E_CRITICAL, __( 'A plugin created a post', 'wp-security-audit-log' ), __( 'A plugin automatically created the following %PostType% called %PostTitle%. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
358
+ array( 5025, E_CRITICAL, __( 'A plugin deleted a post', 'wp-security-audit-log' ), __( 'A plugin automatically deleted the following %PostType% called %PostTitle%.', 'wp-security-audit-log' ) ),
359
+ array( 2051, E_CRITICAL, __( 'User changed a file using the plugin editor', 'wp-security-audit-log' ), __( 'Modified %File% with the Plugin Editor.', 'wp-security-audit-log' ) ),
360
+ ),
361
 
362
+ /**
363
+ * Alerts: Themes
364
+ */
365
+ __( 'Themes', 'wp-security-audit-log' ) => array(
366
+ array( 5005, E_WARNING, __( 'User installed a theme', 'wp-security-audit-log' ), __( 'Installed the theme "%Theme->Name%" in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
367
+ array( 5006, E_CRITICAL, __( 'User activated a theme', 'wp-security-audit-log' ), __( 'Activated the theme "%Theme->Name%", installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
368
+ array( 5007, E_CRITICAL, __( 'User uninstalled a theme', 'wp-security-audit-log' ), __( 'Deleted the theme "%Theme->Name%" installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
369
+ array( 5008, E_CRITICAL, __( 'Activated theme on network', 'wp-security-audit-log' ), __( 'Network activated the theme %Theme->Name% installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
370
+ array( 5009, E_CRITICAL, __( 'Deactivated theme from network', 'wp-security-audit-log' ), __( 'Network deactivated the theme %Theme->Name% installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
371
+ array( 5013, E_CRITICAL, __( 'Theme created tables', 'wp-security-audit-log' ), __( 'Theme %Theme->Name% created these tables in the database: %TableNames%.', 'wp-security-audit-log' ) ),
372
+ array( 5014, E_CRITICAL, __( 'Theme modified tables structure', 'wp-security-audit-log' ), __( 'Theme %Theme->Name% modified the structure of these database tables: %TableNames%.', 'wp-security-audit-log' ) ),
373
+ array( 5015, E_CRITICAL, __( 'Theme deleted tables', 'wp-security-audit-log' ), __( 'Theme %Theme->Name% deleted the following tables from the database: %TableNames%.', 'wp-security-audit-log' ) ),
374
+ array( 5031, E_WARNING, __( 'User updated a theme', 'wp-security-audit-log' ), __( 'Updated the theme "%Theme->Name%" installed in %Theme->get_template_directory%.', 'wp-security-audit-log' ) ),
375
+ array( 2046, E_CRITICAL, __( 'User changed a file using the theme editor', 'wp-security-audit-log' ), __( 'Modified %File% with the Theme Editor.', 'wp-security-audit-log' ) ),
376
+ ),
377
 
378
+ /**
379
+ * Alerts: System
380
+ */
381
+ __( 'System', 'wp-security-audit-log' ) => array(
382
+ array( 0000, E_CRITICAL, __( 'Unknown Error', 'wp-security-audit-log' ), __( 'An unexpected error has occurred .', 'wp-security-audit-log' ) ),
383
+ array( 0001, E_CRITICAL, __( 'PHP error', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
384
+ array( 0002, E_WARNING, __( 'PHP warning', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
385
+ array( 0003, E_NOTICE, __( 'PHP notice', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
386
+ array( 0004, E_CRITICAL, __( 'PHP exception', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
387
+ array( 0005, E_CRITICAL, __( 'PHP shutdown error', 'wp-security-audit-log' ), __( '%Message%.', 'wp-security-audit-log' ) ),
388
+ array( 6000, E_NOTICE, __( 'Events automatically pruned by system', 'wp-security-audit-log' ), __( 'System automatically deleted %EventCount% event(s).', 'wp-security-audit-log' ) ),
389
+ array( 6004, E_CRITICAL, __( 'WordPress was updated', 'wp-security-audit-log' ), __( 'Updated WordPress from version %OldVersion% to %NewVersion%.', 'wp-security-audit-log' ) ),
390
+ array( 6006, E_NOTICE, __( 'Reset plugin\'s settings to default', 'wp-security-audit-log' ), __( 'Reset plugin\'s settings to default.', 'wp-security-audit-log' ) ),
391
+ array( 6034, E_NOTICE, __( 'Purged the activity log', 'wp-security-audit-log' ), __( 'Purged the activity log.', 'wp-security-audit-log' ) ),
392
+ array( 6028, E_CRITICAL, __( 'File content has been modified', 'wp-security-audit-log' ), __( 'The content of the file %FileLocation% has been modified.', 'wp-security-audit-log' ) ),
393
+ array( 6029, E_CRITICAL, __( 'File added to the site', 'wp-security-audit-log' ), __( 'The file %FileLocation% has been added to your website.', 'wp-security-audit-log' ) ),
394
+ array( 6030, E_CRITICAL, __( 'File deleted from the site', 'wp-security-audit-log' ), __( 'The file %FileLocation% has been deleted from your website.', 'wp-security-audit-log' ) ),
395
+ array( 6031, E_CRITICAL, __( 'File not scanned because it is bigger than the maximum file size limit', 'wp-security-audit-log' ), __( 'The file %FileLocation% was not scanned because it is bigger than the maximum file size limit. If you want to include these files in the scan increase the file size limit from the %FileSettings%.', 'wp-security-audit-log' ) ),
396
+ array( 6032, E_CRITICAL, __( 'File integrity scan stopped due to the limit of 1 million files', 'wp-security-audit-log' ), __( 'The file changes scanning engine has reached the limit of 1 million files and stopped the scan. Please %ContactSupport% for more information.', 'wp-security-audit-log' ) ),
397
+ array( 6033, E_NOTICE, __( 'File integrity scan started/stopped', 'wp-security-audit-log' ), __( 'The file integrity scanner has %ScanStatus%.', 'wp-security-audit-log' ) ),
398
+ array( 9999, E_CRITICAL, __( 'Advertising Add-ons', 'wp-security-audit-log' ), __( '%PromoName% %PromoMessage%', 'wp-security-audit-log' ) ),
399
+ ),
400
 
401
+ /**
402
+ * Alerts: Menus
403
+ */
404
+ __( 'Menus', 'wp-security-audit-log' ) => array(
405
+ array( 2078, E_NOTICE, __( 'User created new menu', 'wp-security-audit-log' ), __( 'Created a new menu called %MenuName%.', 'wp-security-audit-log' ) ),
406
+ array( 2079, E_WARNING, __( 'User added content to a menu', 'wp-security-audit-log' ), __( 'Added the %ContentType% called %ContentName% to menu %MenuName%.', 'wp-security-audit-log' ) ),
407
+ array( 2080, E_WARNING, __( 'User removed content from a menu', 'wp-security-audit-log' ), __( 'Removed the %ContentType% called %ContentName% from the menu %MenuName%.', 'wp-security-audit-log' ) ),
408
+ array( 2081, E_CRITICAL, __( 'User deleted menu', 'wp-security-audit-log' ), __( 'Deleted the menu %MenuName%.', 'wp-security-audit-log' ) ),
409
+ array( 2082, E_WARNING, __( 'User changed menu setting', 'wp-security-audit-log' ), __( '%Status% the menu setting %MenuSetting% in %MenuName%.', 'wp-security-audit-log' ) ),
410
+ array( 2083, E_NOTICE, __( 'User modified content in a menu', 'wp-security-audit-log' ), __( 'Modified the %ContentType% called %ContentName% in menu %MenuName%.', 'wp-security-audit-log' ) ),
411
+ array( 2084, E_WARNING, __( 'User changed name of a menu', 'wp-security-audit-log' ), __( 'Changed the name of menu %OldMenuName% to %NewMenuName%.', 'wp-security-audit-log' ) ),
412
+ array( 2085, E_NOTICE, __( 'User changed order of the objects in a menu', 'wp-security-audit-log' ), __( 'Changed the order of the %ItemName% in menu %MenuName%.', 'wp-security-audit-log' ) ),
413
+ array( 2089, E_NOTICE, __( 'User moved objects as a sub-item', 'wp-security-audit-log' ), __( 'Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%.', 'wp-security-audit-log' ) ),
414
+ ),
415
 
416
+ /**
417
+ * Alerts: Widgets
418
+ */
419
+ __( 'Widgets', 'wp-security-audit-log' ) => array(
420
+ array( 2042, E_CRITICAL, __( 'User added a new widget', 'wp-security-audit-log' ), __( 'Added a new %WidgetName% widget in %Sidebar%.', 'wp-security-audit-log' ) ),
421
+ array( 2043, E_WARNING, __( 'User modified a widget', 'wp-security-audit-log' ), __( 'Modified the %WidgetName% widget in %Sidebar%.', 'wp-security-audit-log' ) ),
422
+ array( 2044, E_CRITICAL, __( 'User deleted widget', 'wp-security-audit-log' ), __( 'Deleted the %WidgetName% widget from %Sidebar%.', 'wp-security-audit-log' ) ),
423
+ array( 2045, E_NOTICE, __( 'User moved widget', 'wp-security-audit-log' ), __( 'Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%.', 'wp-security-audit-log' ) ),
424
+ array( 2071, E_NOTICE, __( 'User changed widget position', 'wp-security-audit-log' ), __( 'Changed the position of the widget %WidgetName% in sidebar %Sidebar%.', 'wp-security-audit-log' ) ),
425
+ ),
426
 
427
+ /**
428
+ * Alerts: WordPress Settings
429
+ */
430
+ __( 'WordPress Settings', 'wp-security-audit-log' ) => array(
431
+ array( 6001, E_CRITICAL, __( 'Option Anyone Can Register in WordPress settings changed', 'wp-security-audit-log' ), __( '%NewValue% the option "Anyone can register".', 'wp-security-audit-log' ) ),
432
+ array( 6002, E_CRITICAL, __( 'New User Default Role changed', 'wp-security-audit-log' ), __( 'Changed the New User Default Role from %OldRole% to %NewRole%.', 'wp-security-audit-log' ) ),
433
+ array( 6003, E_CRITICAL, __( 'WordPress Administrator Notification email changed', 'wp-security-audit-log' ), __( 'Changed the WordPress administrator notifications email address from %OldEmail% to %NewEmail%.', 'wp-security-audit-log' ) ),
434
+ array( 6005, E_CRITICAL, __( 'User changes the WordPress Permalinks', 'wp-security-audit-log' ), __( 'Changed the WordPress permalinks from %OldPattern% to %NewPattern%.', 'wp-security-audit-log' ) ),
435
+ array( 6008, E_CRITICAL, __( 'Enabled/Disabled the option Discourage search engines from indexing this site', 'wp-security-audit-log' ), __( '%Status% the option Discourage search engines from indexing this site.', 'wp-security-audit-log' ) ),
436
+ array( 6009, E_CRITICAL, __( 'Enabled/Disabled comments on all the website', 'wp-security-audit-log' ), __( '%Status% comments on all the website.', 'wp-security-audit-log' ) ),
437
+ array( 6010, E_CRITICAL, __( 'Enabled/Disabled the option Comment author must fill out name and email', 'wp-security-audit-log' ), __( '%Status% the option Comment author must fill out name and email.', 'wp-security-audit-log' ) ),
438
+ array( 6011, E_CRITICAL, __( 'Enabled/Disabled the option Users must be logged in and registered to comment', 'wp-security-audit-log' ), __( '%Status% the option Users must be logged in and registered to comment.', 'wp-security-audit-log' ) ),
439
+ array( 6012, E_CRITICAL, __( 'Enabled/Disabled the option to automatically close comments', 'wp-security-audit-log' ), __( '%Status% the option to automatically close comments after %Value% days.', 'wp-security-audit-log' ) ),
440
+ array( 6013, E_NOTICE, __( 'Changed the value of the option Automatically close comments', 'wp-security-audit-log' ), __( 'Changed the value of the option Automatically close comments from %OldValue% to %NewValue% days.', 'wp-security-audit-log' ) ),
441
+ array( 6014, E_CRITICAL, __( 'Enabled/Disabled the option for comments to be manually approved', 'wp-security-audit-log' ), __( '%Status% the option for comments to be manually approved.', 'wp-security-audit-log' ) ),
442
+ array( 6015, E_CRITICAL, __( 'Enabled/Disabled the option for an author to have previously approved comments for the comments to appear', 'wp-security-audit-log' ), __( '%Status% the option for an author to have previously approved comments for the comments to appear.', 'wp-security-audit-log' ) ),
443
+ array( 6016, E_CRITICAL, __( 'Changed the number of links that a comment must have to be held in the queue', 'wp-security-audit-log' ), __( 'Changed the number of links from %OldValue% to %NewValue% that a comment must have to be held in the queue.', 'wp-security-audit-log' ) ),
444
+ array( 6017, E_CRITICAL, __( 'Modified the list of keywords for comments moderation', 'wp-security-audit-log' ), __( 'Modified the list of keywords for comments moderation.', 'wp-security-audit-log' ) ),
445
+ array( 6018, E_CRITICAL, __( 'Modified the list of keywords for comments blacklisting', 'wp-security-audit-log' ), __( 'Modified the list of keywords for comments blacklisting.', 'wp-security-audit-log' ) ),
446
+ array( 6024, E_CRITICAL, __( 'Option WordPress Address (URL) in WordPress settings changed', 'wp-security-audit-log' ), __( 'Changed the WordPress address (URL) from %old_url% to %new_url%.', 'wp-security-audit-log' ) ),
447
+ array( 6025, E_CRITICAL, __( 'Option Site Address (URL) in WordPress settings changed', 'wp-security-audit-log' ), __( 'Changed the site address (URL) from %old_url% to %new_url%.', 'wp-security-audit-log' ) ),
448
+ array( 6019, E_CRITICAL, __( 'Created a New cron job', 'wp-security-audit-log' ), __( 'A new cron job called %name% was created and is scheduled to run %schedule%.', 'wp-security-audit-log' ) ),
449
+ array( 6020, E_CRITICAL, __( 'Changed status of the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% was %status%.', 'wp-security-audit-log' ) ),
450
+ array( 6021, E_CRITICAL, __( 'Deleted the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% was deleted.', 'wp-security-audit-log' ) ),
451
+ array( 6022, E_NOTICE, __( 'Started the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% has just started.', 'wp-security-audit-log' ) ),
452
+ ),
453
  ),
 
454
 
 
 
 
 
455
  /**
456
+ * Section: Multisite Network
457
  */
458
+ __( 'Multisite Network', 'wp-security-audit-log' ) => array(
459
+ /**
460
+ * Alerts: MultiSite
461
+ */
462
+ __( 'MultiSite', 'wp-security-audit-log' ) => array(
463
+ array( 4008, E_CRITICAL, __( 'User granted Super Admin privileges', 'wp-security-audit-log' ), __( 'Granted Super Admin privileges to %TargetUsername%.', 'wp-security-audit-log' ) ),
464
+ array( 4009, E_CRITICAL, __( 'User revoked from Super Admin privileges', 'wp-security-audit-log' ), __( 'Revoked Super Admin privileges from %TargetUsername%.', 'wp-security-audit-log' ) ),
465
+ 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' ) ),
466
+ 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' ) ),
467
+ array( 4012, E_CRITICAL, __( 'New network user created', 'wp-security-audit-log' ), __( 'Created a new network user %NewUserData->Username%.', 'wp-security-audit-log' ) ),
468
+ 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' ) ),
469
+ 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' ) ),
470
+ array( 7001, E_CRITICAL, __( 'Existing site archived', 'wp-security-audit-log' ), __( 'Archived the site %SiteName%.', 'wp-security-audit-log' ) ),
471
+ array( 7002, E_CRITICAL, __( 'Archived site has been unarchived', 'wp-security-audit-log' ), __( 'Unarchived the site %SiteName%.', 'wp-security-audit-log' ) ),
472
+ array( 7003, E_CRITICAL, __( 'Deactivated site has been activated', 'wp-security-audit-log' ), __( 'Activated the site %SiteName%.', 'wp-security-audit-log' ) ),
473
+ array( 7004, E_CRITICAL, __( 'Site has been deactivated', 'wp-security-audit-log' ), __( 'Deactivated the site %SiteName%.', 'wp-security-audit-log' ) ),
474
+ array( 7005, E_CRITICAL, __( 'Existing site deleted from network', 'wp-security-audit-log' ), __( 'Deleted the site %SiteName%.', 'wp-security-audit-log' ) ),
475
+ ),
476
  ),
 
477
 
 
 
 
 
478
  /**
479
+ * Section: Third Party Support
480
  */
481
+ __( 'Third Party Plugins', 'wp-security-audit-log' ) => array(
482
+ /**
483
+ * Alerts: BBPress Forum
484
+ */
485
+ __( 'BBPress Forum', 'wp-security-audit-log' ) => array(
486
+ array( 8000, E_CRITICAL, __( 'User created new forum', 'wp-security-audit-log' ), __( 'Created new forum %ForumName%. Forum URL is %ForumURL%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
487
+ array( 8001, E_NOTICE, __( 'User changed status of a forum', 'wp-security-audit-log' ), __( 'Changed the status of the forum %ForumName% from %OldStatus% to %NewStatus%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
488
+ array( 8002, E_NOTICE, __( 'User changed visibility of a forum', 'wp-security-audit-log' ), __( 'Changed the visibility of the forum %ForumName% from %OldVisibility% to %NewVisibility%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
489
+ array( 8003, E_CRITICAL, __( 'User changed the URL of a forum', 'wp-security-audit-log' ), __( 'Changed the URL of the forum %ForumName% from %OldUrl% to %NewUrl%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
490
+ array( 8004, E_NOTICE, __( 'User changed order of a forum', 'wp-security-audit-log' ), __( 'Changed the order of the forum %ForumName% from %OldOrder% to %NewOrder%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
491
+ array( 8005, E_CRITICAL, __( 'User moved forum to trash', 'wp-security-audit-log' ), __( 'Moved the forum %ForumName% to trash.', 'wp-security-audit-log' ) ),
492
+ array( 8006, E_WARNING, __( 'User permanently deleted forum', 'wp-security-audit-log' ), __( 'Permanently deleted the forum %ForumName%.', 'wp-security-audit-log' ) ),
493
+ array( 8007, E_WARNING, __( 'User restored forum from trash', 'wp-security-audit-log' ), __( 'Restored the forum %ForumName% from trash.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
494
+ array( 8008, E_NOTICE, __( 'User changed the parent of a forum', 'wp-security-audit-log' ), __( 'Changed the parent of the forum %ForumName% from %OldParent% to %NewParent%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
495
+ array( 8011, E_NOTICE, __( 'User changed type of a forum', 'wp-security-audit-log' ), __( 'Changed the type of the forum %ForumName% from %OldType% to %NewType%.' . ' %EditorLinkForum%.', 'wp-security-audit-log' ) ),
496
+ array( 8009, E_WARNING, __( 'User changed forum\'s role', 'wp-security-audit-log' ), __( 'Changed the forum\'s auto role from %OldRole% to %NewRole%.', 'wp-security-audit-log' ) ),
497
+ array( 8010, E_WARNING, __( 'User changed option of a forum', 'wp-security-audit-log' ), __( '%Status% the option for anonymous posting on forum.', 'wp-security-audit-log' ) ),
498
+ array( 8012, E_NOTICE, __( 'User changed time to disallow post editing', 'wp-security-audit-log' ), __( 'Changed the time to disallow post editing from %OldTime% to %NewTime% minutes in the forums.', 'wp-security-audit-log' ) ),
499
+ array( 8013, E_WARNING, __( 'User changed the forum setting posting throttle time', 'wp-security-audit-log' ), __( 'Changed the posting throttle time from %OldTime% to %NewTime% seconds in the forums.', 'wp-security-audit-log' ) ),
500
+ array( 8014, E_NOTICE, __( 'User created new topic', 'wp-security-audit-log' ), __( 'Created a new topic %TopicName%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
501
+ array( 8015, E_NOTICE, __( 'User changed status of a topic', 'wp-security-audit-log' ), __( 'Changed the status of the topic %TopicName% from %OldStatus% to %NewStatus%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
502
+ array( 8016, E_NOTICE, __( 'User changed type of a topic', 'wp-security-audit-log' ), __( 'Changed the type of the topic %TopicName% from %OldType% to %NewType%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
503
+ array( 8017, E_CRITICAL, __( 'User changed URL of a topic', 'wp-security-audit-log' ), __( 'Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%.', 'wp-security-audit-log' ) ),
504
+ array( 8018, E_NOTICE, __( 'User changed the forum of a topic', 'wp-security-audit-log' ), __( 'Changed the forum of the topic %TopicName% from %OldForum% to %NewForum%.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
505
+ array( 8019, E_CRITICAL, __( 'User moved topic to trash', 'wp-security-audit-log' ), __( 'Moved the topic %TopicName% to trash.', 'wp-security-audit-log' ) ),
506
+ array( 8020, E_WARNING, __( 'User permanently deleted topic', 'wp-security-audit-log' ), __( 'Permanently deleted the topic %TopicName%.', 'wp-security-audit-log' ) ),
507
+ array( 8021, E_WARNING, __( 'User restored topic from trash', 'wp-security-audit-log' ), __( 'Restored the topic %TopicName% from trash.' . ' %EditorLinkTopic%.', 'wp-security-audit-log' ) ),
508
+ 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' ) ),
509
+ ),
510
 
511
+ /**
512
+ * Alerts: WooCommerce Products
513
+ */
514
+ __( 'WooCommerce Products', 'wp-security-audit-log' ) => array(
515
+ array( 9000, E_NOTICE, __( 'User created a new product', 'wp-security-audit-log' ), __( 'Created a new product called %ProductTitle% and saved it as draft. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
516
+ array( 9001, E_NOTICE, __( 'User published a product', 'wp-security-audit-log' ), __( 'Published a product called %ProductTitle%. Product URL is %ProductUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
517
+ array( 9003, E_NOTICE, __( 'User changed the category of a product', 'wp-security-audit-log' ), __( 'Changed the category of the product %ProductTitle% from %OldCategories% to %NewCategories%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
518
+ array( 9004, E_NOTICE, __( 'User modified the short description of a product', 'wp-security-audit-log' ), __( 'Modified the short description of the product %ProductTitle%.%ChangeText% View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
519
+ array( 9005, E_NOTICE, __( 'User modified the text of a product', 'wp-security-audit-log' ), __( 'Modified the text of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
520
+ array( 9006, E_NOTICE, __( 'User changed the URL of a product', 'wp-security-audit-log' ), __( 'Changed the URL of the product %ProductTitle%%ReportText%.%ChangeText% View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
521
+ array( 9008, E_NOTICE, __( 'User changed the date of a product', 'wp-security-audit-log' ), __( 'Changed the date of the product %ProductTitle% from %OldDate% to %NewDate%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
522
+ array( 9009, E_NOTICE, __( 'User changed the visibility of a product', 'wp-security-audit-log' ), __( 'Changed the visibility of the product %ProductTitle% from %OldVisibility% to %NewVisibility%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
523
+ array( 9010, E_NOTICE, __( 'User modified the published product', 'wp-security-audit-log' ), __( 'Modified the published product %ProductTitle%. Product URL is %ProductUrl%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
524
+ array( 9011, E_NOTICE, __( 'User modified the draft product', 'wp-security-audit-log' ), __( 'Modified the draft product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
525
+ array( 9012, E_WARNING, __( 'User moved a product to trash', 'wp-security-audit-log' ), __( 'Moved the product %ProductTitle% to trash. Product URL was %ProductUrl%.', 'wp-security-audit-log' ) ),
526
+ array( 9013, E_WARNING, __( 'User permanently deleted a product', 'wp-security-audit-log' ), __( 'Permanently deleted the product %ProductTitle%.', 'wp-security-audit-log' ) ),
527
+ array( 9014, E_CRITICAL, __( 'User restored a product from the trash', 'wp-security-audit-log' ), __( 'Product %ProductTitle% has been restored from trash. View product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
528
+ array( 9015, E_NOTICE, __( 'User changed status of a product', 'wp-security-audit-log' ), __( 'Changed the status of the product %ProductTitle% from %OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
529
+ array( 9072, E_NOTICE, __( 'User opened a product in the editor', 'wp-security-audit-log' ), __( 'Opened the %ProductStatus% product page %ProductTitle% in editor. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
530
+ array( 9073, E_NOTICE, __( 'User viewed a product', 'wp-security-audit-log' ), __( 'Viewed the %ProductStatus% product page %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
531
+ array( 9007, E_NOTICE, __( 'User changed the Product Data of a product', 'wp-security-audit-log' ), __( 'Changed the Product Data of the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
532
+ array( 9016, E_WARNING, __( 'User changed type of a price', 'wp-security-audit-log' ), __( 'Changed the %PriceType% of the product %ProductTitle% from %OldPrice% to %NewPrice%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
533
+ array( 9017, E_WARNING, __( 'User changed the SKU of a product', 'wp-security-audit-log' ), __( 'Changed the SKU of the product %ProductTitle% from %OldSku% to %NewSku%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
534
+ array( 9018, E_CRITICAL, __( 'User changed the stock status of a product', 'wp-security-audit-log' ), __( 'Changed the stock status of the product %ProductTitle% from %OldStatus% to %NewStatus%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
535
+ array( 9019, E_WARNING, __( 'User changed the stock quantity', 'wp-security-audit-log' ), __( 'Changed the stock quantity of the product %ProductTitle% from %OldValue% to %NewValue%. View the product: %EditorLinkProduct%', 'wp-security-audit-log' ) ),
536
+ array( 9020, E_WARNING, __( 'User set a product type', 'wp-security-audit-log' ), __( 'Set the product %ProductTitle% as %Type%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
537
+ array( 9021, E_WARNING, __( 'User changed the weight of a product', 'wp-security-audit-log' ), __( 'Changed the weight of the product %ProductTitle% from %OldWeight% to %NewWeight%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
538
+ array( 9022, E_WARNING, __( 'User changed the dimensions of a product', 'wp-security-audit-log' ), __( 'Changed the %DimensionType% dimensions of the product %ProductTitle% from %OldDimension% to %NewDimension%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
539
+ array( 9023, E_WARNING, __( 'User added the Downloadable File to a product', 'wp-security-audit-log' ), __( 'Added the Downloadable File %FileName% with File URL %FileUrl% to the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
540
+ array( 9024, E_WARNING, __( 'User Removed the Downloadable File from a product', 'wp-security-audit-log' ), __( 'Removed the Downloadable File %FileName% with File URL %FileUrl% from the product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
541
+ array( 9025, E_WARNING, __( 'User changed the name of a Downloadable File in a product', 'wp-security-audit-log' ), __( 'Changed the name of a Downloadable File from %OldName% to %NewName% in product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
542
+ array( 9026, E_WARNING, __( 'User changed the URL of the Downloadable File in a product', 'wp-security-audit-log' ), __( 'Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl% in product %ProductTitle%. View the product: %EditorLinkProduct%.', 'wp-security-audit-log' ) ),
543
+ ),
544
 
545
+ /**
546
+ * Alerts: WooCommerce
547
+ */
548
+ __( 'WooCommerce', 'wp-security-audit-log' ) => array(
549
+ array( 9027, E_WARNING, __( 'User changed the Weight Unit', 'wp-security-audit-log' ), __( 'Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce.', 'wp-security-audit-log' ) ),
550
+ array( 9028, E_WARNING, __( 'User changed the Dimensions Unit', 'wp-security-audit-log' ), __( 'Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce.', 'wp-security-audit-log' ) ),
551
+ array( 9029, E_CRITICAL, __( 'User changed the Base Location', 'wp-security-audit-log' ), __( 'Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce.', 'wp-security-audit-log' ) ),
552
+ array( 9030, E_CRITICAL, __( 'User Enabled/Disabled taxes', 'wp-security-audit-log' ), __( '%Status% taxes in the WooCommerce store.', 'wp-security-audit-log' ) ),
553
+ array( 9031, E_CRITICAL, __( 'User changed the currency', 'wp-security-audit-log' ), __( 'Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce.', 'wp-security-audit-log' ) ),
554
+ array( 9032, E_CRITICAL, __( 'User Enabled/Disabled the use of coupons during checkout', 'wp-security-audit-log' ), __( '%Status% the use of coupons during checkout in WooCommerce.', 'wp-security-audit-log' ) ),
555
+ array( 9033, E_CRITICAL, __( 'User Enabled/Disabled guest checkout', 'wp-security-audit-log' ), __( '%Status% guest checkout in WooCommerce.', 'wp-security-audit-log' ) ),
556
+ array( 9034, E_CRITICAL, __( 'User Enabled/Disabled cash on delivery', 'wp-security-audit-log' ), __( '%Status% the option Enable cash on delivery in WooCommerce.', 'wp-security-audit-log' ) ),
557
+ array( 9002, E_NOTICE, __( 'User created a new product category', 'wp-security-audit-log' ), __( 'Created a new product category called %CategoryName% in WooCommerce. Product category slug is %Slug%.', 'wp-security-audit-log' ) ),
558
+ ),
559
 
560
+ /**
561
+ * Alerts: Yoast SEO
562
+ */
563
+ __( 'Yoast SEO', 'wp-security-audit-log' ) => array(
564
+ array( 8801, E_NOTICE, __( 'User changed title of a SEO post', 'wp-security-audit-log' ), __( 'Changed the SEO title of the %PostStatus% %PostType%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
565
+ array( 8802, E_NOTICE, __( 'User changed the meta description of a SEO post', 'wp-security-audit-log' ), __( 'Changed the Meta description of the %PostStatus% %PostType% titled %PostTitle%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
566
+ array( 8803, E_NOTICE, __( 'User changed setting to allow search engines to show post in search results of a SEO post', 'wp-security-audit-log' ), __( 'Changed the setting to allow search engines to show post in search results from %OldStatus% to %NewStatus% in the %PostStatus% %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
567
+ array( 8804, E_NOTICE, __( 'User Enabled/Disabled the option for search engine to follow links of a SEO post', 'wp-security-audit-log' ), __( '%NewStatus% the option for search engine to follow links in the %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
568
+ array( 8805, E_NOTICE, __( 'User set the meta robots advanced setting of a SEO post', 'wp-security-audit-log' ), __( 'Set the Meta Robots Advanced setting to %NewStatus% in the %PostStatus% %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
569
+ array( 8806, E_NOTICE, __( 'User changed the canonical URL of a SEO post', 'wp-security-audit-log' ), __( 'Changed the Canonical URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText%.%ChangeText% %EditorLinkPost%.', 'wp-security-audit-log' ) ),
570
+ array( 8807, E_NOTICE, __( 'User changed the focus keyword of a SEO post', 'wp-security-audit-log' ), __( 'Changed the focus keyword of the %PostStatus% %PostType% titled %PostTitle% from %old_keywords% to %new_keywords%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
571
+ array( 8808, E_NOTICE, __( 'User Enabled/Disabled the option Cornerston Content of a SEO post', 'wp-security-audit-log' ), __( '%Status% the option Cornerston Content on the %PostStatus% %PostType% titled %PostTitle%. %EditorLinkPost%.', 'wp-security-audit-log' ) ),
572
+ array( 8809, E_WARNING, __( 'User changed the Title Separator setting', 'wp-security-audit-log' ), __( 'Changed the Title Separator from %old% to %new% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
573
+ array( 8810, E_WARNING, __( 'User changed the Homepage Title setting', 'wp-security-audit-log' ), __( 'Changed the Homepage Title%ReportText% in the Yoast SEO plugin settings.%ChangeText%', 'wp-security-audit-log' ) ),
574
+ array( 8811, E_WARNING, __( 'User changed the Homepage Meta description setting', 'wp-security-audit-log' ), __( 'Changed the Homepage Meta description%ReportText% in the Yoast SEO plugin settings.%ChangeText%', 'wp-security-audit-log' ) ),
575
+ array( 8812, E_WARNING, __( 'User changed the Company or Person setting', 'wp-security-audit-log' ), __( 'Changed the Company or Person setting from %old% to %new% in the YOAST SEO plugin settings.', 'wp-security-audit-log' ) ),
576
+ array( 8813, E_WARNING, __( 'User Enabled/Disabled the option Show Posts/Pages in Search Results in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the option Show %SEOPostType% in Search Results in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
577
+ array( 8814, E_WARNING, __( 'User changed the Posts/Pages title template in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( 'Changed the %SEOPostType% title template from %old% to %new% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
578
+ array( 8815, E_WARNING, __( 'User Enabled/Disabled SEO analysis in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% SEO analysis in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
579
+ array( 8816, E_WARNING, __( 'User Enabled/Disabled readability analysis in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% Readability analysis in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
580
+ array( 8817, E_WARNING, __( 'User Enabled/Disabled cornerstone content in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% Cornerstone content in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
581
+ array( 8818, E_WARNING, __( 'User Enabled/Disabled the text link counter in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the Text link counter in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
582
+ array( 8819, E_WARNING, __( 'User Enabled/Disabled XML sitemaps in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% XML Sitemaps in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
583
+ array( 8820, E_WARNING, __( 'User Enabled/Disabled ryte integration in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% Ryte Integration in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
584
+ array( 8821, E_WARNING, __( 'User Enabled/Disabled the admin bar menu in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the Admin bar menu in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
585
+ array( 8822, E_WARNING, __( 'User changed the Posts/Pages meta description template in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( 'Changed the %SEOPostType% meta description template from %old% to %new% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
586
+ array( 8823, E_WARNING, __( 'User set the option Date in Snippet Preview for Posts/Pages in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the option Date in Snippet Preview for %SEOPostType% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
587
+ array( 8824, E_WARNING, __( 'User set the option Yoast SEO Meta Box for Posts/Pages in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the option Yoast SEO Meta Box for %SEOPostType% in the Yoast SEO plugin settings.', 'wp-security-audit-log' ) ),
588
+ array( 8825, E_WARNING, __( 'User Enabled/Disabled the advanced settings for authors in the Yoast SEO plugin settings', 'wp-security-audit-log' ), __( '%Status% the advanced settings for authors in the Yoast SEO settings.', 'wp-security-audit-log' ) ),
589
+ ),
590
  ),
591
+ )
592
+ );
593
+ // Load Custom alerts.
594
+ load_include_custom_file( $wsal );
595
+ }
596
  }
597
+ add_action( 'init', 'wsaldefaults_wsal_init' );
js/select2/LICENSE ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright 2014 Igor Vaynberg
2
+
3
+ Version: @@ver@@ Timestamp: @@timestamp@@
4
+
5
+ This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
6
+ General Public License version 2 (the "GPL License"). You may choose either license to govern your
7
+ use of this software only upon the condition that you accept all of the terms of either the Apache
8
+ License or the GPL License.
9
+
10
+ You may obtain a copy of the Apache License and the GPL License at:
11
+
12
+ http://www.apache.org/licenses/LICENSE-2.0
13
+ http://www.gnu.org/licenses/gpl-2.0.html
14
+
15
+ Unless required by applicable law or agreed to in writing, software distributed under the Apache License
16
+ or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17
+ either express or implied. See the Apache License and the GPL License for the specific language governing
18
+ permissions and limitations under the Apache License and the GPL License.
js/select2/select2-bootstrap.css ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .form-control .select2-choice {
2
+ border: 0;
3
+ border-radius: 2px;
4
+ }
5
+
6
+ .form-control .select2-choice .select2-arrow {
7
+ border-radius: 0 2px 2px 0;
8
+ }
9
+
10
+ .form-control.select2-container {
11
+ height: auto !important;
12
+ padding: 0;
13
+ }
14
+
15
+ .form-control.select2-container.select2-dropdown-open {
16
+ border-color: #5897FB;
17
+ border-radius: 3px 3px 0 0;
18
+ }
19
+
20
+ .form-control .select2-container.select2-dropdown-open .select2-choices {
21
+ border-radius: 3px 3px 0 0;
22
+ }
23
+
24
+ .form-control.select2-container .select2-choices {
25
+ border: 0 !important;
26
+ border-radius: 3px;
27
+ }
28
+
29
+ .control-group.warning .select2-container .select2-choice,
30
+ .control-group.warning .select2-container .select2-choices,
31
+ .control-group.warning .select2-container-active .select2-choice,
32
+ .control-group.warning .select2-container-active .select2-choices,
33
+ .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,
34
+ .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,
35
+ .control-group.warning .select2-container-multi.select2-container-active .select2-choices {
36
+ border: 1px solid #C09853 !important;
37
+ }
38
+
39
+ .control-group.warning .select2-container .select2-choice div {
40
+ border-left: 1px solid #C09853 !important;
41
+ background: #FCF8E3 !important;
42
+ }
43
+
44
+ .control-group.error .select2-container .select2-choice,
45
+ .control-group.error .select2-container .select2-choices,
46
+ .control-group.error .select2-container-active .select2-choice,
47
+ .control-group.error .select2-container-active .select2-choices,
48
+ .control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,
49
+ .control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,
50
+ .control-group.error .select2-container-multi.select2-container-active .select2-choices {
51
+ border: 1px solid #B94A48 !important;
52
+ }
53
+
54
+ .control-group.error .select2-container .select2-choice div {
55
+ border-left: 1px solid #B94A48 !important;
56
+ background: #F2DEDE !important;
57
+ }
58
+
59
+ .control-group.info .select2-container .select2-choice,
60
+ .control-group.info .select2-container .select2-choices,
61
+ .control-group.info .select2-container-active .select2-choice,
62
+ .control-group.info .select2-container-active .select2-choices,
63
+ .control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,
64
+ .control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,
65
+ .control-group.info .select2-container-multi.select2-container-active .select2-choices {
66
+ border: 1px solid #3A87AD !important;
67
+ }
68
+
69
+ .control-group.info .select2-container .select2-choice div {
70
+ border-left: 1px solid #3A87AD !important;
71
+ background: #D9EDF7 !important;
72
+ }
73
+
74
+ .control-group.success .select2-container .select2-choice,
75
+ .control-group.success .select2-container .select2-choices,
76
+ .control-group.success .select2-container-active .select2-choice,
77
+ .control-group.success .select2-container-active .select2-choices,
78
+ .control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,
79
+ .control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,
80
+ .control-group.success .select2-container-multi.select2-container-active .select2-choices {
81
+ border: 1px solid #468847 !important;
82
+ }
83
+
84
+ .control-group.success .select2-container .select2-choice div {
85
+ border-left: 1px solid #468847 !important;
86
+ background: #DFF0D8 !important;
87
+ }
js/select2/select2-spinner.gif ADDED
Binary file
js/select2/select2.css ADDED
@@ -0,0 +1,704 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Version: 3.5.1 Timestamp: Tue Jul 22 18:58:56 EDT 2014
3
+ */
4
+ .select2-container {
5
+ margin: 0;
6
+ position: relative;
7
+ display: inline-block;
8
+ /* inline-block for ie7 */
9
+ zoom: 1;
10
+ *display: inline;
11
+ vertical-align: middle;
12
+ }
13
+
14
+ .select2-container,
15
+ .select2-drop,
16
+ .select2-search,
17
+ .select2-search input {
18
+ /*
19
+ Force border-box so that % widths fit the parent
20
+ container without overlap because of margin/padding.
21
+ More Info : http://www.quirksmode.org/css/box.html
22
+ */
23
+ -webkit-box-sizing: border-box; /* webkit */
24
+ -moz-box-sizing: border-box; /* firefox */
25
+ box-sizing: border-box; /* css3 */
26
+ }
27
+
28
+ .select2-container .select2-choice {
29
+ display: block;
30
+ height: 26px;
31
+ padding: 0 0 0 8px;
32
+ overflow: hidden;
33
+ position: relative;
34
+
35
+ border: 1px solid #aaa;
36
+ white-space: nowrap;
37
+ line-height: 26px;
38
+ color: #444;
39
+ text-decoration: none;
40
+
41
+ border-radius: 4px;
42
+
43
+ background-clip: padding-box;
44
+
45
+ -webkit-touch-callout: none;
46
+ -webkit-user-select: none;
47
+ -moz-user-select: none;
48
+ -ms-user-select: none;
49
+ user-select: none;
50
+
51
+ background-color: #fff;
52
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
53
+ background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
54
+ background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
55
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
56
+ background-image: linear-gradient(to top, #eee 0%, #fff 50%);
57
+ }
58
+
59
+ html[dir="rtl"] .select2-container .select2-choice {
60
+ padding: 0 8px 0 0;
61
+ }
62
+
63
+ .select2-container.select2-drop-above .select2-choice {
64
+ border-bottom-color: #aaa;
65
+
66
+ border-radius: 0 0 4px 4px;
67
+
68
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
69
+ background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
70
+ background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
71
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
72
+ background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
73
+ }
74
+
75
+ .select2-container.select2-allowclear .select2-choice .select2-chosen {
76
+ margin-right: 42px;
77
+ }
78
+
79
+ .select2-container .select2-choice > .select2-chosen {
80
+ margin-right: 26px;
81
+ display: block;
82
+ overflow: hidden;
83
+
84
+ white-space: nowrap;
85
+
86
+ text-overflow: ellipsis;
87
+ float: none;
88
+ width: auto;
89
+ }
90
+
91
+ html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
92
+ margin-left: 26px;
93
+ margin-right: 0;
94
+ }
95
+
96
+ .select2-container .select2-choice abbr {
97
+ display: none;
98
+ width: 12px;
99
+ height: 12px;
100
+ position: absolute;
101
+ right: 24px;
102
+ top: 8px;
103
+
104
+ font-size: 1px;
105
+ text-decoration: none;
106
+
107
+ border: 0;
108
+ background: url('select2.png') right top no-repeat;
109
+ cursor: pointer;
110
+ outline: 0;
111
+ }
112
+
113
+ .select2-container.select2-allowclear .select2-choice abbr {
114
+ display: inline-block;
115
+ }
116
+
117
+ .select2-container .select2-choice abbr:hover {
118
+ background-position: right -11px;
119
+ cursor: pointer;
120
+ }
121
+
122
+ .select2-drop-mask {
123
+ border: 0;
124
+ margin: 0;
125
+ padding: 0;
126
+ position: fixed;
127
+ left: 0;
128
+ top: 0;
129
+ min-height: 100%;
130
+ min-width: 100%;
131
+ height: auto;
132
+ width: auto;
133
+ opacity: 0;
134
+ z-index: 9998;
135
+ /* styles required for IE to work */
136
+ background-color: #fff;
137
+ filter: alpha(opacity=0);
138
+ }
139
+
140
+ .select2-drop {
141
+ width: 100%;
142
+ margin-top: -1px;
143
+ position: absolute;
144
+ z-index: 9999;
145
+ top: 100%;
146
+
147
+ background: #fff;
148
+ color: #000;
149
+ border: 1px solid #aaa;
150
+ border-top: 0;
151
+
152
+ border-radius: 0 0 4px 4px;
153
+
154
+ -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
155
+ box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
156
+ }
157
+
158
+ .select2-drop.select2-drop-above {
159
+ margin-top: 1px;
160
+ border-top: 1px solid #aaa;
161
+ border-bottom: 0;
162
+
163
+ border-radius: 4px 4px 0 0;
164
+
165
+ -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
166
+ box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
167
+ }
168
+
169
+ .select2-drop-active {
170
+ border: 1px solid #5897fb;
171
+ border-top: none;
172
+ }
173
+
174
+ .select2-drop.select2-drop-above.select2-drop-active {
175
+ border-top: 1px solid #5897fb;
176
+ }
177
+
178
+ .select2-drop-auto-width {
179
+ border-top: 1px solid #aaa;
180
+ width: auto;
181
+ }
182
+
183
+ .select2-drop-auto-width .select2-search {
184
+ padding-top: 4px;
185
+ }
186
+
187
+ .select2-container .select2-choice .select2-arrow {
188
+ display: inline-block;
189
+ width: 18px;
190
+ height: 100%;
191
+ position: absolute;
192
+ right: 0;
193
+ top: 0;
194
+
195
+ border-left: 1px solid #aaa;
196
+ border-radius: 0 4px 4px 0;
197
+
198
+ background-clip: padding-box;
199
+
200
+ background: #ccc;
201
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
202
+ background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
203
+ background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
204
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
205
+ background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
206
+ }
207
+
208
+ html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
209
+ left: 0;
210
+ right: auto;
211
+
212
+ border-left: none;
213
+ border-right: 1px solid #aaa;
214
+ border-radius: 4px 0 0 4px;
215
+ }
216
+
217
+ .select2-container .select2-choice .select2-arrow b {
218
+ display: block;
219
+ width: 100%;
220
+ height: 100%;
221
+ background: url('select2.png') no-repeat 0 1px;
222
+ }
223
+
224
+ html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
225
+ background-position: 2px 1px;
226
+ }
227
+
228
+ .select2-search {
229
+ display: inline-block;
230
+ width: 100%;
231
+ min-height: 26px;
232
+ margin: 0;
233
+ padding-left: 4px;
234
+ padding-right: 4px;
235
+
236
+ position: relative;
237
+ z-index: 10000;
238
+
239
+ white-space: nowrap;
240
+ }
241
+
242
+ .select2-search input {
243
+ width: 100%;
244
+ height: auto !important;
245
+ min-height: 26px;
246
+ padding: 4px 20px 4px 5px;
247
+ margin: 0;
248
+
249
+ outline: 0;
250
+ font-family: sans-serif;
251
+ font-size: 1em;
252
+
253
+ border: 1px solid #aaa;
254
+ border-radius: 0;
255
+
256
+ -webkit-box-shadow: none;
257
+ box-shadow: none;
258
+
259
+ background: #fff url('select2.png') no-repeat 100% -22px;
260
+ background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
261
+ background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
262
+ background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
263
+ background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
264
+ }
265
+
266
+ html[dir="rtl"] .select2-search input {
267
+ padding: 4px 5px 4px 20px;
268
+
269
+ background: #fff url('select2.png') no-repeat -37px -22px;
270
+ background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
271
+ background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
272
+ background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
273
+ background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
274
+ }
275
+
276
+ .select2-drop.select2-drop-above .select2-search input {
277
+ margin-top: 4px;
278
+ }
279
+
280
+ .select2-search input.select2-active {
281
+ background: #fff url('select2-spinner.gif') no-repeat 100%;
282
+ background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
283
+ background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
284
+ background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
285
+ background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
286
+ }
287
+
288
+ .select2-container-active .select2-choice,
289
+ .select2-container-active .select2-choices {
290
+ border: 1px solid #5897fb;
291
+ outline: none;
292
+
293
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
294
+ box-shadow: 0 0 5px rgba(0, 0, 0, .3);
295
+ }
296
+
297
+ .select2-dropdown-open .select2-choice {
298
+ border-bottom-color: transparent;
299
+ -webkit-box-shadow: 0 1px 0 #fff inset;
300
+ box-shadow: 0 1px 0 #fff inset;
301
+
302
+ border-bottom-left-radius: 0;
303
+ border-bottom-right-radius: 0;
304
+
305
+ background-color: #eee;
306
+ background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
307
+ background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
308
+ background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
309
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
310
+ background-image: linear-gradient(to top, #fff 0%, #eee 50%);
311
+ }
312
+
313
+ .select2-dropdown-open.select2-drop-above .select2-choice,
314
+ .select2-dropdown-open.select2-drop-above .select2-choices {
315
+ border: 1px solid #5897fb;
316
+ border-top-color: transparent;
317
+
318
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
319
+ background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
320
+ background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
321
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
322
+ background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
323
+ }
324
+
325
+ .select2-dropdown-open .select2-choice .select2-arrow {
326
+ background: transparent;
327
+ border-left: none;
328
+ filter: none;
329
+ }
330
+ html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {
331
+ border-right: none;
332
+ }
333
+
334
+ .select2-dropdown-open .select2-choice .select2-arrow b {
335
+ background-position: -18px 1px;
336
+ }
337
+
338
+ html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b {
339
+ background-position: -16px 1px;
340
+ }
341
+
342
+ .select2-hidden-accessible {
343
+ border: 0;
344
+ clip: rect(0 0 0 0);
345
+ height: 1px;
346
+ margin: -1px;
347
+ overflow: hidden;
348
+ padding: 0;
349
+ position: absolute;
350
+ width: 1px;
351
+ }
352
+
353
+ /* results */
354
+ .select2-results {
355
+ max-height: 200px;
356
+ padding: 0 0 0 4px;
357
+ margin: 4px 4px 4px 0;
358
+ position: relative;
359
+ overflow-x: hidden;
360
+ overflow-y: auto;
361
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
362
+ }
363
+
364
+ html[dir="rtl"] .select2-results {
365
+ padding: 0 4px 0 0;
366
+ margin: 4px 0 4px 4px;
367
+ }
368
+
369
+ .select2-results ul.select2-result-sub {
370
+ margin: 0;
371
+ padding-left: 0;
372
+ }
373
+
374
+ .select2-results li {
375
+ list-style: none;
376
+ display: list-item;
377
+ background-image: none;
378
+ }
379
+
380
+ .select2-results li.select2-result-with-children > .select2-result-label {
381
+ font-weight: bold;
382
+ }
383
+
384
+ .select2-results .select2-result-label {
385
+ padding: 3px 7px 4px;
386
+ margin: 0;
387
+ cursor: pointer;
388
+
389
+ min-height: 1em;
390
+
391
+ -webkit-touch-callout: none;
392
+ -webkit-user-select: none;
393
+ -moz-user-select: none;
394
+ -ms-user-select: none;
395
+ user-select: none;
396
+ }
397
+
398
+ .select2-results-dept-1 .select2-result-label { padding-left: 20px }
399
+ .select2-results-dept-2 .select2-result-label { padding-left: 40px }
400
+ .select2-results-dept-3 .select2-result-label { padding-left: 60px }
401
+ .select2-results-dept-4 .select2-result-label { padding-left: 80px }
402
+ .select2-results-dept-5 .select2-result-label { padding-left: 100px }
403
+ .select2-results-dept-6 .select2-result-label { padding-left: 110px }
404
+ .select2-results-dept-7 .select2-result-label { padding-left: 120px }
405
+
406
+ .select2-results .select2-highlighted {
407
+ background: #3875d7;
408
+ color: #fff;
409
+ }
410
+
411
+ .select2-results li em {
412
+ background: #feffde;
413
+ font-style: normal;
414
+ }
415
+
416
+ .select2-results .select2-highlighted em {
417
+ background: transparent;
418
+ }
419
+
420
+ .select2-results .select2-highlighted ul {
421
+ background: #fff;
422
+ color: #000;
423
+ }
424
+
425
+ .select2-results .select2-no-results,
426
+ .select2-results .select2-searching,
427
+ .select2-results .select2-ajax-error,
428
+ .select2-results .select2-selection-limit {
429
+ background: #f4f4f4;
430
+ display: list-item;
431
+ padding-left: 5px;
432
+ }
433
+
434
+ /*
435
+ disabled look for disabled choices in the results dropdown
436
+ */
437
+ .select2-results .select2-disabled.select2-highlighted {
438
+ color: #666;
439
+ background: #f4f4f4;
440
+ display: list-item;
441
+ cursor: default;
442
+ }
443
+ .select2-results .select2-disabled {
444
+ background: #f4f4f4;
445
+ display: list-item;
446
+ cursor: default;
447
+ }
448
+
449
+ .select2-results .select2-selected {
450
+ display: none;
451
+ }
452
+
453
+ .select2-more-results.select2-active {
454
+ background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
455
+ }
456
+
457
+ .select2-results .select2-ajax-error {
458
+ background: rgba(255, 50, 50, .2);
459
+ }
460
+
461
+ .select2-more-results {
462
+ background: #f4f4f4;
463
+ display: list-item;
464
+ }
465
+
466
+ /* disabled styles */
467
+
468
+ .select2-container.select2-container-disabled .select2-choice {
469
+ background-color: #f4f4f4;
470
+ background-image: none;
471
+ border: 1px solid #ddd;
472
+ cursor: default;
473
+ }
474
+
475
+ .select2-container.select2-container-disabled .select2-choice .select2-arrow {
476
+ background-color: #f4f4f4;
477
+ background-image: none;
478
+ border-left: 0;
479
+ }
480
+
481
+ .select2-container.select2-container-disabled .select2-choice abbr {
482
+ display: none;
483
+ }
484
+
485
+
486
+ /* multiselect */
487
+
488
+ .select2-container-multi .select2-choices {
489
+ height: auto !important;
490
+ height: 1%;
491
+ margin: 0;
492
+ padding: 0 5px 0 0;
493
+ position: relative;
494
+
495
+ border: 1px solid #aaa;
496
+ cursor: text;
497
+ overflow: hidden;
498
+
499
+ background-color: #fff;
500
+ background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
501
+ background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
502
+ background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
503
+ background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
504
+ }
505
+
506
+ html[dir="rtl"] .select2-container-multi .select2-choices {
507
+ padding: 0 0 0 5px;
508
+ }
509
+
510
+ .select2-locked {
511
+ padding: 3px 5px 3px 5px !important;
512
+ }
513
+
514
+ .select2-container-multi .select2-choices {
515
+ min-height: 26px;
516
+ }
517
+
518
+ .select2-container-multi.select2-container-active .select2-choices {
519
+ border: 1px solid #5897fb;
520
+ outline: none;
521
+
522
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
523
+ box-shadow: 0 0 5px rgba(0, 0, 0, .3);
524
+ }
525
+ .select2-container-multi .select2-choices li {
526
+ float: left;
527
+ list-style: none;
528
+ }
529
+ html[dir="rtl"] .select2-container-multi .select2-choices li
530
+ {
531
+ float: right;
532
+ }
533
+ .select2-container-multi .select2-choices .select2-search-field {
534
+ margin: 0;
535
+ padding: 0;
536
+ white-space: nowrap;
537
+ }
538
+
539
+ .select2-container-multi .select2-choices .select2-search-field input {
540
+ padding: 5px;
541
+ margin: 1px 0;
542
+
543
+ font-family: sans-serif;
544
+ font-size: 100%;
545
+ color: #666;
546
+ outline: 0;
547
+ border: 0;
548
+ -webkit-box-shadow: none;
549
+ box-shadow: none;
550
+ background: transparent !important;
551
+ }
552
+
553
+ .select2-container-multi .select2-choices .select2-search-field input.select2-active {
554
+ background: #fff url('select2-spinner.gif') no-repeat 100% !important;
555
+ }
556
+
557
+ .select2-default {
558
+ color: #999 !important;
559
+ }
560
+
561
+ .select2-container-multi .select2-choices .select2-search-choice {
562
+ padding: 3px 5px 3px 18px;
563
+ margin: 3px 0 3px 5px;
564
+ position: relative;
565
+
566
+ line-height: 13px;
567
+ color: #333;
568
+ cursor: default;
569
+ border: 1px solid #aaaaaa;
570
+
571
+ border-radius: 3px;
572
+
573
+ -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
574
+ box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
575
+
576
+ background-clip: padding-box;
577
+
578
+ -webkit-touch-callout: none;
579
+ -webkit-user-select: none;
580
+ -moz-user-select: none;
581
+ -ms-user-select: none;
582
+ user-select: none;
583
+
584
+ background-color: #e4e4e4;
585
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
586
+ background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
587
+ background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
588
+ background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
589
+ background-image: linear-gradient(to top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
590
+ }
591
+ html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
592
+ {
593
+ margin: 3px 5px 3px 0;
594
+ padding: 3px 18px 3px 5px;
595
+ }
596
+ .select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
597
+ cursor: default;
598
+ }
599
+ .select2-container-multi .select2-choices .select2-search-choice-focus {
600
+ background: #d4d4d4;
601
+ }
602
+
603
+ .select2-search-choice-close {
604
+ display: block;
605
+ width: 12px;
606
+ height: 13px;
607
+ position: absolute;
608
+ right: 3px;
609
+ top: 4px;
610
+
611
+ font-size: 1px;
612
+ outline: none;
613
+ background: url('select2.png') right top no-repeat;
614
+ }
615
+ html[dir="rtl"] .select2-search-choice-close {
616
+ right: auto;
617
+ left: 3px;
618
+ }
619
+
620
+ .select2-container-multi .select2-search-choice-close {
621
+ left: 3px;
622
+ }
623
+
624
+ html[dir="rtl"] .select2-container-multi .select2-search-choice-close {
625
+ left: auto;
626
+ right: 2px;
627
+ }
628
+
629
+ .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
630
+ background-position: right -11px;
631
+ }
632
+ .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
633
+ background-position: right -11px;
634
+ }
635
+
636
+ /* disabled styles */
637
+ .select2-container-multi.select2-container-disabled .select2-choices {
638
+ background-color: #f4f4f4;
639
+ background-image: none;
640
+ border: 1px solid #ddd;
641
+ cursor: default;
642
+ }
643
+
644
+ .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
645
+ padding: 3px 5px 3px 5px;
646
+ border: 1px solid #ddd;
647
+ background-image: none;
648
+ background-color: #f4f4f4;
649
+ }
650
+
651
+ .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
652
+ background: none;
653
+ }
654
+ /* end multiselect */
655
+
656
+
657
+ .select2-result-selectable .select2-match,
658
+ .select2-result-unselectable .select2-match {
659
+ text-decoration: underline;
660
+ }
661
+
662
+ .select2-offscreen, .select2-offscreen:focus {
663
+ clip: rect(0 0 0 0) !important;
664
+ width: 1px !important;
665
+ height: 1px !important;
666
+ border: 0 !important;
667
+ margin: 0 !important;
668
+ padding: 0 !important;
669
+ overflow: hidden !important;
670
+ position: absolute !important;
671
+ outline: 0 !important;
672
+ left: 0px !important;
673
+ top: 0px !important;
674
+ }
675
+
676
+ .select2-display-none {
677
+ display: none;
678
+ }
679
+
680
+ .select2-measure-scrollbar {
681
+ position: absolute;
682
+ top: -10000px;
683
+ left: -10000px;
684
+ width: 100px;
685
+ height: 100px;
686
+ overflow: scroll;
687
+ }
688
+
689
+ /* Retina-ize icons */
690
+
691
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) {
692
+ .select2-search input,
693
+ .select2-search-choice-close,
694
+ .select2-container .select2-choice abbr,
695
+ .select2-container .select2-choice .select2-arrow b {
696
+ background-image: url('select2x2.png') !important;
697
+ background-repeat: no-repeat !important;
698
+ background-size: 60px 40px !important;
699
+ }
700
+
701
+ .select2-search input {
702
+ background-position: 100% -21px !important;
703
+ }
704
+ }
js/select2/select2.js ADDED
@@ -0,0 +1,3508 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Copyright 2012 Igor Vaynberg
3
+
4
+ Version: 3.5.1 Timestamp: Tue Jul 22 18:58:56 EDT 2014
5
+
6
+ This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
7
+ General Public License version 2 (the "GPL License"). You may choose either license to govern your
8
+ use of this software only upon the condition that you accept all of the terms of either the Apache
9
+ License or the GPL License.
10
+
11
+ You may obtain a copy of the Apache License and the GPL License at:
12
+
13
+ http://www.apache.org/licenses/LICENSE-2.0
14
+ http://www.gnu.org/licenses/gpl-2.0.html
15
+
16
+ Unless required by applicable law or agreed to in writing, software distributed under the
17
+ Apache License or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
18
+ CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for
19
+ the specific language governing permissions and limitations under the Apache License and the GPL License.
20
+ */
21
+ (function ($) {
22
+ if(typeof $.fn.each2 == "undefined") {
23
+ $.extend($.fn, {
24
+ /*
25
+ * 4-10 times faster .each replacement
26
+ * use it carefully, as it overrides jQuery context of element on each iteration
27
+ */
28
+ each2 : function (c) {
29
+ var j = $([0]), i = -1, l = this.length;
30
+ while (
31
+ ++i < l
32
+ && (j.context = j[0] = this[i])
33
+ && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object
34
+ );
35
+ return this;
36
+ }
37
+ });
38
+ }
39
+ })(jQuery);
40
+
41
+ (function ($, undefined) {
42
+ "use strict";
43
+ /*global document, window, jQuery, console */
44
+
45
+ if (window.Select2 !== undefined) {
46
+ return;
47
+ }
48
+
49
+ var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,
50
+ lastMousePosition={x:0,y:0}, $document, scrollBarDimensions,
51
+
52
+ KEY = {
53
+ TAB: 9,
54
+ ENTER: 13,
55
+ ESC: 27,
56
+ SPACE: 32,
57
+ LEFT: 37,
58
+ UP: 38,
59
+ RIGHT: 39,
60
+ DOWN: 40,
61
+ SHIFT: 16,
62
+ CTRL: 17,
63
+ ALT: 18,
64
+ PAGE_UP: 33,
65
+ PAGE_DOWN: 34,
66
+ HOME: 36,
67
+ END: 35,
68
+ BACKSPACE: 8,
69
+ DELETE: 46,
70
+ isArrow: function (k) {
71
+ k = k.which ? k.which : k;
72
+ switch (k) {
73
+ case KEY.LEFT:
74
+ case KEY.RIGHT:
75
+ case KEY.UP:
76
+ case KEY.DOWN:
77
+ return true;
78
+ }
79
+ return false;
80
+ },
81
+ isControl: function (e) {
82
+ var k = e.which;
83
+ switch (k) {
84
+ case KEY.SHIFT:
85
+ case KEY.CTRL:
86
+ case KEY.ALT:
87
+ return true;
88
+ }
89
+
90
+ if (e.metaKey) return true;
91
+
92
+ return false;
93
+ },
94
+ isFunctionKey: function (k) {
95
+ k = k.which ? k.which : k;
96
+ return k >= 112 && k <= 123;
97
+ }
98
+ },
99
+ MEASURE_SCROLLBAR_TEMPLATE = "<div class='select2-measure-scrollbar'></div>",
100
+
101
+ DIACRITICS = {"\u24B6":"A","\uFF21":"A","\u00C0":"A","\u00C1":"A","\u00C2":"A","\u1EA6":"A","\u1EA4":"A","\u1EAA":"A","\u1EA8":"A","\u00C3":"A","\u0100":"A","\u0102":"A","\u1EB0":"A","\u1EAE":"A","\u1EB4":"A","\u1EB2":"A","\u0226":"A","\u01E0":"A","\u00C4":"A","\u01DE":"A","\u1EA2":"A","\u00C5":"A","\u01FA":"A","\u01CD":"A","\u0200":"A","\u0202":"A","\u1EA0":"A","\u1EAC":"A","\u1EB6":"A","\u1E00":"A","\u0104":"A","\u023A":"A","\u2C6F":"A","\uA732":"AA","\u00C6":"AE","\u01FC":"AE","\u01E2":"AE","\uA734":"AO","\uA736":"AU","\uA738":"AV","\uA73A":"AV","\uA73C":"AY","\u24B7":"B","\uFF22":"B","\u1E02":"B","\u1E04":"B","\u1E06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24B8":"C","\uFF23":"C","\u0106":"C","\u0108":"C","\u010A":"C","\u010C":"C","\u00C7":"C","\u1E08":"C","\u0187":"C","\u023B":"C","\uA73E":"C","\u24B9":"D","\uFF24":"D","\u1E0A":"D","\u010E":"D","\u1E0C":"D","\u1E10":"D","\u1E12":"D","\u1E0E":"D","\u0110":"D","\u018B":"D","\u018A":"D","\u0189":"D","\uA779":"D","\u01F1":"DZ","\u01C4":"DZ","\u01F2":"Dz","\u01C5":"Dz","\u24BA":"E","\uFF25":"E","\u00C8":"E","\u00C9":"E","\u00CA":"E","\u1EC0":"E","\u1EBE":"E","\u1EC4":"E","\u1EC2":"E","\u1EBC":"E","\u0112":"E","\u1E14":"E","\u1E16":"E","\u0114":"E","\u0116":"E","\u00CB":"E","\u1EBA":"E","\u011A":"E","\u0204":"E","\u0206":"E","\u1EB8":"E","\u1EC6":"E","\u0228":"E","\u1E1C":"E","\u0118":"E","\u1E18":"E","\u1E1A":"E","\u0190":"E","\u018E":"E","\u24BB":"F","\uFF26":"F","\u1E1E":"F","\u0191":"F","\uA77B":"F","\u24BC":"G","\uFF27":"G","\u01F4":"G","\u011C":"G","\u1E20":"G","\u011E":"G","\u0120":"G","\u01E6":"G","\u0122":"G","\u01E4":"G","\u0193":"G","\uA7A0":"G","\uA77D":"G","\uA77E":"G","\u24BD":"H","\uFF28":"H","\u0124":"H","\u1E22":"H","\u1E26":"H","\u021E":"H","\u1E24":"H","\u1E28":"H","\u1E2A":"H","\u0126":"H","\u2C67":"H","\u2C75":"H","\uA78D":"H","\u24BE":"I","\uFF29":"I","\u00CC":"I","\u00CD":"I","\u00CE":"I","\u0128":"I","\u012A":"I","\u012C":"I","\u0130":"I","\u00CF":"I","\u1E2E":"I","\u1EC8":"I","\u01CF":"I","\u0208":"I","\u020A":"I","\u1ECA":"I","\u012E":"I","\u1E2C":"I","\u0197":"I","\u24BF":"J","\uFF2A":"J","\u0134":"J","\u0248":"J","\u24C0":"K","\uFF2B":"K","\u1E30":"K","\u01E8":"K","\u1E32":"K","\u0136":"K","\u1E34":"K","\u0198":"K","\u2C69":"K","\uA740":"K","\uA742":"K","\uA744":"K","\uA7A2":"K","\u24C1":"L","\uFF2C":"L","\u013F":"L","\u0139":"L","\u013D":"L","\u1E36":"L","\u1E38":"L","\u013B":"L","\u1E3C":"L","\u1E3A":"L","\u0141":"L","\u023D":"L","\u2C62":"L","\u2C60":"L","\uA748":"L","\uA746":"L","\uA780":"L","\u01C7":"LJ","\u01C8":"Lj","\u24C2":"M","\uFF2D":"M","\u1E3E":"M","\u1E40":"M","\u1E42":"M","\u2C6E":"M","\u019C":"M","\u24C3":"N","\uFF2E":"N","\u01F8":"N","\u0143":"N","\u00D1":"N","\u1E44":"N","\u0147":"N","\u1E46":"N","\u0145":"N","\u1E4A":"N","\u1E48":"N","\u0220":"N","\u019D":"N","\uA790":"N","\uA7A4":"N","\u01CA":"NJ","\u01CB":"Nj","\u24C4":"O","\uFF2F":"O","\u00D2":"O","\u00D3":"O","\u00D4":"O","\u1ED2":"O","\u1ED0":"O","\u1ED6":"O","\u1ED4":"O","\u00D5":"O","\u1E4C":"O","\u022C":"O","\u1E4E":"O","\u014C":"O","\u1E50":"O","\u1E52":"O","\u014E":"O","\u022E":"O","\u0230":"O","\u00D6":"O","\u022A":"O","\u1ECE":"O","\u0150":"O","\u01D1":"O","\u020C":"O","\u020E":"O","\u01A0":"O","\u1EDC":"O","\u1EDA":"O","\u1EE0":"O","\u1EDE":"O","\u1EE2":"O","\u1ECC":"O","\u1ED8":"O","\u01EA":"O","\u01EC":"O","\u00D8":"O","\u01FE":"O","\u0186":"O","\u019F":"O","\uA74A":"O","\uA74C":"O","\u01A2":"OI","\uA74E":"OO","\u0222":"OU","\u24C5":"P","\uFF30":"P","\u1E54":"P","\u1E56":"P","\u01A4":"P","\u2C63":"P","\uA750":"P","\uA752":"P","\uA754":"P","\u24C6":"Q","\uFF31":"Q","\uA756":"Q","\uA758":"Q","\u024A":"Q","\u24C7":"R","\uFF32":"R","\u0154":"R","\u1E58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1E5A":"R","\u1E5C":"R","\u0156":"R","\u1E5E":"R","\u024C":"R","\u2C64":"R","\uA75A":"R","\uA7A6":"R","\uA782":"R","\u24C8":"S","\uFF33":"S","\u1E9E":"S","\u015A":"S","\u1E64":"S","\u015C":"S","\u1E60":"S","\u0160":"S","\u1E66":"S","\u1E62":"S","\u1E68":"S","\u0218":"S","\u015E":"S","\u2C7E":"S","\uA7A8":"S","\uA784":"S","\u24C9":"T","\uFF34":"T","\u1E6A":"T","\u0164":"T","\u1E6C":"T","\u021A":"T","\u0162":"T","\u1E70":"T","\u1E6E":"T","\u0166":"T","\u01AC":"T","\u01AE":"T","\u023E":"T","\uA786":"T","\uA728":"TZ","\u24CA":"U","\uFF35":"U","\u00D9":"U","\u00DA":"U","\u00DB":"U","\u0168":"U","\u1E78":"U","\u016A":"U","\u1E7A":"U","\u016C":"U","\u00DC":"U","\u01DB":"U","\u01D7":"U","\u01D5":"U","\u01D9":"U","\u1EE6":"U","\u016E":"U","\u0170":"U","\u01D3":"U","\u0214":"U","\u0216":"U","\u01AF":"U","\u1EEA":"U","\u1EE8":"U","\u1EEE":"U","\u1EEC":"U","\u1EF0":"U","\u1EE4":"U","\u1E72":"U","\u0172":"U","\u1E76":"U","\u1E74":"U","\u0244":"U","\u24CB":"V","\uFF36":"V","\u1E7C":"V","\u1E7E":"V","\u01B2":"V","\uA75E":"V","\u0245":"V","\uA760":"VY","\u24CC":"W","\uFF37":"W","\u1E80":"W","\u1E82":"W","\u0174":"W","\u1E86":"W","\u1E84":"W","\u1E88":"W","\u2C72":"W","\u24CD":"X","\uFF38":"X","\u1E8A":"X","\u1E8C":"X","\u24CE":"Y","\uFF39":"Y","\u1EF2":"Y","\u00DD":"Y","\u0176":"Y","\u1EF8":"Y","\u0232":"Y","\u1E8E":"Y","\u0178":"Y","\u1EF6":"Y","\u1EF4":"Y","\u01B3":"Y","\u024E":"Y","\u1EFE":"Y","\u24CF":"Z","\uFF3A":"Z","\u0179":"Z","\u1E90":"Z","\u017B":"Z","\u017D":"Z","\u1E92":"Z","\u1E94":"Z","\u01B5":"Z","\u0224":"Z","\u2C7F":"Z","\u2C6B":"Z","\uA762":"Z","\u24D0":"a","\uFF41":"a","\u1E9A":"a","\u00E0":"a","\u00E1":"a","\u00E2":"a","\u1EA7":"a","\u1EA5":"a","\u1EAB":"a","\u1EA9":"a","\u00E3":"a","\u0101":"a","\u0103":"a","\u1EB1":"a","\u1EAF":"a","\u1EB5":"a","\u1EB3":"a","\u0227":"a","\u01E1":"a","\u00E4":"a","\u01DF":"a","\u1EA3":"a","\u00E5":"a","\u01FB":"a","\u01CE":"a","\u0201":"a","\u0203":"a","\u1EA1":"a","\u1EAD":"a","\u1EB7":"a","\u1E01":"a","\u0105":"a","\u2C65":"a","\u0250":"a","\uA733":"aa","\u00E6":"ae","\u01FD":"ae","\u01E3":"ae","\uA735":"ao","\uA737":"au","\uA739":"av","\uA73B":"av","\uA73D":"ay","\u24D1":"b","\uFF42":"b","\u1E03":"b","\u1E05":"b","\u1E07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24D2":"c","\uFF43":"c","\u0107":"c","\u0109":"c","\u010B":"c","\u010D":"c","\u00E7":"c","\u1E09":"c","\u0188":"c","\u023C":"c","\uA73F":"c","\u2184":"c","\u24D3":"d","\uFF44":"d","\u1E0B":"d","\u010F":"d","\u1E0D":"d","\u1E11":"d","\u1E13":"d","\u1E0F":"d","\u0111":"d","\u018C":"d","\u0256":"d","\u0257":"d","\uA77A":"d","\u01F3":"dz","\u01C6":"dz","\u24D4":"e","\uFF45":"e","\u00E8":"e","\u00E9":"e","\u00EA":"e","\u1EC1":"e","\u1EBF":"e","\u1EC5":"e","\u1EC3":"e","\u1EBD":"e","\u0113":"e","\u1E15":"e","\u1E17":"e","\u0115":"e","\u0117":"e","\u00EB":"e","\u1EBB":"e","\u011B":"e","\u0205":"e","\u0207":"e","\u1EB9":"e","\u1EC7":"e","\u0229":"e","\u1E1D":"e","\u0119":"e","\u1E19":"e","\u1E1B":"e","\u0247":"e","\u025B":"e","\u01DD":"e","\u24D5":"f","\uFF46":"f","\u1E1F":"f","\u0192":"f","\uA77C":"f","\u24D6":"g","\uFF47":"g","\u01F5":"g","\u011D":"g","\u1E21":"g","\u011F":"g","\u0121":"g","\u01E7":"g","\u0123":"g","\u01E5":"g","\u0260":"g","\uA7A1":"g","\u1D79":"g","\uA77F":"g","\u24D7":"h","\uFF48":"h","\u0125":"h","\u1E23":"h","\u1E27":"h","\u021F":"h","\u1E25":"h","\u1E29":"h","\u1E2B":"h","\u1E96":"h","\u0127":"h","\u2C68":"h","\u2C76":"h","\u0265":"h","\u0195":"hv","\u24D8":"i","\uFF49":"i","\u00EC":"i","\u00ED":"i","\u00EE":"i","\u0129":"i","\u012B":"i","\u012D":"i","\u00EF":"i","\u1E2F":"i","\u1EC9":"i","\u01D0":"i","\u0209":"i","\u020B":"i","\u1ECB":"i","\u012F":"i","\u1E2D":"i","\u0268":"i","\u0131":"i","\u24D9":"j","\uFF4A":"j","\u0135":"j","\u01F0":"j","\u0249":"j","\u24DA":"k","\uFF4B":"k","\u1E31":"k","\u01E9":"k","\u1E33":"k","\u0137":"k","\u1E35":"k","\u0199":"k","\u2C6A":"k","\uA741":"k","\uA743":"k","\uA745":"k","\uA7A3":"k","\u24DB":"l","\uFF4C":"l","\u0140":"l","\u013A":"l","\u013E":"l","\u1E37":"l","\u1E39":"l","\u013C":"l","\u1E3D":"l","\u1E3B":"l","\u017F":"l","\u0142":"l","\u019A":"l","\u026B":"l","\u2C61":"l","\uA749":"l","\uA781":"l","\uA747":"l","\u01C9":"lj","\u24DC":"m","\uFF4D":"m","\u1E3F":"m","\u1E41":"m","\u1E43":"m","\u0271":"m","\u026F":"m","\u24DD":"n","\uFF4E":"n","\u01F9":"n","\u0144":"n","\u00F1":"n","\u1E45":"n","\u0148":"n","\u1E47":"n","\u0146":"n","\u1E4B":"n","\u1E49":"n","\u019E":"n","\u0272":"n","\u0149":"n","\uA791":"n","\uA7A5":"n","\u01CC":"nj","\u24DE":"o","\uFF4F":"o","\u00F2":"o","\u00F3":"o","\u00F4":"o","\u1ED3":"o","\u1ED1":"o","\u1ED7":"o","\u1ED5":"o","\u00F5":"o","\u1E4D":"o","\u022D":"o","\u1E4F":"o","\u014D":"o","\u1E51":"o","\u1E53":"o","\u014F":"o","\u022F":"o","\u0231":"o","\u00F6":"o","\u022B":"o","\u1ECF":"o","\u0151":"o","\u01D2":"o","\u020D":"o","\u020F":"o","\u01A1":"o","\u1EDD":"o","\u1EDB":"o","\u1EE1":"o","\u1EDF":"o","\u1EE3":"o","\u1ECD":"o","\u1ED9":"o","\u01EB":"o","\u01ED":"o","\u00F8":"o","\u01FF":"o","\u0254":"o","\uA74B":"o","\uA74D":"o","\u0275":"o","\u01A3":"oi","\u0223":"ou","\uA74F":"oo","\u24DF":"p","\uFF50":"p","\u1E55":"p","\u1E57":"p","\u01A5":"p","\u1D7D":"p","\uA751":"p","\uA753":"p","\uA755":"p","\u24E0":"q","\uFF51":"q","\u024B":"q","\uA757":"q","\uA759":"q","\u24E1":"r","\uFF52":"r","\u0155":"r","\u1E59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1E5B":"r","\u1E5D":"r","\u0157":"r","\u1E5F":"r","\u024D":"r","\u027D":"r","\uA75B":"r","\uA7A7":"r","\uA783":"r","\u24E2":"s","\uFF53":"s","\u00DF":"s","\u015B":"s","\u1E65":"s","\u015D":"s","\u1E61":"s","\u0161":"s","\u1E67":"s","\u1E63":"s","\u1E69":"s","\u0219":"s","\u015F":"s","\u023F":"s","\uA7A9":"s","\uA785":"s","\u1E9B":"s","\u24E3":"t","\uFF54":"t","\u1E6B":"t","\u1E97":"t","\u0165":"t","\u1E6D":"t","\u021B":"t","\u0163":"t","\u1E71":"t","\u1E6F":"t","\u0167":"t","\u01AD":"t","\u0288":"t","\u2C66":"t","\uA787":"t","\uA729":"tz","\u24E4":"u","\uFF55":"u","\u00F9":"u","\u00FA":"u","\u00FB":"u","\u0169":"u","\u1E79":"u","\u016B":"u","\u1E7B":"u","\u016D":"u","\u00FC":"u","\u01DC":"u","\u01D8":"u","\u01D6":"u","\u01DA":"u","\u1EE7":"u","\u016F":"u","\u0171":"u","\u01D4":"u","\u0215":"u","\u0217":"u","\u01B0":"u","\u1EEB":"u","\u1EE9":"u","\u1EEF":"u","\u1EED":"u","\u1EF1":"u","\u1EE5":"u","\u1E73":"u","\u0173":"u","\u1E77":"u","\u1E75":"u","\u0289":"u","\u24E5":"v","\uFF56":"v","\u1E7D":"v","\u1E7F":"v","\u028B":"v","\uA75F":"v","\u028C":"v","\uA761":"vy","\u24E6":"w","\uFF57":"w","\u1E81":"w","\u1E83":"w","\u0175":"w","\u1E87":"w","\u1E85":"w","\u1E98":"w","\u1E89":"w","\u2C73":"w","\u24E7":"x","\uFF58":"x","\u1E8B":"x","\u1E8D":"x","\u24E8":"y","\uFF59":"y","\u1EF3":"y","\u00FD":"y","\u0177":"y","\u1EF9":"y","\u0233":"y","\u1E8F":"y","\u00FF":"y","\u1EF7":"y","\u1E99":"y","\u1EF5":"y","\u01B4":"y","\u024F":"y","\u1EFF":"y","\u24E9":"z","\uFF5A":"z","\u017A":"z","\u1E91":"z","\u017C":"z","\u017E":"z","\u1E93":"z","\u1E95":"z","\u01B6":"z","\u0225":"z","\u0240":"z","\u2C6C":"z","\uA763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038A":"\u0399","\u03AA":"\u0399","\u038C":"\u039F","\u038E":"\u03A5","\u03AB":"\u03A5","\u038F":"\u03A9","\u03AC":"\u03B1","\u03AD":"\u03B5","\u03AE":"\u03B7","\u03AF":"\u03B9","\u03CA":"\u03B9","\u0390":"\u03B9","\u03CC":"\u03BF","\u03CD":"\u03C5","\u03CB":"\u03C5","\u03B0":"\u03C5","\u03C9":"\u03C9","\u03C2":"\u03C3"};
102
+
103
+ $document = $(document);
104
+
105
+ nextUid=(function() { var counter=1; return function() { return counter++; }; }());
106
+
107
+
108
+ function reinsertElement(element) {
109
+ var placeholder = $(document.createTextNode(''));
110
+
111
+ element.before(placeholder);
112
+ placeholder.before(element);
113
+ placeholder.remove();
114
+ }
115
+
116
+ function stripDiacritics(str) {
117
+ // Used 'uni range + named function' from http://jsperf.com/diacritics/18
118
+ function match(a) {
119
+ return DIACRITICS[a] || a;
120
+ }
121
+
122
+ return str.replace(/[^\u0000-\u007E]/g, match);
123
+ }
124
+
125
+ function indexOf(value, array) {
126
+ var i = 0, l = array.length;
127
+ for (; i < l; i = i + 1) {
128
+ if (equal(value, array[i])) return i;
129
+ }
130
+ return -1;
131
+ }
132
+
133
+ function measureScrollbar () {
134
+ var $template = $( MEASURE_SCROLLBAR_TEMPLATE );
135
+ $template.appendTo('body');
136
+
137
+ var dim = {
138
+ width: $template.width() - $template[0].clientWidth,
139
+ height: $template.height() - $template[0].clientHeight
140
+ };
141
+ $template.remove();
142
+
143
+ return dim;
144
+ }
145
+
146
+ /**
147
+ * Compares equality of a and b
148
+ * @param a
149
+ * @param b
150
+ */
151
+ function equal(a, b) {
152
+ if (a === b) return true;
153
+ if (a === undefined || b === undefined) return false;
154
+ if (a === null || b === null) return false;
155
+ // Check whether 'a' or 'b' is a string (primitive or object).
156
+ // The concatenation of an empty string (+'') converts its argument to a string's primitive.
157
+ if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object
158
+ if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object
159
+ return false;
160
+ }
161
+
162
+ /**
163
+ * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty
164
+ * strings
165
+ * @param string
166
+ * @param separator
167
+ */
168
+ function splitVal(string, separator) {
169
+ var val, i, l;
170
+ if (string === null || string.length < 1) return [];
171
+ val = string.split(separator);
172
+ for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);
173
+ return val;
174
+ }
175
+
176
+ function getSideBorderPadding(element) {
177
+ return element.outerWidth(false) - element.width();
178
+ }
179
+
180
+ function installKeyUpChangeEvent(element) {
181
+ var key="keyup-change-value";
182
+ element.on("keydown", function () {
183
+ if ($.data(element, key) === undefined) {
184
+ $.data(element, key, element.val());
185
+ }
186
+ });
187
+ element.on("keyup", function () {
188
+ var val= $.data(element, key);
189
+ if (val !== undefined && element.val() !== val) {
190
+ $.removeData(element, key);
191
+ element.trigger("keyup-change");
192
+ }
193
+ });
194
+ }
195
+
196
+
197
+ /**
198
+ * filters mouse events so an event is fired only if the mouse moved.
199
+ *
200
+ * filters out mouse events that occur when mouse is stationary but
201
+ * the elements under the pointer are scrolled.
202
+ */
203
+ function installFilteredMouseMove(element) {
204
+ element.on("mousemove", function (e) {
205
+ var lastpos = lastMousePosition;
206
+ if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {
207
+ $(e.target).trigger("mousemove-filtered", e);
208
+ }
209
+ });
210
+ }
211
+
212
+ /**
213
+ * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made
214
+ * within the last quietMillis milliseconds.
215
+ *
216
+ * @param quietMillis number of milliseconds to wait before invoking fn
217
+ * @param fn function to be debounced
218
+ * @param ctx object to be used as this reference within fn
219
+ * @return debounced version of fn
220
+ */
221
+ function debounce(quietMillis, fn, ctx) {
222
+ ctx = ctx || undefined;
223
+ var timeout;
224
+ return function () {
225
+ var args = arguments;
226
+ window.clearTimeout(timeout);
227
+ timeout = window.setTimeout(function() {
228
+ fn.apply(ctx, args);
229
+ }, quietMillis);
230
+ };
231
+ }
232
+
233
+ function installDebouncedScroll(threshold, element) {
234
+ var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);});
235
+ element.on("scroll", function (e) {
236
+ if (indexOf(e.target, element.get()) >= 0) notify(e);
237
+ });
238
+ }
239
+
240
+ function focus($el) {
241
+ if ($el[0] === document.activeElement) return;
242
+
243
+ /* set the focus in a 0 timeout - that way the focus is set after the processing
244
+ of the current event has finished - which seems like the only reliable way
245
+ to set focus */
246
+ window.setTimeout(function() {
247
+ var el=$el[0], pos=$el.val().length, range;
248
+
249
+ $el.focus();
250
+
251
+ /* make sure el received focus so we do not error out when trying to manipulate the caret.
252
+ sometimes modals or others listeners may steal it after its set */
253
+ var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0);
254
+ if (isVisible && el === document.activeElement) {
255
+
256
+ /* after the focus is set move the caret to the end, necessary when we val()
257
+ just before setting focus */
258
+ if(el.setSelectionRange)
259
+ {
260
+ el.setSelectionRange(pos, pos);
261
+ }
262
+ else if (el.createTextRange) {
263
+ range = el.createTextRange();
264
+ range.collapse(false);
265
+ range.select();
266
+ }
267
+ }
268
+ }, 0);
269
+ }
270
+
271
+ function getCursorInfo(el) {
272
+ el = $(el)[0];
273
+ var offset = 0;
274
+ var length = 0;
275
+ if ('selectionStart' in el) {
276
+ offset = el.selectionStart;
277
+ length = el.selectionEnd - offset;
278
+ } else if ('selection' in document) {
279
+ el.focus();
280
+ var sel = document.selection.createRange();
281
+ length = document.selection.createRange().text.length;
282
+ sel.moveStart('character', -el.value.length);
283
+ offset = sel.text.length - length;
284
+ }
285
+ return { offset: offset, length: length };
286
+ }
287
+
288
+ function killEvent(event) {
289
+ event.preventDefault();
290
+ event.stopPropagation();
291
+ }
292
+ function killEventImmediately(event) {
293
+ event.preventDefault();
294
+ event.stopImmediatePropagation();
295
+ }
296
+
297
+ function measureTextWidth(e) {
298
+ if (!sizer){
299
+ var style = e[0].currentStyle || window.getComputedStyle(e[0], null);
300
+ sizer = $(document.createElement("div")).css({
301
+ position: "absolute",
302
+ left: "-10000px",
303
+ top: "-10000px",
304
+ display: "none",
305
+ fontSize: style.fontSize,
306
+ fontFamily: style.fontFamily,
307
+ fontStyle: style.fontStyle,
308
+ fontWeight: style.fontWeight,
309
+ letterSpacing: style.letterSpacing,
310
+ textTransform: style.textTransform,
311
+ whiteSpace: "nowrap"
312
+ });
313
+ sizer.attr("class","select2-sizer");
314
+ $("body").append(sizer);
315
+ }
316
+ sizer.text(e.val());
317
+ return sizer.width();
318
+ }
319
+
320
+ function syncCssClasses(dest, src, adapter) {
321
+ var classes, replacements = [], adapted;
322
+
323
+ classes = $.trim(dest.attr("class"));
324
+
325
+ if (classes) {
326
+ classes = '' + classes; // for IE which returns object
327
+
328
+ $(classes.split(/\s+/)).each2(function() {
329
+ if (this.indexOf("select2-") === 0) {
330
+ replacements.push(this);
331
+ }
332
+ });
333
+ }
334
+
335
+ classes = $.trim(src.attr("class"));
336
+
337
+ if (classes) {
338
+ classes = '' + classes; // for IE which returns object
339
+
340
+ $(classes.split(/\s+/)).each2(function() {
341
+ if (this.indexOf("select2-") !== 0) {
342
+ adapted = adapter(this);
343
+
344
+ if (adapted) {
345
+ replacements.push(adapted);
346
+ }
347
+ }
348
+ });
349
+ }
350
+
351
+ dest.attr("class", replacements.join(" "));
352
+ }
353
+
354
+
355
+ function markMatch(text, term, markup, escapeMarkup) {
356
+ var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())),
357
+ tl=term.length;
358
+
359
+ if (match<0) {
360
+ markup.push(escapeMarkup(text));
361
+ return;
362
+ }
363
+
364
+ markup.push(escapeMarkup(text.substring(0, match)));
365
+ markup.push("<span class='select2-match'>");
366
+ markup.push(escapeMarkup(text.substring(match, match + tl)));
367
+ markup.push("</span>");
368
+ markup.push(escapeMarkup(text.substring(match + tl, text.length)));
369
+ }
370
+
371
+ function defaultEscapeMarkup(markup) {
372
+ var replace_map = {
373
+ '\\': '&#92;',
374
+ '&': '&amp;',
375
+ '<': '&lt;',
376
+ '>': '&gt;',
377
+ '"': '&quot;',
378
+ "'": '&#39;',
379
+ "/": '&#47;'
380
+ };
381
+
382
+ return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
383
+ return replace_map[match];
384
+ });
385
+ }
386
+
387
+ /**
388
+ * Produces an ajax-based query function
389
+ *
390
+ * @param options object containing configuration parameters
391
+ * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax
392
+ * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax
393
+ * @param options.url url for the data
394
+ * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.
395
+ * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified
396
+ * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often
397
+ * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select2.
398
+ * The expected format is an object containing the following keys:
399
+ * results array of objects that will be used as choices
400
+ * more (optional) boolean indicating whether there are more results available
401
+ * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}
402
+ */
403
+ function ajax(options) {
404
+ var timeout, // current scheduled but not yet executed request
405
+ handler = null,
406
+ quietMillis = options.quietMillis || 100,
407
+ ajaxUrl = options.url,
408
+ self = this;
409
+
410
+ return function (query) {
411
+ window.clearTimeout(timeout);
412
+ timeout = window.setTimeout(function () {
413
+ var data = options.data, // ajax data function
414
+ url = ajaxUrl, // ajax url string or function
415
+ transport = options.transport || $.fn.select2.ajaxDefaults.transport,
416
+ // deprecated - to be removed in 4.0 - use params instead
417
+ deprecated = {
418
+ type: options.type || 'GET', // set type of request (GET or POST)
419
+ cache: options.cache || false,
420
+ jsonpCallback: options.jsonpCallback||undefined,
421
+ dataType: options.dataType||"json"
422
+ },
423
+ params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);
424
+
425
+ data = data ? data.call(self, query.term, query.page, query.context) : null;
426
+ url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;
427
+
428
+ if (handler && typeof handler.abort === "function") { handler.abort(); }
429
+
430
+ if (options.params) {
431
+ if ($.isFunction(options.params)) {
432
+ $.extend(params, options.params.call(self));
433
+ } else {
434
+ $.extend(params, options.params);
435
+ }
436
+ }
437
+
438
+ $.extend(params, {
439
+ url: url,
440
+ dataType: options.dataType,
441
+ data: data,
442
+ success: function (data) {
443
+ // TODO - replace query.page with query so users have access to term, page, etc.
444
+ // added query as third paramter to keep backwards compatibility
445
+ var results = options.results(data, query.page, query);
446
+ query.callback(results);
447
+ },
448
+ error: function(jqXHR, textStatus, errorThrown){
449
+ var results = {
450
+ hasError: true,
451
+ jqXHR: jqXHR,
452
+ textStatus: textStatus,
453
+ errorThrown: errorThrown,
454
+ };
455
+
456
+ query.callback(results);
457
+ }
458
+ });
459
+ handler = transport.call(self, params);
460
+ }, quietMillis);
461
+ };
462
+ }
463
+
464
+ /**
465
+ * Produces a query function that works with a local array
466
+ *
467
+ * @param options object containing configuration parameters. The options parameter can either be an array or an
468
+ * object.
469
+ *
470
+ * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.
471
+ *
472
+ * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain
473
+ * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'
474
+ * key can either be a String in which case it is expected that each element in the 'data' array has a key with the
475
+ * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract
476
+ * the text.
477
+ */
478
+ function local(options) {
479
+ var data = options, // data elements
480
+ dataText,
481
+ tmp,
482
+ text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search
483
+
484
+ if ($.isArray(data)) {
485
+ tmp = data;
486
+ data = { results: tmp };
487
+ }
488
+
489
+ if ($.isFunction(data) === false) {
490
+ tmp = data;
491
+ data = function() { return tmp; };
492
+ }
493
+
494
+ var dataItem = data();
495
+ if (dataItem.text) {
496
+ text = dataItem.text;
497
+ // if text is not a function we assume it to be a key name
498
+ if (!$.isFunction(text)) {
499
+ dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available
500
+ text = function (item) { return item[dataText]; };
501
+ }
502
+ }
503
+
504
+ return function (query) {
505
+ var t = query.term, filtered = { results: [] }, process;
506
+ if (t === "") {
507
+ query.callback(data());
508
+ return;
509
+ }
510
+
511
+ process = function(datum, collection) {
512
+ var group, attr;
513
+ datum = datum[0];
514
+ if (datum.children) {
515
+ group = {};
516
+ for (attr in datum) {
517
+ if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];
518
+ }
519
+ group.children=[];
520
+ $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });
521
+ if (group.children.length || query.matcher(t, text(group), datum)) {
522
+ collection.push(group);
523
+ }
524
+ } else {
525
+ if (query.matcher(t, text(datum), datum)) {
526
+ collection.push(datum);
527
+ }
528
+ }
529
+ };
530
+
531
+ $(data().results).each2(function(i, datum) { process(datum, filtered.results); });
532
+ query.callback(filtered);
533
+ };
534
+ }
535
+
536
+ // TODO javadoc
537
+ function tags(data) {
538
+ var isFunc = $.isFunction(data);
539
+ return function (query) {
540
+ var t = query.term, filtered = {results: []};
541
+ var result = isFunc ? data(query) : data;
542
+ if ($.isArray(result)) {
543
+ $(result).each(function () {
544
+ var isObject = this.text !== undefined,
545
+ text = isObject ? this.text : this;
546
+ if (t === "" || query.matcher(t, text)) {
547
+ filtered.results.push(isObject ? this : {id: this, text: this});
548
+ }
549
+ });
550
+ query.callback(filtered);
551
+ }
552
+ };
553
+ }
554
+
555
+ /**
556
+ * Checks if the formatter function should be used.
557
+ *
558
+ * Throws an error if it is not a function. Returns true if it should be used,
559
+ * false if no formatting should be performed.
560
+ *
561
+ * @param formatter
562
+ */
563
+ function checkFormatter(formatter, formatterName) {
564
+ if ($.isFunction(formatter)) return true;
565
+ if (!formatter) return false;
566
+ if (typeof(formatter) === 'string') return true;
567
+ throw new Error(formatterName +" must be a string, function, or falsy value");
568
+ }
569
+
570
+ /**
571
+ * Returns a given value
572
+ * If given a function, returns its output
573
+ *
574
+ * @param val string|function
575
+ * @param context value of "this" to be passed to function
576
+ * @returns {*}
577
+ */
578
+ function evaluate(val, context) {
579
+ if ($.isFunction(val)) {
580
+ var args = Array.prototype.slice.call(arguments, 2);
581
+ return val.apply(context, args);
582
+ }
583
+ return val;
584
+ }
585
+
586
+ function countResults(results) {
587
+ var count = 0;
588
+ $.each(results, function(i, item) {
589
+ if (item.children) {
590
+ count += countResults(item.children);
591
+ } else {
592
+ count++;
593
+ }
594
+ });
595
+ return count;
596
+ }
597
+
598
+ /**
599
+ * Default tokenizer. This function uses breaks the input on substring match of any string from the
600
+ * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those
601
+ * two options have to be defined in order for the tokenizer to work.
602
+ *
603
+ * @param input text user has typed so far or pasted into the search field
604
+ * @param selection currently selected choices
605
+ * @param selectCallback function(choice) callback tho add the choice to selection
606
+ * @param opts select2's opts
607
+ * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value
608
+ */
609
+ function defaultTokenizer(input, selection, selectCallback, opts) {
610
+ var original = input, // store the original so we can compare and know if we need to tell the search to update its text
611
+ dupe = false, // check for whether a token we extracted represents a duplicate selected choice
612
+ token, // token
613
+ index, // position at which the separator was found
614
+ i, l, // looping variables
615
+ separator; // the matched separator
616
+
617
+ if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;
618
+
619
+ while (true) {
620
+ index = -1;
621
+
622
+ for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {
623
+ separator = opts.tokenSeparators[i];
624
+ index = input.indexOf(separator);
625
+ if (index >= 0) break;
626
+ }
627
+
628
+ if (index < 0) break; // did not find any token separator in the input string, bail
629
+
630
+ token = input.substring(0, index);
631
+ input = input.substring(index + separator.length);
632
+
633
+ if (token.length > 0) {
634
+ token = opts.createSearchChoice.call(this, token, selection);
635
+ if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {
636
+ dupe = false;
637
+ for (i = 0, l = selection.length; i < l; i++) {
638
+ if (equal(opts.id(token), opts.id(selection[i]))) {
639
+ dupe = true; break;
640
+ }
641
+ }
642
+
643
+ if (!dupe) selectCallback(token);
644
+ }
645
+ }
646
+ }
647
+
648
+ if (original!==input) return input;
649
+ }
650
+
651
+ function cleanupJQueryElements() {
652
+ var self = this;
653
+
654
+ $.each(arguments, function (i, element) {
655
+ self[element].remove();
656
+ self[element] = null;
657
+ });
658
+ }
659
+
660
+ /**
661
+ * Creates a new class
662
+ *
663
+ * @param superClass
664
+ * @param methods
665
+ */
666
+ function clazz(SuperClass, methods) {
667
+ var constructor = function () {};
668
+ constructor.prototype = new SuperClass;
669
+ constructor.prototype.constructor = constructor;
670
+ constructor.prototype.parent = SuperClass.prototype;
671
+ constructor.prototype = $.extend(constructor.prototype, methods);
672
+ return constructor;
673
+ }
674
+
675
+ AbstractSelect2 = clazz(Object, {
676
+
677
+ // abstract
678
+ bind: function (func) {
679
+ var self = this;
680
+ return function () {
681
+ func.apply(self, arguments);
682
+ };
683
+ },
684
+
685
+ // abstract
686
+ init: function (opts) {
687
+ var results, search, resultsSelector = ".select2-results";
688
+
689
+ // prepare options
690
+ this.opts = opts = this.prepareOpts(opts);
691
+
692
+ this.id=opts.id;
693
+
694
+ // destroy if called on an existing component
695
+ if (opts.element.data("select2") !== undefined &&
696
+ opts.element.data("select2") !== null) {
697
+ opts.element.data("select2").destroy();
698
+ }
699
+
700
+ this.container = this.createContainer();
701
+
702
+ this.liveRegion = $("<span>", {
703
+ role: "status",
704
+ "aria-live": "polite"
705
+ })
706
+ .addClass("select2-hidden-accessible")
707
+ .appendTo(document.body);
708
+
709
+ this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid());
710
+ this.containerEventName= this.containerId
711
+ .replace(/([.])/g, '_')
712
+ .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
713
+ this.container.attr("id", this.containerId);
714
+
715
+ this.container.attr("title", opts.element.attr("title"));
716
+
717
+ this.body = $("body");
718
+
719
+ syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
720
+
721
+ this.container.attr("style", opts.element.attr("style"));
722
+ this.container.css(evaluate(opts.containerCss, this.opts.element));
723
+ this.container.addClass(evaluate(opts.containerCssClass, this.opts.element));
724
+
725
+ this.elementTabIndex = this.opts.element.attr("tabindex");
726
+
727
+ // swap container for the element
728
+ this.opts.element
729
+ .data("select2", this)
730
+ .attr("tabindex", "-1")
731
+ .before(this.container)
732
+ .on("click.select2", killEvent); // do not leak click events
733
+
734
+ this.container.data("select2", this);
735
+
736
+ this.dropdown = this.container.find(".select2-drop");
737
+
738
+ syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);
739
+
740
+ this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element));
741
+ this.dropdown.data("select2", this);
742
+ this.dropdown.on("click", killEvent);
743
+
744
+ this.results = results = this.container.find(resultsSelector);
745
+ this.search = search = this.container.find("input.select2-input");
746
+
747
+ this.queryCount = 0;
748
+ this.resultsPage = 0;
749
+ this.context = null;
750
+
751
+ // initialize the container
752
+ this.initContainer();
753
+
754
+ this.container.on("click", killEvent);
755
+
756
+ installFilteredMouseMove(this.results);
757
+
758
+ this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent));
759
+ this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) {
760
+ this._touchEvent = true;
761
+ this.highlightUnderEvent(event);
762
+ }));
763
+ this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved));
764
+ this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved));
765
+
766
+ // Waiting for a click event on touch devices to select option and hide dropdown
767
+ // otherwise click will be triggered on an underlying element
768
+ this.dropdown.on('click', this.bind(function (event) {
769
+ if (this._touchEvent) {
770
+ this._touchEvent = false;
771
+ this.selectHighlighted();
772
+ }
773
+ }));
774
+
775
+ installDebouncedScroll(80, this.results);
776
+ this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));
777
+
778
+ // do not propagate change event from the search field out of the component
779
+ $(this.container).on("change", ".select2-input", function(e) {e.stopPropagation();});
780
+ $(this.dropdown).on("change", ".select2-input", function(e) {e.stopPropagation();});
781
+
782
+ // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel
783
+ if ($.fn.mousewheel) {
784
+ results.mousewheel(function (e, delta, deltaX, deltaY) {
785
+ var top = results.scrollTop();
786
+ if (deltaY > 0 && top - deltaY <= 0) {
787
+ results.scrollTop(0);
788
+ killEvent(e);
789
+ } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {
790
+ results.scrollTop(results.get(0).scrollHeight - results.height());
791
+ killEvent(e);
792
+ }
793
+ });
794
+ }
795
+
796
+ installKeyUpChangeEvent(search);
797
+ search.on("keyup-change input paste", this.bind(this.updateResults));
798
+ search.on("focus", function () { search.addClass("select2-focused"); });
799
+ search.on("blur", function () { search.removeClass("select2-focused");});
800
+
801
+ this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) {
802
+ if ($(e.target).closest(".select2-result-selectable").length > 0) {
803
+ this.highlightUnderEvent(e);
804
+ this.selectHighlighted(e);
805
+ }
806
+ }));
807
+
808
+ // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening
809
+ // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's
810
+ // dom it will trigger the popup close, which is not what we want
811
+ // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal.
812
+ this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e) { e.stopPropagation(); });
813
+
814
+ this.nextSearchTerm = undefined;
815
+
816
+ if ($.isFunction(this.opts.initSelection)) {
817
+ // initialize selection based on the current value of the source element
818
+ this.initSelection();
819
+
820
+ // if the user has provided a function that can set selection based on the value of the source element
821
+ // we monitor the change event on the element and trigger it, allowing for two way synchronization
822
+ this.monitorSource();
823
+ }
824
+
825
+ if (opts.maximumInputLength !== null) {
826
+ this.search.attr("maxlength", opts.maximumInputLength);
827
+ }
828
+
829
+ var disabled = opts.element.prop("disabled");
830
+ if (disabled === undefined) disabled = false;
831
+ this.enable(!disabled);
832
+
833
+ var readonly = opts.element.prop("readonly");
834
+ if (readonly === undefined) readonly = false;
835
+ this.readonly(readonly);
836
+
837
+ // Calculate size of scrollbar
838
+ scrollBarDimensions = scrollBarDimensions || measureScrollbar();
839
+
840
+ this.autofocus = opts.element.prop("autofocus");
841
+ opts.element.prop("autofocus", false);
842
+ if (this.autofocus) this.focus();
843
+
844
+ this.search.attr("placeholder", opts.searchInputPlaceholder);
845
+ },
846
+
847
+ // abstract
848
+ destroy: function () {
849
+ var element=this.opts.element, select2 = element.data("select2"), self = this;
850
+
851
+ this.close();
852
+
853
+ if (element.length && element[0].detachEvent) {
854
+ element.each(function () {
855
+ this.detachEvent("onpropertychange", self._sync);
856
+ });
857
+ }
858
+ if (this.propertyObserver) {
859
+ this.propertyObserver.disconnect();
860
+ this.propertyObserver = null;
861
+ }
862
+ this._sync = null;
863
+
864
+ if (select2 !== undefined) {
865
+ select2.container.remove();
866
+ select2.liveRegion.remove();
867
+ select2.dropdown.remove();
868
+ element
869
+ .removeClass("select2-offscreen")
870
+ .removeData("select2")
871
+ .off(".select2")
872
+ .prop("autofocus", this.autofocus || false);
873
+ if (this.elementTabIndex) {
874
+ element.attr({tabindex: this.elementTabIndex});
875
+ } else {
876
+ element.removeAttr("tabindex");
877
+ }
878
+ element.show();
879
+ }
880
+
881
+ cleanupJQueryElements.call(this,
882
+ "container",
883
+ "liveRegion",
884
+ "dropdown",
885
+ "results",
886
+ "search"
887
+ );
888
+ },
889
+
890
+ // abstract
891
+ optionToData: function(element) {
892
+ if (element.is("option")) {
893
+ return {
894
+ id:element.prop("value"),
895
+ text:element.text(),
896
+ element: element.get(),
897
+ css: element.attr("class"),
898
+ disabled: element.prop("disabled"),
899
+ locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true)
900
+ };
901
+ } else if (element.is("optgroup")) {
902
+ return {
903
+ text:element.attr("label"),
904
+ children:[],
905
+ element: element.get(),
906
+ css: element.attr("class")
907
+ };
908
+ }
909
+ },
910
+
911
+ // abstract
912
+ prepareOpts: function (opts) {
913
+ var element, select, idKey, ajaxUrl, self = this;
914
+
915
+ element = opts.element;
916
+
917
+ if (element.get(0).tagName.toLowerCase() === "select") {
918
+ this.select = select = opts.element;
919
+ }
920
+
921
+ if (select) {
922
+ // these options are not allowed when attached to a select because they are picked up off the element itself
923
+ $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () {
924
+ if (this in opts) {
925
+ throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element.");
926
+ }
927
+ });
928
+ }
929
+
930
+ opts = $.extend({}, {
931
+ populateResults: function(container, results, query) {
932
+ var populate, id=this.opts.id, liveRegion=this.liveRegion;
933
+
934
+ populate=function(results, container, depth) {
935
+
936
+ var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;
937
+
938
+ results = opts.sortResults(results, container, query);
939
+
940
+ // collect the created nodes for bulk append
941
+ var nodes = [];
942
+ for (i = 0, l = results.length; i < l; i = i + 1) {
943
+
944
+ result=results[i];
945
+
946
+ disabled = (result.disabled === true);
947
+ selectable = (!disabled) && (id(result) !== undefined);
948
+
949
+ compound=result.children && result.children.length > 0;
950
+
951
+ node=$("<li></li>");
952
+ node.addClass("select2-results-dept-"+depth);
953
+ node.addClass("select2-result");
954
+ node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable");
955
+ if (disabled) { node.addClass("select2-disabled"); }
956
+ if (compound) { node.addClass("select2-result-with-children"); }
957
+ node.addClass(self.opts.formatResultCssClass(result));
958
+ node.attr("role", "presentation");
959
+
960
+ label=$(document.createElement("div"));
961
+ label.addClass("select2-result-label");
962
+ label.attr("id", "select2-result-label-" + nextUid());
963
+ label.attr("role", "option");
964
+
965
+ formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);
966
+ if (formatted!==undefined) {
967
+ label.html(formatted);
968
+ node.append(label);
969
+ }
970
+
971
+
972
+ if (compound) {
973
+
974
+ innerContainer=$("<ul></ul>");
975
+ innerContainer.addClass("select2-result-sub");
976
+ populate(result.children, innerContainer, depth+1);
977
+ node.append(innerContainer);
978
+ }
979
+
980
+ node.data("select2-data", result);
981
+ nodes.push(node[0]);
982
+ }
983
+
984
+ // bulk append the created nodes
985
+ container.append(nodes);
986
+ liveRegion.text(opts.formatMatches(results.length));
987
+ };
988
+
989
+ populate(results, container, 0);
990
+ }
991
+ }, $.fn.select2.defaults, opts);
992
+
993
+ if (typeof(opts.id) !== "function") {
994
+ idKey = opts.id;
995
+ opts.id = function (e) { return e[idKey]; };
996
+ }
997
+
998
+ if ($.isArray(opts.element.data("select2Tags"))) {
999
+ if ("tags" in opts) {
1000
+ throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + opts.element.attr("id");
1001
+ }
1002
+ opts.tags=opts.element.data("select2Tags");
1003
+ }
1004
+
1005
+ if (select) {
1006
+ opts.query = this.bind(function (query) {
1007
+ var data = { results: [], more: false },
1008
+ term = query.term,
1009
+ children, placeholderOption, process;
1010
+
1011
+ process=function(element, collection) {
1012
+ var group;
1013
+ if (element.is("option")) {
1014
+ if (query.matcher(term, element.text(), element)) {
1015
+ collection.push(self.optionToData(element));
1016
+ }
1017
+ } else if (element.is("optgroup")) {
1018
+ group=self.optionToData(element);
1019
+ element.children().each2(function(i, elm) { process(elm, group.children); });
1020
+ if (group.children.length>0) {
1021
+ collection.push(group);
1022
+ }
1023
+ }
1024
+ };
1025
+
1026
+ children=element.children();
1027
+
1028
+ // ignore the placeholder option if there is one
1029
+ if (this.getPlaceholder() !== undefined && children.length > 0) {
1030
+ placeholderOption = this.getPlaceholderOption();
1031
+ if (placeholderOption) {
1032
+ children=children.not(placeholderOption);
1033
+ }
1034
+ }
1035
+
1036
+ children.each2(function(i, elm) { process(elm, data.results); });
1037
+
1038
+ query.callback(data);
1039
+ });
1040
+ // this is needed because inside val() we construct choices from options and their id is hardcoded
1041
+ opts.id=function(e) { return e.id; };
1042
+ } else {
1043
+ if (!("query" in opts)) {
1044
+
1045
+ if ("ajax" in opts) {
1046
+ ajaxUrl = opts.element.data("ajax-url");
1047
+ if (ajaxUrl && ajaxUrl.length > 0) {
1048
+ opts.ajax.url = ajaxUrl;
1049
+ }
1050
+ opts.query = ajax.call(opts.element, opts.ajax);
1051
+ } else if ("data" in opts) {
1052
+ opts.query = local(opts.data);
1053
+ } else if ("tags" in opts) {
1054
+ opts.query = tags(opts.tags);
1055
+ if (opts.createSearchChoice === undefined) {
1056
+ opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; };
1057
+ }
1058
+ if (opts.initSelection === undefined) {
1059
+ opts.initSelection = function (element, callback) {
1060
+ var data = [];
1061
+ $(splitVal(element.val(), opts.separator)).each(function () {
1062
+ var obj = { id: this, text: this },
1063
+ tags = opts.tags;
1064
+ if ($.isFunction(tags)) tags=tags();
1065
+ $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } });
1066
+ data.push(obj);
1067
+ });
1068
+
1069
+ callback(data);
1070
+ };
1071
+ }
1072
+ }
1073
+ }
1074
+ }
1075
+ if (typeof(opts.query) !== "function") {
1076
+ throw "query function not defined for Select2 " + opts.element.attr("id");
1077
+ }
1078
+
1079
+ if (opts.createSearchChoicePosition === 'top') {
1080
+ opts.createSearchChoicePosition = function(list, item) { list.unshift(item); };
1081
+ }
1082
+ else if (opts.createSearchChoicePosition === 'bottom') {
1083
+ opts.createSearchChoicePosition = function(list, item) { list.push(item); };
1084
+ }
1085
+ else if (typeof(opts.createSearchChoicePosition) !== "function") {
1086
+ throw "invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";
1087
+ }
1088
+
1089
+ return opts;
1090
+ },
1091
+
1092
+ /**
1093
+ * Monitor the original element for changes and update select2 accordingly
1094
+ */
1095
+ // abstract
1096
+ monitorSource: function () {
1097
+ var el = this.opts.element, observer, self = this;
1098
+
1099
+ el.on("change.select2", this.bind(function (e) {
1100
+ if (this.opts.element.data("select2-change-triggered") !== true) {
1101
+ this.initSelection();
1102
+ }
1103
+ }));
1104
+
1105
+ this._sync = this.bind(function () {
1106
+
1107
+ // sync enabled state
1108
+ var disabled = el.prop("disabled");
1109
+ if (disabled === undefined) disabled = false;
1110
+ this.enable(!disabled);
1111
+
1112
+ var readonly = el.prop("readonly");
1113
+ if (readonly === undefined) readonly = false;
1114
+ this.readonly(readonly);
1115
+
1116
+ syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
1117
+ this.container.addClass(evaluate(this.opts.containerCssClass, this.opts.element));
1118
+
1119
+ syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);
1120
+ this.dropdown.addClass(evaluate(this.opts.dropdownCssClass, this.opts.element));
1121
+
1122
+ });
1123
+
1124
+ // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)
1125
+ if (el.length && el[0].attachEvent) {
1126
+ el.each(function() {
1127
+ this.attachEvent("onpropertychange", self._sync);
1128
+ });
1129
+ }
1130
+
1131
+ // safari, chrome, firefox, IE11
1132
+ observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;
1133
+ if (observer !== undefined) {
1134
+ if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }
1135
+ this.propertyObserver = new observer(function (mutations) {
1136
+ $.each(mutations, self._sync);
1137
+ });
1138
+ this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });
1139
+ }
1140
+ },
1141
+
1142
+ // abstract
1143
+ triggerSelect: function(data) {
1144
+ var evt = $.Event("select2-selecting", { val: this.id(data), object: data, choice: data });
1145
+ this.opts.element.trigger(evt);
1146
+ return !evt.isDefaultPrevented();
1147
+ },
1148
+
1149
+ /**
1150
+ * Triggers the change event on the source element
1151
+ */
1152
+ // abstract
1153
+ triggerChange: function (details) {
1154
+
1155
+ details = details || {};
1156
+ details= $.extend({}, details, { type: "change", val: this.val() });
1157
+ // prevents recursive triggering
1158
+ this.opts.element.data("select2-change-triggered", true);
1159
+ this.opts.element.trigger(details);
1160
+ this.opts.element.data("select2-change-triggered", false);
1161
+
1162
+ // some validation frameworks ignore the change event and listen instead to keyup, click for selects
1163
+ // so here we trigger the click event manually
1164
+ this.opts.element.click();
1165
+
1166
+ // ValidationEngine ignores the change event and listens instead to blur
1167
+ // so here we trigger the blur event manually if so desired
1168
+ if (this.opts.blurOnChange)
1169
+ this.opts.element.blur();
1170
+ },
1171
+
1172
+ //abstract
1173
+ isInterfaceEnabled: function()
1174
+ {
1175
+ return this.enabledInterface === true;
1176
+ },
1177
+
1178
+ // abstract
1179
+ enableInterface: function() {
1180
+ var enabled = this._enabled && !this._readonly,
1181
+ disabled = !enabled;
1182
+
1183
+ if (enabled === this.enabledInterface) return false;
1184
+
1185
+ this.container.toggleClass("select2-container-disabled", disabled);
1186
+ this.close();
1187
+ this.enabledInterface = enabled;
1188
+
1189
+ return true;
1190
+ },
1191
+
1192
+ // abstract
1193
+ enable: function(enabled) {
1194
+ if (enabled === undefined) enabled = true;
1195
+ if (this._enabled === enabled) return;
1196
+ this._enabled = enabled;
1197
+
1198
+ this.opts.element.prop("disabled", !enabled);
1199
+ this.enableInterface();
1200
+ },
1201
+
1202
+ // abstract
1203
+ disable: function() {
1204
+ this.enable(false);
1205
+ },
1206
+
1207
+ // abstract
1208
+ readonly: function(enabled) {
1209
+ if (enabled === undefined) enabled = false;
1210
+ if (this._readonly === enabled) return;
1211
+ this._readonly = enabled;
1212
+
1213
+ this.opts.element.prop("readonly", enabled);
1214
+ this.enableInterface();
1215
+ },
1216
+
1217
+ // abstract
1218
+ opened: function () {
1219
+ return (this.container) ? this.container.hasClass("select2-dropdown-open") : false;
1220
+ },
1221
+
1222
+ // abstract
1223
+ positionDropdown: function() {
1224
+ var $dropdown = this.dropdown,
1225
+ offset = this.container.offset(),
1226
+ height = this.container.outerHeight(false),
1227
+ width = this.container.outerWidth(false),
1228
+ dropHeight = $dropdown.outerHeight(false),
1229
+ $window = $(window),
1230
+ windowWidth = $window.width(),
1231
+ windowHeight = $window.height(),
1232
+ viewPortRight = $window.scrollLeft() + windowWidth,
1233
+ viewportBottom = $window.scrollTop() + windowHeight,
1234
+ dropTop = offset.top + height,
1235
+ dropLeft = offset.left,
1236
+ enoughRoomBelow = dropTop + dropHeight <= viewportBottom,
1237
+ enoughRoomAbove = (offset.top - dropHeight) >= $window.scrollTop(),
1238
+ dropWidth = $dropdown.outerWidth(false),
1239
+ enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,
1240
+ aboveNow = $dropdown.hasClass("select2-drop-above"),
1241
+ bodyOffset,
1242
+ above,
1243
+ changeDirection,
1244
+ css,
1245
+ resultsListNode;
1246
+
1247
+ // always prefer the current above/below alignment, unless there is not enough room
1248
+ if (aboveNow) {
1249
+ above = true;
1250
+ if (!enoughRoomAbove && enoughRoomBelow) {
1251
+ changeDirection = true;
1252
+ above = false;
1253
+ }
1254
+ } else {
1255
+ above = false;
1256
+ if (!enoughRoomBelow && enoughRoomAbove) {
1257
+ changeDirection = true;
1258
+ above = true;
1259
+ }
1260
+ }
1261
+
1262
+ //if we are changing direction we need to get positions when dropdown is hidden;
1263
+ if (changeDirection) {
1264
+ $dropdown.hide();
1265
+ offset = this.container.offset();
1266
+ height = this.container.outerHeight(false);
1267
+ width = this.container.outerWidth(false);
1268
+ dropHeight = $dropdown.outerHeight(false);
1269
+ viewPortRight = $window.scrollLeft() + windowWidth;
1270
+ viewportBottom = $window.scrollTop() + windowHeight;
1271
+ dropTop = offset.top + height;
1272
+ dropLeft = offset.left;
1273
+ dropWidth = $dropdown.outerWidth(false);
1274
+ enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1275
+ $dropdown.show();
1276
+
1277
+ // fix so the cursor does not move to the left within the search-textbox in IE
1278
+ this.focusSearch();
1279
+ }
1280
+
1281
+ if (this.opts.dropdownAutoWidth) {
1282
+ resultsListNode = $('.select2-results', $dropdown)[0];
1283
+ $dropdown.addClass('select2-drop-auto-width');
1284
+ $dropdown.css('width', '');
1285
+ // Add scrollbar width to dropdown if vertical scrollbar is present
1286
+ dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);
1287
+ dropWidth > width ? width = dropWidth : dropWidth = width;
1288
+ dropHeight = $dropdown.outerHeight(false);
1289
+ enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1290
+ }
1291
+ else {
1292
+ this.container.removeClass('select2-drop-auto-width');
1293
+ }
1294
+
1295
+ //console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow);
1296
+ //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body.scrollTop(), "enough?", enoughRoomAbove);
1297
+
1298
+ // fix positioning when body has an offset and is not position: static
1299
+ if (this.body.css('position') !== 'static') {
1300
+ bodyOffset = this.body.offset();
1301
+ dropTop -= bodyOffset.top;
1302
+ dropLeft -= bodyOffset.left;
1303
+ }
1304
+
1305
+ if (!enoughRoomOnRight) {
1306
+ dropLeft = offset.left + this.container.outerWidth(false) - dropWidth;
1307
+ }
1308
+
1309
+ css = {
1310
+ left: dropLeft,
1311
+ width: width
1312
+ };
1313
+
1314
+ if (above) {
1315
+ css.top = offset.top - dropHeight;
1316
+ css.bottom = 'auto';
1317
+ this.container.addClass("select2-drop-above");
1318
+ $dropdown.addClass("select2-drop-above");
1319
+ }
1320
+ else {
1321
+ css.top = dropTop;
1322
+ css.bottom = 'auto';
1323
+ this.container.removeClass("select2-drop-above");
1324
+ $dropdown.removeClass("select2-drop-above");
1325
+ }
1326
+ css = $.extend(css, evaluate(this.opts.dropdownCss, this.opts.element));
1327
+
1328
+ $dropdown.css(css);
1329
+ },
1330
+
1331
+ // abstract
1332
+ shouldOpen: function() {
1333
+ var event;
1334
+
1335
+ if (this.opened()) return false;
1336
+
1337
+ if (this._enabled === false || this._readonly === true) return false;
1338
+
1339
+ event = $.Event("select2-opening");
1340
+ this.opts.element.trigger(event);
1341
+ return !event.isDefaultPrevented();
1342
+ },
1343
+
1344
+ // abstract
1345
+ clearDropdownAlignmentPreference: function() {
1346
+ // clear the classes used to figure out the preference of where the dropdown should be opened
1347
+ this.container.removeClass("select2-drop-above");
1348
+ this.dropdown.removeClass("select2-drop-above");
1349
+ },
1350
+
1351
+ /**
1352
+ * Opens the dropdown
1353
+ *
1354
+ * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,
1355
+ * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().
1356
+ */
1357
+ // abstract
1358
+ open: function () {
1359
+
1360
+ if (!this.shouldOpen()) return false;
1361
+
1362
+ this.opening();
1363
+
1364
+ // Only bind the document mousemove when the dropdown is visible
1365
+ $document.on("mousemove.select2Event", function (e) {
1366
+ lastMousePosition.x = e.pageX;
1367
+ lastMousePosition.y = e.pageY;
1368
+ });
1369
+
1370
+ return true;
1371
+ },
1372
+
1373
+ /**
1374
+ * Performs the opening of the dropdown
1375
+ */
1376
+ // abstract
1377
+ opening: function() {
1378
+ var cid = this.containerEventName,
1379
+ scroll = "scroll." + cid,
1380
+ resize = "resize."+cid,
1381
+ orient = "orientationchange."+cid,
1382
+ mask;
1383
+
1384
+ this.container.addClass("select2-dropdown-open").addClass("select2-container-active");
1385
+
1386
+ this.clearDropdownAlignmentPreference();
1387
+
1388
+ if(this.dropdown[0] !== this.body.children().last()[0]) {
1389
+ this.dropdown.detach().appendTo(this.body);
1390
+ }
1391
+
1392
+ // create the dropdown mask if doesn't already exist
1393
+ mask = $("#select2-drop-mask");
1394
+ if (mask.length == 0) {
1395
+ mask = $(document.createElement("div"));
1396
+ mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");
1397
+ mask.hide();
1398
+ mask.appendTo(this.body);
1399
+ mask.on("mousedown touchstart click", function (e) {
1400
+ // Prevent IE from generating a click event on the body
1401
+ reinsertElement(mask);
1402
+
1403
+ var dropdown = $("#select2-drop"), self;
1404
+ if (dropdown.length > 0) {
1405
+ self=dropdown.data("select2");
1406
+ if (self.opts.selectOnBlur) {
1407
+ self.selectHighlighted({noFocus: true});
1408
+ }
1409
+ self.close();
1410
+ e.preventDefault();
1411
+ e.stopPropagation();
1412
+ }
1413
+ });
1414
+ }
1415
+
1416
+ // ensure the mask is always right before the dropdown
1417
+ if (this.dropdown.prev()[0] !== mask[0]) {
1418
+ this.dropdown.before(mask);
1419
+ }
1420
+
1421
+ // move the global id to the correct dropdown
1422
+ $("#select2-drop").removeAttr("id");
1423
+ this.dropdown.attr("id", "select2-drop");
1424
+
1425
+ // show the elements
1426
+ mask.show();
1427
+
1428
+ this.positionDropdown();
1429
+ this.dropdown.show();
1430
+ this.positionDropdown();
1431
+
1432
+ this.dropdown.addClass("select2-drop-active");
1433
+
1434
+ // attach listeners to events that can change the position of the container and thus require
1435
+ // the position of the dropdown to be updated as well so it does not come unglued from the container
1436
+ var that = this;
1437
+ this.container.parents().add(window).each(function () {
1438
+ $(this).on(resize+" "+scroll+" "+orient, function (e) {
1439
+ if (that.opened()) that.positionDropdown();
1440
+ });
1441
+ });
1442
+
1443
+
1444
+ },
1445
+
1446
+ // abstract
1447
+ close: function () {
1448
+ if (!this.opened()) return;
1449
+
1450
+ var cid = this.containerEventName,
1451
+ scroll = "scroll." + cid,
1452
+ resize = "resize."+cid,
1453
+ orient = "orientationchange."+cid;
1454
+
1455
+ // unbind event listeners
1456
+ this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });
1457
+
1458
+ this.clearDropdownAlignmentPreference();
1459
+
1460
+ $("#select2-drop-mask").hide();
1461
+ this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id
1462
+ this.dropdown.hide();
1463
+ this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active");
1464
+ this.results.empty();
1465
+
1466
+ // Now that the dropdown is closed, unbind the global document mousemove event
1467
+ $document.off("mousemove.select2Event");
1468
+
1469
+ this.clearSearch();
1470
+ this.search.removeClass("select2-active");
1471
+ this.opts.element.trigger($.Event("select2-close"));
1472
+ },
1473
+
1474
+ /**
1475
+ * Opens control, sets input value, and updates results.
1476
+ */
1477
+ // abstract
1478
+ externalSearch: function (term) {
1479
+ this.open();
1480
+ this.search.val(term);
1481
+ this.updateResults(false);
1482
+ },
1483
+
1484
+ // abstract
1485
+ clearSearch: function () {
1486
+
1487
+ },
1488
+
1489
+ //abstract
1490
+ getMaximumSelectionSize: function() {
1491
+ return evaluate(this.opts.maximumSelectionSize, this.opts.element);
1492
+ },
1493
+
1494
+ // abstract
1495
+ ensureHighlightVisible: function () {
1496
+ var results = this.results, children, index, child, hb, rb, y, more, topOffset;
1497
+
1498
+ index = this.highlight();
1499
+
1500
+ if (index < 0) return;
1501
+
1502
+ if (index == 0) {
1503
+
1504
+ // if the first element is highlighted scroll all the way to the top,
1505
+ // that way any unselectable headers above it will also be scrolled
1506
+ // into view
1507
+
1508
+ results.scrollTop(0);
1509
+ return;
1510
+ }
1511
+
1512
+ children = this.findHighlightableChoices().find('.select2-result-label');
1513
+
1514
+ child = $(children[index]);
1515
+
1516
+ topOffset = (child.offset() || {}).top || 0;
1517
+
1518
+ hb = topOffset + child.outerHeight(true);
1519
+
1520
+ // if this is the last child lets also make sure select2-more-results is visible
1521
+ if (index === children.length - 1) {
1522
+ more = results.find("li.select2-more-results");
1523
+ if (more.length > 0) {
1524
+ hb = more.offset().top + more.outerHeight(true);
1525
+ }
1526
+ }
1527
+
1528
+ rb = results.offset().top + results.outerHeight(true);
1529
+ if (hb > rb) {
1530
+ results.scrollTop(results.scrollTop() + (hb - rb));
1531
+ }
1532
+ y = topOffset - results.offset().top;
1533
+
1534
+ // make sure the top of the element is visible
1535
+ if (y < 0 && child.css('display') != 'none' ) {
1536
+ results.scrollTop(results.scrollTop() + y); // y is negative
1537
+ }
1538
+ },
1539
+
1540
+ // abstract
1541
+ findHighlightableChoices: function() {
1542
+ return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)");
1543
+ },
1544
+
1545
+ // abstract
1546
+ moveHighlight: function (delta) {
1547
+ var choices = this.findHighlightableChoices(),
1548
+ index = this.highlight();
1549
+
1550
+ while (index > -1 && index < choices.length) {
1551
+ index += delta;
1552
+ var choice = $(choices[index]);
1553
+ if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {
1554
+ this.highlight(index);
1555
+ break;
1556
+ }
1557
+ }
1558
+ },
1559
+
1560
+ // abstract
1561
+ highlight: function (index) {
1562
+ var choices = this.findHighlightableChoices(),
1563
+ choice,
1564
+ data;
1565
+
1566
+ if (arguments.length === 0) {
1567
+ return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
1568
+ }
1569
+
1570
+ if (index >= choices.length) index = choices.length - 1;
1571
+ if (index < 0) index = 0;
1572
+
1573
+ this.removeHighlight();
1574
+
1575
+ choice = $(choices[index]);
1576
+ choice.addClass("select2-highlighted");
1577
+
1578
+ // ensure assistive technology can determine the active choice
1579
+ this.search.attr("aria-activedescendant", choice.find(".select2-result-label").attr("id"));
1580
+
1581
+ this.ensureHighlightVisible();
1582
+
1583
+ this.liveRegion.text(choice.text());
1584
+
1585
+ data = choice.data("select2-data");
1586
+ if (data) {
1587
+ this.opts.element.trigger({ type: "select2-highlight", val: this.id(data), choice: data });
1588
+ }
1589
+ },
1590
+
1591
+ removeHighlight: function() {
1592
+ this.results.find(".select2-highlighted").removeClass("select2-highlighted");
1593
+ },
1594
+
1595
+ touchMoved: function() {
1596
+ this._touchMoved = true;
1597
+ },
1598
+
1599
+ clearTouchMoved: function() {
1600
+ this._touchMoved = false;
1601
+ },
1602
+
1603
+ // abstract
1604
+ countSelectableResults: function() {
1605
+ return this.findHighlightableChoices().length;
1606
+ },
1607
+
1608
+ // abstract
1609
+ highlightUnderEvent: function (event) {
1610
+ var el = $(event.target).closest(".select2-result-selectable");
1611
+ if (el.length > 0 && !el.is(".select2-highlighted")) {
1612
+ var choices = this.findHighlightableChoices();
1613
+ this.highlight(choices.index(el));
1614
+ } else if (el.length == 0) {
1615
+ // if we are over an unselectable item remove all highlights
1616
+ this.removeHighlight();
1617
+ }
1618
+ },
1619
+
1620
+ // abstract
1621
+ loadMoreIfNeeded: function () {
1622
+ var results = this.results,
1623
+ more = results.find("li.select2-more-results"),
1624
+ below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible
1625
+ page = this.resultsPage + 1,
1626
+ self=this,
1627
+ term=this.search.val(),
1628
+ context=this.context;
1629
+
1630
+ if (more.length === 0) return;
1631
+ below = more.offset().top - results.offset().top - results.height();
1632
+
1633
+ if (below <= this.opts.loadMorePadding) {
1634
+ more.addClass("select2-active");
1635
+ this.opts.query({
1636
+ element: this.opts.element,
1637
+ term: term,
1638
+ page: page,
1639
+ context: context,
1640
+ matcher: this.opts.matcher,
1641
+ callback: this.bind(function (data) {
1642
+
1643
+ // ignore a response if the select2 has been closed before it was received
1644
+ if (!self.opened()) return;
1645
+
1646
+
1647
+ self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});
1648
+ self.postprocessResults(data, false, false);
1649
+
1650
+ if (data.more===true) {
1651
+ more.detach().appendTo(results).text(evaluate(self.opts.formatLoadMore, self.opts.element, page+1));
1652
+ window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);
1653
+ } else {
1654
+ more.remove();
1655
+ }
1656
+ self.positionDropdown();
1657
+ self.resultsPage = page;
1658
+ self.context = data.context;
1659
+ this.opts.element.trigger({ type: "select2-loaded", items: data });
1660
+ })});
1661
+ }
1662
+ },
1663
+
1664
+ /**
1665
+ * Default tokenizer function which does nothing
1666
+ */
1667
+ tokenize: function() {
1668
+
1669
+ },
1670
+
1671
+ /**
1672
+ * @param initial whether or not this is the call to this method right after the dropdown has been opened
1673
+ */
1674
+ // abstract
1675
+ updateResults: function (initial) {
1676
+ var search = this.search,
1677
+ results = this.results,
1678
+ opts = this.opts,
1679
+ data,
1680
+ self = this,
1681
+ input,
1682
+ term = search.val(),
1683
+ lastTerm = $.data(this.container, "select2-last-term"),
1684
+ // sequence number used to drop out-of-order responses
1685
+ queryNumber;
1686
+
1687
+ // prevent duplicate queries against the same term
1688
+ if (initial !== true && lastTerm && equal(term, lastTerm)) return;
1689
+
1690
+ $.data(this.container, "select2-last-term", term);
1691
+
1692
+ // if the search is currently hidden we do not alter the results
1693
+ if (initial !== true && (this.showSearchInput === false || !this.opened())) {
1694
+ return;
1695
+ }
1696
+
1697
+ function postRender() {
1698
+ search.removeClass("select2-active");
1699
+ self.positionDropdown();
1700
+ if (results.find('.select2-no-results,.select2-selection-limit,.select2-searching').length) {
1701
+ self.liveRegion.text(results.text());
1702
+ }
1703
+ else {
1704
+ self.liveRegion.text(self.opts.formatMatches(results.find('.select2-result-selectable').length));
1705
+ }
1706
+ }
1707
+
1708
+ function render(html) {
1709
+ results.html(html);
1710
+ postRender();
1711
+ }
1712
+
1713
+ queryNumber = ++this.queryCount;
1714
+
1715
+ var maxSelSize = this.getMaximumSelectionSize();
1716
+ if (maxSelSize >=1) {
1717
+ data = this.data();
1718
+ if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) {
1719
+ render("<li class='select2-selection-limit'>" + evaluate(opts.formatSelectionTooBig, opts.element, maxSelSize) + "</li>");
1720
+ return;
1721
+ }
1722
+ }
1723
+
1724
+ if (search.val().length < opts.minimumInputLength) {
1725
+ if (checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) {
1726
+ render("<li class='select2-no-results'>" + evaluate(opts.formatInputTooShort, opts.element, search.val(), opts.minimumInputLength) + "</li>");
1727
+ } else {
1728
+ render("");
1729
+ }
1730
+ if (initial && this.showSearch) this.showSearch(true);
1731
+ return;
1732
+ }
1733
+
1734
+ if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {
1735
+ if (checkFormatter(opts.formatInputTooLong, "formatInputTooLong")) {
1736
+ render("<li class='select2-no-results'>" + evaluate(opts.formatInputTooLong, opts.element, search.val(), opts.maximumInputLength) + "</li>");
1737
+ } else {
1738
+ render("");
1739
+ }
1740
+ return;
1741
+ }
1742
+
1743
+ if (opts.formatSearching && this.findHighlightableChoices().length === 0) {
1744
+ render("<li class='select2-searching'>" + evaluate(opts.formatSearching, opts.element) + "</li>");
1745
+ }
1746
+
1747
+ search.addClass("select2-active");
1748
+
1749
+ this.removeHighlight();
1750
+
1751
+ // give the tokenizer a chance to pre-process the input
1752
+ input = this.tokenize();
1753
+ if (input != undefined && input != null) {
1754
+ search.val(input);
1755
+ }
1756
+
1757
+ this.resultsPage = 1;
1758
+
1759
+ opts.query({
1760
+ element: opts.element,
1761
+ term: search.val(),
1762
+ page: this.resultsPage,
1763
+ context: null,
1764
+ matcher: opts.matcher,
1765
+ callback: this.bind(function (data) {
1766
+ var def; // default choice
1767
+
1768
+ // ignore old responses
1769
+ if (queryNumber != this.queryCount) {
1770
+ return;
1771
+ }
1772
+
1773
+ // ignore a response if the select2 has been closed before it was received
1774
+ if (!this.opened()) {
1775
+ this.search.removeClass("select2-active");
1776
+ return;
1777
+ }
1778
+
1779
+ // handle ajax error
1780
+ if(data.hasError !== undefined && checkFormatter(opts.formatAjaxError, "formatAjaxError")) {
1781
+ render("<li class='select2-ajax-error'>" + evaluate(opts.formatAjaxError, opts.element, data.jqXHR, data.textStatus, data.errorThrown) + "</li>");
1782
+ return;
1783
+ }
1784
+
1785
+ // save context, if any
1786
+ this.context = (data.context===undefined) ? null : data.context;
1787
+ // create a default choice and prepend it to the list
1788
+ if (this.opts.createSearchChoice && search.val() !== "") {
1789
+ def = this.opts.createSearchChoice.call(self, search.val(), data.results);
1790
+ if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {
1791
+ if ($(data.results).filter(
1792
+ function () {
1793
+ return equal(self.id(this), self.id(def));
1794
+ }).length === 0) {
1795
+ this.opts.createSearchChoicePosition(data.results, def);
1796
+ }
1797
+ }
1798
+ }
1799
+
1800
+ if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) {
1801
+ render("<li class='select2-no-results'>" + evaluate(opts.formatNoMatches, opts.element, search.val()) + "</li>");
1802
+ return;
1803
+ }
1804
+
1805
+ results.empty();
1806
+ self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});
1807
+
1808
+ if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) {
1809
+ results.append("<li class='select2-more-results'>" + opts.escapeMarkup(evaluate(opts.formatLoadMore, opts.element, this.resultsPage)) + "</li>");
1810
+ window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);
1811
+ }
1812
+
1813
+ this.postprocessResults(data, initial);
1814
+
1815
+ postRender();
1816
+
1817
+ this.opts.element.trigger({ type: "select2-loaded", items: data });
1818
+ })});
1819
+ },
1820
+
1821
+ // abstract
1822
+ cancel: function () {
1823
+ this.close();
1824
+ },
1825
+
1826
+ // abstract
1827
+ blur: function () {
1828
+ // if selectOnBlur == true, select the currently highlighted option
1829
+ if (this.opts.selectOnBlur)
1830
+ this.selectHighlighted({noFocus: true});
1831
+
1832
+ this.close();
1833
+ this.container.removeClass("select2-container-active");
1834
+ // synonymous to .is(':focus'), which is available in jquery >= 1.6
1835
+ if (this.search[0] === document.activeElement) { this.search.blur(); }
1836
+ this.clearSearch();
1837
+ this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
1838
+ },
1839
+
1840
+ // abstract
1841
+ focusSearch: function () {
1842
+ focus(this.search);
1843
+ },
1844
+
1845
+ // abstract
1846
+ selectHighlighted: function (options) {
1847
+ if (this._touchMoved) {
1848
+ this.clearTouchMoved();
1849
+ return;
1850
+ }
1851
+ var index=this.highlight(),
1852
+ highlighted=this.results.find(".select2-highlighted"),
1853
+ data = highlighted.closest('.select2-result').data("select2-data");
1854
+
1855
+ if (data) {
1856
+ this.highlight(index);
1857
+ this.onSelect(data, options);
1858
+ } else if (options && options.noFocus) {
1859
+ this.close();
1860
+ }
1861
+ },
1862
+
1863
+ // abstract
1864
+ getPlaceholder: function () {
1865
+ var placeholderOption;
1866
+ return this.opts.element.attr("placeholder") ||
1867
+ this.opts.element.attr("data-placeholder") || // jquery 1.4 compat
1868
+ this.opts.element.data("placeholder") ||
1869
+ this.opts.placeholder ||
1870
+ ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);
1871
+ },
1872
+
1873
+ // abstract
1874
+ getPlaceholderOption: function() {
1875
+ if (this.select) {
1876
+ var firstOption = this.select.children('option').first();
1877
+ if (this.opts.placeholderOption !== undefined ) {
1878
+ //Determine the placeholder option based on the specified placeholderOption setting
1879
+ return (this.opts.placeholderOption === "first" && firstOption) ||
1880
+ (typeof this.opts.placeholderOption === "function" && this.opts.placeholderOption(this.select));
1881
+ } else if ($.trim(firstOption.text()) === "" && firstOption.val() === "") {
1882
+ //No explicit placeholder option specified, use the first if it's blank
1883
+ return firstOption;
1884
+ }
1885
+ }
1886
+ },
1887
+
1888
+ /**
1889
+ * Get the desired width for the container element. This is
1890
+ * derived first from option `width` passed to select2, then
1891
+ * the inline 'style' on the original element, and finally
1892
+ * falls back to the jQuery calculated element width.
1893
+ */
1894
+ // abstract
1895
+ initContainerWidth: function () {
1896
+ function resolveContainerWidth() {
1897
+ var style, attrs, matches, i, l, attr;
1898
+
1899
+ if (this.opts.width === "off") {
1900
+ return null;
1901
+ } else if (this.opts.width === "element"){
1902
+ return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';
1903
+ } else if (this.opts.width === "copy" || this.opts.width === "resolve") {
1904
+ // check if there is inline style on the element that contains width
1905
+ style = this.opts.element.attr('style');
1906
+ if (style !== undefined) {
1907
+ attrs = style.split(';');
1908
+ for (i = 0, l = attrs.length; i < l; i = i + 1) {
1909
+ attr = attrs[i].replace(/\s/g, '');
1910
+ matches = attr.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);
1911
+ if (matches !== null && matches.length >= 1)
1912
+ return matches[1];
1913
+ }
1914
+ }
1915
+
1916
+ if (this.opts.width === "resolve") {
1917
+ // next check if css('width') can resolve a width that is percent based, this is sometimes possible
1918
+ // when attached to input type=hidden or elements hidden via css
1919
+ style = this.opts.element.css('width');
1920
+ if (style.indexOf("%") > 0) return style;
1921
+
1922
+ // finally, fallback on the calculated width of the element
1923
+ return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');
1924
+ }
1925
+
1926
+ return null;
1927
+ } else if ($.isFunction(this.opts.width)) {
1928
+ return this.opts.width();
1929
+ } else {
1930
+ return this.opts.width;
1931
+ }
1932
+ };
1933
+
1934
+ var width = resolveContainerWidth.call(this);
1935
+ if (width !== null) {
1936
+ this.container.css("width", width);
1937
+ }
1938
+ }
1939
+ });
1940
+
1941
+ SingleSelect2 = clazz(AbstractSelect2, {
1942
+
1943
+ // single
1944
+
1945
+ createContainer: function () {
1946
+ var container = $(document.createElement("div")).attr({
1947
+ "class": "select2-container"
1948
+ }).html([
1949
+ "<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>",
1950
+ " <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>",
1951
+ " <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>",
1952
+ "</a>",
1953
+ "<label for='' class='select2-offscreen'></label>",
1954
+ "<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />",
1955
+ "<div class='select2-drop select2-display-none'>",
1956
+ " <div class='select2-search'>",
1957
+ " <label for='' class='select2-offscreen'></label>",
1958
+ " <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'",
1959
+ " aria-autocomplete='list' />",
1960
+ " </div>",
1961
+ " <ul class='select2-results' role='listbox'>",
1962
+ " </ul>",
1963
+ "</div>"].join(""));
1964
+ return container;
1965
+ },
1966
+
1967
+ // single
1968
+ enableInterface: function() {
1969
+ if (this.parent.enableInterface.apply(this, arguments)) {
1970
+ this.focusser.prop("disabled", !this.isInterfaceEnabled());
1971
+ }
1972
+ },
1973
+
1974
+ // single
1975
+ opening: function () {
1976
+ var el, range, len;
1977
+
1978
+ if (this.opts.minimumResultsForSearch >= 0) {
1979
+ this.showSearch(true);
1980
+ }
1981
+
1982
+ this.parent.opening.apply(this, arguments);
1983
+
1984
+ if (this.showSearchInput !== false) {
1985
+ // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range
1986
+ // all other browsers handle this just fine
1987
+
1988
+ this.search.val(this.focusser.val());
1989
+ }
1990
+ if (this.opts.shouldFocusInput(this)) {
1991
+ this.search.focus();
1992
+ // move the cursor to the end after focussing, otherwise it will be at the beginning and
1993
+ // new text will appear *before* focusser.val()
1994
+ el = this.search.get(0);
1995
+ if (el.createTextRange) {
1996
+ range = el.createTextRange();
1997
+ range.collapse(false);
1998
+ range.select();
1999
+ } else if (el.setSelectionRange) {
2000
+ len = this.search.val().length;
2001
+ el.setSelectionRange(len, len);
2002
+ }
2003
+ }
2004
+
2005
+ // initializes search's value with nextSearchTerm (if defined by user)
2006
+ // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter
2007
+ if(this.search.val() === "") {
2008
+ if(this.nextSearchTerm != undefined){
2009
+ this.search.val(this.nextSearchTerm);
2010
+ this.search.select();
2011
+ }
2012
+ }
2013
+
2014
+ this.focusser.prop("disabled", true).val("");
2015
+ this.updateResults(true);
2016
+ this.opts.element.trigger($.Event("select2-open"));
2017
+ },
2018
+
2019
+ // single
2020
+ close: function () {
2021
+ if (!this.opened()) return;
2022
+ this.parent.close.apply(this, arguments);
2023
+
2024
+ this.focusser.prop("disabled", false);
2025
+
2026
+ if (this.opts.shouldFocusInput(this)) {
2027
+ this.focusser.focus();
2028
+ }
2029
+ },
2030
+
2031
+ // single
2032
+ focus: function () {
2033
+ if (this.opened()) {
2034
+ this.close();
2035
+ } else {
2036
+ this.focusser.prop("disabled", false);
2037
+ if (this.opts.shouldFocusInput(this)) {
2038
+ this.focusser.focus();
2039
+ }
2040
+ }
2041
+ },
2042
+
2043
+ // single
2044
+ isFocused: function () {
2045
+ return this.container.hasClass("select2-container-active");
2046
+ },
2047
+
2048
+ // single
2049
+ cancel: function () {
2050
+ this.parent.cancel.apply(this, arguments);
2051
+ this.focusser.prop("disabled", false);
2052
+
2053
+ if (this.opts.shouldFocusInput(this)) {
2054
+ this.focusser.focus();
2055
+ }
2056
+ },
2057
+
2058
+ // single
2059
+ destroy: function() {
2060
+ $("label[for='" + this.focusser.attr('id') + "']")
2061
+ .attr('for', this.opts.element.attr("id"));
2062
+ this.parent.destroy.apply(this, arguments);
2063
+
2064
+ cleanupJQueryElements.call(this,
2065
+ "selection",
2066
+ "focusser"
2067
+ );
2068
+ },
2069
+
2070
+ // single
2071
+ initContainer: function () {
2072
+
2073
+ var selection,
2074
+ container = this.container,
2075
+ dropdown = this.dropdown,
2076
+ idSuffix = nextUid(),
2077
+ elementLabel;
2078
+
2079
+ if (this.opts.minimumResultsForSearch < 0) {
2080
+ this.showSearch(false);
2081
+ } else {
2082
+ this.showSearch(true);
2083
+ }
2084
+
2085
+ this.selection = selection = container.find(".select2-choice");
2086
+
2087
+ this.focusser = container.find(".select2-focusser");
2088
+
2089
+ // add aria associations
2090
+ selection.find(".select2-chosen").attr("id", "select2-chosen-"+idSuffix);
2091
+ this.focusser.attr("aria-labelledby", "select2-chosen-"+idSuffix);
2092
+ this.results.attr("id", "select2-results-"+idSuffix);
2093
+ this.search.attr("aria-owns", "select2-results-"+idSuffix);
2094
+
2095
+ // rewrite labels from original element to focusser
2096
+ this.focusser.attr("id", "s2id_autogen"+idSuffix);
2097
+
2098
+ elementLabel = $("label[for='" + this.opts.element.attr("id") + "']");
2099
+
2100
+ this.focusser.prev()
2101
+ .text(elementLabel.text())
2102
+ .attr('for', this.focusser.attr('id'));
2103
+
2104
+ // Ensure the original element retains an accessible name
2105
+ var originalTitle = this.opts.element.attr("title");
2106
+ this.opts.element.attr("title", (originalTitle || elementLabel.text()));
2107
+
2108
+ this.focusser.attr("tabindex", this.elementTabIndex);
2109
+
2110
+ // write label for search field using the label from the focusser element
2111
+ this.search.attr("id", this.focusser.attr('id') + '_search');
2112
+
2113
+ this.search.prev()
2114
+ .text($("label[for='" + this.focusser.attr('id') + "']").text())
2115
+ .attr('for', this.search.attr('id'));
2116
+
2117
+ this.search.on("keydown", this.bind(function (e) {
2118
+ if (!this.isInterfaceEnabled()) return;
2119
+
2120
+ // filter 229 keyCodes (input method editor is processing key input)
2121
+ if (229 == e.keyCode) return;
2122
+
2123
+ if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {
2124
+ // prevent the page from scrolling
2125
+ killEvent(e);
2126
+ return;
2127
+ }
2128
+
2129
+ switch (e.which) {
2130
+ case KEY.UP:
2131
+ case KEY.DOWN:
2132
+ this.moveHighlight((e.which === KEY.UP) ? -1 : 1);
2133
+ killEvent(e);
2134
+ return;
2135
+ case KEY.ENTER:
2136
+ this.selectHighlighted();
2137
+ killEvent(e);
2138
+ return;
2139
+ case KEY.TAB:
2140
+ this.selectHighlighted({noFocus: true});
2141
+ return;
2142
+ case KEY.ESC:
2143
+ this.cancel(e);
2144
+ killEvent(e);
2145
+ return;
2146
+ }
2147
+ }));
2148
+
2149
+ this.search.on("blur", this.bind(function(e) {
2150
+ // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.
2151
+ // without this the search field loses focus which is annoying
2152
+ if (document.activeElement === this.body.get(0)) {
2153
+ window.setTimeout(this.bind(function() {
2154
+ if (this.opened()) {
2155
+ this.search.focus();
2156
+ }
2157
+ }), 0);
2158
+ }
2159
+ }));
2160
+
2161
+ this.focusser.on("keydown", this.bind(function (e) {
2162
+ if (!this.isInterfaceEnabled()) return;
2163
+
2164
+ if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {
2165
+ return;
2166
+ }
2167
+
2168
+ if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {
2169
+ killEvent(e);
2170
+ return;
2171
+ }
2172
+
2173
+ if (e.which == KEY.DOWN || e.which == KEY.UP
2174
+ || (e.which == KEY.ENTER && this.opts.openOnEnter)) {
2175
+
2176
+ if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;
2177
+
2178
+ this.open();
2179
+ killEvent(e);
2180
+ return;
2181
+ }
2182
+
2183
+ if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {
2184
+ if (this.opts.allowClear) {
2185
+ this.clear();
2186
+ }
2187
+ killEvent(e);
2188
+ return;
2189
+ }
2190
+ }));
2191
+
2192
+
2193
+ installKeyUpChangeEvent(this.focusser);
2194
+ this.focusser.on("keyup-change input", this.bind(function(e) {
2195
+ if (this.opts.minimumResultsForSearch >= 0) {
2196
+ e.stopPropagation();
2197
+ if (this.opened()) return;
2198
+ this.open();
2199
+ }
2200
+ }));
2201
+
2202
+ selection.on("mousedown touchstart", "abbr", this.bind(function (e) {
2203
+ if (!this.isInterfaceEnabled()) return;
2204
+ this.clear();
2205
+ killEventImmediately(e);
2206
+ this.close();
2207
+ this.selection.focus();
2208
+ }));
2209
+
2210
+ selection.on("mousedown touchstart", this.bind(function (e) {
2211
+ // Prevent IE from generating a click event on the body
2212
+ reinsertElement(selection);
2213
+
2214
+ if (!this.container.hasClass("select2-container-active")) {
2215
+ this.opts.element.trigger($.Event("select2-focus"));
2216
+ }
2217
+
2218
+ if (this.opened()) {
2219
+ this.close();
2220
+ } else if (this.isInterfaceEnabled()) {
2221
+ this.open();
2222
+ }
2223
+
2224
+ killEvent(e);
2225
+ }));
2226
+
2227
+ dropdown.on("mousedown touchstart", this.bind(function() {
2228
+ if (this.opts.shouldFocusInput(this)) {
2229
+ this.search.focus();
2230
+ }
2231
+ }));
2232
+
2233
+ selection.on("focus", this.bind(function(e) {
2234
+ killEvent(e);
2235
+ }));
2236
+
2237
+ this.focusser.on("focus", this.bind(function(){
2238
+ if (!this.container.hasClass("select2-container-active")) {
2239
+ this.opts.element.trigger($.Event("select2-focus"));
2240
+ }
2241
+ this.container.addClass("select2-container-active");
2242
+ })).on("blur", this.bind(function() {
2243
+ if (!this.opened()) {
2244
+ this.container.removeClass("select2-container-active");
2245
+ this.opts.element.trigger($.Event("select2-blur"));
2246
+ }
2247
+ }));
2248
+ this.search.on("focus", this.bind(function(){
2249
+ if (!this.container.hasClass("select2-container-active")) {
2250
+ this.opts.element.trigger($.Event("select2-focus"));
2251
+ }
2252
+ this.container.addClass("select2-container-active");
2253
+ }));
2254
+
2255
+ this.initContainerWidth();
2256
+ this.opts.element.addClass("select2-offscreen");
2257
+ this.setPlaceholder();
2258
+
2259
+ },
2260
+
2261
+ // single
2262
+ clear: function(triggerChange) {
2263
+ var data=this.selection.data("select2-data");
2264
+ if (data) { // guard against queued quick consecutive clicks
2265
+ var evt = $.Event("select2-clearing");
2266
+ this.opts.element.trigger(evt);
2267
+ if (evt.isDefaultPrevented()) {
2268
+ return;
2269
+ }
2270
+ var placeholderOption = this.getPlaceholderOption();
2271
+ this.opts.element.val(placeholderOption ? placeholderOption.val() : "");
2272
+ this.selection.find(".select2-chosen").empty();
2273
+ this.selection.removeData("select2-data");
2274
+ this.setPlaceholder();
2275
+
2276
+ if (triggerChange !== false){
2277
+ this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });
2278
+ this.triggerChange({removed:data});
2279
+ }
2280
+ }
2281
+ },
2282
+
2283
+ /**
2284
+ * Sets selection based on source element's value
2285
+ */
2286
+ // single
2287
+ initSelection: function () {
2288
+ var selected;
2289
+ if (this.isPlaceholderOptionSelected()) {
2290
+ this.updateSelection(null);
2291
+ this.close();
2292
+ this.setPlaceholder();
2293
+ } else {
2294
+ var self = this;
2295
+ this.opts.initSelection.call(null, this.opts.element, function(selected){
2296
+ if (selected !== undefined && selected !== null) {
2297
+ self.updateSelection(selected);
2298
+ self.close();
2299
+ self.setPlaceholder();
2300
+ self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val());
2301
+ }
2302
+ });
2303
+ }
2304
+ },
2305
+
2306
+ isPlaceholderOptionSelected: function() {
2307
+ var placeholderOption;
2308
+ if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered
2309
+ return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected"))
2310
+ || (this.opts.element.val() === "")
2311
+ || (this.opts.element.val() === undefined)
2312
+ || (this.opts.element.val() === null);
2313
+ },
2314
+
2315
+ // single
2316
+ prepareOpts: function () {
2317
+ var opts = this.parent.prepareOpts.apply(this, arguments),
2318
+ self=this;
2319
+
2320
+ if (opts.element.get(0).tagName.toLowerCase() === "select") {
2321
+ // install the selection initializer
2322
+ opts.initSelection = function (element, callback) {
2323
+ var selected = element.find("option").filter(function() { return this.selected && !this.disabled });
2324
+ // a single select box always has a value, no need to null check 'selected'
2325
+ callback(self.optionToData(selected));
2326
+ };
2327
+ } else if ("data" in opts) {
2328
+ // install default initSelection when applied to hidden input and data is local
2329
+ opts.initSelection = opts.initSelection || function (element, callback) {
2330
+ var id = element.val();
2331
+ //search in data by id, storing the actual matching item
2332
+ var match = null;
2333
+ opts.query({
2334
+ matcher: function(term, text, el){
2335
+ var is_match = equal(id, opts.id(el));
2336
+ if (is_match) {
2337
+ match = el;
2338
+ }
2339
+ return is_match;
2340
+ },
2341
+ callback: !$.isFunction(callback) ? $.noop : function() {
2342
+ callback(match);
2343
+ }
2344
+ });
2345
+ };
2346
+ }
2347
+
2348
+ return opts;
2349
+ },
2350
+
2351
+ // single
2352
+ getPlaceholder: function() {
2353
+ // if a placeholder is specified on a single select without a valid placeholder option ignore it
2354
+ if (this.select) {
2355
+ if (this.getPlaceholderOption() === undefined) {
2356
+ return undefined;
2357
+ }
2358
+ }
2359
+
2360
+ return this.parent.getPlaceholder.apply(this, arguments);
2361
+ },
2362
+
2363
+ // single
2364
+ setPlaceholder: function () {
2365
+ var placeholder = this.getPlaceholder();
2366
+
2367
+ if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {
2368
+
2369
+ // check for a placeholder option if attached to a select
2370
+ if (this.select && this.getPlaceholderOption() === undefined) return;
2371
+
2372
+ this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder));
2373
+
2374
+ this.selection.addClass("select2-default");
2375
+
2376
+ this.container.removeClass("select2-allowclear");
2377
+ }
2378
+ },
2379
+
2380
+ // single
2381
+ postprocessResults: function (data, initial, noHighlightUpdate) {
2382
+ var selected = 0, self = this, showSearchInput = true;
2383
+
2384
+ // find the selected element in the result list
2385
+
2386
+ this.findHighlightableChoices().each2(function (i, elm) {
2387
+ if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
2388
+ selected = i;
2389
+ return false;
2390
+ }
2391
+ });
2392
+
2393
+ // and highlight it
2394
+ if (noHighlightUpdate !== false) {
2395
+ if (initial === true && selected >= 0) {
2396
+ this.highlight(selected);
2397
+ } else {
2398
+ this.highlight(0);
2399
+ }
2400
+ }
2401
+
2402
+ // hide the search box if this is the first we got the results and there are enough of them for search
2403
+
2404
+ if (initial === true) {
2405
+ var min = this.opts.minimumResultsForSearch;
2406
+ if (min >= 0) {
2407
+ this.showSearch(countResults(data.results) >= min);
2408
+ }
2409
+ }
2410
+ },
2411
+
2412
+ // single
2413
+ showSearch: function(showSearchInput) {
2414
+ if (this.showSearchInput === showSearchInput) return;
2415
+
2416
+ this.showSearchInput = showSearchInput;
2417
+
2418
+ this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput);
2419
+ this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput);
2420
+ //add "select2-with-searchbox" to the container if search box is shown
2421
+ $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput);
2422
+ },
2423
+
2424
+ // single
2425
+ onSelect: function (data, options) {
2426
+
2427
+ if (!this.triggerSelect(data)) { return; }
2428
+
2429
+ var old = this.opts.element.val(),
2430
+ oldData = this.data();
2431
+
2432
+ this.opts.element.val(this.id(data));
2433
+ this.updateSelection(data);
2434
+
2435
+ this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data });
2436
+
2437
+ this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());
2438
+ this.close();
2439
+
2440
+ if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) {
2441
+ this.focusser.focus();
2442
+ }
2443
+
2444
+ if (!equal(old, this.id(data))) {
2445
+ this.triggerChange({ added: data, removed: oldData });
2446
+ }
2447
+ },
2448
+
2449
+ // single
2450
+ updateSelection: function (data) {
2451
+
2452
+ var container=this.selection.find(".select2-chosen"), formatted, cssClass;
2453
+
2454
+ this.selection.data("select2-data", data);
2455
+
2456
+ container.empty();
2457
+ if (data !== null) {
2458
+ formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup);
2459
+ }
2460
+ if (formatted !== undefined) {
2461
+ container.append(formatted);
2462
+ }
2463
+ cssClass=this.opts.formatSelectionCssClass(data, container);
2464
+ if (cssClass !== undefined) {
2465
+ container.addClass(cssClass);
2466
+ }
2467
+
2468
+ this.selection.removeClass("select2-default");
2469
+
2470
+ if (this.opts.allowClear && this.getPlaceholder() !== undefined) {
2471
+ this.container.addClass("select2-allowclear");
2472
+ }
2473
+ },
2474
+
2475
+ // single
2476
+ val: function () {
2477
+ var val,
2478
+ triggerChange = false,
2479
+ data = null,
2480
+ self = this,
2481
+ oldData = this.data();
2482
+
2483
+ if (arguments.length === 0) {
2484
+ return this.opts.element.val();
2485
+ }
2486
+
2487
+ val = arguments[0];
2488
+
2489
+ if (arguments.length > 1) {
2490
+ triggerChange = arguments[1];
2491
+ }
2492
+
2493
+ if (this.select) {
2494
+ this.select
2495
+ .val(val)
2496
+ .find("option").filter(function() { return this.selected }).each2(function (i, elm) {
2497
+ data = self.optionToData(elm);
2498
+ return false;
2499
+ });
2500
+ this.updateSelection(data);
2501
+ this.setPlaceholder();
2502
+ if (triggerChange) {
2503
+ this.triggerChange({added: data, removed:oldData});
2504
+ }
2505
+ } else {
2506
+ // val is an id. !val is true for [undefined,null,'',0] - 0 is legal
2507
+ if (!val && val !== 0) {
2508
+ this.clear(triggerChange);
2509
+ return;
2510
+ }
2511
+ if (this.opts.initSelection === undefined) {
2512
+ throw new Error("cannot call val() if initSelection() is not defined");
2513
+ }
2514
+ this.opts.element.val(val);
2515
+ this.opts.initSelection(this.opts.element, function(data){
2516
+ self.opts.element.val(!data ? "" : self.id(data));
2517
+ self.updateSelection(data);
2518
+ self.setPlaceholder();
2519
+ if (triggerChange) {
2520
+ self.triggerChange({added: data, removed:oldData});
2521
+ }
2522
+ });
2523
+ }
2524
+ },
2525
+
2526
+ // single
2527
+ clearSearch: function () {
2528
+ this.search.val("");
2529
+ this.focusser.val("");
2530
+ },
2531
+
2532
+ // single
2533
+ data: function(value) {
2534
+ var data,
2535
+ triggerChange = false;
2536
+
2537
+ if (arguments.length === 0) {
2538
+ data = this.selection.data("select2-data");
2539
+ if (data == undefined) data = null;
2540
+ return data;
2541
+ } else {
2542
+ if (arguments.length > 1) {
2543
+ triggerChange = arguments[1];
2544
+ }
2545
+ if (!value) {
2546
+ this.clear(triggerChange);
2547
+ } else {
2548
+ data = this.data();
2549
+ this.opts.element.val(!value ? "" : this.id(value));
2550
+ this.updateSelection(value);
2551
+ if (triggerChange) {
2552
+ this.triggerChange({added: value, removed:data});
2553
+ }
2554
+ }
2555
+ }
2556
+ }
2557
+ });
2558
+
2559
+ MultiSelect2 = clazz(AbstractSelect2, {
2560
+
2561
+ // multi
2562
+ createContainer: function () {
2563
+ var container = $(document.createElement("div")).attr({
2564
+ "class": "select2-container select2-container-multi"
2565
+ }).html([
2566
+ "<ul class='select2-choices'>",
2567
+ " <li class='select2-search-field'>",
2568
+ " <label for='' class='select2-offscreen'></label>",
2569
+ " <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>",
2570
+ " </li>",
2571
+ "</ul>",
2572
+ "<div class='select2-drop select2-drop-multi select2-display-none'>",
2573
+ " <ul class='select2-results'>",
2574
+ " </ul>",
2575
+ "</div>"].join(""));
2576
+ return container;
2577
+ },
2578
+
2579
+ // multi
2580
+ prepareOpts: function () {
2581
+ var opts = this.parent.prepareOpts.apply(this, arguments),
2582
+ self=this;
2583
+
2584
+ // TODO validate placeholder is a string if specified
2585
+
2586
+ if (opts.element.get(0).tagName.toLowerCase() === "select") {
2587
+ // install the selection initializer
2588
+ opts.initSelection = function (element, callback) {
2589
+
2590
+ var data = [];
2591
+
2592
+ element.find("option").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) {
2593
+ data.push(self.optionToData(elm));
2594
+ });
2595
+ callback(data);
2596
+ };
2597
+ } else if ("data" in opts) {
2598
+ // install default initSelection when applied to hidden input and data is local
2599
+ opts.initSelection = opts.initSelection || function (element, callback) {
2600
+ var ids = splitVal(element.val(), opts.separator);
2601
+ //search in data by array of ids, storing matching items in a list
2602
+ var matches = [];
2603
+ opts.query({
2604
+ matcher: function(term, text, el){
2605
+ var is_match = $.grep(ids, function(id) {
2606
+ return equal(id, opts.id(el));
2607
+ }).length;
2608
+ if (is_match) {
2609
+ matches.push(el);
2610
+ }
2611
+ return is_match;
2612
+ },
2613
+ callback: !$.isFunction(callback) ? $.noop : function() {
2614
+ // reorder matches based on the order they appear in the ids array because right now
2615
+ // they are in the order in which they appear in data array
2616
+ var ordered = [];
2617
+ for (var i = 0; i < ids.length; i++) {
2618
+ var id = ids[i];
2619
+ for (var j = 0; j < matches.length; j++) {
2620
+ var match = matches[j];
2621
+ if (equal(id, opts.id(match))) {
2622
+ ordered.push(match);
2623
+ matches.splice(j, 1);
2624
+ break;
2625
+ }
2626
+ }
2627
+ }
2628
+ callback(ordered);
2629
+ }
2630
+ });
2631
+ };
2632
+ }
2633
+
2634
+ return opts;
2635
+ },
2636
+
2637
+ // multi
2638
+ selectChoice: function (choice) {
2639
+
2640
+ var selected = this.container.find(".select2-search-choice-focus");
2641
+ if (selected.length && choice && choice[0] == selected[0]) {
2642
+
2643
+ } else {
2644
+ if (selected.length) {
2645
+ this.opts.element.trigger("choice-deselected", selected);
2646
+ }
2647
+ selected.removeClass("select2-search-choice-focus");
2648
+ if (choice && choice.length) {
2649
+ this.close();
2650
+ choice.addClass("select2-search-choice-focus");
2651
+ this.opts.element.trigger("choice-selected", choice);
2652
+ }
2653
+ }
2654
+ },
2655
+
2656
+ // multi
2657
+ destroy: function() {
2658
+ $("label[for='" + this.search.attr('id') + "']")
2659
+ .attr('for', this.opts.element.attr("id"));
2660
+ this.parent.destroy.apply(this, arguments);
2661
+
2662
+ cleanupJQueryElements.call(this,
2663
+ "searchContainer",
2664
+ "selection"
2665
+ );
2666
+ },
2667
+
2668
+ // multi
2669
+ initContainer: function () {
2670
+
2671
+ var selector = ".select2-choices", selection;
2672
+
2673
+ this.searchContainer = this.container.find(".select2-search-field");
2674
+ this.selection = selection = this.container.find(selector);
2675
+
2676
+ var _this = this;
2677
+ this.selection.on("click", ".select2-search-choice:not(.select2-locked)", function (e) {
2678
+ //killEvent(e);
2679
+ _this.search[0].focus();
2680
+ _this.selectChoice($(this));
2681
+ });
2682
+
2683
+ // rewrite labels from original element to focusser
2684
+ this.search.attr("id", "s2id_autogen"+nextUid());
2685
+
2686
+ this.search.prev()
2687
+ .text($("label[for='" + this.opts.element.attr("id") + "']").text())
2688
+ .attr('for', this.search.attr('id'));
2689
+
2690
+ this.search.on("input paste", this.bind(function() {
2691
+ if (this.search.attr('placeholder') && this.search.val().length == 0) return;
2692
+ if (!this.isInterfaceEnabled()) return;
2693
+ if (!this.opened()) {
2694
+ this.open();
2695
+ }
2696
+ }));
2697
+
2698
+ this.search.attr("tabindex", this.elementTabIndex);
2699
+
2700
+ this.keydowns = 0;
2701
+ this.search.on("keydown", this.bind(function (e) {
2702
+ if (!this.isInterfaceEnabled()) return;
2703
+
2704
+ ++this.keydowns;
2705
+ var selected = selection.find(".select2-search-choice-focus");
2706
+ var prev = selected.prev(".select2-search-choice:not(.select2-locked)");
2707
+ var next = selected.next(".select2-search-choice:not(.select2-locked)");
2708
+ var pos = getCursorInfo(this.search);
2709
+
2710
+ if (selected.length &&
2711
+ (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {
2712
+ var selectedChoice = selected;
2713
+ if (e.which == KEY.LEFT && prev.length) {
2714
+ selectedChoice = prev;
2715
+ }
2716
+ else if (e.which == KEY.RIGHT) {
2717
+ selectedChoice = next.length ? next : null;
2718
+ }
2719
+ else if (e.which === KEY.BACKSPACE) {
2720
+ if (this.unselect(selected.first())) {
2721
+ this.search.width(10);
2722
+ selectedChoice = prev.length ? prev : next;
2723
+ }
2724
+ } else if (e.which == KEY.DELETE) {
2725
+ if (this.unselect(selected.first())) {
2726
+ this.search.width(10);
2727
+ selectedChoice = next.length ? next : null;
2728
+ }
2729
+ } else if (e.which == KEY.ENTER) {
2730
+ selectedChoice = null;
2731
+ }
2732
+
2733
+ this.selectChoice(selectedChoice);
2734
+ killEvent(e);
2735
+ if (!selectedChoice || !selectedChoice.length) {
2736
+ this.open();
2737
+ }
2738
+ return;
2739
+ } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)
2740
+ || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {
2741
+
2742
+ this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last());
2743
+ killEvent(e);
2744
+ return;
2745
+ } else {
2746
+ this.selectChoice(null);
2747
+ }
2748
+
2749
+ if (this.opened()) {
2750
+ switch (e.which) {
2751
+ case KEY.UP:
2752
+ case KEY.DOWN:
2753
+ this.moveHighlight((e.which === KEY.UP) ? -1 : 1);
2754
+ killEvent(e);
2755
+ return;
2756
+ case KEY.ENTER:
2757
+ this.selectHighlighted();
2758
+ killEvent(e);
2759
+ return;
2760
+ case KEY.TAB:
2761
+ this.selectHighlighted({noFocus:true});
2762
+ this.close();
2763
+ return;
2764
+ case KEY.ESC:
2765
+ this.cancel(e);
2766
+ killEvent(e);
2767
+ return;
2768
+ }
2769
+ }
2770
+
2771
+ if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)
2772
+ || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {
2773
+ return;
2774
+ }
2775
+
2776
+ if (e.which === KEY.ENTER) {
2777
+ if (this.opts.openOnEnter === false) {
2778
+ return;
2779
+ } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {
2780
+ return;
2781
+ }
2782
+ }
2783
+
2784
+ this.open();
2785
+
2786
+ if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {
2787
+ // prevent the page from scrolling
2788
+ killEvent(e);
2789
+ }
2790
+
2791
+ if (e.which === KEY.ENTER) {
2792
+ // prevent form from being submitted
2793
+ killEvent(e);
2794
+ }
2795
+
2796
+ }));
2797
+
2798
+ this.search.on("keyup", this.bind(function (e) {
2799
+ this.keydowns = 0;
2800
+ this.resizeSearch();
2801
+ })
2802
+ );
2803
+
2804
+ this.search.on("blur", this.bind(function(e) {
2805
+ this.container.removeClass("select2-container-active");
2806
+ this.search.removeClass("select2-focused");
2807
+ this.selectChoice(null);
2808
+ if (!this.opened()) this.clearSearch();
2809
+ e.stopImmediatePropagation();
2810
+ this.opts.element.trigger($.Event("select2-blur"));
2811
+ }));
2812
+
2813
+ this.container.on("click", selector, this.bind(function (e) {
2814
+ if (!this.isInterfaceEnabled()) return;
2815
+ if ($(e.target).closest(".select2-search-choice").length > 0) {
2816
+ // clicked inside a select2 search choice, do not open
2817
+ return;
2818
+ }
2819
+ this.selectChoice(null);
2820
+ this.clearPlaceholder();
2821
+ if (!this.container.hasClass("select2-container-active")) {
2822
+ this.opts.element.trigger($.Event("select2-focus"));
2823
+ }
2824
+ this.open();
2825
+ this.focusSearch();
2826
+ e.preventDefault();
2827
+ }));
2828
+
2829
+ this.container.on("focus", selector, this.bind(function () {
2830
+ if (!this.isInterfaceEnabled()) return;
2831
+ if (!this.container.hasClass("select2-container-active")) {
2832
+ this.opts.element.trigger($.Event("select2-focus"));
2833
+ }
2834
+ this.container.addClass("select2-container-active");
2835
+ this.dropdown.addClass("select2-drop-active");
2836
+ this.clearPlaceholder();
2837
+ }));
2838
+
2839
+ this.initContainerWidth();
2840
+ this.opts.element.addClass("select2-offscreen");
2841
+
2842
+ // set the placeholder if necessary
2843
+ this.clearSearch();
2844
+ },
2845
+
2846
+ // multi
2847
+ enableInterface: function() {
2848
+ if (this.parent.enableInterface.apply(this, arguments)) {
2849
+ this.search.prop("disabled", !this.isInterfaceEnabled());
2850
+ }
2851
+ },
2852
+
2853
+ // multi
2854
+ initSelection: function () {
2855
+ var data;
2856
+ if (this.opts.element.val() === "" && this.opts.element.text() === "") {
2857
+ this.updateSelection([]);
2858
+ this.close();
2859
+ // set the placeholder if necessary
2860
+ this.clearSearch();
2861
+ }
2862
+ if (this.select || this.opts.element.val() !== "") {
2863
+ var self = this;
2864
+ this.opts.initSelection.call(null, this.opts.element, function(data){
2865
+ if (data !== undefined && data !== null) {
2866
+ self.updateSelection(data);
2867
+ self.close();
2868
+ // set the placeholder if necessary
2869
+ self.clearSearch();
2870
+ }
2871
+ });
2872
+ }
2873
+ },
2874
+
2875
+ // multi
2876
+ clearSearch: function () {
2877
+ var placeholder = this.getPlaceholder(),
2878
+ maxWidth = this.getMaxSearchWidth();
2879
+
2880
+ if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) {
2881
+ this.search.val(placeholder).addClass("select2-default");
2882
+ // stretch the search box to full width of the container so as much of the placeholder is visible as possible
2883
+ // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944
2884
+ this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width"));
2885
+ } else {
2886
+ this.search.val("").width(10);
2887
+ }
2888
+ },
2889
+
2890
+ // multi
2891
+ clearPlaceholder: function () {
2892
+ if (this.search.hasClass("select2-default")) {
2893
+ this.search.val("").removeClass("select2-default");
2894
+ }
2895
+ },
2896
+
2897
+ // multi
2898
+ opening: function () {
2899
+ this.clearPlaceholder(); // should be done before super so placeholder is not used to search
2900
+ this.resizeSearch();
2901
+
2902
+ this.parent.opening.apply(this, arguments);
2903
+
2904
+ this.focusSearch();
2905
+
2906
+ // initializes search's value with nextSearchTerm (if defined by user)
2907
+ // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter
2908
+ if(this.search.val() === "") {
2909
+ if(this.nextSearchTerm != undefined){
2910
+ this.search.val(this.nextSearchTerm);
2911
+ this.search.select();
2912
+ }
2913
+ }
2914
+
2915
+ this.updateResults(true);
2916
+ if (this.opts.shouldFocusInput(this)) {
2917
+ this.search.focus();
2918
+ }
2919
+ this.opts.element.trigger($.Event("select2-open"));
2920
+ },
2921
+
2922
+ // multi
2923
+ close: function () {
2924
+ if (!this.opened()) return;
2925
+ this.parent.close.apply(this, arguments);
2926
+ },
2927
+
2928
+ // multi
2929
+ focus: function () {
2930
+ this.close();
2931
+ this.search.focus();
2932
+ },
2933
+
2934
+ // multi
2935
+ isFocused: function () {
2936
+ return this.search.hasClass("select2-focused");
2937
+ },
2938
+
2939
+ // multi
2940
+ updateSelection: function (data) {
2941
+ var ids = [], filtered = [], self = this;
2942
+
2943
+ // filter out duplicates
2944
+ $(data).each(function () {
2945
+ if (indexOf(self.id(this), ids) < 0) {
2946
+ ids.push(self.id(this));
2947
+ filtered.push(this);
2948
+ }
2949
+ });
2950
+ data = filtered;
2951
+
2952
+ this.selection.find(".select2-search-choice").remove();
2953
+ $(data).each(function () {
2954
+ self.addSelectedChoice(this);
2955
+ });
2956
+ self.postprocessResults();
2957
+ },
2958
+
2959
+ // multi
2960
+ tokenize: function() {
2961
+ var input = this.search.val();
2962
+ input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);
2963
+ if (input != null && input != undefined) {
2964
+ this.search.val(input);
2965
+ if (input.length > 0) {
2966
+ this.open();
2967
+ }
2968
+ }
2969
+
2970
+ },
2971
+
2972
+ // multi
2973
+ onSelect: function (data, options) {
2974
+
2975
+ if (!this.triggerSelect(data) || data.text === "") { return; }
2976
+
2977
+ this.addSelectedChoice(data);
2978
+
2979
+ this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data });
2980
+
2981
+ // keep track of the search's value before it gets cleared
2982
+ this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());
2983
+
2984
+ this.clearSearch();
2985
+ this.updateResults();
2986
+
2987
+ if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true);
2988
+
2989
+ if (this.opts.closeOnSelect) {
2990
+ this.close();
2991
+ this.search.width(10);
2992
+ } else {
2993
+ if (this.countSelectableResults()>0) {
2994
+ this.search.width(10);
2995
+ this.resizeSearch();
2996
+ if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {
2997
+ // if we reached max selection size repaint the results so choices
2998
+ // are replaced with the max selection reached message
2999
+ this.updateResults(true);
3000
+ } else {
3001
+ // initializes search's value with nextSearchTerm and update search result
3002
+ if(this.nextSearchTerm != undefined){
3003
+ this.search.val(this.nextSearchTerm);
3004
+ this.updateResults();
3005
+ this.search.select();
3006
+ }
3007
+ }
3008
+ this.positionDropdown();
3009
+ } else {
3010
+ // if nothing left to select close
3011
+ this.close();
3012
+ this.search.width(10);
3013
+ }
3014
+ }
3015
+
3016
+ // since its not possible to select an element that has already been
3017
+ // added we do not need to check if this is a new element before firing change
3018
+ this.triggerChange({ added: data });
3019
+
3020
+ if (!options || !options.noFocus)
3021
+ this.focusSearch();
3022
+ },
3023
+
3024
+ // multi
3025
+ cancel: function () {
3026
+ this.close();
3027
+ this.focusSearch();
3028
+ },
3029
+
3030
+ addSelectedChoice: function (data) {
3031
+ var enableChoice = !data.locked,
3032
+ enabledItem = $(
3033
+ "<li class='select2-search-choice'>" +
3034
+ " <div></div>" +
3035
+ " <a href='#' class='select2-search-choice-close' tabindex='-1'></a>" +
3036
+ "</li>"),
3037
+ disabledItem = $(
3038
+ "<li class='select2-search-choice select2-locked'>" +
3039
+ "<div></div>" +
3040
+ "</li>");
3041
+ var choice = enableChoice ? enabledItem : disabledItem,
3042
+ id = this.id(data),
3043
+ val = this.getVal(),
3044
+ formatted,
3045
+ cssClass;
3046
+
3047
+ formatted=this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup);
3048
+ if (formatted != undefined) {
3049
+ choice.find("div").replaceWith("<div>"+formatted+"</div>");
3050
+ }
3051
+ cssClass=this.opts.formatSelectionCssClass(data, choice.find("div"));
3052
+ if (cssClass != undefined) {
3053
+ choice.addClass(cssClass);
3054
+ }
3055
+
3056
+ if(enableChoice){
3057
+ choice.find(".select2-search-choice-close")
3058
+ .on("mousedown", killEvent)
3059
+ .on("click dblclick", this.bind(function (e) {
3060
+ if (!this.isInterfaceEnabled()) return;
3061
+
3062
+ this.unselect($(e.target));
3063
+ this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
3064
+ killEvent(e);
3065
+ this.close();
3066
+ this.focusSearch();
3067
+ })).on("focus", this.bind(function () {
3068
+ if (!this.isInterfaceEnabled()) return;
3069
+ this.container.addClass("select2-container-active");
3070
+ this.dropdown.addClass("select2-drop-active");
3071
+ }));
3072
+ }
3073
+
3074
+ choice.data("select2-data", data);
3075
+ choice.insertBefore(this.searchContainer);
3076
+
3077
+ val.push(id);
3078
+ this.setVal(val);
3079
+ },
3080
+
3081
+ // multi
3082
+ unselect: function (selected) {
3083
+ var val = this.getVal(),
3084
+ data,
3085
+ index;
3086
+ selected = selected.closest(".select2-search-choice");
3087
+
3088
+ if (selected.length === 0) {
3089
+ throw "Invalid argument: " + selected + ". Must be .select2-search-choice";
3090
+ }
3091
+
3092
+ data = selected.data("select2-data");
3093
+
3094
+ if (!data) {
3095
+ // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued
3096
+ // and invoked on an element already removed
3097
+ return;
3098
+ }
3099
+
3100
+ var evt = $.Event("select2-removing");
3101
+ evt.val = this.id(data);
3102
+ evt.choice = data;
3103
+ this.opts.element.trigger(evt);
3104
+
3105
+ if (evt.isDefaultPrevented()) {
3106
+ return false;
3107
+ }
3108
+
3109
+ while((index = indexOf(this.id(data), val)) >= 0) {
3110
+ val.splice(index, 1);
3111
+ this.setVal(val);
3112
+ if (this.select) this.postprocessResults();
3113
+ }
3114
+
3115
+ selected.remove();
3116
+
3117
+ this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });
3118
+ this.triggerChange({ removed: data });
3119
+
3120
+ return true;
3121
+ },
3122
+
3123
+ // multi
3124
+ postprocessResults: function (data, initial, noHighlightUpdate) {
3125
+ var val = this.getVal(),
3126
+ choices = this.results.find(".select2-result"),
3127
+ compound = this.results.find(".select2-result-with-children"),
3128
+ self = this;
3129
+
3130
+ choices.each2(function (i, choice) {
3131
+ var id = self.id(choice.data("select2-data"));
3132
+ if (indexOf(id, val) >= 0) {
3133
+ choice.addClass("select2-selected");
3134
+ // mark all children of the selected parent as selected
3135
+ choice.find(".select2-result-selectable").addClass("select2-selected");
3136
+ }
3137
+ });
3138
+
3139
+ compound.each2(function(i, choice) {
3140
+ // hide an optgroup if it doesn't have any selectable children
3141
+ if (!choice.is('.select2-result-selectable')
3142
+ && choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) {
3143
+ choice.addClass("select2-selected");
3144
+ }
3145
+ });
3146
+
3147
+ if (this.highlight() == -1 && noHighlightUpdate !== false){
3148
+ self.highlight(0);
3149
+ }
3150
+
3151
+ //If all results are chosen render formatNoMatches
3152
+ if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){
3153
+ if(!data || data && !data.more && this.results.find(".select2-no-results").length === 0) {
3154
+ if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) {
3155
+ this.results.append("<li class='select2-no-results'>" + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + "</li>");
3156
+ }
3157
+ }
3158
+ }
3159
+
3160
+ },
3161
+
3162
+ // multi
3163
+ getMaxSearchWidth: function() {
3164
+ return this.selection.width() - getSideBorderPadding(this.search);
3165
+ },
3166
+
3167
+ // multi
3168
+ resizeSearch: function () {
3169
+ var minimumWidth, left, maxWidth, containerLeft, searchWidth,
3170
+ sideBorderPadding = getSideBorderPadding(this.search);
3171
+
3172
+ minimumWidth = measureTextWidth(this.search) + 10;
3173
+
3174
+ left = this.search.offset().left;
3175
+
3176
+ maxWidth = this.selection.width();
3177
+ containerLeft = this.selection.offset().left;
3178
+
3179
+ searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;
3180
+
3181
+ if (searchWidth < minimumWidth) {
3182
+ searchWidth = maxWidth - sideBorderPadding;
3183
+ }
3184
+
3185
+ if (searchWidth < 40) {
3186
+ searchWidth = maxWidth - sideBorderPadding;
3187
+ }
3188
+
3189
+ if (searchWidth <= 0) {
3190
+ searchWidth = minimumWidth;
3191
+ }
3192
+
3193
+ this.search.width(Math.floor(searchWidth));
3194
+ },
3195
+
3196
+ // multi
3197
+ getVal: function () {
3198
+ var val;
3199
+ if (this.select) {
3200
+ val = this.select.val();
3201
+ return val === null ? [] : val;
3202
+ } else {
3203
+ val = this.opts.element.val();
3204
+ return splitVal(val, this.opts.separator);
3205
+ }
3206
+ },
3207
+
3208
+ // multi
3209
+ setVal: function (val) {
3210
+ var unique;
3211
+ if (this.select) {
3212
+ this.select.val(val);
3213
+ } else {
3214
+ unique = [];
3215
+ // filter out duplicates
3216
+ $(val).each(function () {
3217
+ if (indexOf(this, unique) < 0) unique.push(this);
3218
+ });
3219
+ this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator));
3220
+ }
3221
+ },
3222
+
3223
+ // multi
3224
+ buildChangeDetails: function (old, current) {
3225
+ var current = current.slice(0),
3226
+ old = old.slice(0);
3227
+
3228
+ // remove intersection from each array
3229
+ for (var i = 0; i < current.length; i++) {
3230
+ for (var j = 0; j < old.length; j++) {
3231
+ if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {
3232
+ current.splice(i, 1);
3233
+ if(i>0){
3234
+ i--;
3235
+ }
3236
+ old.splice(j, 1);
3237
+ j--;
3238
+ }
3239
+ }
3240
+ }
3241
+
3242
+ return {added: current, removed: old};
3243
+ },
3244
+
3245
+
3246
+ // multi
3247
+ val: function (val, triggerChange) {
3248
+ var oldData, self=this;
3249
+
3250
+ if (arguments.length === 0) {
3251
+ return this.getVal();
3252
+ }
3253
+
3254
+ oldData=this.data();
3255
+ if (!oldData.length) oldData=[];
3256
+
3257
+ // val is an id. !val is true for [undefined,null,'',0] - 0 is legal
3258
+ if (!val && val !== 0) {
3259
+ this.opts.element.val("");
3260
+ this.updateSelection([]);
3261
+ this.clearSearch();
3262
+ if (triggerChange) {
3263
+ this.triggerChange({added: this.data(), removed: oldData});
3264
+ }
3265
+ return;
3266
+ }
3267
+
3268
+ // val is a list of ids
3269
+ this.setVal(val);
3270
+
3271
+ if (this.select) {
3272
+ this.opts.initSelection(this.select, this.bind(this.updateSelection));
3273
+ if (triggerChange) {
3274
+ this.triggerChange(this.buildChangeDetails(oldData, this.data()));
3275
+ }
3276
+ } else {
3277
+ if (this.opts.initSelection === undefined) {
3278
+ throw new Error("val() cannot be called if initSelection() is not defined");
3279
+ }
3280
+
3281
+ this.opts.initSelection(this.opts.element, function(data){
3282
+ var ids=$.map(data, self.id);
3283
+ self.setVal(ids);
3284
+ self.updateSelection(data);
3285
+ self.clearSearch();
3286
+ if (triggerChange) {
3287
+ self.triggerChange(self.buildChangeDetails(oldData, self.data()));
3288
+ }
3289
+ });
3290
+ }
3291
+ this.clearSearch();
3292
+ },
3293
+
3294
+ // multi
3295
+ onSortStart: function() {
3296
+ if (this.select) {
3297
+ throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");
3298
+ }
3299
+
3300
+ // collapse search field into 0 width so its container can be collapsed as well
3301
+ this.search.width(0);
3302
+ // hide the container
3303
+ this.searchContainer.hide();
3304
+ },
3305
+
3306
+ // multi
3307
+ onSortEnd:function() {
3308
+
3309
+ var val=[], self=this;
3310
+
3311
+ // show search and move it to the end of the list
3312
+ this.searchContainer.show();
3313
+ // make sure the search container is the last item in the list
3314
+ this.searchContainer.appendTo(this.searchContainer.parent());
3315
+ // since we collapsed the width in dragStarted, we resize it here
3316
+ this.resizeSearch();
3317
+
3318
+ // update selection
3319
+ this.selection.find(".select2-search-choice").each(function() {
3320
+ val.push(self.opts.id($(this).data("select2-data")));
3321
+ });
3322
+ this.setVal(val);
3323
+ this.triggerChange();
3324
+ },
3325
+
3326
+ // multi
3327
+ data: function(values, triggerChange) {
3328
+ var self=this, ids, old;
3329
+ if (arguments.length === 0) {
3330
+ return this.selection
3331
+ .children(".select2-search-choice")
3332
+ .map(function() { return $(this).data("select2-data"); })
3333
+ .get();
3334
+ } else {
3335
+ old = this.data();
3336
+ if (!values) { values = []; }
3337
+ ids = $.map(values, function(e) { return self.opts.id(e); });
3338
+ this.setVal(ids);
3339
+ this.updateSelection(values);
3340
+ this.clearSearch();
3341
+ if (triggerChange) {
3342
+ this.triggerChange(this.buildChangeDetails(old, this.data()));
3343
+ }
3344
+ }
3345
+ }
3346
+ });
3347
+
3348
+ $.fn.select2 = function () {
3349
+
3350
+ var args = Array.prototype.slice.call(arguments, 0),
3351
+ opts,
3352
+ select2,
3353
+ method, value, multiple,
3354
+ allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"],
3355
+ valueMethods = ["opened", "isFocused", "container", "dropdown"],
3356
+ propertyMethods = ["val", "data"],
3357
+ methodsMap = { search: "externalSearch" };
3358
+
3359
+ this.each(function () {
3360
+ if (args.length === 0 || typeof(args[0]) === "object") {
3361
+ opts = args.length === 0 ? {} : $.extend({}, args[0]);
3362
+ opts.element = $(this);
3363
+
3364
+ if (opts.element.get(0).tagName.toLowerCase() === "select") {
3365
+ multiple = opts.element.prop("multiple");
3366
+ } else {
3367
+ multiple = opts.multiple || false;
3368
+ if ("tags" in opts) {opts.multiple = multiple = true;}
3369
+ }
3370
+
3371
+ select2 = multiple ? new window.Select2["class"].multi() : new window.Select2["class"].single();
3372
+ select2.init(opts);
3373
+ } else if (typeof(args[0]) === "string") {
3374
+
3375
+ if (indexOf(args[0], allowedMethods) < 0) {
3376
+ throw "Unknown method: " + args[0];
3377
+ }
3378
+
3379
+ value = undefined;
3380
+ select2 = $(this).data("select2");
3381
+ if (select2 === undefined) return;
3382
+
3383
+ method=args[0];
3384
+
3385
+ if (method === "container") {
3386
+ value = select2.container;
3387
+ } else if (method === "dropdown") {
3388
+ value = select2.dropdown;
3389
+ } else {
3390
+ if (methodsMap[method]) method = methodsMap[method];
3391
+
3392
+ value = select2[method].apply(select2, args.slice(1));
3393
+ }
3394
+ if (indexOf(args[0], valueMethods) >= 0
3395
+ || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) {
3396
+ return false; // abort the iteration, ready to return first matched value
3397
+ }
3398
+ } else {
3399
+ throw "Invalid arguments to select2 plugin: " + args;
3400
+ }
3401
+ });
3402
+ return (value === undefined) ? this : value;
3403
+ };
3404
+
3405
+ // plugin defaults, accessible to users
3406
+ $.fn.select2.defaults = {
3407
+ width: "copy",
3408
+ loadMorePadding: 0,
3409
+ closeOnSelect: true,
3410
+ openOnEnter: true,
3411
+ containerCss: {},
3412
+ dropdownCss: {},
3413
+ containerCssClass: "",
3414
+ dropdownCssClass: "",
3415
+ formatResult: function(result, container, query, escapeMarkup) {
3416
+ var markup=[];
3417
+ markMatch(result.text, query.term, markup, escapeMarkup);
3418
+ return markup.join("");
3419
+ },
3420
+ formatSelection: function (data, container, escapeMarkup) {
3421
+ return data ? escapeMarkup(data.text) : undefined;
3422
+ },
3423
+ sortResults: function (results, container, query) {
3424
+ return results;
3425
+ },
3426
+ formatResultCssClass: function(data) {return data.css;},
3427
+ formatSelectionCssClass: function(data, container) {return undefined;},
3428
+ minimumResultsForSearch: 0,
3429
+ minimumInputLength: 0,
3430
+ maximumInputLength: null,
3431
+ maximumSelectionSize: 0,
3432
+ id: function (e) { return e == undefined ? null : e.id; },
3433
+ matcher: function(term, text) {
3434
+ return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0;
3435
+ },
3436
+ separator: ",",
3437
+ tokenSeparators: [],
3438
+ tokenizer: defaultTokenizer,
3439
+ escapeMarkup: defaultEscapeMarkup,
3440
+ blurOnChange: false,
3441
+ selectOnBlur: false,
3442
+ adaptContainerCssClass: function(c) { return c; },
3443
+ adaptDropdownCssClass: function(c) { return null; },
3444
+ nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; },
3445
+ searchInputPlaceholder: '',
3446
+ createSearchChoicePosition: 'top',
3447
+ shouldFocusInput: function (instance) {
3448
+ // Attempt to detect touch devices
3449
+ var supportsTouchEvents = (('ontouchstart' in window) ||
3450
+ (navigator.msMaxTouchPoints > 0));
3451
+
3452
+ // Only devices which support touch events should be special cased
3453
+ if (!supportsTouchEvents) {
3454
+ return true;
3455
+ }
3456
+
3457
+ // Never focus the input if search is disabled
3458
+ if (instance.opts.minimumResultsForSearch < 0) {
3459
+ return false;
3460
+ }
3461
+
3462
+ return true;
3463
+ }
3464
+ };
3465
+
3466
+ $.fn.select2.locales = [];
3467
+
3468
+ $.fn.select2.locales['en'] = {
3469
+ formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; },
3470
+ formatNoMatches: function () { return "No matches found"; },
3471
+ formatAjaxError: function (jqXHR, textStatus, errorThrown) { return "Loading failed"; },
3472
+ formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); },
3473
+ formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); },
3474
+ formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },
3475
+ formatLoadMore: function (pageNumber) { return "Loading more results…"; },
3476
+ formatSearching: function () { return "Searching…"; },
3477
+ };
3478
+
3479
+ $.extend($.fn.select2.defaults, $.fn.select2.locales['en']);
3480
+
3481
+ $.fn.select2.ajaxDefaults = {
3482
+ transport: $.ajax,
3483
+ params: {
3484
+ type: "GET",
3485
+ cache: false,
3486
+ dataType: "json"
3487
+ }
3488
+ };
3489
+
3490
+ // exports
3491
+ window.Select2 = {
3492
+ query: {
3493
+ ajax: ajax,
3494
+ local: local,
3495
+ tags: tags
3496
+ }, util: {
3497
+ debounce: debounce,
3498
+ markMatch: markMatch,
3499
+ escapeMarkup: defaultEscapeMarkup,
3500
+ stripDiacritics: stripDiacritics
3501
+ }, "class": {
3502
+ "abstract": AbstractSelect2,
3503
+ "single": SingleSelect2,
3504
+ "multi": MultiSelect2
3505
+ }
3506
+ };
3507
+
3508
+ }(jQuery));
js/select2/select2.min.js ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Copyright 2014 Igor Vaynberg
3
+
4
+ Version: 3.5.1 Timestamp: Tue Jul 22 18:58:56 EDT 2014
5
+
6
+ This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
7
+ General Public License version 2 (the "GPL License"). You may choose either license to govern your
8
+ use of this software only upon the condition that you accept all of the terms of either the Apache
9
+ License or the GPL License.
10
+
11
+ You may obtain a copy of the Apache License and the GPL License at:
12
+
13
+ http://www.apache.org/licenses/LICENSE-2.0
14
+ http://www.gnu.org/licenses/gpl-2.0.html
15
+
16
+ Unless required by applicable law or agreed to in writing, software distributed under the Apache License
17
+ or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
18
+ either express or implied. See the Apache License and the GPL License for the specific language governing
19
+ permissions and limitations under the Apache License and the GPL License.
20
+ */
21
+ !function(a){"undefined"==typeof a.fn.each2&&a.extend(a.fn,{each2:function(b){for(var c=a([0]),d=-1,e=this.length;++d<e&&(c.context=c[0]=this[d])&&b.call(c[0],d,c)!==!1;);return this}})}(jQuery),function(a,b){"use strict";function n(b){var c=a(document.createTextNode(""));b.before(c),c.before(b),c.remove()}function o(a){function b(a){return m[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function p(a,b){for(var c=0,d=b.length;d>c;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo("body");var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(b,c){var d,e,f;if(null===b||b.length<1)return[];for(d=b.split(c),e=0,f=d.length;f>e;e+=1)d[e]=a.trim(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=i;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!h){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);h=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),h.attr("class","select2-sizer"),a("body").append(h)}return h.text(b.val()),h.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push("<span class='select2-match'>"),c.push(d(a.substring(e,e+f))),c.push("</span>"),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select2.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select2.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,h,j,k,i={x:0,y:0},c={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case c.LEFT:case c.RIGHT:case c.UP:case c.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case c.SHIFT:case c.CTRL:case c.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="<div class='select2-measure-scrollbar'></div>",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"A","\u01fa":"A","\u01cd":"A","\u0200":"A","\u0202":"A","\u1ea0":"A","\u1eac":"A","\u1eb6":"A","\u1e00":"A","\u0104":"A","\u023a":"A","\u2c6f":"A","\ua732":"AA","\xc6":"AE","\u01fc":"AE","\u01e2":"AE","\ua734":"AO","\ua736":"AU","\ua738":"AV","\ua73a":"AV","\ua73c":"AY","\u24b7":"B","\uff22":"B","\u1e02":"B","\u1e04":"B","\u1e06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24b8":"C","\uff23":"C","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\xc7":"C","\u1e08":"C","\u0187":"C","\u023b":"C","\ua73e":"C","\u24b9":"D","\uff24":"D","\u1e0a":"D","\u010e":"D","\u1e0c":"D","\u1e10":"D","\u1e12":"D","\u1e0e":"D","\u0110":"D","\u018b":"D","\u018a":"D","\u0189":"D","\ua779":"D","\u01f1":"DZ","\u01c4":"DZ","\u01f2":"Dz","\u01c5":"Dz","\u24ba":"E","\uff25":"E","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"E","\u1eba":"E","\u011a":"E","\u0204":"E","\u0206":"E","\u1eb8":"E","\u1ec6":"E","\u0228":"E","\u1e1c":"E","\u0118":"E","\u1e18":"E","\u1e1a":"E","\u0190":"E","\u018e":"E","\u24bb":"F","\uff26":"F","\u1e1e":"F","\u0191":"F","\ua77b":"F","\u24bc":"G","\uff27":"G","\u01f4":"G","\u011c":"G","\u1e20":"G","\u011e":"G","\u0120":"G","\u01e6":"G","\u0122":"G","\u01e4":"G","\u0193":"G","\ua7a0":"G","\ua77d":"G","\ua77e":"G","\u24bd":"H","\uff28":"H","\u0124":"H","\u1e22":"H","\u1e26":"H","\u021e":"H","\u1e24":"H","\u1e28":"H","\u1e2a":"H","\u0126":"H","\u2c67":"H","\u2c75":"H","\ua78d":"H","\u24be":"I","\uff29":"I","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"I","\u1e2e":"I","\u1ec8":"I","\u01cf":"I","\u0208":"I","\u020a":"I","\u1eca":"I","\u012e":"I","\u1e2c":"I","\u0197":"I","\u24bf":"J","\uff2a":"J","\u0134":"J","\u0248":"J","\u24c0":"K","\uff2b":"K","\u1e30":"K","\u01e8":"K","\u1e32":"K","\u0136":"K","\u1e34":"K","\u0198":"K","\u2c69":"K","\ua740":"K","\ua742":"K","\ua744":"K","\ua7a2":"K","\u24c1":"L","\uff2c":"L","\u013f":"L","\u0139":"L","\u013d":"L","\u1e36":"L","\u1e38":"L","\u013b":"L","\u1e3c":"L","\u1e3a":"L","\u0141":"L","\u023d":"L","\u2c62":"L","\u2c60":"L","\ua748":"L","\ua746":"L","\ua780":"L","\u01c7":"LJ","\u01c8":"Lj","\u24c2":"M","\uff2d":"M","\u1e3e":"M","\u1e40":"M","\u1e42":"M","\u2c6e":"M","\u019c":"M","\u24c3":"N","\uff2e":"N","\u01f8":"N","\u0143":"N","\xd1":"N","\u1e44":"N","\u0147":"N","\u1e46":"N","\u0145":"N","\u1e4a":"N","\u1e48":"N","\u0220":"N","\u019d":"N","\ua790":"N","\ua7a4":"N","\u01ca":"NJ","\u01cb":"Nj","\u24c4":"O","\uff2f":"O","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"O","\u022a":"O","\u1ece":"O","\u0150":"O","\u01d1":"O","\u020c":"O","\u020e":"O","\u01a0":"O","\u1edc":"O","\u1eda":"O","\u1ee0":"O","\u1ede":"O","\u1ee2":"O","\u1ecc":"O","\u1ed8":"O","\u01ea":"O","\u01ec":"O","\xd8":"O","\u01fe":"O","\u0186":"O","\u019f":"O","\ua74a":"O","\ua74c":"O","\u01a2":"OI","\ua74e":"OO","\u0222":"OU","\u24c5":"P","\uff30":"P","\u1e54":"P","\u1e56":"P","\u01a4":"P","\u2c63":"P","\ua750":"P","\ua752":"P","\ua754":"P","\u24c6":"Q","\uff31":"Q","\ua756":"Q","\ua758":"Q","\u024a":"Q","\u24c7":"R","\uff32":"R","\u0154":"R","\u1e58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1e5a":"R","\u1e5c":"R","\u0156":"R","\u1e5e":"R","\u024c":"R","\u2c64":"R","\ua75a":"R","\ua7a6":"R","\ua782":"R","\u24c8":"S","\uff33":"S","\u1e9e":"S","\u015a":"S","\u1e64":"S","\u015c":"S","\u1e60":"S","\u0160":"S","\u1e66":"S","\u1e62":"S","\u1e68":"S","\u0218":"S","\u015e":"S","\u2c7e":"S","\ua7a8":"S","\ua784":"S","\u24c9":"T","\uff34":"T","\u1e6a":"T","\u0164":"T","\u1e6c":"T","\u021a":"T","\u0162":"T","\u1e70":"T","\u1e6e":"T","\u0166":"T","\u01ac":"T","\u01ae":"T","\u023e":"T","\ua786":"T","\ua728":"TZ","\u24ca":"U","\uff35":"U","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"U","\u01db":"U","\u01d7":"U","\u01d5":"U","\u01d9":"U","\u1ee6":"U","\u016e":"U","\u0170":"U","\u01d3":"U","\u0214":"U","\u0216":"U","\u01af":"U","\u1eea":"U","\u1ee8":"U","\u1eee":"U","\u1eec":"U","\u1ef0":"U","\u1ee4":"U","\u1e72":"U","\u0172":"U","\u1e76":"U","\u1e74":"U","\u0244":"U","\u24cb":"V","\uff36":"V","\u1e7c":"V","\u1e7e":"V","\u01b2":"V","\ua75e":"V","\u0245":"V","\ua760":"VY","\u24cc":"W","\uff37":"W","\u1e80":"W","\u1e82":"W","\u0174":"W","\u1e86":"W","\u1e84":"W","\u1e88":"W","\u2c72":"W","\u24cd":"X","\uff38":"X","\u1e8a":"X","\u1e8c":"X","\u24ce":"Y","\uff39":"Y","\u1ef2":"Y","\xdd":"Y","\u0176":"Y","\u1ef8":"Y","\u0232":"Y","\u1e8e":"Y","\u0178":"Y","\u1ef6":"Y","\u1ef4":"Y","\u01b3":"Y","\u024e":"Y","\u1efe":"Y","\u24cf":"Z","\uff3a":"Z","\u0179":"Z","\u1e90":"Z","\u017b":"Z","\u017d":"Z","\u1e92":"Z","\u1e94":"Z","\u01b5":"Z","\u0224":"Z","\u2c7f":"Z","\u2c6b":"Z","\ua762":"Z","\u24d0":"a","\uff41":"a","\u1e9a":"a","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"a","\u01fb":"a","\u01ce":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1ead":"a","\u1eb7":"a","\u1e01":"a","\u0105":"a","\u2c65":"a","\u0250":"a","\ua733":"aa","\xe6":"ae","\u01fd":"ae","\u01e3":"ae","\ua735":"ao","\ua737":"au","\ua739":"av","\ua73b":"av","\ua73d":"ay","\u24d1":"b","\uff42":"b","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24d2":"c","\uff43":"c","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\xe7":"c","\u1e09":"c","\u0188":"c","\u023c":"c","\ua73f":"c","\u2184":"c","\u24d3":"d","\uff44":"d","\u1e0b":"d","\u010f":"d","\u1e0d":"d","\u1e11":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u018c":"d","\u0256":"d","\u0257":"d","\ua77a":"d","\u01f3":"dz","\u01c6":"dz","\u24d4":"e","\uff45":"e","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"e","\u1ebb":"e","\u011b":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u1e19":"e","\u1e1b":"e","\u0247":"e","\u025b":"e","\u01dd":"e","\u24d5":"f","\uff46":"f","\u1e1f":"f","\u0192":"f","\ua77c":"f","\u24d6":"g","\uff47":"g","\u01f5":"g","\u011d":"g","\u1e21":"g","\u011f":"g","\u0121":"g","\u01e7":"g","\u0123":"g","\u01e5":"g","\u0260":"g","\ua7a1":"g","\u1d79":"g","\ua77f":"g","\u24d7":"h","\uff48":"h","\u0125":"h","\u1e23":"h","\u1e27":"h","\u021f":"h","\u1e25":"h","\u1e29":"h","\u1e2b":"h","\u1e96":"h","\u0127":"h","\u2c68":"h","\u2c76":"h","\u0265":"h","\u0195":"hv","\u24d8":"i","\uff49":"i","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"i","\u1e2f":"i","\u1ec9":"i","\u01d0":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u012f":"i","\u1e2d":"i","\u0268":"i","\u0131":"i","\u24d9":"j","\uff4a":"j","\u0135":"j","\u01f0":"j","\u0249":"j","\u24da":"k","\uff4b":"k","\u1e31":"k","\u01e9":"k","\u1e33":"k","\u0137":"k","\u1e35":"k","\u0199":"k","\u2c6a":"k","\ua741":"k","\ua743":"k","\ua745":"k","\ua7a3":"k","\u24db":"l","\uff4c":"l","\u0140":"l","\u013a":"l","\u013e":"l","\u1e37":"l","\u1e39":"l","\u013c":"l","\u1e3d":"l","\u1e3b":"l","\u017f":"l","\u0142":"l","\u019a":"l","\u026b":"l","\u2c61":"l","\ua749":"l","\ua781":"l","\ua747":"l","\u01c9":"lj","\u24dc":"m","\uff4d":"m","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0271":"m","\u026f":"m","\u24dd":"n","\uff4e":"n","\u01f9":"n","\u0144":"n","\xf1":"n","\u1e45":"n","\u0148":"n","\u1e47":"n","\u0146":"n","\u1e4b":"n","\u1e49":"n","\u019e":"n","\u0272":"n","\u0149":"n","\ua791":"n","\ua7a5":"n","\u01cc":"nj","\u24de":"o","\uff4f":"o","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"o","\u022b":"o","\u1ecf":"o","\u0151":"o","\u01d2":"o","\u020d":"o","\u020f":"o","\u01a1":"o","\u1edd":"o","\u1edb":"o","\u1ee1":"o","\u1edf":"o","\u1ee3":"o","\u1ecd":"o","\u1ed9":"o","\u01eb":"o","\u01ed":"o","\xf8":"o","\u01ff":"o","\u0254":"o","\ua74b":"o","\ua74d":"o","\u0275":"o","\u01a3":"oi","\u0223":"ou","\ua74f":"oo","\u24df":"p","\uff50":"p","\u1e55":"p","\u1e57":"p","\u01a5":"p","\u1d7d":"p","\ua751":"p","\ua753":"p","\ua755":"p","\u24e0":"q","\uff51":"q","\u024b":"q","\ua757":"q","\ua759":"q","\u24e1":"r","\uff52":"r","\u0155":"r","\u1e59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1e5b":"r","\u1e5d":"r","\u0157":"r","\u1e5f":"r","\u024d":"r","\u027d":"r","\ua75b":"r","\ua7a7":"r","\ua783":"r","\u24e2":"s","\uff53":"s","\xdf":"s","\u015b":"s","\u1e65":"s","\u015d":"s","\u1e61":"s","\u0161":"s","\u1e67":"s","\u1e63":"s","\u1e69":"s","\u0219":"s","\u015f":"s","\u023f":"s","\ua7a9":"s","\ua785":"s","\u1e9b":"s","\u24e3":"t","\uff54":"t","\u1e6b":"t","\u1e97":"t","\u0165":"t","\u1e6d":"t","\u021b":"t","\u0163":"t","\u1e71":"t","\u1e6f":"t","\u0167":"t","\u01ad":"t","\u0288":"t","\u2c66":"t","\ua787":"t","\ua729":"tz","\u24e4":"u","\uff55":"u","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"u","\u01dc":"u","\u01d8":"u","\u01d6":"u","\u01da":"u","\u1ee7":"u","\u016f":"u","\u0171":"u","\u01d4":"u","\u0215":"u","\u0217":"u","\u01b0":"u","\u1eeb":"u","\u1ee9":"u","\u1eef":"u","\u1eed":"u","\u1ef1":"u","\u1ee5":"u","\u1e73":"u","\u0173":"u","\u1e77":"u","\u1e75":"u","\u0289":"u","\u24e5":"v","\uff56":"v","\u1e7d":"v","\u1e7f":"v","\u028b":"v","\ua75f":"v","\u028c":"v","\ua761":"vy","\u24e6":"w","\uff57":"w","\u1e81":"w","\u1e83":"w","\u0175":"w","\u1e87":"w","\u1e85":"w","\u1e98":"w","\u1e89":"w","\u2c73":"w","\u24e7":"x","\uff58":"x","\u1e8b":"x","\u1e8d":"x","\u24e8":"y","\uff59":"y","\u1ef3":"y","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"y","\u1ef7":"y","\u1e99":"y","\u1ef5":"y","\u01b4":"y","\u024f":"y","\u1eff":"y","\u24e9":"z","\uff5a":"z","\u017a":"z","\u1e91":"z","\u017c":"z","\u017e":"z","\u1e93":"z","\u1e95":"z","\u01b6":"z","\u0225":"z","\u0240":"z","\u2c6c":"z","\ua763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038a":"\u0399","\u03aa":"\u0399","\u038c":"\u039f","\u038e":"\u03a5","\u03ab":"\u03a5","\u038f":"\u03a9","\u03ac":"\u03b1","\u03ad":"\u03b5","\u03ae":"\u03b7","\u03af":"\u03b9","\u03ca":"\u03b9","\u0390":"\u03b9","\u03cc":"\u03bf","\u03cd":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u03c9":"\u03c9","\u03c2":"\u03c3"};j=a(document),g=function(){var a=1;return function(){return a++}}(),d=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,f=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&c.element.data("select2").destroy(),this.container=this.createContainer(),this.liveRegion=a("<span>",{role:"status","aria-live":"polite"}).addClass("select2-hidden-accessible").appendTo(document.body),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+g()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a("body"),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container).on("click.select2",A),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select2",this),this.dropdown.on("click",A),this.results=d=this.container.find(f),this.search=e=this.container.find("input.select2-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",f,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",f,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",f,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",f,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",f,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",f,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.nextSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),k=k||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select2"),d=this;this.close(),a.length&&a[0].detachEvent&&a.each(function(){this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.removeClass("select2-offscreen").removeData("select2").off(".select2").prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show()),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,f,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),c=a.extend({},{populateResults:function(d,e,f){var h,j=this.opts.id,k=this.liveRegion;h=function(d,e,l){var m,n,o,p,q,r,s,t,u,v;d=c.sortResults(d,e,f);var w=[];for(m=0,n=d.length;n>m;m+=1)o=d[m],q=o.disabled===!0,p=!q&&j(o)!==b,r=o.children&&o.children.length>0,s=a("<li></li>"),s.addClass("select2-results-dept-"+l),s.addClass("select2-result"),s.addClass(p?"select2-result-selectable":"select2-result-unselectable"),q&&s.addClass("select2-disabled"),r&&s.addClass("select2-result-with-children"),s.addClass(i.opts.formatResultCssClass(o)),s.attr("role","presentation"),t=a(document.createElement("div")),t.addClass("select2-result-label"),t.attr("id","select2-result-label-"+g()),t.attr("role","option"),v=c.formatResult(o,t,f,i.opts.escapeMarkup),v!==b&&(t.html(v),s.append(t)),r&&(u=a("<ul></ul>"),u.addClass("select2-result-sub"),h(o.children,u,l+1),s.append(u)),s.data("select2-data",o),w.push(s[0]);e.append(w),k.text(c.formatMatches(d.length))},h(e,d,0)}},a.fn.select2.defaults,c),"function"!=typeof c.id&&(f=c.id,c.id=function(a){return a[f]}),a.isArray(c.element.data("select2Tags"))){if("tags"in c)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+c.element.attr("id");c.tags=c.element.data("select2Tags")}if(e?(c.query=this.bind(function(a){var f,g,h,c={results:[],more:!1},e=a.term;h=function(b,c){var d;b.is("option")?a.matcher(e,b.text(),b)&&c.push(i.optionToData(b)):b.is("optgroup")&&(d=i.optionToData(b),b.children().each2(function(a,b){h(b,d.children)}),d.children.length>0&&c.push(d))},f=d.children(),this.getPlaceholder()!==b&&f.length>0&&(g=this.getPlaceholderOption(),g&&(f=f.not(g))),f.each2(function(a,b){h(b,c.results)}),a.callback(c)}),c.id=function(a){return a.id}):"query"in c||("ajax"in c?(h=c.element.data("ajax-url"),h&&h.length>0&&(c.ajax.url=h),c.query=G.call(c.element,c.ajax)):"data"in c?c.query=H(c.data):"tags"in c&&(c.query=I(c.tags),c.createSearchChoice===b&&(c.createSearchChoice=function(b){return{id:a.trim(b),text:a.trim(b)}}),c.initSelection===b&&(c.initSelection=function(b,d){var e=[];a(s(b.val(),c.separator)).each(function(){var b={id:this,text:this},d=c.tags;a.isFunction(d)&&(d=d()),a(d).each(function(){return r(this.id,b.id)?(b=this,!1):void 0}),e.push(b)}),d(e)}))),"function"!=typeof c.query)throw"query function not defined for Select2 "+c.element.attr("id");if("top"===c.createSearchChoicePosition)c.createSearchChoicePosition=function(a,b){a.unshift(b)};else if("bottom"===c.createSearchChoicePosition)c.createSearchChoicePosition=function(a,b){a.push(b)};else if("function"!=typeof c.createSearchChoicePosition)throw"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";return c},monitorSource:function(){var d,c=this.opts.element,e=this;c.on("change.select2",this.bind(function(){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),this._sync=this.bind(function(){var a=c.prop("disabled");a===b&&(a=!1),this.enable(!a);var d=c.prop("readonly");d===b&&(d=!1),this.readonly(d),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(K(this.opts.containerCssClass,this.opts.element)),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(this.opts.dropdownCssClass,this.opts.element))}),c.length&&c[0].attachEvent&&c.each(function(){this.attachEvent("onpropertychange",e._sync)}),d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,d!==b&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new d(function(b){a.each(b,e._sync)}),this.propertyObserver.observe(c.get(0),{attributes:!0,subtree:!1}))},triggerSelect:function(b){var c=a.Event("select2-selecting",{val:this.id(b),object:b,choice:b});return this.opts.element.trigger(c),!c.isDefaultPrevented()},triggerChange:function(b){b=b||{},b=a.extend({},b,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(b),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},isInterfaceEnabled:function(){return this.enabledInterface===!0},enableInterface:function(){var a=this._enabled&&!this._readonly,b=!a;return a===this.enabledInterface?!1:(this.container.toggleClass("select2-container-disabled",b),this.close(),this.enabledInterface=a,!0)},enable:function(a){a===b&&(a=!0),this._enabled!==a&&(this._enabled=a,this.opts.element.prop("disabled",!a),this.enableInterface())},disable:function(){this.enable(!1)},readonly:function(a){a===b&&(a=!1),this._readonly!==a&&(this._readonly=a,this.opts.element.prop("readonly",a),this.enableInterface())},opened:function(){return this.container?this.container.hasClass("select2-dropdown-open"):!1},positionDropdown:function(){var t,u,v,w,x,b=this.dropdown,c=this.container.offset(),d=this.container.outerHeight(!1),e=this.container.outerWidth(!1),f=b.outerHeight(!1),g=a(window),h=g.width(),i=g.height(),j=g.scrollLeft()+h,l=g.scrollTop()+i,m=c.top+d,n=c.left,o=l>=m+f,p=c.top-f>=g.scrollTop(),q=b.outerWidth(!1),r=j>=n+q,s=b.hasClass("select2-drop-above");s?(u=!0,!p&&o&&(v=!0,u=!1)):(u=!1,!o&&p&&(v=!0,u=!0)),v&&(b.hide(),c=this.container.offset(),d=this.container.outerHeight(!1),e=this.container.outerWidth(!1),f=b.outerHeight(!1),j=g.scrollLeft()+h,l=g.scrollTop()+i,m=c.top+d,n=c.left,q=b.outerWidth(!1),r=j>=n+q,b.show(),this.focusSearch()),this.opts.dropdownAutoWidth?(x=a(".select2-results",b)[0],b.addClass("select2-drop-auto-width"),b.css("width",""),q=b.outerWidth(!1)+(x.scrollHeight===x.clientHeight?0:k.width),q>e?e=q:q=e,f=b.outerHeight(!1),r=j>=n+q):this.container.removeClass("select2-drop-auto-width"),"static"!==this.body.css("position")&&(t=this.body.offset(),m-=t.top,n-=t.left),r||(n=c.left+this.container.outerWidth(!1)-q),w={left:n,width:e},u?(w.top=c.top-f,w.bottom="auto",this.container.addClass("select2-drop-above"),b.addClass("select2-drop-above")):(w.top=m,w.bottom="auto",this.container.removeClass("select2-drop-above"),b.removeClass("select2-drop-above")),w=a.extend(w,K(this.opts.dropdownCss,this.opts.element)),b.css(w)},shouldOpen:function(){var b;return this.opened()?!1:this._enabled===!1||this._readonly===!0?!1:(b=a.Event("select2-opening"),this.opts.element.trigger(b),!b.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(this.opening(),j.on("mousemove.select2Event",function(a){i.x=a.pageX,i.y=a.pageY}),!0):!1},opening:function(){var f,b=this.containerEventName,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.clearDropdownAlignmentPreference(),this.dropdown[0]!==this.body.children().last()[0]&&this.dropdown.detach().appendTo(this.body),f=a("#select2-drop-mask"),0==f.length&&(f=a(document.createElement("div")),f.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),f.hide(),f.appendTo(this.body),f.on("mousedown touchstart click",function(b){n(f);var d,c=a("#select2-drop");c.length>0&&(d=c.data("select2"),d.opts.selectOnBlur&&d.selectHighlighted({noFocus:!0}),d.close(),b.preventDefault(),b.stopPropagation())})),this.dropdown.prev()[0]!==f[0]&&this.dropdown.before(f),a("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),f.show(),this.positionDropdown(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active");var g=this;this.container.parents().add(window).each(function(){a(this).on(d+" "+c+" "+e,function(){g.opened()&&g.positionDropdown()})})},close:function(){if(this.opened()){var b=this.containerEventName,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.parents().add(window).each(function(){a(this).off(c).off(d).off(e)}),this.clearDropdownAlignmentPreference(),a("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"),this.results.empty(),j.off("mousemove.select2Event"),this.clearSearch(),this.search.removeClass("select2-active"),this.opts.element.trigger(a.Event("select2-close"))}},externalSearch:function(a){this.open(),this.search.val(a),this.updateResults(!1)},clearSearch:function(){},getMaximumSelectionSize:function(){return K(this.opts.maximumSelectionSize,this.opts.element)},ensureHighlightVisible:function(){var c,d,e,f,g,h,i,j,b=this.results;if(d=this.highlight(),!(0>d)){if(0==d)return b.scrollTop(0),void 0;c=this.findHighlightableChoices().find(".select2-result-label"),e=a(c[d]),j=(e.offset()||{}).top||0,f=j+e.outerHeight(!0),d===c.length-1&&(i=b.find("li.select2-more-results"),i.length>0&&(f=i.offset().top+i.outerHeight(!0))),g=b.offset().top+b.outerHeight(!0),f>g&&b.scrollTop(b.scrollTop()+(f-g)),h=j-b.offset().top,0>h&&"none"!=e.css("display")&&b.scrollTop(b.scrollTop()+h)}},findHighlightableChoices:function(){return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)")},moveHighlight:function(b){for(var c=this.findHighlightableChoices(),d=this.highlight();d>-1&&d<c.length;){d+=b;var e=a(c[d]);if(e.hasClass("select2-result-selectable")&&!e.hasClass("select2-disabled")&&!e.hasClass("select2-selected")){this.highlight(d);
22
+ break}}},highlight:function(b){var d,e,c=this.findHighlightableChoices();return 0===arguments.length?p(c.filter(".select2-highlighted")[0],c.get()):(b>=c.length&&(b=c.length-1),0>b&&(b=0),this.removeHighlight(),d=a(c[b]),d.addClass("select2-highlighted"),this.search.attr("aria-activedescendant",d.find(".select2-result-label").attr("id")),this.ensureHighlightVisible(),this.liveRegion.text(d.text()),e=d.data("select2-data"),e&&this.opts.element.trigger({type:"select2-highlight",val:this.id(e),choice:e}),void 0)},removeHighlight:function(){this.results.find(".select2-highlighted").removeClass("select2-highlighted")},touchMoved:function(){this._touchMoved=!0},clearTouchMoved:function(){this._touchMoved=!1},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(b){var c=a(b.target).closest(".select2-result-selectable");if(c.length>0&&!c.is(".select2-highlighted")){var d=this.findHighlightableChoices();this.highlight(d.index(c))}else 0==c.length&&this.removeHighlight()},loadMoreIfNeeded:function(){var c,a=this.results,b=a.find("li.select2-more-results"),d=this.resultsPage+1,e=this,f=this.search.val(),g=this.context;0!==b.length&&(c=b.offset().top-a.offset().top-a.height(),c<=this.opts.loadMorePadding&&(b.addClass("select2-active"),this.opts.query({element:this.opts.element,term:f,page:d,context:g,matcher:this.opts.matcher,callback:this.bind(function(c){e.opened()&&(e.opts.populateResults.call(this,a,c.results,{term:f,page:d,context:g}),e.postprocessResults(c,!1,!1),c.more===!0?(b.detach().appendTo(a).text(K(e.opts.formatLoadMore,e.opts.element,d+1)),window.setTimeout(function(){e.loadMoreIfNeeded()},10)):b.remove(),e.positionDropdown(),e.resultsPage=d,e.context=c.context,this.opts.element.trigger({type:"select2-loaded",items:c}))})})))},tokenize:function(){},updateResults:function(c){function m(){d.removeClass("select2-active"),h.positionDropdown(),e.find(".select2-no-results,.select2-selection-limit,.select2-searching").length?h.liveRegion.text(e.text()):h.liveRegion.text(h.opts.formatMatches(e.find(".select2-result-selectable").length))}function n(a){e.html(a),m()}var g,i,l,d=this.search,e=this.results,f=this.opts,h=this,j=d.val(),k=a.data(this.container,"select2-last-term");if((c===!0||!k||!r(j,k))&&(a.data(this.container,"select2-last-term",j),c===!0||this.showSearchInput!==!1&&this.opened())){l=++this.queryCount;var o=this.getMaximumSelectionSize();if(o>=1&&(g=this.data(),a.isArray(g)&&g.length>=o&&J(f.formatSelectionTooBig,"formatSelectionTooBig")))return n("<li class='select2-selection-limit'>"+K(f.formatSelectionTooBig,f.element,o)+"</li>"),void 0;if(d.val().length<f.minimumInputLength)return J(f.formatInputTooShort,"formatInputTooShort")?n("<li class='select2-no-results'>"+K(f.formatInputTooShort,f.element,d.val(),f.minimumInputLength)+"</li>"):n(""),c&&this.showSearch&&this.showSearch(!0),void 0;if(f.maximumInputLength&&d.val().length>f.maximumInputLength)return J(f.formatInputTooLong,"formatInputTooLong")?n("<li class='select2-no-results'>"+K(f.formatInputTooLong,f.element,d.val(),f.maximumInputLength)+"</li>"):n(""),void 0;f.formatSearching&&0===this.findHighlightableChoices().length&&n("<li class='select2-searching'>"+K(f.formatSearching,f.element)+"</li>"),d.addClass("select2-active"),this.removeHighlight(),i=this.tokenize(),i!=b&&null!=i&&d.val(i),this.resultsPage=1,f.query({element:f.element,term:d.val(),page:this.resultsPage,context:null,matcher:f.matcher,callback:this.bind(function(g){var i;if(l==this.queryCount){if(!this.opened())return this.search.removeClass("select2-active"),void 0;if(g.hasError!==b&&J(f.formatAjaxError,"formatAjaxError"))return n("<li class='select2-ajax-error'>"+K(f.formatAjaxError,f.element,g.jqXHR,g.textStatus,g.errorThrown)+"</li>"),void 0;if(this.context=g.context===b?null:g.context,this.opts.createSearchChoice&&""!==d.val()&&(i=this.opts.createSearchChoice.call(h,d.val(),g.results),i!==b&&null!==i&&h.id(i)!==b&&null!==h.id(i)&&0===a(g.results).filter(function(){return r(h.id(this),h.id(i))}).length&&this.opts.createSearchChoicePosition(g.results,i)),0===g.results.length&&J(f.formatNoMatches,"formatNoMatches"))return n("<li class='select2-no-results'>"+K(f.formatNoMatches,f.element,d.val())+"</li>"),void 0;e.empty(),h.opts.populateResults.call(this,e,g.results,{term:d.val(),page:this.resultsPage,context:null}),g.more===!0&&J(f.formatLoadMore,"formatLoadMore")&&(e.append("<li class='select2-more-results'>"+f.escapeMarkup(K(f.formatLoadMore,f.element,this.resultsPage))+"</li>"),window.setTimeout(function(){h.loadMoreIfNeeded()},10)),this.postprocessResults(g,c),m(),this.opts.element.trigger({type:"select2-loaded",items:g})}})})}},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){y(this.search)},selectHighlighted:function(a){if(this._touchMoved)return this.clearTouchMoved(),void 0;var b=this.highlight(),c=this.results.find(".select2-highlighted"),d=c.closest(".select2-result").data("select2-data");d?(this.highlight(b),this.onSelect(d,a)):a&&a.noFocus&&this.close()},getPlaceholder:function(){var a;return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder||((a=this.getPlaceholderOption())!==b?a.text():b)},getPlaceholderOption:function(){if(this.select){var c=this.select.children("option").first();if(this.opts.placeholderOption!==b)return"first"===this.opts.placeholderOption&&c||"function"==typeof this.opts.placeholderOption&&this.opts.placeholderOption(this.select);if(""===a.trim(c.text())&&""===c.val())return c}},initContainerWidth:function(){function c(){var c,d,e,f,g,h;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){if(c=this.opts.element.attr("style"),c!==b)for(d=c.split(";"),f=0,g=d.length;g>f;f+=1)if(h=d[f].replace(/\s/g,""),e=h.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i),null!==e&&e.length>=1)return e[1];return"resolve"===this.opts.width?(c=this.opts.element.css("width"),c.indexOf("%")>0?c:0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px"):null}return a.isFunction(this.opts.width)?this.opts.width():this.opts.width}var d=c.call(this);null!==d&&this.container.css("width",d)}}),e=O(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>"," <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>"," <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>","</a>","<label for='' class='select2-offscreen'></label>","<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />","<div class='select2-drop select2-display-none'>"," <div class='select2-search'>"," <label for='' class='select2-offscreen'></label>"," <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'"," aria-autocomplete='list' />"," </div>"," <ul class='select2-results' role='listbox'>"," </ul>","</div>"].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var c,d,e;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),c=this.search.get(0),c.createTextRange?(d=c.createTextRange(),d.collapse(!1),d.select()):c.setSelectionRange&&(e=this.search.val().length,c.setSelectionRange(e,e))),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,h,d=this.container,e=this.dropdown,f=g();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=d.find(".select2-choice"),this.focusser=d.find(".select2-focusser"),b.find(".select2-chosen").attr("id","select2-chosen-"+f),this.focusser.attr("aria-labelledby","select2-chosen-"+f),this.results.attr("id","select2-results-"+f),this.search.attr("aria-owns","select2-results-"+f),this.focusser.attr("id","s2id_autogen"+f),h=a("label[for='"+this.opts.element.attr("id")+"']"),this.focusser.prev().text(h.text()).attr("for",this.focusser.attr("id"));var i=this.opts.element.attr("title");this.opts.element.attr("title",i||h.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)return A(a),void 0;switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),A(a),void 0;case c.ENTER:return this.selectHighlighted(),A(a),void 0;case c.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case c.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==c.TAB&&!c.isControl(a)&&!c.isFunctionKey(a)&&a.which!==c.ESC){if(this.opts.openOnEnter===!1&&a.which===c.ENTER)return A(a),void 0;if(a.which==c.DOWN||a.which==c.UP||a.which==c.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==c.DELETE||a.which==c.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),e.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select2-data");if(c){var d=a.Event("select2-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select2-chosen").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.nextSearchTerm=c.opts.nextSearchTerm(a,c.search.val()))})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select2-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select2-chosen");this.selection.data("select2-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find("option").filter(function(){return this.selected}).each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(!a&&0!==a)return this.clear(c),void 0;if(this.opts.initSelection===b)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a){var c,d=!1;return 0===arguments.length?(c=this.selection.data("select2-data"),c==b&&(c=null),c):(arguments.length>1&&(d=arguments[1]),a?(c=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),d&&this.triggerChange({added:a,removed:c})):this.clear(d),void 0)}}),f=O(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html(["<ul class='select2-choices'>"," <li class='select2-search-field'>"," <label for='' class='select2-offscreen'></label>"," <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>"," </li>","</ul>","<div class='select2-drop select2-drop-multi select2-display-none'>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c<e.length;c++)for(var g=e[c],h=0;h<f.length;h++){var i=f[h];if(r(g,b.id(i))){a.push(i),f.splice(h,1);break}}d(a)}:a.noop})}),b},selectChoice:function(a){var b=this.container.find(".select2-search-choice-focus");b.length&&a&&a[0]==b[0]||(b.length&&this.opts.element.trigger("choice-deselected",b),b.removeClass("select2-search-choice-focus"),a&&a.length&&(this.close(),a.addClass("select2-search-choice-focus"),this.opts.element.trigger("choice-selected",a)))},destroy:function(){a("label[for='"+this.search.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"searchContainer","selection")},initContainer:function(){var d,b=".select2-choices";this.searchContainer=this.container.find(".select2-search-field"),this.selection=d=this.container.find(b);var e=this;this.selection.on("click",".select2-search-choice:not(.select2-locked)",function(){e.search[0].focus(),e.selectChoice(a(this))}),this.search.attr("id","s2id_autogen"+g()),this.search.prev().text(a("label[for='"+this.opts.element.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("input paste",this.bind(function(){this.search.attr("placeholder")&&0==this.search.val().length||this.isInterfaceEnabled()&&(this.opened()||this.open())})),this.search.attr("tabindex",this.elementTabIndex),this.keydowns=0,this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){++this.keydowns;var b=d.find(".select2-search-choice-focus"),e=b.prev(".select2-search-choice:not(.select2-locked)"),f=b.next(".select2-search-choice:not(.select2-locked)"),g=z(this.search);if(b.length&&(a.which==c.LEFT||a.which==c.RIGHT||a.which==c.BACKSPACE||a.which==c.DELETE||a.which==c.ENTER)){var h=b;return a.which==c.LEFT&&e.length?h=e:a.which==c.RIGHT?h=f.length?f:null:a.which===c.BACKSPACE?this.unselect(b.first())&&(this.search.width(10),h=e.length?e:f):a.which==c.DELETE?this.unselect(b.first())&&(this.search.width(10),h=f.length?f:null):a.which==c.ENTER&&(h=null),this.selectChoice(h),A(a),h&&h.length||this.open(),void 0}if((a.which===c.BACKSPACE&&1==this.keydowns||a.which==c.LEFT)&&0==g.offset&&!g.length)return this.selectChoice(d.find(".select2-search-choice:not(.select2-locked)").last()),A(a),void 0;if(this.selectChoice(null),this.opened())switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),A(a),void 0;case c.ENTER:return this.selectHighlighted(),A(a),void 0;case c.TAB:return this.selectHighlighted({noFocus:!0}),this.close(),void 0;case c.ESC:return this.cancel(a),A(a),void 0}if(a.which!==c.TAB&&!c.isControl(a)&&!c.isFunctionKey(a)&&a.which!==c.BACKSPACE&&a.which!==c.ESC){if(a.which===c.ENTER){if(this.opts.openOnEnter===!1)return;if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return}this.open(),(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)&&A(a),a.which===c.ENTER&&A(a)}}})),this.search.on("keyup",this.bind(function(){this.keydowns=0,this.resizeSearch()})),this.search.on("blur",this.bind(function(b){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.selectChoice(null),this.opened()||this.clearSearch(),b.stopImmediatePropagation(),this.opts.element.trigger(a.Event("select2-blur"))})),this.container.on("click",b,this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").length>0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){p(e.id(this),c)<0&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select2-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,c){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),c&&c.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,k,d=!c.locked,e=a("<li class='select2-search-choice'> <div></div> <a href='#' class='select2-search-choice-close' tabindex='-1'></a></li>"),f=a("<li class='select2-search-choice select2-locked'><div></div></li>"),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),j!=b&&g.find("div").replaceWith("<div>"+j+"</div>"),k=this.opts.formatSelectionCssClass(c,g.find("div")),k!=b&&g.addClass(k),d&&g.find(".select2-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select2-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select2-search-choice";if(d=b.data("select2-data")){var f=a.Event("select2-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select2-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));p(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select2-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("<li class='select2-no-results'>"+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"</li>")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){p(this,c)<0&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c<b.length;c++)for(var d=0;d<a.length;d++)r(this.opts.id(b[c]),this.opts.id(a[d]))&&(b.splice(c,1),c>0&&c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),void 0;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a.map(b,f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(f.buildChangeDetails(e,f.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select2=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select2["class"].multi:new window.Select2["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select2"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(a.text,c.term,e,d),e.join("")},formatSelection:function(a,c,d){return a?d(a.text):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select2.locales=[],a.fn.select2.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."
23
+ },formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select2.defaults,a.fn.select2.locales.en),a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":d,single:e,multi:f}}}}(jQuery);
js/select2/select2.png ADDED
Binary file
js/select2/select2x2.png ADDED
Binary file
languages/wp-security-audit-log.pot CHANGED
@@ -3,14 +3,14 @@ msgid ""
3
  msgstr ""
4
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: WP Security Audit Log\n"
6
- "POT-Creation-Date: 2018-11-15 07:18+0000\n"
7
- "PO-Revision-Date: 2018-11-15 07:18+0000\n"
8
  "Last-Translator: \n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 2.2\n"
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-Flags-xgettext: --add-comments=translators:\n"
16
  "X-Poedit-WPHeader: wp-security-audit-log.php\n"
@@ -21,428 +21,226 @@ msgstr ""
21
  "X-Poedit-SearchPath-0: .\n"
22
  "X-Poedit-SearchPathExcluded-0: *.js\n"
23
 
24
- #. translators: Event ID
25
- #: classes/AlertManager.php:256
26
- #, php-format
27
- msgid "Event with code %d has not be registered."
28
- msgstr ""
29
-
30
- #: classes/AlertManager.php:311
31
- #, php-format
32
- msgid "Event %s already registered with WP Security Audit Log."
33
- msgstr ""
34
-
35
- #: classes/AlertManager.php:346
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:349
42
- #, php-format
43
- msgid "%4$s to help you solve this issue."
44
- msgstr ""
45
-
46
- #: classes/AlertManager.php:351
47
- msgid "ERROR:"
48
- msgstr ""
49
-
50
- #: classes/AlertManager.php:353
51
- msgid "Contact us"
52
- msgstr ""
53
-
54
- #: classes/AuditLogListView.php:92
55
  msgid "No events so far."
56
  msgstr ""
57
 
58
- #: classes/AuditLogListView.php:143
59
  msgid "Show "
60
  msgstr ""
61
 
62
- #: classes/AuditLogListView.php:153
63
  msgid " Items"
64
  msgstr ""
65
 
66
- #: classes/AuditLogListView.php:169 classes/Views/AuditLog.php:420
67
- #: classes/Views/AuditLog.php:443
68
  msgid "All Sites"
69
  msgstr ""
70
 
71
- #: classes/AuditLogListView.php:193
72
  msgid "Live Database"
73
  msgstr ""
74
 
75
- #: classes/AuditLogListView.php:196
76
  msgid "Archive Database"
77
  msgstr ""
78
 
79
- #: classes/AuditLogListView.php:250 classes/Views/Settings.php:1012
80
- #: classes/WidgetManager.php:86
81
  msgid "User"
82
  msgstr ""
83
 
84
- #: classes/AuditLogListView.php:252
85
  msgid "Username"
86
  msgstr ""
87
 
88
- #: classes/AuditLogListView.php:257 classes/AuditLogListView.php:281
89
- #: classes/Views/Settings.php:1006
90
- msgid "Event ID"
91
  msgstr ""
92
 
93
- #: classes/AuditLogListView.php:258 classes/AuditLogListView.php:284
94
- #: classes/Views/Settings.php:1008 classes/Views/ToggleAlerts.php:289
95
  msgid "Severity"
96
  msgstr ""
97
 
98
- #: classes/AuditLogListView.php:259 classes/AuditLogListView.php:287
99
  msgid "Date"
100
  msgstr ""
101
 
102
- #: classes/AuditLogListView.php:261 classes/AuditLogListView.php:293
103
  msgid "Source IP"
104
  msgstr ""
105
 
106
- #: classes/AuditLogListView.php:266 classes/AuditLogListView.php:296
107
  msgid "Site"
108
  msgstr ""
109
 
110
- #: classes/AuditLogListView.php:269 classes/AuditLogListView.php:299
111
  msgid "Message"
112
  msgstr ""
113
 
114
- #: classes/AuditLogListView.php:350
115
  msgid "Click to toggle."
116
  msgstr ""
117
 
118
- #: classes/AuditLogListView.php:369
119
- msgid "Disable this type of events."
120
  msgstr ""
121
 
122
- #: classes/AuditLogListView.php:377
123
  msgid "Unknown error code."
124
  msgstr ""
125
 
126
- #: classes/AuditLogListView.php:381
127
- msgid "Critical"
128
- msgstr ""
129
-
130
- #: classes/AuditLogListView.php:383
131
- msgid "Warning"
132
- msgstr ""
133
-
134
- #: classes/AuditLogListView.php:385
135
- msgid "Notification"
136
  msgstr ""
137
 
138
- #: classes/AuditLogListView.php:395 classes/AuditLogListView.php:434
139
  msgid "Unknown"
140
  msgstr ""
141
 
142
- #: classes/AuditLogListView.php:419
143
- msgid "Show me all activity by this User"
144
- msgstr ""
145
-
146
- #: classes/AuditLogListView.php:438 classes/Views/Licensing.php:113
147
  #: classes/Views/Licensing.php:153
148
  msgid "Plugin"
149
  msgstr ""
150
 
151
- #: classes/AuditLogListView.php:442 defaults.php:347
152
  msgid "Plugins"
153
  msgstr ""
154
 
155
- #: classes/AuditLogListView.php:446
156
  msgid "Website Visitor"
157
  msgstr ""
158
 
159
- #: classes/AuditLogListView.php:450 classes/Views/ToggleAlerts.php:391
160
- #: classes/Views/ToggleAlerts.php:417 defaults.php:380
161
  msgid "System"
162
  msgstr ""
163
 
164
- #: classes/AuditLogListView.php:470 classes/AuditLogListView.php:483
165
  msgid "Show me all activity originating from this IP Address"
166
  msgstr ""
167
 
168
- #: classes/AuditLogListView.php:512
169
  msgid "View all details of this change"
170
  msgstr ""
171
 
172
- #: classes/AuditLogListView.php:513 classes/AuditLogListView.php:662
173
- #: classes/Settings.php:1606
174
  msgid "Alert Data Inspector"
175
  msgstr ""
176
 
177
- #: classes/AuditLogListView.php:614 classes/Settings.php:1550
178
- msgid "Download the log file"
179
- msgstr ""
180
-
181
- #: classes/AuditLogListView.php:634 classes/Settings.php:1570
182
  msgid "Download the log file."
183
  msgstr ""
184
 
185
- #: classes/AuditLogListView.php:642 classes/Settings.php:1578
186
  msgid "published"
187
  msgstr ""
188
 
189
- #. translators: Mailto link for support.
190
- #: classes/AuditLogListView.php:670 classes/Settings.php:1617
191
- #, php-format
192
- msgid "Contact us on %s for assistance"
193
- msgstr ""
194
-
195
- #: classes/AuditLogListView.php:868
196
- msgid "Select All"
197
- msgstr ""
198
-
199
- #: classes/Connector/wp-db-custom.php:207
200
- msgid "Error establishing a database connection"
201
- msgstr ""
202
-
203
- #. translators: 1: wp-config.php. 2: database host
204
- #: classes/Connector/wp-db-custom.php:211
205
- #, php-format
206
- msgid ""
207
- "This either means that the username and password information in your %1$s "
208
- "file is incorrect or we can&#8217;t contact the database server at %2$s. "
209
- "This could mean your host&#8217;s database server is down."
210
- msgstr ""
211
-
212
- #: classes/Connector/wp-db-custom.php:217
213
- msgid "Are you sure you have the correct username and password?"
214
- msgstr ""
215
-
216
- #: classes/Connector/wp-db-custom.php:218
217
- msgid "Are you sure that you have typed the correct hostname?"
218
- msgstr ""
219
-
220
- #: classes/Connector/wp-db-custom.php:219
221
- msgid "Are you sure that the database server is running?"
222
- msgstr ""
223
-
224
- #. translators: %s: support forums URL
225
- #: classes/Connector/wp-db-custom.php:224
226
- #, php-format
227
- msgid ""
228
- "If you&#8217;re unsure what these terms mean you should probably contact "
229
- "your host. If you still need help you can always visit the <a href=\"%s"
230
- "\">WordPress Support Forums</a>."
231
- msgstr ""
232
-
233
- #: classes/Connector/wp-db-custom.php:225
234
- msgid "https://wordpress.org/support/"
235
- msgstr ""
236
-
237
- #: classes/Loggers/Database.php:243 classes/Views/EmailNotifications.php:153
238
  #: classes/Views/EmailNotifications.php:185 classes/Views/ExternalDB.php:152
239
- #: classes/Views/ExternalDB.php:184 classes/Views/Help.php:188
240
- #: classes/Views/Help.php:239 classes/Views/LogInUsers.php:154
241
  #: classes/Views/LogInUsers.php:186 classes/Views/Reports.php:153
242
  #: classes/Views/Reports.php:185 classes/Views/Search.php:153
243
  #: classes/Views/Search.php:178
244
  msgid "Upgrade to Premium"
245
  msgstr ""
246
 
247
- #: classes/Loggers/Database.php:244 classes/Views/EmailNotifications.php:154
 
248
  #: classes/Views/EmailNotifications.php:186 classes/Views/ExternalDB.php:153
249
- #: classes/Views/ExternalDB.php:185 classes/Views/Help.php:240
250
  #: classes/Views/LogInUsers.php:155 classes/Views/LogInUsers.php:187
251
  #: classes/Views/Reports.php:154 classes/Views/Reports.php:186
252
  #: classes/Views/Search.php:154 classes/Views/Search.php:179
253
  msgid "More Information"
254
  msgstr ""
255
 
256
- #: classes/Sensors/Content.php:1284 classes/Sensors/Content.php:1292
257
- #: classes/Sensors/WooCommerce.php:599 classes/Sensors/WooCommerce.php:605
258
  msgid "Password Protected"
259
  msgstr ""
260
 
261
- #: classes/Sensors/Content.php:1286 classes/Sensors/Content.php:1294
262
  msgid "Public"
263
  msgstr ""
264
 
265
- #: classes/Sensors/Content.php:1288 classes/Sensors/Content.php:1296
266
  msgid "Private"
267
  msgstr ""
268
 
269
- #: classes/Sensors/WooCommerce.php:1272
270
  msgid "In stock"
271
  msgstr ""
272
 
273
- #: classes/Sensors/WooCommerce.php:1274
274
  msgid "Out of stock"
275
  msgstr ""
276
 
277
- #: classes/Settings.php:436
278
  msgid "This function is deprecated"
279
  msgstr ""
280
 
281
  #: classes/Views/AuditLog.php:78
282
  msgid ""
283
- "Get instantly alerted of important changes via email, do text based searches "
284
- "and filter results, generate reports, see who is logged in and more!"
285
- msgstr ""
286
-
287
- #: classes/Views/AuditLog.php:79
288
- msgid "Upgrade to premium to unlock these powerful activity log features."
289
- msgstr ""
290
-
291
- #: classes/Views/AuditLog.php:82
292
- msgid ""
293
- "Instant email notifications, search & filters, reports, users sessions "
294
- "management, integration tools and more!"
295
- msgstr ""
296
-
297
- #: classes/Views/AuditLog.php:83
298
- msgid ""
299
- "Upgrade to unlock these powerful features and gain more from your activity "
300
- "logs."
301
- msgstr ""
302
-
303
- #: classes/Views/AuditLog.php:86
304
- msgid ""
305
  "See who is logged in to your WordPress, create user productivity reports, "
306
  "get alerted via email of important changes and more!"
307
  msgstr ""
308
 
309
- #: classes/Views/AuditLog.php:87
310
  msgid ""
311
  "Unlock these powerful features and much more with the premium edition of WP "
312
  "Security Audit Log."
313
  msgstr ""
314
 
315
- #: classes/Views/AuditLog.php:150
316
- msgid "UPGRADE"
317
  msgstr ""
318
 
319
- #: classes/Views/AuditLog.php:152
320
- msgid "Tell me more"
321
- msgstr ""
322
-
323
- #: classes/Views/AuditLog.php:153
324
- msgid "Dismiss the banner"
325
- msgstr ""
326
-
327
- #: classes/Views/AuditLog.php:181
328
  msgid ""
329
  "There are connectivity issues with the database where the WordPress activity "
330
  "log is stored. The logs will be temporary buffered in the WordPress database "
331
  "until the connection is fully restored."
332
  msgstr ""
333
 
334
- #: classes/Views/AuditLog.php:198
335
- msgid ""
336
- "Help us improve WP Security Audit Log! Opt-in to sending us diagnostic non-"
337
- "sensitive data about your plugin usage (<strong>no activity log data is "
338
- "sent</strong>) and subscribe to our newsletter."
339
- msgstr ""
340
-
341
- #: classes/Views/AuditLog.php:201
342
- msgid "Opt-In"
343
- msgstr ""
344
-
345
- #: classes/Views/AuditLog.php:203
346
- msgid "Learn More"
347
- msgstr ""
348
-
349
- #: classes/Views/AuditLog.php:205 classes/Views/AuditLog.php:384
350
- #: classes/Views/Settings.php:465 classes/Views/Settings.php:492
351
- #: classes/Views/Settings.php:558 classes/Views/Settings.php:596
352
- #: classes/Views/Settings.php:1076 classes/Views/Settings.php:1144
353
- #: classes/Views/Settings.php:1790 classes/Views/Settings.php:1853
354
- #: classes/Views/Settings.php:1881 classes/Views/Settings.php:1896
355
- #: classes/Views/Settings.php:1906 classes/Views/SetupWizard.php:520
356
- msgid "No"
357
- msgstr ""
358
-
359
- #: classes/Views/AuditLog.php:245 classes/Views/AuditLog.php:261
360
  msgid "Audit Log Viewer"
361
  msgstr ""
362
 
363
- #: classes/Views/AuditLog.php:342 classes/Views/Licensing.php:82
364
- #: classes/Views/Settings.php:328 classes/Views/ToggleAlerts.php:68
365
  msgid "You do not have sufficient permissions to access this page."
366
  msgstr ""
367
 
368
- #: classes/Views/AuditLog.php:380
369
- msgid ""
370
- "Thank you very much for using the WP Security Audit Log plugin. We have "
371
- "created a wizard to ease the process of configuring the plugin so you can "
372
- "get the best out of it. Would you like to run the wizard?"
373
- msgstr ""
374
-
375
- #: classes/Views/AuditLog.php:383 classes/Views/Settings.php:460
376
- #: classes/Views/Settings.php:487 classes/Views/Settings.php:528
377
- #: classes/Views/Settings.php:586 classes/Views/Settings.php:1070
378
- #: classes/Views/Settings.php:1137 classes/Views/Settings.php:1785
379
- #: classes/Views/Settings.php:1846 classes/Views/Settings.php:1874
380
- #: classes/Views/Settings.php:1895 classes/Views/Settings.php:1905
381
- #: classes/Views/SetupWizard.php:525
382
- msgid "Yes"
383
  msgstr ""
384
 
385
- #: classes/Views/AuditLog.php:419 classes/Views/AuditLog.php:442
386
  msgid "Please enter the number of alerts you would like to see on one page:"
387
  msgstr ""
388
 
389
- #: classes/Views/AuditLog.php:421 classes/Views/AuditLog.php:444
390
  msgid "No Results"
391
  msgstr ""
392
 
393
- #: classes/Views/AuditLog.php:628
394
  msgid "No users found."
395
  msgstr ""
396
 
397
- #: classes/Views/AuditLog.php:631 classes/Views/AuditLog.php:708
398
- #: classes/Views/AuditLog.php:734 classes/Views/AuditLog.php:1024
399
- #: classes/Views/Licensing.php:90 classes/Views/Settings.php:238
400
- #: classes/Views/Settings.php:324 classes/Views/Settings.php:2052
401
- #: classes/Views/Settings.php:2080 classes/Views/Settings.php:2110
402
- #: classes/Views/Settings.php:2149 classes/Views/Settings.php:2151
403
- #: classes/Views/Settings.php:2153 classes/Views/Settings.php:2260
404
- #: classes/Views/Settings.php:2262 classes/Views/Settings.php:2264
405
- #: classes/Views/Settings.php:2354 classes/Views/Settings.php:2421
406
- #: classes/Views/SetupWizard.php:81
407
- msgid "Nonce verification failed."
408
- msgstr ""
409
-
410
- #: classes/Views/AuditLog.php:650
411
  msgid "Log file does not exist."
412
  msgstr ""
413
 
414
- #: classes/Views/AuditLog.php:699
415
  msgid "Request to get log file failed."
416
  msgstr ""
417
 
418
- #: classes/Views/AuditLog.php:774
419
- msgid "Freemius opt choice selected."
420
- msgstr ""
421
-
422
- #: classes/Views/AuditLog.php:781
423
- msgid "Freemius opt choice not found."
424
- msgstr ""
425
-
426
- #: classes/Views/AuditLog.php:938
427
- msgid "WordPress Activity Log"
428
- msgstr ""
429
-
430
- #: classes/Views/AuditLog.php:939
431
- msgid ""
432
- "When a user makes a change on your website the plugin will keep a record of "
433
- "that event here. Right now there is nothing because this is a new install."
434
- msgstr ""
435
-
436
- #: classes/Views/AuditLog.php:940
437
- msgid "Thank you for using WP Security Audit Log"
438
- msgstr ""
439
-
440
- #: classes/Views/AuditLog.php:961
441
- msgid "Error: You do not have sufficient permissions to exclude this URL."
442
- msgstr ""
443
-
444
- #: classes/Views/AuditLog.php:1007
445
- msgid "You do not have sufficient permissions to dismiss this notice."
446
  msgstr ""
447
 
448
  #: classes/Views/EmailNotifications.php:28
@@ -539,7 +337,7 @@ msgstr ""
539
 
540
  #: classes/Views/ExternalDB.php:121
541
  msgid ""
542
- "Configure archiving rules to archive old events in an archiving database,"
543
  msgstr ""
544
 
545
  #: classes/Views/ExternalDB.php:167 classes/Views/ExternalDB.php:168
@@ -555,19 +353,14 @@ msgid ""
555
  msgstr ""
556
 
557
  #: classes/Views/Help.php:30 classes/Views/Help.php:44
558
- #: classes/Views/Help.php:86
559
  msgid "Help"
560
  msgstr ""
561
 
562
- #: classes/Views/Help.php:88 classes/Views/Help.php:165
563
- msgid "System Info"
564
- msgstr ""
565
-
566
- #: classes/Views/Help.php:97
567
  msgid "Getting Started"
568
  msgstr ""
569
 
570
- #: classes/Views/Help.php:99
571
  msgid ""
572
  "Getting started with WP Security Audit Log is really easy; once the plugin "
573
  "is installed it will automatically keep a log of everything that is "
@@ -575,126 +368,126 @@ msgid ""
575
  "video below for a quick overview of the plugin."
576
  msgstr ""
577
 
578
- #: classes/Views/Help.php:108
579
  msgid "Plugin Support"
580
  msgstr ""
581
 
582
- #: classes/Views/Help.php:110
583
  msgid ""
584
  "Have you encountered or noticed any issues while using WP Security Audit Log "
585
  "plugin?"
586
  msgstr ""
587
 
588
- #: classes/Views/Help.php:111
589
  msgid ""
590
  "Or you want to report something to us? Click any of the options below to "
591
  "post on the plugin's forum or contact our support directly."
592
  msgstr ""
593
 
594
- #: classes/Views/Help.php:113
595
  msgid "Free Support Forum"
596
  msgstr ""
597
 
598
- #: classes/Views/Help.php:115
599
  msgid "Free Support Email"
600
  msgstr ""
601
 
602
- #: classes/Views/Help.php:121
603
  msgid "Plugin Documentation"
604
  msgstr ""
605
 
606
- #: classes/Views/Help.php:123
607
  msgid ""
608
  "For more technical information about the WP Security Audit Log plugin please "
609
  "visit the plugin’s knowledge base."
610
  msgstr ""
611
 
612
- #: classes/Views/Help.php:124
613
  msgid ""
614
- "Refer to the list of WordPress security events for a complete list of Events "
615
  "and IDs that the plugin uses to keep a log of all the changes in the "
616
  "WordPress audit log."
617
  msgstr ""
618
 
619
- #: classes/Views/Help.php:126
620
  msgid "Plugin Website"
621
  msgstr ""
622
 
623
- #: classes/Views/Help.php:128
624
  msgid "Knowledge Base"
625
  msgstr ""
626
 
627
- #: classes/Views/Help.php:130
628
- msgid "List of WordPress Security Events"
629
  msgstr ""
630
 
631
- #: classes/Views/Help.php:136
632
  msgid "Rate WP Security Audit Log"
633
  msgstr ""
634
 
635
- #: classes/Views/Help.php:138
636
  msgid ""
637
  "We work really hard to deliver a plugin that enables you to keep a record of "
638
  "all the changes that are happening on your WordPress."
639
  msgstr ""
640
 
641
- #: classes/Views/Help.php:139
642
  msgid ""
643
  "It takes thousands of man-hours every year and endless amount of dedication "
644
  "to research, develop and maintain the free edition of WP Security Audit Log."
645
  msgstr ""
646
 
647
- #: classes/Views/Help.php:140
648
  msgid ""
649
  "Therefore if you like what you see, and find WP Security Audit Log useful we "
650
  "ask you nothing more than to please rate our plugin."
651
  msgstr ""
652
 
653
- #: classes/Views/Help.php:141
654
  msgid "We appreciate every star!"
655
  msgstr ""
656
 
657
- #: classes/Views/Help.php:151
658
  msgid "Rate Plugin"
659
  msgstr ""
660
 
661
- #: classes/Views/Help.php:192
662
  msgid "See who is logged in"
663
  msgstr ""
664
 
665
- #: classes/Views/Help.php:193
666
  msgid "And remotely terminate sessions"
667
  msgstr ""
668
 
669
- #: classes/Views/Help.php:196
670
  msgid "Generate reports"
671
  msgstr ""
672
 
673
- #: classes/Views/Help.php:197
674
  msgid "Or configure automated email reports"
675
  msgstr ""
676
 
677
- #: classes/Views/Help.php:200
678
  msgid "Configure email notifications"
679
  msgstr ""
680
 
681
- #: classes/Views/Help.php:201
682
  msgid "Get instantly notified of important changes"
683
  msgstr ""
684
 
685
- #: classes/Views/Help.php:204
686
  msgid "Add Search"
687
  msgstr ""
688
 
689
- #: classes/Views/Help.php:205
690
  msgid "Easily track down suspicious behaviour"
691
  msgstr ""
692
 
693
- #: classes/Views/Help.php:208
694
  msgid "Integrate & Centralise"
695
  msgstr ""
696
 
697
- #: classes/Views/Help.php:209
698
  msgid "Export the logs to your centralised logging system"
699
  msgstr ""
700
 
@@ -702,12 +495,12 @@ msgstr ""
702
  msgid "Licensing"
703
  msgstr ""
704
 
705
- #: classes/Views/Licensing.php:96 classes/Views/Settings.php:335
706
  #: classes/Views/ToggleAlerts.php:92
707
  msgid "Settings have been saved."
708
  msgstr ""
709
 
710
- #: classes/Views/Licensing.php:101 classes/Views/Settings.php:340
711
  #: classes/Views/ToggleAlerts.php:98
712
  msgid "Error: "
713
  msgstr ""
@@ -867,99 +660,117 @@ msgid ""
867
  "to fine tune the search results."
868
  msgstr ""
869
 
870
- #: classes/Views/Settings.php:77
871
- msgid "General"
872
  msgstr ""
873
 
874
- #: classes/Views/Settings.php:83
875
- msgid "Activity Log"
876
  msgstr ""
877
 
878
- #: classes/Views/Settings.php:89
879
- msgid "File Integrity Scan"
880
  msgstr ""
881
 
882
- #: classes/Views/Settings.php:95 classes/Views/SetupWizard.php:148
883
  msgid "Exclude Objects"
884
  msgstr ""
885
 
886
- #: classes/Views/Settings.php:101
887
- msgid "Advanced Settings"
888
  msgstr ""
889
 
890
- #: classes/Views/Settings.php:142 classes/Views/Settings.php:156
891
- #: classes/Views/ToggleAlerts.php:403 classes/Views/ToggleAlerts.php:419
892
- msgid "Settings"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
893
  msgstr ""
894
 
895
- #: classes/Views/Settings.php:211
896
- msgid "Unknown settings tab."
897
  msgstr ""
898
 
899
- #: classes/Views/Settings.php:223 classes/Views/Settings.php:2442
900
- #: classes/Views/Settings.php:2471 classes/Views/SetupWizard.php:66
901
- msgid "Access Denied."
902
  msgstr ""
903
 
904
- #: classes/Views/Settings.php:248 classes/Views/SetupWizard.php:91
905
- msgid "Invalid input."
906
  msgstr ""
907
 
908
- #: classes/Views/Settings.php:348
909
- msgid "Old data successfully purged."
 
 
 
 
 
910
  msgstr ""
911
 
912
- #: classes/Views/Settings.php:354
913
- msgid "No data is old enough to be purged."
914
  msgstr ""
915
 
916
- #: classes/Views/Settings.php:438
917
  msgid ""
918
- "Need help with setting up the plugin to meet your requirements? <a href="
919
- "\"https://www.wpsecurityauditlog.com/contact/\" target=\"_blank\">Schedule a "
920
- "20 minutes consultation and setup call</a> with our experts for just $50."
921
  msgstr ""
922
 
923
- #: classes/Views/Settings.php:441
924
- msgid "Display latest events widget in dashboard & Admin bar"
925
  msgstr ""
926
 
927
- #. translators: Max number of dashboard widget alerts.
928
- #: classes/Views/Settings.php:446
929
- #, php-format
930
  msgid ""
931
- "The events widget displays the latest %d security events in the dashboard "
932
- "and the admin bar notification displays the latest event."
933
  msgstr ""
934
 
935
- #: classes/Views/Settings.php:454
936
- msgid "Dashboard Widget"
937
  msgstr ""
938
 
939
- #: classes/Views/Settings.php:475
940
- msgid "Admin Bar Notification"
941
  msgstr ""
942
 
943
- #: classes/Views/Settings.php:478
944
- msgid "Admin Bar Notification (Premium)"
945
  msgstr ""
946
 
947
- #: classes/Views/Settings.php:502
948
- msgid "Add user notification on the WordPress login page"
 
 
949
  msgstr ""
950
 
951
- #: classes/Views/Settings.php:504
952
  msgid ""
953
- "Many compliance regulations (such as the GDRP) require website "
954
- "administrators to tell the users of their website that all the changes they "
955
- "do when logged in are being logged."
956
  msgstr ""
957
 
958
- #: classes/Views/Settings.php:509
959
  msgid "Login Page Notification"
960
  msgstr ""
961
 
962
- #: classes/Views/Settings.php:534 wp-security-audit-log.php:1348
963
  msgid ""
964
  "For security and auditing purposes, a record of all of your logged-in "
965
  "actions and changes within the WordPress dashboard will be recorded in an "
@@ -968,4562 +779,3297 @@ msgid ""
968
  "IP address where you accessed this site from."
969
  msgstr ""
970
 
971
- #: classes/Views/Settings.php:552
972
- msgid "<strong>Note: </strong>"
973
- msgstr ""
974
-
975
- #: classes/Views/Settings.php:552
976
  msgid ""
977
- "The only HTML code allowed in the login page notification is for links ( < a "
978
- "href >< /a > )."
 
979
  msgstr ""
980
 
981
- #: classes/Views/Settings.php:568
982
- msgid "Is your website running behind a firewall or reverse proxy?"
983
  msgstr ""
984
 
985
- #. translators: Learn more link.
986
- #: classes/Views/Settings.php:573
987
- #, php-format
988
  msgid ""
989
- "If your website is running behind a firewall set this option to yes so the "
990
- "plugin retrieves the end user’s IP address from the proxy header - %s."
991
  msgstr ""
992
 
993
- #: classes/Views/Settings.php:574
994
- msgid "learn more"
995
  msgstr ""
996
 
997
- #: classes/Views/Settings.php:581
998
- msgid "Reverse Proxy / Firewall Options"
999
  msgstr ""
1000
 
1001
- #: classes/Views/Settings.php:591
1002
  msgid ""
1003
- "Filter internal IP addresses from the proxy headers. Enable this option only "
1004
- "if you are\tare still seeing the internal IP addresses of the firewall or "
1005
- "proxy."
1006
- msgstr ""
1007
-
1008
- #: classes/Views/Settings.php:607
1009
- msgid "Who can change the plugin settings?"
1010
  msgstr ""
1011
 
1012
- #: classes/Views/Settings.php:609
1013
- msgid ""
1014
- "By default only users with administrator or super administrator (multisite) "
1015
- "roles can change the settings of the plugin. Though you can change these "
1016
- "privileges from this section."
1017
  msgstr ""
1018
 
1019
- #: classes/Views/Settings.php:614
1020
- msgid "Restrict Plugin Access"
1021
  msgstr ""
1022
 
1023
- #: classes/Views/Settings.php:620
1024
- msgid "Only me"
 
 
1025
  msgstr ""
1026
 
1027
- #: classes/Views/Settings.php:625
1028
- msgid "Only administrators"
1029
  msgstr ""
1030
 
1031
- #: classes/Views/Settings.php:630
1032
- msgid "All these users or users with these roles"
1033
  msgstr ""
1034
 
1035
- #: classes/Views/Settings.php:634
1036
  msgid ""
1037
- "Specify the username or the users which can change the plugin settings. You "
1038
- "can also specify roles."
1039
  msgstr ""
1040
 
1041
- #: classes/Views/Settings.php:666
1042
- msgid "Allow other users to view the activity log"
1043
  msgstr ""
1044
 
1045
- #: classes/Views/Settings.php:668
1046
  msgid ""
1047
- "By default only users with administrator and super administrator (multisite) "
1048
- "role can view the WordPress activity log. Though you can allow other users "
1049
- "with no admin role to view the events."
1050
- msgstr ""
1051
-
1052
- #: classes/Views/Settings.php:673
1053
- msgid "Can View Events"
1054
  msgstr ""
1055
 
1056
- #: classes/Views/Settings.php:681
1057
  msgid ""
1058
- "Specify the username or the users which do not have an admin role but can "
1059
- "also see the WordPress activity role. You can also specify roles."
1060
  msgstr ""
1061
 
1062
- #: classes/Views/Settings.php:707
1063
- msgid "Which email address should the plugin use as a from address?"
1064
  msgstr ""
1065
 
1066
- #: classes/Views/Settings.php:709
1067
- msgid ""
1068
- "By default when the plugin sends an email notification it uses the email "
1069
- "address specified in this website’s general settings. Though you can change "
1070
- "the email address and display name from this section."
1071
  msgstr ""
1072
 
1073
- #: classes/Views/Settings.php:714
1074
- msgid "From Email & Name"
1075
  msgstr ""
1076
 
1077
- #: classes/Views/Settings.php:720
1078
- msgid "Use the email address from the WordPress general settings"
1079
  msgstr ""
1080
 
1081
- #: classes/Views/Settings.php:725
1082
- msgid "Use another email address"
1083
  msgstr ""
1084
 
1085
- #: classes/Views/Settings.php:729
1086
- msgid "Email Address"
1087
  msgstr ""
1088
 
1089
- #: classes/Views/Settings.php:734
1090
- msgid "Display Name"
1091
  msgstr ""
1092
 
1093
- #: classes/Views/Settings.php:745
1094
- msgid "Do you want to hide the plugin from the list of installed plugins?"
1095
  msgstr ""
1096
 
1097
- #: classes/Views/Settings.php:747
1098
- msgid ""
1099
- "By default all installed plugins are listed in the plugins page. If you do "
1100
- "not want other administrators to see that you installed this plugin set this "
1101
- "option to Yes so the WP Security Audit Log is not listed as an installed "
1102
- "plugin on this website."
1103
  msgstr ""
1104
 
1105
- #: classes/Views/Settings.php:752
1106
- msgid "Hide Plugin in Plugins Page"
1107
  msgstr ""
1108
 
1109
- #: classes/Views/Settings.php:757
1110
- msgid "Yes, hide the plugin from the list of installed plugins"
 
1111
  msgstr ""
1112
 
1113
- #: classes/Views/Settings.php:762
1114
- msgid "No, do not hide the plugin"
1115
  msgstr ""
1116
 
1117
- #: classes/Views/Settings.php:824
1118
- msgid ""
1119
- "For how long do you want to keep the activity log events (Retention "
1120
- "settings) ?"
1121
  msgstr ""
1122
 
1123
- #: classes/Views/Settings.php:827
1124
- msgid ""
1125
- "The plugin uses an efficient way to store the activity log data in the "
1126
- "WordPress database, though the more data you keep the more disk space will "
1127
- "be required. "
1128
  msgstr ""
1129
 
1130
- #: classes/Views/Settings.php:828
1131
- msgid ""
1132
- "<a href=\"https://www.wpsecurityauditlog.com/pricing/\" target=\"_blank"
1133
- "\">Upgrade to Premium</a> to store the activity log data in an external "
1134
- "database."
1135
  msgstr ""
1136
 
1137
- #. translators: 1: Archive page link tag. 2: Link closing tag.
1138
- #: classes/Views/Settings.php:842
1139
- #, php-format
1140
- msgid ""
1141
- "Retention settings moved to %1$s archiving settings %2$s because archiving "
1142
- "is enabled"
1143
  msgstr ""
1144
 
1145
- #: classes/Views/Settings.php:849
1146
- msgid "Audit Log Retention"
1147
  msgstr ""
1148
 
1149
- #: classes/Views/Settings.php:855
1150
- msgid "Keep all data"
1151
  msgstr ""
1152
 
1153
- #: classes/Views/Settings.php:882
1154
- msgid "Delete events older than"
1155
  msgstr ""
1156
 
1157
- #: classes/Views/Settings.php:889
1158
- msgid "Months"
1159
  msgstr ""
1160
 
1161
- #: classes/Views/Settings.php:890
1162
- msgid "Years"
1163
  msgstr ""
1164
 
1165
- #: classes/Views/Settings.php:898
1166
- msgid "The next scheduled purging of activity log data that is older than "
1167
  msgstr ""
1168
 
1169
- #: classes/Views/Settings.php:905
1170
- msgid "You can run the purging process now by clicking the button below."
 
 
1171
  msgstr ""
1172
 
1173
- #: classes/Views/Settings.php:909
1174
- msgid "Purge Old Data"
1175
  msgstr ""
1176
 
1177
- #: classes/Views/Settings.php:920
1178
- msgid "What timestamp you would like to see in the WordPress activity log?"
1179
  msgstr ""
1180
 
1181
- #: classes/Views/Settings.php:921
1182
  msgid ""
1183
- "Note that the WordPress' timezone might be different from that configured on "
1184
- "the server so when you switch from UTC to WordPress timezone or vice versa "
1185
- "you might notice a big difference."
1186
  msgstr ""
1187
 
1188
- #: classes/Views/Settings.php:925
1189
- msgid "Events Timestamp"
1190
  msgstr ""
1191
 
1192
- #: classes/Views/Settings.php:945
1193
- msgid "UTC"
 
 
 
1194
  msgstr ""
1195
 
1196
- #: classes/Views/Settings.php:951
1197
- msgid "Timezone configured on this WordPress website"
1198
  msgstr ""
1199
 
1200
- #: classes/Views/Settings.php:961
1201
- msgid ""
1202
- "What user information should be displayed in the WordPress activity log?"
1203
  msgstr ""
1204
 
1205
- #: classes/Views/Settings.php:962
1206
  msgid ""
1207
- "Usernames might not be the same as a user's first and last name so it can be "
1208
- "difficult to recognize whose user was that did a change. When there is no "
1209
- "first & last name or public display name configured the plugin will revert "
1210
- "back to the WordPress username."
1211
  msgstr ""
1212
 
1213
- #: classes/Views/Settings.php:966
1214
- msgid "User Information in Audit Log"
1215
  msgstr ""
1216
 
1217
- #: classes/Views/Settings.php:972
1218
- msgid "WordPress Username"
 
 
1219
  msgstr ""
1220
 
1221
- #: classes/Views/Settings.php:977
1222
- msgid "First Name & Last Name"
1223
  msgstr ""
1224
 
1225
- #: classes/Views/Settings.php:982
1226
- msgid "Configured Public Display Name"
1227
  msgstr ""
1228
 
1229
- #: classes/Views/Settings.php:992
1230
- msgid "Select the columns to be displayed in the WordPress activity log"
1231
  msgstr ""
1232
 
1233
- #: classes/Views/Settings.php:993
1234
  msgid ""
1235
- "When you deselect a column it won’t be shown in the activity log viewer but "
1236
- "the data will still be recorded by the plugin, so when you select it again "
1237
- "all the data will be displayed."
1238
  msgstr ""
1239
 
1240
- #: classes/Views/Settings.php:997
1241
- msgid "Audit Log Columns Selection"
 
 
 
1242
  msgstr ""
1243
 
1244
- #: classes/Views/Settings.php:1010
1245
- msgid "Date & Time"
1246
  msgstr ""
1247
 
1248
- #: classes/Views/Settings.php:1014
1249
- msgid "Source IP Address"
1250
  msgstr ""
1251
 
1252
- #: classes/Views/Settings.php:1029
1253
- msgid "Do you want the activity log viewer to auto refresh?"
 
 
1254
  msgstr ""
1255
 
1256
- #: classes/Views/Settings.php:1030
1257
- msgid ""
1258
- "The activity log viewer auto refreshes every 30 seconds when opened so you "
1259
- "can see the latest events as they happen almost in real time."
1260
  msgstr ""
1261
 
1262
- #: classes/Views/Settings.php:1034
1263
- msgid "Refresh Audit Log Viewer"
1264
  msgstr ""
1265
 
1266
- #: classes/Views/Settings.php:1041
1267
- msgid "Auto refresh"
 
 
1268
  msgstr ""
1269
 
1270
- #: classes/Views/Settings.php:1047
1271
- msgid "Do not auto refresh"
1272
  msgstr ""
1273
 
1274
- #: classes/Views/Settings.php:1057
1275
- msgid "Do you want to keep a log of WordPress background activity?"
1276
  msgstr ""
1277
 
1278
- #: classes/Views/Settings.php:1059
1279
- msgid ""
1280
- "WordPress does a lot of things in the background that you do not necessarily "
1281
- "need to know about, such as; deletion of post revisions, deletion of auto "
1282
- "saved drafts etc. By default the plugin does not report them since there "
1283
- "might be a lot and are irrelevant to the user."
1284
  msgstr ""
1285
 
1286
- #: classes/Views/Settings.php:1064
1287
- msgid "Disable Events for WordPress Background Activity"
1288
  msgstr ""
1289
 
1290
- #: classes/Views/Settings.php:1120
1291
- msgid ""
1292
- "The plugin runs file integrity scans on your website so it keeps a log when "
1293
- "a file is added, modified or deleted. All the settings for the file "
1294
- "integrity scans can be found in this page."
1295
  msgstr ""
1296
 
1297
- #: classes/Views/Settings.php:1121
1298
  msgid ""
1299
- "<a href=\"https://www.wpsecurityauditlog.com/support-documentation/wordpress-"
1300
- "files-changes-warning-activity-logs/\" target=\"_blank\">Refer to the "
1301
- "WordPress file integrity scans feature page</a> for more information."
1302
  msgstr ""
1303
 
1304
- #: classes/Views/Settings.php:1124
1305
- msgid "Do you want the plugin to scan your website for file changes?"
1306
  msgstr ""
1307
 
1308
- #: classes/Views/Settings.php:1129
1309
- msgid "Keep a Log of File Changes"
1310
  msgstr ""
1311
 
1312
- #: classes/Views/Settings.php:1153
1313
  msgid ""
1314
- "Which file changes events do you want to keep a log of in the activity log?"
 
1315
  msgstr ""
1316
 
1317
- #: classes/Views/Settings.php:1155
1318
- msgid ""
1319
- "By default the plugin will keep a log whenever a file has been added, "
1320
- "modified or deleted. It will also log an event in the activity log when a "
1321
- "file is too big to scan or there are too many files to scan. Click on the "
1322
- "link to specify which of these events the plugin should keep a log of."
1323
  msgstr ""
1324
 
1325
- #: classes/Views/Settings.php:1161
1326
- msgid "Alert me when"
 
 
 
1327
  msgstr ""
1328
 
1329
- #: classes/Views/Settings.php:1174
1330
- msgid "Configure Events"
1331
  msgstr ""
1332
 
1333
- #: classes/Views/Settings.php:1183
1334
- msgid "When should the plugin scan your website for file changes?"
 
 
 
 
 
1335
  msgstr ""
1336
 
1337
- #: classes/Views/Settings.php:1185
1338
  msgid ""
1339
- "By default the plugin will run file integrity scans once a week. If you can, "
1340
- "ideally you should run file integrity scans on a daily basis. The file "
1341
- "integrity scanner is very efficient and requires very little resources. "
1342
- "Though if you have a fairly large website we recommend you to scan it when "
1343
- "it is the least busy. The scan process should only take a few seconds to "
1344
- "complete."
1345
  msgstr ""
1346
 
1347
- #: classes/Views/Settings.php:1191
1348
- msgid "Scan Frequency"
1349
  msgstr ""
1350
 
1351
- #: classes/Views/Settings.php:1196
1352
- msgid "Daily"
1353
  msgstr ""
1354
 
1355
- #: classes/Views/Settings.php:1197
1356
- msgid "Weekly"
1357
  msgstr ""
1358
 
1359
- #: classes/Views/Settings.php:1198
1360
- msgid "Monthly"
1361
  msgstr ""
1362
 
1363
- #: classes/Views/Settings.php:1216
1364
- msgid "Scan Time"
1365
  msgstr ""
1366
 
1367
- #: classes/Views/Settings.php:1222
1368
- msgid "00:00"
1369
  msgstr ""
1370
 
1371
- #: classes/Views/Settings.php:1223
1372
- msgid "01:00"
1373
  msgstr ""
1374
 
1375
- #: classes/Views/Settings.php:1224
1376
- msgid "02:00"
1377
  msgstr ""
1378
 
1379
- #: classes/Views/Settings.php:1225
1380
- msgid "03:00"
1381
  msgstr ""
1382
 
1383
- #: classes/Views/Settings.php:1226
1384
- msgid "04:00"
1385
  msgstr ""
1386
 
1387
- #: classes/Views/Settings.php:1227
1388
- msgid "05:00"
1389
  msgstr ""
1390
 
1391
- #: classes/Views/Settings.php:1228
1392
- msgid "06:00"
1393
  msgstr ""
1394
 
1395
- #: classes/Views/Settings.php:1229
1396
- msgid "07:00"
1397
  msgstr ""
1398
 
1399
- #: classes/Views/Settings.php:1230
1400
- msgid "08:00"
1401
  msgstr ""
1402
 
1403
- #: classes/Views/Settings.php:1231
1404
- msgid "09:00"
1405
  msgstr ""
1406
 
1407
- #: classes/Views/Settings.php:1232
1408
- msgid "10:00"
1409
  msgstr ""
1410
 
1411
- #: classes/Views/Settings.php:1233
1412
- msgid "11:00"
1413
  msgstr ""
1414
 
1415
- #: classes/Views/Settings.php:1234
1416
- msgid "12:00"
1417
- msgstr ""
1418
-
1419
- #: classes/Views/Settings.php:1235
1420
- msgid "13:00"
1421
- msgstr ""
1422
-
1423
- #: classes/Views/Settings.php:1236
1424
- msgid "14:00"
1425
  msgstr ""
1426
 
1427
- #: classes/Views/Settings.php:1237
1428
- msgid "15:00"
1429
  msgstr ""
1430
 
1431
- #: classes/Views/Settings.php:1238
1432
- msgid "16:00"
1433
  msgstr ""
1434
 
1435
- #: classes/Views/Settings.php:1239
1436
- msgid "17:00"
1437
  msgstr ""
1438
 
1439
- #: classes/Views/Settings.php:1240
1440
- msgid "18:00"
1441
  msgstr ""
1442
 
1443
- #: classes/Views/Settings.php:1241
1444
- msgid "19:00"
1445
  msgstr ""
1446
 
1447
- #: classes/Views/Settings.php:1242
1448
- msgid "20:00"
 
 
1449
  msgstr ""
1450
 
1451
- #: classes/Views/Settings.php:1243
1452
- msgid "21:00"
1453
  msgstr ""
1454
 
1455
- #: classes/Views/Settings.php:1244
1456
- msgid "22:00"
 
 
1457
  msgstr ""
1458
 
1459
- #: classes/Views/Settings.php:1245
1460
- msgid "23:00"
1461
  msgstr ""
1462
 
1463
- #: classes/Views/Settings.php:1250
1464
- msgid "Monday"
 
 
1465
  msgstr ""
1466
 
1467
- #: classes/Views/Settings.php:1251
1468
- msgid "Tuesday"
1469
  msgstr ""
1470
 
1471
- #: classes/Views/Settings.php:1252
1472
- msgid "Wednesday"
 
1473
  msgstr ""
1474
 
1475
- #: classes/Views/Settings.php:1253
1476
- msgid "Thursday"
1477
  msgstr ""
1478
 
1479
- #: classes/Views/Settings.php:1254
1480
- msgid "Friday"
 
 
1481
  msgstr ""
1482
 
1483
- #: classes/Views/Settings.php:1255
1484
- msgid "Saturday"
1485
  msgstr ""
1486
 
1487
- #: classes/Views/Settings.php:1256
1488
- msgid "Sunday"
 
 
1489
  msgstr ""
1490
 
1491
- #: classes/Views/Settings.php:1261
1492
- msgid "01"
1493
  msgstr ""
1494
 
1495
- #: classes/Views/Settings.php:1262
1496
- msgid "02"
 
 
1497
  msgstr ""
1498
 
1499
- #: classes/Views/Settings.php:1263
1500
- msgid "03"
1501
  msgstr ""
1502
 
1503
- #: classes/Views/Settings.php:1264
1504
- msgid "04"
 
 
1505
  msgstr ""
1506
 
1507
- #: classes/Views/Settings.php:1265
1508
- msgid "05"
1509
  msgstr ""
1510
 
1511
- #: classes/Views/Settings.php:1266
1512
- msgid "06"
 
 
1513
  msgstr ""
1514
 
1515
- #: classes/Views/Settings.php:1267
1516
- msgid "07"
1517
  msgstr ""
1518
 
1519
- #: classes/Views/Settings.php:1268
1520
- msgid "08"
 
 
1521
  msgstr ""
1522
 
1523
- #: classes/Views/Settings.php:1269
1524
- msgid "09"
1525
  msgstr ""
1526
 
1527
- #: classes/Views/Settings.php:1270
1528
- msgid "10"
 
 
1529
  msgstr ""
1530
 
1531
- #: classes/Views/Settings.php:1271
1532
- msgid "11"
1533
  msgstr ""
1534
 
1535
- #: classes/Views/Settings.php:1272
1536
- msgid "12"
 
 
1537
  msgstr ""
1538
 
1539
- #: classes/Views/Settings.php:1273
1540
- msgid "13"
1541
  msgstr ""
1542
 
1543
- #: classes/Views/Settings.php:1274
1544
- msgid "14"
 
 
1545
  msgstr ""
1546
 
1547
- #: classes/Views/Settings.php:1275
1548
- msgid "15"
1549
  msgstr ""
1550
 
1551
- #: classes/Views/Settings.php:1276
1552
- msgid "16"
 
 
1553
  msgstr ""
1554
 
1555
- #: classes/Views/Settings.php:1277
1556
- msgid "17"
1557
  msgstr ""
1558
 
1559
- #: classes/Views/Settings.php:1278
1560
- msgid "18"
 
 
1561
  msgstr ""
1562
 
1563
- #: classes/Views/Settings.php:1279
1564
- msgid "19"
1565
  msgstr ""
1566
 
1567
- #: classes/Views/Settings.php:1280
1568
- msgid "20"
 
 
1569
  msgstr ""
1570
 
1571
- #: classes/Views/Settings.php:1281
1572
- msgid "21"
1573
  msgstr ""
1574
 
1575
- #: classes/Views/Settings.php:1282
1576
- msgid "22"
 
1577
  msgstr ""
1578
 
1579
- #: classes/Views/Settings.php:1283
1580
- msgid "23"
1581
  msgstr ""
1582
 
1583
- #: classes/Views/Settings.php:1284
1584
- msgid "24"
1585
  msgstr ""
1586
 
1587
- #: classes/Views/Settings.php:1285
1588
- msgid "25"
1589
  msgstr ""
1590
 
1591
- #: classes/Views/Settings.php:1286
1592
- msgid "26"
 
 
1593
  msgstr ""
1594
 
1595
- #: classes/Views/Settings.php:1287
1596
- msgid "27"
1597
  msgstr ""
1598
 
1599
- #: classes/Views/Settings.php:1288
1600
- msgid "28"
 
 
 
1601
  msgstr ""
1602
 
1603
- #: classes/Views/Settings.php:1289
1604
- msgid "29"
1605
  msgstr ""
1606
 
1607
- #: classes/Views/Settings.php:1290
1608
- msgid "30"
 
 
 
1609
  msgstr ""
1610
 
1611
- #: classes/Views/Settings.php:1306
1612
- msgid "Hour"
1613
  msgstr ""
1614
 
1615
- #: classes/Views/Settings.php:1322 classes/Views/Settings.php:1338
1616
- msgid "Day"
 
 
1617
  msgstr ""
1618
 
1619
- #: classes/Views/Settings.php:1348
1620
- msgid "Which directories should be scanned for file changes?"
1621
  msgstr ""
1622
 
1623
- #: classes/Views/Settings.php:1350
1624
  msgid ""
1625
- "The plugin will scan all the directories in your WordPress website by "
1626
- "default because that is the most secure option. Though if for some reason "
1627
- "you do not want the plugin to scan any of these directories you can uncheck "
1628
- "them from the below list."
1629
- msgstr ""
1630
-
1631
- #: classes/Views/Settings.php:1356
1632
- msgid "Directories to scan"
1633
  msgstr ""
1634
 
1635
- #: classes/Views/Settings.php:1362
1636
- msgid "Root directory of WordPress (excluding sub directories)"
1637
  msgstr ""
1638
 
1639
- #: classes/Views/Settings.php:1363
1640
- msgid "WP Admin directory (/wp-admin/)"
 
 
1641
  msgstr ""
1642
 
1643
- #: classes/Views/Settings.php:1364
1644
- msgid "WP Includes directory (/wp-includes/)"
1645
  msgstr ""
1646
 
1647
- #: classes/Views/Settings.php:1365
1648
  msgid ""
1649
- "/wp-content/ directory (excluding plugins, themes & uploads directories)"
 
1650
  msgstr ""
1651
 
1652
- #: classes/Views/Settings.php:1366
1653
- msgid "Themes directory (/wp-content/themes/)"
1654
  msgstr ""
1655
 
1656
- #: classes/Views/Settings.php:1367
1657
- msgid "Plugins directory (/wp-content/plugins/)"
 
 
1658
  msgstr ""
1659
 
1660
- #: classes/Views/Settings.php:1368
1661
- msgid "Uploads directory (/wp-content/uploads/)"
1662
  msgstr ""
1663
 
1664
- #: classes/Views/Settings.php:1374
1665
  msgid ""
1666
- "Uploads directory of all sub sites on this network (/wp-content/sites/*)"
 
1667
  msgstr ""
1668
 
1669
- #: classes/Views/Settings.php:1397
1670
- msgid ""
1671
- "Do you want to exclude specific files or files with a particular extension "
1672
- "from the scan?"
1673
  msgstr ""
1674
 
1675
- #: classes/Views/Settings.php:1398
1676
  msgid ""
1677
- "The plugin will scan everything that is in the WordPress root directory or "
1678
- "below, even if the files and directories are not part of WordPress. It is "
1679
- "recommended to scan all source code files and only exclude files that cannot "
1680
- "be tampered, such as text files, media files etc, most of which are already "
1681
- "excluded by default."
1682
  msgstr ""
1683
 
1684
- #: classes/Views/Settings.php:1403
1685
- msgid "Exclude All Files in These Directories"
1686
  msgstr ""
1687
 
1688
- #: classes/Views/Settings.php:1416 classes/Views/Settings.php:1452
1689
- #: classes/Views/Settings.php:1482
1690
- msgid "REMOVE"
 
1691
  msgstr ""
1692
 
1693
- #: classes/Views/Settings.php:1421 classes/Views/Settings.php:1457
1694
- #: classes/Views/Settings.php:1487 classes/Views/SetupWizard.php:534
1695
- #: classes/Views/SetupWizard.php:542 classes/Views/SetupWizard.php:627
1696
- #: classes/Views/SetupWizard.php:646 classes/Views/SetupWizard.php:665
1697
- msgid "ADD"
1698
  msgstr ""
1699
 
1700
- #: classes/Views/Settings.php:1424
1701
  msgid ""
1702
- "Specify the name of the directory and the path to it in relation to the "
1703
- "website's root. For example, if you want to want to exclude all files in the "
1704
- "sub directory dir1/dir2 specify the following:"
1705
  msgstr ""
1706
 
1707
- #: classes/Views/Settings.php:1435
1708
- msgid "Exclude These Files"
1709
  msgstr ""
1710
 
1711
- #: classes/Views/Settings.php:1460
1712
  msgid ""
1713
- "Specify the name and extension of the file(s) you want to exclude. Wildcard "
1714
- "not supported. There is no need to specify the path of the file."
1715
  msgstr ""
1716
 
1717
- #: classes/Views/Settings.php:1469
1718
- msgid "Exclude these File Types"
1719
  msgstr ""
1720
 
1721
- #: classes/Views/Settings.php:1490
1722
  msgid ""
1723
- "Specify the extension of the file types you want to exclude. You should "
1724
- "exclude any type of logs and backup files that tend to be very big."
1725
  msgstr ""
1726
 
1727
- #: classes/Views/Settings.php:1499
1728
- msgid "Launch an instant file integrity scan"
1729
  msgstr ""
1730
 
1731
- #: classes/Views/Settings.php:1501
1732
  msgid ""
1733
- "Click the Scan Now button to launch an instant file integrity scan using the "
1734
- "configured settings. You can navigate away from this page during the scan. "
1735
- "Note that the instant scan can be more resource intensive than scheduled "
1736
- "scans."
1737
  msgstr ""
1738
 
1739
- #: classes/Views/Settings.php:1507
1740
- msgid "Launch Instant Scan"
1741
  msgstr ""
1742
 
1743
- #: classes/Views/Settings.php:1514 classes/Views/Settings.php:2016
1744
- msgid "Scan Now"
 
 
1745
  msgstr ""
1746
 
1747
- #: classes/Views/Settings.php:1517 classes/Views/Settings.php:1524
1748
- msgid "Stop Scan"
1749
  msgstr ""
1750
 
1751
- #: classes/Views/Settings.php:1521 classes/Views/Settings.php:2018
1752
- msgid "Scan in Progress"
1753
  msgstr ""
1754
 
1755
- #: classes/Views/Settings.php:1604
1756
- msgid ""
1757
- "By default the plugin keeps a log of all user changes done on your WordPress "
1758
- "website. Use the setting below to exclude any objects from the activity log. "
1759
- "When an object is excluded from the activity log, any event in which that "
1760
- "object is referred will not be logged in the activity log."
1761
  msgstr ""
1762
 
1763
- #: classes/Views/Settings.php:1608
1764
- msgid "Exclude Users:"
1765
  msgstr ""
1766
 
1767
- #: classes/Views/Settings.php:1629
1768
- msgid "Exclude Roles:"
1769
  msgstr ""
1770
 
1771
- #: classes/Views/Settings.php:1650
1772
- msgid "Exclude IP Addresses:"
1773
  msgstr ""
1774
 
1775
- #: classes/Views/Settings.php:1671
1776
- msgid "Exclude Post Type:"
1777
  msgstr ""
1778
 
1779
- #: classes/Views/Settings.php:1686
1780
  msgid ""
1781
- "WordPress has the post and page post types by default though your website "
1782
- "might use more post types (custom post types). You can exclude all post "
1783
- "types, including the default WordPress ones."
1784
  msgstr ""
1785
 
1786
- #: classes/Views/Settings.php:1693
1787
- msgid "Exclude Custom Fields:"
1788
  msgstr ""
1789
 
1790
- #: classes/Views/Settings.php:1708
1791
  msgid ""
1792
- "You can use the * wildcard to exclude multiple matching custom fields. For "
1793
- "example to exclude all custom fields starting with wp123 enter wp123*"
1794
- msgstr ""
1795
-
1796
- #: classes/Views/Settings.php:1715
1797
- msgid "Exclude Non-Existing URLs:"
1798
  msgstr ""
1799
 
1800
- #: classes/Views/Settings.php:1731
1801
- msgid ""
1802
- "Add the non existing URLs for which you do not want to be alerted of HTTP "
1803
- "404 errors in the activity log by specifying the complete URL.\tExamples "
1804
- "below:"
1805
  msgstr ""
1806
 
1807
- #: classes/Views/Settings.php:1733
1808
- msgid "File: "
1809
  msgstr ""
1810
 
1811
- #: classes/Views/Settings.php:1735
1812
- msgid "Directory: "
 
 
1813
  msgstr ""
1814
 
1815
- #: classes/Views/Settings.php:1768
1816
- msgid "These settings are for advanced users."
1817
  msgstr ""
1818
 
1819
- #: classes/Views/Settings.php:1769
1820
  msgid ""
1821
- "If you have any questions <a href=\"https://www.wpsecurityauditlog.com/"
1822
- "contact/\" target=\"_blank\">contact us</a>."
1823
  msgstr ""
1824
 
1825
- #: classes/Views/Settings.php:1772
1826
- msgid ""
1827
- "Troubleshooting setting: Keep a debug log of all the requests this website "
1828
- "receives"
1829
  msgstr ""
1830
 
1831
- #: classes/Views/Settings.php:1773
1832
  msgid ""
1833
- "Only enable the request log on testing, staging and development website. "
1834
- "Never enable logging on a live website unless instructed to do so. Enabling "
1835
- "request logging on a live website may degrade the performance of the website."
1836
  msgstr ""
1837
 
1838
- #: classes/Views/Settings.php:1777
1839
- msgid "Request Log"
1840
  msgstr ""
1841
 
1842
- #: classes/Views/Settings.php:1795
1843
  msgid ""
1844
- "<strong>Note:</strong> The requests debug log file is saved as request.log."
1845
- "php in the /wp-content/uploads/wp-security-audit-log/ directory."
1846
  msgstr ""
1847
 
1848
- #: classes/Views/Settings.php:1807
1849
- msgid "Reset plugin settings to default"
1850
  msgstr ""
1851
 
1852
- #: classes/Views/Settings.php:1808
1853
  msgid ""
1854
- "Click the RESET button to reset ALL plugin settings to default. Note that "
1855
- "the activity log data will be retained and only the plugin settings will be "
1856
- "reset. To purge the data of the activity log use the setting below."
1857
  msgstr ""
1858
 
1859
- #: classes/Views/Settings.php:1812
1860
- msgid "Reset Settings"
1861
  msgstr ""
1862
 
1863
- #: classes/Views/Settings.php:1814
1864
- msgid "RESET"
 
 
1865
  msgstr ""
1866
 
1867
- #: classes/Views/Settings.php:1820
1868
- msgid "Purge the WordPress activity log"
1869
  msgstr ""
1870
 
1871
- #: classes/Views/Settings.php:1821
1872
  msgid ""
1873
- "Click the Purge button below to delete all the data from the WordPress "
1874
- "activity log and start afresh."
1875
  msgstr ""
1876
 
1877
- #: classes/Views/Settings.php:1825
1878
- msgid "Purge Activity Log"
1879
  msgstr ""
1880
 
1881
- #: classes/Views/Settings.php:1827
1882
- msgid "PURGE"
 
 
1883
  msgstr ""
1884
 
1885
- #: classes/Views/Settings.php:1833
1886
- msgid "MainWP Child Site Stealth Mode"
1887
  msgstr ""
1888
 
1889
- #: classes/Views/Settings.php:1834
1890
  msgid ""
1891
- "This option is enabled automatically when the plugin detects the MainWP "
1892
- "Child plugin on the site. When this setting is enabled plugin access is "
1893
- "restricted to the administrator who installs the plugin, the plugin is not "
1894
- "shown in the list of installed plugins and no admin notifications are shown. "
1895
- "Disable this option to change the plugin to the default setup."
1896
  msgstr ""
1897
 
1898
- #: classes/Views/Settings.php:1838
1899
- msgid "Enable MainWP Child Site Stealth Mode"
1900
  msgstr ""
1901
 
1902
- #: classes/Views/Settings.php:1862
1903
- msgid "Do you want to delete the plugin data from the database upon uninstall?"
1904
  msgstr ""
1905
 
1906
- #: classes/Views/Settings.php:1863
1907
- msgid ""
1908
- "The plugin saves the activity log data and settings in the WordPress "
1909
- "database. By default upon uninstalling the plugin the data is kept in the "
1910
- "database so if it is installed again, you can still access the data. If the "
1911
- "data is deleted it is not possible to recover it so you won't be able to "
1912
- "access it again even when you reinstall the plugin."
1913
- msgstr ""
1914
-
1915
- #: classes/Views/Settings.php:1867
1916
- msgid "Remove Data on Uninstall"
1917
  msgstr ""
1918
 
1919
- #: classes/Views/Settings.php:1892
1920
- msgid "Are you sure you want to reset all the plugin settings to default?"
1921
  msgstr ""
1922
 
1923
- #: classes/Views/Settings.php:1902
1924
- msgid "Are you sure you want to purge all the activity log data?"
1925
  msgstr ""
1926
 
1927
- #: classes/Views/Settings.php:1934
1928
- msgid "MainWP Child plugin is not active on this website."
1929
  msgstr ""
1930
 
1931
- #: classes/Views/Settings.php:2009
1932
- msgid "The specified value is not a valid URL!"
 
 
1933
  msgstr ""
1934
 
1935
- #: classes/Views/Settings.php:2010
1936
- msgid "The specified value is not a valid post type!"
1937
  msgstr ""
1938
 
1939
- #: classes/Views/Settings.php:2011
1940
- msgid "The specified value is not a valid IP address!"
 
 
1941
  msgstr ""
1942
 
1943
- #: classes/Views/Settings.php:2012
1944
- msgid "The specified value is not a user nor a role!"
1945
  msgstr ""
1946
 
1947
- #: classes/Views/Settings.php:2013
1948
- msgid "Filename cannot be added because it contains invalid characters."
 
 
1949
  msgstr ""
1950
 
1951
- #: classes/Views/Settings.php:2014
1952
- msgid "File extension cannot be added because it contains invalid characters."
1953
  msgstr ""
1954
 
1955
- #: classes/Views/Settings.php:2015
1956
- msgid "Directory cannot be added because it contains invalid characters."
 
 
1957
  msgstr ""
1958
 
1959
- #: classes/Views/Settings.php:2017
1960
- msgid "Scan Failed"
1961
  msgstr ""
1962
 
1963
- #: classes/Views/Settings.php:2142 classes/Views/Settings.php:2253
1964
- msgid "Invalid setting type."
1965
  msgstr ""
1966
 
1967
- #: classes/Views/Settings.php:2196
1968
- msgid "You can exclude this directory using the check boxes above."
1969
  msgstr ""
1970
 
1971
- #: classes/Views/Settings.php:2215
1972
- msgid "Option added to excluded types."
 
 
1973
  msgstr ""
1974
 
1975
- #: classes/Views/Settings.php:2219
1976
- msgid "This file is already excluded from the scan."
1977
  msgstr ""
1978
 
1979
- #: classes/Views/Settings.php:2221
1980
- msgid "This file extension is already excluded from the scan."
 
 
1981
  msgstr ""
1982
 
1983
- #: classes/Views/Settings.php:2223
1984
- msgid "This directory is already excluded from the scan."
1985
  msgstr ""
1986
 
1987
- #: classes/Views/Settings.php:2233
1988
- msgid "Option name is empty."
 
 
1989
  msgstr ""
1990
 
1991
- #: classes/Views/Settings.php:2329
1992
- msgid "Option removed from excluded scan types."
1993
  msgstr ""
1994
 
1995
- #: classes/Views/Settings.php:2334 classes/Views/Settings.php:2399
1996
- msgid "Something went wrong."
 
 
1997
  msgstr ""
1998
 
1999
- #: classes/Views/Settings.php:2361
2000
- msgid "A cron job is in progress."
2001
  msgstr ""
2002
 
2003
- #: classes/Views/Settings.php:2394 classes/Views/Settings.php:2431
2004
- msgid "Scan started successfully."
 
 
2005
  msgstr ""
2006
 
2007
- #: classes/Views/Settings.php:2456 classes/Views/Settings.php:2483
2008
- msgid "Tables has been reset."
2009
  msgstr ""
2010
 
2011
- #: classes/Views/Settings.php:2458 classes/Views/Settings.php:2485
2012
- msgid "Reset query failed."
 
 
2013
  msgstr ""
2014
 
2015
- #: classes/Views/Settings.php:2461 classes/Views/Settings.php:2488
2016
- msgid "Nonce Verification Failed."
2017
  msgstr ""
2018
 
2019
- #: classes/Views/SetupWizard.php:129
2020
- msgid "Welcome"
 
 
2021
  msgstr ""
2022
 
2023
- #: classes/Views/SetupWizard.php:133
2024
- msgid "Log Details"
2025
  msgstr ""
2026
 
2027
- #: classes/Views/SetupWizard.php:138
2028
- msgid "Log Retention"
 
 
2029
  msgstr ""
2030
 
2031
- #: classes/Views/SetupWizard.php:143
2032
- msgid "Access"
2033
  msgstr ""
2034
 
2035
- #: classes/Views/SetupWizard.php:153 classes/Views/SetupWizard.php:756
2036
- #: classes/Views/SetupWizard.php:757
2037
- msgid "Finish"
 
2038
  msgstr ""
2039
 
2040
- #: classes/Views/SetupWizard.php:197
2041
- msgid "Specified value in not a user."
2042
  msgstr ""
2043
 
2044
- #: classes/Views/SetupWizard.php:198
2045
- msgid "Specified value in not a role."
 
 
 
2046
  msgstr ""
2047
 
2048
- #: classes/Views/SetupWizard.php:199
2049
- msgid "Specified value in not an IP address."
2050
  msgstr ""
2051
 
2052
- #: classes/Views/SetupWizard.php:229
2053
- msgid "WP Security Audit Log &rsaquo; Setup Wizard"
 
 
2054
  msgstr ""
2055
 
2056
- #: classes/Views/SetupWizard.php:246
2057
- msgid "Close Wizard"
2058
  msgstr ""
2059
 
2060
- #: classes/Views/SetupWizard.php:326
2061
- msgid "Thank you for installing the WP Security Audit Log plugin."
 
 
2062
  msgstr ""
2063
 
2064
- #: classes/Views/SetupWizard.php:327
2065
- msgid ""
2066
- "This wizard will help you configure your WordPress activity log plugin and "
2067
- "get you started quickly."
2068
  msgstr ""
2069
 
2070
- #: classes/Views/SetupWizard.php:328
2071
  msgid ""
2072
- "Anything that can be configured in this wizard can be changed at a later "
2073
- "stage from the plugin settings. If you are an experienced user of this "
2074
- "plugin you can exit this wizard and configure all the settings manually."
2075
  msgstr ""
2076
 
2077
- #: classes/Views/SetupWizard.php:333
2078
- msgid "Start Configuring the Plugin"
2079
  msgstr ""
2080
 
2081
- #: classes/Views/SetupWizard.php:337
2082
- msgid "Exit Wizard"
 
 
2083
  msgstr ""
2084
 
2085
- #: classes/Views/SetupWizard.php:351
2086
- msgid "Please select the level of detail for your WordPress activity logs:"
2087
  msgstr ""
2088
 
2089
- #: classes/Views/SetupWizard.php:356
2090
  msgid ""
2091
- "Basic (I want a high level overview and I am not interested in the detail)"
 
2092
  msgstr ""
2093
 
2094
- #: classes/Views/SetupWizard.php:361
2095
- msgid "Geek (I want to know everything that is happening on my WordPress)"
2096
  msgstr ""
2097
 
2098
- #: classes/Views/SetupWizard.php:364
2099
  msgid ""
2100
- "Note: You can change the WordPress logging level from the plugin’s settings "
2101
- "anytime."
2102
  msgstr ""
2103
 
2104
- #: classes/Views/SetupWizard.php:372 classes/Views/SetupWizard.php:373
2105
- #: classes/Views/SetupWizard.php:438 classes/Views/SetupWizard.php:439
2106
- #: classes/Views/SetupWizard.php:567 classes/Views/SetupWizard.php:568
2107
- #: classes/Views/SetupWizard.php:687 classes/Views/SetupWizard.php:688
2108
- msgid "Next"
2109
  msgstr ""
2110
 
2111
- #: classes/Views/SetupWizard.php:412
2112
- msgid "How long do you want to keep the data in the WordPress activity Log?"
 
 
2113
  msgstr ""
2114
 
2115
- #: classes/Views/SetupWizard.php:417
2116
- msgid "6 months (data older than 6 months will be deleted)"
2117
  msgstr ""
2118
 
2119
- #: classes/Views/SetupWizard.php:422
2120
- msgid "12 months (data older than 12 months will be deleted)"
 
 
2121
  msgstr ""
2122
 
2123
- #: classes/Views/SetupWizard.php:427
2124
- msgid "Keep all data."
2125
  msgstr ""
2126
 
2127
- #: classes/Views/SetupWizard.php:430
2128
  msgid ""
2129
- "Note: You can change the WordPress activity log retention settings at any "
2130
- "time from the plugin settings later on."
2131
  msgstr ""
2132
 
2133
- #: classes/Views/SetupWizard.php:448
2134
- msgid ""
2135
- "The plugin stores the data in the WordPress database in a very efficient "
2136
- "way, though the more data you keep the more hard disk space it will consume. "
2137
- "If you need need to retain a lot of data we would recommend you to <a href="
2138
- "\"https://www.wpsecurityauditlog.com/premium-features/\" target=\"_blank"
2139
- "\">upgrade to Premium</a> and use the Database tools to store the WordPress "
2140
- "activity log in an external database."
2141
  msgstr ""
2142
 
2143
- #: classes/Views/SetupWizard.php:515
2144
  msgid ""
2145
- "By default only the users with administrator role can access the WordPress "
2146
- "activity log. Would you like to allow any other user or users with a role to "
2147
- "access the WordPress activity log?"
2148
  msgstr ""
2149
 
2150
- #: classes/Views/SetupWizard.php:531 classes/Views/SetupWizard.php:624
2151
- msgid "Usernames: "
2152
  msgstr ""
2153
 
2154
- #: classes/Views/SetupWizard.php:539 classes/Views/SetupWizard.php:643
2155
- msgid "Roles: "
2156
  msgstr ""
2157
 
2158
- #: classes/Views/SetupWizard.php:560
2159
  msgid ""
2160
- "Note: you can change the WordPress activity log privileges settings at any "
2161
- "time from the plugin settings."
2162
  msgstr ""
2163
 
2164
- #: classes/Views/SetupWizard.php:574
2165
- msgid ""
2166
- "The WordPress activity log contains sensitive data such as who logged in, "
2167
- "from where, when, and what they did."
2168
  msgstr ""
2169
 
2170
- #: classes/Views/SetupWizard.php:619
2171
  msgid ""
2172
- "The plugin will keep a log of everything that happens on your WordPress "
2173
- "website. If you would like to exclude a particular user, users with a role "
2174
- "or an IP address from the log specify them below. If not just click the Next "
2175
- "button."
2176
- msgstr ""
2177
-
2178
- #: classes/Views/SetupWizard.php:662
2179
- msgid "IP Address: "
2180
  msgstr ""
2181
 
2182
- #: classes/Views/SetupWizard.php:680
2183
- msgid "Note: You can change these exclusions anytime from the plugin settings."
2184
  msgstr ""
2185
 
2186
- #: classes/Views/SetupWizard.php:694
2187
  msgid ""
2188
- "The WordPress activity log contains sensitive data such as who logged in, "
2189
- "from where, when and what they did."
2190
  msgstr ""
2191
 
2192
- #: classes/Views/SetupWizard.php:727
2193
- msgid ""
2194
- "Your plugin is all set and it is ready to start keeping a record of "
2195
- "everything that is happening on your WordPress in a WordPress activity log."
2196
  msgstr ""
2197
 
2198
- #: classes/Views/SetupWizard.php:728
2199
- msgid "Below are a few useful links you might need to refer to:"
 
2200
  msgstr ""
2201
 
2202
- #: classes/Views/SetupWizard.php:733
2203
- msgid "Getting started with the WP Security Audit Log plugin"
2204
  msgstr ""
2205
 
2206
- #: classes/Views/SetupWizard.php:738
2207
- msgid "Knowledge Base & Support Documents"
2208
  msgstr ""
2209
 
2210
- #: classes/Views/SetupWizard.php:743
2211
- msgid "Benefits of keeping a WordPress activity log"
2212
  msgstr ""
2213
 
2214
- #: classes/Views/SetupWizard.php:748
2215
- msgid ""
2216
- "We trust this plugin meets all your activity log requirements. Should you "
2217
- "encounter any problems, have feature requests or would like to share some "
2218
- "feedback, <a href=\"https://www.wpsecurityauditlog.com/contact/\" target="
2219
- "\"_blank\">please get in touch!</a>"
2220
  msgstr ""
2221
 
2222
- #: classes/Views/ToggleAlerts.php:27 classes/Views/ToggleAlerts.php:41
2223
- msgid "Enable/Disable Events"
2224
  msgstr ""
2225
 
2226
- #: classes/Views/ToggleAlerts.php:162
2227
- msgid "Log Level: "
2228
  msgstr ""
2229
 
2230
- #: classes/Views/ToggleAlerts.php:167
2231
- msgid "Basic"
2232
  msgstr ""
2233
 
2234
- #: classes/Views/ToggleAlerts.php:172
2235
- msgid "Geek"
 
 
2236
  msgstr ""
2237
 
2238
- #: classes/Views/ToggleAlerts.php:175
2239
- msgid "Custom"
2240
  msgstr ""
2241
 
2242
- #: classes/Views/ToggleAlerts.php:179
2243
  msgid ""
2244
- "Use the Log level drop down menu above to use one of our preset log levels. "
2245
- "Alternatively you can enable or disable any of the individual events from "
2246
- "the below tabs. Refer to <a href=\"https://www.wpsecurityauditlog.com/"
2247
- "support-documentation/list-wordpress-audit-trail-alerts/\" target=\"_blank"
2248
- "\">the complete list of WordPress activity log event IDs</a> for reference "
2249
- "on all the events the plugin can keep a log of."
2250
  msgstr ""
2251
 
2252
- #: classes/Views/ToggleAlerts.php:200 classes/Views/ToggleAlerts.php:232
2253
- #: defaults.php:256
2254
- msgid "Custom Post Types"
2255
  msgstr ""
2256
 
2257
- #: classes/Views/ToggleAlerts.php:200 classes/Views/ToggleAlerts.php:232
2258
- #: defaults.php:296
2259
- msgid "Pages"
 
2260
  msgstr ""
2261
 
2262
- #: classes/Views/ToggleAlerts.php:235 classes/Views/ToggleAlerts.php:242
2263
- #: classes/Views/ToggleAlerts.php:300 defaults.php:484
2264
- msgid "BBPress Forum"
2265
  msgstr ""
2266
 
2267
- #: classes/Views/ToggleAlerts.php:236 classes/Views/ToggleAlerts.php:249
2268
- #: classes/Views/ToggleAlerts.php:313 defaults.php:547
2269
- msgid "WooCommerce"
 
2270
  msgstr ""
2271
 
2272
- #: classes/Views/ToggleAlerts.php:237 classes/Views/ToggleAlerts.php:256
2273
- #: classes/Views/ToggleAlerts.php:313 classes/Views/ToggleAlerts.php:321
2274
- #: defaults.php:513
2275
- msgid "WooCommerce Products"
2276
  msgstr ""
2277
 
2278
- #: classes/Views/ToggleAlerts.php:238 classes/Views/ToggleAlerts.php:263
2279
- #: classes/Views/ToggleAlerts.php:328 defaults.php:562
2280
- msgid "Yoast SEO"
 
2281
  msgstr ""
2282
 
2283
- #: classes/Views/ToggleAlerts.php:239 classes/Views/ToggleAlerts.php:272
2284
- #: classes/Views/ToggleAlerts.php:341 defaults.php:461
2285
- msgid "MultiSite"
2286
  msgstr ""
2287
 
2288
- #: classes/Views/ToggleAlerts.php:288
2289
- msgid "Code"
 
 
2290
  msgstr ""
2291
 
2292
- #: classes/Views/ToggleAlerts.php:290 classes/WidgetManager.php:87
2293
- msgid "Description"
2294
  msgstr ""
2295
 
2296
- #: classes/Views/ToggleAlerts.php:293 classes/Views/ToggleAlerts.php:439
2297
- #: classes/Views/ToggleAlerts.php:554
2298
- msgid "File Changes"
 
2299
  msgstr ""
2300
 
2301
- #: classes/Views/ToggleAlerts.php:294 defaults.php:187
2302
- msgid "Content"
2303
  msgstr ""
2304
 
2305
- #: classes/Views/ToggleAlerts.php:297
2306
  msgid ""
2307
- "<strong>Note:</strong> Post refers to any type of content, i.e. blog post, "
2308
- "page or a post with a custom post type."
 
 
 
 
2309
  msgstr ""
2310
 
2311
- #: classes/Views/ToggleAlerts.php:304
2312
  msgid ""
2313
- "The plugin BBPress is not installed on your website so these events have "
2314
- "been disabled."
2315
  msgstr ""
2316
 
2317
- #: classes/Views/ToggleAlerts.php:310
2318
- msgid "Forums"
2319
  msgstr ""
2320
 
2321
- #: classes/Views/ToggleAlerts.php:317
2322
  msgid ""
2323
- "The plugin WooCommerce is not installed on your website so these events have "
2324
- "been disabled."
2325
  msgstr ""
2326
 
2327
- #: classes/Views/ToggleAlerts.php:324
2328
- msgid "Products"
2329
  msgstr ""
2330
 
2331
- #: classes/Views/ToggleAlerts.php:332
2332
  msgid ""
2333
- "The plugin Yoast SEO is not installed on your website so these events have "
2334
- "been disabled."
2335
  msgstr ""
2336
 
2337
- #: classes/Views/ToggleAlerts.php:338
2338
- msgid "Post Changes"
2339
  msgstr ""
2340
 
2341
- #: classes/Views/ToggleAlerts.php:345
2342
  msgid ""
2343
- "Your website is a single site so the multisite events have been disabled."
 
2344
  msgstr ""
2345
 
2346
- #: classes/Views/ToggleAlerts.php:351 defaults.php:161
2347
- msgid "User Profiles"
2348
  msgstr ""
2349
 
2350
- #: classes/Views/ToggleAlerts.php:354 defaults.php:143
2351
- msgid "Other User Activity"
 
2352
  msgstr ""
2353
 
2354
- #: classes/Views/ToggleAlerts.php:357
2355
- msgid "Logins & Logouts"
2356
- msgstr ""
2357
-
2358
- #: classes/Views/ToggleAlerts.php:374
2359
- msgid "Not Implemented"
2360
- msgstr ""
2361
-
2362
- #: classes/Views/ToggleAlerts.php:377
2363
- msgid "Not Available"
2364
- msgstr ""
2365
-
2366
- #: classes/Views/ToggleAlerts.php:387
2367
- msgid "User Sessions"
2368
- msgstr ""
2369
-
2370
- #: classes/Views/ToggleAlerts.php:389
2371
- msgid "Files"
2372
- msgstr ""
2373
-
2374
- #: classes/Views/ToggleAlerts.php:393
2375
- msgid "Post Settings"
2376
- msgstr ""
2377
-
2378
- #: classes/Views/ToggleAlerts.php:395
2379
- msgid "Tags"
2380
- msgstr ""
2381
-
2382
- #: classes/Views/ToggleAlerts.php:397 classes/Views/ToggleAlerts.php:411
2383
- msgid "Categories"
2384
- msgstr ""
2385
-
2386
- #: classes/Views/ToggleAlerts.php:399
2387
- msgid "Custom Fields"
2388
- msgstr ""
2389
-
2390
- #: classes/Views/ToggleAlerts.php:401
2391
- msgid "Sites"
2392
- msgstr ""
2393
-
2394
- #: classes/Views/ToggleAlerts.php:405
2395
- msgid "Topics"
2396
- msgstr ""
2397
-
2398
- #: classes/Views/ToggleAlerts.php:407
2399
- msgid "Product Admin"
2400
- msgstr ""
2401
-
2402
- #: classes/Views/ToggleAlerts.php:409
2403
- msgid "Store Admin"
2404
- msgstr ""
2405
-
2406
- #: classes/Views/ToggleAlerts.php:413
2407
- msgid "Website Changes"
2408
- msgstr ""
2409
-
2410
- #: classes/Views/ToggleAlerts.php:415
2411
- msgid "Plugin Settings"
2412
- msgstr ""
2413
-
2414
- #: classes/Views/ToggleAlerts.php:421
2415
- msgid "Cron Jobs"
2416
- msgstr ""
2417
-
2418
- #: classes/Views/ToggleAlerts.php:458 classes/Views/ToggleAlerts.php:491
2419
- msgid ""
2420
- "Capture 404 requests to file (the log file are created in the /wp-content/"
2421
- "uploads/wp-security-audit-log/404s/ directory)"
2422
- msgstr ""
2423
-
2424
- #: classes/Views/ToggleAlerts.php:466 classes/Views/ToggleAlerts.php:499
2425
- msgid "Purge log files older than one month"
2426
- msgstr ""
2427
-
2428
- #: classes/Views/ToggleAlerts.php:471
2429
- msgid ""
2430
- "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
2431
- "to non-existing pages from the same IP address. Increase the value in this "
2432
- "setting to the desired amount to keep a log of more or less requests."
2433
- msgstr ""
2434
-
2435
- #: classes/Views/ToggleAlerts.php:476 classes/Views/ToggleAlerts.php:509
2436
- msgid "Record the referrer that generated the 404 error."
2437
- msgstr ""
2438
-
2439
- #: classes/Views/ToggleAlerts.php:504
2440
- msgid ""
2441
- "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
2442
- "to non-existing pages from the same IP address. Increase the value in this "
2443
- "setting to the desired amount to keep a log of more or less requests. Note "
2444
- "that by increasing this value to a high number, should your website be "
2445
- "scanned the plugin will consume more resources to log all the requests."
2446
- msgstr ""
2447
-
2448
- #: classes/Views/ToggleAlerts.php:521 classes/Views/ToggleAlerts.php:534
2449
- msgid ""
2450
- "Number of login attempts to log. Enter 0 to log all failed login attempts. "
2451
- "(By default the plugin only logs up to 10 failed login because the process "
2452
- "can be very resource intensive in case of a brute force attack)"
2453
- msgstr ""
2454
-
2455
- #: classes/Views/ToggleAlerts.php:547
2456
- msgid ""
2457
- "Log all stock changes. Disable this setting to only keep a log of stock "
2458
- "changes done manually via the WooCommerce dashboard. Therefore automated "
2459
- "stock changes typically done via customers placing orders or via other "
2460
- "plugins will not be logged."
2461
- msgstr ""
2462
-
2463
- #: classes/Views/ToggleAlerts.php:569
2464
- msgid "Configure the file integrity scan settings."
2465
- msgstr ""
2466
-
2467
- #: classes/Views/ToggleAlerts.php:584
2468
- msgid "Save Changes"
2469
- msgstr ""
2470
-
2471
- #: classes/Views/ToggleAlerts.php:591
2472
- msgid "Log Level Updated"
2473
- msgstr ""
2474
-
2475
- #. translators: Alerts log level.
2476
- #: classes/Views/ToggleAlerts.php:595
2477
- #, php-format
2478
- msgid "The %s log level has been successfully loaded and applied."
2479
- msgstr ""
2480
-
2481
- #: classes/Views/ToggleAlerts.php:599
2482
- msgid "OK"
2483
- msgstr ""
2484
-
2485
- #: classes/Views/ToggleAlerts.php:613
2486
- msgid "Enable File Integrity Scanner"
2487
- msgstr ""
2488
-
2489
- #: classes/Views/ToggleAlerts.php:615
2490
- msgid ""
2491
- "The file integrity scanner is switched off. To enable this event it has to "
2492
- "be switched on."
2493
- msgstr ""
2494
-
2495
- #: classes/Views/ToggleAlerts.php:619
2496
- msgid "SWITCH ON"
2497
- msgstr ""
2498
-
2499
- #: classes/Views/ToggleAlerts.php:620
2500
- msgid "DISABLE EVENT"
2501
- msgstr ""
2502
-
2503
- #: classes/WidgetManager.php:55
2504
- msgid "Latest Events"
2505
- msgstr ""
2506
-
2507
- #: classes/WidgetManager.php:79
2508
- msgid "No alerts found."
2509
- msgstr ""
2510
-
2511
- #: defaults.php:64
2512
- msgid "Fatal run-time error."
2513
- msgstr ""
2514
-
2515
- #: defaults.php:68
2516
- msgid "Run-time warning (non-fatal error)."
2517
- msgstr ""
2518
-
2519
- #: defaults.php:72
2520
- msgid "Compile-time parse error."
2521
- msgstr ""
2522
-
2523
- #: defaults.php:76
2524
- msgid "Run-time notice."
2525
- msgstr ""
2526
-
2527
- #: defaults.php:80
2528
- msgid "Fatal error that occurred during startup."
2529
- msgstr ""
2530
-
2531
- #: defaults.php:84
2532
- msgid "Warnings that occurred during startup."
2533
- msgstr ""
2534
-
2535
- #: defaults.php:88
2536
- msgid "Fatal compile-time error."
2537
- msgstr ""
2538
-
2539
- #: defaults.php:92
2540
- msgid "Compile-time warning."
2541
- msgstr ""
2542
-
2543
- #: defaults.php:96
2544
- msgid "User-generated error message."
2545
- msgstr ""
2546
-
2547
- #: defaults.php:100
2548
- msgid "User-generated warning message."
2549
- msgstr ""
2550
-
2551
- #: defaults.php:104
2552
- msgid "User-generated notice message."
2553
- msgstr ""
2554
-
2555
- #: defaults.php:108
2556
- msgid "Non-standard/optimal code warning."
2557
- msgstr ""
2558
-
2559
- #: defaults.php:112
2560
- msgid "Catchable fatal error."
2561
- msgstr ""
2562
-
2563
- #: defaults.php:116
2564
- msgid "Run-time deprecation notices."
2565
- msgstr ""
2566
-
2567
- #: defaults.php:120
2568
- msgid "Run-time user deprecation notices."
2569
- msgstr ""
2570
-
2571
- #: defaults.php:125
2572
- msgid "Critical, high-impact messages."
2573
- msgstr ""
2574
-
2575
- #: defaults.php:129
2576
- msgid "Debug informational messages."
2577
- msgstr ""
2578
-
2579
- #: defaults.php:139
2580
- msgid "Users Profiles & Activity"
2581
- msgstr ""
2582
-
2583
- #: defaults.php:144
2584
- msgid "User logged in"
2585
- msgstr ""
2586
-
2587
- #: defaults.php:144
2588
- msgid "Successfully logged in."
2589
- msgstr ""
2590
-
2591
- #: defaults.php:145
2592
- msgid "User logged out"
2593
- msgstr ""
2594
-
2595
- #: defaults.php:145
2596
- msgid "Successfully logged out."
2597
- msgstr ""
2598
-
2599
- #: defaults.php:146
2600
- msgid "Login failed"
2601
- msgstr ""
2602
-
2603
- #: defaults.php:146
2604
- msgid "%Attempts% failed login(s) detected."
2605
- msgstr ""
2606
-
2607
- #: defaults.php:147
2608
- msgid "Login failed / non existing user"
2609
- msgstr ""
2610
-
2611
- #: defaults.php:147
2612
- msgid ""
2613
- "%Attempts% failed login(s) detected using non existing user. %LogFileText%"
2614
- msgstr ""
2615
-
2616
- #: defaults.php:148
2617
- msgid "Login blocked"
2618
- msgstr ""
2619
-
2620
- #: defaults.php:148
2621
- msgid ""
2622
- "Blocked from logging in because the same WordPress user is logged in from "
2623
- "%ClientIP%."
2624
- msgstr ""
2625
-
2626
- #: defaults.php:149
2627
- msgid "User logged in with existing session(s)"
2628
- msgstr ""
2629
-
2630
- #: defaults.php:149
2631
- msgid ""
2632
- "Successfully logged in. Another session from %IPAddress% for this user "
2633
- "already exist."
2634
- msgstr ""
2635
-
2636
- #: defaults.php:150
2637
- msgid "User logged out all other sessions with the same username"
2638
- msgstr ""
2639
-
2640
- #: defaults.php:150
2641
- msgid "Logged out all other sessions with the same username."
2642
- msgstr ""
2643
-
2644
- #: defaults.php:151
2645
- msgid "User session destroyed and logged out"
2646
- msgstr ""
2647
-
2648
- #: defaults.php:151
2649
- msgid "Logged out session %TargetSessionID% which belonged to %TargetUserName%"
2650
- msgstr ""
2651
-
2652
- #: defaults.php:152
2653
- msgid "User uploaded file from Uploads directory"
2654
- msgstr ""
2655
-
2656
- #: defaults.php:152
2657
- msgid "Uploaded the file %FileName% in %FilePath%."
2658
- msgstr ""
2659
-
2660
- #: defaults.php:153
2661
- msgid "User deleted file from Uploads directory"
2662
- msgstr ""
2663
-
2664
- #: defaults.php:153
2665
- msgid "Deleted the file %FileName% from %FilePath%."
2666
- msgstr ""
2667
-
2668
- #: defaults.php:154
2669
- msgid "User requests non-existing pages (404 Error Pages)"
2670
- msgstr ""
2671
-
2672
- #: defaults.php:154
2673
- msgid ""
2674
- "Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. "
2675
- "%LinkFile%%URL%"
2676
- msgstr ""
2677
-
2678
- #: defaults.php:155
2679
- msgid "Website Visitor User requests non-existing pages (404 Error Pages)"
2680
- msgstr ""
2681
-
2682
- #: defaults.php:155
2683
- msgid ""
2684
- "Website Visitor Has requested a non existing page (404 Error Pages) %Attempts"
2685
- "% %Msg%. %LinkFile%%URL%"
2686
- msgstr ""
2687
-
2688
- #: defaults.php:162
2689
- msgid "New user was created on WordPress"
2690
- msgstr ""
2691
-
2692
- #: defaults.php:162
2693
- msgid ""
2694
- "A new user %NewUserData->Username% was created with role of %NewUserData-"
2695
- ">Roles%."
2696
- msgstr ""
2697
-
2698
- #: defaults.php:163
2699
- msgid "User created another WordPress user"
2700
- msgstr ""
2701
-
2702
- #: defaults.php:163
2703
- msgid ""
2704
- "%UserChanger% created a new user %NewUserData->Username% with the role of "
2705
- "%NewUserData->Roles%."
2706
- msgstr ""
2707
-
2708
- #: defaults.php:164
2709
- msgid "The role of a user was changed by another WordPress user"
2710
- msgstr ""
2711
-
2712
- #: defaults.php:164
2713
- msgid ""
2714
- "Changed the role of the user %TargetUsername% from %OldRole% to %NewRole%"
2715
- "%multisite_text%."
2716
- msgstr ""
2717
-
2718
- #: defaults.php:165
2719
- msgid "User has changed his or her password"
2720
- msgstr ""
2721
-
2722
- #: defaults.php:165
2723
- msgid "Changed the password."
2724
- msgstr ""
2725
-
2726
- #: defaults.php:166
2727
- msgid "User changed another user's password"
2728
- msgstr ""
2729
-
2730
- #: defaults.php:166
2731
- msgid ""
2732
- "Changed the password for the user %TargetUserData->Username% with the role "
2733
- "of %TargetUserData->Roles%."
2734
- msgstr ""
2735
-
2736
- #: defaults.php:167
2737
- msgid "User changed his or her email address"
2738
- msgstr ""
2739
-
2740
- #: defaults.php:167
2741
- msgid "Changed the email address from %OldEmail% to %NewEmail%."
2742
- msgstr ""
2743
-
2744
- #: defaults.php:168
2745
- msgid "User changed another user's email address"
2746
- msgstr ""
2747
-
2748
- #: defaults.php:168
2749
- msgid ""
2750
- "Changed the email address of the user %TargetUsername% from %OldEmail% to "
2751
- "%NewEmail%."
2752
- msgstr ""
2753
-
2754
- #: defaults.php:169
2755
- msgid "User was deleted by another user"
2756
- msgstr ""
2757
-
2758
- #: defaults.php:169
2759
- msgid ""
2760
- "Deleted the user %TargetUserData->Username% with the role of %TargetUserData-"
2761
- ">Roles%."
2762
- msgstr ""
2763
-
2764
- #: defaults.php:170
2765
- msgid "User opened the profile page of another user"
2766
- msgstr ""
2767
-
2768
- #: defaults.php:170
2769
- msgid "%UserChanger% opened the profile page of the user %TargetUsername%."
2770
- msgstr ""
2771
-
2772
- #: defaults.php:171
2773
- msgid "User updated a custom field value for a user"
2774
- msgstr ""
2775
-
2776
- #: defaults.php:171
2777
- msgid ""
2778
- "Changed the value of the custom field %custom_field_name%%ReportText% for "
2779
- "the user %TargetUsername%.%ChangeText%"
2780
- msgstr ""
2781
-
2782
- #: defaults.php:172
2783
- msgid "User created a custom field value for a user"
2784
- msgstr ""
2785
-
2786
- #: defaults.php:172
2787
- msgid ""
2788
- "Created the value of the custom field %custom_field_name% with %new_value% "
2789
- "for the user %TargetUsername%."
2790
- msgstr ""
2791
-
2792
- #: defaults.php:173
2793
- msgid "User changed first name for a user"
2794
- msgstr ""
2795
-
2796
- #: defaults.php:173
2797
- msgid ""
2798
- "Changed the first name of the user %TargetUsername% from %old_firstname% to "
2799
- "%new_firstname%"
2800
- msgstr ""
2801
-
2802
- #: defaults.php:174
2803
- msgid "User changed last name for a user"
2804
- msgstr ""
2805
-
2806
- #: defaults.php:174
2807
- msgid ""
2808
- "Changed the last name of the user %TargetUsername% from %old_lastname% to "
2809
- "%new_lastname%"
2810
- msgstr ""
2811
-
2812
- #: defaults.php:175
2813
- msgid "User changed nickname for a user"
2814
- msgstr ""
2815
-
2816
- #: defaults.php:175
2817
- msgid ""
2818
- "Changed the nickname of the user %TargetUsername% from %old_nickname% to "
2819
- "%new_nickname%"
2820
- msgstr ""
2821
-
2822
- #: defaults.php:176
2823
- msgid "User changed the display name for a user"
2824
- msgstr ""
2825
-
2826
- #: defaults.php:176
2827
- msgid ""
2828
- "Changed the Display name publicly of user %TargetUsername% from "
2829
- "%old_displayname% to %new_displayname%"
2830
- msgstr ""
2831
-
2832
- #: defaults.php:183
2833
- msgid "Content & Comments"
2834
- msgstr ""
2835
-
2836
- #: defaults.php:188
2837
- msgid "User created a new post and saved it as draft"
2838
- msgstr ""
2839
-
2840
- #: defaults.php:188
2841
- msgid ""
2842
- "Created a new %PostType% titled %PostTitle% and saved it as draft. "
2843
- "%EditorLinkPost%."
2844
- msgstr ""
2845
-
2846
- #: defaults.php:189
2847
- msgid "User published a post"
2848
- msgstr ""
2849
-
2850
- #: defaults.php:189
2851
- msgid ""
2852
- "Published a %PostType% titled %PostTitle%. URL is %PostUrl%. %EditorLinkPost"
2853
- "%."
2854
- msgstr ""
2855
-
2856
- #: defaults.php:190
2857
- msgid "User modified a post"
2858
- msgstr ""
2859
-
2860
- #: defaults.php:190
2861
- msgid ""
2862
- "Modified the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
2863
- "%EditorLinkPost%."
2864
- msgstr ""
2865
-
2866
- #: defaults.php:191
2867
- msgid "User permanently deleted a post from the trash"
2868
- msgstr ""
2869
-
2870
- #: defaults.php:191
2871
- msgid ""
2872
- "Permanently deleted the %PostType% titled %PostTitle%. URL was %PostUrl%."
2873
- msgstr ""
2874
-
2875
- #: defaults.php:192
2876
- msgid "User moved a post to the trash"
2877
- msgstr ""
2878
-
2879
- #: defaults.php:192
2880
- msgid ""
2881
- "Moved the %PostStatus% %PostType% titled %PostTitle% to trash. URL is "
2882
- "%PostUrl%."
2883
- msgstr ""
2884
-
2885
- #: defaults.php:193
2886
- msgid "User restored a post from trash"
2887
- msgstr ""
2888
-
2889
- #: defaults.php:193
2890
- msgid ""
2891
- "The %PostStatus% %PostType% titled %PostTitle% has been restored from trash. "
2892
- "URL is: %PostUrl%. %EditorLinkPost%."
2893
- msgstr ""
2894
-
2895
- #: defaults.php:194
2896
- msgid "User changed post URL"
2897
- msgstr ""
2898
-
2899
- #: defaults.php:194
2900
- msgid ""
2901
- "Changed the URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText"
2902
- "%.%ChangeText% %EditorLinkPost%."
2903
- msgstr ""
2904
-
2905
- #: defaults.php:195
2906
- msgid "User changed post author"
2907
- msgstr ""
2908
-
2909
- #: defaults.php:195
2910
- msgid ""
2911
- "Changed the author of the %PostStatus% %PostType% titled %PostTitle% from "
2912
- "%OldAuthor% to %NewAuthor%. URL is: %PostUrl%. %EditorLinkPost%."
2913
- msgstr ""
2914
-
2915
- #: defaults.php:196
2916
- msgid "User changed post status"
2917
- msgstr ""
2918
-
2919
- #: defaults.php:196
2920
- msgid ""
2921
- "Changed the status of the %PostType% titled %PostTitle% from %OldStatus% to "
2922
- "%NewStatus%. URL is: %PostUrl%. %EditorLinkPost%."
2923
- msgstr ""
2924
-
2925
- #: defaults.php:197
2926
- msgid "User changed the visibility of a post"
2927
- msgstr ""
2928
-
2929
- #: defaults.php:197
2930
- msgid ""
2931
- "Changed the visibility of the %PostStatus% %PostType% titled %PostTitle% "
2932
- "from %OldVisibility% to %NewVisibility%. URL is: %PostUrl%. %EditorLinkPost%."
2933
- msgstr ""
2934
-
2935
- #: defaults.php:198
2936
- msgid "User changed the date of a post"
2937
- msgstr ""
2938
-
2939
- #: defaults.php:198
2940
- msgid ""
2941
- "Changed the date of the %PostStatus% %PostType% titled %PostTitle% from "
2942
- "%OldDate% to %NewDate%. URL is: %PostUrl%. %EditorLinkPost%."
2943
- msgstr ""
2944
-
2945
- #: defaults.php:199
2946
- msgid "User changed the parent of a page"
2947
- msgstr ""
2948
-
2949
- #: defaults.php:199
2950
- msgid ""
2951
- "Changed the parent of the %PostStatus% %PostType% titled %PostTitle% from "
2952
- "%OldParentName% to %NewParentName%. %EditorLinkPost%."
2953
- msgstr ""
2954
-
2955
- #: defaults.php:200
2956
- msgid "User changed the template of a page"
2957
- msgstr ""
2958
-
2959
- #: defaults.php:200
2960
- msgid ""
2961
- "Changed the template of the %PostStatus% %PostType% titled %PostTitle% from "
2962
- "%OldTemplate% to %NewTemplate%. %EditorLinkPost%."
2963
- msgstr ""
2964
-
2965
- #: defaults.php:201
2966
- msgid "User set a post as sticky"
2967
- msgstr ""
2968
-
2969
- #: defaults.php:201
2970
- msgid ""
2971
- "Set the post %PostTitle% as Sticky. Post URL is %PostUrl%. %EditorLinkPost%."
2972
- msgstr ""
2973
-
2974
- #: defaults.php:202
2975
- msgid "User removed post from sticky"
2976
- msgstr ""
2977
-
2978
- #: defaults.php:202
2979
- msgid "Removed the post %PostTitle% from Sticky. %EditorLinkPost%."
2980
- msgstr ""
2981
-
2982
- #: defaults.php:203
2983
- msgid "User modified the content of a post"
2984
- msgstr ""
2985
-
2986
- #: defaults.php:203
2987
- msgid ""
2988
- "Modified the content of the %PostStatus% %PostType% titled %PostTitle%. Post "
2989
- "URL is %PostUrl%. %RevisionLink% %EditorLinkPost%."
2990
- msgstr ""
2991
-
2992
- #: defaults.php:204
2993
- msgid "User submitted a post for review"
2994
- msgstr ""
2995
-
2996
- #: defaults.php:204
2997
- msgid ""
2998
- "Submitted the %PostType% titled %PostTitle% for review. URL is: %PostUrl%. "
2999
- "%EditorLinkPost%."
3000
- msgstr ""
3001
-
3002
- #: defaults.php:205
3003
- msgid "User scheduled a post"
3004
- msgstr ""
3005
-
3006
- #: defaults.php:205
3007
- msgid ""
3008
- "Scheduled the %PostType% titled %PostTitle% to be published on "
3009
- "%PublishingDate%. URL is: %PostUrl%. %EditorLinkPost%."
3010
- msgstr ""
3011
-
3012
- #: defaults.php:206
3013
- msgid "User changed title of a post"
3014
- msgstr ""
3015
-
3016
- #: defaults.php:206
3017
- msgid ""
3018
- "Changed the title of the %PostStatus% %PostType% from %OldTitle% to %NewTitle"
3019
- "%. URL is: %PostUrl%. %EditorLinkPost%."
3020
- msgstr ""
3021
-
3022
- #: defaults.php:207
3023
- msgid "User opened a post in the editor"
3024
- msgstr ""
3025
-
3026
- #: defaults.php:207
3027
- msgid ""
3028
- "Opened the %PostStatus% %PostType% titled %PostTitle% in the editor. URL is: "
3029
- "%PostUrl%. %EditorLinkPost%."
3030
- msgstr ""
3031
-
3032
- #: defaults.php:208
3033
- msgid "User viewed a post"
3034
- msgstr ""
3035
-
3036
- #: defaults.php:208
3037
- msgid ""
3038
- "Viewed the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3039
- "%EditorLinkPost%."
3040
- msgstr ""
3041
-
3042
- #: defaults.php:209
3043
- msgid "A plugin modified a post"
3044
- msgstr ""
3045
-
3046
- #: defaults.php:209
3047
- msgid ""
3048
- "Plugin modified the %PostStatus% %PostType% titled %PostTitle% of type "
3049
- "%PostType%. URL is: %PostUrl%. %EditorLinkPost%."
3050
- msgstr ""
3051
-
3052
- #: defaults.php:210
3053
- msgid "User disabled Comments/Trackbacks and Pingbacks in a post"
3054
- msgstr ""
3055
-
3056
- #: defaults.php:210
3057
- msgid ""
3058
- "Disabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
3059
- "%PostUrl%. %EditorLinkPost%."
3060
- msgstr ""
3061
-
3062
- #: defaults.php:211
3063
- msgid "User enabled Comments/Trackbacks and Pingbacks in a post"
3064
- msgstr ""
3065
-
3066
- #: defaults.php:211
3067
- msgid ""
3068
- "Enabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
3069
- "%PostUrl%. %EditorLinkPost%."
3070
- msgstr ""
3071
-
3072
- #: defaults.php:212
3073
- msgid "User added post tag"
3074
- msgstr ""
3075
-
3076
- #: defaults.php:212
3077
- msgid ""
3078
- "Added the tag %tag% to the %PostStatus% post titled %PostTitle%. URL is: "
3079
- "%PostUrl%. %EditorLinkPost%."
3080
- msgstr ""
3081
-
3082
- #: defaults.php:213
3083
- msgid "User removed post tag"
3084
- msgstr ""
3085
-
3086
- #: defaults.php:213
3087
- msgid ""
3088
- "Removed the tag %tag% from the %PostStatus% post titled %PostTitle%. URL is: "
3089
- "%PostUrl%. %EditorLinkPost%."
3090
- msgstr ""
3091
-
3092
- #: defaults.php:214
3093
- msgid "User created new tag"
3094
- msgstr ""
3095
-
3096
- #: defaults.php:214
3097
- msgid "Added a new tag called %TagName%. View the tag: %TagLink%."
3098
- msgstr ""
3099
-
3100
- #: defaults.php:215
3101
- msgid "User deleted tag"
3102
- msgstr ""
3103
-
3104
- #: defaults.php:215
3105
- msgid "Deleted the tag %TagName%."
3106
- msgstr ""
3107
-
3108
- #: defaults.php:216
3109
- msgid "User renamed tag"
3110
- msgstr ""
3111
-
3112
- #: defaults.php:216
3113
- msgid "Renamed a tag from %old_name% to %new_name%. View the tag: %TagLink%."
3114
- msgstr ""
3115
-
3116
- #: defaults.php:217
3117
- msgid "User changed tag slug"
3118
- msgstr ""
3119
-
3120
- #: defaults.php:217
3121
- msgid ""
3122
- "Changed the slug of tag %tag% from %old_slug% to %new_slug%. View the tag: "
3123
- "%TagLink%."
3124
- msgstr ""
3125
-
3126
- #: defaults.php:218
3127
- msgid "User changed tag description"
3128
- msgstr ""
3129
-
3130
- #: defaults.php:218
3131
- msgid ""
3132
- "Changed the description of the tag %tag%%ReportText%.%ChangeText% View the "
3133
- "tag: %TagLink%."
3134
- msgstr ""
3135
-
3136
- #: defaults.php:219
3137
- msgid "User changed post category"
3138
- msgstr ""
3139
-
3140
- #: defaults.php:219
3141
- msgid ""
3142
- "Changed the category of the %PostStatus% %PostType% titled %PostTitle% from "
3143
- "%OldCategories% to %NewCategories%. URL is: %PostUrl%. %EditorLinkPost%."
3144
- msgstr ""
3145
-
3146
- #: defaults.php:220
3147
- msgid "User created new category"
3148
- msgstr ""
3149
-
3150
- #: defaults.php:220
3151
- msgid ""
3152
- "Created a new category called %CategoryName%. Category slug is %Slug%. "
3153
- "%CategoryLink%."
3154
- msgstr ""
3155
-
3156
- #: defaults.php:221
3157
- msgid "User deleted category"
3158
- msgstr ""
3159
-
3160
- #: defaults.php:221
3161
- msgid ""
3162
- "Deleted the %CategoryName% category. Category slug was %Slug%. %CategoryLink"
3163
- "%."
3164
- msgstr ""
3165
-
3166
- #: defaults.php:222
3167
- msgid "Changed the parent of a category"
3168
- msgstr ""
3169
-
3170
- #: defaults.php:222
3171
- msgid ""
3172
- "Changed the parent of the category %CategoryName% from %OldParent% to "
3173
- "%NewParent%. %CategoryLink%."
3174
- msgstr ""
3175
-
3176
- #: defaults.php:223
3177
- msgid "User changed category name"
3178
- msgstr ""
3179
-
3180
- #: defaults.php:223
3181
- msgid "Changed the name of the category %old_name% to %new_name%."
3182
- msgstr ""
3183
-
3184
- #: defaults.php:224
3185
- msgid "User changed category slug"
3186
- msgstr ""
3187
-
3188
- #: defaults.php:224
3189
- msgid ""
3190
- "Changed the slug of the category %CategoryName% from %old_slug% to %new_slug"
3191
- "%."
3192
- msgstr ""
3193
-
3194
- #: defaults.php:225
3195
- msgid "User created a custom field for a post"
3196
- msgstr ""
3197
-
3198
- #: defaults.php:225
3199
- msgid ""
3200
- "Created a new custom field called %MetaKey% with value %MetaValue% in the "
3201
- "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3202
- "%EditorLinkPost%.<br>%MetaLink%."
3203
- msgstr ""
3204
-
3205
- #: defaults.php:226
3206
- msgid "User updated a custom field value for a post"
3207
- msgstr ""
3208
-
3209
- #: defaults.php:226
3210
- msgid ""
3211
- "Modified the value of the custom field %MetaKey%%ReportText% in the "
3212
- "%PostStatus% %PostType% titled %PostTitle%.%ChangeText% URL is: %PostUrl%. "
3213
- "%EditorLinkPost%.<br>%MetaLink%."
3214
- msgstr ""
3215
-
3216
- #: defaults.php:227
3217
- msgid "User deleted a custom field from a post"
3218
- msgstr ""
3219
-
3220
- #: defaults.php:227
3221
- msgid ""
3222
- "Deleted the custom field %MetaKey% with value %MetaValue% from %PostStatus% "
3223
- "%PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%."
3224
- msgstr ""
3225
-
3226
- #: defaults.php:228
3227
- msgid "User updated a custom field name for a post"
3228
- msgstr ""
3229
-
3230
- #: defaults.php:228
3231
- msgid ""
3232
- "Changed the custom field's name from %MetaKeyOld% to %MetaKeyNew% in the "
3233
- "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
3234
- "%EditorLinkPost%.<br>%MetaLink%."
3235
- msgstr ""
3236
-
3237
- #: defaults.php:234
3238
- msgid "Comments"
3239
- msgstr ""
3240
-
3241
- #: defaults.php:235
3242
- msgid "User approved a comment"
3243
- msgstr ""
3244
-
3245
- #: defaults.php:235
3246
- msgid ""
3247
- "Approved the comment posted in response to the post %PostTitle% by %Author% "
3248
- "on %CommentLink%."
3249
- msgstr ""
3250
-
3251
- #: defaults.php:236
3252
- msgid "User unapproved a comment"
3253
- msgstr ""
3254
-
3255
- #: defaults.php:236
3256
- msgid ""
3257
- "Unapproved the comment posted in response to the post %PostTitle% by %Author"
3258
- "% on %CommentLink%."
3259
- msgstr ""
3260
-
3261
- #: defaults.php:237
3262
- msgid "User replied to a comment"
3263
- msgstr ""
3264
-
3265
- #: defaults.php:237
3266
- msgid ""
3267
- "Replied to the comment posted in response to the post %PostTitle% by %Author"
3268
- "% on %CommentLink%."
3269
- msgstr ""
3270
-
3271
- #: defaults.php:238
3272
- msgid "User edited a comment"
3273
- msgstr ""
3274
-
3275
- #: defaults.php:238
3276
- msgid ""
3277
- "Edited a comment posted in response to the post %PostTitle% by %Author% on "
3278
- "%CommentLink%."
3279
- msgstr ""
3280
-
3281
- #: defaults.php:239
3282
- msgid "User marked a comment as Spam"
3283
- msgstr ""
3284
-
3285
- #: defaults.php:239
3286
- msgid ""
3287
- "Marked the comment posted in response to the post %PostTitle% by %Author% on "
3288
- "%CommentLink% as Spam."
3289
- msgstr ""
3290
-
3291
- #: defaults.php:240
3292
- msgid "User marked a comment as Not Spam"
3293
- msgstr ""
3294
-
3295
- #: defaults.php:240
3296
- msgid ""
3297
- "Marked the comment posted in response to the post %PostTitle% by %Author% on "
3298
- "%CommentLink% as Not Spam."
3299
- msgstr ""
3300
-
3301
- #: defaults.php:241
3302
- msgid "User moved a comment to trash"
3303
- msgstr ""
3304
-
3305
- #: defaults.php:241
3306
- msgid ""
3307
- "Moved the comment posted in response to the post %PostTitle% by %Author% on "
3308
- "%Date% to trash."
3309
- msgstr ""
3310
-
3311
- #: defaults.php:242
3312
- msgid "User restored a comment from the trash"
3313
- msgstr ""
3314
-
3315
- #: defaults.php:242
3316
- msgid ""
3317
- "Restored the comment posted in response to the post %PostTitle% by %Author% "
3318
- "on %CommentLink% from the trash."
3319
- msgstr ""
3320
-
3321
- #: defaults.php:243
3322
- msgid "User permanently deleted a comment"
3323
- msgstr ""
3324
-
3325
- #: defaults.php:243
3326
- msgid ""
3327
- "Permanently deleted the comment posted in response to the post %PostTitle% "
3328
- "by %Author% on %Date%."
3329
- msgstr ""
3330
-
3331
- #: defaults.php:244
3332
- msgid "User posted a comment"
3333
- msgstr ""
3334
-
3335
- #: defaults.php:244 defaults.php:245
3336
- msgid "%CommentMsg% on %CommentLink%."
3337
- msgstr ""
3338
-
3339
- #: defaults.php:245
3340
- msgid "Visitor posted a comment"
3341
- msgstr ""
3342
-
3343
- #: defaults.php:257
3344
- msgid "User modified a draft blog post"
3345
- msgstr ""
3346
-
3347
- #: defaults.php:257
3348
- msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
3349
- msgstr ""
3350
-
3351
- #: defaults.php:258
3352
- msgid "User created a new post with custom post type and saved it as draft"
3353
- msgstr ""
3354
-
3355
- #: defaults.php:258
3356
- msgid ""
3357
- "Created a new custom post called %PostTitle% of type %PostType%. "
3358
- "%EditorLinkPost%."
3359
- msgstr ""
3360
-
3361
- #: defaults.php:259
3362
- msgid "User published a post with custom post type"
3363
- msgstr ""
3364
-
3365
- #: defaults.php:259
3366
- msgid ""
3367
- "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
3368
- "%. %EditorLinkPost%."
3369
- msgstr ""
3370
-
3371
- #: defaults.php:260
3372
- msgid "User modified a post with custom post type"
3373
- msgstr ""
3374
-
3375
- #: defaults.php:260
3376
- msgid ""
3377
- "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
3378
- "%. %EditorLinkPost%."
3379
- msgstr ""
3380
-
3381
- #: defaults.php:261
3382
- msgid "User modified a draft post with custom post type"
3383
- msgstr ""
3384
-
3385
- #: defaults.php:261
3386
- msgid ""
3387
- "Modified the draft custom post %PostTitle% of type is %PostType%. "
3388
- "%EditorLinkPost%."
3389
- msgstr ""
3390
-
3391
- #: defaults.php:262
3392
- msgid "User permanently deleted post with custom post type"
3393
- msgstr ""
3394
-
3395
- #: defaults.php:262
3396
- msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
3397
- msgstr ""
3398
-
3399
- #: defaults.php:263
3400
- msgid "User moved post with custom post type to trash"
3401
- msgstr ""
3402
-
3403
- #: defaults.php:263
3404
- msgid ""
3405
- "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was "
3406
- "%PostUrl%."
3407
- msgstr ""
3408
-
3409
- #: defaults.php:264
3410
- msgid "User restored post with custom post type from trash"
3411
- msgstr ""
3412
-
3413
- #: defaults.php:264
3414
- msgid ""
3415
- "The custom post %PostTitle% of type %PostType% has been restored from trash. "
3416
- "%EditorLinkPost%."
3417
- msgstr ""
3418
-
3419
- #: defaults.php:265
3420
- msgid "User changed the category of a post with custom post type"
3421
- msgstr ""
3422
-
3423
- #: defaults.php:265
3424
- msgid ""
3425
- "Changed the category(ies) of the custom post %PostTitle% of type %PostType% "
3426
- "from %OldCategories% to %NewCategories%. %EditorLinkPost%."
3427
- msgstr ""
3428
-
3429
- #: defaults.php:266
3430
- msgid "User changed the URL of a post with custom post type"
3431
- msgstr ""
3432
-
3433
- #: defaults.php:266
3434
- msgid ""
3435
- "Changed the URL of the custom post %PostTitle% of type %PostType% from "
3436
- "%OldUrl% to %NewUrl%. %EditorLinkPost%."
3437
- msgstr ""
3438
-
3439
- #: defaults.php:267
3440
- msgid "User changed the author or post with custom post type"
3441
- msgstr ""
3442
-
3443
- #: defaults.php:267
3444
- msgid ""
3445
- "Changed the author of custom post %PostTitle% of type %PostType% from "
3446
- "%OldAuthor% to %NewAuthor%. %EditorLinkPost%."
3447
- msgstr ""
3448
-
3449
- #: defaults.php:268
3450
- msgid "User changed the status of post with custom post type"
3451
- msgstr ""
3452
-
3453
- #: defaults.php:268
3454
- msgid ""
3455
- "Changed the status of custom post %PostTitle% of type %PostType% from "
3456
- "%OldStatus% to %NewStatus%. %EditorLinkPost%."
3457
- msgstr ""
3458
-
3459
- #: defaults.php:269
3460
- msgid "User changed the visibility of a post with custom post type"
3461
- msgstr ""
3462
-
3463
- #: defaults.php:269
3464
- msgid ""
3465
- "Changed the visibility of the custom post %PostTitle% of type %PostType% "
3466
- "from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
3467
- msgstr ""
3468
-
3469
- #: defaults.php:270
3470
- msgid "User changed the date of post with custom post type"
3471
- msgstr ""
3472
-
3473
- #: defaults.php:270
3474
- msgid ""
3475
- "Changed the date of the custom post %PostTitle% of type %PostType% from "
3476
- "%OldDate% to %NewDate%. %EditorLinkPost%."
3477
- msgstr ""
3478
-
3479
- #: defaults.php:271
3480
- msgid "User created a custom field for a custom post type"
3481
- msgstr ""
3482
-
3483
- #: defaults.php:271
3484
- msgid ""
3485
- "Created a new custom field %MetaKey% with value %MetaValue% in custom post "
3486
- "%PostTitle% of type %PostType%. %EditorLinkPost%.<br>%MetaLink%."
3487
- msgstr ""
3488
-
3489
- #: defaults.php:272
3490
- msgid "User updated a custom field for a custom post type"
3491
- msgstr ""
3492
-
3493
- #: defaults.php:272
3494
- msgid ""
3495
- "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
3496
- "%MetaValueNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost"
3497
- "%.<br>%MetaLink%."
3498
- msgstr ""
3499
-
3500
- #: defaults.php:273
3501
- msgid "User deleted a custom field from a custom post type"
3502
- msgstr ""
3503
-
3504
- #: defaults.php:273
3505
- msgid ""
3506
- "Deleted the custom field %MetaKey% with id %MetaID% from custom post "
3507
- "%PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
3508
- msgstr ""
3509
-
3510
- #: defaults.php:274
3511
- msgid "User updated a custom field name for a custom post type"
3512
- msgstr ""
3513
-
3514
- #: defaults.php:274
3515
- msgid ""
3516
- "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom "
3517
- "post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
3518
- msgstr ""
3519
-
3520
- #: defaults.php:275
3521
- msgid "User modified content for a published custom post type"
3522
- msgstr ""
3523
-
3524
- #: defaults.php:275
3525
- msgid ""
3526
- "Modified the content of the published custom post type %PostTitle%. Post URL "
3527
- "is %PostUrl%.%EditorLinkPost%."
3528
- msgstr ""
3529
-
3530
- #: defaults.php:276
3531
- msgid "User modified content for a draft post"
3532
- msgstr ""
3533
-
3534
- #: defaults.php:276
3535
- msgid ""
3536
- "Modified the content of the draft post %PostTitle%.%RevisionLink% "
3537
- "%EditorLinkPost%."
3538
- msgstr ""
3539
-
3540
- #: defaults.php:277
3541
- msgid "User modified content for a draft custom post type"
3542
- msgstr ""
3543
-
3544
- #: defaults.php:277
3545
- msgid ""
3546
- "Modified the content of the draft custom post type %PostTitle%."
3547
- "%EditorLinkPost%."
3548
- msgstr ""
3549
-
3550
- #: defaults.php:278
3551
- msgid "User modified content of a post"
3552
- msgstr ""
3553
-
3554
- #: defaults.php:278
3555
- msgid ""
3556
- "Modified the content of post %PostTitle% which is submitted for review."
3557
- "%RevisionLink% %EditorLinkPost%."
3558
- msgstr ""
3559
-
3560
- #: defaults.php:279
3561
- msgid "User scheduled a custom post type"
3562
- msgstr ""
3563
-
3564
- #: defaults.php:279
3565
- msgid ""
3566
- "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. "
3567
- "%EditorLinkPost%."
3568
- msgstr ""
3569
-
3570
- #: defaults.php:280
3571
- msgid "User changed title of a custom post type"
3572
- msgstr ""
3573
-
3574
- #: defaults.php:280
3575
- msgid ""
3576
- "Changed the title of the custom post %OldTitle% to %NewTitle%. "
3577
- "%EditorLinkPost%."
3578
- msgstr ""
3579
-
3580
- #: defaults.php:281
3581
- msgid "User opened a custom post type in the editor"
3582
- msgstr ""
3583
-
3584
- #: defaults.php:281
3585
- msgid ""
3586
- "Opened the custom post %PostTitle% of type %PostType% in the editor. View "
3587
- "the post: %EditorLinkPost%."
3588
- msgstr ""
3589
-
3590
- #: defaults.php:282
3591
- msgid "User viewed a custom post type"
3592
- msgstr ""
3593
-
3594
- #: defaults.php:282
3595
- msgid ""
3596
- "Viewed the custom post %PostTitle% of type %PostType%. View the post: "
3597
- "%PostUrl%."
3598
- msgstr ""
3599
-
3600
- #: defaults.php:283
3601
- msgid "A plugin created a custom post"
3602
- msgstr ""
3603
-
3604
- #: defaults.php:283
3605
- msgid "A plugin automatically created the following custom post: %PostTitle%."
3606
- msgstr ""
3607
-
3608
- #: defaults.php:284
3609
- msgid "A plugin deleted a custom post"
3610
- msgstr ""
3611
-
3612
- #: defaults.php:284
3613
- msgid "A plugin automatically deleted the following custom post: %PostTitle%."
3614
- msgstr ""
3615
-
3616
- #: defaults.php:285
3617
- msgid "A plugin modified a custom post"
3618
  msgstr ""
3619
 
3620
- #: defaults.php:285
3621
  msgid ""
3622
- "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
3623
  msgstr ""
3624
 
3625
- #: defaults.php:297
3626
- msgid "User created a new WordPress page and saved it as draft"
3627
  msgstr ""
3628
 
3629
- #: defaults.php:297
3630
- msgid ""
3631
- "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage"
3632
- "%."
3633
  msgstr ""
3634
 
3635
- #: defaults.php:298
3636
- msgid "User published a WordPress page"
3637
  msgstr ""
3638
 
3639
- #: defaults.php:298
3640
  msgid ""
3641
- "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
3642
  msgstr ""
3643
 
3644
- #: defaults.php:299
3645
- msgid "User modified a published WordPress page"
3646
  msgstr ""
3647
 
3648
- #: defaults.php:299
3649
- msgid ""
3650
- "Modified the published page %PostTitle%. Page URL is %PostUrl%. "
3651
- "%EditorLinkPage%."
3652
  msgstr ""
3653
 
3654
- #: defaults.php:300
3655
- msgid "User modified a draft WordPress page"
3656
  msgstr ""
3657
 
3658
- #: defaults.php:300
3659
  msgid ""
3660
- "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
3661
- msgstr ""
3662
-
3663
- #: defaults.php:301
3664
- msgid "User permanently deleted a page from the trash"
3665
- msgstr ""
3666
-
3667
- #: defaults.php:301
3668
- msgid "Permanently deleted the page %PostTitle%."
3669
- msgstr ""
3670
-
3671
- #: defaults.php:302
3672
- msgid "User moved WordPress page to the trash"
3673
- msgstr ""
3674
-
3675
- #: defaults.php:302
3676
- msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
3677
- msgstr ""
3678
-
3679
- #: defaults.php:303
3680
- msgid "User restored a WordPress page from trash"
3681
- msgstr ""
3682
-
3683
- #: defaults.php:303
3684
- msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
3685
  msgstr ""
3686
 
3687
- #: defaults.php:304
3688
- msgid "User changed page URL"
3689
  msgstr ""
3690
 
3691
- #: defaults.php:304
3692
  msgid ""
3693
- "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. "
3694
- "%EditorLinkPage%."
3695
  msgstr ""
3696
 
3697
- #: defaults.php:305
3698
- msgid "User changed page author"
3699
  msgstr ""
3700
 
3701
- #: defaults.php:305
3702
  msgid ""
3703
- "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. "
3704
- "%EditorLinkPage%."
3705
  msgstr ""
3706
 
3707
- #: defaults.php:306
3708
- msgid "User changed page status"
3709
  msgstr ""
3710
 
3711
- #: defaults.php:306
3712
- msgid ""
3713
- "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. "
3714
- "%EditorLinkPage%."
3715
  msgstr ""
3716
 
3717
- #: defaults.php:307
3718
- msgid "User changed the visibility of a page post"
3719
  msgstr ""
3720
 
3721
- #: defaults.php:307
3722
- msgid ""
3723
- "Changed the visibility of the page %PostTitle% from %OldVisibility% to "
3724
- "%NewVisibility%. %EditorLinkPage%."
3725
  msgstr ""
3726
 
3727
- #: defaults.php:308
3728
- msgid "User changed the date of a page post"
3729
  msgstr ""
3730
 
3731
- #: defaults.php:308
3732
  msgid ""
3733
- "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. "
3734
- "%EditorLinkPage%."
3735
  msgstr ""
3736
 
3737
- #: defaults.php:309
3738
- msgid "User created a custom field for a page"
3739
  msgstr ""
3740
 
3741
- #: defaults.php:309
3742
  msgid ""
3743
- "Created a new custom field called %MetaKey% with value %MetaValue% in the "
3744
- "page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3745
  msgstr ""
3746
 
3747
- #: defaults.php:310
3748
- msgid "User updated a custom field value for a page"
3749
  msgstr ""
3750
 
3751
- #: defaults.php:310
3752
  msgid ""
3753
- "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
3754
- "%MetaValueNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3755
  msgstr ""
3756
 
3757
- #: defaults.php:311
3758
- msgid "User deleted a custom field from a page"
3759
  msgstr ""
3760
 
3761
- #: defaults.php:311
3762
- msgid ""
3763
- "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% "
3764
- "%EditorLinkPage%.<br>%MetaLink%."
3765
  msgstr ""
3766
 
3767
- #: defaults.php:312
3768
- msgid "User updated a custom field name for a page"
3769
  msgstr ""
3770
 
3771
- #: defaults.php:312
3772
  msgid ""
3773
- "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page "
3774
- "%PostTitle% %EditorLinkPage%.<br>%MetaLink%."
3775
  msgstr ""
3776
 
3777
- #: defaults.php:313
3778
- msgid "User modified content for a published page"
3779
  msgstr ""
3780
 
3781
- #: defaults.php:313
3782
  msgid ""
3783
- "Modified the content of the published page %PostTitle%. Page URL is %PostUrl"
3784
- "%. %RevisionLink% %EditorLinkPage%."
3785
  msgstr ""
3786
 
3787
- #: defaults.php:314
3788
- msgid "User modified content for a draft page"
3789
  msgstr ""
3790
 
3791
- #: defaults.php:314
3792
  msgid ""
3793
- "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage"
3794
- "%."
3795
  msgstr ""
3796
 
3797
- #: defaults.php:315
3798
- msgid "User scheduled a page"
3799
  msgstr ""
3800
 
3801
- #: defaults.php:315
3802
  msgid ""
3803
- "Scheduled the page %PostTitle% to be published %PublishingDate%. "
3804
- "%EditorLinkPage%."
3805
  msgstr ""
3806
 
3807
- #: defaults.php:316
3808
- msgid "User changed title of a page"
3809
  msgstr ""
3810
 
3811
- #: defaults.php:316
3812
  msgid ""
3813
- "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
3814
- msgstr ""
3815
-
3816
- #: defaults.php:317
3817
- msgid "User opened a page in the editor"
3818
  msgstr ""
3819
 
3820
- #: defaults.php:317
3821
- msgid ""
3822
- "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
3823
  msgstr ""
3824
 
3825
- #: defaults.php:318
3826
- msgid "User viewed a page"
3827
  msgstr ""
3828
 
3829
- #: defaults.php:318
3830
- msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
3831
  msgstr ""
3832
 
3833
- #: defaults.php:319
3834
- msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
3835
  msgstr ""
3836
 
3837
- #: defaults.php:319
3838
- msgid ""
3839
- "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
3840
  msgstr ""
3841
 
3842
- #: defaults.php:320
3843
- msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
3844
  msgstr ""
3845
 
3846
- #: defaults.php:320
3847
- msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
 
 
3848
  msgstr ""
3849
 
3850
- #: defaults.php:321
3851
- msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
3852
  msgstr ""
3853
 
3854
- #: defaults.php:321
3855
  msgid ""
3856
- "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
 
3857
  msgstr ""
3858
 
3859
- #: defaults.php:322
3860
- msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
3861
  msgstr ""
3862
 
3863
- #: defaults.php:322
3864
- msgid ""
3865
- "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
3866
  msgstr ""
3867
 
3868
- #: defaults.php:323
3869
- msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
3870
  msgstr ""
3871
 
3872
- #: defaults.php:323
3873
  msgid ""
3874
- "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
 
3875
  msgstr ""
3876
 
3877
- #: defaults.php:324
3878
- msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
3879
  msgstr ""
3880
 
3881
- #: defaults.php:324
3882
- msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
3883
  msgstr ""
3884
 
3885
- #: defaults.php:325
3886
- msgid "A plugin created a page"
3887
  msgstr ""
3888
 
3889
- #: defaults.php:325
3890
- msgid "A plugin automatically created the following page: %PostTitle%."
3891
  msgstr ""
3892
 
3893
- #: defaults.php:326
3894
- msgid "A plugin deleted a page"
3895
  msgstr ""
3896
 
3897
- #: defaults.php:326
3898
- msgid "A plugin automatically deleted the following page: %PostTitle%."
3899
  msgstr ""
3900
 
3901
- #: defaults.php:327
3902
- msgid "A plugin modified a page"
3903
  msgstr ""
3904
 
3905
- #: defaults.php:327
3906
- msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
3907
  msgstr ""
3908
 
3909
- #: defaults.php:334
3910
- msgid "WordPress Install"
3911
  msgstr ""
3912
 
3913
- #: defaults.php:338
3914
- msgid "Database"
3915
  msgstr ""
3916
 
3917
- #: defaults.php:339
3918
- msgid "Unknown component created tables"
3919
  msgstr ""
3920
 
3921
- #: defaults.php:339
3922
- msgid ""
3923
- "An unknown component created these tables in the database: %TableNames%."
3924
  msgstr ""
3925
 
3926
- #: defaults.php:340
3927
- msgid "Unknown component modified tables structure"
3928
  msgstr ""
3929
 
3930
- #: defaults.php:340
3931
  msgid ""
3932
- "An unknown component modified the structure of these database tables: "
3933
- "%TableNames%."
3934
  msgstr ""
3935
 
3936
- #: defaults.php:341
3937
- msgid "Unknown component deleted tables"
3938
  msgstr ""
3939
 
3940
- #: defaults.php:341
3941
  msgid ""
3942
- "An unknown component deleted the following tables from the database: "
3943
- "%TableNames%."
3944
  msgstr ""
3945
 
3946
- #: defaults.php:348
 
 
 
 
3947
  msgid "User installed a plugin"
3948
  msgstr ""
3949
 
3950
- #: defaults.php:348
3951
  msgid "Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%."
3952
  msgstr ""
3953
 
3954
- #: defaults.php:349
3955
  msgid "User activated a WordPress plugin"
3956
  msgstr ""
3957
 
3958
- #: defaults.php:349
3959
  msgid "Activated the plugin %PluginData->Name% installed in %PluginFile%."
3960
  msgstr ""
3961
 
3962
- #: defaults.php:350
3963
  msgid "User deactivated a WordPress plugin"
3964
  msgstr ""
3965
 
3966
- #: defaults.php:350
3967
  msgid "Deactivated the plugin %PluginData->Name% installed in %PluginFile%."
3968
  msgstr ""
3969
 
3970
- #: defaults.php:351
3971
  msgid "User uninstalled a plugin"
3972
  msgstr ""
3973
 
3974
- #: defaults.php:351
3975
  msgid ""
3976
  "Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile"
3977
  "%."
3978
  msgstr ""
3979
 
3980
- #: defaults.php:352
3981
  msgid "User upgraded a plugin"
3982
  msgstr ""
3983
 
3984
- #: defaults.php:352
3985
  msgid "Upgraded the plugin %PluginData->Name% installed in %PluginFile%."
3986
  msgstr ""
3987
 
3988
- #: defaults.php:353
3989
- msgid "Plugin created tables"
3990
  msgstr ""
3991
 
3992
- #: defaults.php:353
3993
  msgid ""
3994
- "Plugin %Plugin->Name% created these tables in the database: %TableNames%."
3995
  msgstr ""
3996
 
3997
- #: defaults.php:354
3998
- msgid "Plugin modified tables structure"
3999
  msgstr ""
4000
 
4001
- #: defaults.php:354
4002
  msgid ""
4003
- "Plugin %Plugin->Name% modified the structure of these database tables: "
4004
- "%TableNames%."
4005
  msgstr ""
4006
 
4007
- #: defaults.php:355
4008
- msgid "Plugin deleted tables"
4009
  msgstr ""
4010
 
4011
- #: defaults.php:355
4012
  msgid ""
4013
- "Plugin %Plugin->Name% deleted the following tables from the database: "
4014
- "%TableNames%."
4015
  msgstr ""
4016
 
4017
- #: defaults.php:356
4018
  msgid "A plugin created a post"
4019
  msgstr ""
4020
 
4021
- #: defaults.php:356
4022
  msgid ""
4023
  "A plugin automatically created the following %PostType% called %PostTitle%. "
4024
  "View the post: %EditorLinkPost%."
4025
  msgstr ""
4026
 
4027
- #: defaults.php:357
4028
- msgid "A plugin deleted a post"
4029
- msgstr ""
4030
-
4031
- #: defaults.php:357
4032
- msgid ""
4033
- "A plugin automatically deleted the following %PostType% called %PostTitle%."
4034
- msgstr ""
4035
-
4036
- #: defaults.php:358
4037
- msgid "User changed a file using the plugin editor"
4038
- msgstr ""
4039
-
4040
- #: defaults.php:358
4041
- msgid "Modified %File% with the Plugin Editor."
4042
  msgstr ""
4043
 
4044
- #: defaults.php:364
4045
- msgid "Themes"
4046
  msgstr ""
4047
 
4048
- #: defaults.php:365
4049
- msgid "User installed a theme"
4050
  msgstr ""
4051
 
4052
- #: defaults.php:365
4053
- msgid ""
4054
- "Installed the theme \"%Theme->Name%\" in %Theme->get_template_directory%."
4055
  msgstr ""
4056
 
4057
- #: defaults.php:366
4058
- msgid "User activated a theme"
4059
  msgstr ""
4060
 
4061
- #: defaults.php:366
4062
  msgid ""
4063
- "Activated the theme \"%Theme->Name%\", installed in %Theme-"
4064
- ">get_template_directory%."
4065
  msgstr ""
4066
 
4067
- #: defaults.php:367
4068
- msgid "User uninstalled a theme"
4069
  msgstr ""
4070
 
4071
- #: defaults.php:367
4072
- msgid ""
4073
- "Deleted the theme \"%Theme->Name%\" installed in %Theme-"
4074
- ">get_template_directory%."
4075
  msgstr ""
4076
 
4077
- #: defaults.php:368
4078
- msgid "Activated theme on network"
4079
  msgstr ""
4080
 
4081
- #: defaults.php:368
4082
- msgid ""
4083
- "Network activated the theme %Theme->Name% installed in %Theme-"
4084
- ">get_template_directory%."
4085
  msgstr ""
4086
 
4087
- #: defaults.php:369
4088
- msgid "Deactivated theme from network"
4089
  msgstr ""
4090
 
4091
- #: defaults.php:369
4092
  msgid ""
4093
- "Network deactivated the theme %Theme->Name% installed in %Theme-"
4094
  ">get_template_directory%."
4095
  msgstr ""
4096
 
4097
- #: defaults.php:370
4098
- msgid "Theme created tables"
4099
  msgstr ""
4100
 
4101
- #: defaults.php:370
4102
- msgid "Theme %Theme->Name% created these tables in the database: %TableNames%."
4103
  msgstr ""
4104
 
4105
- #: defaults.php:371
4106
- msgid "Theme modified tables structure"
4107
  msgstr ""
4108
 
4109
- #: defaults.php:371
4110
- msgid ""
4111
- "Theme %Theme->Name% modified the structure of these database tables: "
4112
- "%TableNames%."
4113
  msgstr ""
4114
 
4115
- #: defaults.php:372
4116
- msgid "Theme deleted tables"
4117
  msgstr ""
4118
 
4119
- #: defaults.php:372
4120
- msgid ""
4121
- "Theme %Theme->Name% deleted the following tables from the database: "
4122
- "%TableNames%."
4123
  msgstr ""
4124
 
4125
- #: defaults.php:373
4126
- msgid "User updated a theme"
4127
  msgstr ""
4128
 
4129
- #: defaults.php:373
4130
  msgid ""
4131
- "Updated the theme \"%Theme->Name%\" installed in %Theme-"
4132
- ">get_template_directory%."
4133
- msgstr ""
4134
-
4135
- #: defaults.php:374
4136
- msgid "User changed a file using the theme editor"
4137
  msgstr ""
4138
 
4139
- #: defaults.php:374
4140
- msgid "Modified %File% with the Theme Editor."
4141
  msgstr ""
4142
 
4143
- #: defaults.php:381
4144
  msgid "Unknown Error"
4145
  msgstr ""
4146
 
4147
- #: defaults.php:381
4148
  msgid "An unexpected error has occurred ."
4149
  msgstr ""
4150
 
4151
- #: defaults.php:382
4152
  msgid "PHP error"
4153
  msgstr ""
4154
 
4155
- #: defaults.php:382 defaults.php:383 defaults.php:384 defaults.php:385
4156
- #: defaults.php:386
4157
  msgid "%Message%."
4158
  msgstr ""
4159
 
4160
- #: defaults.php:383
4161
  msgid "PHP warning"
4162
  msgstr ""
4163
 
4164
- #: defaults.php:384
4165
  msgid "PHP notice"
4166
  msgstr ""
4167
 
4168
- #: defaults.php:385
4169
  msgid "PHP exception"
4170
  msgstr ""
4171
 
4172
- #: defaults.php:386
4173
  msgid "PHP shutdown error"
4174
  msgstr ""
4175
 
4176
- #: defaults.php:387
4177
  msgid "Events automatically pruned by system"
4178
  msgstr ""
4179
 
4180
- #: defaults.php:387
4181
- msgid "System automatically deleted %EventCount% event(s)."
4182
  msgstr ""
4183
 
4184
- #: defaults.php:388
4185
- msgid "WordPress was updated"
4186
  msgstr ""
4187
 
4188
- #: defaults.php:388
4189
- msgid "Updated WordPress from version %OldVersion% to %NewVersion%."
4190
  msgstr ""
4191
 
4192
- #: defaults.php:389
4193
- msgid "Reset plugin's settings to default"
4194
  msgstr ""
4195
 
4196
- #: defaults.php:389
4197
- msgid "Reset plugin's settings to default."
4198
  msgstr ""
4199
 
4200
- #: defaults.php:390
4201
- msgid "File content has been modified"
4202
  msgstr ""
4203
 
4204
- #: defaults.php:390
4205
- msgid "The content of the file %FileLocation% has been modified."
 
 
4206
  msgstr ""
4207
 
4208
- #: defaults.php:391
4209
- msgid "File added to the site"
4210
  msgstr ""
4211
 
4212
- #: defaults.php:391
4213
- msgid "The file %FileLocation% has been added to your website."
4214
  msgstr ""
4215
 
4216
- #: defaults.php:392
4217
- msgid "File deleted from the site"
4218
  msgstr ""
4219
 
4220
- #: defaults.php:392
4221
- msgid "The file %FileLocation% has been deleted from your website."
4222
  msgstr ""
4223
 
4224
- #: defaults.php:393
4225
- msgid "File not scanned because it is bigger than 5MB"
4226
  msgstr ""
4227
 
4228
- #: defaults.php:393
4229
  msgid ""
4230
- "The file %FileLocation% was not scanned because it is bigger than 5MB. "
4231
- "Please <a href=\"https://www.wpsecurityauditlog.com/contact/\" target="
4232
- "\"_blank\">contact our support</a> for more information."
4233
  msgstr ""
4234
 
4235
- #: defaults.php:394
4236
- msgid "File integrity scan stopped due to the limit of 1 million files"
4237
  msgstr ""
4238
 
4239
- #: defaults.php:394
4240
  msgid ""
4241
- "The file changes scanning engine has reached the limit of 1 million files "
4242
- "and stopped the scan. Please <a href=\"https://www.wpsecurityauditlog.com/"
4243
- "contact/\" target=\"_blank\">contact our support</a> for more information."
4244
  msgstr ""
4245
 
4246
- #: defaults.php:395
4247
- msgid "File integrity scan started/stopped"
4248
  msgstr ""
4249
 
4250
- #: defaults.php:395
4251
- msgid ""
4252
- "The file integrity scanner has %ScanStatus% scanning %ScanLocation%%ScanError"
4253
- "%."
4254
  msgstr ""
4255
 
4256
- #: defaults.php:396
4257
- msgid "Purged the activity log"
4258
  msgstr ""
4259
 
4260
- #: defaults.php:396
4261
- msgid "Purged the activity log."
4262
  msgstr ""
4263
 
4264
- #: defaults.php:397
4265
- msgid "Advertising Add-ons"
4266
  msgstr ""
4267
 
4268
- #: defaults.php:397
4269
  msgid "%PromoName% %PromoMessage%"
4270
  msgstr ""
4271
 
4272
- #: defaults.php:403
4273
  msgid "Menus"
4274
  msgstr ""
4275
 
4276
- #: defaults.php:404
4277
  msgid "User created new menu"
4278
  msgstr ""
4279
 
4280
- #: defaults.php:404
4281
  msgid "Created a new menu called %MenuName%."
4282
  msgstr ""
4283
 
4284
- #: defaults.php:405
4285
  msgid "User added content to a menu"
4286
  msgstr ""
4287
 
4288
- #: defaults.php:405
4289
  msgid "Added the %ContentType% called %ContentName% to menu %MenuName%."
4290
  msgstr ""
4291
 
4292
- #: defaults.php:406
4293
  msgid "User removed content from a menu"
4294
  msgstr ""
4295
 
4296
- #: defaults.php:406
4297
  msgid ""
4298
  "Removed the %ContentType% called %ContentName% from the menu %MenuName%."
4299
  msgstr ""
4300
 
4301
- #: defaults.php:407
4302
  msgid "User deleted menu"
4303
  msgstr ""
4304
 
4305
- #: defaults.php:407
4306
  msgid "Deleted the menu %MenuName%."
4307
  msgstr ""
4308
 
4309
- #: defaults.php:408
4310
  msgid "User changed menu setting"
4311
  msgstr ""
4312
 
4313
- #: defaults.php:408
4314
  msgid "%Status% the menu setting %MenuSetting% in %MenuName%."
4315
  msgstr ""
4316
 
4317
- #: defaults.php:409
4318
  msgid "User modified content in a menu"
4319
  msgstr ""
4320
 
4321
- #: defaults.php:409
4322
  msgid "Modified the %ContentType% called %ContentName% in menu %MenuName%."
4323
  msgstr ""
4324
 
4325
- #: defaults.php:410
4326
  msgid "User changed name of a menu"
4327
  msgstr ""
4328
 
4329
- #: defaults.php:410
4330
  msgid "Changed the name of menu %OldMenuName% to %NewMenuName%."
4331
  msgstr ""
4332
 
4333
- #: defaults.php:411
4334
  msgid "User changed order of the objects in a menu"
4335
  msgstr ""
4336
 
4337
- #: defaults.php:411
4338
  msgid "Changed the order of the %ItemName% in menu %MenuName%."
4339
  msgstr ""
4340
 
4341
- #: defaults.php:412
4342
  msgid "User moved objects as a sub-item"
4343
  msgstr ""
4344
 
4345
- #: defaults.php:412
4346
  msgid "Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%."
4347
  msgstr ""
4348
 
4349
- #: defaults.php:418
4350
  msgid "Widgets"
4351
  msgstr ""
4352
 
4353
- #: defaults.php:419
4354
  msgid "User added a new widget"
4355
  msgstr ""
4356
 
4357
- #: defaults.php:419
4358
  msgid "Added a new %WidgetName% widget in %Sidebar%."
4359
  msgstr ""
4360
 
4361
- #: defaults.php:420
4362
  msgid "User modified a widget"
4363
  msgstr ""
4364
 
4365
- #: defaults.php:420
4366
  msgid "Modified the %WidgetName% widget in %Sidebar%."
4367
  msgstr ""
4368
 
4369
- #: defaults.php:421
4370
  msgid "User deleted widget"
4371
  msgstr ""
4372
 
4373
- #: defaults.php:421
4374
  msgid "Deleted the %WidgetName% widget from %Sidebar%."
4375
  msgstr ""
4376
 
4377
- #: defaults.php:422
4378
  msgid "User moved widget"
4379
  msgstr ""
4380
 
4381
- #: defaults.php:422
4382
  msgid "Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%."
4383
  msgstr ""
4384
 
4385
- #: defaults.php:423
4386
  msgid "User changed widget position"
4387
  msgstr ""
4388
 
4389
- #: defaults.php:423
4390
  msgid "Changed the position of the widget %WidgetName% in sidebar %Sidebar%."
4391
  msgstr ""
4392
 
4393
- #: defaults.php:429
4394
- msgid "WordPress Settings"
4395
  msgstr ""
4396
 
4397
- #: defaults.php:430
4398
- msgid "Option Anyone Can Register in WordPress settings changed"
 
4399
  msgstr ""
4400
 
4401
- #: defaults.php:430
4402
- msgid "%NewValue% the option \"Anyone can register\"."
4403
  msgstr ""
4404
 
4405
- #: defaults.php:431
4406
- msgid "New User Default Role changed"
4407
  msgstr ""
4408
 
4409
- #: defaults.php:431
4410
- msgid "Changed the New User Default Role from %OldRole% to %NewRole%."
4411
  msgstr ""
4412
 
4413
- #: defaults.php:432
4414
- msgid "WordPress Administrator Notification email changed"
 
 
 
 
4415
  msgstr ""
4416
 
4417
- #: defaults.php:432
4418
  msgid ""
4419
- "Changed the WordPress administrator notifications email address from "
4420
- "%OldEmail% to %NewEmail%."
4421
  msgstr ""
4422
 
4423
- #: defaults.php:433
4424
- msgid "User changes the WordPress Permalinks"
4425
  msgstr ""
4426
 
4427
- #: defaults.php:433
4428
- msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%."
4429
  msgstr ""
4430
 
4431
- #: defaults.php:434
 
 
 
 
 
 
 
 
4432
  msgid ""
4433
- "Enabled/Disabled the option Discourage search engines from indexing this site"
 
4434
  msgstr ""
4435
 
4436
- #: defaults.php:434
4437
- msgid "%Status% the option Discourage search engines from indexing this site."
4438
  msgstr ""
4439
 
4440
- #: defaults.php:435
4441
- msgid "Enabled/Disabled comments on all the website"
4442
  msgstr ""
4443
 
4444
- #: defaults.php:435
4445
- msgid "%Status% comments on all the website."
 
 
4446
  msgstr ""
4447
 
4448
- #: defaults.php:436
4449
- msgid "Enabled/Disabled the option Comment author must fill out name and email"
 
 
4450
  msgstr ""
4451
 
4452
- #: defaults.php:436
4453
- msgid "%Status% the option Comment author must fill out name and email."
 
4454
  msgstr ""
4455
 
4456
- #: defaults.php:437
4457
  msgid ""
4458
- "Enabled/Disabled the option Users must be logged in and registered to comment"
 
4459
  msgstr ""
4460
 
4461
- #: defaults.php:437
4462
- msgid "%Status% the option Users must be logged in and registered to comment."
4463
  msgstr ""
4464
 
4465
- #: defaults.php:438
4466
- msgid "Enabled/Disabled the option to automatically close comments"
4467
  msgstr ""
4468
 
4469
- #: defaults.php:438
4470
- msgid "%Status% the option to automatically close comments after %Value% days."
4471
  msgstr ""
4472
 
4473
- #: defaults.php:439
4474
- msgid "Changed the value of the option Automatically close comments"
4475
  msgstr ""
4476
 
4477
- #: defaults.php:439
 
 
 
 
4478
  msgid ""
4479
- "Changed the value of the option Automatically close comments from %OldValue% "
4480
- "to %NewValue% days."
4481
  msgstr ""
4482
 
4483
- #: defaults.php:440
4484
- msgid "Enabled/Disabled the option for comments to be manually approved"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4485
  msgstr ""
4486
 
4487
- #: defaults.php:440
4488
- msgid "%Status% the option for comments to be manually approved."
4489
  msgstr ""
4490
 
4491
- #: defaults.php:441
4492
  msgid ""
4493
- "Enabled/Disabled the option for an author to have previously approved "
4494
- "comments for the comments to appear"
4495
  msgstr ""
4496
 
4497
- #: defaults.php:441
4498
- msgid ""
4499
- "%Status% the option for an author to have previously approved comments for "
4500
- "the comments to appear."
4501
  msgstr ""
4502
 
4503
- #: defaults.php:442
4504
  msgid ""
4505
- "Changed the number of links that a comment must have to be held in the queue"
 
4506
  msgstr ""
4507
 
4508
- #: defaults.php:442
4509
- msgid ""
4510
- "Changed the number of links from %OldValue% to %NewValue% that a comment "
4511
- "must have to be held in the queue."
4512
  msgstr ""
4513
 
4514
- #: defaults.php:443
4515
- msgid "Modified the list of keywords for comments moderation"
4516
  msgstr ""
4517
 
4518
- #: defaults.php:443
4519
- msgid "Modified the list of keywords for comments moderation."
4520
  msgstr ""
4521
 
4522
- #: defaults.php:444
4523
- msgid "Modified the list of keywords for comments blacklisting"
4524
  msgstr ""
4525
 
4526
- #: defaults.php:444
4527
- msgid "Modified the list of keywords for comments blacklisting."
4528
  msgstr ""
4529
 
4530
- #: defaults.php:445
4531
- msgid "Option WordPress Address (URL) in WordPress settings changed"
4532
  msgstr ""
4533
 
4534
- #: defaults.php:445
4535
- msgid "Changed the WordPress address (URL) from %old_url% to %new_url%."
4536
  msgstr ""
4537
 
4538
- #: defaults.php:446
4539
- msgid "Option Site Address (URL) in WordPress settings changed"
4540
  msgstr ""
4541
 
4542
- #: defaults.php:446
4543
- msgid "Changed the site address (URL) from %old_url% to %new_url%."
4544
  msgstr ""
4545
 
4546
- #: defaults.php:447
4547
- msgid "Created a New cron job"
4548
  msgstr ""
4549
 
4550
- #: defaults.php:447
4551
  msgid ""
4552
- "A new cron job called %name% was created and is scheduled to run %schedule%."
4553
- msgstr ""
4554
-
4555
- #: defaults.php:448
4556
- msgid "Changed status of the cron job"
4557
  msgstr ""
4558
 
4559
- #: defaults.php:448
4560
- msgid "The cron job %name% was %status%."
4561
  msgstr ""
4562
 
4563
- #: defaults.php:449
4564
- msgid "Deleted the cron job"
 
 
4565
  msgstr ""
4566
 
4567
- #: defaults.php:449
4568
- msgid "The cron job %name% was deleted."
4569
  msgstr ""
4570
 
4571
- #: defaults.php:450
4572
- msgid "Started the cron job"
 
 
4573
  msgstr ""
4574
 
4575
- #: defaults.php:450
4576
- msgid "The cron job %name% has just started."
4577
  msgstr ""
4578
 
4579
- #: defaults.php:457
4580
- msgid "Multisite Network"
4581
  msgstr ""
4582
 
4583
- #: defaults.php:462
4584
- msgid "User granted Super Admin privileges"
4585
  msgstr ""
4586
 
4587
- #: defaults.php:462
4588
- msgid "Granted Super Admin privileges to %TargetUsername%."
 
 
4589
  msgstr ""
4590
 
4591
- #: defaults.php:463
4592
- msgid "User revoked from Super Admin privileges"
4593
  msgstr ""
4594
 
4595
- #: defaults.php:463
4596
- msgid "Revoked Super Admin privileges from %TargetUsername%."
4597
  msgstr ""
4598
 
4599
- #: defaults.php:464
4600
- msgid "Existing user added to a site"
4601
  msgstr ""
4602
 
4603
- #: defaults.php:464
4604
  msgid ""
4605
- "Added the existing user %TargetUsername% with %TargetUserRole% role to site "
4606
- "%SiteName%."
4607
  msgstr ""
4608
 
4609
- #: defaults.php:465
4610
- msgid "User removed from site"
4611
  msgstr ""
4612
 
4613
- #: defaults.php:465
4614
  msgid ""
4615
- "Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% "
4616
- "site."
4617
  msgstr ""
4618
 
4619
- #: defaults.php:466
4620
- msgid "New network user created"
4621
  msgstr ""
4622
 
4623
- #: defaults.php:466
4624
- msgid "Created a new network user %NewUserData->Username%."
4625
  msgstr ""
4626
 
4627
- #: defaults.php:467
4628
- msgid "The forum role of a user was changed by another WordPress user"
4629
  msgstr ""
4630
 
4631
- #: defaults.php:467
4632
  msgid ""
4633
- "Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole"
4634
- "% by %UserChanger%."
4635
- msgstr ""
4636
-
4637
- #: defaults.php:468
4638
- msgid "New site added on the network"
4639
  msgstr ""
4640
 
4641
- #: defaults.php:468
4642
- msgid "Added the site %SiteName% to the network."
4643
  msgstr ""
4644
 
4645
- #: defaults.php:469
4646
- msgid "Existing site archived"
 
 
4647
  msgstr ""
4648
 
4649
- #: defaults.php:469
4650
- msgid "Archived the site %SiteName%."
4651
  msgstr ""
4652
 
4653
- #: defaults.php:470
4654
- msgid "Archived site has been unarchived"
 
 
4655
  msgstr ""
4656
 
4657
- #: defaults.php:470
4658
- msgid "Unarchived the site %SiteName%."
4659
  msgstr ""
4660
 
4661
- #: defaults.php:471
4662
- msgid "Deactivated site has been activated"
 
 
4663
  msgstr ""
4664
 
4665
- #: defaults.php:471
4666
- msgid "Activated the site %SiteName%."
4667
  msgstr ""
4668
 
4669
- #: defaults.php:472
4670
- msgid "Site has been deactivated"
 
 
4671
  msgstr ""
4672
 
4673
- #: defaults.php:472
4674
- msgid "Deactivated the site %SiteName%."
4675
  msgstr ""
4676
 
4677
- #: defaults.php:473
4678
- msgid "Existing site deleted from network"
 
 
4679
  msgstr ""
4680
 
4681
- #: defaults.php:473
4682
- msgid "Deleted the site %SiteName%."
4683
  msgstr ""
4684
 
4685
- #: defaults.php:480
4686
- msgid "Third Party Plugins"
4687
  msgstr ""
4688
 
4689
- #: defaults.php:485
4690
  msgid "User created new forum"
4691
  msgstr ""
4692
 
4693
- #: defaults.php:485
4694
  msgid ""
4695
  "Created new forum %ForumName%. Forum URL is %ForumURL%. %EditorLinkForum%."
4696
  msgstr ""
4697
 
4698
- #: defaults.php:486
4699
  msgid "User changed status of a forum"
4700
  msgstr ""
4701
 
4702
- #: defaults.php:486
4703
  msgid ""
4704
  "Changed the status of the forum %ForumName% from %OldStatus% to %NewStatus%. "
4705
  "%EditorLinkForum%."
4706
  msgstr ""
4707
 
4708
- #: defaults.php:487
4709
  msgid "User changed visibility of a forum"
4710
  msgstr ""
4711
 
4712
- #: defaults.php:487
4713
  msgid ""
4714
  "Changed the visibility of the forum %ForumName% from %OldVisibility% to "
4715
  "%NewVisibility%. %EditorLinkForum%."
4716
  msgstr ""
4717
 
4718
- #: defaults.php:488
4719
  msgid "User changed the URL of a forum"
4720
  msgstr ""
4721
 
4722
- #: defaults.php:488
4723
  msgid ""
4724
  "Changed the URL of the forum %ForumName% from %OldUrl% to %NewUrl%. "
4725
  "%EditorLinkForum%."
4726
  msgstr ""
4727
 
4728
- #: defaults.php:489
4729
  msgid "User changed order of a forum"
4730
  msgstr ""
4731
 
4732
- #: defaults.php:489
4733
  msgid ""
4734
  "Changed the order of the forum %ForumName% from %OldOrder% to %NewOrder%. "
4735
  "%EditorLinkForum%."
4736
  msgstr ""
4737
 
4738
- #: defaults.php:490
4739
  msgid "User moved forum to trash"
4740
  msgstr ""
4741
 
4742
- #: defaults.php:490
4743
  msgid "Moved the forum %ForumName% to trash."
4744
  msgstr ""
4745
 
4746
- #: defaults.php:491
4747
  msgid "User permanently deleted forum"
4748
  msgstr ""
4749
 
4750
- #: defaults.php:491
4751
  msgid "Permanently deleted the forum %ForumName%."
4752
  msgstr ""
4753
 
4754
- #: defaults.php:492
4755
  msgid "User restored forum from trash"
4756
  msgstr ""
4757
 
4758
- #: defaults.php:492
4759
  msgid "Restored the forum %ForumName% from trash. %EditorLinkForum%."
4760
  msgstr ""
4761
 
4762
- #: defaults.php:493
4763
  msgid "User changed the parent of a forum"
4764
  msgstr ""
4765
 
4766
- #: defaults.php:493
4767
  msgid ""
4768
  "Changed the parent of the forum %ForumName% from %OldParent% to %NewParent%. "
4769
  "%EditorLinkForum%."
4770
  msgstr ""
4771
 
4772
- #: defaults.php:494
4773
- msgid "User changed type of a forum"
4774
- msgstr ""
4775
-
4776
- #: defaults.php:494
4777
- msgid ""
4778
- "Changed the type of the forum %ForumName% from %OldType% to %NewType%. "
4779
- "%EditorLinkForum%."
4780
- msgstr ""
4781
-
4782
- #: defaults.php:495
4783
  msgid "User changed forum's role"
4784
  msgstr ""
4785
 
4786
- #: defaults.php:495
4787
  msgid "Changed the forum's auto role from %OldRole% to %NewRole%."
4788
  msgstr ""
4789
 
4790
- #: defaults.php:496
4791
  msgid "User changed option of a forum"
4792
  msgstr ""
4793
 
4794
- #: defaults.php:496
4795
  msgid "%Status% the option for anonymous posting on forum."
4796
  msgstr ""
4797
 
4798
- #: defaults.php:497
 
 
 
 
 
 
 
 
 
 
4799
  msgid "User changed time to disallow post editing"
4800
  msgstr ""
4801
 
4802
- #: defaults.php:497
4803
  msgid ""
4804
  "Changed the time to disallow post editing from %OldTime% to %NewTime% "
4805
  "minutes in the forums."
4806
  msgstr ""
4807
 
4808
- #: defaults.php:498
4809
  msgid "User changed the forum setting posting throttle time"
4810
  msgstr ""
4811
 
4812
- #: defaults.php:498
4813
  msgid ""
4814
  "Changed the posting throttle time from %OldTime% to %NewTime% seconds in the "
4815
  "forums."
4816
  msgstr ""
4817
 
4818
- #: defaults.php:499
4819
  msgid "User created new topic"
4820
  msgstr ""
4821
 
4822
- #: defaults.php:499
4823
  msgid "Created a new topic %TopicName%. %EditorLinkTopic%."
4824
  msgstr ""
4825
 
4826
- #: defaults.php:500
4827
  msgid "User changed status of a topic"
4828
  msgstr ""
4829
 
4830
- #: defaults.php:500
4831
  msgid ""
4832
  "Changed the status of the topic %TopicName% from %OldStatus% to %NewStatus%. "
4833
  "%EditorLinkTopic%."
4834
  msgstr ""
4835
 
4836
- #: defaults.php:501
4837
  msgid "User changed type of a topic"
4838
  msgstr ""
4839
 
4840
- #: defaults.php:501
4841
  msgid ""
4842
  "Changed the type of the topic %TopicName% from %OldType% to %NewType%. "
4843
  "%EditorLinkTopic%."
4844
  msgstr ""
4845
 
4846
- #: defaults.php:502
4847
  msgid "User changed URL of a topic"
4848
  msgstr ""
4849
 
4850
- #: defaults.php:502
4851
  msgid "Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%."
4852
  msgstr ""
4853
 
4854
- #: defaults.php:503
4855
  msgid "User changed the forum of a topic"
4856
  msgstr ""
4857
 
4858
- #: defaults.php:503
4859
  msgid ""
4860
  "Changed the forum of the topic %TopicName% from %OldForum% to %NewForum%. "
4861
  "%EditorLinkTopic%."
4862
  msgstr ""
4863
 
4864
- #: defaults.php:504
4865
  msgid "User moved topic to trash"
4866
  msgstr ""
4867
 
4868
- #: defaults.php:504
4869
  msgid "Moved the topic %TopicName% to trash."
4870
  msgstr ""
4871
 
4872
- #: defaults.php:505
4873
  msgid "User permanently deleted topic"
4874
  msgstr ""
4875
 
4876
- #: defaults.php:505
4877
  msgid "Permanently deleted the topic %TopicName%."
4878
  msgstr ""
4879
 
4880
- #: defaults.php:506
4881
  msgid "User restored topic from trash"
4882
  msgstr ""
4883
 
4884
- #: defaults.php:506
4885
  msgid "Restored the topic %TopicName% from trash. %EditorLinkTopic%."
4886
  msgstr ""
4887
 
4888
- #: defaults.php:507
4889
  msgid "User changed visibility of a topic"
4890
  msgstr ""
4891
 
4892
- #: defaults.php:507
4893
  msgid ""
4894
  "Changed the visibility of the topic %TopicName% from %OldVisibility% to "
4895
  "%NewVisibility%. %EditorLinkTopic%."
4896
  msgstr ""
4897
 
4898
- #: defaults.php:514
 
 
 
 
4899
  msgid "User created a new product"
4900
  msgstr ""
4901
 
4902
- #: defaults.php:514
4903
  msgid ""
4904
  "Created a new product called %ProductTitle% and saved it as draft. View the "
4905
  "product: %EditorLinkProduct%."
4906
  msgstr ""
4907
 
4908
- #: defaults.php:515
4909
  msgid "User published a product"
4910
  msgstr ""
4911
 
4912
- #: defaults.php:515
4913
  msgid ""
4914
  "Published a product called %ProductTitle%. Product URL is %ProductUrl%. View "
4915
  "the product: %EditorLinkProduct%."
4916
  msgstr ""
4917
 
4918
- #: defaults.php:516
 
 
 
 
 
 
 
 
 
 
4919
  msgid "User changed the category of a product"
4920
  msgstr ""
4921
 
4922
- #: defaults.php:516
4923
  msgid ""
4924
  "Changed the category of the product %ProductTitle% from %OldCategories% to "
4925
  "%NewCategories%. View the product: %EditorLinkProduct%."
4926
  msgstr ""
4927
 
4928
- #: defaults.php:517
4929
  msgid "User modified the short description of a product"
4930
  msgstr ""
4931
 
4932
- #: defaults.php:517
4933
  msgid ""
4934
  "Modified the short description of the product %ProductTitle%.%ChangeText% "
4935
  "View the product: %EditorLinkProduct%."
4936
  msgstr ""
4937
 
4938
- #: defaults.php:518
4939
  msgid "User modified the text of a product"
4940
  msgstr ""
4941
 
4942
- #: defaults.php:518
4943
  msgid ""
4944
  "Modified the text of the product %ProductTitle%. View the product: "
4945
  "%EditorLinkProduct%."
4946
  msgstr ""
4947
 
4948
- #: defaults.php:519
4949
  msgid "User changed the URL of a product"
4950
  msgstr ""
4951
 
4952
- #: defaults.php:519
4953
  msgid ""
4954
  "Changed the URL of the product %ProductTitle%%ReportText%.%ChangeText% View "
4955
  "the product: %EditorLinkProduct%."
4956
  msgstr ""
4957
 
4958
- #: defaults.php:520
 
 
 
 
 
 
 
 
 
 
4959
  msgid "User changed the date of a product"
4960
  msgstr ""
4961
 
4962
- #: defaults.php:520
4963
  msgid ""
4964
  "Changed the date of the product %ProductTitle% from %OldDate% to %NewDate%. "
4965
  "View the product: %EditorLinkProduct%."
4966
  msgstr ""
4967
 
4968
- #: defaults.php:521
4969
  msgid "User changed the visibility of a product"
4970
  msgstr ""
4971
 
4972
- #: defaults.php:521
4973
  msgid ""
4974
  "Changed the visibility of the product %ProductTitle% from %OldVisibility% to "
4975
  "%NewVisibility%. View the product: %EditorLinkProduct%."
4976
  msgstr ""
4977
 
4978
- #: defaults.php:522
4979
  msgid "User modified the published product"
4980
  msgstr ""
4981
 
4982
- #: defaults.php:522
4983
  msgid ""
4984
  "Modified the published product %ProductTitle%. Product URL is %ProductUrl%. "
4985
  "View the product: %EditorLinkProduct%."
4986
  msgstr ""
4987
 
4988
- #: defaults.php:523
4989
  msgid "User modified the draft product"
4990
  msgstr ""
4991
 
4992
- #: defaults.php:523
4993
  msgid ""
4994
  "Modified the draft product %ProductTitle%. View the product: "
4995
  "%EditorLinkProduct%."
4996
  msgstr ""
4997
 
4998
- #: defaults.php:524
4999
  msgid "User moved a product to trash"
5000
  msgstr ""
5001
 
5002
- #: defaults.php:524
5003
  msgid ""
5004
  "Moved the product %ProductTitle% to trash. Product URL was %ProductUrl%."
5005
  msgstr ""
5006
 
5007
- #: defaults.php:525
5008
  msgid "User permanently deleted a product"
5009
  msgstr ""
5010
 
5011
- #: defaults.php:525
5012
  msgid "Permanently deleted the product %ProductTitle%."
5013
  msgstr ""
5014
 
5015
- #: defaults.php:526
5016
  msgid "User restored a product from the trash"
5017
  msgstr ""
5018
 
5019
- #: defaults.php:526
5020
  msgid ""
5021
  "Product %ProductTitle% has been restored from trash. View product: "
5022
  "%EditorLinkProduct%."
5023
  msgstr ""
5024
 
5025
- #: defaults.php:527
5026
  msgid "User changed status of a product"
5027
  msgstr ""
5028
 
5029
- #: defaults.php:527
5030
  msgid ""
5031
  "Changed the status of the product %ProductTitle% from %OldStatus% to "
5032
  "%NewStatus%. View the product: %EditorLinkProduct%."
5033
  msgstr ""
5034
 
5035
- #: defaults.php:528
5036
- msgid "User opened a product in the editor"
5037
- msgstr ""
5038
-
5039
- #: defaults.php:528
5040
- msgid ""
5041
- "Opened the %ProductStatus% product page %ProductTitle% in editor. View the "
5042
- "product: %EditorLinkProduct%."
5043
- msgstr ""
5044
-
5045
- #: defaults.php:529
5046
- msgid "User viewed a product"
5047
- msgstr ""
5048
-
5049
- #: defaults.php:529
5050
- msgid ""
5051
- "Viewed the %ProductStatus% product page %ProductTitle%. View the product: "
5052
- "%EditorLinkProduct%."
5053
- msgstr ""
5054
-
5055
- #: defaults.php:530
5056
- msgid "User changed the Product Data of a product"
5057
- msgstr ""
5058
-
5059
- #: defaults.php:530
5060
- msgid ""
5061
- "Changed the Product Data of the product %ProductTitle%. View the product: "
5062
- "%EditorLinkProduct%."
5063
- msgstr ""
5064
-
5065
- #: defaults.php:531
5066
  msgid "User changed type of a price"
5067
  msgstr ""
5068
 
5069
- #: defaults.php:531
5070
  msgid ""
5071
  "Changed the %PriceType% of the product %ProductTitle% from %OldPrice% to "
5072
  "%NewPrice%. View the product: %EditorLinkProduct%."
5073
  msgstr ""
5074
 
5075
- #: defaults.php:532
5076
  msgid "User changed the SKU of a product"
5077
  msgstr ""
5078
 
5079
- #: defaults.php:532
5080
  msgid ""
5081
  "Changed the SKU of the product %ProductTitle% from %OldSku% to %NewSku%. "
5082
  "View the product: %EditorLinkProduct%."
5083
  msgstr ""
5084
 
5085
- #: defaults.php:533
5086
  msgid "User changed the stock status of a product"
5087
  msgstr ""
5088
 
5089
- #: defaults.php:533
5090
  msgid ""
5091
  "Changed the stock status of the product %ProductTitle% from %OldStatus% to "
5092
  "%NewStatus%. View the product: %EditorLinkProduct%."
5093
  msgstr ""
5094
 
5095
- #: defaults.php:534
5096
  msgid "User changed the stock quantity"
5097
  msgstr ""
5098
 
5099
- #: defaults.php:534
5100
  msgid ""
5101
  "Changed the stock quantity of the product %ProductTitle% from %OldValue% to "
5102
  "%NewValue%. View the product: %EditorLinkProduct%"
5103
  msgstr ""
5104
 
5105
- #: defaults.php:535
5106
  msgid "User set a product type"
5107
  msgstr ""
5108
 
5109
- #: defaults.php:535
5110
  msgid ""
5111
  "Set the product %ProductTitle% as %Type%. View the product: "
5112
  "%EditorLinkProduct%."
5113
  msgstr ""
5114
 
5115
- #: defaults.php:536
5116
  msgid "User changed the weight of a product"
5117
  msgstr ""
5118
 
5119
- #: defaults.php:536
5120
  msgid ""
5121
  "Changed the weight of the product %ProductTitle% from %OldWeight% to "
5122
  "%NewWeight%. View the product: %EditorLinkProduct%."
5123
  msgstr ""
5124
 
5125
- #: defaults.php:537
5126
  msgid "User changed the dimensions of a product"
5127
  msgstr ""
5128
 
5129
- #: defaults.php:537
5130
  msgid ""
5131
  "Changed the %DimensionType% dimensions of the product %ProductTitle% from "
5132
  "%OldDimension% to %NewDimension%. View the product: %EditorLinkProduct%."
5133
  msgstr ""
5134
 
5135
- #: defaults.php:538
5136
  msgid "User added the Downloadable File to a product"
5137
  msgstr ""
5138
 
5139
- #: defaults.php:538
5140
  msgid ""
5141
  "Added the Downloadable File %FileName% with File URL %FileUrl% to the "
5142
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
5143
  msgstr ""
5144
 
5145
- #: defaults.php:539
5146
  msgid "User Removed the Downloadable File from a product"
5147
  msgstr ""
5148
 
5149
- #: defaults.php:539
5150
  msgid ""
5151
  "Removed the Downloadable File %FileName% with File URL %FileUrl% from the "
5152
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
5153
  msgstr ""
5154
 
5155
- #: defaults.php:540
5156
  msgid "User changed the name of a Downloadable File in a product"
5157
  msgstr ""
5158
 
5159
- #: defaults.php:540
5160
  msgid ""
5161
  "Changed the name of a Downloadable File from %OldName% to %NewName% in "
5162
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
5163
  msgstr ""
5164
 
5165
- #: defaults.php:541
5166
  msgid "User changed the URL of the Downloadable File in a product"
5167
  msgstr ""
5168
 
5169
- #: defaults.php:541
5170
  msgid ""
5171
  "Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl"
5172
  "% in product %ProductTitle%. View the product: %EditorLinkProduct%."
5173
  msgstr ""
5174
 
5175
- #: defaults.php:548
5176
  msgid "User changed the Weight Unit"
5177
  msgstr ""
5178
 
5179
- #: defaults.php:548
5180
  msgid "Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce."
5181
  msgstr ""
5182
 
5183
- #: defaults.php:549
5184
  msgid "User changed the Dimensions Unit"
5185
  msgstr ""
5186
 
5187
- #: defaults.php:549
5188
  msgid "Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce."
5189
  msgstr ""
5190
 
5191
- #: defaults.php:550
5192
  msgid "User changed the Base Location"
5193
  msgstr ""
5194
 
5195
- #: defaults.php:550
5196
  msgid ""
5197
  "Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce."
5198
  msgstr ""
5199
 
5200
- #: defaults.php:551
5201
  msgid "User Enabled/Disabled taxes"
5202
  msgstr ""
5203
 
5204
- #: defaults.php:551
5205
  msgid "%Status% taxes in the WooCommerce store."
5206
  msgstr ""
5207
 
5208
- #: defaults.php:552
5209
  msgid "User changed the currency"
5210
  msgstr ""
5211
 
5212
- #: defaults.php:552
5213
  msgid ""
5214
  "Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce."
5215
  msgstr ""
5216
 
5217
- #: defaults.php:553
5218
  msgid "User Enabled/Disabled the use of coupons during checkout"
5219
  msgstr ""
5220
 
5221
- #: defaults.php:553
5222
  msgid "%Status% the use of coupons during checkout in WooCommerce."
5223
  msgstr ""
5224
 
5225
- #: defaults.php:554
5226
  msgid "User Enabled/Disabled guest checkout"
5227
  msgstr ""
5228
 
5229
- #: defaults.php:554
5230
  msgid "%Status% guest checkout in WooCommerce."
5231
  msgstr ""
5232
 
5233
- #: defaults.php:555
5234
  msgid "User Enabled/Disabled cash on delivery"
5235
  msgstr ""
5236
 
5237
- #: defaults.php:555
5238
  msgid "%Status% the option Enable cash on delivery in WooCommerce."
5239
  msgstr ""
5240
 
5241
- #: defaults.php:556
5242
- msgid "User created a new product category"
5243
- msgstr ""
5244
-
5245
- #: defaults.php:556
5246
- msgid ""
5247
- "Created a new product category called %CategoryName% in WooCommerce. Product "
5248
- "category slug is %Slug%."
5249
  msgstr ""
5250
 
5251
- #: defaults.php:563
5252
  msgid "User changed title of a SEO post"
5253
  msgstr ""
5254
 
5255
- #: defaults.php:563
5256
  msgid ""
5257
  "Changed the SEO title of the %PostStatus% %PostType%%ReportText%.%ChangeText"
5258
  "% %EditorLinkPost%."
5259
  msgstr ""
5260
 
5261
- #: defaults.php:564
5262
  msgid "User changed the meta description of a SEO post"
5263
  msgstr ""
5264
 
5265
- #: defaults.php:564
5266
  msgid ""
5267
  "Changed the Meta description of the %PostStatus% %PostType% titled %PostTitle"
5268
  "%%ReportText%.%ChangeText% %EditorLinkPost%."
5269
  msgstr ""
5270
 
5271
- #: defaults.php:565
5272
  msgid ""
5273
  "User changed setting to allow search engines to show post in search results "
5274
  "of a SEO post"
5275
  msgstr ""
5276
 
5277
- #: defaults.php:565
5278
  msgid ""
5279
  "Changed the setting to allow search engines to show post in search results "
5280
  "from %OldStatus% to %NewStatus% in the %PostStatus% %PostType% titled "
5281
  "%PostTitle%. %EditorLinkPost%."
5282
  msgstr ""
5283
 
5284
- #: defaults.php:566
5285
  msgid ""
5286
  "User Enabled/Disabled the option for search engine to follow links of a SEO "
5287
  "post"
5288
  msgstr ""
5289
 
5290
- #: defaults.php:566
5291
  msgid ""
5292
  "%NewStatus% the option for search engine to follow links in the %PostType% "
5293
  "titled %PostTitle%. %EditorLinkPost%."
5294
  msgstr ""
5295
 
5296
- #: defaults.php:567
5297
  msgid "User set the meta robots advanced setting of a SEO post"
5298
  msgstr ""
5299
 
5300
- #: defaults.php:567
5301
  msgid ""
5302
  "Set the Meta Robots Advanced setting to %NewStatus% in the %PostStatus% "
5303
  "%PostType% titled %PostTitle%. %EditorLinkPost%."
5304
  msgstr ""
5305
 
5306
- #: defaults.php:568
5307
  msgid "User changed the canonical URL of a SEO post"
5308
  msgstr ""
5309
 
5310
- #: defaults.php:568
5311
  msgid ""
5312
  "Changed the Canonical URL of the %PostStatus% %PostType% titled %PostTitle%"
5313
  "%ReportText%.%ChangeText% %EditorLinkPost%."
5314
  msgstr ""
5315
 
5316
- #: defaults.php:569
5317
  msgid "User changed the focus keyword of a SEO post"
5318
  msgstr ""
5319
 
5320
- #: defaults.php:569
5321
  msgid ""
5322
  "Changed the focus keyword of the %PostStatus% %PostType% titled %PostTitle% "
5323
  "from %old_keywords% to %new_keywords%. %EditorLinkPost%."
5324
  msgstr ""
5325
 
5326
- #: defaults.php:570
5327
  msgid "User Enabled/Disabled the option Cornerston Content of a SEO post"
5328
  msgstr ""
5329
 
5330
- #: defaults.php:570
5331
  msgid ""
5332
  "%Status% the option Cornerston Content on the %PostStatus% %PostType% titled "
5333
  "%PostTitle%. %EditorLinkPost%."
5334
  msgstr ""
5335
 
5336
- #: defaults.php:571
5337
  msgid "User changed the Title Separator setting"
5338
  msgstr ""
5339
 
5340
- #: defaults.php:571
5341
  msgid ""
5342
  "Changed the Title Separator from %old% to %new% in the Yoast SEO plugin "
5343
  "settings."
5344
  msgstr ""
5345
 
5346
- #: defaults.php:572
5347
  msgid "User changed the Homepage Title setting"
5348
  msgstr ""
5349
 
5350
- #: defaults.php:572
5351
  msgid ""
5352
  "Changed the Homepage Title%ReportText% in the Yoast SEO plugin settings."
5353
  "%ChangeText%"
5354
  msgstr ""
5355
 
5356
- #: defaults.php:573
5357
  msgid "User changed the Homepage Meta description setting"
5358
  msgstr ""
5359
 
5360
- #: defaults.php:573
5361
  msgid ""
5362
  "Changed the Homepage Meta description%ReportText% in the Yoast SEO plugin "
5363
  "settings.%ChangeText%"
5364
  msgstr ""
5365
 
5366
- #: defaults.php:574
5367
  msgid "User changed the Company or Person setting"
5368
  msgstr ""
5369
 
5370
- #: defaults.php:574
5371
  msgid ""
5372
  "Changed the Company or Person setting from %old% to %new% in the YOAST SEO "
5373
  "plugin settings."
5374
  msgstr ""
5375
 
5376
- #: defaults.php:575
5377
  msgid ""
5378
  "User Enabled/Disabled the option Show Posts/Pages in Search Results in the "
5379
  "Yoast SEO plugin settings"
5380
  msgstr ""
5381
 
5382
- #: defaults.php:575
5383
  msgid ""
5384
  "%Status% the option Show %SEOPostType% in Search Results in the Yoast SEO "
5385
  "plugin settings."
5386
  msgstr ""
5387
 
5388
- #: defaults.php:576
5389
  msgid ""
5390
  "User changed the Posts/Pages title template in the Yoast SEO plugin settings"
5391
  msgstr ""
5392
 
5393
- #: defaults.php:576
5394
  msgid ""
5395
  "Changed the %SEOPostType% title template from %old% to %new% in the Yoast "
5396
  "SEO plugin settings."
5397
  msgstr ""
5398
 
5399
- #: defaults.php:577
5400
  msgid "User Enabled/Disabled SEO analysis in the Yoast SEO plugin settings"
5401
  msgstr ""
5402
 
5403
- #: defaults.php:577
5404
  msgid "%Status% SEO analysis in the Yoast SEO plugin settings."
5405
  msgstr ""
5406
 
5407
- #: defaults.php:578
5408
  msgid ""
5409
  "User Enabled/Disabled readability analysis in the Yoast SEO plugin settings"
5410
  msgstr ""
5411
 
5412
- #: defaults.php:578
5413
  msgid "%Status% Readability analysis in the Yoast SEO plugin settings."
5414
  msgstr ""
5415
 
5416
- #: defaults.php:579
5417
  msgid ""
5418
  "User Enabled/Disabled cornerstone content in the Yoast SEO plugin settings"
5419
  msgstr ""
5420
 
5421
- #: defaults.php:579
5422
  msgid "%Status% Cornerstone content in the Yoast SEO plugin settings."
5423
  msgstr ""
5424
 
5425
- #: defaults.php:580
5426
  msgid ""
5427
  "User Enabled/Disabled the text link counter in the Yoast SEO plugin settings"
5428
  msgstr ""
5429
 
5430
- #: defaults.php:580
5431
  msgid "%Status% the Text link counter in the Yoast SEO plugin settings."
5432
  msgstr ""
5433
 
5434
- #: defaults.php:581
5435
  msgid "User Enabled/Disabled XML sitemaps in the Yoast SEO plugin settings"
5436
  msgstr ""
5437
 
5438
- #: defaults.php:581
5439
  msgid "%Status% XML Sitemaps in the Yoast SEO plugin settings."
5440
  msgstr ""
5441
 
5442
- #: defaults.php:582
5443
  msgid "User Enabled/Disabled ryte integration in the Yoast SEO plugin settings"
5444
  msgstr ""
5445
 
5446
- #: defaults.php:582
5447
  msgid "%Status% Ryte Integration in the Yoast SEO plugin settings."
5448
  msgstr ""
5449
 
5450
- #: defaults.php:583
5451
  msgid ""
5452
  "User Enabled/Disabled the admin bar menu in the Yoast SEO plugin settings"
5453
  msgstr ""
5454
 
5455
- #: defaults.php:583
5456
  msgid "%Status% the Admin bar menu in the Yoast SEO plugin settings."
5457
  msgstr ""
5458
 
5459
- #: defaults.php:584
5460
  msgid ""
5461
  "User changed the Posts/Pages meta description template in the Yoast SEO "
5462
  "plugin settings"
5463
  msgstr ""
5464
 
5465
- #: defaults.php:584
5466
  msgid ""
5467
  "Changed the %SEOPostType% meta description template from %old% to %new% in "
5468
  "the Yoast SEO plugin settings."
5469
  msgstr ""
5470
 
5471
- #: defaults.php:585
5472
  msgid ""
5473
  "User set the option Date in Snippet Preview for Posts/Pages in the Yoast SEO "
5474
  "plugin settings"
5475
  msgstr ""
5476
 
5477
- #: defaults.php:585
5478
  msgid ""
5479
  "%Status% the option Date in Snippet Preview for %SEOPostType% in the Yoast "
5480
  "SEO plugin settings."
5481
  msgstr ""
5482
 
5483
- #: defaults.php:586
5484
  msgid ""
5485
  "User set the option Yoast SEO Meta Box for Posts/Pages in the Yoast SEO "
5486
  "plugin settings"
5487
  msgstr ""
5488
 
5489
- #: defaults.php:586
5490
  msgid ""
5491
  "%Status% the option Yoast SEO Meta Box for %SEOPostType% in the Yoast SEO "
5492
  "plugin settings."
5493
  msgstr ""
5494
 
5495
- #: defaults.php:587
5496
  msgid ""
5497
  "User Enabled/Disabled the advanced settings for authors in the Yoast SEO "
5498
  "plugin settings"
5499
  msgstr ""
5500
 
5501
- #: defaults.php:587
5502
  msgid "%Status% the advanced settings for authors in the Yoast SEO settings."
5503
  msgstr ""
5504
 
5505
- #. translators: Username
5506
- #: wp-security-audit-log.php:392 wp-security-audit-log.php:419
5507
  #, php-format
5508
  msgid "Hey %1$s"
5509
  msgstr ""
5510
 
5511
- #: wp-security-audit-log.php:393
5512
  msgid ""
5513
  "Never miss an important update! Opt-in to our security and feature updates "
5514
  "notifications, and non-sensitive diagnostic tracking with freemius.com."
5515
  msgstr ""
5516
 
5517
- #: wp-security-audit-log.php:394 wp-security-audit-log.php:422
5518
  msgid "Note: "
5519
  msgstr ""
5520
 
5521
- #: wp-security-audit-log.php:395 wp-security-audit-log.php:423
5522
  msgid "NO AUDIT LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS."
5523
  msgstr ""
5524
 
5525
- #. translators: 1: Plugin name. 2: Freemius link.
5526
- #: wp-security-audit-log.php:421
5527
  #, php-format
5528
  msgid ""
5529
  "Please help us improve %2$s! If you opt-in, some non-sensitive data about "
@@ -5531,69 +4077,35 @@ msgid ""
5531
  "use. If you skip this, that's okay! %2$s will still work just fine."
5532
  msgstr ""
5533
 
5534
- #. translators: Plugin name
5535
- #: wp-security-audit-log.php:443
5536
- #, php-format
5537
- msgid ""
5538
- "Get a free 7-day trial of the premium edition of %s. No credit card "
5539
- "required, no commitments!"
5540
- msgstr ""
5541
-
5542
- #. Plugin Name of the plugin/theme
5543
- #: wp-security-audit-log.php:444
5544
- msgid "WP Security Audit Log"
5545
- msgstr ""
5546
-
5547
- #: wp-security-audit-log.php:448
5548
- msgid "Start free trial"
5549
- msgstr ""
5550
-
5551
- #: wp-security-audit-log.php:518
5552
  msgid ""
5553
  "Error: You do not have sufficient permissions to disable this custom field."
5554
  msgstr ""
5555
 
5556
- #: wp-security-audit-log.php:554
5557
  msgid "Error: You do not have sufficient permissions to disable this alert."
5558
  msgstr ""
5559
 
5560
- #: wp-security-audit-log.php:679
5561
  #, php-format
5562
  msgid ""
5563
  "You are using a version of PHP that is older than %s, which is no longer "
5564
  "supported."
5565
  msgstr ""
5566
 
5567
- #: wp-security-audit-log.php:680
5568
  msgid ""
5569
  "Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
5570
  "\">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you "
5571
  "are using."
5572
  msgstr ""
5573
 
5574
- #: wp-security-audit-log.php:1367
5575
- msgid "Every 45 minutes"
5576
- msgstr ""
5577
-
5578
- #: wp-security-audit-log.php:1371
5579
- msgid "Every 30 minutes"
5580
- msgstr ""
5581
-
5582
- #: wp-security-audit-log.php:1375
5583
- msgid "Every 10 minutes"
5584
- msgstr ""
5585
-
5586
- #: wp-security-audit-log.php:1379
5587
- msgid "Every 1 minute"
5588
- msgstr ""
5589
-
5590
- #. translators: 1. Deprecated method name 2. Version since deprecated
5591
- #: wp-security-audit-log.php:1393
5592
- #, php-format
5593
- msgid "Method %1$s is deprecated since version %2$s!"
5594
  msgstr ""
5595
 
5596
  #. Plugin URI of the plugin/theme
 
5597
  msgid "http://www.wpsecurityauditlog.com/"
5598
  msgstr ""
5599
 
@@ -5610,7 +4122,3 @@ msgstr ""
5610
  #. Author of the plugin/theme
5611
  msgid "WP White Security"
5612
  msgstr ""
5613
-
5614
- #. Author URI of the plugin/theme
5615
- msgid "http://www.wpwhitesecurity.com/"
5616
- msgstr ""
3
  msgstr ""
4
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: WP Security Audit Log\n"
6
+ "POT-Creation-Date: 2018-05-02 11:30+0100\n"
7
+ "PO-Revision-Date: 2018-05-02 11:30+0100\n"
8
  "Last-Translator: \n"
9
  "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 2.0.7\n"
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-Flags-xgettext: --add-comments=translators:\n"
16
  "X-Poedit-WPHeader: wp-security-audit-log.php\n"
21
  "X-Poedit-SearchPath-0: .\n"
22
  "X-Poedit-SearchPathExcluded-0: *.js\n"
23
 
24
+ #: classes/AuditLogListView.php:80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  msgid "No events so far."
26
  msgstr ""
27
 
28
+ #: classes/AuditLogListView.php:98
29
  msgid "Show "
30
  msgstr ""
31
 
32
+ #: classes/AuditLogListView.php:108
33
  msgid " Items"
34
  msgstr ""
35
 
36
+ #: classes/AuditLogListView.php:123 classes/Views/AuditLog.php:221
37
+ #: classes/Views/AuditLog.php:244
38
  msgid "All Sites"
39
  msgstr ""
40
 
41
+ #: classes/AuditLogListView.php:147
42
  msgid "Live Database"
43
  msgstr ""
44
 
45
+ #: classes/AuditLogListView.php:150
46
  msgid "Archive Database"
47
  msgstr ""
48
 
49
+ #: classes/AuditLogListView.php:203 classes/WidgetManager.php:67
 
50
  msgid "User"
51
  msgstr ""
52
 
53
+ #: classes/AuditLogListView.php:205 classes/Views/Settings.php:650
54
  msgid "Username"
55
  msgstr ""
56
 
57
+ #: classes/AuditLogListView.php:208 classes/AuditLogListView.php:225
58
+ msgid "Alert ID"
 
59
  msgstr ""
60
 
61
+ #: classes/AuditLogListView.php:209 classes/AuditLogListView.php:228
 
62
  msgid "Severity"
63
  msgstr ""
64
 
65
+ #: classes/AuditLogListView.php:210 classes/AuditLogListView.php:231
66
  msgid "Date"
67
  msgstr ""
68
 
69
+ #: classes/AuditLogListView.php:212 classes/AuditLogListView.php:237
70
  msgid "Source IP"
71
  msgstr ""
72
 
73
+ #: classes/AuditLogListView.php:215 classes/AuditLogListView.php:240
74
  msgid "Site"
75
  msgstr ""
76
 
77
+ #: classes/AuditLogListView.php:217 classes/AuditLogListView.php:243
78
  msgid "Message"
79
  msgstr ""
80
 
81
+ #: classes/AuditLogListView.php:295
82
  msgid "Click to toggle."
83
  msgstr ""
84
 
85
+ #: classes/AuditLogListView.php:314
86
+ msgid "Disable this type of alerts."
87
  msgstr ""
88
 
89
+ #: classes/AuditLogListView.php:322
90
  msgid "Unknown error code."
91
  msgstr ""
92
 
93
+ #: classes/AuditLogListView.php:357
94
+ msgid "Show me all activity by this User"
 
 
 
 
 
 
 
 
95
  msgstr ""
96
 
97
+ #: classes/AuditLogListView.php:372
98
  msgid "Unknown"
99
  msgstr ""
100
 
101
+ #: classes/AuditLogListView.php:376 classes/Views/Licensing.php:113
 
 
 
 
102
  #: classes/Views/Licensing.php:153
103
  msgid "Plugin"
104
  msgstr ""
105
 
106
+ #: classes/AuditLogListView.php:380
107
  msgid "Plugins"
108
  msgstr ""
109
 
110
+ #: classes/AuditLogListView.php:384
111
  msgid "Website Visitor"
112
  msgstr ""
113
 
114
+ #: classes/AuditLogListView.php:388
 
115
  msgid "System"
116
  msgstr ""
117
 
118
+ #: classes/AuditLogListView.php:408 classes/AuditLogListView.php:421
119
  msgid "Show me all activity originating from this IP Address"
120
  msgstr ""
121
 
122
+ #: classes/AuditLogListView.php:450
123
  msgid "View all details of this change"
124
  msgstr ""
125
 
126
+ #: classes/AuditLogListView.php:451 classes/AuditLogListView.php:597
 
127
  msgid "Alert Data Inspector"
128
  msgstr ""
129
 
130
+ #: classes/AuditLogListView.php:552 classes/AuditLogListView.php:569
 
 
 
 
131
  msgid "Download the log file."
132
  msgstr ""
133
 
134
+ #: classes/AuditLogListView.php:577
135
  msgid "published"
136
  msgstr ""
137
 
138
+ #: classes/Loggers/Database.php:182 classes/Views/EmailNotifications.php:153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  #: classes/Views/EmailNotifications.php:185 classes/Views/ExternalDB.php:152
140
+ #: classes/Views/ExternalDB.php:184 classes/Views/Help.php:144
141
+ #: classes/Views/Help.php:195 classes/Views/LogInUsers.php:154
142
  #: classes/Views/LogInUsers.php:186 classes/Views/Reports.php:153
143
  #: classes/Views/Reports.php:185 classes/Views/Search.php:153
144
  #: classes/Views/Search.php:178
145
  msgid "Upgrade to Premium"
146
  msgstr ""
147
 
148
+ #: classes/Loggers/Database.php:183 classes/Views/AuditLog.php:105
149
+ #: classes/Views/EmailNotifications.php:154
150
  #: classes/Views/EmailNotifications.php:186 classes/Views/ExternalDB.php:153
151
+ #: classes/Views/ExternalDB.php:185 classes/Views/Help.php:196
152
  #: classes/Views/LogInUsers.php:155 classes/Views/LogInUsers.php:187
153
  #: classes/Views/Reports.php:154 classes/Views/Reports.php:186
154
  #: classes/Views/Search.php:154 classes/Views/Search.php:179
155
  msgid "More Information"
156
  msgstr ""
157
 
158
+ #: classes/Sensors/Content.php:941 classes/Sensors/Content.php:949
159
+ #: classes/Sensors/WooCommerce.php:608 classes/Sensors/WooCommerce.php:614
160
  msgid "Password Protected"
161
  msgstr ""
162
 
163
+ #: classes/Sensors/Content.php:943 classes/Sensors/Content.php:951
164
  msgid "Public"
165
  msgstr ""
166
 
167
+ #: classes/Sensors/Content.php:945 classes/Sensors/Content.php:953
168
  msgid "Private"
169
  msgstr ""
170
 
171
+ #: classes/Sensors/WooCommerce.php:1270
172
  msgid "In stock"
173
  msgstr ""
174
 
175
+ #: classes/Sensors/WooCommerce.php:1272
176
  msgid "Out of stock"
177
  msgstr ""
178
 
179
+ #: classes/Settings.php:363
180
  msgid "This function is deprecated"
181
  msgstr ""
182
 
183
  #: classes/Views/AuditLog.php:78
184
  msgid ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  "See who is logged in to your WordPress, create user productivity reports, "
186
  "get alerted via email of important changes and more!"
187
  msgstr ""
188
 
189
+ #: classes/Views/AuditLog.php:79
190
  msgid ""
191
  "Unlock these powerful features and much more with the premium edition of WP "
192
  "Security Audit Log."
193
  msgstr ""
194
 
195
+ #: classes/Views/AuditLog.php:104
196
+ msgid "Buy Now"
197
  msgstr ""
198
 
199
+ #: classes/Views/AuditLog.php:123
 
 
 
 
 
 
 
 
200
  msgid ""
201
  "There are connectivity issues with the database where the WordPress activity "
202
  "log is stored. The logs will be temporary buffered in the WordPress database "
203
  "until the connection is fully restored."
204
  msgstr ""
205
 
206
+ #: classes/Views/AuditLog.php:140 classes/Views/AuditLog.php:156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  msgid "Audit Log Viewer"
208
  msgstr ""
209
 
210
+ #: classes/Views/AuditLog.php:183 classes/Views/Licensing.php:82
211
+ #: classes/Views/Settings.php:211 classes/Views/ToggleAlerts.php:68
212
  msgid "You do not have sufficient permissions to access this page."
213
  msgstr ""
214
 
215
+ #: classes/Views/AuditLog.php:191 classes/Views/AuditLog.php:422
216
+ #: classes/Views/Licensing.php:90 classes/Views/Settings.php:207
217
+ #: classes/Views/Settings.php:968 classes/Views/Settings.php:996
218
+ #: classes/Views/Settings.php:1026
219
+ msgid "Nonce verification failed."
 
 
 
 
 
 
 
 
 
 
220
  msgstr ""
221
 
222
+ #: classes/Views/AuditLog.php:220 classes/Views/AuditLog.php:243
223
  msgid "Please enter the number of alerts you would like to see on one page:"
224
  msgstr ""
225
 
226
+ #: classes/Views/AuditLog.php:222 classes/Views/AuditLog.php:245
227
  msgid "No Results"
228
  msgstr ""
229
 
230
+ #: classes/Views/AuditLog.php:419
231
  msgid "No users found."
232
  msgstr ""
233
 
234
+ #: classes/Views/AuditLog.php:441
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  msgid "Log file does not exist."
236
  msgstr ""
237
 
238
+ #: classes/Views/AuditLog.php:482
239
  msgid "Request to get log file failed."
240
  msgstr ""
241
 
242
+ #: classes/Views/AuditLog.php:489
243
+ msgid "Nonce verification failed!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  msgstr ""
245
 
246
  #: classes/Views/EmailNotifications.php:28
337
 
338
  #: classes/Views/ExternalDB.php:121
339
  msgid ""
340
+ "Configure archiving rules to archive old alerts in an archiving database,"
341
  msgstr ""
342
 
343
  #: classes/Views/ExternalDB.php:167 classes/Views/ExternalDB.php:168
353
  msgstr ""
354
 
355
  #: classes/Views/Help.php:30 classes/Views/Help.php:44
 
356
  msgid "Help"
357
  msgstr ""
358
 
359
+ #: classes/Views/Help.php:75
 
 
 
 
360
  msgid "Getting Started"
361
  msgstr ""
362
 
363
+ #: classes/Views/Help.php:77
364
  msgid ""
365
  "Getting started with WP Security Audit Log is really easy; once the plugin "
366
  "is installed it will automatically keep a log of everything that is "
368
  "video below for a quick overview of the plugin."
369
  msgstr ""
370
 
371
+ #: classes/Views/Help.php:86
372
  msgid "Plugin Support"
373
  msgstr ""
374
 
375
+ #: classes/Views/Help.php:88
376
  msgid ""
377
  "Have you encountered or noticed any issues while using WP Security Audit Log "
378
  "plugin?"
379
  msgstr ""
380
 
381
+ #: classes/Views/Help.php:89
382
  msgid ""
383
  "Or you want to report something to us? Click any of the options below to "
384
  "post on the plugin's forum or contact our support directly."
385
  msgstr ""
386
 
387
+ #: classes/Views/Help.php:91
388
  msgid "Free Support Forum"
389
  msgstr ""
390
 
391
+ #: classes/Views/Help.php:93
392
  msgid "Free Support Email"
393
  msgstr ""
394
 
395
+ #: classes/Views/Help.php:99
396
  msgid "Plugin Documentation"
397
  msgstr ""
398
 
399
+ #: classes/Views/Help.php:101
400
  msgid ""
401
  "For more technical information about the WP Security Audit Log plugin please "
402
  "visit the plugin’s knowledge base."
403
  msgstr ""
404
 
405
+ #: classes/Views/Help.php:102
406
  msgid ""
407
+ "Refer to the list of WordPress security alerts for a complete list of Alerts "
408
  "and IDs that the plugin uses to keep a log of all the changes in the "
409
  "WordPress audit log."
410
  msgstr ""
411
 
412
+ #: classes/Views/Help.php:104
413
  msgid "Plugin Website"
414
  msgstr ""
415
 
416
+ #: classes/Views/Help.php:106
417
  msgid "Knowledge Base"
418
  msgstr ""
419
 
420
+ #: classes/Views/Help.php:108
421
+ msgid "List of WordPress Security Alerts"
422
  msgstr ""
423
 
424
+ #: classes/Views/Help.php:114
425
  msgid "Rate WP Security Audit Log"
426
  msgstr ""
427
 
428
+ #: classes/Views/Help.php:116
429
  msgid ""
430
  "We work really hard to deliver a plugin that enables you to keep a record of "
431
  "all the changes that are happening on your WordPress."
432
  msgstr ""
433
 
434
+ #: classes/Views/Help.php:117
435
  msgid ""
436
  "It takes thousands of man-hours every year and endless amount of dedication "
437
  "to research, develop and maintain the free edition of WP Security Audit Log."
438
  msgstr ""
439
 
440
+ #: classes/Views/Help.php:118
441
  msgid ""
442
  "Therefore if you like what you see, and find WP Security Audit Log useful we "
443
  "ask you nothing more than to please rate our plugin."
444
  msgstr ""
445
 
446
+ #: classes/Views/Help.php:119
447
  msgid "We appreciate every star!"
448
  msgstr ""
449
 
450
+ #: classes/Views/Help.php:129
451
  msgid "Rate Plugin"
452
  msgstr ""
453
 
454
+ #: classes/Views/Help.php:148
455
  msgid "See who is logged in"
456
  msgstr ""
457
 
458
+ #: classes/Views/Help.php:149
459
  msgid "And remotely terminate sessions"
460
  msgstr ""
461
 
462
+ #: classes/Views/Help.php:152
463
  msgid "Generate reports"
464
  msgstr ""
465
 
466
+ #: classes/Views/Help.php:153
467
  msgid "Or configure automated email reports"
468
  msgstr ""
469
 
470
+ #: classes/Views/Help.php:156
471
  msgid "Configure email notifications"
472
  msgstr ""
473
 
474
+ #: classes/Views/Help.php:157
475
  msgid "Get instantly notified of important changes"
476
  msgstr ""
477
 
478
+ #: classes/Views/Help.php:160
479
  msgid "Add Search"
480
  msgstr ""
481
 
482
+ #: classes/Views/Help.php:161
483
  msgid "Easily track down suspicious behaviour"
484
  msgstr ""
485
 
486
+ #: classes/Views/Help.php:164
487
  msgid "Integrate & Centralise"
488
  msgstr ""
489
 
490
+ #: classes/Views/Help.php:165
491
  msgid "Export the logs to your centralised logging system"
492
  msgstr ""
493
 
495
  msgid "Licensing"
496
  msgstr ""
497
 
498
+ #: classes/Views/Licensing.php:96 classes/Views/Settings.php:218
499
  #: classes/Views/ToggleAlerts.php:92
500
  msgid "Settings have been saved."
501
  msgstr ""
502
 
503
+ #: classes/Views/Licensing.php:101 classes/Views/Settings.php:223
504
  #: classes/Views/ToggleAlerts.php:98
505
  msgid "Error: "
506
  msgstr ""
660
  "to fine tune the search results."
661
  msgstr ""
662
 
663
+ #: classes/Views/Settings.php:57 classes/Views/Settings.php:71
664
+ msgid "Settings"
665
  msgstr ""
666
 
667
+ #: classes/Views/Settings.php:229
668
+ msgid "General"
669
  msgstr ""
670
 
671
+ #: classes/Views/Settings.php:230
672
+ msgid "Audit Log"
673
  msgstr ""
674
 
675
+ #: classes/Views/Settings.php:231
676
  msgid "Exclude Objects"
677
  msgstr ""
678
 
679
+ #: classes/Views/Settings.php:247
680
+ msgid "From Email & Name"
681
  msgstr ""
682
 
683
+ #: classes/Views/Settings.php:250
684
+ msgid "Email Address"
685
+ msgstr ""
686
+
687
+ #: classes/Views/Settings.php:253
688
+ msgid "Display Name"
689
+ msgstr ""
690
+
691
+ #: classes/Views/Settings.php:259
692
+ #, php-format
693
+ msgid ""
694
+ "These email address and display name will be used as From details in the "
695
+ "emails sent by the %s . Please ensure the mail server can relay emails with "
696
+ "the domain of the specified email address."
697
+ msgstr ""
698
+
699
+ #: classes/Views/Settings.php:260
700
+ msgid "(premium add-ons)"
701
  msgstr ""
702
 
703
+ #: classes/Views/Settings.php:268
704
+ msgid "Alerts Dashboard Widget"
705
  msgstr ""
706
 
707
+ #: classes/Views/Settings.php:274
708
+ msgid "On"
 
709
  msgstr ""
710
 
711
+ #: classes/Views/Settings.php:279
712
+ msgid "Off"
713
  msgstr ""
714
 
715
+ #: classes/Views/Settings.php:285
716
+ #, php-format
717
+ msgid "Display a dashboard widget with the latest %d security alerts."
718
+ msgstr ""
719
+
720
+ #: classes/Views/Settings.php:295
721
+ msgid "Reverse Proxy / Firewall Options"
722
  msgstr ""
723
 
724
+ #: classes/Views/Settings.php:300
725
+ msgid "WordPress running behind firewall or proxy"
726
  msgstr ""
727
 
728
+ #: classes/Views/Settings.php:303
729
  msgid ""
730
+ "Enable this option if your WordPress is running behind a firewall or reverse "
731
+ "proxy. When this option is enabled the plugin will retrieve the user's IP "
732
+ "address from the proxy header."
733
  msgstr ""
734
 
735
+ #: classes/Views/Settings.php:307
736
+ msgid "Filter Internal IP Addresses"
737
  msgstr ""
738
 
739
+ #: classes/Views/Settings.php:310
 
 
740
  msgid ""
741
+ "Enable this option to filter internal IP addresses from the proxy headers."
 
742
  msgstr ""
743
 
744
+ #: classes/Views/Settings.php:316
745
+ msgid "Can Manage Plugin"
746
  msgstr ""
747
 
748
+ #: classes/Views/Settings.php:323
749
+ msgid "Users and Roles in this list can manage the plugin settings"
750
  msgstr ""
751
 
752
+ #: classes/Views/Settings.php:341
753
+ msgid "Restrict Plugin Access"
754
  msgstr ""
755
 
756
+ #: classes/Views/Settings.php:351
757
+ msgid ""
758
+ "If this option is disabled all the administrators on this WordPress have "
759
+ "access to manage this plugin."
760
  msgstr ""
761
 
762
+ #: classes/Views/Settings.php:352
763
  msgid ""
764
+ "By enabling this option only <strong>You</strong> and the users specified in "
765
+ "the <strong>Can Manage Plugin</strong> and <strong>Can View Alerts</strong> "
766
+ "can configure this plugin or view the alerts in the WordPress audit trail."
767
  msgstr ""
768
 
769
+ #: classes/Views/Settings.php:359
770
  msgid "Login Page Notification"
771
  msgstr ""
772
 
773
+ #: classes/Views/Settings.php:383 wp-security-audit-log.php:1122
774
  msgid ""
775
  "For security and auditing purposes, a record of all of your logged-in "
776
  "actions and changes within the WordPress dashboard will be recorded in an "
779
  "IP address where you accessed this site from."
780
  msgstr ""
781
 
782
+ #: classes/Views/Settings.php:401
 
 
 
 
783
  msgid ""
784
+ "Many compliance regulations (such as the GDRP) require website "
785
+ "administrators to tell the users of this website that a log is kept of all "
786
+ "the changes they do when logged in."
787
  msgstr ""
788
 
789
+ #: classes/Views/Settings.php:403
790
+ msgid "<strong>Note: </strong>"
791
  msgstr ""
792
 
793
+ #: classes/Views/Settings.php:403
 
 
794
  msgid ""
795
+ "The only HTML code allowed in the login page notification is for links ( < a "
796
+ "href >...< /a > )."
797
  msgstr ""
798
 
799
+ #: classes/Views/Settings.php:410
800
+ msgid "Developer Options"
801
  msgstr ""
802
 
803
+ #: classes/Views/Settings.php:416
804
+ msgid "Show Developer Options"
805
  msgstr ""
806
 
807
+ #: classes/Views/Settings.php:420
808
  msgid ""
809
+ "Only enable these options on testing, staging and development websites. "
810
+ "Enabling any of the settings below on LIVE websites may cause unintended "
811
+ "side-effects including degraded performance."
 
 
 
 
812
  msgstr ""
813
 
814
+ #: classes/Views/Settings.php:434
815
+ msgid "Request Log"
 
 
 
816
  msgstr ""
817
 
818
+ #: classes/Views/Settings.php:435
819
+ msgid "Enables logging request to file."
820
  msgstr ""
821
 
822
+ #: classes/Views/Settings.php:459
823
+ msgid ""
824
+ "The request log file is saved in the /wp-content/uploads/wp-security-audit-"
825
+ "log/ directory."
826
  msgstr ""
827
 
828
+ #: classes/Views/Settings.php:467
829
+ msgid "Hide Plugin in Plugins Page"
830
  msgstr ""
831
 
832
+ #: classes/Views/Settings.php:472
833
+ msgid "Hide"
834
  msgstr ""
835
 
836
+ #: classes/Views/Settings.php:476
837
  msgid ""
838
+ "To manually revert this setting set the value of option wsal-hide-plugin to "
839
+ "0 in the wp_wsal_options table."
840
  msgstr ""
841
 
842
+ #: classes/Views/Settings.php:483
843
+ msgid "Remove Data on Uninstall"
844
  msgstr ""
845
 
846
+ #: classes/Views/Settings.php:490
847
  msgid ""
848
+ "Check this box if you would like remove all data when the plugin is deleted."
 
 
 
 
 
 
849
  msgstr ""
850
 
851
+ #: classes/Views/Settings.php:509
852
  msgid ""
853
+ "The options below are disabled because you enabled archiving of alerts to "
854
+ "the archiving table from"
855
  msgstr ""
856
 
857
+ #: classes/Views/Settings.php:514
858
+ msgid "Audit Log Retention"
859
  msgstr ""
860
 
861
+ #: classes/Views/Settings.php:517
862
+ msgid "(eg: 1 month)"
 
 
 
863
  msgstr ""
864
 
865
+ #: classes/Views/Settings.php:523
866
+ msgid "None"
867
  msgstr ""
868
 
869
+ #: classes/Views/Settings.php:527
870
+ msgid "(Leave empty or enter 0 to disable automatic pruning.)"
871
  msgstr ""
872
 
873
+ #: classes/Views/Settings.php:533
874
+ msgid "Delete alerts older than"
875
  msgstr ""
876
 
877
+ #: classes/Views/Settings.php:542
878
+ msgid "months"
879
  msgstr ""
880
 
881
+ #: classes/Views/Settings.php:546
882
+ msgid "(eg: 80)"
883
  msgstr ""
884
 
885
+ #: classes/Views/Settings.php:552
886
+ msgid "Keep up to"
887
  msgstr ""
888
 
889
+ #: classes/Views/Settings.php:557
890
+ msgid "alerts"
 
 
 
 
891
  msgstr ""
892
 
893
+ #: classes/Views/Settings.php:563
894
+ msgid "Next Scheduled Cleanup is in "
895
  msgstr ""
896
 
897
+ #: classes/Views/Settings.php:567
898
+ #, php-format
899
+ msgid "(or %s)"
900
  msgstr ""
901
 
902
+ #: classes/Views/Settings.php:568
903
+ msgid "Run Manually"
904
  msgstr ""
905
 
906
+ #: classes/Views/Settings.php:576
907
+ msgid "Can View Alerts"
 
 
908
  msgstr ""
909
 
910
+ #: classes/Views/Settings.php:583
911
+ msgid "Users and Roles in this list can view the security alerts"
 
 
 
912
  msgstr ""
913
 
914
+ #: classes/Views/Settings.php:599
915
+ msgid "Refresh Audit Log Viewer"
 
 
 
916
  msgstr ""
917
 
918
+ #: classes/Views/Settings.php:606
919
+ msgid "Automatic"
 
 
 
 
920
  msgstr ""
921
 
922
+ #: classes/Views/Settings.php:608
923
+ msgid "Refresh Audit Log Viewer as soon as there are new alerts."
924
  msgstr ""
925
 
926
+ #: classes/Views/Settings.php:613
927
+ msgid "Manual"
928
  msgstr ""
929
 
930
+ #: classes/Views/Settings.php:615
931
+ msgid "Refresh Audit Log Viewer only when the page is reloaded."
932
  msgstr ""
933
 
934
+ #: classes/Views/Settings.php:622
935
+ msgid "Alerts Timestamp"
936
  msgstr ""
937
 
938
+ #: classes/Views/Settings.php:629
939
+ msgid "UTC"
940
  msgstr ""
941
 
942
+ #: classes/Views/Settings.php:635
943
+ msgid "WordPress' timezone"
944
  msgstr ""
945
 
946
+ #: classes/Views/Settings.php:638
947
+ msgid ""
948
+ "Select which timestamp the alerts should have in the Audit Log viewer. Note "
949
+ "that the WordPress' timezone might be different from that of the server."
950
  msgstr ""
951
 
952
+ #: classes/Views/Settings.php:644
953
+ msgid "User Information in Audit Log"
954
  msgstr ""
955
 
956
+ #: classes/Views/Settings.php:655
957
+ msgid "First Name & Last Name"
958
  msgstr ""
959
 
960
+ #: classes/Views/Settings.php:658
961
  msgid ""
962
+ "Select the type of user information that should be displayed in the audit "
963
+ "log."
 
964
  msgstr ""
965
 
966
+ #: classes/Views/Settings.php:664
967
+ msgid "Audit Log Columns Selection"
968
  msgstr ""
969
 
970
+ #: classes/Views/Settings.php:680
971
+ msgid ""
972
+ "When you disable any of the above such details won’t be shown in the Audit "
973
+ "Log viewer though the plugin will still record such information in the "
974
+ "database."
975
  msgstr ""
976
 
977
+ #: classes/Views/Settings.php:686
978
+ msgid "Disable Alerts for WordPress Background Activity"
979
  msgstr ""
980
 
981
+ #: classes/Views/Settings.php:692
982
+ msgid "Hide activity"
 
983
  msgstr ""
984
 
985
+ #: classes/Views/Settings.php:696
986
  msgid ""
987
+ "For example do not raise an alert when WordPress deletes the auto drafts."
 
 
 
988
  msgstr ""
989
 
990
+ #: classes/Views/Settings.php:707
991
+ msgid "Users & Roles"
992
  msgstr ""
993
 
994
+ #: classes/Views/Settings.php:710
995
+ msgid ""
996
+ "Any of the users and roles listed in the below options will be excluded from "
997
+ "monitoring. This means that any change they do will not be logged."
998
  msgstr ""
999
 
1000
+ #: classes/Views/Settings.php:714
1001
+ msgid "Excluded Users"
1002
  msgstr ""
1003
 
1004
+ #: classes/Views/Settings.php:734
1005
+ msgid "Excluded Roles"
1006
  msgstr ""
1007
 
1008
+ #: classes/Views/Settings.php:753
1009
+ msgid "Custom Fields"
1010
  msgstr ""
1011
 
1012
+ #: classes/Views/Settings.php:757
1013
  msgid ""
1014
+ "All of the custom fields listed below will be excluded from monitoring. This "
1015
+ "means that if they are changed or updated the plugin will not log such "
1016
+ "activity."
1017
  msgstr ""
1018
 
1019
+ #: classes/Views/Settings.php:758
1020
+ msgid ""
1021
+ "You can use the * wildcard to exclude more than one Custom Field. For "
1022
+ "example, to exclude all the Custom Fields that start with wp123 specify "
1023
+ "wp123*."
1024
  msgstr ""
1025
 
1026
+ #: classes/Views/Settings.php:763
1027
+ msgid "Excluded Custom Fields"
1028
  msgstr ""
1029
 
1030
+ #: classes/Views/Settings.php:782
1031
+ msgid "IP Addresses"
1032
  msgstr ""
1033
 
1034
+ #: classes/Views/Settings.php:785
1035
+ msgid ""
1036
+ "Any of the IP addresses listed below will be excluded from monitoring. This "
1037
+ "means that all activity from such IP address will not be recorded."
1038
  msgstr ""
1039
 
1040
+ #: classes/Views/Settings.php:789
1041
+ msgid "Excluded IP Addresses"
 
 
1042
  msgstr ""
1043
 
1044
+ #: classes/Views/Settings.php:808 defaults.php:206
1045
+ msgid "Custom Post Types"
1046
  msgstr ""
1047
 
1048
+ #: classes/Views/Settings.php:811
1049
+ msgid ""
1050
+ "The below list of Custom Post Types are excluded from monitoring. This means "
1051
+ "that all activity related to these Custom Post Types will not be recorded."
1052
  msgstr ""
1053
 
1054
+ #: classes/Views/Settings.php:814
1055
+ msgid "Exclude Custom Post Type from monitoring"
1056
  msgstr ""
1057
 
1058
+ #: classes/Views/ToggleAlerts.php:27 classes/Views/ToggleAlerts.php:41
1059
+ msgid "Enable/Disable Alerts"
1060
  msgstr ""
1061
 
1062
+ #: classes/Views/ToggleAlerts.php:175
1063
+ msgid "Code"
 
 
 
 
1064
  msgstr ""
1065
 
1066
+ #: classes/Views/ToggleAlerts.php:176
1067
+ msgid "Type"
1068
  msgstr ""
1069
 
1070
+ #: classes/Views/ToggleAlerts.php:177 classes/WidgetManager.php:68
1071
+ msgid "Description"
 
 
 
1072
  msgstr ""
1073
 
1074
+ #: classes/Views/ToggleAlerts.php:186
1075
  msgid ""
1076
+ "<strong>Note:</strong> Post refers to any type of content, i.e. blog post, "
1077
+ "page or a post with a custom post type."
 
1078
  msgstr ""
1079
 
1080
+ #: classes/Views/ToggleAlerts.php:201
1081
+ msgid "Not Implemented"
1082
  msgstr ""
1083
 
1084
+ #: classes/Views/ToggleAlerts.php:204
1085
+ msgid "Not Available"
1086
  msgstr ""
1087
 
1088
+ #: classes/Views/ToggleAlerts.php:230 classes/Views/ToggleAlerts.php:263
1089
  msgid ""
1090
+ "Capture 404 requests to file (the log file are created in the /wp-content/"
1091
+ "uploads/wp-security-audit-log/404s/ directory)"
1092
  msgstr ""
1093
 
1094
+ #: classes/Views/ToggleAlerts.php:238 classes/Views/ToggleAlerts.php:271
1095
+ msgid "Purge log files older than one month"
 
 
 
 
1096
  msgstr ""
1097
 
1098
+ #: classes/Views/ToggleAlerts.php:243
1099
+ msgid ""
1100
+ "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
1101
+ "to non-existing pages from the same IP address. Increase the value in this "
1102
+ "setting to the desired amount to keep a log of more or less requests."
1103
  msgstr ""
1104
 
1105
+ #: classes/Views/ToggleAlerts.php:248 classes/Views/ToggleAlerts.php:281
1106
+ msgid "Record the referrer that generated the 404 error."
1107
  msgstr ""
1108
 
1109
+ #: classes/Views/ToggleAlerts.php:276
1110
+ msgid ""
1111
+ "Number of 404 Requests to Log. By default the plugin keeps up to 99 requests "
1112
+ "to non-existing pages from the same IP address. Increase the value in this "
1113
+ "setting to the desired amount to keep a log of more or less requests. Note "
1114
+ "that by increasing this value to a high number, should your website be "
1115
+ "scanned the plugin will consume more resources to log all the requests."
1116
  msgstr ""
1117
 
1118
+ #: classes/Views/ToggleAlerts.php:293 classes/Views/ToggleAlerts.php:306
1119
  msgid ""
1120
+ "Number of login attempts to log. Enter 0 to log all failed login attempts. "
1121
+ "(By default the plugin only logs up to 10 failed login because the process "
1122
+ "can be very resource intensive in case of a brute force attack)"
 
 
 
1123
  msgstr ""
1124
 
1125
+ #: classes/Views/ToggleAlerts.php:321
1126
+ msgid "Save Changes"
1127
  msgstr ""
1128
 
1129
+ #: classes/WidgetManager.php:36
1130
+ msgid "Latest Alerts"
1131
  msgstr ""
1132
 
1133
+ #: classes/WidgetManager.php:60
1134
+ msgid "No alerts found."
1135
  msgstr ""
1136
 
1137
+ #: defaults.php:60
1138
+ msgid "Fatal run-time error."
1139
  msgstr ""
1140
 
1141
+ #: defaults.php:64
1142
+ msgid "Run-time warning (non-fatal error)."
1143
  msgstr ""
1144
 
1145
+ #: defaults.php:68
1146
+ msgid "Compile-time parse error."
1147
  msgstr ""
1148
 
1149
+ #: defaults.php:72
1150
+ msgid "Run-time notice."
1151
  msgstr ""
1152
 
1153
+ #: defaults.php:76
1154
+ msgid "Fatal error that occurred during startup."
1155
  msgstr ""
1156
 
1157
+ #: defaults.php:80
1158
+ msgid "Warnings that occurred during startup."
1159
  msgstr ""
1160
 
1161
+ #: defaults.php:84
1162
+ msgid "Fatal compile-time error."
1163
  msgstr ""
1164
 
1165
+ #: defaults.php:88
1166
+ msgid "Compile-time warning."
1167
  msgstr ""
1168
 
1169
+ #: defaults.php:92
1170
+ msgid "User-generated error message."
1171
  msgstr ""
1172
 
1173
+ #: defaults.php:96
1174
+ msgid "User-generated warning message."
1175
  msgstr ""
1176
 
1177
+ #: defaults.php:100
1178
+ msgid "User-generated notice message."
1179
  msgstr ""
1180
 
1181
+ #: defaults.php:104
1182
+ msgid "Non-standard/optimal code warning."
1183
  msgstr ""
1184
 
1185
+ #: defaults.php:108
1186
+ msgid "Catchable fatal error."
1187
  msgstr ""
1188
 
1189
+ #: defaults.php:112
1190
+ msgid "Run-time deprecation notices."
1191
  msgstr ""
1192
 
1193
+ #: defaults.php:116
1194
+ msgid "Run-time user deprecation notices."
 
 
 
 
 
 
 
 
1195
  msgstr ""
1196
 
1197
+ #: defaults.php:121
1198
+ msgid "Critical, high-impact messages."
1199
  msgstr ""
1200
 
1201
+ #: defaults.php:125
1202
+ msgid "Debug informational messages."
1203
  msgstr ""
1204
 
1205
+ #: defaults.php:135
1206
+ msgid "Content & Comments"
1207
  msgstr ""
1208
 
1209
+ #: defaults.php:139
1210
+ msgid "Content"
1211
  msgstr ""
1212
 
1213
+ #: defaults.php:140
1214
+ msgid "User created a new post and saved it as draft"
1215
  msgstr ""
1216
 
1217
+ #: defaults.php:140
1218
+ msgid ""
1219
+ "Created a new %PostType% titled %PostTitle% and saved it as draft. "
1220
+ "%EditorLinkPost%."
1221
  msgstr ""
1222
 
1223
+ #: defaults.php:141
1224
+ msgid "User published a post"
1225
  msgstr ""
1226
 
1227
+ #: defaults.php:141
1228
+ msgid ""
1229
+ "Published a %PostType% titled %PostTitle%. URL is %PostUrl%. %EditorLinkPost"
1230
+ "%."
1231
  msgstr ""
1232
 
1233
+ #: defaults.php:142
1234
+ msgid "User modified a post"
1235
  msgstr ""
1236
 
1237
+ #: defaults.php:142
1238
+ msgid ""
1239
+ "Modified the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
1240
+ "%EditorLinkPost%."
1241
  msgstr ""
1242
 
1243
+ #: defaults.php:143
1244
+ msgid "User permanently deleted a post from the trash"
1245
  msgstr ""
1246
 
1247
+ #: defaults.php:143
1248
+ msgid ""
1249
+ "Permanently deleted the %PostType% titled %PostTitle%. URL was %PostUrl%."
1250
  msgstr ""
1251
 
1252
+ #: defaults.php:144
1253
+ msgid "User moved a post to the trash"
1254
  msgstr ""
1255
 
1256
+ #: defaults.php:144
1257
+ msgid ""
1258
+ "Moved the %PostStatus% %PostType% titled %PostTitle% to trash. URL is "
1259
+ "%PostUrl%."
1260
  msgstr ""
1261
 
1262
+ #: defaults.php:145
1263
+ msgid "User restored a post from trash"
1264
  msgstr ""
1265
 
1266
+ #: defaults.php:145
1267
+ msgid ""
1268
+ "The %PostStatus% %PostType% titled %PostTitle% has been restored from trash. "
1269
+ "URL is: %PostUrl%. %EditorLinkPost%."
1270
  msgstr ""
1271
 
1272
+ #: defaults.php:146
1273
+ msgid "User changed post category"
1274
  msgstr ""
1275
 
1276
+ #: defaults.php:146
1277
+ msgid ""
1278
+ "Changed the category of the %PostStatus% %PostType% titled %PostTitle% from "
1279
+ "%OldCategories% to %NewCategories%. URL is: %PostUrl%. %EditorLinkPost%."
1280
  msgstr ""
1281
 
1282
+ #: defaults.php:147
1283
+ msgid "User changed post URL"
1284
  msgstr ""
1285
 
1286
+ #: defaults.php:147
1287
+ msgid ""
1288
+ "Changed the URL of the %PostStatus% %PostType% titled %PostTitle%%ReportText"
1289
+ "%.%ChangeText% %EditorLinkPost%."
1290
  msgstr ""
1291
 
1292
+ #: defaults.php:148
1293
+ msgid "User changed post author"
1294
  msgstr ""
1295
 
1296
+ #: defaults.php:148
1297
+ msgid ""
1298
+ "Changed the author of the %PostStatus% %PostType% titled %PostTitle% from "
1299
+ "%OldAuthor% to %NewAuthor%. URL is: %PostUrl%. %EditorLinkPost%."
1300
  msgstr ""
1301
 
1302
+ #: defaults.php:149
1303
+ msgid "User changed post status"
1304
  msgstr ""
1305
 
1306
+ #: defaults.php:149
1307
+ msgid ""
1308
+ "Changed the status of the %PostType% titled %PostTitle% from %OldStatus% to "
1309
+ "%NewStatus%. URL is: %PostUrl%. %EditorLinkPost%."
1310
  msgstr ""
1311
 
1312
+ #: defaults.php:150
1313
+ msgid "User created new category"
1314
  msgstr ""
1315
 
1316
+ #: defaults.php:150
1317
+ msgid ""
1318
+ "Created a new category called %CategoryName%. Category slug is %Slug%. "
1319
+ "%CategoryLink%."
1320
  msgstr ""
1321
 
1322
+ #: defaults.php:151
1323
+ msgid "User deleted category"
1324
  msgstr ""
1325
 
1326
+ #: defaults.php:151
1327
+ msgid ""
1328
+ "Deleted the %CategoryName% category. Category slug was %Slug%. %CategoryLink"
1329
+ "%."
1330
  msgstr ""
1331
 
1332
+ #: defaults.php:152
1333
+ msgid "User changed the visibility of a post"
1334
  msgstr ""
1335
 
1336
+ #: defaults.php:152
1337
+ msgid ""
1338
+ "Changed the visibility of the %PostStatus% %PostType% titled %PostTitle% "
1339
+ "from %OldVisibility% to %NewVisibility%. URL is: %PostUrl%. %EditorLinkPost%."
1340
  msgstr ""
1341
 
1342
+ #: defaults.php:153
1343
+ msgid "User changed the date of a post"
1344
  msgstr ""
1345
 
1346
+ #: defaults.php:153
1347
+ msgid ""
1348
+ "Changed the date of the %PostStatus% %PostType% titled %PostTitle% from "
1349
+ "%OldDate% to %NewDate%. URL is: %PostUrl%. %EditorLinkPost%."
1350
  msgstr ""
1351
 
1352
+ #: defaults.php:154
1353
+ msgid "User changed the parent of a page"
1354
  msgstr ""
1355
 
1356
+ #: defaults.php:154
1357
+ msgid ""
1358
+ "Changed the parent of the %PostStatus% %PostType% titled %PostTitle% from "
1359
+ "%OldParentName% to %NewParentName%. %EditorLinkPost%."
1360
  msgstr ""
1361
 
1362
+ #: defaults.php:155
1363
+ msgid "User changed the template of a page"
1364
  msgstr ""
1365
 
1366
+ #: defaults.php:155
1367
+ msgid ""
1368
+ "Changed the template of the %PostStatus% %PostType% titled %PostTitle% from "
1369
+ "%OldTemplate% to %NewTemplate%. %EditorLinkPost%."
1370
  msgstr ""
1371
 
1372
+ #: defaults.php:156
1373
+ msgid "User set a post as sticky"
1374
  msgstr ""
1375
 
1376
+ #: defaults.php:156
1377
+ msgid ""
1378
+ "Set the post %PostTitle% as Sticky. Post URL is %PostUrl%. %EditorLinkPost%."
1379
  msgstr ""
1380
 
1381
+ #: defaults.php:157
1382
+ msgid "User removed post from sticky"
1383
  msgstr ""
1384
 
1385
+ #: defaults.php:157
1386
+ msgid "Removed the post %PostTitle% from Sticky. %EditorLinkPost%."
1387
  msgstr ""
1388
 
1389
+ #: defaults.php:158
1390
+ msgid "Changed the parent of a category."
1391
  msgstr ""
1392
 
1393
+ #: defaults.php:158
1394
+ msgid ""
1395
+ "Changed the parent of the category %CategoryName% from %OldParent% to "
1396
+ "%NewParent%. %CategoryLink%."
1397
  msgstr ""
1398
 
1399
+ #: defaults.php:159
1400
+ msgid "User created a custom field for a post"
1401
  msgstr ""
1402
 
1403
+ #: defaults.php:159
1404
+ msgid ""
1405
+ "Created a new custom field called %MetaKey% with value %MetaValue% in the "
1406
+ "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
1407
+ "%EditorLinkPost%.<br>%MetaLink%."
1408
  msgstr ""
1409
 
1410
+ #: defaults.php:160
1411
+ msgid "User updated a custom field value for a post"
1412
  msgstr ""
1413
 
1414
+ #: defaults.php:160
1415
+ msgid ""
1416
+ "Modified the value of the custom field %MetaKey%%ReportText% in the "
1417
+ "%PostStatus% %PostType% titled %PostTitle%.%ChangeText% URL is: %PostUrl%. "
1418
+ "%EditorLinkPost%.<br>%MetaLink%."
1419
  msgstr ""
1420
 
1421
+ #: defaults.php:161
1422
+ msgid "User deleted a custom field from a post"
1423
  msgstr ""
1424
 
1425
+ #: defaults.php:161
1426
+ msgid ""
1427
+ "Deleted the custom field %MetaKey% with value %MetaValue% from %PostStatus% "
1428
+ "%PostType% titled %PostTitle%. URL is: %PostUrl%. %EditorLinkPost%."
1429
  msgstr ""
1430
 
1431
+ #: defaults.php:162
1432
+ msgid "User updated a custom field name for a post"
1433
  msgstr ""
1434
 
1435
+ #: defaults.php:162
1436
  msgid ""
1437
+ "Changed the custom field's name from %MetaKeyOld% to %MetaKeyNew% in the "
1438
+ "%PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
1439
+ "%EditorLinkPost%.<br>%MetaLink%."
 
 
 
 
 
1440
  msgstr ""
1441
 
1442
+ #: defaults.php:163
1443
+ msgid "User modified the content of a post."
1444
  msgstr ""
1445
 
1446
+ #: defaults.php:163
1447
+ msgid ""
1448
+ "Modified the content of the %PostStatus% %PostType% titled %PostTitle%. Post "
1449
+ "URL is %PostUrl%. %RevisionLink% %EditorLinkPost%."
1450
  msgstr ""
1451
 
1452
+ #: defaults.php:164
1453
+ msgid "User submitted a post for review"
1454
  msgstr ""
1455
 
1456
+ #: defaults.php:164
1457
  msgid ""
1458
+ "Submitted the %PostType% titled %PostTitle% for review. URL is: %PostUrl%. "
1459
+ "%EditorLinkPost%."
1460
  msgstr ""
1461
 
1462
+ #: defaults.php:165
1463
+ msgid "User scheduled a post"
1464
  msgstr ""
1465
 
1466
+ #: defaults.php:165
1467
+ msgid ""
1468
+ "Scheduled the %PostType% titled %PostTitle% to be published on "
1469
+ "%PublishingDate%. URL is: %PostUrl%. %EditorLinkPost%."
1470
  msgstr ""
1471
 
1472
+ #: defaults.php:166
1473
+ msgid "User changed title of a post"
1474
  msgstr ""
1475
 
1476
+ #: defaults.php:166
1477
  msgid ""
1478
+ "Changed the title of the %PostStatus% %PostType% from %OldTitle% to %NewTitle"
1479
+ "%. URL is: %PostUrl%. %EditorLinkPost%."
1480
  msgstr ""
1481
 
1482
+ #: defaults.php:167
1483
+ msgid "User opened a post in the editor"
 
 
1484
  msgstr ""
1485
 
1486
+ #: defaults.php:167
1487
  msgid ""
1488
+ "Opened the %PostStatus% %PostType% titled %PostTitle% in the editor. URL is: "
1489
+ "%PostUrl%. %EditorLinkPost%."
 
 
 
1490
  msgstr ""
1491
 
1492
+ #: defaults.php:168
1493
+ msgid "User viewed a post"
1494
  msgstr ""
1495
 
1496
+ #: defaults.php:168
1497
+ msgid ""
1498
+ "Viewed the %PostStatus% %PostType% titled %PostTitle%. URL is: %PostUrl%. "
1499
+ "%EditorLinkPost%."
1500
  msgstr ""
1501
 
1502
+ #: defaults.php:169
1503
+ msgid "A plugin modified a post"
 
 
 
1504
  msgstr ""
1505
 
1506
+ #: defaults.php:169
1507
  msgid ""
1508
+ "Plugin modified the %PostStatus% %PostType% titled %PostTitle% of type "
1509
+ "%PostType%. URL is: %PostUrl%. %EditorLinkPost%."
 
1510
  msgstr ""
1511
 
1512
+ #: defaults.php:170
1513
+ msgid "User disabled Comments/Trackbacks and Pingbacks in a post."
1514
  msgstr ""
1515
 
1516
+ #: defaults.php:170
1517
  msgid ""
1518
+ "Disabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
1519
+ "%PostUrl%. %EditorLinkPost%."
1520
  msgstr ""
1521
 
1522
+ #: defaults.php:171
1523
+ msgid "User enabled Comments/Trackbacks and Pingbacks in a post."
1524
  msgstr ""
1525
 
1526
+ #: defaults.php:171
1527
  msgid ""
1528
+ "Enabled %Type% on the %PostStatus% %PostType% titled %PostTitle%. URL is: "
1529
+ "%PostUrl%. %EditorLinkPost%."
1530
  msgstr ""
1531
 
1532
+ #: defaults.php:172
1533
+ msgid "User added post tag"
1534
  msgstr ""
1535
 
1536
+ #: defaults.php:172
1537
  msgid ""
1538
+ "Added the tag %tag% to the %PostStatus% post titled %PostTitle%. URL is: "
1539
+ "%PostUrl%. %EditorLinkPost%."
 
 
1540
  msgstr ""
1541
 
1542
+ #: defaults.php:173
1543
+ msgid "User removed post tag"
1544
  msgstr ""
1545
 
1546
+ #: defaults.php:173
1547
+ msgid ""
1548
+ "Removed the tag %tag% from the %PostStatus% post titled %PostTitle%. URL is: "
1549
+ "%PostUrl%. %EditorLinkPost%."
1550
  msgstr ""
1551
 
1552
+ #: defaults.php:174
1553
+ msgid "User created new tag"
1554
  msgstr ""
1555
 
1556
+ #: defaults.php:174
1557
+ msgid "Added a new tag called %TagName%. View the tag: %TagLink%."
1558
  msgstr ""
1559
 
1560
+ #: defaults.php:175
1561
+ msgid "User deleted tag"
 
 
 
 
1562
  msgstr ""
1563
 
1564
+ #: defaults.php:175
1565
+ msgid "Deleted the tag %TagName%."
1566
  msgstr ""
1567
 
1568
+ #: defaults.php:176
1569
+ msgid "User renamed tag"
1570
  msgstr ""
1571
 
1572
+ #: defaults.php:176
1573
+ msgid "Renamed a tag from %old_name% to %new_name%. View the tag: %TagLink%."
1574
  msgstr ""
1575
 
1576
+ #: defaults.php:177
1577
+ msgid "User changed tag slug"
1578
  msgstr ""
1579
 
1580
+ #: defaults.php:177
1581
  msgid ""
1582
+ "Changed the slug of tag %tag% from %old_slug% to %new_slug%. View the tag: "
1583
+ "%TagLink%."
 
1584
  msgstr ""
1585
 
1586
+ #: defaults.php:178
1587
+ msgid "User changed tag description"
1588
  msgstr ""
1589
 
1590
+ #: defaults.php:178
1591
  msgid ""
1592
+ "Changed the description of the tag %tag%%ReportText%.%ChangeText% View the "
1593
+ "tag: %TagLink%."
 
 
 
 
1594
  msgstr ""
1595
 
1596
+ #: defaults.php:184
1597
+ msgid "Comments"
 
 
 
1598
  msgstr ""
1599
 
1600
+ #: defaults.php:185
1601
+ msgid "User approved a comment"
1602
  msgstr ""
1603
 
1604
+ #: defaults.php:185
1605
+ msgid ""
1606
+ "Approved the comment posted in response to the post %PostTitle% by %Author% "
1607
+ "on %CommentLink%."
1608
  msgstr ""
1609
 
1610
+ #: defaults.php:186
1611
+ msgid "User unapproved a comment"
1612
  msgstr ""
1613
 
1614
+ #: defaults.php:186
1615
  msgid ""
1616
+ "Unapproved the comment posted in response to the post %PostTitle% by %Author"
1617
+ "% on %CommentLink%."
1618
  msgstr ""
1619
 
1620
+ #: defaults.php:187
1621
+ msgid "User replied to a comment"
 
 
1622
  msgstr ""
1623
 
1624
+ #: defaults.php:187
1625
  msgid ""
1626
+ "Replied to the comment posted in response to the post %PostTitle% by %Author"
1627
+ "% on %CommentLink%."
 
1628
  msgstr ""
1629
 
1630
+ #: defaults.php:188
1631
+ msgid "User edited a comment"
1632
  msgstr ""
1633
 
1634
+ #: defaults.php:188
1635
  msgid ""
1636
+ "Edited a comment posted in response to the post %PostTitle% by %Author% on "
1637
+ "%CommentLink%."
1638
  msgstr ""
1639
 
1640
+ #: defaults.php:189
1641
+ msgid "User marked a comment as Spam"
1642
  msgstr ""
1643
 
1644
+ #: defaults.php:189
1645
  msgid ""
1646
+ "Marked the comment posted in response to the post %PostTitle% by %Author% on "
1647
+ "%CommentLink% as Spam."
 
1648
  msgstr ""
1649
 
1650
+ #: defaults.php:190
1651
+ msgid "User marked a comment as Not Spam"
1652
  msgstr ""
1653
 
1654
+ #: defaults.php:190
1655
+ msgid ""
1656
+ "Marked the comment posted in response to the post %PostTitle% by %Author% on "
1657
+ "%CommentLink% as Not Spam."
1658
  msgstr ""
1659
 
1660
+ #: defaults.php:191
1661
+ msgid "User moved a comment to trash"
1662
  msgstr ""
1663
 
1664
+ #: defaults.php:191
1665
  msgid ""
1666
+ "Moved the comment posted in response to the post %PostTitle% by %Author% on "
1667
+ "%Date% to trash."
1668
  msgstr ""
1669
 
1670
+ #: defaults.php:192
1671
+ msgid "User restored a comment from the trash"
1672
  msgstr ""
1673
 
1674
+ #: defaults.php:192
1675
+ msgid ""
1676
+ "Restored the comment posted in response to the post %PostTitle% by %Author% "
1677
+ "on %CommentLink% from the trash."
1678
  msgstr ""
1679
 
1680
+ #: defaults.php:193
1681
+ msgid "User permanently deleted a comment"
1682
  msgstr ""
1683
 
1684
+ #: defaults.php:193
1685
  msgid ""
1686
+ "Permanently deleted the comment posted in response to the post %PostTitle% "
1687
+ "by %Author% on %Date%."
 
 
 
1688
  msgstr ""
1689
 
1690
+ #: defaults.php:194
1691
+ msgid "User posted a comment"
1692
  msgstr ""
1693
 
1694
+ #: defaults.php:194 defaults.php:195
1695
+ msgid "%CommentMsg% on %CommentLink%."
1696
  msgstr ""
1697
 
1698
+ #: defaults.php:195
1699
+ msgid "Visitor posted a comment"
 
 
 
 
 
 
 
 
 
1700
  msgstr ""
1701
 
1702
+ #: defaults.php:207
1703
+ msgid "User modified a draft blog post"
1704
  msgstr ""
1705
 
1706
+ #: defaults.php:207
1707
+ msgid "Modified the draft post with the %PostTitle%. %EditorLinkPost%."
1708
  msgstr ""
1709
 
1710
+ #: defaults.php:208
1711
+ msgid "User created a new post with custom post type and saved it as draft"
1712
  msgstr ""
1713
 
1714
+ #: defaults.php:208
1715
+ msgid ""
1716
+ "Created a new custom post called %PostTitle% of type %PostType%. "
1717
+ "%EditorLinkPost%."
1718
  msgstr ""
1719
 
1720
+ #: defaults.php:209
1721
+ msgid "User published a post with custom post type"
1722
  msgstr ""
1723
 
1724
+ #: defaults.php:209
1725
+ msgid ""
1726
+ "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
1727
+ "%. %EditorLinkPost%."
1728
  msgstr ""
1729
 
1730
+ #: defaults.php:210
1731
+ msgid "User modified a post with custom post type"
1732
  msgstr ""
1733
 
1734
+ #: defaults.php:210
1735
+ msgid ""
1736
+ "Modified the custom post %PostTitle% of type %PostType%. Post URL is %PostUrl"
1737
+ "%. %EditorLinkPost%."
1738
  msgstr ""
1739
 
1740
+ #: defaults.php:211
1741
+ msgid "User modified a draft post with custom post type"
1742
  msgstr ""
1743
 
1744
+ #: defaults.php:211
1745
+ msgid ""
1746
+ "Modified the draft custom post %PostTitle% of type is %PostType%. "
1747
+ "%EditorLinkPost%."
1748
  msgstr ""
1749
 
1750
+ #: defaults.php:212
1751
+ msgid "User permanently deleted post with custom post type"
1752
  msgstr ""
1753
 
1754
+ #: defaults.php:212
1755
+ msgid "Permanently Deleted the custom post %PostTitle% of type %PostType%."
1756
  msgstr ""
1757
 
1758
+ #: defaults.php:213
1759
+ msgid "User moved post with custom post type to trash"
1760
  msgstr ""
1761
 
1762
+ #: defaults.php:213
1763
+ msgid ""
1764
+ "Moved the custom post %PostTitle% of type %PostType% to trash. Post URL was "
1765
+ "%PostUrl%."
1766
  msgstr ""
1767
 
1768
+ #: defaults.php:214
1769
+ msgid "User restored post with custom post type from trash"
1770
  msgstr ""
1771
 
1772
+ #: defaults.php:214
1773
+ msgid ""
1774
+ "The custom post %PostTitle% of type %PostType% has been restored from trash. "
1775
+ "%EditorLinkPost%."
1776
  msgstr ""
1777
 
1778
+ #: defaults.php:215
1779
+ msgid "User changed the category of a post with custom post type"
1780
  msgstr ""
1781
 
1782
+ #: defaults.php:215
1783
+ msgid ""
1784
+ "Changed the category(ies) of the custom post %PostTitle% of type %PostType% "
1785
+ "from %OldCategories% to %NewCategories%. %EditorLinkPost%."
1786
  msgstr ""
1787
 
1788
+ #: defaults.php:216
1789
+ msgid "User changed the URL of a post with custom post type"
1790
  msgstr ""
1791
 
1792
+ #: defaults.php:216
1793
+ msgid ""
1794
+ "Changed the URL of the custom post %PostTitle% of type %PostType% from "
1795
+ "%OldUrl% to %NewUrl%. %EditorLinkPost%."
1796
  msgstr ""
1797
 
1798
+ #: defaults.php:217
1799
+ msgid "User changed the author or post with custom post type"
1800
  msgstr ""
1801
 
1802
+ #: defaults.php:217
1803
+ msgid ""
1804
+ "Changed the author of custom post %PostTitle% of type %PostType% from "
1805
+ "%OldAuthor% to %NewAuthor%. %EditorLinkPost%."
1806
  msgstr ""
1807
 
1808
+ #: defaults.php:218
1809
+ msgid "User changed the status of post with custom post type"
1810
  msgstr ""
1811
 
1812
+ #: defaults.php:218
1813
+ msgid ""
1814
+ "Changed the status of custom post %PostTitle% of type %PostType% from "
1815
+ "%OldStatus% to %NewStatus%. %EditorLinkPost%."
1816
  msgstr ""
1817
 
1818
+ #: defaults.php:219
1819
+ msgid "User changed the visibility of a post with custom post type"
1820
  msgstr ""
1821
 
1822
+ #: defaults.php:219
1823
+ msgid ""
1824
+ "Changed the visibility of the custom post %PostTitle% of type %PostType% "
1825
+ "from %OldVisibility% to %NewVisibility%. %EditorLinkPost%."
1826
  msgstr ""
1827
 
1828
+ #: defaults.php:220
1829
+ msgid "User changed the date of post with custom post type"
1830
  msgstr ""
1831
 
1832
+ #: defaults.php:220
1833
+ msgid ""
1834
+ "Changed the date of the custom post %PostTitle% of type %PostType% from "
1835
+ "%OldDate% to %NewDate%. %EditorLinkPost%."
1836
  msgstr ""
1837
 
1838
+ #: defaults.php:221
1839
+ msgid "User created a custom field for a custom post type"
1840
  msgstr ""
1841
 
1842
+ #: defaults.php:221
1843
+ msgid ""
1844
+ "Created a new custom field %MetaKey% with value %MetaValue% in custom post "
1845
+ "%PostTitle% of type %PostType%. %EditorLinkPost%.<br>%MetaLink%."
1846
  msgstr ""
1847
 
1848
+ #: defaults.php:222
1849
+ msgid "User updated a custom field for a custom post type"
1850
  msgstr ""
1851
 
1852
+ #: defaults.php:222
1853
+ msgid ""
1854
+ "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
1855
+ "%MetaValueNew% in custom post %PostTitle% of type %PostType% %EditorLinkPost"
1856
+ "%.<br>%MetaLink%."
1857
  msgstr ""
1858
 
1859
+ #: defaults.php:223
1860
+ msgid "User deleted a custom field from a custom post type"
1861
  msgstr ""
1862
 
1863
+ #: defaults.php:223
1864
+ msgid ""
1865
+ "Deleted the custom field %MetaKey% with id %MetaID% from custom post "
1866
+ "%PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
1867
  msgstr ""
1868
 
1869
+ #: defaults.php:224
1870
+ msgid "User updated a custom field name for a custom post type"
1871
  msgstr ""
1872
 
1873
+ #: defaults.php:224
1874
+ msgid ""
1875
+ "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom "
1876
+ "post %PostTitle% of type %PostType% %EditorLinkPost%.<br>%MetaLink%."
1877
  msgstr ""
1878
 
1879
+ #: defaults.php:225
1880
+ msgid "User modified content for a published custom post type"
 
 
1881
  msgstr ""
1882
 
1883
+ #: defaults.php:225
1884
  msgid ""
1885
+ "Modified the content of the published custom post type %PostTitle%. Post URL "
1886
+ "is %PostUrl%.%EditorLinkPost%."
 
1887
  msgstr ""
1888
 
1889
+ #: defaults.php:226
1890
+ msgid "User modified content for a draft post"
1891
  msgstr ""
1892
 
1893
+ #: defaults.php:226
1894
+ msgid ""
1895
+ "Modified the content of the draft post %PostTitle%.%RevisionLink% "
1896
+ "%EditorLinkPost%."
1897
  msgstr ""
1898
 
1899
+ #: defaults.php:227
1900
+ msgid "User modified content for a draft custom post type"
1901
  msgstr ""
1902
 
1903
+ #: defaults.php:227
1904
  msgid ""
1905
+ "Modified the content of the draft custom post type %PostTitle%."
1906
+ "%EditorLinkPost%."
1907
  msgstr ""
1908
 
1909
+ #: defaults.php:228
1910
+ msgid "User modified content of a post"
1911
  msgstr ""
1912
 
1913
+ #: defaults.php:228
1914
  msgid ""
1915
+ "Modified the content of post %PostTitle% which is submitted for review."
1916
+ "%RevisionLink% %EditorLinkPost%."
1917
  msgstr ""
1918
 
1919
+ #: defaults.php:229
1920
+ msgid "User scheduled a custom post type"
 
 
 
1921
  msgstr ""
1922
 
1923
+ #: defaults.php:229
1924
+ msgid ""
1925
+ "Scheduled the custom post type %PostTitle% to be published %PublishingDate%. "
1926
+ "%EditorLinkPost%."
1927
  msgstr ""
1928
 
1929
+ #: defaults.php:230
1930
+ msgid "User changed title of a custom post type"
1931
  msgstr ""
1932
 
1933
+ #: defaults.php:230
1934
+ msgid ""
1935
+ "Changed the title of the custom post %OldTitle% to %NewTitle%. "
1936
+ "%EditorLinkPost%."
1937
  msgstr ""
1938
 
1939
+ #: defaults.php:231
1940
+ msgid "User opened a custom post type in the editor"
1941
  msgstr ""
1942
 
1943
+ #: defaults.php:231
1944
  msgid ""
1945
+ "Opened the custom post %PostTitle% of type %PostType% in the editor. View "
1946
+ "the post: %EditorLinkPost%."
1947
  msgstr ""
1948
 
1949
+ #: defaults.php:232
1950
+ msgid "User viewed a custom post type"
 
 
 
 
 
 
1951
  msgstr ""
1952
 
1953
+ #: defaults.php:232
1954
  msgid ""
1955
+ "Viewed the custom post %PostTitle% of type %PostType%. View the post: "
1956
+ "%PostUrl%."
 
1957
  msgstr ""
1958
 
1959
+ #: defaults.php:243
1960
+ msgid "Pages"
1961
  msgstr ""
1962
 
1963
+ #: defaults.php:244
1964
+ msgid "User created a new WordPress page and saved it as draft"
1965
  msgstr ""
1966
 
1967
+ #: defaults.php:244
1968
  msgid ""
1969
+ "Created a new page called %PostTitle% and saved it as draft. %EditorLinkPage"
1970
+ "%."
1971
  msgstr ""
1972
 
1973
+ #: defaults.php:245
1974
+ msgid "User published a WordPress page"
 
 
1975
  msgstr ""
1976
 
1977
+ #: defaults.php:245
1978
  msgid ""
1979
+ "Published a page called %PostTitle%. Page URL is %PostUrl%. %EditorLinkPage%."
 
 
 
 
 
 
 
1980
  msgstr ""
1981
 
1982
+ #: defaults.php:246
1983
+ msgid "User modified a published WordPress page"
1984
  msgstr ""
1985
 
1986
+ #: defaults.php:246
1987
  msgid ""
1988
+ "Modified the published page %PostTitle%. Page URL is %PostUrl%. "
1989
+ "%EditorLinkPage%."
1990
  msgstr ""
1991
 
1992
+ #: defaults.php:247
1993
+ msgid "User modified a draft WordPress page"
 
 
1994
  msgstr ""
1995
 
1996
+ #: defaults.php:247
1997
+ msgid ""
1998
+ "Modified the draft page %PostTitle%. Page ID is %PostID%. %EditorLinkPage%."
1999
  msgstr ""
2000
 
2001
+ #: defaults.php:248
2002
+ msgid "User permanently deleted a page from the trash"
2003
  msgstr ""
2004
 
2005
+ #: defaults.php:248
2006
+ msgid "Permanently deleted the page %PostTitle%."
2007
  msgstr ""
2008
 
2009
+ #: defaults.php:249
2010
+ msgid "User moved WordPress page to the trash"
2011
  msgstr ""
2012
 
2013
+ #: defaults.php:249
2014
+ msgid "Moved the page %PostTitle% to trash. Page URL was %PostUrl%."
 
 
 
 
2015
  msgstr ""
2016
 
2017
+ #: defaults.php:250
2018
+ msgid "User restored a WordPress page from trash"
2019
  msgstr ""
2020
 
2021
+ #: defaults.php:250
2022
+ msgid "Page %PostTitle% has been restored from trash. %EditorLinkPage%."
2023
  msgstr ""
2024
 
2025
+ #: defaults.php:251
2026
+ msgid "User changed page URL"
2027
  msgstr ""
2028
 
2029
+ #: defaults.php:251
2030
+ msgid ""
2031
+ "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%. "
2032
+ "%EditorLinkPage%."
2033
  msgstr ""
2034
 
2035
+ #: defaults.php:252
2036
+ msgid "User changed page author"
2037
  msgstr ""
2038
 
2039
+ #: defaults.php:252
2040
  msgid ""
2041
+ "Changed the author of the page %PostTitle% from %OldAuthor% to %NewAuthor%. "
2042
+ "%EditorLinkPage%."
 
 
 
 
2043
  msgstr ""
2044
 
2045
+ #: defaults.php:253
2046
+ msgid "User changed page status"
 
2047
  msgstr ""
2048
 
2049
+ #: defaults.php:253
2050
+ msgid ""
2051
+ "Changed the status of the page %PostTitle% from %OldStatus% to %NewStatus%. "
2052
+ "%EditorLinkPage%."
2053
  msgstr ""
2054
 
2055
+ #: defaults.php:254
2056
+ msgid "User changed the visibility of a page post"
 
2057
  msgstr ""
2058
 
2059
+ #: defaults.php:254
2060
+ msgid ""
2061
+ "Changed the visibility of the page %PostTitle% from %OldVisibility% to "
2062
+ "%NewVisibility%. %EditorLinkPage%."
2063
  msgstr ""
2064
 
2065
+ #: defaults.php:255
2066
+ msgid "User changed the date of a page post"
 
 
2067
  msgstr ""
2068
 
2069
+ #: defaults.php:255
2070
+ msgid ""
2071
+ "Changed the date of the page %PostTitle% from %OldDate% to %NewDate%. "
2072
+ "%EditorLinkPage%."
2073
  msgstr ""
2074
 
2075
+ #: defaults.php:256
2076
+ msgid "User created a custom field for a page"
 
2077
  msgstr ""
2078
 
2079
+ #: defaults.php:256
2080
+ msgid ""
2081
+ "Created a new custom field called %MetaKey% with value %MetaValue% in the "
2082
+ "page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
2083
  msgstr ""
2084
 
2085
+ #: defaults.php:257
2086
+ msgid "User updated a custom field value for a page"
2087
  msgstr ""
2088
 
2089
+ #: defaults.php:257
2090
+ msgid ""
2091
+ "Modified the value of the custom field %MetaKey% from %MetaValueOld% to "
2092
+ "%MetaValueNew% in the page %PostTitle% %EditorLinkPage%.<br>%MetaLink%."
2093
  msgstr ""
2094
 
2095
+ #: defaults.php:258
2096
+ msgid "User deleted a custom field from a page"
2097
  msgstr ""
2098
 
2099
+ #: defaults.php:258
2100
  msgid ""
2101
+ "Deleted the custom field %MetaKey% with id %MetaID% from page %PostTitle% "
2102
+ "%EditorLinkPage%.<br>%MetaLink%."
2103
+ msgstr ""
2104
+
2105
+ #: defaults.php:259
2106
+ msgid "User updated a custom field name for a page"
2107
  msgstr ""
2108
 
2109
+ #: defaults.php:259
2110
  msgid ""
2111
+ "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in the page "
2112
+ "%PostTitle% %EditorLinkPage%.<br>%MetaLink%."
2113
  msgstr ""
2114
 
2115
+ #: defaults.php:260
2116
+ msgid "User modified content for a published page"
2117
  msgstr ""
2118
 
2119
+ #: defaults.php:260
2120
  msgid ""
2121
+ "Modified the content of the published page %PostTitle%. Page URL is %PostUrl"
2122
+ "%. %RevisionLink% %EditorLinkPage%."
2123
  msgstr ""
2124
 
2125
+ #: defaults.php:261
2126
+ msgid "User modified content for a draft page"
2127
  msgstr ""
2128
 
2129
+ #: defaults.php:261
2130
  msgid ""
2131
+ "Modified the content of draft page %PostTitle%.%RevisionLink% %EditorLinkPage"
2132
+ "%."
2133
  msgstr ""
2134
 
2135
+ #: defaults.php:262
2136
+ msgid "User scheduled a page"
2137
  msgstr ""
2138
 
2139
+ #: defaults.php:262
2140
  msgid ""
2141
+ "Scheduled the page %PostTitle% to be published %PublishingDate%. "
2142
+ "%EditorLinkPage%."
2143
  msgstr ""
2144
 
2145
+ #: defaults.php:263
2146
+ msgid "User changed title of a page"
2147
  msgstr ""
2148
 
2149
+ #: defaults.php:263
2150
+ msgid ""
2151
+ "Changed the title of the page %OldTitle% to %NewTitle%. %EditorLinkPage%."
2152
  msgstr ""
2153
 
2154
+ #: defaults.php:264
2155
+ msgid "User opened a page in the editor"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2156
  msgstr ""
2157
 
2158
+ #: defaults.php:264
2159
  msgid ""
2160
+ "Opened the page %PostTitle% in the editor. View the page: %EditorLinkPage%."
2161
  msgstr ""
2162
 
2163
+ #: defaults.php:265
2164
+ msgid "User viewed a page"
2165
  msgstr ""
2166
 
2167
+ #: defaults.php:265
2168
+ msgid "Viewed the page %PostTitle%. View the page: %PostUrl%."
 
 
2169
  msgstr ""
2170
 
2171
+ #: defaults.php:266
2172
+ msgid "User disabled Comments/Trackbacks and Pingbacks on a draft post"
2173
  msgstr ""
2174
 
2175
+ #: defaults.php:266
2176
  msgid ""
2177
+ "Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
2178
  msgstr ""
2179
 
2180
+ #: defaults.php:267
2181
+ msgid "User enabled Comments/Trackbacks and Pingbacks on a draft post"
2182
  msgstr ""
2183
 
2184
+ #: defaults.php:267
2185
+ msgid "Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%."
 
 
2186
  msgstr ""
2187
 
2188
+ #: defaults.php:268
2189
+ msgid "User disabled Comments/Trackbacks and Pingbacks on a published page"
2190
  msgstr ""
2191
 
2192
+ #: defaults.php:268
2193
  msgid ""
2194
+ "Disabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2195
  msgstr ""
2196
 
2197
+ #: defaults.php:269
2198
+ msgid "User enabled Comments/Trackbacks and Pingbacks on a published page"
2199
  msgstr ""
2200
 
2201
+ #: defaults.php:269
2202
  msgid ""
2203
+ "Enabled %Type% on the published page %PostTitle%. View the page: %PostUrl%."
 
2204
  msgstr ""
2205
 
2206
+ #: defaults.php:270
2207
+ msgid "User disabled Comments/Trackbacks and Pingbacks on a draft page"
2208
  msgstr ""
2209
 
2210
+ #: defaults.php:270
2211
  msgid ""
2212
+ "Disabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
 
2213
  msgstr ""
2214
 
2215
+ #: defaults.php:271
2216
+ msgid "User enabled Comments/Trackbacks and Pingbacks on a draft page"
2217
  msgstr ""
2218
 
2219
+ #: defaults.php:271
2220
+ msgid "Enabled %Type% on the draft page %PostTitle%. View the page: %PostUrl%."
 
 
2221
  msgstr ""
2222
 
2223
+ #: defaults.php:278
2224
+ msgid "WordPress & Multisite Management"
2225
  msgstr ""
2226
 
2227
+ #: defaults.php:282
2228
+ msgid "Database"
 
 
2229
  msgstr ""
2230
 
2231
+ #: defaults.php:283
2232
+ msgid "Plugin created tables"
2233
  msgstr ""
2234
 
2235
+ #: defaults.php:283
2236
  msgid ""
2237
+ "Plugin %Plugin->Name% created these tables in the database: %TableNames%."
 
2238
  msgstr ""
2239
 
2240
+ #: defaults.php:284
2241
+ msgid "Plugin modified tables structure"
2242
  msgstr ""
2243
 
2244
+ #: defaults.php:284
2245
  msgid ""
2246
+ "Plugin %Plugin->Name% modified the structure of these database tables: "
2247
+ "%TableNames%."
2248
  msgstr ""
2249
 
2250
+ #: defaults.php:285
2251
+ msgid "Plugin deleted tables"
2252
  msgstr ""
2253
 
2254
+ #: defaults.php:285
2255
  msgid ""
2256
+ "Plugin %Plugin->Name% deleted the following tables from the database: "
2257
+ "%TableNames%."
2258
  msgstr ""
2259
 
2260
+ #: defaults.php:286
2261
+ msgid "Theme created tables"
2262
  msgstr ""
2263
 
2264
+ #: defaults.php:286
2265
+ msgid "Theme %Theme->Name% created these tables in the database: %TableNames%."
 
 
2266
  msgstr ""
2267
 
2268
+ #: defaults.php:287
2269
+ msgid "Theme modified tables structure"
2270
  msgstr ""
2271
 
2272
+ #: defaults.php:287
2273
  msgid ""
2274
+ "Theme %Theme->Name% modified the structure of these database tables: "
2275
+ "%TableNames%."
2276
  msgstr ""
2277
 
2278
+ #: defaults.php:288
2279
+ msgid "Theme deleted tables"
2280
  msgstr ""
2281
 
2282
+ #: defaults.php:288
2283
  msgid ""
2284
+ "Theme %Theme->Name% deleted the following tables from the database: "
2285
+ "%TableNames%."
2286
  msgstr ""
2287
 
2288
+ #: defaults.php:289
2289
+ msgid "Unknown component created tables"
2290
  msgstr ""
2291
 
2292
+ #: defaults.php:289
2293
  msgid ""
2294
+ "An unknown component created these tables in the database: %TableNames%."
 
2295
  msgstr ""
2296
 
2297
+ #: defaults.php:290
2298
+ msgid "Unknown component modified tables structure"
2299
  msgstr ""
2300
 
2301
+ #: defaults.php:290
2302
  msgid ""
2303
+ "An unknown component modified the structure of these database tables: "
2304
+ "%TableNames%."
2305
  msgstr ""
2306
 
2307
+ #: defaults.php:291
2308
+ msgid "Unknown component deleted tables"
2309
  msgstr ""
2310
 
2311
+ #: defaults.php:291
2312
  msgid ""
2313
+ "An unknown component deleted the following tables from the database: "
2314
+ "%TableNames%."
 
 
 
2315
  msgstr ""
2316
 
2317
+ #: defaults.php:297
2318
+ msgid "MultiSite"
 
2319
  msgstr ""
2320
 
2321
+ #: defaults.php:298
2322
+ msgid "User granted Super Admin privileges"
2323
  msgstr ""
2324
 
2325
+ #: defaults.php:298
2326
+ msgid "Granted Super Admin privileges to %TargetUsername%."
2327
  msgstr ""
2328
 
2329
+ #: defaults.php:299
2330
+ msgid "User revoked from Super Admin privileges"
2331
  msgstr ""
2332
 
2333
+ #: defaults.php:299
2334
+ msgid "Revoked Super Admin privileges from %TargetUsername%."
 
2335
  msgstr ""
2336
 
2337
+ #: defaults.php:300
2338
+ msgid "Existing user added to a site"
2339
  msgstr ""
2340
 
2341
+ #: defaults.php:300
2342
+ msgid ""
2343
+ "Added the existing user %TargetUsername% with %TargetUserRole% role to site "
2344
+ "%SiteName%."
2345
  msgstr ""
2346
 
2347
+ #: defaults.php:301
2348
+ msgid "User removed from site"
2349
  msgstr ""
2350
 
2351
+ #: defaults.php:301
2352
  msgid ""
2353
+ "Removed the user %TargetUsername% with role %TargetUserRole% from %SiteName% "
2354
+ "site."
2355
  msgstr ""
2356
 
2357
+ #: defaults.php:302
2358
+ msgid "New network user created"
2359
  msgstr ""
2360
 
2361
+ #: defaults.php:302
2362
+ msgid "Created a new network user %NewUserData->Username%."
 
2363
  msgstr ""
2364
 
2365
+ #: defaults.php:303
2366
+ msgid "The forum role of a user was changed by another WordPress user"
2367
  msgstr ""
2368
 
2369
+ #: defaults.php:303
2370
  msgid ""
2371
+ "Change the forum role of the user %TargetUsername% from %OldRole% to %NewRole"
2372
+ "% by %UserChanger%."
2373
  msgstr ""
2374
 
2375
+ #: defaults.php:304
2376
+ msgid "New site added on the network"
2377
  msgstr ""
2378
 
2379
+ #: defaults.php:304
2380
+ msgid "Added the site %SiteName% to the network."
2381
  msgstr ""
2382
 
2383
+ #: defaults.php:305
2384
+ msgid "Existing site archived"
2385
  msgstr ""
2386
 
2387
+ #: defaults.php:305
2388
+ msgid "Archived the site %SiteName%."
2389
  msgstr ""
2390
 
2391
+ #: defaults.php:306
2392
+ msgid "Archived site has been unarchived"
2393
  msgstr ""
2394
 
2395
+ #: defaults.php:306
2396
+ msgid "Unarchived the site %SiteName%."
2397
  msgstr ""
2398
 
2399
+ #: defaults.php:307
2400
+ msgid "Deactivated site has been activated"
2401
  msgstr ""
2402
 
2403
+ #: defaults.php:307
2404
+ msgid "Activated the site %SiteName%."
2405
  msgstr ""
2406
 
2407
+ #: defaults.php:308
2408
+ msgid "Site has been deactivated"
2409
  msgstr ""
2410
 
2411
+ #: defaults.php:308
2412
+ msgid "Deactivated the site %SiteName%."
2413
  msgstr ""
2414
 
2415
+ #: defaults.php:309
2416
+ msgid "Existing site deleted from network"
2417
  msgstr ""
2418
 
2419
+ #: defaults.php:309
2420
+ msgid "Deleted the site %SiteName%."
 
2421
  msgstr ""
2422
 
2423
+ #: defaults.php:310
2424
+ msgid "Activated theme on network"
2425
  msgstr ""
2426
 
2427
+ #: defaults.php:310
2428
  msgid ""
2429
+ "Network activated the theme %Theme->Name% installed in %Theme-"
2430
+ ">get_template_directory%."
2431
  msgstr ""
2432
 
2433
+ #: defaults.php:311
2434
+ msgid "Deactivated theme from network"
2435
  msgstr ""
2436
 
2437
+ #: defaults.php:311
2438
  msgid ""
2439
+ "Network deactivated the theme %Theme->Name% installed in %Theme-"
2440
+ ">get_template_directory%."
2441
  msgstr ""
2442
 
2443
+ #: defaults.php:317
2444
+ msgid "Plugins & Themes"
2445
+ msgstr ""
2446
+
2447
+ #: defaults.php:318
2448
  msgid "User installed a plugin"
2449
  msgstr ""
2450
 
2451
+ #: defaults.php:318
2452
  msgid "Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%."
2453
  msgstr ""
2454
 
2455
+ #: defaults.php:319
2456
  msgid "User activated a WordPress plugin"
2457
  msgstr ""
2458
 
2459
+ #: defaults.php:319
2460
  msgid "Activated the plugin %PluginData->Name% installed in %PluginFile%."
2461
  msgstr ""
2462
 
2463
+ #: defaults.php:320
2464
  msgid "User deactivated a WordPress plugin"
2465
  msgstr ""
2466
 
2467
+ #: defaults.php:320
2468
  msgid "Deactivated the plugin %PluginData->Name% installed in %PluginFile%."
2469
  msgstr ""
2470
 
2471
+ #: defaults.php:321
2472
  msgid "User uninstalled a plugin"
2473
  msgstr ""
2474
 
2475
+ #: defaults.php:321
2476
  msgid ""
2477
  "Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile"
2478
  "%."
2479
  msgstr ""
2480
 
2481
+ #: defaults.php:322
2482
  msgid "User upgraded a plugin"
2483
  msgstr ""
2484
 
2485
+ #: defaults.php:322
2486
  msgid "Upgraded the plugin %PluginData->Name% installed in %PluginFile%."
2487
  msgstr ""
2488
 
2489
+ #: defaults.php:323
2490
+ msgid "User installed a theme"
2491
  msgstr ""
2492
 
2493
+ #: defaults.php:323
2494
  msgid ""
2495
+ "Installed the theme \"%Theme->Name%\" in %Theme->get_template_directory%."
2496
  msgstr ""
2497
 
2498
+ #: defaults.php:324
2499
+ msgid "User activated a theme"
2500
  msgstr ""
2501
 
2502
+ #: defaults.php:324
2503
  msgid ""
2504
+ "Activated the theme \"%Theme->Name%\", installed in %Theme-"
2505
+ ">get_template_directory%."
2506
  msgstr ""
2507
 
2508
+ #: defaults.php:325
2509
+ msgid "User uninstalled a theme"
2510
  msgstr ""
2511
 
2512
+ #: defaults.php:325
2513
  msgid ""
2514
+ "Deleted the theme \"%Theme->Name%\" installed in %Theme-"
2515
+ ">get_template_directory%."
2516
  msgstr ""
2517
 
2518
+ #: defaults.php:326
2519
  msgid "A plugin created a post"
2520
  msgstr ""
2521
 
2522
+ #: defaults.php:326
2523
  msgid ""
2524
  "A plugin automatically created the following %PostType% called %PostTitle%. "
2525
  "View the post: %EditorLinkPost%."
2526
  msgstr ""
2527
 
2528
+ #: defaults.php:327
2529
+ msgid "A plugin created a page"
 
 
 
 
 
 
 
 
 
 
 
 
 
2530
  msgstr ""
2531
 
2532
+ #: defaults.php:327
2533
+ msgid "A plugin automatically created the following page: %PostTitle%."
2534
  msgstr ""
2535
 
2536
+ #: defaults.php:328
2537
+ msgid "A plugin created a custom post"
2538
  msgstr ""
2539
 
2540
+ #: defaults.php:328
2541
+ msgid "A plugin automatically created the following custom post: %PostTitle%."
 
2542
  msgstr ""
2543
 
2544
+ #: defaults.php:329
2545
+ msgid "A plugin deleted a post"
2546
  msgstr ""
2547
 
2548
+ #: defaults.php:329
2549
  msgid ""
2550
+ "A plugin automatically deleted the following %PostType% called %PostTitle%."
 
2551
  msgstr ""
2552
 
2553
+ #: defaults.php:330
2554
+ msgid "A plugin deleted a page"
2555
  msgstr ""
2556
 
2557
+ #: defaults.php:330
2558
+ msgid "A plugin automatically deleted the following page: %PostTitle%."
 
 
2559
  msgstr ""
2560
 
2561
+ #: defaults.php:331
2562
+ msgid "A plugin deleted a custom post"
2563
  msgstr ""
2564
 
2565
+ #: defaults.php:331
2566
+ msgid "A plugin automatically deleted the following custom post: %PostTitle%."
 
 
2567
  msgstr ""
2568
 
2569
+ #: defaults.php:332
2570
+ msgid "User updated a theme"
2571
  msgstr ""
2572
 
2573
+ #: defaults.php:332
2574
  msgid ""
2575
+ "Updated the theme \"%Theme->Name%\" installed in %Theme-"
2576
  ">get_template_directory%."
2577
  msgstr ""
2578
 
2579
+ #: defaults.php:333
2580
+ msgid "User changed a file using the theme editor"
2581
  msgstr ""
2582
 
2583
+ #: defaults.php:333
2584
+ msgid "Modified %File% with the Theme Editor."
2585
  msgstr ""
2586
 
2587
+ #: defaults.php:334
2588
+ msgid "User changed a file using the plugin editor"
2589
  msgstr ""
2590
 
2591
+ #: defaults.php:334
2592
+ msgid "Modified %File% with the Plugin Editor."
 
 
2593
  msgstr ""
2594
 
2595
+ #: defaults.php:335
2596
+ msgid "A plugin modified a page"
2597
  msgstr ""
2598
 
2599
+ #: defaults.php:335
2600
+ msgid "Plugin modified the page %PostTitle%. View the page: %EditorLinkPage%."
 
 
2601
  msgstr ""
2602
 
2603
+ #: defaults.php:336
2604
+ msgid "A plugin modified a custom post"
2605
  msgstr ""
2606
 
2607
+ #: defaults.php:336
2608
  msgid ""
2609
+ "Plugin modified the custom post %PostTitle%. View the post: %EditorLinkPost%."
 
 
 
 
 
2610
  msgstr ""
2611
 
2612
+ #: defaults.php:342
2613
+ msgid "System Activity"
2614
  msgstr ""
2615
 
2616
+ #: defaults.php:343
2617
  msgid "Unknown Error"
2618
  msgstr ""
2619
 
2620
+ #: defaults.php:343
2621
  msgid "An unexpected error has occurred ."
2622
  msgstr ""
2623
 
2624
+ #: defaults.php:344
2625
  msgid "PHP error"
2626
  msgstr ""
2627
 
2628
+ #: defaults.php:344 defaults.php:345 defaults.php:346 defaults.php:347
2629
+ #: defaults.php:348
2630
  msgid "%Message%."
2631
  msgstr ""
2632
 
2633
+ #: defaults.php:345
2634
  msgid "PHP warning"
2635
  msgstr ""
2636
 
2637
+ #: defaults.php:346
2638
  msgid "PHP notice"
2639
  msgstr ""
2640
 
2641
+ #: defaults.php:347
2642
  msgid "PHP exception"
2643
  msgstr ""
2644
 
2645
+ #: defaults.php:348
2646
  msgid "PHP shutdown error"
2647
  msgstr ""
2648
 
2649
+ #: defaults.php:349
2650
  msgid "Events automatically pruned by system"
2651
  msgstr ""
2652
 
2653
+ #: defaults.php:349
2654
+ msgid "System automatically deleted %EventCount% alert(s)."
2655
  msgstr ""
2656
 
2657
+ #: defaults.php:350
2658
+ msgid "Option Anyone Can Register in WordPress settings changed"
2659
  msgstr ""
2660
 
2661
+ #: defaults.php:350
2662
+ msgid "%NewValue% the option \"Anyone can register\"."
2663
  msgstr ""
2664
 
2665
+ #: defaults.php:351
2666
+ msgid "New User Default Role changed"
2667
  msgstr ""
2668
 
2669
+ #: defaults.php:351
2670
+ msgid "Changed the New User Default Role from %OldRole% to %NewRole%."
2671
  msgstr ""
2672
 
2673
+ #: defaults.php:352
2674
+ msgid "WordPress Administrator Notification email changed"
2675
  msgstr ""
2676
 
2677
+ #: defaults.php:352
2678
+ msgid ""
2679
+ "Changed the WordPress administrator notifications email address from "
2680
+ "%OldEmail% to %NewEmail%."
2681
  msgstr ""
2682
 
2683
+ #: defaults.php:353
2684
+ msgid "WordPress was updated"
2685
  msgstr ""
2686
 
2687
+ #: defaults.php:353
2688
+ msgid "Updated WordPress from version %OldVersion% to %NewVersion%."
2689
  msgstr ""
2690
 
2691
+ #: defaults.php:354
2692
+ msgid "User changes the WordPress Permalinks"
2693
  msgstr ""
2694
 
2695
+ #: defaults.php:354
2696
+ msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%."
2697
  msgstr ""
2698
 
2699
+ #: defaults.php:355
2700
+ msgid "User requests non-existing pages (404 Error Pages)"
2701
  msgstr ""
2702
 
2703
+ #: defaults.php:355
2704
  msgid ""
2705
+ "Has requested a non existing page (404 Error Pages) %Attempts% %Msg%. "
2706
+ "%LinkFile%"
 
2707
  msgstr ""
2708
 
2709
+ #: defaults.php:356
2710
+ msgid "Website Visitor User requests non-existing pages (404 Error Pages)"
2711
  msgstr ""
2712
 
2713
+ #: defaults.php:356
2714
  msgid ""
2715
+ "Website Visitor Has requested a non existing page (404 Error Pages) %Attempts"
2716
+ "% %Msg%. %LinkFile%"
 
2717
  msgstr ""
2718
 
2719
+ #: defaults.php:357
2720
+ msgid "Option WordPress Address (URL) in WordPress settings changed"
2721
  msgstr ""
2722
 
2723
+ #: defaults.php:357
2724
+ msgid "Changed the WordPress address (URL) from %old_url% to %new_url%."
 
 
2725
  msgstr ""
2726
 
2727
+ #: defaults.php:358
2728
+ msgid "Option Site Address (URL) in WordPress settings changed"
2729
  msgstr ""
2730
 
2731
+ #: defaults.php:358
2732
+ msgid "Changed the site address (URL) from %old_url% to %new_url%."
2733
  msgstr ""
2734
 
2735
+ #: defaults.php:359
2736
+ msgid "Advertising Add-ons."
2737
  msgstr ""
2738
 
2739
+ #: defaults.php:359
2740
  msgid "%PromoName% %PromoMessage%"
2741
  msgstr ""
2742
 
2743
+ #: defaults.php:365
2744
  msgid "Menus"
2745
  msgstr ""
2746
 
2747
+ #: defaults.php:366
2748
  msgid "User created new menu"
2749
  msgstr ""
2750
 
2751
+ #: defaults.php:366
2752
  msgid "Created a new menu called %MenuName%."
2753
  msgstr ""
2754
 
2755
+ #: defaults.php:367
2756
  msgid "User added content to a menu"
2757
  msgstr ""
2758
 
2759
+ #: defaults.php:367
2760
  msgid "Added the %ContentType% called %ContentName% to menu %MenuName%."
2761
  msgstr ""
2762
 
2763
+ #: defaults.php:368
2764
  msgid "User removed content from a menu"
2765
  msgstr ""
2766
 
2767
+ #: defaults.php:368
2768
  msgid ""
2769
  "Removed the %ContentType% called %ContentName% from the menu %MenuName%."
2770
  msgstr ""
2771
 
2772
+ #: defaults.php:369
2773
  msgid "User deleted menu"
2774
  msgstr ""
2775
 
2776
+ #: defaults.php:369
2777
  msgid "Deleted the menu %MenuName%."
2778
  msgstr ""
2779
 
2780
+ #: defaults.php:370
2781
  msgid "User changed menu setting"
2782
  msgstr ""
2783
 
2784
+ #: defaults.php:370
2785
  msgid "%Status% the menu setting %MenuSetting% in %MenuName%."
2786
  msgstr ""
2787
 
2788
+ #: defaults.php:371
2789
  msgid "User modified content in a menu"
2790
  msgstr ""
2791
 
2792
+ #: defaults.php:371
2793
  msgid "Modified the %ContentType% called %ContentName% in menu %MenuName%."
2794
  msgstr ""
2795
 
2796
+ #: defaults.php:372
2797
  msgid "User changed name of a menu"
2798
  msgstr ""
2799
 
2800
+ #: defaults.php:372
2801
  msgid "Changed the name of menu %OldMenuName% to %NewMenuName%."
2802
  msgstr ""
2803
 
2804
+ #: defaults.php:373
2805
  msgid "User changed order of the objects in a menu"
2806
  msgstr ""
2807
 
2808
+ #: defaults.php:373
2809
  msgid "Changed the order of the %ItemName% in menu %MenuName%."
2810
  msgstr ""
2811
 
2812
+ #: defaults.php:374
2813
  msgid "User moved objects as a sub-item"
2814
  msgstr ""
2815
 
2816
+ #: defaults.php:374
2817
  msgid "Moved %ItemName% as a sub-item of %ParentName% in menu %MenuName%."
2818
  msgstr ""
2819
 
2820
+ #: defaults.php:380
2821
  msgid "Widgets"
2822
  msgstr ""
2823
 
2824
+ #: defaults.php:381
2825
  msgid "User added a new widget"
2826
  msgstr ""
2827
 
2828
+ #: defaults.php:381
2829
  msgid "Added a new %WidgetName% widget in %Sidebar%."
2830
  msgstr ""
2831
 
2832
+ #: defaults.php:382
2833
  msgid "User modified a widget"
2834
  msgstr ""
2835
 
2836
+ #: defaults.php:382
2837
  msgid "Modified the %WidgetName% widget in %Sidebar%."
2838
  msgstr ""
2839
 
2840
+ #: defaults.php:383
2841
  msgid "User deleted widget"
2842
  msgstr ""
2843
 
2844
+ #: defaults.php:383
2845
  msgid "Deleted the %WidgetName% widget from %Sidebar%."
2846
  msgstr ""
2847
 
2848
+ #: defaults.php:384
2849
  msgid "User moved widget"
2850
  msgstr ""
2851
 
2852
+ #: defaults.php:384
2853
  msgid "Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%."
2854
  msgstr ""
2855
 
2856
+ #: defaults.php:385
2857
  msgid "User changed widget position"
2858
  msgstr ""
2859
 
2860
+ #: defaults.php:385
2861
  msgid "Changed the position of the widget %WidgetName% in sidebar %Sidebar%."
2862
  msgstr ""
2863
 
2864
+ #: defaults.php:391
2865
+ msgid "Site Settings"
2866
  msgstr ""
2867
 
2868
+ #: defaults.php:392
2869
+ msgid ""
2870
+ "Enabled/Disabled the option Discourage search engines from indexing this site"
2871
  msgstr ""
2872
 
2873
+ #: defaults.php:392
2874
+ msgid "%Status% the option Discourage search engines from indexing this site."
2875
  msgstr ""
2876
 
2877
+ #: defaults.php:393
2878
+ msgid "Enabled/Disabled comments on all the website"
2879
  msgstr ""
2880
 
2881
+ #: defaults.php:393
2882
+ msgid "%Status% comments on all the website."
2883
  msgstr ""
2884
 
2885
+ #: defaults.php:394
2886
+ msgid "Enabled/Disabled the option Comment author must fill out name and email"
2887
+ msgstr ""
2888
+
2889
+ #: defaults.php:394
2890
+ msgid "%Status% the option Comment author must fill out name and email."
2891
  msgstr ""
2892
 
2893
+ #: defaults.php:395
2894
  msgid ""
2895
+ "Enabled/Disabled the option Users must be logged in and registered to comment"
 
2896
  msgstr ""
2897
 
2898
+ #: defaults.php:395
2899
+ msgid "%Status% the option Users must be logged in and registered to comment."
2900
  msgstr ""
2901
 
2902
+ #: defaults.php:396
2903
+ msgid "Enabled/Disabled the option to automatically close comments"
2904
  msgstr ""
2905
 
2906
+ #: defaults.php:396
2907
+ msgid "%Status% the option to automatically close comments after %Value% days."
2908
+ msgstr ""
2909
+
2910
+ #: defaults.php:397
2911
+ msgid "Changed the value of the option Automatically close comments"
2912
+ msgstr ""
2913
+
2914
+ #: defaults.php:397
2915
  msgid ""
2916
+ "Changed the value of the option Automatically close comments from %OldValue% "
2917
+ "to %NewValue% days."
2918
  msgstr ""
2919
 
2920
+ #: defaults.php:398
2921
+ msgid "Enabled/Disabled the option for comments to be manually approved"
2922
  msgstr ""
2923
 
2924
+ #: defaults.php:398
2925
+ msgid "%Status% the option for comments to be manually approved."
2926
  msgstr ""
2927
 
2928
+ #: defaults.php:399
2929
+ msgid ""
2930
+ "Enabled/Disabled the option for an author to have previously approved "
2931
+ "comments for the comments to appear"
2932
  msgstr ""
2933
 
2934
+ #: defaults.php:399
2935
+ msgid ""
2936
+ "%Status% the option for an author to have previously approved comments for "
2937
+ "the comments to appear."
2938
  msgstr ""
2939
 
2940
+ #: defaults.php:400
2941
+ msgid ""
2942
+ "Changed the number of links that a comment must have to be held in the queue"
2943
  msgstr ""
2944
 
2945
+ #: defaults.php:400
2946
  msgid ""
2947
+ "Changed the number of links from %OldValue% to %NewValue% that a comment "
2948
+ "must have to be held in the queue."
2949
  msgstr ""
2950
 
2951
+ #: defaults.php:401
2952
+ msgid "Modified the list of keywords for comments moderation"
2953
  msgstr ""
2954
 
2955
+ #: defaults.php:401
2956
+ msgid "Modified the list of keywords for comments moderation."
2957
  msgstr ""
2958
 
2959
+ #: defaults.php:402
2960
+ msgid "Modified the list of keywords for comments blacklisting"
2961
  msgstr ""
2962
 
2963
+ #: defaults.php:402
2964
+ msgid "Modified the list of keywords for comments blacklisting."
2965
  msgstr ""
2966
 
2967
+ #: defaults.php:403
2968
+ msgid "Created a New cron job"
2969
+ msgstr ""
2970
+
2971
+ #: defaults.php:403
2972
  msgid ""
2973
+ "A new cron job called %name% was created and is scheduled to run %schedule%."
 
2974
  msgstr ""
2975
 
2976
+ #: defaults.php:404
2977
+ msgid "Changed status of the cron job"
2978
+ msgstr ""
2979
+
2980
+ #: defaults.php:404
2981
+ msgid "The cron job %name% was %status%."
2982
+ msgstr ""
2983
+
2984
+ #: defaults.php:405
2985
+ msgid "Deleted the cron job"
2986
+ msgstr ""
2987
+
2988
+ #: defaults.php:405
2989
+ msgid "The cron job %name% was deleted."
2990
+ msgstr ""
2991
+
2992
+ #: defaults.php:406
2993
+ msgid "Started the cron job"
2994
+ msgstr ""
2995
+
2996
+ #: defaults.php:406
2997
+ msgid "The cron job %name% has just started."
2998
+ msgstr ""
2999
+
3000
+ #: defaults.php:413
3001
+ msgid "Users Profiles & Activity"
3002
+ msgstr ""
3003
+
3004
+ #: defaults.php:417
3005
+ msgid "Other User Activity"
3006
+ msgstr ""
3007
+
3008
+ #: defaults.php:418
3009
+ msgid "User logged in"
3010
+ msgstr ""
3011
+
3012
+ #: defaults.php:418
3013
+ msgid "Successfully logged in."
3014
+ msgstr ""
3015
+
3016
+ #: defaults.php:419
3017
+ msgid "User logged out"
3018
+ msgstr ""
3019
+
3020
+ #: defaults.php:419
3021
+ msgid "Successfully logged out."
3022
+ msgstr ""
3023
+
3024
+ #: defaults.php:420
3025
+ msgid "Login failed"
3026
+ msgstr ""
3027
+
3028
+ #: defaults.php:420
3029
+ msgid "%Attempts% failed login(s) detected."
3030
+ msgstr ""
3031
+
3032
+ #: defaults.php:421
3033
+ msgid "Login failed / non existing user"
3034
+ msgstr ""
3035
+
3036
+ #: defaults.php:421
3037
+ msgid ""
3038
+ "%Attempts% failed login(s) detected using non existing user. %LogFileText%"
3039
  msgstr ""
3040
 
3041
+ #: defaults.php:422
3042
+ msgid "Login blocked"
3043
  msgstr ""
3044
 
3045
+ #: defaults.php:422
3046
  msgid ""
3047
+ "Blocked from logging in because the same WordPress user is logged in from "
3048
+ "%ClientIP%."
3049
  msgstr ""
3050
 
3051
+ #: defaults.php:423
3052
+ msgid "User logged in with existing session(s)"
 
 
3053
  msgstr ""
3054
 
3055
+ #: defaults.php:423
3056
  msgid ""
3057
+ "Successfully logged in. Another session from %IPAddress% for this user "
3058
+ "already exist."
3059
  msgstr ""
3060
 
3061
+ #: defaults.php:424
3062
+ msgid "User logged out all other sessions with the same username"
 
 
3063
  msgstr ""
3064
 
3065
+ #: defaults.php:424
3066
+ msgid "Logged out all other sessions with the same username."
3067
  msgstr ""
3068
 
3069
+ #: defaults.php:425
3070
+ msgid "User session destroyed and logged out."
3071
  msgstr ""
3072
 
3073
+ #: defaults.php:425
3074
+ msgid "Logged out session %TargetSessionID% which belonged to %TargetUserName%"
3075
  msgstr ""
3076
 
3077
+ #: defaults.php:426
3078
+ msgid "User uploaded file from Uploads directory"
3079
  msgstr ""
3080
 
3081
+ #: defaults.php:426
3082
+ msgid "Uploaded the file %FileName% in %FilePath%."
3083
  msgstr ""
3084
 
3085
+ #: defaults.php:427
3086
+ msgid "User deleted file from Uploads directory"
3087
  msgstr ""
3088
 
3089
+ #: defaults.php:427
3090
+ msgid "Deleted the file %FileName% from %FilePath%."
3091
  msgstr ""
3092
 
3093
+ #: defaults.php:433
3094
+ msgid "User Profiles"
3095
  msgstr ""
3096
 
3097
+ #: defaults.php:434
3098
+ msgid "New user was created on WordPress"
3099
  msgstr ""
3100
 
3101
+ #: defaults.php:434
3102
  msgid ""
3103
+ "A new user %NewUserData->Username% was created with role of %NewUserData-"
3104
+ ">Roles%."
 
 
 
3105
  msgstr ""
3106
 
3107
+ #: defaults.php:435
3108
+ msgid "User created another WordPress user"
3109
  msgstr ""
3110
 
3111
+ #: defaults.php:435
3112
+ msgid ""
3113
+ "%UserChanger% created a new user %NewUserData->Username% with the role of "
3114
+ "%NewUserData->Roles%."
3115
  msgstr ""
3116
 
3117
+ #: defaults.php:436
3118
+ msgid "The role of a user was changed by another WordPress user"
3119
  msgstr ""
3120
 
3121
+ #: defaults.php:436
3122
+ msgid ""
3123
+ "Changed the role of the user %TargetUsername% from %OldRole% to %NewRole%"
3124
+ "%multisite_text%."
3125
  msgstr ""
3126
 
3127
+ #: defaults.php:437
3128
+ msgid "User has changed his or her password"
3129
  msgstr ""
3130
 
3131
+ #: defaults.php:437
3132
+ msgid "Changed the password."
3133
  msgstr ""
3134
 
3135
+ #: defaults.php:438
3136
+ msgid "User changed another user's password"
3137
  msgstr ""
3138
 
3139
+ #: defaults.php:438
3140
+ msgid ""
3141
+ "Changed the password for the user %TargetUserData->Username% with the role "
3142
+ "of %TargetUserData->Roles%."
3143
  msgstr ""
3144
 
3145
+ #: defaults.php:439
3146
+ msgid "User changed his or her email address"
3147
  msgstr ""
3148
 
3149
+ #: defaults.php:439
3150
+ msgid "Changed the email address from %OldEmail% to %NewEmail%."
3151
  msgstr ""
3152
 
3153
+ #: defaults.php:440
3154
+ msgid "User changed another user's email address"
3155
  msgstr ""
3156
 
3157
+ #: defaults.php:440
3158
  msgid ""
3159
+ "Changed the email address of the user %TargetUsername% from %OldEmail% to "
3160
+ "%NewEmail%."
3161
  msgstr ""
3162
 
3163
+ #: defaults.php:441
3164
+ msgid "User was deleted by another user"
3165
  msgstr ""
3166
 
3167
+ #: defaults.php:441
3168
  msgid ""
3169
+ "Deleted the user %TargetUserData->Username% with the role of %TargetUserData-"
3170
+ ">Roles%."
3171
  msgstr ""
3172
 
3173
+ #: defaults.php:442
3174
+ msgid "User opened the profile page of another user"
3175
  msgstr ""
3176
 
3177
+ #: defaults.php:442
3178
+ msgid "%UserChanger% opened the profile page of the user %TargetUsername%."
3179
  msgstr ""
3180
 
3181
+ #: defaults.php:443
3182
+ msgid "User updated a custom field value for a user"
3183
  msgstr ""
3184
 
3185
+ #: defaults.php:443
3186
  msgid ""
3187
+ "Changed the value of the custom field %custom_field_name%%ReportText% for "
3188
+ "the user %TargetUsername%.%ChangeText%"
 
 
 
 
3189
  msgstr ""
3190
 
3191
+ #: defaults.php:444
3192
+ msgid "User created a custom field value for a user"
3193
  msgstr ""
3194
 
3195
+ #: defaults.php:444
3196
+ msgid ""
3197
+ "Created the value of the custom field %custom_field_name% with %new_value% "
3198
+ "for the user %TargetUsername%."
3199
  msgstr ""
3200
 
3201
+ #: defaults.php:445
3202
+ msgid "User changed first name for a user"
3203
  msgstr ""
3204
 
3205
+ #: defaults.php:445
3206
+ msgid ""
3207
+ "Changed the first name of the user %TargetUsername% from %old_firstname% to "
3208
+ "%new_firstname%"
3209
  msgstr ""
3210
 
3211
+ #: defaults.php:446
3212
+ msgid "User changed last name for a user"
3213
  msgstr ""
3214
 
3215
+ #: defaults.php:446
3216
+ msgid ""
3217
+ "Changed the last name of the user %TargetUsername% from %old_lastname% to "
3218
+ "%new_lastname%"
3219
  msgstr ""
3220
 
3221
+ #: defaults.php:447
3222
+ msgid "User changed nickname for a user"
3223
  msgstr ""
3224
 
3225
+ #: defaults.php:447
3226
+ msgid ""
3227
+ "Changed the nickname of the user %TargetUsername% from %old_nickname% to "
3228
+ "%new_nickname%"
3229
  msgstr ""
3230
 
3231
+ #: defaults.php:448
3232
+ msgid "User changed the display name for a user"
3233
  msgstr ""
3234
 
3235
+ #: defaults.php:448
3236
+ msgid ""
3237
+ "Changed the Display name publicly of user %TargetUsername% from "
3238
+ "%old_displayname% to %new_displayname%"
3239
  msgstr ""
3240
 
3241
+ #: defaults.php:455
3242
+ msgid "Third Party Support"
3243
  msgstr ""
3244
 
3245
+ #: defaults.php:459
3246
+ msgid "BBPress Forum"
3247
  msgstr ""
3248
 
3249
+ #: defaults.php:460
3250
  msgid "User created new forum"
3251
  msgstr ""
3252
 
3253
+ #: defaults.php:460
3254
  msgid ""
3255
  "Created new forum %ForumName%. Forum URL is %ForumURL%. %EditorLinkForum%."
3256
  msgstr ""
3257
 
3258
+ #: defaults.php:461
3259
  msgid "User changed status of a forum"
3260
  msgstr ""
3261
 
3262
+ #: defaults.php:461
3263
  msgid ""
3264
  "Changed the status of the forum %ForumName% from %OldStatus% to %NewStatus%. "
3265
  "%EditorLinkForum%."
3266
  msgstr ""
3267
 
3268
+ #: defaults.php:462
3269
  msgid "User changed visibility of a forum"
3270
  msgstr ""
3271
 
3272
+ #: defaults.php:462
3273
  msgid ""
3274
  "Changed the visibility of the forum %ForumName% from %OldVisibility% to "
3275
  "%NewVisibility%. %EditorLinkForum%."
3276
  msgstr ""
3277
 
3278
+ #: defaults.php:463
3279
  msgid "User changed the URL of a forum"
3280
  msgstr ""
3281
 
3282
+ #: defaults.php:463
3283
  msgid ""
3284
  "Changed the URL of the forum %ForumName% from %OldUrl% to %NewUrl%. "
3285
  "%EditorLinkForum%."
3286
  msgstr ""
3287
 
3288
+ #: defaults.php:464
3289
  msgid "User changed order of a forum"
3290
  msgstr ""
3291
 
3292
+ #: defaults.php:464
3293
  msgid ""
3294
  "Changed the order of the forum %ForumName% from %OldOrder% to %NewOrder%. "
3295
  "%EditorLinkForum%."
3296
  msgstr ""
3297
 
3298
+ #: defaults.php:465
3299
  msgid "User moved forum to trash"
3300
  msgstr ""
3301
 
3302
+ #: defaults.php:465
3303
  msgid "Moved the forum %ForumName% to trash."
3304
  msgstr ""
3305
 
3306
+ #: defaults.php:466
3307
  msgid "User permanently deleted forum"
3308
  msgstr ""
3309
 
3310
+ #: defaults.php:466
3311
  msgid "Permanently deleted the forum %ForumName%."
3312
  msgstr ""
3313
 
3314
+ #: defaults.php:467
3315
  msgid "User restored forum from trash"
3316
  msgstr ""
3317
 
3318
+ #: defaults.php:467
3319
  msgid "Restored the forum %ForumName% from trash. %EditorLinkForum%."
3320
  msgstr ""
3321
 
3322
+ #: defaults.php:468
3323
  msgid "User changed the parent of a forum"
3324
  msgstr ""
3325
 
3326
+ #: defaults.php:468
3327
  msgid ""
3328
  "Changed the parent of the forum %ForumName% from %OldParent% to %NewParent%. "
3329
  "%EditorLinkForum%."
3330
  msgstr ""
3331
 
3332
+ #: defaults.php:469
 
 
 
 
 
 
 
 
 
 
3333
  msgid "User changed forum's role"
3334
  msgstr ""
3335
 
3336
+ #: defaults.php:469
3337
  msgid "Changed the forum's auto role from %OldRole% to %NewRole%."
3338
  msgstr ""
3339
 
3340
+ #: defaults.php:470
3341
  msgid "User changed option of a forum"
3342
  msgstr ""
3343
 
3344
+ #: defaults.php:470
3345
  msgid "%Status% the option for anonymous posting on forum."
3346
  msgstr ""
3347
 
3348
+ #: defaults.php:471
3349
+ msgid "User changed type of a forum"
3350
+ msgstr ""
3351
+
3352
+ #: defaults.php:471
3353
+ msgid ""
3354
+ "Changed the type of the forum %ForumName% from %OldType% to %NewType%. "
3355
+ "%EditorLinkForum%."
3356
+ msgstr ""
3357
+
3358
+ #: defaults.php:472
3359
  msgid "User changed time to disallow post editing"
3360
  msgstr ""
3361
 
3362
+ #: defaults.php:472
3363
  msgid ""
3364
  "Changed the time to disallow post editing from %OldTime% to %NewTime% "
3365
  "minutes in the forums."
3366
  msgstr ""
3367
 
3368
+ #: defaults.php:473
3369
  msgid "User changed the forum setting posting throttle time"
3370
  msgstr ""
3371
 
3372
+ #: defaults.php:473
3373
  msgid ""
3374
  "Changed the posting throttle time from %OldTime% to %NewTime% seconds in the "
3375
  "forums."
3376
  msgstr ""
3377
 
3378
+ #: defaults.php:474
3379
  msgid "User created new topic"
3380
  msgstr ""
3381
 
3382
+ #: defaults.php:474
3383
  msgid "Created a new topic %TopicName%. %EditorLinkTopic%."
3384
  msgstr ""
3385
 
3386
+ #: defaults.php:475
3387
  msgid "User changed status of a topic"
3388
  msgstr ""
3389
 
3390
+ #: defaults.php:475
3391
  msgid ""
3392
  "Changed the status of the topic %TopicName% from %OldStatus% to %NewStatus%. "
3393
  "%EditorLinkTopic%."
3394
  msgstr ""
3395
 
3396
+ #: defaults.php:476
3397
  msgid "User changed type of a topic"
3398
  msgstr ""
3399
 
3400
+ #: defaults.php:476
3401
  msgid ""
3402
  "Changed the type of the topic %TopicName% from %OldType% to %NewType%. "
3403
  "%EditorLinkTopic%."
3404
  msgstr ""
3405
 
3406
+ #: defaults.php:477
3407
  msgid "User changed URL of a topic"
3408
  msgstr ""
3409
 
3410
+ #: defaults.php:477
3411
  msgid "Changed the URL of the topic %TopicName% from %OldUrl% to %NewUrl%."
3412
  msgstr ""
3413
 
3414
+ #: defaults.php:478
3415
  msgid "User changed the forum of a topic"
3416
  msgstr ""
3417
 
3418
+ #: defaults.php:478
3419
  msgid ""
3420
  "Changed the forum of the topic %TopicName% from %OldForum% to %NewForum%. "
3421
  "%EditorLinkTopic%."
3422
  msgstr ""
3423
 
3424
+ #: defaults.php:479
3425
  msgid "User moved topic to trash"
3426
  msgstr ""
3427
 
3428
+ #: defaults.php:479
3429
  msgid "Moved the topic %TopicName% to trash."
3430
  msgstr ""
3431
 
3432
+ #: defaults.php:480
3433
  msgid "User permanently deleted topic"
3434
  msgstr ""
3435
 
3436
+ #: defaults.php:480
3437
  msgid "Permanently deleted the topic %TopicName%."
3438
  msgstr ""
3439
 
3440
+ #: defaults.php:481
3441
  msgid "User restored topic from trash"
3442
  msgstr ""
3443
 
3444
+ #: defaults.php:481
3445
  msgid "Restored the topic %TopicName% from trash. %EditorLinkTopic%."
3446
  msgstr ""
3447
 
3448
+ #: defaults.php:482
3449
  msgid "User changed visibility of a topic"
3450
  msgstr ""
3451
 
3452
+ #: defaults.php:482
3453
  msgid ""
3454
  "Changed the visibility of the topic %TopicName% from %OldVisibility% to "
3455
  "%NewVisibility%. %EditorLinkTopic%."
3456
  msgstr ""
3457
 
3458
+ #: defaults.php:488
3459
+ msgid "WooCommerce"
3460
+ msgstr ""
3461
+
3462
+ #: defaults.php:489
3463
  msgid "User created a new product"
3464
  msgstr ""
3465
 
3466
+ #: defaults.php:489
3467
  msgid ""
3468
  "Created a new product called %ProductTitle% and saved it as draft. View the "
3469
  "product: %EditorLinkProduct%."
3470
  msgstr ""
3471
 
3472
+ #: defaults.php:490
3473
  msgid "User published a product"
3474
  msgstr ""
3475
 
3476
+ #: defaults.php:490
3477
  msgid ""
3478
  "Published a product called %ProductTitle%. Product URL is %ProductUrl%. View "
3479
  "the product: %EditorLinkProduct%."
3480
  msgstr ""
3481
 
3482
+ #: defaults.php:491
3483
+ msgid "User created a new product category"
3484
+ msgstr ""
3485
+
3486
+ #: defaults.php:491
3487
+ msgid ""
3488
+ "Created a new product category called %CategoryName% in WooCommerce. Product "
3489
+ "category slug is %Slug%."
3490
+ msgstr ""
3491
+
3492
+ #: defaults.php:492
3493
  msgid "User changed the category of a product"
3494
  msgstr ""
3495
 
3496
+ #: defaults.php:492
3497
  msgid ""
3498
  "Changed the category of the product %ProductTitle% from %OldCategories% to "
3499
  "%NewCategories%. View the product: %EditorLinkProduct%."
3500
  msgstr ""
3501
 
3502
+ #: defaults.php:493
3503
  msgid "User modified the short description of a product"
3504
  msgstr ""
3505
 
3506
+ #: defaults.php:493
3507
  msgid ""
3508
  "Modified the short description of the product %ProductTitle%.%ChangeText% "
3509
  "View the product: %EditorLinkProduct%."
3510
  msgstr ""
3511
 
3512
+ #: defaults.php:494
3513
  msgid "User modified the text of a product"
3514
  msgstr ""
3515
 
3516
+ #: defaults.php:494
3517
  msgid ""
3518
  "Modified the text of the product %ProductTitle%. View the product: "
3519
  "%EditorLinkProduct%."
3520
  msgstr ""
3521
 
3522
+ #: defaults.php:495
3523
  msgid "User changed the URL of a product"
3524
  msgstr ""
3525
 
3526
+ #: defaults.php:495
3527
  msgid ""
3528
  "Changed the URL of the product %ProductTitle%%ReportText%.%ChangeText% View "
3529
  "the product: %EditorLinkProduct%."
3530
  msgstr ""
3531
 
3532
+ #: defaults.php:496
3533
+ msgid "User changed the Product Data of a product"
3534
+ msgstr ""
3535
+
3536
+ #: defaults.php:496
3537
+ msgid ""
3538
+ "Changed the Product Data of the product %ProductTitle%. View the product: "
3539
+ "%EditorLinkProduct%."
3540
+ msgstr ""
3541
+
3542
+ #: defaults.php:497
3543
  msgid "User changed the date of a product"
3544
  msgstr ""
3545
 
3546
+ #: defaults.php:497
3547
  msgid ""
3548
  "Changed the date of the product %ProductTitle% from %OldDate% to %NewDate%. "
3549
  "View the product: %EditorLinkProduct%."
3550
  msgstr ""
3551
 
3552
+ #: defaults.php:498
3553
  msgid "User changed the visibility of a product"
3554
  msgstr ""
3555
 
3556
+ #: defaults.php:498
3557
  msgid ""
3558
  "Changed the visibility of the product %ProductTitle% from %OldVisibility% to "
3559
  "%NewVisibility%. View the product: %EditorLinkProduct%."
3560
  msgstr ""
3561
 
3562
+ #: defaults.php:499
3563
  msgid "User modified the published product"
3564
  msgstr ""
3565
 
3566
+ #: defaults.php:499
3567
  msgid ""
3568
  "Modified the published product %ProductTitle%. Product URL is %ProductUrl%. "
3569
  "View the product: %EditorLinkProduct%."
3570
  msgstr ""
3571
 
3572
+ #: defaults.php:500
3573
  msgid "User modified the draft product"
3574
  msgstr ""
3575
 
3576
+ #: defaults.php:500
3577
  msgid ""
3578
  "Modified the draft product %ProductTitle%. View the product: "
3579
  "%EditorLinkProduct%."
3580
  msgstr ""
3581
 
3582
+ #: defaults.php:501
3583
  msgid "User moved a product to trash"
3584
  msgstr ""
3585
 
3586
+ #: defaults.php:501
3587
  msgid ""
3588
  "Moved the product %ProductTitle% to trash. Product URL was %ProductUrl%."
3589
  msgstr ""
3590
 
3591
+ #: defaults.php:502
3592
  msgid "User permanently deleted a product"
3593
  msgstr ""
3594
 
3595
+ #: defaults.php:502
3596
  msgid "Permanently deleted the product %ProductTitle%."
3597
  msgstr ""
3598
 
3599
+ #: defaults.php:503
3600
  msgid "User restored a product from the trash"
3601
  msgstr ""
3602
 
3603
+ #: defaults.php:503
3604
  msgid ""
3605
  "Product %ProductTitle% has been restored from trash. View product: "
3606
  "%EditorLinkProduct%."
3607
  msgstr ""
3608
 
3609
+ #: defaults.php:504
3610
  msgid "User changed status of a product"
3611
  msgstr ""
3612
 
3613
+ #: defaults.php:504
3614
  msgid ""
3615
  "Changed the status of the product %ProductTitle% from %OldStatus% to "
3616
  "%NewStatus%. View the product: %EditorLinkProduct%."
3617
  msgstr ""
3618
 
3619
+ #: defaults.php:505
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3620
  msgid "User changed type of a price"
3621
  msgstr ""
3622
 
3623
+ #: defaults.php:505
3624
  msgid ""
3625
  "Changed the %PriceType% of the product %ProductTitle% from %OldPrice% to "
3626
  "%NewPrice%. View the product: %EditorLinkProduct%."
3627
  msgstr ""
3628
 
3629
+ #: defaults.php:506
3630
  msgid "User changed the SKU of a product"
3631
  msgstr ""
3632
 
3633
+ #: defaults.php:506
3634
  msgid ""
3635
  "Changed the SKU of the product %ProductTitle% from %OldSku% to %NewSku%. "
3636
  "View the product: %EditorLinkProduct%."
3637
  msgstr ""
3638
 
3639
+ #: defaults.php:507
3640
  msgid "User changed the stock status of a product"
3641
  msgstr ""
3642
 
3643
+ #: defaults.php:507
3644
  msgid ""
3645
  "Changed the stock status of the product %ProductTitle% from %OldStatus% to "
3646
  "%NewStatus%. View the product: %EditorLinkProduct%."
3647
  msgstr ""
3648
 
3649
+ #: defaults.php:508
3650
  msgid "User changed the stock quantity"
3651
  msgstr ""
3652
 
3653
+ #: defaults.php:508
3654
  msgid ""
3655
  "Changed the stock quantity of the product %ProductTitle% from %OldValue% to "
3656
  "%NewValue%. View the product: %EditorLinkProduct%"
3657
  msgstr ""
3658
 
3659
+ #: defaults.php:509
3660
  msgid "User set a product type"
3661
  msgstr ""
3662
 
3663
+ #: defaults.php:509
3664
  msgid ""
3665
  "Set the product %ProductTitle% as %Type%. View the product: "
3666
  "%EditorLinkProduct%."
3667
  msgstr ""
3668
 
3669
+ #: defaults.php:510
3670
  msgid "User changed the weight of a product"
3671
  msgstr ""
3672
 
3673
+ #: defaults.php:510
3674
  msgid ""
3675
  "Changed the weight of the product %ProductTitle% from %OldWeight% to "
3676
  "%NewWeight%. View the product: %EditorLinkProduct%."
3677
  msgstr ""
3678
 
3679
+ #: defaults.php:511
3680
  msgid "User changed the dimensions of a product"
3681
  msgstr ""
3682
 
3683
+ #: defaults.php:511
3684
  msgid ""
3685
  "Changed the %DimensionType% dimensions of the product %ProductTitle% from "
3686
  "%OldDimension% to %NewDimension%. View the product: %EditorLinkProduct%."
3687
  msgstr ""
3688
 
3689
+ #: defaults.php:512
3690
  msgid "User added the Downloadable File to a product"
3691
  msgstr ""
3692
 
3693
+ #: defaults.php:512
3694
  msgid ""
3695
  "Added the Downloadable File %FileName% with File URL %FileUrl% to the "
3696
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
3697
  msgstr ""
3698
 
3699
+ #: defaults.php:513
3700
  msgid "User Removed the Downloadable File from a product"
3701
  msgstr ""
3702
 
3703
+ #: defaults.php:513
3704
  msgid ""
3705
  "Removed the Downloadable File %FileName% with File URL %FileUrl% from the "
3706
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
3707
  msgstr ""
3708
 
3709
+ #: defaults.php:514
3710
  msgid "User changed the name of a Downloadable File in a product"
3711
  msgstr ""
3712
 
3713
+ #: defaults.php:514
3714
  msgid ""
3715
  "Changed the name of a Downloadable File from %OldName% to %NewName% in "
3716
  "product %ProductTitle%. View the product: %EditorLinkProduct%."
3717
  msgstr ""
3718
 
3719
+ #: defaults.php:515
3720
  msgid "User changed the URL of the Downloadable File in a product"
3721
  msgstr ""
3722
 
3723
+ #: defaults.php:515
3724
  msgid ""
3725
  "Changed the URL of the Downloadable File %FileName% from %OldUrl% to %NewUrl"
3726
  "% in product %ProductTitle%. View the product: %EditorLinkProduct%."
3727
  msgstr ""
3728
 
3729
+ #: defaults.php:516
3730
  msgid "User changed the Weight Unit"
3731
  msgstr ""
3732
 
3733
+ #: defaults.php:516
3734
  msgid "Changed the Weight Unit from %OldUnit% to %NewUnit% in WooCommerce."
3735
  msgstr ""
3736
 
3737
+ #: defaults.php:517
3738
  msgid "User changed the Dimensions Unit"
3739
  msgstr ""
3740
 
3741
+ #: defaults.php:517
3742
  msgid "Changed the Dimensions Unit from %OldUnit% to %NewUnit% in WooCommerce."
3743
  msgstr ""
3744
 
3745
+ #: defaults.php:518
3746
  msgid "User changed the Base Location"
3747
  msgstr ""
3748
 
3749
+ #: defaults.php:518
3750
  msgid ""
3751
  "Changed the Base Location from %OldLocation% to %NewLocation% in WooCommerce."
3752
  msgstr ""
3753
 
3754
+ #: defaults.php:519
3755
  msgid "User Enabled/Disabled taxes"
3756
  msgstr ""
3757
 
3758
+ #: defaults.php:519
3759
  msgid "%Status% taxes in the WooCommerce store."
3760
  msgstr ""
3761
 
3762
+ #: defaults.php:520
3763
  msgid "User changed the currency"
3764
  msgstr ""
3765
 
3766
+ #: defaults.php:520
3767
  msgid ""
3768
  "Changed the currency from %OldCurrency% to %NewCurrency% in WooCommerce."
3769
  msgstr ""
3770
 
3771
+ #: defaults.php:521
3772
  msgid "User Enabled/Disabled the use of coupons during checkout"
3773
  msgstr ""
3774
 
3775
+ #: defaults.php:521
3776
  msgid "%Status% the use of coupons during checkout in WooCommerce."
3777
  msgstr ""
3778
 
3779
+ #: defaults.php:522
3780
  msgid "User Enabled/Disabled guest checkout"
3781
  msgstr ""
3782
 
3783
+ #: defaults.php:522
3784
  msgid "%Status% guest checkout in WooCommerce."
3785
  msgstr ""
3786
 
3787
+ #: defaults.php:523
3788
  msgid "User Enabled/Disabled cash on delivery"
3789
  msgstr ""
3790
 
3791
+ #: defaults.php:523
3792
  msgid "%Status% the option Enable cash on delivery in WooCommerce."
3793
  msgstr ""
3794
 
3795
+ #: defaults.php:525
3796
+ msgid "Yoast SEO"
 
 
 
 
 
 
3797
  msgstr ""
3798
 
3799
+ #: defaults.php:526
3800
  msgid "User changed title of a SEO post"
3801
  msgstr ""
3802
 
3803
+ #: defaults.php:526
3804
  msgid ""
3805
  "Changed the SEO title of the %PostStatus% %PostType%%ReportText%.%ChangeText"
3806
  "% %EditorLinkPost%."
3807
  msgstr ""
3808
 
3809
+ #: defaults.php:527
3810
  msgid "User changed the meta description of a SEO post"
3811
  msgstr ""
3812
 
3813
+ #: defaults.php:527
3814
  msgid ""
3815
  "Changed the Meta description of the %PostStatus% %PostType% titled %PostTitle"
3816
  "%%ReportText%.%ChangeText% %EditorLinkPost%."
3817
  msgstr ""
3818
 
3819
+ #: defaults.php:528
3820
  msgid ""
3821
  "User changed setting to allow search engines to show post in search results "
3822
  "of a SEO post"
3823
  msgstr ""
3824
 
3825
+ #: defaults.php:528
3826
  msgid ""
3827
  "Changed the setting to allow search engines to show post in search results "
3828
  "from %OldStatus% to %NewStatus% in the %PostStatus% %PostType% titled "
3829
  "%PostTitle%. %EditorLinkPost%."
3830
  msgstr ""
3831
 
3832
+ #: defaults.php:529
3833
  msgid ""
3834
  "User Enabled/Disabled the option for search engine to follow links of a SEO "
3835
  "post"
3836
  msgstr ""
3837
 
3838
+ #: defaults.php:529
3839
  msgid ""
3840
  "%NewStatus% the option for search engine to follow links in the %PostType% "
3841
  "titled %PostTitle%. %EditorLinkPost%."
3842
  msgstr ""
3843
 
3844
+ #: defaults.php:530
3845
  msgid "User set the meta robots advanced setting of a SEO post"
3846
  msgstr ""
3847
 
3848
+ #: defaults.php:530
3849
  msgid ""
3850
  "Set the Meta Robots Advanced setting to %NewStatus% in the %PostStatus% "
3851
  "%PostType% titled %PostTitle%. %EditorLinkPost%."
3852
  msgstr ""
3853
 
3854
+ #: defaults.php:531
3855
  msgid "User changed the canonical URL of a SEO post"
3856
  msgstr ""
3857
 
3858
+ #: defaults.php:531
3859
  msgid ""
3860
  "Changed the Canonical URL of the %PostStatus% %PostType% titled %PostTitle%"
3861
  "%ReportText%.%ChangeText% %EditorLinkPost%."
3862
  msgstr ""
3863
 
3864
+ #: defaults.php:532
3865
  msgid "User changed the focus keyword of a SEO post"
3866
  msgstr ""
3867
 
3868
+ #: defaults.php:532
3869
  msgid ""
3870
  "Changed the focus keyword of the %PostStatus% %PostType% titled %PostTitle% "
3871
  "from %old_keywords% to %new_keywords%. %EditorLinkPost%."
3872
  msgstr ""
3873
 
3874
+ #: defaults.php:533
3875
  msgid "User Enabled/Disabled the option Cornerston Content of a SEO post"
3876
  msgstr ""
3877
 
3878
+ #: defaults.php:533
3879
  msgid ""
3880
  "%Status% the option Cornerston Content on the %PostStatus% %PostType% titled "
3881
  "%PostTitle%. %EditorLinkPost%."
3882
  msgstr ""
3883
 
3884
+ #: defaults.php:534
3885
  msgid "User changed the Title Separator setting"
3886
  msgstr ""
3887
 
3888
+ #: defaults.php:534
3889
  msgid ""
3890
  "Changed the Title Separator from %old% to %new% in the Yoast SEO plugin "
3891
  "settings."
3892
  msgstr ""
3893
 
3894
+ #: defaults.php:535
3895
  msgid "User changed the Homepage Title setting"
3896
  msgstr ""
3897
 
3898
+ #: defaults.php:535
3899
  msgid ""
3900
  "Changed the Homepage Title%ReportText% in the Yoast SEO plugin settings."
3901
  "%ChangeText%"
3902
  msgstr ""
3903
 
3904
+ #: defaults.php:536
3905
  msgid "User changed the Homepage Meta description setting"
3906
  msgstr ""
3907
 
3908
+ #: defaults.php:536
3909
  msgid ""
3910
  "Changed the Homepage Meta description%ReportText% in the Yoast SEO plugin "
3911
  "settings.%ChangeText%"
3912
  msgstr ""
3913
 
3914
+ #: defaults.php:537
3915
  msgid "User changed the Company or Person setting"
3916
  msgstr ""
3917
 
3918
+ #: defaults.php:537
3919
  msgid ""
3920
  "Changed the Company or Person setting from %old% to %new% in the YOAST SEO "
3921
  "plugin settings."
3922
  msgstr ""
3923
 
3924
+ #: defaults.php:538
3925
  msgid ""
3926
  "User Enabled/Disabled the option Show Posts/Pages in Search Results in the "
3927
  "Yoast SEO plugin settings"
3928
  msgstr ""
3929
 
3930
+ #: defaults.php:538
3931
  msgid ""
3932
  "%Status% the option Show %SEOPostType% in Search Results in the Yoast SEO "
3933
  "plugin settings."
3934
  msgstr ""
3935
 
3936
+ #: defaults.php:539
3937
  msgid ""
3938
  "User changed the Posts/Pages title template in the Yoast SEO plugin settings"
3939
  msgstr ""
3940
 
3941
+ #: defaults.php:539
3942
  msgid ""
3943
  "Changed the %SEOPostType% title template from %old% to %new% in the Yoast "
3944
  "SEO plugin settings."
3945
  msgstr ""
3946
 
3947
+ #: defaults.php:540
3948
  msgid "User Enabled/Disabled SEO analysis in the Yoast SEO plugin settings"
3949
  msgstr ""
3950
 
3951
+ #: defaults.php:540
3952
  msgid "%Status% SEO analysis in the Yoast SEO plugin settings."
3953
  msgstr ""
3954
 
3955
+ #: defaults.php:541
3956
  msgid ""
3957
  "User Enabled/Disabled readability analysis in the Yoast SEO plugin settings"
3958
  msgstr ""
3959
 
3960
+ #: defaults.php:541
3961
  msgid "%Status% Readability analysis in the Yoast SEO plugin settings."
3962
  msgstr ""
3963
 
3964
+ #: defaults.php:542
3965
  msgid ""
3966
  "User Enabled/Disabled cornerstone content in the Yoast SEO plugin settings"
3967
  msgstr ""
3968
 
3969
+ #: defaults.php:542
3970
  msgid "%Status% Cornerstone content in the Yoast SEO plugin settings."
3971
  msgstr ""
3972
 
3973
+ #: defaults.php:543
3974
  msgid ""
3975
  "User Enabled/Disabled the text link counter in the Yoast SEO plugin settings"
3976
  msgstr ""
3977
 
3978
+ #: defaults.php:543
3979
  msgid "%Status% the Text link counter in the Yoast SEO plugin settings."
3980
  msgstr ""
3981
 
3982
+ #: defaults.php:544
3983
  msgid "User Enabled/Disabled XML sitemaps in the Yoast SEO plugin settings"
3984
  msgstr ""
3985
 
3986
+ #: defaults.php:544
3987
  msgid "%Status% XML Sitemaps in the Yoast SEO plugin settings."
3988
  msgstr ""
3989
 
3990
+ #: defaults.php:545
3991
  msgid "User Enabled/Disabled ryte integration in the Yoast SEO plugin settings"
3992
  msgstr ""
3993
 
3994
+ #: defaults.php:545
3995
  msgid "%Status% Ryte Integration in the Yoast SEO plugin settings."
3996
  msgstr ""
3997
 
3998
+ #: defaults.php:546
3999
  msgid ""
4000
  "User Enabled/Disabled the admin bar menu in the Yoast SEO plugin settings"
4001
  msgstr ""
4002
 
4003
+ #: defaults.php:546
4004
  msgid "%Status% the Admin bar menu in the Yoast SEO plugin settings."
4005
  msgstr ""
4006
 
4007
+ #: defaults.php:547
4008
  msgid ""
4009
  "User changed the Posts/Pages meta description template in the Yoast SEO "
4010
  "plugin settings"
4011
  msgstr ""
4012
 
4013
+ #: defaults.php:547
4014
  msgid ""
4015
  "Changed the %SEOPostType% meta description template from %old% to %new% in "
4016
  "the Yoast SEO plugin settings."
4017
  msgstr ""
4018
 
4019
+ #: defaults.php:548
4020
  msgid ""
4021
  "User set the option Date in Snippet Preview for Posts/Pages in the Yoast SEO "
4022
  "plugin settings"
4023
  msgstr ""
4024
 
4025
+ #: defaults.php:548
4026
  msgid ""
4027
  "%Status% the option Date in Snippet Preview for %SEOPostType% in the Yoast "
4028
  "SEO plugin settings."
4029
  msgstr ""
4030
 
4031
+ #: defaults.php:549
4032
  msgid ""
4033
  "User set the option Yoast SEO Meta Box for Posts/Pages in the Yoast SEO "
4034
  "plugin settings"
4035
  msgstr ""
4036
 
4037
+ #: defaults.php:549
4038
  msgid ""
4039
  "%Status% the option Yoast SEO Meta Box for %SEOPostType% in the Yoast SEO "
4040
  "plugin settings."
4041
  msgstr ""
4042
 
4043
+ #: defaults.php:550
4044
  msgid ""
4045
  "User Enabled/Disabled the advanced settings for authors in the Yoast SEO "
4046
  "plugin settings"
4047
  msgstr ""
4048
 
4049
+ #: defaults.php:550
4050
  msgid "%Status% the advanced settings for authors in the Yoast SEO settings."
4051
  msgstr ""
4052
 
4053
+ #: wp-security-audit-log.php:304 wp-security-audit-log.php:330
 
4054
  #, php-format
4055
  msgid "Hey %1$s"
4056
  msgstr ""
4057
 
4058
+ #: wp-security-audit-log.php:305
4059
  msgid ""
4060
  "Never miss an important update! Opt-in to our security and feature updates "
4061
  "notifications, and non-sensitive diagnostic tracking with freemius.com."
4062
  msgstr ""
4063
 
4064
+ #: wp-security-audit-log.php:306 wp-security-audit-log.php:332
4065
  msgid "Note: "
4066
  msgstr ""
4067
 
4068
+ #: wp-security-audit-log.php:307 wp-security-audit-log.php:333
4069
  msgid "NO AUDIT LOG ACTIVITY & DATA IS SENT BACK TO OUR SERVERS."
4070
  msgstr ""
4071
 
4072
+ #: wp-security-audit-log.php:331
 
4073
  #, php-format
4074
  msgid ""
4075
  "Please help us improve %2$s! If you opt-in, some non-sensitive data about "
4077
  "use. If you skip this, that's okay! %2$s will still work just fine."
4078
  msgstr ""
4079
 
4080
+ #: wp-security-audit-log.php:382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4081
  msgid ""
4082
  "Error: You do not have sufficient permissions to disable this custom field."
4083
  msgstr ""
4084
 
4085
+ #: wp-security-audit-log.php:418
4086
  msgid "Error: You do not have sufficient permissions to disable this alert."
4087
  msgstr ""
4088
 
4089
+ #: wp-security-audit-log.php:530
4090
  #, php-format
4091
  msgid ""
4092
  "You are using a version of PHP that is older than %s, which is no longer "
4093
  "supported."
4094
  msgstr ""
4095
 
4096
+ #: wp-security-audit-log.php:531
4097
  msgid ""
4098
  "Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
4099
  "\">plugins@wpwhitesecurity.com</a> to help you switch the version of PHP you "
4100
  "are using."
4101
  msgstr ""
4102
 
4103
+ #. Plugin Name of the plugin/theme
4104
+ msgid "WP Security Audit Log"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4105
  msgstr ""
4106
 
4107
  #. Plugin URI of the plugin/theme
4108
+ #. Author URI of the plugin/theme
4109
  msgid "http://www.wpsecurityauditlog.com/"
4110
  msgstr ""
4111
 
4122
  #. Author of the plugin/theme
4123
  msgid "WP White Security"
4124
  msgstr ""
 
 
 
 
readme.txt CHANGED
@@ -5,8 +5,8 @@ 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.0
9
- Stable tag: 3.2.5
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.
@@ -114,7 +114,7 @@ Refer to the <strong>[WordPress activity log plugin datasheet](https://www.wpsec
114
  ### As Featured On:
115
 
116
  * [GoDaddy](https://www.godaddy.com/garage/decode-security-logs-wordpress/)
117
- * [Kinsta](https://kinsta.com/blog/wordpress-activity-log/)
118
  * [Pagely](https://pagely.com/blog/2015/01/log-wordpress-dashboard-activity-improved-security-auditing/)
119
  * [Shout Me Loud](https://www.shoutmeloud.com/wordpress-security-audit-log.html)
120
  * [The Dev Couple](https://thedevcouple.com/wp-security-audit-log-review/)
@@ -195,16 +195,32 @@ Please refer to our [Support & Documentation pages](https://www.wpsecurityauditl
195
 
196
  == Changelog ==
197
 
198
- = 3.2.5 (2018-11-15) =
199
-
200
- Release Notes: [Announcing Activity Log for MainWP](https://www.wpsecurityauditlog.com/releases/announcing-activity-log-mainwp-extension/)
201
-
202
- * **New Events for the activity log**
203
- * Event ID 2127: Changed the name of a category
204
- * Event ID 2128: Changed the slug of a category
205
-
206
- * **New Functionality**
207
- * Added support in the plugin for the [Activity Log for MainWP extension](https://www.wpsecurityauditlog.com/activity-log-mainwp-extension/).
208
-
209
- * **Bug Fixes**
210
- * Fixed an issue in the licensing which allowed users with Starter plan to access features from the professional plan.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.0.1
9
+ Stable tag: 3.3
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.
114
  ### As Featured On:
115
 
116
  * [GoDaddy](https://www.godaddy.com/garage/decode-security-logs-wordpress/)
117
+ * [Kinsta](https://kinsta.com/blog/wordpress-activity-log/)
118
  * [Pagely](https://pagely.com/blog/2015/01/log-wordpress-dashboard-activity-improved-security-auditing/)
119
  * [Shout Me Loud](https://www.shoutmeloud.com/wordpress-security-audit-log.html)
120
  * [The Dev Couple](https://thedevcouple.com/wp-security-audit-log-review/)
195
 
196
  == Changelog ==
197
 
198
+ = 3.3 (2018-12-13) =
199
+
200
+ Release Notes: [Slack Support & New External Connections UI](https://www.wpsecurityauditlog.com/releases/external-connections-update-slack-support-3-3/)
201
+
202
+ * **New Features**
203
+ * Slack support - [mirror WordPress activity log for Slack](https://www.wpsecurityauditlog.com/support-documentation/mirror-wordpress-activity-logs-slack-channel/).
204
+ * New UI and totally revamped the [external databases & services connections module](https://www.wpsecurityauditlog.com/support-documentation/getting-started-external-databases-third-party-services/).
205
+ * Ability to mirror the WordPress activity logs to multiple destinations.
206
+
207
+ * **Improvements**
208
+ * Maximum file size for [WordPress file integrity scans](https://www.wpsecurityauditlog.com/support-documentation/wordpress-files-changes-warning-activity-logs/) is now configurable.
209
+ * Updated the Freemius SDK to 2.2.2 (addresses a MainWP conflict fix).
210
+ * Plugin access can now be restricted to super administrators only on a multisite network.
211
+ * Multiple scan started / stopped events per directory merged into one.
212
+ * Added 1 and 4 hours option to terminate idle users sessions setting.
213
+ * Plugin now always keeps a log a post updates, even if update is not done via the editor.
214
+ * Better handling of terminated users sessions (in hung state, blocking legit logins).
215
+ * Access to plugin now can be restricted to super admin role on multisite networks.
216
+ * User info in daily activity log summary email is now variable - the same as configured in the plugin settings.
217
+ * Limited Freemius user messages to users who can view & manage the plugin.
218
+ * Addded support for a dot in the time format (e.g: d.-m-Y G:i)
219
+
220
+ * **Bug Fixes**
221
+ * Better handling of data from the REST API [Support ticket](https://wordpress.org/support/topic/error-implode-invalid-arguments-when-using-register_rest_route/).
222
+ * Fixed: two daily activity log emails were being sent instead of one.
223
+ * Restricted the starter license (had access to some pro features).
224
+ * Fixed a number of minor warnings when running the plugin on PHP7.
225
+ * Logins when using the [Two-Factor plugin](https://wordpress.org/plugins/two-factor/) are now logged properly.
226
+ * Fixed - first time setup wizard prompt not always showing.
sdk/freemius/assets/css/admin/deactivation-feedback.css DELETED
@@ -1 +0,0 @@
1
- .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}.fs-modal .fs-modal-dialog li.reason{margin-bottom:10px}.fs-modal .fs-modal-dialog li.reason .reason-input,.fs-modal .fs-modal-dialog li.reason .internal-message{margin-left:29px}.fs-modal .fs-modal-dialog li.reason label{display:table}.fs-modal .fs-modal-dialog li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}.fs-modal .reason-input,.fs-modal .internal-message{margin:3px 0 3px 22px}.fs-modal .reason-input input,.fs-modal .reason-input textarea,.fs-modal .internal-message input,.fs-modal .internal-message textarea{width:100%}.fs-modal li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}body.has-fs-modal{overflow:hidden}#the-list .deactivate>.fs-slug{display:none}
 
sdk/freemius/assets/css/admin/dialog-boxes.css CHANGED
@@ -1,2 +1,2 @@
1
- .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-license-activation .fs-modal-body input.license_key{width:100%}#license_options_container table,#license_options_container table select,#license_options_container table #available_license_key{width:100%}#license_options_container table td:first-child{width:1%}#license_options_container table #other_license_key_container label{position:relative;top:6px;float:left;margin-right:5px}#license_options_container table #other_license_key_container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}#license_options_container table #other_license_key_container div input{margin:0}#sites_list_container td{cursor:pointer}#multisite_options_container{margin-top:10px;border:1px solid #ccc;padding:5px}#multisite_options_container a{text-decoration:none}#multisite_options_container a:focus{box-shadow:none}#multisite_options_container a.selected{font-weight:bold}#multisite_options_container.apply-on-all-sites{border:0 none;padding:0}#multisite_options_container.apply-on-all-sites #all_sites_options{border-spacing:0}#multisite_options_container.apply-on-all-sites #all_sites_options td:not(:first-child){display:none}#multisite_options_container #sites_list_container{display:none;overflow:auto}#multisite_options_container #sites_list_container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
2
- .rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}
1
+ .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.license_key{width:100%}#license_options_container table,#license_options_container table select,#license_options_container table #available_license_key{width:100%}#license_options_container table td:first-child{width:1%}#license_options_container table #other_license_key_container label{position:relative;top:6px;float:left;margin-right:5px}#license_options_container table #other_license_key_container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}#license_options_container table #other_license_key_container div input{margin:0}#sites_list_container td{cursor:pointer}#multisite_options_container{margin-top:10px;border:1px solid #ccc;padding:5px}#multisite_options_container a{text-decoration:none}#multisite_options_container a:focus{box-shadow:none}#multisite_options_container a.selected{font-weight:bold}#multisite_options_container.apply-on-all-sites{border:0 none;padding:0}#multisite_options_container.apply-on-all-sites #all_sites_options{border-spacing:0}#multisite_options_container.apply-on-all-sites #all_sites_options td:not(:first-child){display:none}#multisite_options_container #sites_list_container{display:none;overflow:auto}#multisite_options_container #sites_list_container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
2
+ .rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
sdk/freemius/assets/css/admin/license-activation.css DELETED
@@ -1 +0,0 @@
1
- .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body .license-activation-message{margin:0;display:none}.fs-modal .fs-modal-body input.license_key{width:100%}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}body.has-fs-modal{overflow:hidden}
 
sdk/freemius/assets/scss/_colors.scss CHANGED
@@ -44,6 +44,17 @@ $button-secondary-bkg: #333;
44
  $button-secondary-color: $fms-white;
45
  $featured-color: #6bc406;
46
  $wp-selected-color: #0074a3;
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  $wordpress_color: #01749A;
49
  $blogger_color: #ff8100;
44
  $button-secondary-color: $fms-white;
45
  $featured-color: #6bc406;
46
  $wp-selected-color: #0074a3;
47
+ $wp-button-alert-border-color: #d2593c;
48
+ $wp-button-alert-border-top-color: #ec6544;
49
+ $wp-button-alert-shadow-color: #d2593c;
50
+ $wp-button-alert-focused-shadow1-color: #dd6041;
51
+ $wp-button-alert-focused-shadow2-color: #e4a796;
52
+ $wp-button-alert-background-color: #f56a48;
53
+ $wp-button-alert-hovered-background-color: #fd6d4a;
54
+ $wp-button-alert-active-background-color: #dd6041;
55
+ $wp-button-alert-disabled-color: #f5b3a1;
56
+ $wp-button-alert-disabled-background-color: #e76444;
57
+ $wp-button-alert-disabled-border-color: #d85e40;
58
 
59
  $wordpress_color: #01749A;
60
  $blogger_color: #ff8100;
sdk/freemius/assets/scss/admin/_buttons.scss ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .button-primary.warn {
2
+ box-shadow: 0 1px 0 $wp-button-alert-shadow-color;
3
+ text-shadow: 0 -1px 1px $wp-button-alert-shadow-color, 1px 0 1px $wp-button-alert-shadow-color, 0 1px 1px $wp-button-alert-shadow-color, -1px 0 1px $wp-button-alert-shadow-color;
4
+ background: $wp-button-alert-background-color;
5
+ border-color: $wp-button-alert-border-top-color $wp-button-alert-border-color $wp-button-alert-border-color;
6
+
7
+ &:hover {
8
+ background: $wp-button-alert-hovered-background-color;
9
+ border-color: $wp-button-alert-border-color;
10
+ }
11
+
12
+ &:focus {
13
+ box-shadow: 0 1px 0 $wp-button-alert-focused-shadow1-color, 0 0 2px 1px $wp-button-alert-focused-shadow2-color;
14
+ }
15
+
16
+ &:active {
17
+ background: $wp-button-alert-active-background-color;
18
+ border-color: $wp-button-alert-border-color;
19
+ box-shadow: inset 0 2px 0 $wp-button-alert-shadow-color;
20
+ }
21
+
22
+ &.disabled {
23
+ color: $wp-button-alert-disabled-color !important;
24
+ background: $wp-button-alert-disabled-background-color !important;
25
+ border-color: $wp-button-alert-disabled-border-color !important;
26
+ text-shadow: 0 -1px 0 rgba(0,0,0,.1) !important;
27
+ }
28
+ }
sdk/freemius/assets/scss/admin/_subscription-cancellation.scss ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .fs-modal.fs-modal-subscription-cancellation {
2
+ .fs-price-increase-warning {
3
+ color: red;
4
+ font-weight: bold;
5
+ padding: 0 25px;
6
+ margin-bottom: 0;
7
+ }
8
+
9
+ ul.subscription-actions label {
10
+ input {
11
+ float: left;
12
+ top: 5px;
13
+ position: relative;
14
+
15
+ .rtl & {
16
+ float: right;
17
+ }
18
+ }
19
+
20
+ span {
21
+ display: block;
22
+ margin-left: 24px;
23
+
24
+ .rtl & {
25
+ margin-left: 0;
26
+ margin-right: 24px;
27
+ }
28
+ }
29
+ }
30
+ }
sdk/freemius/assets/scss/admin/dialog-boxes.scss CHANGED
@@ -1,8 +1,10 @@
1
  @import "../start";
2
  @import "modal-common";
3
  @import "deactivation-feedback";
 
4
  @import "license-activation";
5
  @import "multisite-options";
6
  @import "license-key-resend";
7
  @import "ajax-loader";
8
- @import "auto-install";
 
1
  @import "../start";
2
  @import "modal-common";
3
  @import "deactivation-feedback";
4
+ @import "subscription-cancellation";
5
  @import "license-activation";
6
  @import "multisite-options";
7
  @import "license-key-resend";
8
  @import "ajax-loader";
9
+ @import "auto-install";
10
+ @import "buttons";
sdk/freemius/assets/scss/admin/plugin-upgrade-notice.scss ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ .plugins p.upgrade-notice
2
+ {
3
+ border: 0;
4
+ background-color: #d54e21;
5
+ padding: 10px;
6
+ color: #f9f9f9;
7
+ margin-top: 10px;
8
+ }
sdk/freemius/includes/class-freemius.php CHANGED
@@ -33,6 +33,12 @@
33
  * @var string
34
  */
35
  private $_plugin_basename;
 
 
 
 
 
 
36
  /**
37
  * @since 1.0.0
38
  *
@@ -671,11 +677,12 @@
671
  version_compare( $sdk_version, '1.2.3', '>=' )
672
  ) {
673
  /**
674
- * Starting from version 1.2.3, paths are stored as relative paths and not absolute paths; so when upgrading to 1.2.3, make paths relative.
 
675
  *
676
  * @author Leo Fajardo (@leorw)
677
  */
678
- $this->make_paths_relative();
679
  }
680
 
681
  if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
@@ -699,6 +706,25 @@
699
 
700
  }
701
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
702
  }
703
 
704
  /**
@@ -824,30 +850,12 @@
824
  }
825
 
826
  /**
827
- * Makes paths relative.
828
  *
829
  * @author Leo Fajardo (@leorw)
830
  * @since 1.2.3
831
  */
832
- private function make_paths_relative() {
833
- $id_slug_type_path_map = self::$_accounts->get_option( 'id_slug_type_path_map', array() );
834
-
835
- if ( isset( $id_slug_type_path_map[ $this->_module_id ]['path'] ) ) {
836
- $id_slug_type_path_map[ $this->_module_id ]['path'] = $this->get_relative_path( $id_slug_type_path_map[ $this->_module_id ]['path'] );
837
-
838
- self::$_accounts->set_option( 'id_slug_type_path_map', $id_slug_type_path_map, true );
839
- }
840
-
841
- if ( isset( $this->_storage->plugin_main_file ) ) {
842
- $plugin_main_file = $this->_storage->plugin_main_file;
843
-
844
- if ( isset( $plugin_main_file->path ) ) {
845
- $this->_storage->plugin_main_file->path = $this->get_relative_path( $this->_storage->plugin_main_file->path );
846
- } else if ( isset( $plugin_main_file->prev_path ) ) {
847
- $this->_storage->plugin_main_file->prev_path = $this->get_relative_path( $this->_storage->plugin_main_file->prev_path );
848
- }
849
- }
850
-
851
  // Remove invalid path that is still associated with the current slug if there's any.
852
  $file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
853
  foreach ( $file_slug_map as $plugin_basename => $slug ) {
@@ -1230,6 +1238,22 @@
1230
  <?php
1231
  }
1232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1233
  /**
1234
  * @author Vova Feldman (@svovaf)
1235
  * @since 1.0.9
@@ -1428,23 +1452,37 @@
1428
 
1429
  /**
1430
  * @since 1.2.0 Invalidate module's main file cache, otherwise, FS_Plugin_Updater will not fetch updates.
 
 
1431
  */
1432
- private function clear_module_main_file_cache() {
1433
  if ( ! isset( $this->_storage->plugin_main_file ) ||
1434
- empty( $this->_storage->plugin_main_file->path )
1435
  ) {
1436
  return;
1437
  }
1438
 
1439
- $plugin_main_file = clone $this->_storage->plugin_main_file;
 
 
 
 
 
 
 
 
 
 
 
1440
 
1441
- // Store cached path (2nd layer cache).
1442
- $plugin_main_file->prev_path = $plugin_main_file->path;
1443
 
1444
- // Clear cached path.
1445
- unset( $plugin_main_file->path );
1446
 
1447
- $this->_storage->plugin_main_file = $plugin_main_file;
 
1448
 
1449
  /**
1450
  * Clear global cached path.
@@ -1491,15 +1529,32 @@
1491
  array( &$this, '_submit_uninstall_reason_action' )
1492
  );
1493
 
 
 
 
 
 
1494
  if ( ! $this->is_addon() || $this->is_parent_plugin_installed() ) {
1495
  if ( ( $this->is_plugin() && self::is_plugins_page() ) ||
1496
  ( $this->is_theme() && self::is_themes_page() )
1497
  ) {
1498
  add_action( 'admin_footer', array( &$this, '_add_deactivation_feedback_dialog_box' ) );
 
 
 
 
1499
  }
1500
  }
1501
  }
1502
 
 
 
 
 
 
 
 
 
1503
  /**
1504
  * Leverage backtrace to find caller plugin file path.
1505
  *
@@ -1680,11 +1735,11 @@
1680
  private function get_caller_main_file_and_type() {
1681
  self::require_plugin_essentials();
1682
 
1683
- $all_plugins = get_plugins();
1684
  $all_plugins_paths = array();
1685
 
1686
  // Get active plugin's main files real full names (might be symlinks).
1687
- foreach ( $all_plugins as $relative_path => &$data ) {
1688
  if ( false === strpos( fs_normalize_path( $relative_path ), '/' ) ) {
1689
  /**
1690
  * Ignore plugins that don't have a folder (e.g. Hello Dolly) since they
@@ -1722,7 +1777,10 @@
1722
  'requir' . 'e_once',
1723
  'requir' . 'e',
1724
  'includ' . 'e_once',
1725
- 'includ' . 'e'
 
 
 
1726
  ) )
1727
  ) {
1728
  // Ignore call stack hooks and files inclusion.
@@ -2058,6 +2116,51 @@
2058
  exit;
2059
  }
2060
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2061
  /**
2062
  * @author Leo Fajardo (@leorw)
2063
  * @since 2.0.2
@@ -2134,16 +2237,18 @@
2134
  * @since 1.2.2
2135
  *
2136
  * @param string|number $id_or_slug
 
2137
  *
2138
  * @return number|false
2139
  */
2140
- private static function get_module_id( $id_or_slug ) {
2141
  if ( is_numeric( $id_or_slug ) ) {
2142
  return $id_or_slug;
2143
  }
2144
 
2145
  foreach ( self::$_instances as $instance ) {
2146
- if ( $instance->is_plugin() && ( $id_or_slug === $instance->get_slug() ) ) {
 
2147
  return $instance->get_id();
2148
  }
2149
  }
@@ -2170,15 +2275,16 @@
2170
  * @author Vova Feldman (@svovaf)
2171
  * @since 1.0.1
2172
  *
2173
- * @param $plugin_file
 
2174
  *
2175
  * @return false|Freemius
2176
  */
2177
- static function get_instance_by_file( $plugin_file ) {
2178
  $slug = self::find_slug_by_basename( $plugin_file );
2179
 
2180
  return ( false !== $slug ) ?
2181
- self::instance( self::get_module_id( $slug ) ) :
2182
  false;
2183
  }
2184
 
@@ -2292,10 +2398,13 @@
2292
  function is_site_activation_mode( $and_on = true ) {
2293
  return (
2294
  ( $this->is_on() || ! $and_on ) &&
2295
- ( ! $this->is_registered() ||
2296
- ( $this->is_only_premium() && ! $this->has_features_enabled_license() ) ) &&
2297
- ( ! $this->is_enable_anonymous() ||
2298
- ( ! $this->is_anonymous() && ! $this->is_pending_activation() ) )
 
 
 
2299
  );
2300
  }
2301
 
@@ -2330,7 +2439,7 @@
2330
  return false;
2331
  }
2332
 
2333
- if ( $this->is_network_anonymous() ) {
2334
  // Super-admin skipped the connection network wide -> not activation mode.
2335
  return false;
2336
  }
@@ -2451,7 +2560,7 @@
2451
  self::require_plugin_essentials();
2452
 
2453
  $active_plugin = array();
2454
- $all_plugins = get_plugins();
2455
  $active_plugins_basenames = self::get_active_plugins_basenames( $blog_id );
2456
 
2457
  foreach ( $active_plugins_basenames as $plugin_basename ) {
@@ -2501,7 +2610,7 @@
2501
  private static function get_all_plugins( $blog_id = 0 ) {
2502
  self::require_plugin_essentials();
2503
 
2504
- $all_plugins = get_plugins();
2505
 
2506
  $active_plugins_basenames = self::get_active_plugins_basenames( $blog_id );
2507
 
@@ -2533,7 +2642,7 @@
2533
  private static function get_network_plugins() {
2534
  self::require_plugin_essentials();
2535
 
2536
- $all_plugins = get_plugins();
2537
 
2538
  $network_active_basenames = is_multisite() ?
2539
  get_site_option( 'active_sitewide_plugins' ) :
@@ -2677,6 +2786,8 @@
2677
  }
2678
 
2679
  add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
 
 
2680
 
2681
  self::$_statics_loaded = true;
2682
  }
@@ -3165,7 +3276,7 @@
3165
  if ( $is_connected ) {
3166
  FS_GDPR_Manager::instance()->store_is_required( $pong->is_gdpr_required );
3167
  }
3168
-
3169
  $this->store_connectivity_info( $pong, $is_connected );
3170
 
3171
  return $this->_has_api_connection;
@@ -4068,14 +4179,15 @@
4068
  * @author Vova Feldman (@svovaf)
4069
  */
4070
  if ( $this->is_user_in_admin() &&
4071
- ! $this->is_addon() &&
4072
- $this->has_addons() &&
4073
- 'plugin-information' === fs_request_get( 'tab', false ) &&
4074
- $this->get_id() == fs_request_get( 'parent_plugin_id', false )
 
4075
  ) {
4076
  require_once WP_FS__DIR_INCLUDES . '/fs-plugin-info-dialog.php';
4077
 
4078
- new FS_Plugin_Info_Dialog( $this );
4079
  }
4080
 
4081
  // Check if Freemius is on for the current plugin.
@@ -4668,16 +4780,20 @@
4668
  $this->_plugin :
4669
  new FS_Plugin();
4670
 
 
 
4671
  $plugin->update( array(
4672
  'id' => $id,
4673
  'type' => $this->get_option( $plugin_info, 'type', $this->_module_type ),
4674
  'public_key' => $public_key,
4675
  'slug' => $this->_slug,
 
4676
  'parent_plugin_id' => $parent_id,
4677
  'version' => $this->get_plugin_version(),
4678
- 'title' => $this->get_plugin_name(),
4679
  'file' => $this->_plugin_basename,
4680
  'is_premium' => $this->get_bool_option( $plugin_info, 'is_premium', true ),
 
4681
  'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
4682
  'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
4683
  ) );
@@ -5058,7 +5174,7 @@
5058
  }
5059
 
5060
  $addon = $this->get_addon( $addon_id );
5061
- $premium_basename = "{$addon->slug}-premium/{$addon->slug}.php";
5062
 
5063
  if ( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $premium_basename ) ) ) {
5064
  return $premium_basename;
@@ -5066,9 +5182,9 @@
5066
 
5067
  $all_plugins = $this->get_all_plugins();
5068
 
5069
- foreach ( $all_plugins as $basename => &$data ) {
5070
  if ( $addon->slug === $data['slug'] ||
5071
- $addon->slug . '-premium' === $data['slug']
5072
  ) {
5073
  return $basename;
5074
  }
@@ -5308,7 +5424,7 @@
5308
  if ( ! isset( $this->_is_anonymous ) ) {
5309
  if ( $this->is_network_anonymous() ) {
5310
  $this->_is_anonymous = true;
5311
- } else {
5312
  if ( ! isset( $this->_storage->is_anonymous ) ) {
5313
  // Not skipped.
5314
  $this->_is_anonymous = false;
@@ -5774,6 +5890,8 @@
5774
  }
5775
  }
5776
 
 
 
5777
  foreach ( $users_2_blog_ids as $user_id => $blog_ids ) {
5778
  if ( 0 < $blog_ids[0] ) {
5779
  $this->switch_to_blog( $blog_ids[0] );
@@ -5787,6 +5905,8 @@
5787
  }
5788
 
5789
  if ( is_multisite() ) {
 
 
5790
  $this->do_action( "after_{$name}_cron_multisite" );
5791
  }
5792
  }
@@ -6185,6 +6305,7 @@
6185
  if ( ! $this->is_addon() &&
6186
  ! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
6187
  (
 
6188
  // Not registered nor anonymous.
6189
  ( ! $this->is_registered() && ! $this->is_anonymous() ) ||
6190
  // OR, network level and in network upgrade mode.
@@ -6201,14 +6322,18 @@
6201
  * @since 1.2.2
6202
  */
6203
  if ( $this->is_theme()
6204
- && $this->is_only_premium()
6205
  && ! $this->has_settings_menu()
6206
  && ! isset( $_REQUEST['fs_action'] )
6207
  && $this->can_activate_previous_theme()
6208
  ) {
6209
- $this->activate_previous_theme();
 
 
 
6210
 
6211
- return;
 
 
6212
  }
6213
 
6214
  if ( ! fs_is_network_admin() &&
@@ -6308,7 +6433,7 @@
6308
  $this->_module_type,
6309
  sprintf( '<b><a href="%s">%s</a></b>',
6310
  $this->get_activation_url(),
6311
- sprintf( $this->get_text_inline( 'Opt in to make "%s" Better!', 'optin-x-now' ), $this->get_plugin_name() )
6312
  )
6313
  ),
6314
  'connect_account',
@@ -6770,6 +6895,20 @@
6770
  }
6771
  }
6772
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6773
  if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
6774
  /**
6775
  * If no previous version of plugin's version exist, it means that it's either
@@ -7039,7 +7178,7 @@
7039
  private function remove_sdk_reference() {
7040
  global $fs_active_plugins;
7041
 
7042
- foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
7043
  if ( $this->_plugin_basename == $data->plugin_path ) {
7044
  unset( $fs_active_plugins->plugins[ $sdk_path ] );
7045
  break;
@@ -7221,6 +7360,23 @@
7221
  }
7222
  }
7223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7224
  /**
7225
  * Clears the anonymous mode and redirects to the opt-in screen.
7226
  *
@@ -7234,6 +7390,8 @@
7234
 
7235
  $this->reset_anonymous_mode( fs_is_network_admin() );
7236
 
 
 
7237
  fs_redirect( $this->get_activation_url() );
7238
  }
7239
 
@@ -7692,14 +7850,13 @@
7692
  }
7693
  }
7694
 
7695
- return array_merge( array(
 
 
7696
  'version' => $this->get_plugin_version(),
7697
  'is_premium' => $this->is_premium(),
7698
  'language' => get_bloginfo( 'language' ),
7699
  'charset' => get_bloginfo( 'charset' ),
7700
- 'platform_version' => get_bloginfo( 'version' ),
7701
- 'sdk_version' => $this->version,
7702
- 'programming_language_version' => phpversion(),
7703
  'title' => get_bloginfo( 'name' ),
7704
  'url' => get_site_url(),
7705
  // Special params.
@@ -7750,12 +7907,10 @@
7750
  // }
7751
 
7752
  // Common properties.
7753
- $common = array_merge( array(
7754
- 'version' => $this->get_plugin_version(),
7755
- 'is_premium' => $this->is_premium(),
7756
- 'sdk_version' => $this->version,
7757
- 'programming_language_version' => phpversion(),
7758
- 'platform_version' => get_bloginfo( 'version' ),
7759
  ), $override );
7760
 
7761
 
@@ -8171,14 +8326,59 @@
8171
  // @todo Decide if we want to delete plugin information from db.
8172
  }
8173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8174
  /**
8175
  * @author Vova Feldman (@svovaf)
8176
  * @since 1.1.1
 
8177
  *
8178
  * @return string
8179
  */
8180
  function premium_plugin_basename() {
8181
- return "{$this->_slug}-premium/" . basename( $this->_free_plugin_basename );
 
 
 
 
 
 
 
8182
  }
8183
 
8184
  /**
@@ -8317,13 +8517,29 @@
8317
  }
8318
 
8319
  /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8320
  * @author Vova Feldman (@svovaf)
8321
  * @since 1.2.1.7
8322
  *
8323
  * @return string Plugin slug.
8324
  */
8325
  function get_target_folder_name() {
8326
- return $this->_slug . ( $this->can_use_premium_code() ? '-premium' : '' );
 
 
8327
  }
8328
 
8329
  /**
@@ -8394,31 +8610,63 @@
8394
  * @author Vova Feldman (@svovaf)
8395
  * @since 1.0.9
8396
  *
 
 
8397
  * @return string
8398
  */
8399
- function get_plugin_name() {
8400
  $this->_logger->entrance();
8401
 
 
 
 
 
 
8402
  if ( ! isset( $this->_plugin_name ) ) {
8403
- $plugin_data = $this->get_plugin_data();
 
 
 
 
 
 
 
 
8404
 
8405
- // Get name.
8406
- $this->_plugin_name = $plugin_data['Name'];
8407
 
8408
- // Check if plugin name contains "(Premium)" suffix and remove it.
8409
- $suffix = ' (premium)';
8410
- $suffix_len = strlen( $suffix );
 
 
 
 
 
 
 
8411
 
8412
- if ( strlen( $plugin_data['Name'] ) > $suffix_len &&
8413
- $suffix === substr( strtolower( $plugin_data['Name'] ), - $suffix_len )
8414
- ) {
8415
- $this->_plugin_name = substr( $plugin_data['Name'], 0, - $suffix_len );
8416
- }
8417
 
8418
- $this->_logger->departure( 'Name = ' . $this->_plugin_name );
 
 
 
 
 
 
 
 
 
 
8419
  }
8420
 
8421
- return $this->_plugin_name;
8422
  }
8423
 
8424
  /**
@@ -9124,7 +9372,16 @@
9124
  * @return bool
9125
  */
9126
  function is_premium() {
9127
- return $this->_plugin->is_premium;
 
 
 
 
 
 
 
 
 
9128
  }
9129
 
9130
  /**
@@ -10514,6 +10771,56 @@
10514
  fs_require_template( 'forms/resend-key.php', $vars );
10515
  }
10516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10517
  /**
10518
  * @author Leo Fajardo (@leorw)
10519
  * @since 2.0.2
@@ -10616,7 +10923,7 @@
10616
  */
10617
  function _activate_license_ajax_action() {
10618
  $this->_logger->entrance();
10619
-
10620
  $this->check_ajax_referer( 'activate_license' );
10621
 
10622
  $license_key = trim( fs_request_get( 'license_key' ) );
@@ -10698,7 +11005,7 @@
10698
  'license_key' => $fs->apply_filters( 'license_key', $license_key )
10699
  );
10700
 
10701
- $install = $api->call( '/', 'put', $params );
10702
 
10703
  if ( FS_Api::is_api_error( $install ) ) {
10704
  $error = FS_Api::is_api_error_object( $install ) ?
@@ -10791,6 +11098,10 @@
10791
  }
10792
  }
10793
 
 
 
 
 
10794
  $result = array(
10795
  'success' => ( false === $error )
10796
  );
@@ -11343,6 +11654,40 @@
11343
  return $this->get_upgrade_url( WP_FS__PERIOD_ANNUALLY, true );
11344
  }
11345
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11346
  /**
11347
  * Plugin's pricing URL.
11348
  *
@@ -11977,7 +12322,13 @@
11977
  * @author Vova Feldman (@svovaf)
11978
  */
11979
  $args = array(
11980
- 'public' => 1,
 
 
 
 
 
 
11981
  'archived' => 0,
11982
  'mature' => 0,
11983
  'spam' => 0,
@@ -13122,6 +13473,12 @@
13122
  }
13123
  }
13124
 
 
 
 
 
 
 
13125
  if ( $this->is_theme() ) {
13126
  $this->_register_account_hooks();
13127
  }
@@ -13187,6 +13544,30 @@
13187
 
13188
  }
13189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13190
  /**
13191
  * @author Vova Feldman (@svovaf)
13192
  * @since 1.1.7.4
@@ -13208,7 +13589,9 @@
13208
  // Return to the module's main page.
13209
  $this->get_after_activation_url( 'after_connect_url', array( 'fs_action' => $activation_action ) );
13210
 
13211
- $params = array(
 
 
13212
  'user_firstname' => $current_user->user_firstname,
13213
  'user_lastname' => $current_user->user_lastname,
13214
  'user_nickname' => $current_user->user_nicename,
@@ -13223,13 +13606,10 @@
13223
  'account',
13224
  array( 'fs_action' => 'sync_user' )
13225
  ), 'sync_user' ),
13226
- 'platform_version' => get_bloginfo( 'version' ),
13227
- 'sdk_version' => $this->version,
13228
- 'programming_language_version' => phpversion(),
13229
  'is_premium' => $this->is_premium(),
13230
  'is_active' => true,
13231
  'is_uninstalled' => false,
13232
- );
13233
 
13234
  if ( true === $network_level_or_blog_id ) {
13235
  if ( ! isset( $override_with['sites'] ) ) {
@@ -13415,7 +13795,7 @@
13415
  'timeout' => WP_FS__DEBUG_SDK ? 60 : 30,
13416
  );
13417
 
13418
- $url = WP_FS__ADDRESS . '/action/service/user/install/';
13419
  $response = self::safe_remote_post( $url, $request );
13420
 
13421
  if ( is_wp_error( $response ) ) {
@@ -14572,7 +14952,7 @@
14572
 
14573
  $hook = false;
14574
 
14575
- if ( ! $this->_menu->has_menu() ) {
14576
  // Add the opt-in page without a menu item.
14577
  $hook = FS_Admin_Menu_Manager::add_subpage(
14578
  null,
@@ -14920,15 +15300,25 @@
14920
  }
14921
  }
14922
 
14923
- if ( 0 < count( $this->_menu_items ) ) {
14924
- if ( ! $this->_menu->is_top_level() ) {
14925
- fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
 
 
 
 
 
 
 
 
 
14926
 
14927
- // Append submenu items right after the plugin's submenu item.
14928
- $this->order_sub_submenu_items();
14929
- } else {
14930
- // Append submenu items.
14931
- $this->embed_submenu_items();
 
14932
  }
14933
  }
14934
  }
@@ -14954,16 +15344,6 @@
14954
 
14955
  foreach ( $this->_menu_items as $priority => $items ) {
14956
  foreach ( $items as $item ) {
14957
- if ( $item['show_submenu'] && $is_first_submenu_item ) {
14958
- if ( $this->_is_network_active && ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
14959
- $item['menu_slug'] = '';
14960
-
14961
- $this->_menu->override_menu_item( $item['render_function'] );
14962
- }
14963
-
14964
- $is_first_submenu_item = false;
14965
- }
14966
-
14967
  $capability = ( ! empty( $item['capability'] ) ? $item['capability'] : $top_level_menu_capability );
14968
 
14969
  $menu_item = sprintf(
@@ -14974,12 +15354,13 @@
14974
  $item['menu_title']
14975
  );
14976
 
14977
- $menu_slug = $this->_menu->get_slug( $item['menu_slug'] );
 
14978
 
14979
  if ( ! isset( $item['url'] ) ) {
14980
  $hook = FS_Admin_Menu_Manager::add_subpage(
14981
  $item['show_submenu'] ?
14982
- $this->get_top_level_menu_slug() :
14983
  null,
14984
  $item['page_title'],
14985
  $menu_item,
@@ -14994,7 +15375,7 @@
14994
  } else {
14995
  FS_Admin_Menu_Manager::add_subpage(
14996
  $item['show_submenu'] ?
14997
- $this->get_top_level_menu_slug() :
14998
  null,
14999
  $item['page_title'],
15000
  $menu_item,
@@ -15003,6 +15384,24 @@
15003
  array( $this, '' )
15004
  );
15005
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15006
  }
15007
  }
15008
  }
@@ -16245,11 +16644,12 @@
16245
  * @param bool|number $plugin_id
16246
  * @param bool $flush Since 1.1.7.3
16247
  * @param int $expiration Since 1.2.2.7
 
16248
  *
16249
  * @return object|false New plugin tag info if exist.
16250
  */
16251
- private function _fetch_newer_version( $plugin_id = false, $flush = true, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
16252
- $latest_tag = $this->_fetch_latest_version( $plugin_id, $flush, $expiration );
16253
 
16254
  if ( ! is_object( $latest_tag ) ) {
16255
  return false;
@@ -16274,17 +16674,18 @@
16274
  * @param bool|number $plugin_id
16275
  * @param bool $flush Since 1.1.7.3
16276
  * @param int $expiration Since 1.2.2.7
 
16277
  *
16278
  * @return bool|FS_Plugin_Tag
16279
  */
16280
- function get_update( $plugin_id = false, $flush = true, $expiration = WP_FS__TIME_24_HOURS_IN_SEC ) {
16281
  $this->_logger->entrance();
16282
 
16283
  if ( ! is_numeric( $plugin_id ) ) {
16284
  $plugin_id = $this->_plugin->id;
16285
  }
16286
 
16287
- $this->check_updates( true, $plugin_id, $flush, $expiration );
16288
  $updates = $this->get_all_updates();
16289
 
16290
  return isset( $updates[ $plugin_id ] ) && is_object( $updates[ $plugin_id ] ) ? $updates[ $plugin_id ] : false;
@@ -17068,6 +17469,18 @@
17068
  $api = $this->get_api_site_scope();
17069
  $license = $api->call( "/licenses/{$this->_site->license_id}.json", 'delete' );
17070
 
 
 
 
 
 
 
 
 
 
 
 
 
17071
  if ( isset( $license->error ) ) {
17072
  $this->_admin_notices->add(
17073
  $this->get_text_inline( 'It looks like the license deactivation failed.', 'license-deactivation-failed-message' ) . '<br> ' .
@@ -17088,7 +17501,7 @@
17088
  }
17089
  }
17090
 
17091
- // Updated site plan to default.
17092
  $this->_sync_plans();
17093
  $this->_site->plan_id = $this->_plans[0]->id;
17094
  // Unlink license from site.
@@ -17115,13 +17528,17 @@
17115
  * @author Vova Feldman (@svovaf)
17116
  * @since 1.0.4
17117
  *
 
 
17118
  * @uses FS_Api
17119
  */
17120
  private function _downgrade_site() {
17121
  $this->_logger->entrance();
17122
 
 
 
17123
  $api = $this->get_api_site_scope();
17124
- $site = $api->call( 'downgrade.json', 'put' );
17125
 
17126
  $plan_downgraded = false;
17127
  $plan = false;
@@ -17139,29 +17556,47 @@
17139
  ( is_object( $subscription ) && ! isset( $subscription->error ) && ! $subscription->is_active() );
17140
  } else {
17141
  // handle different error cases.
17142
-
 
 
 
17143
  }
17144
 
17145
- if ( $plan_downgraded ) {
17146
- // Remove previous sticky message about upgrade (if exist).
17147
- $this->_admin_notices->remove_sticky( 'plan_upgraded' );
17148
-
17149
- $this->_admin_notices->add(
17150
- sprintf( $this->get_text_inline( 'Your plan was successfully downgraded. Your %s plan license will expire in %s.', 'plan-x-downgraded-message' ),
17151
- $plan->title,
17152
- human_time_diff( time(), strtotime( $this->_license->expiration ) )
17153
  )
17154
  );
 
17155
 
17156
- // Store site updates.
17157
- $this->_store_site();
17158
- } else {
17159
- $this->_admin_notices->add(
17160
- $this->get_text_inline( 'Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes.', 'plan-downgraded-failure-message' ),
17161
- $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
17162
- 'error'
17163
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17164
  }
 
 
17165
  }
17166
 
17167
  /**
@@ -17268,22 +17703,19 @@
17268
  * @author Vova Feldman (@svovaf)
17269
  * @since 1.0.9
17270
  *
 
 
17271
  * @uses FS_Api
17272
  */
17273
  private function _cancel_trial() {
17274
  $this->_logger->entrance();
17275
 
17276
- // Alias.
17277
- $oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
17278
-
17279
  if ( ! $this->is_trial() ) {
17280
- $this->_admin_notices->add(
17281
- $this->get_text_inline( 'It looks like you are not in trial mode anymore so there\'s nothing to cancel :)', 'trial-cancel-no-trial-message' ),
17282
- $oops_text,
17283
- 'error'
17284
  );
17285
-
17286
- return;
17287
  }
17288
 
17289
  $trial_plan = $this->get_trial_plan();
@@ -17314,31 +17746,33 @@
17314
  // @todo handle different error cases.
17315
  }
17316
 
17317
- if ( $trial_cancelled ) {
17318
- // Remove previous sticky messages about upgrade or trial (if exist).
17319
- $this->_admin_notices->remove_sticky( array(
17320
- 'trial_started',
17321
- 'trial_promotion',
17322
- 'plan_upgraded',
17323
- ) );
17324
 
17325
- // Store site updates.
17326
- $this->_store_site();
 
 
 
 
17327
 
17328
- if ( ! $this->is_addon() ||
17329
- ! $this->deactivate_premium_only_addon_without_license( true )
17330
- ) {
17331
- $this->_admin_notices->add(
17332
- sprintf( $this->get_text_inline( 'Your %s free trial was successfully cancelled.', 'trial-cancel-message' ), $trial_plan->title )
17333
- );
17334
- }
17335
- } else {
17336
  $this->_admin_notices->add(
17337
- $this->get_text_inline( 'Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes.', 'trial-cancel-failure-message' ),
17338
- $oops_text,
17339
- 'error'
17340
  );
17341
  }
 
 
17342
  }
17343
 
17344
  /**
@@ -17409,15 +17843,19 @@
17409
  * @since 1.0.4
17410
  *
17411
  * @param bool|number $addon_id
17412
- * @param bool $flush Since 1.1.7.3
17413
- * @param int $expiration Since 1.2.2.7
 
 
17414
  *
17415
  * @return object|false Plugin latest tag info.
17416
  */
17417
  function _fetch_latest_version(
17418
  $addon_id = false,
17419
  $flush = true,
17420
- $expiration = WP_FS__TIME_24_HOURS_IN_SEC
 
 
17421
  ) {
17422
  $this->_logger->entrance();
17423
 
@@ -17468,8 +17906,18 @@
17468
  $this->switch_to_blog( $switch_to_blog_id );
17469
  }
17470
 
 
 
 
 
 
 
 
 
 
 
17471
  $tag = $this->get_api_site_or_plugin_scope()->get(
17472
- $this->_get_latest_version_endpoint( $addon_id, 'json' ),
17473
  $flush,
17474
  $expiration
17475
  );
@@ -17605,17 +18053,19 @@
17605
  * @param bool|number $plugin_id
17606
  * @param bool $flush Since 1.1.7.3
17607
  * @param int $expiration Since 1.2.2.7
 
17608
  */
17609
  private function check_updates(
17610
  $background = false,
17611
  $plugin_id = false,
17612
  $flush = true,
17613
- $expiration = WP_FS__TIME_24_HOURS_IN_SEC
 
17614
  ) {
17615
  $this->_logger->entrance();
17616
 
17617
  // Check if there's a newer version for download.
17618
- $new_version = $this->_fetch_newer_version( $plugin_id, $flush, $expiration );
17619
 
17620
  $update = null;
17621
  if ( is_object( $new_version ) ) {
@@ -18103,6 +18553,8 @@
18103
  $this->_site = null;
18104
  $this->_user = null;
18105
 
 
 
18106
  fs_redirect( $this->get_activation_url() );
18107
  } else {
18108
  if ( $this->is_addon_activated( $plugin_id ) ) {
@@ -18122,15 +18574,23 @@
18122
  check_admin_referer( $action );
18123
  }
18124
 
18125
- if ( $plugin_id == $this->get_id() ) {
18126
- $this->_downgrade_site();
 
 
 
18127
 
18128
- if ( is_numeric( $blog_id ) ) {
18129
- $this->switch_to_blog( $this->_storage->network_install_blog_id );
18130
- }
18131
- } else if ( $this->is_addon_activated( $plugin_id ) ) {
18132
- $fs_addon = self::get_instance_by_id( $plugin_id );
18133
- $fs_addon->_downgrade_site();
 
 
 
 
 
18134
  }
18135
 
18136
  return;
@@ -18162,7 +18622,11 @@
18162
  $this->_site = null;
18163
  $this->_user = null;
18164
 
18165
- fs_redirect( $this->get_activation_url() );
 
 
 
 
18166
  }
18167
  } else {
18168
  if ( $this->is_addon_activated( $plugin_id ) ) {
@@ -18260,13 +18724,13 @@
18260
  #region Actions that might be called from external links (e.g. email)
18261
 
18262
  case 'cancel_trial':
18263
- if ( $plugin_id == $this->get_id() ) {
18264
- $this->_cancel_trial();
18265
- } else {
18266
- if ( $this->is_addon_activated( $plugin_id ) ) {
18267
- $fs_addon = self::get_instance_by_id( $plugin_id );
18268
- $fs_addon->_cancel_trial();
18269
- }
18270
  }
18271
 
18272
  return;
@@ -19262,11 +19726,23 @@
19262
 
19263
  if ( ! $this->is_addon() || ! $this->has_free_plan() ) {
19264
  $first_time_path = $this->_menu->get_first_time_path();
19265
- $url = $this->is_activation_mode() ?
19266
- $this->get_activation_url() :
19267
- ( empty( $first_time_path ) ?
19268
- $this->_get_admin_page_url() :
19269
- $first_time_path );
 
 
 
 
 
 
 
 
 
 
 
 
19270
  } else {
19271
  $plugin_fs = false;
19272
 
@@ -19386,6 +19862,21 @@
19386
  $this->_admin_notices->add_sticky( $message, $id, $title, $type );
19387
  }
19388
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19389
  /**
19390
  * Helper function that returns the final steps for the upgrade completion.
19391
  *
@@ -19411,25 +19902,52 @@
19411
  $plan_title = $this->get_plan_title();
19412
  }
19413
 
19414
- // @since 1.2.1.5 The free version is auto deactivated.
19415
- $deactivation_step = version_compare( $this->version, '1.2.1.5', '<' ) ?
19416
- ( '<li>' . $this->esc_html_inline( 'Deactivate the free version', 'deactivate-free-version' ) . '.</li>' ) :
19417
- '';
 
 
 
 
 
19418
 
19419
- return sprintf(
19420
- ' %s: <ol><li>%s.</li>%s<li>%s (<a href="%s" target="_blank">%s</a>).</li></ol>',
19421
- $this->get_text_inline( 'Please follow these steps to complete the upgrade', 'follow-steps-to-complete-upgrade' ),
19422
- ( empty( $activate_license_string ) ? '' : $activate_license_string . '</li><li>' ) .
19423
- $this->get_latest_download_link( sprintf(
19424
- /* translators: %s: Plan title */
19425
- $this->get_text_inline( 'Download the latest %s version', 'download-latest-x-version' ),
19426
- $plan_title
19427
- ) ),
19428
- $deactivation_step,
19429
- $this->get_text_inline( 'Upload and activate the downloaded version', 'upload-and-activate' ),
19430
- '//bit.ly/upload-wp-' . $this->_module_type . 's',
19431
- $this->get_text_inline( 'How to upload and activate?', 'howto-upload-activate' )
19432
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19433
  }
19434
 
19435
  /**
33
  * @var string
34
  */
35
  private $_plugin_basename;
36
+ /**
37
+ * @since 2.2.1
38
+ *
39
+ * @var string
40
+ */
41
+ private $_premium_plugin_basename;
42
  /**
43
  * @since 1.0.0
44
  *
677
  version_compare( $sdk_version, '1.2.3', '>=' )
678
  ) {
679
  /**
680
+ * Starting from version 1.2.3, paths are stored as relative instead of absolute and some of them can be
681
+ * invalid.
682
  *
683
  * @author Leo Fajardo (@leorw)
684
  */
685
+ $this->remove_invalid_paths();
686
  }
687
 
688
  if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
706
 
707
  }
708
  }
709
+
710
+ if (
711
+ version_compare( $sdk_prev_version, '2.2.1', '<' ) &&
712
+ version_compare( $sdk_version, '2.2.1', '>=' )
713
+ ) {
714
+ /**
715
+ * Clear the file cache without storing the previous path since it could be a wrong path. For example,
716
+ * in the versions of the SDK lower than 2.2.1, it's possible for the path of an add-on to be the same
717
+ * as the parent plugin's when the add-on was auto-installed since the relevant method names were not
718
+ * skipped in the logic that determines the right path in the `get_caller_main_file_and_type` method
719
+ * (e.g. `try_activate_plugin`). Since it was an auto-installation, the caller was the parent plugin
720
+ * and so its path was used. In case the stored path is wrong, clearing the cache will resolve issues
721
+ * related to data mix-up between plugins (e.g. titles and versions of an add-on and its parent plugin).
722
+ *
723
+ * @author Leo Fajardo (@leorw)
724
+ * @since 2.2.1
725
+ */
726
+ $this->clear_module_main_file_cache( false );
727
+ }
728
  }
729
 
730
  /**
850
  }
851
 
852
  /**
853
+ * Remove invalid paths.
854
  *
855
  * @author Leo Fajardo (@leorw)
856
  * @since 1.2.3
857
  */
858
+ private function remove_invalid_paths() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
859
  // Remove invalid path that is still associated with the current slug if there's any.
860
  $file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
861
  foreach ( $file_slug_map as $plugin_basename => $slug ) {
1238
  <?php
1239
  }
1240
 
1241
+ /**
1242
+ * Opens the support forum subemenu item in a new browser page.
1243
+ *
1244
+ * @author Vova Feldman (@svovaf)
1245
+ * @since 2.1.4
1246
+ */
1247
+ static function _open_support_forum_in_new_page() {
1248
+ ?>
1249
+ <script type="text/javascript">
1250
+ (function ($) {
1251
+ $('.fs-submenu-item.wp-support-forum').parent().attr('target', '_blank');
1252
+ })(jQuery);
1253
+ </script>
1254
+ <?php
1255
+ }
1256
+
1257
  /**
1258
  * @author Vova Feldman (@svovaf)
1259
  * @since 1.0.9
1452
 
1453
  /**
1454
  * @since 1.2.0 Invalidate module's main file cache, otherwise, FS_Plugin_Updater will not fetch updates.
1455
+ *
1456
+ * @param bool $store_prev_path
1457
  */
1458
+ private function clear_module_main_file_cache( $store_prev_path = true ) {
1459
  if ( ! isset( $this->_storage->plugin_main_file ) ||
1460
+ empty( $this->_storage->plugin_main_file->path )
1461
  ) {
1462
  return;
1463
  }
1464
 
1465
+ if ( ! $store_prev_path ) {
1466
+ /**
1467
+ * Storing the previous path is not needed when clearing the cache after an SDK version update since
1468
+ * the main purpose of the cache clearing in that event is to correct a wrong plugin main file path
1469
+ * which causes data mix-up between plugins (e.g. titles and versions of an add-on and its parent plugin).
1470
+ *
1471
+ * @author Leo Fajardo (@leorw)
1472
+ * @since 2.2.1
1473
+ */
1474
+ unset( $this->_storage->plugin_main_file->path );
1475
+ } else {
1476
+ $plugin_main_file = clone $this->_storage->plugin_main_file;
1477
 
1478
+ // Store cached path (2nd layer cache).
1479
+ $plugin_main_file->prev_path = $plugin_main_file->path;
1480
 
1481
+ // Clear cached path.
1482
+ unset( $plugin_main_file->path );
1483
 
1484
+ $this->_storage->plugin_main_file = $plugin_main_file;
1485
+ }
1486
 
1487
  /**
1488
  * Clear global cached path.
1529
  array( &$this, '_submit_uninstall_reason_action' )
1530
  );
1531
 
1532
+ $this->add_ajax_action(
1533
+ 'cancel_subscription_or_trial',
1534
+ array( &$this, 'cancel_subscription_or_trial_ajax_action' )
1535
+ );
1536
+
1537
  if ( ! $this->is_addon() || $this->is_parent_plugin_installed() ) {
1538
  if ( ( $this->is_plugin() && self::is_plugins_page() ) ||
1539
  ( $this->is_theme() && self::is_themes_page() )
1540
  ) {
1541
  add_action( 'admin_footer', array( &$this, '_add_deactivation_feedback_dialog_box' ) );
1542
+
1543
+ if ( $this->is_plugin() ) {
1544
+ add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_plugin_upgrade_notice_style' ) );
1545
+ }
1546
  }
1547
  }
1548
  }
1549
 
1550
+ /**
1551
+ * @author Leo Fajardo (@leorw)
1552
+ * @since 2.1.4
1553
+ */
1554
+ function _enqueue_plugin_upgrade_notice_style() {
1555
+ fs_enqueue_local_style( 'fs_plugin_upgrade_notice', '/admin/plugin-upgrade-notice.css' );
1556
+ }
1557
+
1558
  /**
1559
  * Leverage backtrace to find caller plugin file path.
1560
  *
1735
  private function get_caller_main_file_and_type() {
1736
  self::require_plugin_essentials();
1737
 
1738
+ $all_plugins = fs_get_plugins( true );
1739
  $all_plugins_paths = array();
1740
 
1741
  // Get active plugin's main files real full names (might be symlinks).
1742
+ foreach ( $all_plugins as $relative_path => $data ) {
1743
  if ( false === strpos( fs_normalize_path( $relative_path ), '/' ) ) {
1744
  /**
1745
  * Ignore plugins that don't have a folder (e.g. Hello Dolly) since they
1777
  'requir' . 'e_once',
1778
  'requir' . 'e',
1779
  'includ' . 'e_once',
1780
+ 'includ' . 'e',
1781
+ 'install_and_activate_plugin',
1782
+ 'try_activate_plugin',
1783
+ 'activate_plugin'
1784
  ) )
1785
  ) {
1786
  // Ignore call stack hooks and files inclusion.
2116
  exit;
2117
  }
2118
 
2119
+ /**
2120
+ * @author Leo Fajardo (@leorw)
2121
+ * @since 2.1.4
2122
+ */
2123
+ function cancel_subscription_or_trial_ajax_action() {
2124
+ $this->_logger->entrance();
2125
+
2126
+ $this->check_ajax_referer( 'cancel_subscription_or_trial' );
2127
+
2128
+ $result = $this->cancel_subscription_or_trial( fs_request_get( 'plugin_id', $this->get_id() ), false );
2129
+
2130
+ if ( $this->is_api_error( $result ) ) {
2131
+ $this->shoot_ajax_failure( $result->error->message );
2132
+ }
2133
+
2134
+ $this->shoot_ajax_success();
2135
+ }
2136
+
2137
+ /**
2138
+ * @author Leo Fajardo (@leorw)
2139
+ * @since 2.1.4
2140
+ *
2141
+ * @param number $plugin_id
2142
+ *
2143
+ * @return object
2144
+ */
2145
+ private function cancel_subscription_or_trial( $plugin_id ) {
2146
+ $fs = null;
2147
+ if ( $plugin_id == $this->get_id() ) {
2148
+ $fs = $this;
2149
+ } else if ( $this->is_addon_activated( $plugin_id ) ) {
2150
+ $fs = self::get_instance_by_id( $plugin_id );
2151
+ }
2152
+
2153
+ $result = null;
2154
+
2155
+ if ( ! is_null( $fs ) ) {
2156
+ $result = $fs->is_paid_trial() ?
2157
+ $fs->_cancel_trial() :
2158
+ $fs->_downgrade_site();
2159
+ }
2160
+
2161
+ return $result;
2162
+ }
2163
+
2164
  /**
2165
  * @author Leo Fajardo (@leorw)
2166
  * @since 2.0.2
2237
  * @since 1.2.2
2238
  *
2239
  * @param string|number $id_or_slug
2240
+ * @param string $module_type
2241
  *
2242
  * @return number|false
2243
  */
2244
+ private static function get_module_id( $id_or_slug, $module_type = WP_FS__MODULE_TYPE_PLUGIN ) {
2245
  if ( is_numeric( $id_or_slug ) ) {
2246
  return $id_or_slug;
2247
  }
2248
 
2249
  foreach ( self::$_instances as $instance ) {
2250
+ // Also check the module type since there can be a plugin and a theme with the same slug.
2251
+ if ( ( $module_type === $instance->get_module_type() ) && ( $id_or_slug === $instance->get_slug() ) ) {
2252
  return $instance->get_id();
2253
  }
2254
  }
2275
  * @author Vova Feldman (@svovaf)
2276
  * @since 1.0.1
2277
  *
2278
+ * @param string $plugin_file
2279
+ * @param string $module_type
2280
  *
2281
  * @return false|Freemius
2282
  */
2283
+ static function get_instance_by_file( $plugin_file, $module_type = WP_FS__MODULE_TYPE_PLUGIN ) {
2284
  $slug = self::find_slug_by_basename( $plugin_file );
2285
 
2286
  return ( false !== $slug ) ?
2287
+ self::instance( self::get_module_id( $slug, $module_type ) ) :
2288
  false;
2289
  }
2290
 
2398
  function is_site_activation_mode( $and_on = true ) {
2399
  return (
2400
  ( $this->is_on() || ! $and_on ) &&
2401
+ ( $this->is_premium() && true === $this->_storage->require_license_activation ) ||
2402
+ (
2403
+ ( ! $this->is_registered() ||
2404
+ ( $this->is_only_premium() && ! $this->has_features_enabled_license() ) ) &&
2405
+ ( ! $this->is_enable_anonymous() ||
2406
+ ( ! $this->is_anonymous() && ! $this->is_pending_activation() ) )
2407
+ )
2408
  );
2409
  }
2410
 
2439
  return false;
2440
  }
2441
 
2442
+ if ( $this->is_network_anonymous() && true !== $this->_storage->require_license_activation ) {
2443
  // Super-admin skipped the connection network wide -> not activation mode.
2444
  return false;
2445
  }
2560
  self::require_plugin_essentials();
2561
 
2562
  $active_plugin = array();
2563
+ $all_plugins = fs_get_plugins();
2564
  $active_plugins_basenames = self::get_active_plugins_basenames( $blog_id );
2565
 
2566
  foreach ( $active_plugins_basenames as $plugin_basename ) {
2610
  private static function get_all_plugins( $blog_id = 0 ) {
2611
  self::require_plugin_essentials();
2612
 
2613
+ $all_plugins = fs_get_plugins();
2614
 
2615
  $active_plugins_basenames = self::get_active_plugins_basenames( $blog_id );
2616
 
2642
  private static function get_network_plugins() {
2643
  self::require_plugin_essentials();
2644
 
2645
+ $all_plugins = fs_get_plugins();
2646
 
2647
  $network_active_basenames = is_multisite() ?
2648
  get_site_option( 'active_sitewide_plugins' ) :
2786
  }
2787
 
2788
  add_action( 'admin_footer', array( 'Freemius', '_enrich_ajax_url' ) );
2789
+ add_action( 'admin_footer', array( 'Freemius', '_open_support_forum_in_new_page' ) );
2790
+
2791
 
2792
  self::$_statics_loaded = true;
2793
  }
3276
  if ( $is_connected ) {
3277
  FS_GDPR_Manager::instance()->store_is_required( $pong->is_gdpr_required );
3278
  }
3279
+
3280
  $this->store_connectivity_info( $pong, $is_connected );
3281
 
3282
  return $this->_has_api_connection;
4179
  * @author Vova Feldman (@svovaf)
4180
  */
4181
  if ( $this->is_user_in_admin() &&
4182
+ 'plugin-information' === fs_request_get( 'tab', false ) &&
4183
+ (
4184
+ ( $this->is_addon() && $this->get_slug() == fs_request_get( 'plugin', false ) ) ||
4185
+ ( $this->has_addons() && $this->get_id() == fs_request_get( 'parent_plugin_id', false ) )
4186
+ )
4187
  ) {
4188
  require_once WP_FS__DIR_INCLUDES . '/fs-plugin-info-dialog.php';
4189
 
4190
+ new FS_Plugin_Info_Dialog( $this->is_addon() ? $this->get_parent_instance() : $this );
4191
  }
4192
 
4193
  // Check if Freemius is on for the current plugin.
4780
  $this->_plugin :
4781
  new FS_Plugin();
4782
 
4783
+ $premium_suffix = $this->get_option( $plugin_info, 'premium_suffix', '(Premium)' );
4784
+
4785
  $plugin->update( array(
4786
  'id' => $id,
4787
  'type' => $this->get_option( $plugin_info, 'type', $this->_module_type ),
4788
  'public_key' => $public_key,
4789
  'slug' => $this->_slug,
4790
+ 'premium_slug' => $this->get_option( $plugin_info, 'premium_slug', "{$this->_slug}-premium" ),
4791
  'parent_plugin_id' => $parent_id,
4792
  'version' => $this->get_plugin_version(),
4793
+ 'title' => $this->get_plugin_name( $premium_suffix ),
4794
  'file' => $this->_plugin_basename,
4795
  'is_premium' => $this->get_bool_option( $plugin_info, 'is_premium', true ),
4796
+ 'premium_suffix' => $premium_suffix,
4797
  'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
4798
  'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
4799
  ) );
5174
  }
5175
 
5176
  $addon = $this->get_addon( $addon_id );
5177
+ $premium_basename = "{$addon->premium_slug}/{$addon->slug}.php";
5178
 
5179
  if ( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $premium_basename ) ) ) {
5180
  return $premium_basename;
5182
 
5183
  $all_plugins = $this->get_all_plugins();
5184
 
5185
+ foreach ( $all_plugins as $basename => $data ) {
5186
  if ( $addon->slug === $data['slug'] ||
5187
+ $addon->premium_slug === $data['slug']
5188
  ) {
5189
  return $basename;
5190
  }
5424
  if ( ! isset( $this->_is_anonymous ) ) {
5425
  if ( $this->is_network_anonymous() ) {
5426
  $this->_is_anonymous = true;
5427
+ } else if ( ! fs_is_network_admin() ) {
5428
  if ( ! isset( $this->_storage->is_anonymous ) ) {
5429
  // Not skipped.
5430
  $this->_is_anonymous = false;
5890
  }
5891
  }
5892
 
5893
+ $current_blog_id = get_current_blog_id();
5894
+
5895
  foreach ( $users_2_blog_ids as $user_id => $blog_ids ) {
5896
  if ( 0 < $blog_ids[0] ) {
5897
  $this->switch_to_blog( $blog_ids[0] );
5905
  }
5906
 
5907
  if ( is_multisite() ) {
5908
+ $this->switch_to_blog( $current_blog_id );
5909
+
5910
  $this->do_action( "after_{$name}_cron_multisite" );
5911
  }
5912
  }
6305
  if ( ! $this->is_addon() &&
6306
  ! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
6307
  (
6308
+ ( true === $this->_storage->require_license_activation ) ||
6309
  // Not registered nor anonymous.
6310
  ( ! $this->is_registered() && ! $this->is_anonymous() ) ||
6311
  // OR, network level and in network upgrade mode.
6322
  * @since 1.2.2
6323
  */
6324
  if ( $this->is_theme()
 
6325
  && ! $this->has_settings_menu()
6326
  && ! isset( $_REQUEST['fs_action'] )
6327
  && $this->can_activate_previous_theme()
6328
  ) {
6329
+ if ( $this->is_only_premium() ) {
6330
+ $this->activate_previous_theme();
6331
+ return;
6332
+ }
6333
 
6334
+ if ( true === $this->_storage->require_license_activation ) {
6335
+ $this->_storage->require_license_activation = false;
6336
+ }
6337
  }
6338
 
6339
  if ( ! fs_is_network_admin() &&
6433
  $this->_module_type,
6434
  sprintf( '<b><a href="%s">%s</a></b>',
6435
  $this->get_activation_url(),
6436
+ sprintf( $this->get_text_inline( 'Opt in to make "%s" better!', 'optin-x-now' ), $this->get_plugin_name() )
6437
  )
6438
  ),
6439
  'connect_account',
6895
  }
6896
  }
6897
 
6898
+ if (
6899
+ $is_premium_version_activation &&
6900
+ (
6901
+ $this->is_anonymous() ||
6902
+ (
6903
+ $this->is_registered() &&
6904
+ ! $this->is_trial() &&
6905
+ ! $this->has_features_enabled_license()
6906
+ )
6907
+ )
6908
+ ) {
6909
+ $this->_storage->require_license_activation = true;
6910
+ }
6911
+
6912
  if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
6913
  /**
6914
  * If no previous version of plugin's version exist, it means that it's either
7178
  private function remove_sdk_reference() {
7179
  global $fs_active_plugins;
7180
 
7181
+ foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) {
7182
  if ( $this->_plugin_basename == $data->plugin_path ) {
7183
  unset( $fs_active_plugins->plugins[ $sdk_path ] );
7184
  break;
7360
  }
7361
  }
7362
 
7363
+ /**
7364
+ * This is used to ensure that before redirecting to the opt-in page after resetting the anonymous mode or
7365
+ * deleting the account in the network level, the URL of the page to redirect to is correct.
7366
+ *
7367
+ * @author Leo Fajardo (@leorw)
7368
+ *
7369
+ * @since 2.1.3
7370
+ */
7371
+ private function maybe_set_slug_and_network_menu_exists_flag() {
7372
+ if ( ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
7373
+ $this->_menu->set_slug_and_network_menu_exists_flag( $this->_menu->has_menu() ?
7374
+ $this->_menu->get_slug() :
7375
+ $this->_slug
7376
+ );
7377
+ }
7378
+ }
7379
+
7380
  /**
7381
  * Clears the anonymous mode and redirects to the opt-in screen.
7382
  *
7390
 
7391
  $this->reset_anonymous_mode( fs_is_network_admin() );
7392
 
7393
+ $this->maybe_set_slug_and_network_menu_exists_flag();
7394
+
7395
  fs_redirect( $this->get_activation_url() );
7396
  }
7397
 
7850
  }
7851
  }
7852
 
7853
+ $versions = $this->get_versions();
7854
+
7855
+ return array_merge( $versions, array(
7856
  'version' => $this->get_plugin_version(),
7857
  'is_premium' => $this->is_premium(),
7858
  'language' => get_bloginfo( 'language' ),
7859
  'charset' => get_bloginfo( 'charset' ),
 
 
 
7860
  'title' => get_bloginfo( 'name' ),
7861
  'url' => get_site_url(),
7862
  // Special params.
7907
  // }
7908
 
7909
  // Common properties.
7910
+ $versions = $this->get_versions();
7911
+ $common = array_merge( $versions, array(
7912
+ 'version' => $this->get_plugin_version(),
7913
+ 'is_premium' => $this->is_premium(),
 
 
7914
  ), $override );
7915
 
7916
 
8326
  // @todo Decide if we want to delete plugin information from db.
8327
  }
8328
 
8329
+ /**
8330
+ * Set the basename of the current product and hook _activate_plugin_event_hook() to the activation action.
8331
+ *
8332
+ * @author Vova Feldman (@svovaf)
8333
+ * @since 2.2.1
8334
+ *
8335
+ * @param string $is_premium
8336
+ * @param string $caller
8337
+ *
8338
+ * @return string
8339
+ */
8340
+ function set_basename( $is_premium, $caller ) {
8341
+ $basename = plugin_basename( $caller );
8342
+
8343
+ $current_basename = $is_premium ?
8344
+ $this->_premium_plugin_basename :
8345
+ $this->_free_plugin_basename;
8346
+
8347
+ if ( $current_basename == $basename ) {
8348
+ // Basename value set correctly.
8349
+ return;
8350
+ }
8351
+
8352
+ if ( $is_premium ) {
8353
+ $this->_premium_plugin_basename = $basename;
8354
+ } else {
8355
+ $this->_free_plugin_basename = $basename;
8356
+ }
8357
+
8358
+ $plugin_dir = dirname( $this->_plugin_dir_path ) . '/';
8359
+
8360
+ register_activation_hook(
8361
+ $plugin_dir . $basename,
8362
+ array( &$this, '_activate_plugin_event_hook' )
8363
+ );
8364
+ }
8365
+
8366
  /**
8367
  * @author Vova Feldman (@svovaf)
8368
  * @since 1.1.1
8369
+ * @since 2.2.1 If the context product is in its premium version, use the current module's basename, even if it was renamed.
8370
  *
8371
  * @return string
8372
  */
8373
  function premium_plugin_basename() {
8374
+ if ( ! isset( $this->_premium_plugin_basename ) ) {
8375
+ $this->_premium_plugin_basename = $this->is_premium() ?
8376
+ // The product is premium, so use the current basename.
8377
+ $this->_plugin_basename :
8378
+ $this->get_premium_slug() . '/' . basename( $this->_free_plugin_basename );
8379
+ }
8380
+
8381
+ return $this->_premium_plugin_basename;
8382
  }
8383
 
8384
  /**
8517
  }
8518
 
8519
  /**
8520
+ * @author Leo Fajardo (@leorw)
8521
+ * @since 2.2.1
8522
+ *
8523
+ * @return string
8524
+ */
8525
+ function get_premium_slug() {
8526
+ return is_object( $this->_plugin ) ?
8527
+ $this->_plugin->premium_slug :
8528
+ "{$this->_slug}-premium";
8529
+ }
8530
+
8531
+ /**
8532
+ * Retrieve the desired folder name for the product.
8533
+ *
8534
  * @author Vova Feldman (@svovaf)
8535
  * @since 1.2.1.7
8536
  *
8537
  * @return string Plugin slug.
8538
  */
8539
  function get_target_folder_name() {
8540
+ return $this->can_use_premium_code() ?
8541
+ $this->_plugin->premium_slug :
8542
+ $this->_slug;
8543
  }
8544
 
8545
  /**
8610
  * @author Vova Feldman (@svovaf)
8611
  * @since 1.0.9
8612
  *
8613
+ * @param string|bool $premium_suffix
8614
+ *
8615
  * @return string
8616
  */
8617
+ function get_plugin_name( $premium_suffix = false ) {
8618
  $this->_logger->entrance();
8619
 
8620
+ /**
8621
+ * This `if-else` can be squeezed into a single `if` but I intentionally split it for code readability.
8622
+ *
8623
+ * @author Vova Feldman
8624
+ */
8625
  if ( ! isset( $this->_plugin_name ) ) {
8626
+ // Name is not yet set.
8627
+ $this->set_name( $premium_suffix );
8628
+ } else if (
8629
+ ! empty( $premium_suffix ) &&
8630
+ ( ! is_object( $this->_plugin ) || $this->_plugin->premium_suffix !== $premium_suffix )
8631
+ ) {
8632
+ // Name is already set, but there's a change in the premium suffix.
8633
+ $this->set_name( $premium_suffix );
8634
+ }
8635
 
8636
+ return $this->_plugin_name;
8637
+ }
8638
 
8639
+ /**
8640
+ * Calculates and stores the product's name. This helper function was created specifically for get_plugin_name() just to make the code clearer.
8641
+ *
8642
+ * @author Vova Feldman (@svovaf)
8643
+ * @since 2.2.1
8644
+ *
8645
+ * @param string $premium_suffix
8646
+ */
8647
+ private function set_name( $premium_suffix = '' ) {
8648
+ $plugin_data = $this->get_plugin_data();
8649
 
8650
+ // Get name.
8651
+ $this->_plugin_name = $plugin_data['Name'];
8652
+
8653
+ if ( is_string( $premium_suffix ) ) {
8654
+ $premium_suffix = trim( $premium_suffix );
8655
 
8656
+ if ( ! empty( $premium_suffix ) ) {
8657
+ // Check if plugin name contains " (premium)" or a custom suffix and remove it.
8658
+ $suffix = ( ' ' . strtolower( $premium_suffix ) );
8659
+ $suffix_len = strlen( $suffix );
8660
+
8661
+ if ( strlen( $plugin_data['Name'] ) > $suffix_len &&
8662
+ $suffix === substr( strtolower( $plugin_data['Name'] ), - $suffix_len )
8663
+ ) {
8664
+ $this->_plugin_name = substr( $plugin_data['Name'], 0, - $suffix_len );
8665
+ }
8666
+ }
8667
  }
8668
 
8669
+ $this->_logger->departure( 'Name = ' . $this->_plugin_name );
8670
  }
8671
 
8672
  /**
9372
  * @return bool
9373
  */
9374
  function is_premium() {
9375
+ /**
9376
+ * `$this->_plugin` will be `false` when `is_activation_mode` calls this method directly from the
9377
+ * `_register_hooks` method.
9378
+ *
9379
+ * @author Leo Fajardo (@leorw)
9380
+ * @since 2.2.3
9381
+ */
9382
+ return is_object( $this->_plugin ) ?
9383
+ $this->_plugin->is_premium :
9384
+ false;
9385
  }
9386
 
9387
  /**
10771
  fs_require_template( 'forms/resend-key.php', $vars );
10772
  }
10773
 
10774
+ /**
10775
+ * Displays a subscription cancellation dialog box when the user clicks on the "Deactivate License"
10776
+ * link on the "Account" page or deactivates a plugin and there's an active subscription that is
10777
+ * either associated with a non-lifetime single-site license or non-lifetime multisite license that
10778
+ * is only activated on a single production site.
10779
+ *
10780
+ * @author Leo Fajardo (@leorw)
10781
+ * @since 2.2.1
10782
+ *
10783
+ * @param bool $is_license_deactivation
10784
+ */
10785
+ function _maybe_add_subscription_cancellation_dialog_box( $is_license_deactivation = false ) {
10786
+ if ( fs_is_network_admin() ) {
10787
+ // Subscription cancellation dialog box is currently not supported for multisite networks.
10788
+ return;
10789
+ }
10790
+
10791
+ $license = $this->_get_license();
10792
+
10793
+ /**
10794
+ * If the installation is associated with a non-lifetime license, which is either a single-site or only activated on a single production site (or zero), and connected to an active subscription, suggest the customer to cancel the subscription upon deactivation.
10795
+ *
10796
+ * @author Leo Fajardo (@leorw) (Comment added by Vova Feldman @svovaf)
10797
+ * @since 2.2.1
10798
+ */
10799
+ if ( ! is_object( $license ) ||
10800
+ $license->is_lifetime() ||
10801
+ ( ! $license->is_single_site() && $license->activated > 1 )
10802
+ ) {
10803
+ return;
10804
+ }
10805
+
10806
+ /**
10807
+ * @var FS_Subscription $subscription
10808
+ */
10809
+ $subscription = $this->_get_subscription( $license->id );
10810
+ if ( ! is_object( $subscription ) || ! $subscription->is_active() ) {
10811
+ return;
10812
+ }
10813
+
10814
+ $vars = array(
10815
+ 'id' => $this->_module_id,
10816
+ 'license' => $license,
10817
+ 'has_trial' => $this->is_paid_trial(),
10818
+ 'is_license_deactivation' => $is_license_deactivation,
10819
+ );
10820
+
10821
+ fs_require_template( 'forms/subscription-cancellation.php', $vars );
10822
+ }
10823
+
10824
  /**
10825
  * @author Leo Fajardo (@leorw)
10826
  * @since 2.0.2
10923
  */
10924
  function _activate_license_ajax_action() {
10925
  $this->_logger->entrance();
10926
+
10927
  $this->check_ajax_referer( 'activate_license' );
10928
 
10929
  $license_key = trim( fs_request_get( 'license_key' ) );
11005
  'license_key' => $fs->apply_filters( 'license_key', $license_key )
11006
  );
11007
 
11008
+ $install = $api->call( $fs->add_show_pending( '/' ), 'put', $params );
11009
 
11010
  if ( FS_Api::is_api_error( $install ) ) {
11011
  $error = FS_Api::is_api_error_object( $install ) ?
11098
  }
11099
  }
11100
 
11101
+ if ( false === $error && true === $this->_storage->require_license_activation ) {
11102
+ $this->_storage->require_license_activation = false;
11103
+ }
11104
+
11105
  $result = array(
11106
  'success' => ( false === $error )
11107
  );
11654
  return $this->get_upgrade_url( WP_FS__PERIOD_ANNUALLY, true );
11655
  }
11656
 
11657
+ /**
11658
+ * @author Leo Fajardo (@leorw)
11659
+ * @since 2.1.4
11660
+ *
11661
+ * @param string $new_version
11662
+ *
11663
+ * @return string
11664
+ */
11665
+ function version_upgrade_checkout_link( $new_version ) {
11666
+ if ( ! is_object( $this->_license ) ) {
11667
+ $url = $this->pricing_url();
11668
+
11669
+ $purchase_license_text = $this->get_text_inline( 'Buy a license now', 'buy-license-now' );
11670
+ } else {
11671
+ $subscription = $this->_get_subscription( $this->_license->id );
11672
+
11673
+ $url = $this->checkout_url(
11674
+ is_object( $subscription ) ?
11675
+ ( 1 == $subscription->billing_cycle ? WP_FS__PERIOD_MONTHLY : WP_FS__PERIOD_ANNUALLY ) :
11676
+ WP_FS__PERIOD_LIFETIME,
11677
+ false,
11678
+ array( 'licenses' => $this->_license->quota )
11679
+ );
11680
+
11681
+ $purchase_license_text = $this->get_text_inline( 'Renew your license now', 'renew-license-now' );
11682
+ }
11683
+
11684
+ return sprintf(
11685
+ $this->get_text_inline( '%s to access version %s security & feature updates, and support.', 'x-for-updates-and-support' ),
11686
+ sprintf( '<a href="%s">%s</a>', $url, $purchase_license_text ),
11687
+ $new_version
11688
+ );
11689
+ }
11690
+
11691
  /**
11692
  * Plugin's pricing URL.
11693
  *
12322
  * @author Vova Feldman (@svovaf)
12323
  */
12324
  $args = array(
12325
+ /**
12326
+ * Commented out in order to handle the migration of site options whether the site is public or not.
12327
+ *
12328
+ * @author Leo Fajardo (@leorw)
12329
+ * @since 2.2.1
12330
+ */
12331
+ // 'public' => 1,
12332
  'archived' => 0,
12333
  'mature' => 0,
12334
  'spam' => 0,
13473
  }
13474
  }
13475
 
13476
+ if ( true === $this->_storage->require_license_activation &&
13477
+ ! fs_request_get_bool( 'require_license', true )
13478
+ ) {
13479
+ $this->_storage->require_license_activation = false;
13480
+ }
13481
+
13482
  if ( $this->is_theme() ) {
13483
  $this->_register_account_hooks();
13484
  }
13544
 
13545
  }
13546
 
13547
+ /**
13548
+ * Get a sanitized array with the WordPress version, SDK version, and PHP version.
13549
+ * Each version is trimmed after the 16th char.
13550
+ *
13551
+ * @author Vova Feldman (@svovaf)
13552
+ * @since 2.2.1
13553
+ *
13554
+ * @return array
13555
+ */
13556
+ private function get_versions() {
13557
+ $versions = array();
13558
+ $versions['platform_version'] = get_bloginfo( 'version' );
13559
+ $versions['sdk_version'] = $this->version;
13560
+ $versions['programming_language_version'] = phpversion();
13561
+
13562
+ foreach ( $versions as $k => $version ) {
13563
+ if ( is_string( $versions[ $k ] ) && ! empty( $versions[ $k ] ) ) {
13564
+ $versions[ $k ] = substr( $versions[ $k ], 0, 16 );
13565
+ }
13566
+ }
13567
+
13568
+ return $versions;
13569
+ }
13570
+
13571
  /**
13572
  * @author Vova Feldman (@svovaf)
13573
  * @since 1.1.7.4
13589
  // Return to the module's main page.
13590
  $this->get_after_activation_url( 'after_connect_url', array( 'fs_action' => $activation_action ) );
13591
 
13592
+ $versions = $this->get_versions();
13593
+
13594
+ $params = array_merge( $versions, array(
13595
  'user_firstname' => $current_user->user_firstname,
13596
  'user_lastname' => $current_user->user_lastname,
13597
  'user_nickname' => $current_user->user_nicename,
13606
  'account',
13607
  array( 'fs_action' => 'sync_user' )
13608
  ), 'sync_user' ),
 
 
 
13609
  'is_premium' => $this->is_premium(),
13610
  'is_active' => true,
13611
  'is_uninstalled' => false,
13612
+ ) );
13613
 
13614
  if ( true === $network_level_or_blog_id ) {
13615
  if ( ! isset( $override_with['sites'] ) ) {
13795
  'timeout' => WP_FS__DEBUG_SDK ? 60 : 30,
13796
  );
13797
 
13798
+ $url = $this->add_show_pending( WP_FS__ADDRESS . '/action/service/user/install/' );
13799
  $response = self::safe_remote_post( $url, $request );
13800
 
13801
  if ( is_wp_error( $response ) ) {
14952
 
14953
  $hook = false;
14954
 
14955
+ if ( ! $this->has_settings_menu() ) {
14956
  // Add the opt-in page without a menu item.
14957
  $hook = FS_Admin_Menu_Manager::add_subpage(
14958
  null,
15300
  }
15301
  }
15302
 
15303
+ if ( ! $is_activation_mode || ( true !== $this->_storage->require_license_activation ) ) {
15304
+ /**
15305
+ * Add the other menu items if there are any when not in activation mode or license activation is not
15306
+ * required (license activation is required for registered or anonymous users after activating the
15307
+ * premium version when the site is not in trial mode or there's no active valid license).
15308
+ *
15309
+ * @author Leo Fajardo (@leorw)
15310
+ * @since 2.2.1
15311
+ */
15312
+ if ( 0 < count( $this->_menu_items ) ) {
15313
+ if ( ! $this->_menu->is_top_level() ) {
15314
+ fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
15315
 
15316
+ // Append submenu items right after the plugin's submenu item.
15317
+ $this->order_sub_submenu_items();
15318
+ } else {
15319
+ // Append submenu items.
15320
+ $this->embed_submenu_items();
15321
+ }
15322
  }
15323
  }
15324
  }
15344
 
15345
  foreach ( $this->_menu_items as $priority => $items ) {
15346
  foreach ( $items as $item ) {
 
 
 
 
 
 
 
 
 
 
15347
  $capability = ( ! empty( $item['capability'] ) ? $item['capability'] : $top_level_menu_capability );
15348
 
15349
  $menu_item = sprintf(
15354
  $item['menu_title']
15355
  );
15356
 
15357
+ $top_level_menu_slug = $this->get_top_level_menu_slug();
15358
+ $menu_slug = $this->_menu->get_slug( $item['menu_slug'] );
15359
 
15360
  if ( ! isset( $item['url'] ) ) {
15361
  $hook = FS_Admin_Menu_Manager::add_subpage(
15362
  $item['show_submenu'] ?
15363
+ $top_level_menu_slug :
15364
  null,
15365
  $item['page_title'],
15366
  $menu_item,
15375
  } else {
15376
  FS_Admin_Menu_Manager::add_subpage(
15377
  $item['show_submenu'] ?
15378
+ $top_level_menu_slug :
15379
  null,
15380
  $item['page_title'],
15381
  $menu_item,
15384
  array( $this, '' )
15385
  );
15386
  }
15387
+
15388
+ if ( $item['show_submenu'] && $is_first_submenu_item ) {
15389
+ if ( $this->_is_network_active && ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
15390
+ /**
15391
+ * If the top-level menu has been dynamically created, remove the first submenu item that
15392
+ * WordPress automatically creates when there's no submenu item whose slug matches the
15393
+ * parent's. In the following example, the `Awesome Plugin` submenu item will be removed.
15394
+ *
15395
+ * Awesome Plugin
15396
+ * - Awesome Plugin <-- we want to remove this since there's no real setting page for the top-level
15397
+ *
15398
+ * @author Leo Fajardo (@leorw)
15399
+ */
15400
+ remove_submenu_page( $top_level_menu_slug, $top_level_menu_slug );
15401
+ }
15402
+
15403
+ $is_first_submenu_item = false;
15404
+ }
15405
  }
15406
  }
15407
  }
16644
  * @param bool|number $plugin_id
16645
  * @param bool $flush Since 1.1.7.3
16646
  * @param int $expiration Since 1.2.2.7
16647
+ * @param bool|string $newer_than Since 2.2.1
16648
  *
16649
  * @return object|false New plugin tag info if exist.
16650
  */
16651
+ private function _fetch_newer_version( $plugin_id = false, $flush = true, $expiration = WP_FS__TIME_24_HOURS_IN_SEC, $newer_than = false ) {
16652
+ $latest_tag = $this->_fetch_latest_version( $plugin_id, $flush, $expiration, $newer_than );
16653
 
16654
  if ( ! is_object( $latest_tag ) ) {
16655
  return false;
16674
  * @param bool|number $plugin_id
16675
  * @param bool $flush Since 1.1.7.3
16676
  * @param int $expiration Since 1.2.2.7
16677
+ * @param bool|string $newer_than Since 2.2.1
16678
  *
16679
  * @return bool|FS_Plugin_Tag
16680
  */
16681
+ function get_update( $plugin_id = false, $flush = true, $expiration = WP_FS__TIME_24_HOURS_IN_SEC, $newer_than = false ) {
16682
  $this->_logger->entrance();
16683
 
16684
  if ( ! is_numeric( $plugin_id ) ) {
16685
  $plugin_id = $this->_plugin->id;
16686
  }
16687
 
16688
+ $this->check_updates( true, $plugin_id, $flush, $expiration, $newer_than );
16689
  $updates = $this->get_all_updates();
16690
 
16691
  return isset( $updates[ $plugin_id ] ) && is_object( $updates[ $plugin_id ] ) ? $updates[ $plugin_id ] : false;
17469
  $api = $this->get_api_site_scope();
17470
  $license = $api->call( "/licenses/{$this->_site->license_id}.json", 'delete' );
17471
 
17472
+ $this->handle_license_deactivation_result( $license, $hmm_text, $show_notice );
17473
+ }
17474
+
17475
+ /**
17476
+ * @author Leo Fajardo (@leorw)
17477
+ * @since 2.2.1
17478
+ *
17479
+ * @param FS_Plugin_License $license
17480
+ * @param bool|string $hmm_text
17481
+ * @param bool $show_notice
17482
+ */
17483
+ private function handle_license_deactivation_result( $license, $hmm_text = false, $show_notice = true ) {
17484
  if ( isset( $license->error ) ) {
17485
  $this->_admin_notices->add(
17486
  $this->get_text_inline( 'It looks like the license deactivation failed.', 'license-deactivation-failed-message' ) . '<br> ' .
17501
  }
17502
  }
17503
 
17504
+ // Update site plan to default.
17505
  $this->_sync_plans();
17506
  $this->_site->plan_id = $this->_plans[0]->id;
17507
  // Unlink license from site.
17528
  * @author Vova Feldman (@svovaf)
17529
  * @since 1.0.4
17530
  *
17531
+ * @return object
17532
+ *
17533
  * @uses FS_Api
17534
  */
17535
  private function _downgrade_site() {
17536
  $this->_logger->entrance();
17537
 
17538
+ $deactivate_license = fs_request_get_bool( 'deactivate_license' );
17539
+
17540
  $api = $this->get_api_site_scope();
17541
+ $site = $api->call( 'downgrade.json', 'put', array( 'deactivate_license' => $deactivate_license ) );
17542
 
17543
  $plan_downgraded = false;
17544
  $plan = false;
17556
  ( is_object( $subscription ) && ! isset( $subscription->error ) && ! $subscription->is_active() );
17557
  } else {
17558
  // handle different error cases.
17559
+ $this->handle_license_deactivation_result(
17560
+ $site,
17561
+ $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...'
17562
+ );
17563
  }
17564
 
17565
+ if ( ! $plan_downgraded ) {
17566
+ return (object) array(
17567
+ 'error' => (object) array(
17568
+ 'message' => $this->get_text_inline( 'Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes.', 'subscription-cancellation-failure-message' )
 
 
 
 
17569
  )
17570
  );
17571
+ }
17572
 
17573
+ // Remove previous sticky message about upgrade (if exist).
17574
+ $this->_admin_notices->remove_sticky( 'plan_upgraded' );
17575
+
17576
+ $this->_admin_notices->add(
17577
+ sprintf( $this->get_text_inline( 'Your subscription was successfully cancelled. Your %s plan license will expire in %s.', 'plan-x-downgraded-message' ),
17578
+ $plan->title,
17579
+ human_time_diff( time(), strtotime( $this->_license->expiration ) )
17580
+ )
17581
+ );
17582
+
17583
+ // Store site updates.
17584
+ $this->_store_site();
17585
+
17586
+ if ( $deactivate_license &&
17587
+ ! FS_Plugin_License::is_valid_id( $site->license_id )
17588
+ ) {
17589
+ if ( $this->_site->is_localhost() ) {
17590
+ $this->_license->activated_local = max( 0, $this->_license->activated_local - 1 );
17591
+ } else {
17592
+ $this->_license->activated = max( 0, $this->_license->activated - 1 );
17593
+ }
17594
+
17595
+ // Handle successful license deactivation result.
17596
+ $this->handle_license_deactivation_result( $this->_license );
17597
  }
17598
+
17599
+ return $site;
17600
  }
17601
 
17602
  /**
17703
  * @author Vova Feldman (@svovaf)
17704
  * @since 1.0.9
17705
  *
17706
+ * @return object
17707
+ *
17708
  * @uses FS_Api
17709
  */
17710
  private function _cancel_trial() {
17711
  $this->_logger->entrance();
17712
 
 
 
 
17713
  if ( ! $this->is_trial() ) {
17714
+ return (object) array(
17715
+ 'error' => (object) array(
17716
+ 'message' => $this->get_text_inline( 'It looks like you are not in trial mode anymore so there\'s nothing to cancel :)', 'trial-cancel-no-trial-message' )
17717
+ )
17718
  );
 
 
17719
  }
17720
 
17721
  $trial_plan = $this->get_trial_plan();
17746
  // @todo handle different error cases.
17747
  }
17748
 
17749
+ if ( ! $trial_cancelled ) {
17750
+ return (object) array(
17751
+ 'error' => (object) array(
17752
+ 'message' => $this->get_text_inline( 'Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes.', 'trial-cancel-failure-message' )
17753
+ )
17754
+ );
17755
+ }
17756
 
17757
+ // Remove previous sticky messages about upgrade or trial (if exist).
17758
+ $this->_admin_notices->remove_sticky( array(
17759
+ 'trial_started',
17760
+ 'trial_promotion',
17761
+ 'plan_upgraded',
17762
+ ) );
17763
 
17764
+ // Store site updates.
17765
+ $this->_store_site();
17766
+
17767
+ if ( ! $this->is_addon() ||
17768
+ ! $this->deactivate_premium_only_addon_without_license( true )
17769
+ ) {
 
 
17770
  $this->_admin_notices->add(
17771
+ sprintf( $this->get_text_inline( 'Your %s free trial was successfully cancelled.', 'trial-cancel-message' ), $trial_plan->title )
 
 
17772
  );
17773
  }
17774
+
17775
+ return $site;
17776
  }
17777
 
17778
  /**
17843
  * @since 1.0.4
17844
  *
17845
  * @param bool|number $addon_id
17846
+ * @param bool $flush Since 1.1.7.3
17847
+ * @param int $expiration Since 1.2.2.7
17848
+ * @param bool|string $newer_than Since 2.2.1
17849
+ * @param bool|string $fetch_readme Since 2.2.1
17850
  *
17851
  * @return object|false Plugin latest tag info.
17852
  */
17853
  function _fetch_latest_version(
17854
  $addon_id = false,
17855
  $flush = true,
17856
+ $expiration = WP_FS__TIME_24_HOURS_IN_SEC,
17857
+ $newer_than = false,
17858
+ $fetch_readme = true
17859
  ) {
17860
  $this->_logger->entrance();
17861
 
17906
  $this->switch_to_blog( $switch_to_blog_id );
17907
  }
17908
 
17909
+ $latest_version_endpoint = $this->_get_latest_version_endpoint( $addon_id, 'json' );
17910
+
17911
+ if ( ! empty( $newer_than ) ) {
17912
+ $latest_version_endpoint = add_query_arg( 'newer_than', $newer_than, $latest_version_endpoint );
17913
+ }
17914
+
17915
+ if ( true === $fetch_readme ) {
17916
+ $latest_version_endpoint = add_query_arg( 'readme', 'true', $latest_version_endpoint );
17917
+ }
17918
+
17919
  $tag = $this->get_api_site_or_plugin_scope()->get(
17920
+ $latest_version_endpoint,
17921
  $flush,
17922
  $expiration
17923
  );
18053
  * @param bool|number $plugin_id
18054
  * @param bool $flush Since 1.1.7.3
18055
  * @param int $expiration Since 1.2.2.7
18056
+ * @param bool|string $newer_than Since 2.2.1
18057
  */
18058
  private function check_updates(
18059
  $background = false,
18060
  $plugin_id = false,
18061
  $flush = true,
18062
+ $expiration = WP_FS__TIME_24_HOURS_IN_SEC,
18063
+ $newer_than = false
18064
  ) {
18065
  $this->_logger->entrance();
18066
 
18067
  // Check if there's a newer version for download.
18068
+ $new_version = $this->_fetch_newer_version( $plugin_id, $flush, $expiration, $newer_than );
18069
 
18070
  $update = null;
18071
  if ( is_object( $new_version ) ) {
18553
  $this->_site = null;
18554
  $this->_user = null;
18555
 
18556
+ $this->maybe_set_slug_and_network_menu_exists_flag();
18557
+
18558
  fs_redirect( $this->get_activation_url() );
18559
  } else {
18560
  if ( $this->is_addon_activated( $plugin_id ) ) {
18574
  check_admin_referer( $action );
18575
  }
18576
 
18577
+ $switch_to_network_install_blog_after_cancellation = (
18578
+ is_numeric( $blog_id ) &&
18579
+ $plugin_id == $this->get_id() &&
18580
+ ! $this->is_trial()
18581
+ );
18582
 
18583
+ $result = $this->cancel_subscription_or_trial( $plugin_id );
18584
+ if ( $this->is_api_error( $result ) ) {
18585
+ $this->_admin_notices->add(
18586
+ $result->error->message,
18587
+ $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
18588
+ 'error'
18589
+ );
18590
+ }
18591
+
18592
+ if ( $switch_to_network_install_blog_after_cancellation ) {
18593
+ $this->switch_to_blog( $this->_storage->network_install_blog_id );
18594
  }
18595
 
18596
  return;
18622
  $this->_site = null;
18623
  $this->_user = null;
18624
 
18625
+ if ( ! $is_network_action ) {
18626
+ fs_redirect( $this->get_activation_url() );
18627
+ } else if ( is_numeric( $blog_id ) ) {
18628
+ $this->switch_to_blog( $this->_storage->network_install_blog_id );
18629
+ }
18630
  }
18631
  } else {
18632
  if ( $this->is_addon_activated( $plugin_id ) ) {
18724
  #region Actions that might be called from external links (e.g. email)
18725
 
18726
  case 'cancel_trial':
18727
+ $result = $this->cancel_subscription_or_trial( $plugin_id );
18728
+ if ( $this->is_api_error( $result ) ) {
18729
+ $this->_admin_notices->add(
18730
+ $result->error->message,
18731
+ $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
18732
+ 'error'
18733
+ );
18734
  }
18735
 
18736
  return;
19726
 
19727
  if ( ! $this->is_addon() || ! $this->has_free_plan() ) {
19728
  $first_time_path = $this->_menu->get_first_time_path();
19729
+
19730
+ if ( $this->is_activation_mode() ) {
19731
+ $url = $this->get_activation_url();
19732
+ } else if ( ! empty( $first_time_path ) ) {
19733
+ $url = $first_time_path;
19734
+ } else {
19735
+ $page = '';
19736
+ if ( ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
19737
+ if ( $this->is_network_registered() ) {
19738
+ $page = 'account';
19739
+ } else if ( $this->is_network_anonymous() ) {
19740
+ $this->maybe_set_slug_and_network_menu_exists_flag();
19741
+ }
19742
+ }
19743
+
19744
+ $url = $this->_get_admin_page_url( $page );
19745
+ }
19746
  } else {
19747
  $plugin_fs = false;
19748
 
19862
  $this->_admin_notices->add_sticky( $message, $id, $title, $type );
19863
  }
19864
 
19865
+ /**
19866
+ * Check if the paid version of the module is installed.
19867
+ *
19868
+ * @author Vova Feldman (@svovaf)
19869
+ * @since 2.2.0
19870
+ *
19871
+ * @return bool
19872
+ */
19873
+ private function is_premium_version_installed() {
19874
+ $premium_plugin_basename = $this->premium_plugin_basename();
19875
+ $premium_plugin = get_plugins( '/' . dirname( $premium_plugin_basename ) );
19876
+
19877
+ return ! empty( $premium_plugin );
19878
+ }
19879
+
19880
  /**
19881
  * Helper function that returns the final steps for the upgrade completion.
19882
  *
19902
  $plan_title = $this->get_plan_title();
19903
  }
19904
 
19905
+ if ( $this->is_premium_version_installed() ) {
19906
+ /**
19907
+ * If the premium version is already installed, instead of showing the installation instructions,
19908
+ * tell the current user to activate it.
19909
+ *
19910
+ * @author Leo Fajardo (@leorw)
19911
+ * @since 2.2.1
19912
+ */
19913
+ $premium_plugin_basename = $this->premium_plugin_basename();
19914
 
19915
+ return sprintf(
19916
+ /* translators: %1s: Product title; %2s: Plan title */
19917
+ $this->get_text_inline( ' The paid version of %1s is already installed. Please activate it to start benefiting the %2s features. %3s', 'activate-premium-version' ),
19918
+ sprintf( '<em>%s</em>', esc_html( $this->get_plugin_title() ) ),
19919
+ $plan_title,
19920
+ sprintf(
19921
+ '<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s</button></a>',
19922
+ wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $premium_plugin_basename, 'activate-plugin_' . $premium_plugin_basename ),
19923
+ esc_html( sprintf(
19924
+ /* translators: %s: Plan title */
19925
+ $this->get_text_inline( 'Activate %s features', 'activate-x-features' ),
19926
+ $plan_title
19927
+ ) )
19928
+ )
19929
+ );
19930
+ } else {
19931
+ // @since 1.2.1.5 The free version is auto deactivated.
19932
+ $deactivation_step = version_compare( $this->version, '1.2.1.5', '<' ) ?
19933
+ ( '<li>' . $this->esc_html_inline( 'Deactivate the free version', 'deactivate-free-version' ) . '.</li>' ) :
19934
+ '';
19935
+
19936
+ return sprintf(
19937
+ ' %s: <ol><li>%s.</li>%s<li>%s (<a href="%s" target="_blank">%s</a>).</li></ol>',
19938
+ $this->get_text_inline( 'Please follow these steps to complete the upgrade', 'follow-steps-to-complete-upgrade' ),
19939
+ ( empty( $activate_license_string ) ? '' : $activate_license_string . '</li><li>' ) .
19940
+ $this->get_latest_download_link( sprintf(
19941
+ /* translators: %s: Plan title */
19942
+ $this->get_text_inline( 'Download the latest %s version', 'download-latest-x-version' ),
19943
+ $plan_title
19944
+ ) ),
19945
+ $deactivation_step,
19946
+ $this->get_text_inline( 'Upload and activate the downloaded version', 'upload-and-activate' ),
19947
+ '//bit.ly/upload-wp-' . $this->_module_type . 's',
19948
+ $this->get_text_inline( 'How to upload and activate?', 'howto-upload-activate' )
19949
+ );
19950
+ }
19951
  }
19952
 
19953
  /**
sdk/freemius/includes/class-fs-plugin-updater.php CHANGED
@@ -35,6 +35,8 @@
35
  */
36
  private $_translation_updates;
37
 
 
 
38
  #--------------------------------------------------------------------------------
39
  #region Singleton
40
  #--------------------------------------------------------------------------------
@@ -82,25 +84,25 @@
82
 
83
  $this->add_transient_filters();
84
 
85
- if ( ! $this->_fs->has_any_active_valid_license() ) {
86
- /**
87
- * If user has the premium plugin's code but do NOT have an active license,
88
- * encourage him to upgrade by showing that there's a new release, but instead
89
- * of showing an update link, show upgrade link to the pricing page.
90
- *
91
- * @since 1.1.6
92
- *
93
- */
94
- // WP 2.9+
95
- add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
96
- &$this,
97
- 'catch_plugin_update_row'
98
- ), 9 );
99
- add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
100
- &$this,
101
- 'edit_and_echo_plugin_update_row'
102
- ), 11, 2 );
103
- }
104
 
105
  if ( ! WP_FS__IS_PRODUCTION_MODE ) {
106
  add_filter( 'http_request_host_is_external', array(
@@ -110,16 +112,88 @@
110
  }
111
 
112
  if ( $this->_fs->is_premium() ) {
113
- if ( $this->is_correct_folder_name() ) {
114
  add_filter( 'upgrader_post_install', array( &$this, '_maybe_update_folder_name' ), 10, 3 );
115
  }
116
 
 
 
 
117
  if ( ! $this->_fs->has_any_active_valid_license() ) {
118
  add_filter( 'wp_prepare_themes_for_js', array( &$this, 'change_theme_update_info_html' ), 10, 1 );
119
  }
120
  }
121
  }
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  /**
124
  * @author Vova Feldman (@svovaf)
125
  * @since 2.0.0
@@ -183,15 +257,53 @@
183
 
184
  $r = $current->response[ $file ];
185
 
186
- $plugin_update_row = preg_replace(
187
- '/(\<div.+>)(.+)(\<a.+\<a.+)\<\/div\>/is',
188
- '$1 $2 ' . sprintf(
189
- $this->_fs->get_text_inline( '%sRenew your license now%s to access version %s security & feature updates, and support.', 'renew-license-now' ),
190
- '<a href="' . $this->_fs->pricing_url() . '">', '</a>',
191
- $r->new_version ) .
192
- '$4',
193
- $plugin_update_row
194
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
 
196
  echo $plugin_update_row;
197
  }
@@ -220,10 +332,7 @@
220
 
221
  $prepared_themes[ $theme_basename ]['update'] = preg_replace(
222
  '/(\<p.+>)(.+)(\<a.+\<a.+)\.(.+\<\/p\>)/is',
223
- '$1 $2 ' . sprintf(
224
- $this->_fs->get_text_inline( '%sRenew your license now%s to access version %s security & feature updates, and support.', 'renew-license-now' ),
225
- '<a href="' . $this->_fs->pricing_url() . '">', '</a>',
226
- $themes_update->response[ $theme_basename ]['new_version'] ) .
227
  '$4',
228
  $prepared_themes[ $theme_basename ]['update']
229
  );
@@ -303,7 +412,8 @@
303
  $new_version = $this->_fs->get_update(
304
  false,
305
  fs_request_get_bool( 'force-check' ),
306
- WP_FS__TIME_24_HOURS_IN_SEC / 24
 
307
  );
308
 
309
  $this->_update_details = false;
@@ -401,6 +511,18 @@
401
  );
402
  }
403
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  $update->{$this->_fs->get_module_type()} = $this->_fs->get_plugin_basename();
405
 
406
  return $update;
@@ -573,7 +695,7 @@
573
 
574
  $plugin_basename = $this->_fs->get_plugin_basename();
575
  if ( 'themes' === $module_type ) {
576
- $plugin_basename = str_replace( '-premium', '', $plugin_basename );
577
  }
578
 
579
  global $wp_version;
@@ -585,7 +707,7 @@
585
  array(
586
  "{$module_type}" => array(
587
  $plugin_basename => array(
588
- 'Name' => trim( str_replace( '(Premium)', '', $plugin_data['Name'] ) ),
589
  'Author' => $plugin_data['Author'],
590
  )
591
  )
@@ -748,11 +870,13 @@ if ( !isset($info->error) ) {
748
  }*/
749
  }
750
 
 
 
751
  // Get plugin's newest update.
752
- $new_version = $this->get_latest_download_details( $is_addon ? $addon->id : false );
753
 
754
  if ( ! is_object( $new_version ) || empty( $new_version->version ) ) {
755
- $data->version = $this->_fs->get_plugin_version();
756
  } else {
757
  if ( $is_addon ) {
758
  $data->name = $addon->title . ' ' . $this->_fs->get_text_inline( 'Add-On', 'addon' );
@@ -769,6 +893,52 @@ if ( !isset($info->error) ) {
769
 
770
  $data->version = $new_version->version;
771
  $data->download_link = $new_version->url;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
772
  }
773
 
774
  return $data;
@@ -779,11 +949,13 @@ if ( !isset($info->error) ) {
779
  * @since 1.2.1.7
780
  *
781
  * @param number|bool $addon_id
 
 
782
  *
783
  * @return object
784
  */
785
- private function get_latest_download_details( $addon_id = false ) {
786
- return $this->_fs->_fetch_latest_version( $addon_id );
787
  }
788
 
789
  /**
@@ -793,16 +965,10 @@ if ( !isset($info->error) ) {
793
  * @author Vova Feldman (@svovaf)
794
  * @since 1.2.1.6
795
  *
796
- * @param string $basename Current plugin's basename.
797
- *
798
  * @return bool
799
  */
800
- private function is_correct_folder_name( $basename = '' ) {
801
- if ( empty( $basename ) ) {
802
- $basename = $this->_fs->get_plugin_basename();
803
- }
804
-
805
- return ( $this->_fs->get_target_folder_name() != trim( dirname( $basename ), '/\\' ) );
806
  }
807
 
808
  /**
@@ -838,7 +1004,7 @@ if ( !isset($info->error) ) {
838
  $filename = basename( $basename );
839
 
840
  $new_basename = plugin_basename(
841
- trailingslashit( $this->_fs->get_slug() . ( $this->_fs->is_premium() ? '-premium' : '' ) ) .
842
  $filename
843
  );
844
 
@@ -906,14 +1072,16 @@ if ( !isset($info->error) ) {
906
  );
907
  }
908
 
909
- $slug = $addon->slug;
910
- $title = $addon->title . ' ' . $this->_fs->get_text_inline( 'Add-On', 'addon' );
 
911
 
912
  $is_addon = true;
913
  } else {
914
- $slug = $this->_fs->get_slug();
915
- $title = $this->_fs->get_plugin_title() .
916
- ( $this->_fs->is_addon() ? ' ' . $this->_fs->get_text_inline( 'Add-On', 'addon' ) : '' );
 
917
  }
918
 
919
  if ( $this->is_premium_plugin_active( $plugin_id ) ) {
@@ -926,8 +1094,8 @@ if ( !isset($info->error) ) {
926
  );
927
  }
928
 
929
- $latest_version = $this->get_latest_download_details( $plugin_id );
930
- $target_folder = "{$slug}-premium";
931
 
932
  // Prep variables for Plugin_Installer_Skin class.
933
  $extra = array();
@@ -966,11 +1134,11 @@ if ( !isset($info->error) ) {
966
  $upgrader = new Plugin_Upgrader( $skin );
967
 
968
  // Perform the action and install the plugin from the $source urldecode().
969
- add_filter( 'upgrader_source_selection', array( &$this, '_maybe_adjust_source_dir' ), 1, 3 );
970
 
971
  $install_result = $upgrader->install( $source );
972
 
973
- remove_filter( 'upgrader_source_selection', array( &$this, '_maybe_adjust_source_dir' ), 1 );
974
 
975
  if ( is_wp_error( $install_result ) ) {
976
  return array(
@@ -1060,6 +1228,29 @@ if ( !isset($info->error) ) {
1060
  return is_plugin_active( $this->_fs->premium_plugin_basename() );
1061
  }
1062
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1063
  /**
1064
  * Adjust the plugin directory name if necessary.
1065
  * Assumes plugin has a folder (not a single file plugin).
@@ -1071,6 +1262,7 @@ if ( !isset($info->error) ) {
1071
  *
1072
  * @author Vova Feldman
1073
  * @since 1.2.1.7
 
1074
  *
1075
  * @param string $source Path to upgrade/zip-file-name.tmp/subdirectory/.
1076
  * @param string $remote_source Path to upgrade/zip-file-name.tmp.
@@ -1078,13 +1270,64 @@ if ( !isset($info->error) ) {
1078
  *
1079
  * @return string|WP_Error
1080
  */
1081
- function _maybe_adjust_source_dir( $source, $remote_source, $upgrader ) {
1082
  if ( ! is_object( $GLOBALS['wp_filesystem'] ) ) {
1083
  return $source;
1084
  }
1085
 
 
 
 
1086
  // Figure out what the slug is supposed to be.
1087
- $desired_slug = $upgrader->skin->options['extra']['slug'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1088
 
1089
  $subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) );
1090
 
@@ -1094,15 +1337,16 @@ if ( !isset($info->error) ) {
1094
 
1095
  if ( true === $GLOBALS['wp_filesystem']->move( $from_path, $to_path ) ) {
1096
  return trailingslashit( $to_path );
1097
- } else {
1098
- return new WP_Error(
1099
- 'rename_failed',
1100
- $this->_fs->get_text_inline( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'module-package-rename-failure' ),
1101
- array(
1102
- 'found' => $subdir_name,
1103
- 'expected' => $desired_slug
1104
- ) );
1105
  }
 
 
 
 
 
 
 
 
 
1106
  }
1107
 
1108
  return $source;
35
  */
36
  private $_translation_updates;
37
 
38
+ private static $_upgrade_basename = null;
39
+
40
  #--------------------------------------------------------------------------------
41
  #region Singleton
42
  #--------------------------------------------------------------------------------
84
 
85
  $this->add_transient_filters();
86
 
87
+ /**
88
+ * If user has the premium plugin's code but do NOT have an active license,
89
+ * encourage him to upgrade by showing that there's a new release, but instead
90
+ * of showing an update link, show upgrade link to the pricing page.
91
+ *
92
+ * @since 1.1.6
93
+ *
94
+ */
95
+ // WP 2.9+
96
+ add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
97
+ &$this,
98
+ 'catch_plugin_update_row'
99
+ ), 9 );
100
+ add_action( "after_plugin_row_{$this->_fs->get_plugin_basename()}", array(
101
+ &$this,
102
+ 'edit_and_echo_plugin_update_row'
103
+ ), 11, 2 );
104
+
105
+ add_action( 'admin_head', array( &$this, 'catch_plugin_information_dialog_contents' ) );
106
 
107
  if ( ! WP_FS__IS_PRODUCTION_MODE ) {
108
  add_filter( 'http_request_host_is_external', array(
112
  }
113
 
114
  if ( $this->_fs->is_premium() ) {
115
+ if ( ! $this->is_correct_folder_name() ) {
116
  add_filter( 'upgrader_post_install', array( &$this, '_maybe_update_folder_name' ), 10, 3 );
117
  }
118
 
119
+ add_filter( 'upgrader_pre_install', array( 'FS_Plugin_Updater', '_store_basename_for_source_adjustment' ), 1, 2 );
120
+ add_filter( 'upgrader_source_selection', array( 'FS_Plugin_Updater', '_maybe_adjust_source_dir' ), 1, 3 );
121
+
122
  if ( ! $this->_fs->has_any_active_valid_license() ) {
123
  add_filter( 'wp_prepare_themes_for_js', array( &$this, 'change_theme_update_info_html' ), 10, 1 );
124
  }
125
  }
126
  }
127
 
128
+ /**
129
+ * @author Leo Fajardo (@leorw)
130
+ * @since 2.1.4
131
+ */
132
+ function catch_plugin_information_dialog_contents() {
133
+ if (
134
+ 'plugin-information' !== fs_request_get( 'tab', false ) ||
135
+ $this->_fs->get_slug() !== fs_request_get( 'plugin', false )
136
+ ) {
137
+ return;
138
+ }
139
+
140
+ add_action( 'admin_footer', array( &$this, 'edit_and_echo_plugin_information_dialog_contents' ), 0, 1 );
141
+
142
+ ob_start();
143
+ }
144
+
145
+ /**
146
+ * @author Leo Fajardo (@leorw)
147
+ * @since 2.1.4
148
+ *
149
+ * @param string $hook_suffix
150
+ */
151
+ function edit_and_echo_plugin_information_dialog_contents( $hook_suffix ) {
152
+ if (
153
+ 'plugin-information' !== fs_request_get( 'tab', false ) ||
154
+ $this->_fs->get_slug() !== fs_request_get( 'plugin', false )
155
+ ) {
156
+ return;
157
+ }
158
+
159
+ $license = $this->_fs->_get_license();
160
+
161
+ $subscription = ( is_object( $license ) && ! $license->is_lifetime() ) ?
162
+ $this->_fs->_get_subscription( $license->id ) :
163
+ null;
164
+
165
+ $contents = ob_get_clean();
166
+
167
+ /**
168
+ * Replace the plugin information dialog's "Install Update Now" button's text and URL. If there's a license,
169
+ * the text will be "Renew license" and will link to the checkout page with the license's billing cycle
170
+ * and quota. If there's no license, the text will be "Buy license" and will link to the pricing page.
171
+ */
172
+ $contents = preg_replace(
173
+ '/(.+\<a.+)(id="plugin_update_from_iframe")(.+href=")([^\s]+)(".+\>)(.+)(\<\/a.+)/is',
174
+ is_object( $license ) ?
175
+ sprintf(
176
+ '$1$3%s$5%s$7',
177
+ $this->_fs->checkout_url(
178
+ is_object( $subscription ) ?
179
+ ( 1 == $subscription->billing_cycle ? WP_FS__PERIOD_MONTHLY : WP_FS__PERIOD_ANNUALLY ) :
180
+ WP_FS__PERIOD_LIFETIME,
181
+ false,
182
+ array( 'licenses' => $license->quota )
183
+ ),
184
+ fs_text_inline( 'Renew license', 'renew-license', $this->_fs->get_slug() )
185
+ ) :
186
+ sprintf(
187
+ '$1$3%s$5%s$7',
188
+ $this->_fs->pricing_url(),
189
+ fs_text_inline( 'Buy license', 'buy-license', $this->_fs->get_slug() )
190
+ ),
191
+ $contents
192
+ );
193
+
194
+ echo $contents;
195
+ }
196
+
197
  /**
198
  * @author Vova Feldman (@svovaf)
199
  * @since 2.0.0
257
 
258
  $r = $current->response[ $file ];
259
 
260
+ if ( ! $this->_fs->has_any_active_valid_license() ) {
261
+ /**
262
+ * Turn the "new version" text into a link that opens the plugin information dialog when clicked and
263
+ * make the "View version x details" text link to the checkout page instead of opening the plugin
264
+ * information dialog when clicked.
265
+ *
266
+ * Sample input:
267
+ * There is a new version of Awesome Plugin available. <a href="...>View version x.y.z details</a> or <a href="...>update now</a>.
268
+ * Output:
269
+ * There is a <a href="...>new version</a> of Awesome Plugin available. <a href="...>Buy a license now</a> to access version x.y.z security & feature updates, and support.
270
+ *
271
+ * @author Leo Fajardo (@leorw)
272
+ */
273
+ $plugin_update_row = preg_replace(
274
+ '/(\<div.+>)(.+)(\<a.+href="([^\s]+)"([^\<]+)\>.+\<a.+)(\<\/div\>)/is',
275
+ (
276
+ '$1' .
277
+ sprintf(
278
+ fs_text_inline( 'There is a %s of %s available.', 'new-version-available', $this->_fs->get_slug() ),
279
+ sprintf(
280
+ '<a href="$4"%s>%s</a>',
281
+ '$5',
282
+ fs_text_inline( 'new version', 'new-version', $this->_fs->get_slug() )
283
+ ),
284
+ $this->_fs->get_plugin_title()
285
+ ) .
286
+ ' ' .
287
+ $this->_fs->version_upgrade_checkout_link( $r->new_version ) .
288
+ '$6'
289
+ ),
290
+ $plugin_update_row
291
+ );
292
+ }
293
+
294
+ if (
295
+ $this->_fs->is_plugin() &&
296
+ isset( $r->upgrade_notice ) &&
297
+ strlen( trim( $r->upgrade_notice ) ) > 0
298
+ ) {
299
+ $upgrade_notice_html = sprintf(
300
+ '<p class="notice upgrade-notice"><strong>%s</strong> %s</p>',
301
+ fs_text_inline( 'Important Upgrade Notice:', 'upgrade_notice', $this->_fs->get_slug() ),
302
+ esc_html( $r->upgrade_notice )
303
+ );
304
+
305
+ $plugin_update_row = str_replace( '</div>', '</div>' . $upgrade_notice_html, $plugin_update_row );
306
+ }
307
 
308
  echo $plugin_update_row;
309
  }
332
 
333
  $prepared_themes[ $theme_basename ]['update'] = preg_replace(
334
  '/(\<p.+>)(.+)(\<a.+\<a.+)\.(.+\<\/p\>)/is',
335
+ '$1 $2 ' . $this->_fs->version_upgrade_checkout_link( $themes_update->response[ $theme_basename ]['new_version'] ) .
 
 
 
336
  '$4',
337
  $prepared_themes[ $theme_basename ]['update']
338
  );
412
  $new_version = $this->_fs->get_update(
413
  false,
414
  fs_request_get_bool( 'force-check' ),
415
+ WP_FS__TIME_24_HOURS_IN_SEC / 24,
416
+ $this->_fs->get_plugin_version()
417
  );
418
 
419
  $this->_update_details = false;
511
  );
512
  }
513
 
514
+ if ( $this->_fs->is_premium() ) {
515
+ $latest_tag = $this->_fs->_fetch_latest_version( $this->_fs->get_id(), false );
516
+
517
+ if (
518
+ isset( $latest_tag->readme ) &&
519
+ isset( $latest_tag->readme->upgrade_notice ) &&
520
+ ! empty( $latest_tag->readme->upgrade_notice )
521
+ ) {
522
+ $update->upgrade_notice = $latest_tag->readme->upgrade_notice;
523
+ }
524
+ }
525
+
526
  $update->{$this->_fs->get_module_type()} = $this->_fs->get_plugin_basename();
527
 
528
  return $update;
695
 
696
  $plugin_basename = $this->_fs->get_plugin_basename();
697
  if ( 'themes' === $module_type ) {
698
+ $plugin_basename = $slug;
699
  }
700
 
701
  global $wp_version;
707
  array(
708
  "{$module_type}" => array(
709
  $plugin_basename => array(
710
+ 'Name' => trim( str_replace( $this->_fs->get_plugin()->premium_suffix, '', $plugin_data['Name'] ) ),
711
  'Author' => $plugin_data['Author'],
712
  )
713
  )
870
  }*/
871
  }
872
 
873
+ $plugin_version = $this->_fs->get_plugin_version();
874
+
875
  // Get plugin's newest update.
876
+ $new_version = $this->get_latest_download_details( $is_addon ? $addon->id : false, $plugin_version );
877
 
878
  if ( ! is_object( $new_version ) || empty( $new_version->version ) ) {
879
+ $data->version = $plugin_version;
880
  } else {
881
  if ( $is_addon ) {
882
  $data->name = $addon->title . ' ' . $this->_fs->get_text_inline( 'Add-On', 'addon' );
893
 
894
  $data->version = $new_version->version;
895
  $data->download_link = $new_version->url;
896
+
897
+ if ( isset( $new_version->readme ) && is_object( $new_version->readme ) ) {
898
+ $new_version_readme_data = $new_version->readme;
899
+ if ( isset( $new_version_readme_data->sections ) ) {
900
+ $new_version_readme_data->sections = (array) $new_version_readme_data->sections;
901
+ } else {
902
+ $new_version_readme_data->sections = array();
903
+ }
904
+
905
+ if ( isset( $data->sections ) ) {
906
+ if ( isset( $data->sections['screenshots'] ) ) {
907
+ $new_version_readme_data->sections['screenshots'] = $data->sections['screenshots'];
908
+ }
909
+
910
+ if ( isset( $data->sections['reviews'] ) ) {
911
+ $new_version_readme_data->sections['reviews'] = $data->sections['reviews'];
912
+ }
913
+ }
914
+
915
+ if ( isset( $new_version_readme_data->banners ) ) {
916
+ $new_version_readme_data->banners = (array) $new_version_readme_data->banners;
917
+ } else if ( isset( $data->banners ) ) {
918
+ $new_version_readme_data->banners = $data->banners;
919
+ }
920
+
921
+ $wp_org_sections = array(
922
+ 'author',
923
+ 'author_profile',
924
+ 'rating',
925
+ 'ratings',
926
+ 'num_ratings',
927
+ 'support_threads',
928
+ 'support_threads_resolved',
929
+ 'active_installs',
930
+ 'added',
931
+ 'homepage'
932
+ );
933
+
934
+ foreach ( $wp_org_sections as $wp_org_section ) {
935
+ if ( isset( $data->{$wp_org_section} ) ) {
936
+ $new_version_readme_data->{$wp_org_section} = $data->{$wp_org_section};
937
+ }
938
+ }
939
+
940
+ $data = $new_version_readme_data;
941
+ }
942
  }
943
 
944
  return $data;
949
  * @since 1.2.1.7
950
  *
951
  * @param number|bool $addon_id
952
+ * @param bool|string $newer_than Since 2.2.1
953
+ * @param bool|string $fetch_readme Since 2.2.1
954
  *
955
  * @return object
956
  */
957
+ private function get_latest_download_details( $addon_id = false, $newer_than = false, $fetch_readme = true ) {
958
+ return $this->_fs->_fetch_latest_version( $addon_id, true, WP_FS__TIME_24_HOURS_IN_SEC, $newer_than, $fetch_readme );
959
  }
960
 
961
  /**
965
  * @author Vova Feldman (@svovaf)
966
  * @since 1.2.1.6
967
  *
 
 
968
  * @return bool
969
  */
970
+ private function is_correct_folder_name() {
971
+ return ( $this->_fs->get_target_folder_name() == trim( dirname( $this->_fs->get_plugin_basename() ), '/\\' ) );
 
 
 
 
972
  }
973
 
974
  /**
1004
  $filename = basename( $basename );
1005
 
1006
  $new_basename = plugin_basename(
1007
+ trailingslashit( $this->_fs->is_premium() ? $this->_fs->get_premium_slug() : $this->_fs->get_slug() ) .
1008
  $filename
1009
  );
1010
 
1072
  );
1073
  }
1074
 
1075
+ $slug = $addon->slug;
1076
+ $premium_slug = $addon->premium_slug;
1077
+ $title = $addon->title . ' ' . $this->_fs->get_text_inline( 'Add-On', 'addon' );
1078
 
1079
  $is_addon = true;
1080
  } else {
1081
+ $slug = $this->_fs->get_slug();
1082
+ $premium_slug = $this->_fs->get_premium_slug();
1083
+ $title = $this->_fs->get_plugin_title() .
1084
+ ( $this->_fs->is_addon() ? ' ' . $this->_fs->get_text_inline( 'Add-On', 'addon' ) : '' );
1085
  }
1086
 
1087
  if ( $this->is_premium_plugin_active( $plugin_id ) ) {
1094
  );
1095
  }
1096
 
1097
+ $latest_version = $this->get_latest_download_details( $plugin_id, false, false );
1098
+ $target_folder = $premium_slug;
1099
 
1100
  // Prep variables for Plugin_Installer_Skin class.
1101
  $extra = array();
1134
  $upgrader = new Plugin_Upgrader( $skin );
1135
 
1136
  // Perform the action and install the plugin from the $source urldecode().
1137
+ add_filter( 'upgrader_source_selection', array( 'FS_Plugin_Updater', '_maybe_adjust_source_dir' ), 1, 3 );
1138
 
1139
  $install_result = $upgrader->install( $source );
1140
 
1141
+ remove_filter( 'upgrader_source_selection', array( 'FS_Plugin_Updater', '_maybe_adjust_source_dir' ), 1 );
1142
 
1143
  if ( is_wp_error( $install_result ) ) {
1144
  return array(
1228
  return is_plugin_active( $this->_fs->premium_plugin_basename() );
1229
  }
1230
 
1231
+ /**
1232
+ * Store the basename since it's not always available in the `_maybe_adjust_source_dir` method below.
1233
+ *
1234
+ * @author Leo Fajardo (@leorw)
1235
+ * @since 2.2.1
1236
+ *
1237
+ * @param bool|WP_Error $response Response.
1238
+ * @param array $hook_extra Extra arguments passed to hooked filters.
1239
+ *
1240
+ * @return bool|WP_Error
1241
+ */
1242
+ static function _store_basename_for_source_adjustment( $response, $hook_extra ) {
1243
+ if ( isset( $hook_extra['plugin'] ) ) {
1244
+ self::$_upgrade_basename = $hook_extra['plugin'];
1245
+ } else if ( $hook_extra['theme'] ) {
1246
+ self::$_upgrade_basename = $hook_extra['theme'];
1247
+ } else {
1248
+ self::$_upgrade_basename = null;
1249
+ }
1250
+
1251
+ return $response;
1252
+ }
1253
+
1254
  /**
1255
  * Adjust the plugin directory name if necessary.
1256
  * Assumes plugin has a folder (not a single file plugin).
1262
  *
1263
  * @author Vova Feldman
1264
  * @since 1.2.1.7
1265
+ * @since 2.2.1 The method was converted to static since when the admin update bulk products via the Updates section, the logic applies the `upgrader_source_selection` filter for every product that is being updated.
1266
  *
1267
  * @param string $source Path to upgrade/zip-file-name.tmp/subdirectory/.
1268
  * @param string $remote_source Path to upgrade/zip-file-name.tmp.
1270
  *
1271
  * @return string|WP_Error
1272
  */
1273
+ static function _maybe_adjust_source_dir( $source, $remote_source, $upgrader ) {
1274
  if ( ! is_object( $GLOBALS['wp_filesystem'] ) ) {
1275
  return $source;
1276
  }
1277
 
1278
+ $basename = self::$_upgrade_basename;
1279
+ $is_theme = false;
1280
+
1281
  // Figure out what the slug is supposed to be.
1282
+ if ( isset( $upgrader->skin->options['extra'] ) ) {
1283
+ // Set by the auto-install logic.
1284
+ $desired_slug = $upgrader->skin->options['extra']['slug'];
1285
+ } else if ( ! empty( $basename ) ) {
1286
+ /**
1287
+ * If it doesn't end with ".php", it's a theme.
1288
+ *
1289
+ * @author Leo Fajardo (@leorw)
1290
+ * @since 2.2.1
1291
+ */
1292
+ $is_theme = ( ! fs_ends_with( $basename, '.php' ) );
1293
+
1294
+ $desired_slug = ( ! $is_theme ) ?
1295
+ dirname( $basename ) :
1296
+ // Theme slug
1297
+ $basename;
1298
+ } else {
1299
+ // Can't figure out the desired slug, stop the execution.
1300
+ return $source;
1301
+ }
1302
+
1303
+ if ( is_multisite() ) {
1304
+ /**
1305
+ * If we are running in a multisite environment and the product is not network activated,
1306
+ * the instance will not exist anyway. Therefore, try to update the source if necessary
1307
+ * regardless if the Freemius instance of the product exists or not.
1308
+ *
1309
+ * @author Vova Feldman
1310
+ */
1311
+ } else if ( ! empty( $basename ) ) {
1312
+ $fs = Freemius::get_instance_by_file(
1313
+ $basename,
1314
+ $is_theme ?
1315
+ WP_FS__MODULE_TYPE_THEME :
1316
+ WP_FS__MODULE_TYPE_PLUGIN
1317
+ );
1318
+
1319
+ if ( ! is_object( $fs ) ) {
1320
+ /**
1321
+ * If the Freemius instance does not exist on a non-multisite network environment, it means that:
1322
+ * 1. The product is not powered by Freemius; OR
1323
+ * 2. The product is not activated, therefore, we don't mind if after the update the folder name will change.
1324
+ *
1325
+ * @author Leo Fajardo (@leorw)
1326
+ * @since 2.2.1
1327
+ */
1328
+ return $source;
1329
+ }
1330
+ }
1331
 
1332
  $subdir_name = untrailingslashit( str_replace( trailingslashit( $remote_source ), '', $source ) );
1333
 
1337
 
1338
  if ( true === $GLOBALS['wp_filesystem']->move( $from_path, $to_path ) ) {
1339
  return trailingslashit( $to_path );
 
 
 
 
 
 
 
 
1340
  }
1341
+
1342
+ return new WP_Error(
1343
+ 'rename_failed',
1344
+ fs_text_inline( 'The remote plugin package does not contain a folder with the desired slug and renaming did not work.', 'module-package-rename-failure' ),
1345
+ array(
1346
+ 'found' => $subdir_name,
1347
+ 'expected' => $desired_slug
1348
+ )
1349
+ );
1350
  }
1351
 
1352
  return $source;
sdk/freemius/includes/class-fs-storage.php CHANGED
@@ -374,6 +374,7 @@
374
  // When network activated, then network level.
375
  'install_timestamp' => 1,
376
  'prev_is_premium' => 1,
 
377
 
378
  // If not network activated OR delegated, then site level.
379
  'activation_timestamp' => 2,
374
  // When network activated, then network level.
375
  'install_timestamp' => 1,
376
  'prev_is_premium' => 1,
377
+ 'require_license_activation' => 1,
378
 
379
  // If not network activated OR delegated, then site level.
380
  'activation_timestamp' => 2,
sdk/freemius/includes/entities/class-fs-plugin.php CHANGED
@@ -24,6 +24,13 @@
24
  * @var string
25
  */
26
  public $slug;
 
 
 
 
 
 
 
27
  /**
28
  * @since 1.2.2
29
  *
@@ -67,6 +74,13 @@
67
  * @var bool
68
  */
69
  public $is_premium;
 
 
 
 
 
 
 
70
  /**
71
  * @since 1.0.9
72
  *
@@ -87,6 +101,14 @@
87
  $this->is_premium = false;
88
  $this->is_live = true;
89
 
 
 
 
 
 
 
 
 
90
  if ( isset( $plugin->info ) && is_object( $plugin->info ) ) {
91
  $this->info = new FS_Plugin_Info( $plugin->info );
92
  }
24
  * @var string
25
  */
26
  public $slug;
27
+ /**
28
+ * @author Leo Fajardo (@leorw)
29
+ * @since 2.2.1
30
+ *
31
+ * @var string
32
+ */
33
+ public $premium_slug;
34
  /**
35
  * @since 1.2.2
36
  *
74
  * @var bool
75
  */
76
  public $is_premium;
77
+ /**
78
+ * @author Leo Fajardo (@leorw)
79
+ * @since 2.2.1
80
+ *
81
+ * @var string
82
+ */
83
+ public $premium_suffix;
84
  /**
85
  * @since 1.0.9
86
  *
101
  $this->is_premium = false;
102
  $this->is_live = true;
103
 
104
+ if ( empty( $this->premium_slug ) && ! empty( $plugin->slug ) ) {
105
+ $this->premium_slug = "{$this->slug}-premium";
106
+ }
107
+
108
+ if ( empty( $this->premium_suffix ) ) {
109
+ $this->premium_suffix = '(Premium)';
110
+ }
111
+
112
  if ( isset( $plugin->info ) && is_object( $plugin->info ) ) {
113
  $this->info = new FS_Plugin_Info( $plugin->info );
114
  }
sdk/freemius/includes/entities/class-fs-site.php CHANGED
@@ -164,6 +164,8 @@
164
  fs_ends_with( $subdomain, '.myftpupload.com' ) ||
165
  // ngrok tunneling.
166
  fs_ends_with( $subdomain, '.ngrok.io' ) ||
 
 
167
  // SiteGround staging.
168
  fs_starts_with( $subdomain, 'staging' ) ||
169
  // WPEngine staging.
164
  fs_ends_with( $subdomain, '.myftpupload.com' ) ||
165
  // ngrok tunneling.
166
  fs_ends_with( $subdomain, '.ngrok.io' ) ||
167
+ // wpsandbox.
168
+ fs_ends_with( $subdomain, '.wpsandbox.pro' ) ||
169
  // SiteGround staging.
170
  fs_starts_with( $subdomain, 'staging' ) ||
171
  // WPEngine staging.
sdk/freemius/includes/fs-essential-functions.php CHANGED
@@ -36,6 +36,8 @@
36
  }
37
  }
38
 
 
 
39
  #region Core Redirect (copied from BuddyPress) -----------------------------------------
40
 
41
  if ( ! function_exists( 'fs_redirect' ) ) {
@@ -273,11 +275,11 @@
273
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
274
  }
275
 
276
- $all_plugins = get_plugins();
277
  $all_plugins_paths = array();
278
 
279
  // Get active plugin's main files real full names (might be symlinks).
280
- foreach ( $all_plugins as $relative_path => &$data ) {
281
  $all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
282
  }
283
 
36
  }
37
  }
38
 
39
+ require_once dirname( __FILE__ ) . '/supplements/fs-essential-functions-2.2.1.php';
40
+
41
  #region Core Redirect (copied from BuddyPress) -----------------------------------------
42
 
43
  if ( ! function_exists( 'fs_redirect' ) ) {
275
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
276
  }
277
 
278
+ $all_plugins = fs_get_plugins( true );
279
  $all_plugins_paths = array();
280
 
281
  // Get active plugin's main files real full names (might be symlinks).
282
+ foreach ( $all_plugins as $relative_path => $data ) {
283
  $all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
284
  }
285
 
sdk/freemius/includes/fs-plugin-info-dialog.php CHANGED
@@ -64,7 +64,7 @@
64
  function _get_addon_info_filter( $data, $action = '', $args = null ) {
65
  $this->_logger->entrance();
66
 
67
- $parent_plugin_id = fs_request_get( 'parent_plugin_id', false );
68
 
69
  if ( $this->_fs->get_id() != $parent_plugin_id ||
70
  ( 'plugin_information' !== $action ) ||
@@ -142,6 +142,8 @@
142
  }
143
  }
144
 
 
 
145
  if ( ! $has_paid_plan && $selected_addon->is_wp_org_compliant ) {
146
  $repo_data = FS_Plugin_Updater::_fetch_plugin_info_from_repository(
147
  'plugin_information', (object) array(
@@ -170,8 +172,28 @@
170
  } else {
171
  $data->wp_org_missing = false;
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  // Fetch latest version from Freemius.
174
- $latest = $this->_fs->_fetch_latest_version( $selected_addon->id );
 
 
 
 
 
175
 
176
  if ( $has_paid_plan ) {
177
  $data->checkout_link = $this->_fs->checkout_url();
@@ -214,11 +236,19 @@
214
  }
215
  }
216
 
217
- $data->name = $selected_addon->title;
218
- $view_vars = array( 'plugin' => $selected_addon );
219
- $data->sections = array(
220
- 'description' => fs_get_template( '/plugin-info/description.php', $view_vars ),
221
- );
 
 
 
 
 
 
 
 
222
 
223
  if ( $has_pricing ) {
224
  // Add plans to data.
64
  function _get_addon_info_filter( $data, $action = '', $args = null ) {
65
  $this->_logger->entrance();
66
 
67
+ $parent_plugin_id = fs_request_get( 'parent_plugin_id', $this->_fs->get_id() );
68
 
69
  if ( $this->_fs->get_id() != $parent_plugin_id ||
70
  ( 'plugin_information' !== $action ) ||
142
  }
143
  }
144
 
145
+ $latest = null;
146
+
147
  if ( ! $has_paid_plan && $selected_addon->is_wp_org_compliant ) {
148
  $repo_data = FS_Plugin_Updater::_fetch_plugin_info_from_repository(
149
  'plugin_information', (object) array(
172
  } else {
173
  $data->wp_org_missing = false;
174
 
175
+ $current_addon_version = false;
176
+ if ( $this->_fs->is_addon_activated( $selected_addon->id ) ) {
177
+ $current_addon_version = $this->_fs->get_addon_instance( $selected_addon->id )->get_plugin_version();
178
+ } else if ( $this->_fs->is_addon_installed( $selected_addon->id ) ) {
179
+ $addon_plugin_data = get_plugin_data(
180
+ ( WP_PLUGIN_DIR . '/' . $this->_fs->get_addon_basename( $selected_addon->id ) ),
181
+ false,
182
+ false
183
+ );
184
+
185
+ if ( ! empty( $addon_plugin_data ) ) {
186
+ $current_addon_version = $addon_plugin_data['Version'];
187
+ }
188
+ }
189
+
190
  // Fetch latest version from Freemius.
191
+ $latest = $this->_fs->_fetch_latest_version(
192
+ $selected_addon->id,
193
+ true,
194
+ WP_FS__TIME_24_HOURS_IN_SEC,
195
+ $current_addon_version
196
+ );
197
 
198
  if ( $has_paid_plan ) {
199
  $data->checkout_link = $this->_fs->checkout_url();
236
  }
237
  }
238
 
239
+ $data->name = $selected_addon->title;
240
+ $view_vars = array( 'plugin' => $selected_addon );
241
+
242
+ if ( is_object( $latest ) && isset( $latest->readme ) && is_object( $latest->readme ) ) {
243
+ $latest_version_readme_data = $latest->readme;
244
+ if ( isset( $latest_version_readme_data->sections ) ) {
245
+ $data->sections = (array) $latest_version_readme_data->sections;
246
+ } else {
247
+ $data->sections = array();
248
+ }
249
+ }
250
+
251
+ $data->sections['description'] = fs_get_template( '/plugin-info/description.php', $view_vars );
252
 
253
  if ( $has_pricing ) {
254
  // Add plans to data.
sdk/freemius/includes/i18n.php CHANGED
@@ -94,7 +94,7 @@
94
  'activate-x-now' => _fs_x( 'Complete "%s" Activation Now',
95
  '%s - plugin name. As complete "Jetpack" activation now' ),
96
  'few-plugin-tweaks' => _fs_text( 'We made a few tweaks to the %s, %s' ),
97
- 'optin-x-now' => _fs_text( 'Opt in to make "%s" Better!' ),
98
  'error' => _fs_text( 'Error' ),
99
  'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
100
  'learn-more' => _fs_text( 'Learn more' ),
@@ -215,7 +215,7 @@
215
  'delete-account-confirm' => _fs_text( 'Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?' ),
216
  'downgrade-x-confirm' => _fs_text( 'Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s.' ),
217
  'cancel-trial-confirm' => _fs_text( 'Cancelling the trial will immediately block access to all premium features. Are you sure?' ),
218
- 'after-downgrade-non-blocking' => _fs_text( 'You can still enjoy all %s features but you will not have access to %s updates and support.' ),
219
  'after-downgrade-blocking' => _fs_text( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.' ),
220
  'proceed-confirmation' => _fs_text( 'Are you sure you want to proceed?' ),
221
  #endregion Account
@@ -600,4 +600,4 @@
600
  'not-compatible-warning' => _fs_text( 'This plugin has not been marked as compatible with your version of WordPress.' ),
601
  'newer-installed' => _fs_text( 'Newer Version (%s) Installed' ),
602
  'latest-installed' => _fs_text( 'Latest Version Installed' ),
603
- );
94
  'activate-x-now' => _fs_x( 'Complete "%s" Activation Now',
95
  '%s - plugin name. As complete "Jetpack" activation now' ),
96
  'few-plugin-tweaks' => _fs_text( 'We made a few tweaks to the %s, %s' ),
97
+ 'optin-x-now' => _fs_text( 'Opt in to make "%s" better!' ),
98
  'error' => _fs_text( 'Error' ),
99
  'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
100
  'learn-more' => _fs_text( 'Learn more' ),
215
  'delete-account-confirm' => _fs_text( 'Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?' ),
216
  'downgrade-x-confirm' => _fs_text( 'Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s.' ),
217
  'cancel-trial-confirm' => _fs_text( 'Cancelling the trial will immediately block access to all premium features. Are you sure?' ),
218
+ 'after-downgrade-non-blocking' => _fs_text( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.' ),
219
  'after-downgrade-blocking' => _fs_text( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.' ),
220
  'proceed-confirmation' => _fs_text( 'Are you sure you want to proceed?' ),
221
  #endregion Account
600
  'not-compatible-warning' => _fs_text( 'This plugin has not been marked as compatible with your version of WordPress.' ),
601
  'newer-installed' => _fs_text( 'Newer Version (%s) Installed' ),
602
  'latest-installed' => _fs_text( 'Latest Version Installed' ),
603
+ );
sdk/freemius/includes/managers/class-fs-admin-menu-manager.php CHANGED
@@ -280,6 +280,18 @@
280
  return $this->_network_menu_exists;
281
  }
282
 
 
 
 
 
 
 
 
 
 
 
 
 
283
  /**
284
  * @author Vova Feldman (@svovaf)
285
  * @since 1.1.3
280
  return $this->_network_menu_exists;
281
  }
282
 
283
+ /**
284
+ * @author Leo Fajardo (@leorw)
285
+ *
286
+ * @param string $menu_slug
287
+ *
288
+ * @since 2.1.3
289
+ */
290
+ function set_slug_and_network_menu_exists_flag($menu_slug ) {
291
+ $this->_menu_slug = $menu_slug;
292
+ $this->_network_menu_exists = false;
293
+ }
294
+
295
  /**
296
  * @author Vova Feldman (@svovaf)
297
  * @since 1.1.3
sdk/freemius/includes/managers/class-fs-admin-notice-manager.php CHANGED
@@ -226,6 +226,49 @@
226
  }
227
  }
228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  fs_require_template( 'admin-notice.php', $msg );
230
 
231
  if ( $msg['sticky'] ) {
226
  }
227
  }
228
 
229
+ /**
230
+ * Added a filter to control the visibility of admin notices.
231
+ *
232
+ * Usage example:
233
+ *
234
+ * /**
235
+ * * @param bool $show
236
+ * * @param array $msg {
237
+ * * @var string $message The actual message.
238
+ * * @var string $title An optional message title.
239
+ * * @var string $type The type of the message ('success', 'update', 'warning', 'promotion').
240
+ * * @var string $id The unique identifier of the message.
241
+ * * @var string $manager_id The unique identifier of the notices manager. For plugins it would be the plugin's slug, for themes - `<slug>-theme`.
242
+ * * @var string $plugin The product's title.
243
+ * * @var string $wp_user_id An optional WP user ID that this admin notice is for.
244
+ * * }
245
+ * *
246
+ * * @return bool
247
+ * *\/
248
+ * function my_custom_show_admin_notice( $show, $msg ) {
249
+ * if ('trial_promotion' != $msg['id']) {
250
+ * return false;
251
+ * }
252
+ *
253
+ * return $show;
254
+ * }
255
+ *
256
+ * my_fs()->add_filter( 'show_admin_notice', 'my_custom_show_admin_notice', 10, 2 );
257
+ *
258
+ * @author Vova Feldman
259
+ * @since 2.2.0
260
+ */
261
+ $show_notice = call_user_func_array( 'fs_apply_filter', array(
262
+ $this->_module_unique_affix,
263
+ 'show_admin_notice',
264
+ true,
265
+ $msg
266
+ ) );
267
+
268
+ if ( true !== $show_notice ) {
269
+ continue;
270
+ }
271
+
272
  fs_require_template( 'admin-notice.php', $msg );
273
 
274
  if ( $msg['sticky'] ) {
sdk/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php CHANGED
@@ -26,16 +26,12 @@
26
  * If the user changes the main plugin's file name, the file_exists()
27
  * will catch it.
28
  */
29
- if ( ! function_exists( 'get_plugins' ) ) {
30
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
31
- }
32
-
33
- $all_plugins = get_plugins();
34
 
35
  $file_real_path = fs_normalize_path( realpath( $file ) );
36
 
37
  // Get active plugin's main files real full names (might be symlinks).
38
- foreach ( $all_plugins as $relative_path => &$data ) {
39
  if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) ) ) ) {
40
  if ( '.' !== dirname( trailingslashit( $relative_path ) ) ) {
41
  return $relative_path;
26
  * If the user changes the main plugin's file name, the file_exists()
27
  * will catch it.
28
  */
29
+ $all_plugins = fs_get_plugins( true );
 
 
 
 
30
 
31
  $file_real_path = fs_normalize_path( realpath( $file ) );
32
 
33
  // Get active plugin's main files real full names (might be symlinks).
34
+ foreach ( $all_plugins as $relative_path => $data ) {
35
  if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) ) ) ) {
36
  if ( '.' !== dirname( trailingslashit( $relative_path ) ) ) {
37
  return $relative_path;
sdk/freemius/includes/supplements/fs-essential-functions-2.2.1.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
+ * @since 2.2.1
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ if ( ! function_exists( 'fs_get_plugins' ) ) {
14
+ /**
15
+ * @author Leo Fajardo (@leorw)
16
+ * @since 2.2.1
17
+ *
18
+ * @param bool $delete_cache
19
+ *
20
+ * @return array
21
+ */
22
+ function fs_get_plugins( $delete_cache = false ) {
23
+ $cached_plugins = wp_cache_get( 'plugins', 'plugins' );
24
+ if ( ! is_array( $cached_plugins ) ) {
25
+ $cached_plugins = array();
26
+ }
27
+
28
+ $plugin_folder = '';
29
+ if ( isset( $cached_plugins[ $plugin_folder ] ) ) {
30
+ $plugins = $cached_plugins[ $plugin_folder ];
31
+ } else {
32
+ if ( ! function_exists( 'get_plugins' ) ) {
33
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
34
+ }
35
+
36
+ $plugins = get_plugins();
37
+
38
+ if ( $delete_cache && is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
39
+ wp_cache_delete( 'plugins', 'plugins' );
40
+ }
41
+ }
42
+
43
+ return $plugins;
44
+ }
45
+ }
sdk/freemius/languages/freemius-da_DK.mo CHANGED
Binary file
sdk/freemius/languages/freemius-da_DK.po CHANGED
@@ -1,12 +1,2434 @@
 
 
 
 
 
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: \n"
4
- "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: \n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: \n"
8
- "Language: \n"
9
- "Language-Team: \n"
10
- "Content-Type: \n"
11
- "Content-Transfer-Encoding: \n"
12
- "Plural-Forms: \n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2018 freemius
2
+ # This file is distributed under the same license as the freemius package.
3
+ # Translators:
4
+ # Joachim Jensen, 2016-2018
5
+ # Lars Koudal, 2018
6
  msgid ""
7
  msgstr ""
8
+ "Project-Id-Version: WordPress SDK\n"
9
+ "Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
10
  "POT-Creation-Date: \n"
11
+ "PO-Revision-Date: 2018-11-25 07:22+0000\n"
12
+ "Last-Translator: Vova Feldman <vova@freemius.com>\n"
13
+ "Language: da_DK\n"
14
+ "Language-Team: Danish (Denmark) (http://www.transifex.com/freemius/wordpress-sdk/language/da_DK/)\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "MIME-Version: 1.0\n"
19
+ "X-Poedit-Basepath: ..\n"
20
+ "X-Poedit-KeywordsList: get_text_inline;fs_text_inline;fs_echo_inline;fs_esc_js_inline;fs_esc_attr_inline;fs_esc_attr_echo_inline;fs_esc_html_inline;fs_esc_html_echo_inline;get_text_x_inline:1,2c;fs_text_x_inline:1,2c;fs_echo_x_inline:1,2c;fs_esc_attr_x_inline:1,2c;fs_esc_js_x_inline:1,2c;fs_esc_js_echo_x_inline:1,2c;fs_esc_html_x_inline:1,2c;fs_esc_html_echo_x_inline:1,2c\n"
21
+ "X-Poedit-SearchPath-0: .\n"
22
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
23
+ "X-Poedit-SourceCharset: UTF-8\n"
24
+
25
+ #: includes/class-freemius.php:1602
26
+ msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
27
+ msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
28
+
29
+ #: includes/class-freemius.php:1604
30
+ msgid "Error"
31
+ msgstr "Fejl"
32
+
33
+ #: includes/class-freemius.php:1925
34
+ msgid "I found a better %s"
35
+ msgstr "Jeg fandt et bedre %s"
36
+
37
+ #: includes/class-freemius.php:1927
38
+ msgid "What's the %s's name?"
39
+ msgstr "Hvad er navnet på %s?"
40
+
41
+ #: includes/class-freemius.php:1933
42
+ msgid "It's a temporary %s. I'm just debugging an issue."
43
+ msgstr "Det er en midlertidig %s. Jeg er i gang med fejlrettelser."
44
+
45
+ #: includes/class-freemius.php:1935
46
+ msgid "Deactivation"
47
+ msgstr "Deaktivering"
48
+
49
+ #: includes/class-freemius.php:1936
50
+ msgid "Theme Switch"
51
+ msgstr "Temaskift"
52
+
53
+ #: includes/class-freemius.php1945, templates/forms/resend-key.php:24
54
+ msgid "Other"
55
+ msgstr "Andet"
56
+
57
+ #: includes/class-freemius.php:1953
58
+ msgid "I no longer need the %s"
59
+ msgstr "Jeg har ikke længere brug for %s"
60
+
61
+ #: includes/class-freemius.php:1960
62
+ msgid "I only needed the %s for a short period"
63
+ msgstr "Jeg behøvede kun %s i en kort periode"
64
+
65
+ #: includes/class-freemius.php:1966
66
+ msgid "The %s broke my site"
67
+ msgstr "%s ødelagde min webside"
68
+
69
+ #: includes/class-freemius.php:1973
70
+ msgid "The %s suddenly stopped working"
71
+ msgstr "%s stoppede pludseligt med at virke"
72
+
73
+ #: includes/class-freemius.php:1983
74
+ msgid "I can't pay for it anymore"
75
+ msgstr "Jeg kan ikke længere betale for det"
76
+
77
+ #: includes/class-freemius.php:1985
78
+ msgid "What price would you feel comfortable paying?"
79
+ msgstr "Hvilken pris ville du foretrække at betale?"
80
+
81
+ #: includes/class-freemius.php:1991
82
+ msgid "I don't like to share my information with you"
83
+ msgstr "Jeg har ikke lyst til at dele mine informationer med jer"
84
+
85
+ #: includes/class-freemius.php:2012
86
+ msgid "The %s didn't work"
87
+ msgstr "%s virkede ikke"
88
+
89
+ #: includes/class-freemius.php:2022
90
+ msgid "I couldn't understand how to make it work"
91
+ msgstr "Jeg forstod ikke, hvordan jeg skulle få det til at fungere."
92
+
93
+ #: includes/class-freemius.php:2030
94
+ msgid "The %s is great, but I need specific feature that you don't support"
95
+ msgstr "%s er godt, men jeg har brug for en specifik feature, som ikke understøttes"
96
+
97
+ #: includes/class-freemius.php:2032
98
+ msgid "What feature?"
99
+ msgstr "Hvilken feature?"
100
+
101
+ #: includes/class-freemius.php:2036
102
+ msgid "The %s is not working"
103
+ msgstr "%s virker ikke"
104
+
105
+ #: includes/class-freemius.php:2038
106
+ msgid "Kindly share what didn't work so we can fix it for future users..."
107
+ msgstr "Kindly share what didn't work so we can fix it for future users..."
108
+
109
+ #: includes/class-freemius.php:2042
110
+ msgid "It's not what I was looking for"
111
+ msgstr "Det er ikke, hvad jeg søgte"
112
+
113
+ #: includes/class-freemius.php:2044
114
+ msgid "What you've been looking for?"
115
+ msgstr "Hvad har du ledt efter?"
116
+
117
+ #: includes/class-freemius.php:2048
118
+ msgid "The %s didn't work as expected"
119
+ msgstr "%s virkede ikke som forventet"
120
+
121
+ #: includes/class-freemius.php:2050
122
+ msgid "What did you expect?"
123
+ msgstr "Hvad forventede du?"
124
+
125
+ #: includes/class-freemius.php2853, templates/debug.php:20
126
+ msgid "Freemius Debug"
127
+ msgstr "Freemius Debug"
128
+
129
+ #: includes/class-freemius.php:3581
130
+ msgid "I don't know what is cURL or how to install it, help me!"
131
+ msgstr "Jeg ved ikke hvad cURL er, eller hvordan jeg installerer det. Hjælp mig!"
132
+
133
+ #: includes/class-freemius.php:3583
134
+ msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
135
+ msgstr "Vi vil kontakte din udbyder og løse problemet. Når vi har opdatinger i sagen, vil vi følge op med en email til dig på %s."
136
+
137
+ #: includes/class-freemius.php:3590
138
+ msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
139
+ msgstr "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
140
+
141
+ #: includes/class-freemius.php:3695
142
+ msgid "Yes - do your thing"
143
+ msgstr "Ja - fortsæt bare"
144
+
145
+ #: includes/class-freemius.php:3700
146
+ msgid "No - just deactivate"
147
+ msgstr "Nej - bare deaktiver"
148
+
149
+ #: includes/class-freemius.php3745, includes/class-freemius.php4253,
150
+ #: includes/class-freemius.php5318, includes/class-freemius.php11316,
151
+ #: includes/class-freemius.php14649, includes/class-freemius.php14701,
152
+ #: includes/class-freemius.php14763, includes/class-freemius.php16969,
153
+ #: includes/class-freemius.php16979, includes/class-freemius.php17588,
154
+ #: includes/class-freemius.php18446, includes/class-freemius.php18561,
155
+ #: includes/class-freemius.php18705, templates/add-ons.php:43
156
+ msgctxt "exclamation"
157
+ msgid "Oops"
158
+ msgstr "Ups"
159
+
160
+ #: includes/class-freemius.php:3814
161
+ msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
162
+ msgstr "Tak fordi du giver os en chance for at fixe det! En besked er lige blevet sendt til vores tekniske personale. Vi vil vende tilbage, så snart der er nyt om %s. Vi sætter pris på din tålmodighed."
163
+
164
+ #: includes/class-freemius.php:4250
165
+ msgctxt "addonX cannot run without pluginY"
166
+ msgid "%s cannot run without %s."
167
+ msgstr "%s virker ikke uden %s."
168
+
169
+ #: includes/class-freemius.php:4251
170
+ msgctxt "addonX cannot run..."
171
+ msgid "%s cannot run without the plugin."
172
+ msgstr "%s virker ikke uden pluginnet."
173
+
174
+ #: includes/class-freemius.php4363, includes/class-freemius.php4388,
175
+ #: includes/class-freemius.php:17659
176
+ msgid "Unexpected API error. Please contact the %s's author with the following error."
177
+ msgstr "Unexpected API error. Please contact the %s's author with the following error."
178
+
179
+ #: includes/class-freemius.php:5006
180
+ msgid "Premium %s version was successfully activated."
181
+ msgstr "Premium-versionen af %s blev aktiveret."
182
+
183
+ #: includes/class-freemius.php5018, includes/class-freemius.php:6862
184
+ msgctxt ""
185
+ msgid "W00t"
186
+ msgstr "W00t"
187
+
188
+ #: includes/class-freemius.php:5033
189
+ msgid "You have a %s license."
190
+ msgstr "Du har en %s licens."
191
+
192
+ #: includes/class-freemius.php5037, includes/class-freemius.php14070,
193
+ #: includes/class-freemius.php14081, includes/class-freemius.php16897,
194
+ #: includes/class-freemius.php17197, includes/class-freemius.php17263,
195
+ #: includes/class-freemius.php:17413
196
+ msgctxt "interjection expressing joy or exuberance"
197
+ msgid "Yee-haw"
198
+ msgstr "Yee-haw"
199
+
200
+ #: includes/class-freemius.php:5301
201
+ msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
202
+ msgstr "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
203
+
204
+ #: includes/class-freemius.php:5305
205
+ msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
206
+ msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
207
+
208
+ #: includes/class-freemius.php5314, templates/add-ons.php103,
209
+ #: templates/account/partials/addon.php:288
210
+ msgid "More information about %s"
211
+ msgstr "Mere information om %s"
212
+
213
+ #: includes/class-freemius.php:5315
214
+ msgid "Purchase License"
215
+ msgstr "Køb licens"
216
+
217
+ #: includes/class-freemius.php6230, templates/connect.php:163
218
+ msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
219
+ msgstr "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
220
+
221
+ #: includes/class-freemius.php:6234
222
+ msgid "start the trial"
223
+ msgstr "start prøveperioden"
224
+
225
+ #: includes/class-freemius.php6235, templates/connect.php:167
226
+ msgid "complete the install"
227
+ msgstr "færdiggør installeringen"
228
+
229
+ #: includes/class-freemius.php:6348
230
+ msgid "You are just one step away - %s"
231
+ msgstr "Du mangler kun ét skridt - %s"
232
+
233
+ #: includes/class-freemius.php:6351
234
+ msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
235
+ msgid "Complete \"%s\" Activation Now"
236
+ msgstr "Færdiggør aktivering af \"%s\" nu"
237
+
238
+ #: includes/class-freemius.php:6429
239
+ msgid "We made a few tweaks to the %s, %s"
240
+ msgstr "Vi har foretaget nogle rettelser til %s, %s"
241
+
242
+ #: includes/class-freemius.php:6433
243
+ msgid "Opt in to make \"%s\" better!"
244
+ msgstr "Opt in to make \"%s\" better!"
245
+
246
+ #: includes/class-freemius.php:6861
247
+ msgid "The upgrade of %s was successfully completed."
248
+ msgstr "Opgraderingen af %s blev fuldendt."
249
+
250
+ #: includes/class-freemius.php8705, includes/class-fs-plugin-updater.php882,
251
+ #: includes/class-fs-plugin-updater.php1077,
252
+ #: includes/class-fs-plugin-updater.php1084,
253
+ #: templates/auto-installation.php:32
254
+ msgid "Add-On"
255
+ msgstr "Tilføjelse"
256
+
257
+ #: includes/class-freemius.php8707, templates/debug.php359,
258
+ #: templates/debug.php:520
259
+ msgid "Plugin"
260
+ msgstr "Plugin"
261
+
262
+ #: includes/class-freemius.php8708, templates/debug.php359,
263
+ #: templates/debug.php520, templates/forms/deactivation/form.php:67
264
+ msgid "Theme"
265
+ msgstr "Tema"
266
+
267
+ #: includes/class-freemius.php:11183
268
+ msgid "Invalid site details collection."
269
+ msgstr "Invalid site details collection."
270
+
271
+ #: includes/class-freemius.php:11303
272
+ msgid "We couldn't find your email address in the system, are you sure it's the right address?"
273
+ msgstr "Vi kunne ikke finde din e-mailadresse i systemet, er du sikker på, det er den rigtige adresse?"
274
+
275
+ #: includes/class-freemius.php:11305
276
+ msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
277
+ msgstr "Vi kan ikke finde nogen aktive licenser knyttet til den e-mailadresse, er du sikker på, det er den rigtige adresse?"
278
+
279
+ #: includes/class-freemius.php:11541
280
+ msgid "Account is pending activation."
281
+ msgstr "Konto afventer aktivering."
282
+
283
+ #: includes/class-freemius.php11653,
284
+ #: templates/forms/premium-versions-upgrade-handler.php:47
285
+ msgid "Buy a license now"
286
+ msgstr "Buy a license now"
287
+
288
+ #: includes/class-freemius.php11665,
289
+ #: templates/forms/premium-versions-upgrade-handler.php:46
290
+ msgid "Renew your license now"
291
+ msgstr "Renew your license now"
292
+
293
+ #: includes/class-freemius.php:11669
294
+ msgid "%s to access version %s security & feature updates, and support."
295
+ msgstr "%s to access version %s security & feature updates, and support."
296
+
297
+ #: includes/class-freemius.php:14052
298
+ msgid "%s activation was successfully completed."
299
+ msgstr "Aktivering af %s blev gennemført."
300
+
301
+ #: includes/class-freemius.php:14066
302
+ msgid "Your account was successfully activated with the %s plan."
303
+ msgstr "Din konto blev aktiveret med planen %s."
304
+
305
+ #: includes/class-freemius.php14077, includes/class-freemius.php:17259
306
+ msgid "Your trial has been successfully started."
307
+ msgstr "Din prøveperiode er begyndt."
308
+
309
+ #: includes/class-freemius.php14647, includes/class-freemius.php14699,
310
+ #: includes/class-freemius.php:14761
311
+ msgid "Couldn't activate %s."
312
+ msgstr "Kunne ikke aktivere %s."
313
+
314
+ #: includes/class-freemius.php14648, includes/class-freemius.php14700,
315
+ #: includes/class-freemius.php:14762
316
+ msgid "Please contact us with the following message:"
317
+ msgstr "Kontakt os venligst med følgende besked:"
318
+
319
+ #: includes/class-freemius.php15111, includes/class-freemius.php:19543
320
+ msgid "Upgrade"
321
+ msgstr "Opgrader"
322
+
323
+ #: includes/class-freemius.php:15117
324
+ msgid "Start Trial"
325
+ msgstr "Start prøveperiode"
326
+
327
+ #: includes/class-freemius.php:15119
328
+ msgid "Pricing"
329
+ msgstr "Priser"
330
+
331
+ #: includes/class-freemius.php15181, includes/class-freemius.php:15183
332
+ msgid "Affiliation"
333
+ msgstr "Affiliation"
334
+
335
+ #: includes/class-freemius.php15211, includes/class-freemius.php15213,
336
+ #: templates/account.php150, templates/debug.php:324
337
+ msgid "Account"
338
+ msgstr "Konto"
339
+
340
+ #: includes/class-freemius.php15226, includes/class-freemius.php15228,
341
+ #: includes/customizer/class-fs-customizer-support-section.php:60
342
+ msgid "Contact Us"
343
+ msgstr "Kontakt os"
344
+
345
+ #: includes/class-freemius.php15238, includes/class-freemius.php15240,
346
+ #: includes/class-freemius.php19553, templates/account.php100,
347
+ #: templates/account/partials/addon.php:41
348
+ msgid "Add-Ons"
349
+ msgstr "Tilføjelser"
350
+
351
+ #: includes/class-freemius.php:15274
352
+ msgctxt "ASCII arrow left icon"
353
+ msgid "&#x2190;"
354
+ msgstr "&#x2190;"
355
+
356
+ #: includes/class-freemius.php:15274
357
+ msgctxt "ASCII arrow right icon"
358
+ msgid "&#x27a4;"
359
+ msgstr "&#x27a4;"
360
+
361
+ #: includes/class-freemius.php15276, templates/pricing.php:97
362
+ msgctxt "noun"
363
+ msgid "Pricing"
364
+ msgstr "Priser"
365
+
366
+ #: includes/class-freemius.php15479,
367
+ #: includes/customizer/class-fs-customizer-support-section.php:67
368
+ msgid "Support Forum"
369
+ msgstr "Supportforum"
370
+
371
+ #: includes/class-freemius.php:16265
372
+ msgid "Your email has been successfully verified - you are AWESOME!"
373
+ msgstr "Din e-mailadresse er blevet verificeret - du er FOR SEJ!"
374
+
375
+ #: includes/class-freemius.php:16266
376
+ msgctxt "a positive response"
377
+ msgid "Right on"
378
+ msgstr "Sådan"
379
+
380
+ #: includes/class-freemius.php:16888
381
+ msgid "Your %s Add-on plan was successfully upgraded."
382
+ msgstr "Your %s Add-on plan was successfully upgraded."
383
+
384
+ #: includes/class-freemius.php:16890
385
+ msgid "%s Add-on was successfully purchased."
386
+ msgstr "Betalingen for tilføjelsen %s blev gennemført."
387
+
388
+ #: includes/class-freemius.php:16893
389
+ msgid "Download the latest version"
390
+ msgstr "Download den seneste version"
391
+
392
+ #: includes/class-freemius.php:16965
393
+ msgctxt "%1s - plugin title, %2s - API domain"
394
+ msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
395
+ msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
396
+
397
+ #: includes/class-freemius.php16968, includes/class-freemius.php17384,
398
+ #: includes/class-freemius.php:17461
399
+ msgid "Error received from the server:"
400
+ msgstr "Fejl modtager fra serveren:"
401
+
402
+ #: includes/class-freemius.php:16978
403
+ msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
404
+ msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
405
+
406
+ #: includes/class-freemius.php17160, includes/class-freemius.php17389,
407
+ #: includes/class-freemius.php17432, includes/class-freemius.php:17535
408
+ msgctxt ""
409
+ msgid "Hmm"
410
+ msgstr "Hmm"
411
+
412
+ #: includes/class-freemius.php:17173
413
+ msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
414
+ msgstr "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
415
+
416
+ #: includes/class-freemius.php17174, templates/account.php102,
417
+ #: templates/add-ons.php134, templates/account/partials/addon.php:43
418
+ msgctxt "trial period"
419
+ msgid "Trial"
420
+ msgstr "Prøveperiode"
421
+
422
+ #: includes/class-freemius.php:17179
423
+ msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
424
+ msgstr "Jeg har opgraderet min konto, men når jeg forsøger at synkronisere licensen, forbliver planen %s."
425
+
426
+ #: includes/class-freemius.php17183, includes/class-freemius.php:17241
427
+ msgid "Please contact us here"
428
+ msgstr "Kontakt os her"
429
+
430
+ #: includes/class-freemius.php:17193
431
+ msgid "Your plan was successfully upgraded."
432
+ msgstr "Din plan er blevet opgraderet."
433
+
434
+ #: includes/class-freemius.php:17211
435
+ msgid "Your plan was successfully changed to %s."
436
+ msgstr "Din plan er blevet ændret til %s."
437
+
438
+ #: includes/class-freemius.php:17227
439
+ msgid "Your license has expired. You can still continue using the free %s forever."
440
+ msgstr "Din licens er udløbet. Du kan stadig fortsætte med at benytte den gratis udgave af %s."
441
+
442
+ #: includes/class-freemius.php:17229
443
+ msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
444
+ msgstr "Din licens er udløbet. %1$sOpgrader nu%2$s for at fortsætte med at benytte %3$s uden forstyrrelser."
445
+
446
+ #: includes/class-freemius.php:17237
447
+ msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
448
+ msgstr "Din licens er blevet annulleret. Hvis du mener, dette er en fejl, så kontakt venligst support."
449
+
450
+ #: includes/class-freemius.php:17250
451
+ msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
452
+ msgstr "Din licens er udløbet. Du kan stadig benytte alle funktionerne i %s, men du bliver nødt til at fornye din licens for at få opdateringer og support."
453
+
454
+ #: includes/class-freemius.php:17273
455
+ msgid "Your free trial has expired. You can still continue using all our free features."
456
+ msgstr "Din gratis prøveperiode er udløbet. Du kan stadig benytte alle de gratis features."
457
+
458
+ #: includes/class-freemius.php:17275
459
+ msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
460
+ msgstr "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
461
+
462
+ #: includes/class-freemius.php:17380
463
+ msgid "It looks like the license could not be activated."
464
+ msgstr "Det ser ud til, at licensen ikke kunne aktiveres."
465
+
466
+ #: includes/class-freemius.php:17410
467
+ msgid "Your license was successfully activated."
468
+ msgstr "Din licens er blevet aktiveret."
469
+
470
+ #: includes/class-freemius.php:17436
471
+ msgid "It looks like your site currently doesn't have an active license."
472
+ msgstr "Det ser ud til, at dit websted endnu ikke har en aktiv licens."
473
+
474
+ #: includes/class-freemius.php:17460
475
+ msgid "It looks like the license deactivation failed."
476
+ msgstr "Det ser ud til, at licens-deaktiveringen mislykkedes."
477
+
478
+ #: includes/class-freemius.php:17488
479
+ msgid "Your license was successfully deactivated, you are back to the %s plan."
480
+ msgstr "Din licens blev deaktiveret, du er tilbage på planen %s."
481
+
482
+ #: includes/class-freemius.php:17489
483
+ msgid "O.K"
484
+ msgstr "O.K"
485
+
486
+ #: includes/class-freemius.php:17542
487
+ msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
488
+ msgstr "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
489
+
490
+ #: includes/class-freemius.php:17551
491
+ msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
492
+ msgstr "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
493
+
494
+ #: includes/class-freemius.php:17593
495
+ msgid "You are already running the %s in a trial mode."
496
+ msgstr "Du benytter allerede %s under en prøveperiode."
497
+
498
+ #: includes/class-freemius.php:17604
499
+ msgid "You already utilized a trial before."
500
+ msgstr "Du har allerede brugt din prøveperiode."
501
+
502
+ #: includes/class-freemius.php:17618
503
+ msgid "Plan %s do not exist, therefore, can't start a trial."
504
+ msgstr "Plan %s eksisterer ikke og kan derfor ikke starte prøveperiode."
505
+
506
+ #: includes/class-freemius.php:17629
507
+ msgid "Plan %s does not support a trial period."
508
+ msgstr "Plan %s understøtter ikke en prøveperiode."
509
+
510
+ #: includes/class-freemius.php:17640
511
+ msgid "None of the %s's plans supports a trial period."
512
+ msgstr "None of the %s's plans supports a trial period."
513
+
514
+ #: includes/class-freemius.php:17690
515
+ msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
516
+ msgstr "Det lader ikke til du er i en prøveperiode længere, så der er ikke noget at annullere :-)"
517
+
518
+ #: includes/class-freemius.php:17726
519
+ msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
520
+ msgstr "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
521
+
522
+ #: includes/class-freemius.php:17745
523
+ msgid "Your %s free trial was successfully cancelled."
524
+ msgstr "Din gratis prøveperiode for %s er blevet annulleret."
525
+
526
+ #: includes/class-freemius.php:18052
527
+ msgid "Version %s was released."
528
+ msgstr "Version %s er blevet udgivet."
529
+
530
+ #: includes/class-freemius.php:18052
531
+ msgid "Please download %s."
532
+ msgstr "Download venligst %s."
533
+
534
+ #: includes/class-freemius.php:18059
535
+ msgid "the latest %s version here"
536
+ msgstr "den seneste version af %s her"
537
+
538
+ #: includes/class-freemius.php:18064
539
+ msgid "New"
540
+ msgstr "Ny"
541
+
542
+ #: includes/class-freemius.php:18069
543
+ msgid "Seems like you got the latest release."
544
+ msgstr "Det ser ud til, at du har den seneste udgivelse."
545
+
546
+ #: includes/class-freemius.php:18070
547
+ msgid "You are all good!"
548
+ msgstr "Det var det!"
549
+
550
+ #: includes/class-freemius.php:18338
551
+ msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
552
+ msgstr "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
553
+
554
+ #: includes/class-freemius.php:18473
555
+ msgid "Site successfully opted in."
556
+ msgstr "Websted er tilmeldt."
557
+
558
+ #: includes/class-freemius.php18474, includes/class-freemius.php:19285
559
+ msgid "Awesome"
560
+ msgstr "Sejt"
561
+
562
+ #: includes/class-freemius.php18490, templates/forms/optout.php:32
563
+ msgid "We appreciate your help in making the %s better by letting us track some usage data."
564
+ msgstr "Vi sætter pris på din hjælp med at forbedre %s ved at lade os indsamle brugsdata."
565
+
566
+ #: includes/class-freemius.php:18491
567
+ msgid "Thank you!"
568
+ msgstr "Mange tak!"
569
+
570
+ #: includes/class-freemius.php:18498
571
+ msgid "We will no longer be sending any usage data of %s on %s to %s."
572
+ msgstr "Vi vil ikke længere indsende brugsdata af %s på %s til %s."
573
+
574
+ #: includes/class-freemius.php:18627
575
+ msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
576
+ msgstr "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
577
+
578
+ #: includes/class-freemius.php:18633
579
+ msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
580
+ msgstr "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
581
+
582
+ #: includes/class-freemius.php:18638
583
+ msgid "%s is the new owner of the account."
584
+ msgstr "%s er den nye ejer af kontoen."
585
+
586
+ #: includes/class-freemius.php:18640
587
+ msgctxt "as congratulations"
588
+ msgid "Congrats"
589
+ msgstr "Tillykke"
590
+
591
+ #: includes/class-freemius.php:18660
592
+ msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
593
+ msgstr "Sorry, we could not complete the email update. Another user with the same email is already registered."
594
+
595
+ #: includes/class-freemius.php:18661
596
+ msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
597
+ msgstr "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
598
+
599
+ #: includes/class-freemius.php:18668
600
+ msgid "Change Ownership"
601
+ msgstr "Skift ejerskab"
602
+
603
+ #: includes/class-freemius.php:18676
604
+ msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
605
+ msgstr "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
606
+
607
+ #: includes/class-freemius.php:18688
608
+ msgid "Please provide your full name."
609
+ msgstr "Indtast venligst dit fulde navn."
610
+
611
+ #: includes/class-freemius.php:18693
612
+ msgid "Your name was successfully updated."
613
+ msgstr "Dit navn er blevet opdateret."
614
+
615
+ #: includes/class-freemius.php:18754
616
+ msgid "You have successfully updated your %s."
617
+ msgstr "Opdatering af %s blev gennemført."
618
+
619
+ #: includes/class-freemius.php:18894
620
+ msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
621
+ msgstr "Just letting you know that the add-ons information of %s is being pulled from an external server."
622
+
623
+ #: includes/class-freemius.php:18895
624
+ msgctxt "advance notice of something that will need attention."
625
+ msgid "Heads up"
626
+ msgstr "Se her"
627
+
628
+ #: includes/class-freemius.php:19325
629
+ msgctxt "exclamation"
630
+ msgid "Hey"
631
+ msgstr "Hey"
632
+
633
+ #: includes/class-freemius.php:19325
634
+ msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
635
+ msgstr "Hvad syntes du om %s indtil videre? Test alle %s premium funktioner med en %d-dags gratis prøveperiode."
636
+
637
+ #: includes/class-freemius.php:19333
638
+ msgid "No commitment for %s days - cancel anytime!"
639
+ msgstr "Ingen bindinger i %s dage - annuller når som helst!"
640
+
641
+ #: includes/class-freemius.php:19334
642
+ msgid "No credit card required"
643
+ msgstr "Betalingskort ikke påkrævet"
644
+
645
+ #: includes/class-freemius.php19341, templates/forms/trial-start.php:53
646
+ msgctxt "call to action"
647
+ msgid "Start free trial"
648
+ msgstr "Start gratis prøveperiode"
649
+
650
+ #: includes/class-freemius.php:19418
651
+ msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
652
+ msgstr "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
653
+
654
+ #: includes/class-freemius.php:19427
655
+ msgid "Learn more"
656
+ msgstr "Læs mere"
657
+
658
+ #: includes/class-freemius.php19577, templates/account.php406,
659
+ #: templates/account.php509, templates/connect.php171,
660
+ #: templates/connect.php421, templates/forms/license-activation.php24,
661
+ #: templates/account/partials/addon.php:235
662
+ msgid "Activate License"
663
+ msgstr "Aktiver licens"
664
+
665
+ #: includes/class-freemius.php19578, templates/account.php469,
666
+ #: templates/account.php508, templates/account/partials/site.php:256
667
+ msgid "Change License"
668
+ msgstr "Skift licens"
669
+
670
+ #: includes/class-freemius.php19660, templates/account/partials/site.php:161
671
+ msgid "Opt Out"
672
+ msgstr "Frameld"
673
+
674
+ #: includes/class-freemius.php19662, includes/class-freemius.php19667,
675
+ #: templates/account/partials/site.php43,
676
+ #: templates/account/partials/site.php:161
677
+ msgid "Opt In"
678
+ msgstr "Tilmeld"
679
+
680
+ #: includes/class-freemius.php:19891
681
+ msgid " The paid version of %1s is already installed. Please activate it to start benefiting the %2s features. %3s"
682
+ msgstr " The paid version of %1s is already installed. Please activate it to start benefiting the %2s features. %3s"
683
+
684
+ #: includes/class-freemius.php:19899
685
+ msgid "Activate %s features"
686
+ msgstr "Activate %s features"
687
+
688
+ #: includes/class-freemius.php:19912
689
+ msgid "Please follow these steps to complete the upgrade"
690
+ msgstr "Følg venligst disse trin for at færdiggøre opgraderingen"
691
+
692
+ #: includes/class-freemius.php:19916
693
+ msgid "Download the latest %s version"
694
+ msgstr "Download den seneste version af %s"
695
+
696
+ #: includes/class-freemius.php:19920
697
+ msgid "Upload and activate the downloaded version"
698
+ msgstr "Upload og aktiver den downloadede version"
699
+
700
+ #: includes/class-freemius.php:19922
701
+ msgid "How to upload and activate?"
702
+ msgstr "Upload og aktivering, hvordan?"
703
+
704
+ #: includes/class-freemius.php:20056
705
+ msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
706
+ msgstr "%sClick here%s to choose the sites where you'd like to activate the license on."
707
+
708
+ #: includes/class-freemius.php:20217
709
+ msgid "Auto installation only works for opted-in users."
710
+ msgstr "Auto-installation fungerer kun for tilmeldte brugere."
711
+
712
+ #: includes/class-freemius.php20227, includes/class-freemius.php20260,
713
+ #: includes/class-fs-plugin-updater.php1056,
714
+ #: includes/class-fs-plugin-updater.php:1070
715
+ msgid "Invalid module ID."
716
+ msgstr "Ugyldigt modul-ID."
717
+
718
+ #: includes/class-freemius.php20236, includes/class-fs-plugin-updater.php:1092
719
+ msgid "Premium version already active."
720
+ msgstr "Premium version allerede aktiv."
721
+
722
+ #: includes/class-freemius.php:20243
723
+ msgid "You do not have a valid license to access the premium version."
724
+ msgstr "Du har ikke en gyldig licens til at benytte premium-versionen."
725
+
726
+ #: includes/class-freemius.php:20250
727
+ msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
728
+ msgstr "Plugin is a \"Serviceware\" which means it does not have a premium code version."
729
+
730
+ #: includes/class-freemius.php20268, includes/class-fs-plugin-updater.php:1091
731
+ msgid "Premium add-on version already installed."
732
+ msgstr "Premium tilføjelse er allerede installeret."
733
+
734
+ #: includes/class-freemius.php:20613
735
+ msgid "View paid features"
736
+ msgstr "Vis betalte features"
737
+
738
+ #: includes/class-freemius.php:20927
739
+ msgid "Thank you so much for using %s and its add-ons!"
740
+ msgstr "Thank you so much for using %s and its add-ons!"
741
+
742
+ #: includes/class-freemius.php:20928
743
+ msgid "Thank you so much for using %s!"
744
+ msgstr "Tak fordi du benytter %s!"
745
+
746
+ #: includes/class-freemius.php:20934
747
+ msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
748
+ msgstr "Du er allerede tilmeldt vores brugssporing, hvilket hjælper os med at forbedre %s."
749
+
750
+ #: includes/class-freemius.php:20938
751
+ msgid "Thank you so much for using our products!"
752
+ msgstr "Mange tak for at benytte vores produkter!"
753
+
754
+ #: includes/class-freemius.php:20939
755
+ msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
756
+ msgstr "Du er allerede tilmeldt vores brugssporing, hvilket hjælper os med at forbedre dem."
757
+
758
+ #: includes/class-freemius.php:20958
759
+ msgid "%s and its add-ons"
760
+ msgstr "%s og tilføjelser"
761
+
762
+ #: includes/class-freemius.php:20967
763
+ msgid "Products"
764
+ msgstr "Produkter"
765
+
766
+ #: includes/class-freemius.php20974, templates/connect.php:272
767
+ msgid "Yes"
768
+ msgstr "Ja"
769
+
770
+ #: includes/class-freemius.php20975, templates/connect.php:273
771
+ msgid "send me security & feature updates, educational content and offers."
772
+ msgstr "send mig sikkerheds- og feature-opdateringer, informativt indhold og tilbud."
773
+
774
+ #: includes/class-freemius.php20976, templates/connect.php:278
775
+ msgid "No"
776
+ msgstr "Nej"
777
+
778
+ #: includes/class-freemius.php20978, templates/connect.php:280
779
+ msgid "do %sNOT%s send me security & feature updates, educational content and offers."
780
+ msgstr "send %sIKKE%s sikkerheds- og feature-opdateringer, informativt indhold og tilbud."
781
+
782
+ #: includes/class-freemius.php:20988
783
+ msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard 🙂"
784
+ msgstr "Grundet krav i den nye %sEU General Data Protection Regulation (GDPR)%s, er det nødvendigt at du igen giver dit udtrykkelige samtykke og bekræfter, at du er ombord 🙂"
785
+
786
+ #: includes/class-freemius.php20990, templates/connect.php:287
787
+ msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
788
+ msgstr "Lad os vide, om vi har lov til at kontakte dig med sikkerheds- og feature-opdateringer, informativt indhold og lejlighedsvise tilbud:"
789
+
790
+ #: includes/class-freemius.php:21272
791
+ msgid "License key is empty."
792
+ msgstr "Licensnøglen er tom."
793
+
794
+ #: includes/class-fs-plugin-updater.php184,
795
+ #: templates/forms/premium-versions-upgrade-handler.php:57
796
+ msgid "Renew license"
797
+ msgstr "Forny licens"
798
+
799
+ #: includes/class-fs-plugin-updater.php189,
800
+ #: templates/forms/premium-versions-upgrade-handler.php:58
801
+ msgid "Buy license"
802
+ msgstr "Buy license"
803
+
804
+ #: includes/class-fs-plugin-updater.php:278
805
+ msgid "There is a %s of %s available."
806
+ msgstr "There is a %s of %s available."
807
+
808
+ #: includes/class-fs-plugin-updater.php:282
809
+ msgid "new version"
810
+ msgstr "new version"
811
+
812
+ #: includes/class-fs-plugin-updater.php:301
813
+ msgid "Important Upgrade Notice:"
814
+ msgstr "Important Upgrade Notice:"
815
+
816
+ #: includes/class-fs-plugin-updater.php:1121
817
+ msgid "Installing plugin: %s"
818
+ msgstr "Installerer plugin: %s"
819
+
820
+ #: includes/class-fs-plugin-updater.php:1162
821
+ msgid "Unable to connect to the filesystem. Please confirm your credentials."
822
+ msgstr "Unable to connect to the filesystem. Please confirm your credentials."
823
+
824
+ #: includes/class-fs-plugin-updater.php:1335
825
+ msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
826
+ msgstr "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
827
+
828
+ #: includes/fs-plugin-info-dialog.php369,
829
+ #: templates/account/partials/addon.php:292
830
+ msgctxt "verb"
831
+ msgid "Purchase"
832
+ msgstr "Køb"
833
+
834
+ #: includes/fs-plugin-info-dialog.php:372
835
+ msgid "Start my free %s"
836
+ msgstr "Start min gratis %s"
837
+
838
+ #: includes/fs-plugin-info-dialog.php:413
839
+ msgid "Install Free Version Now"
840
+ msgstr "Installer gratis version nu"
841
+
842
+ #: includes/fs-plugin-info-dialog.php414, templates/auto-installation.php111,
843
+ #: templates/account/partials/addon.php272,
844
+ #: templates/account/partials/addon.php:322
845
+ msgid "Install Now"
846
+ msgstr "Installer nu"
847
+
848
+ #: includes/fs-plugin-info-dialog.php:425
849
+ msgctxt "as download latest version"
850
+ msgid "Download Latest Free Version"
851
+ msgstr "Download seneste gratis version"
852
+
853
+ #: includes/fs-plugin-info-dialog.php426, templates/account.php80,
854
+ #: templates/account/partials/addon.php:21
855
+ msgctxt "as download latest version"
856
+ msgid "Download Latest"
857
+ msgstr "Download seneste"
858
+
859
+ #: includes/fs-plugin-info-dialog.php:436
860
+ msgid "Install Free Version Update Now"
861
+ msgstr "Installer opdatering til gratis version nu"
862
+
863
+ #: includes/fs-plugin-info-dialog.php437, templates/account.php:460
864
+ msgid "Install Update Now"
865
+ msgstr "Installer opdatering nu"
866
+
867
+ #: includes/fs-plugin-info-dialog.php:448
868
+ msgid "Newer Free Version (%s) Installed"
869
+ msgstr "Nyere gratis version (%s) installeret"
870
+
871
+ #: includes/fs-plugin-info-dialog.php:449
872
+ msgid "Newer Version (%s) Installed"
873
+ msgstr "Nyere version (%s) installeret"
874
+
875
+ #: includes/fs-plugin-info-dialog.php:457
876
+ msgid "Latest Free Version Installed"
877
+ msgstr "Seneste gratis version installeret"
878
+
879
+ #: includes/fs-plugin-info-dialog.php:458
880
+ msgid "Latest Version Installed"
881
+ msgstr "Seneste version installeret"
882
+
883
+ #: includes/fs-plugin-info-dialog.php:613
884
+ msgctxt "Plugin installer section title"
885
+ msgid "Description"
886
+ msgstr "Beskrivelse"
887
+
888
+ #: includes/fs-plugin-info-dialog.php:614
889
+ msgctxt "Plugin installer section title"
890
+ msgid "Installation"
891
+ msgstr "Installering"
892
+
893
+ #: includes/fs-plugin-info-dialog.php:615
894
+ msgctxt "Plugin installer section title"
895
+ msgid "FAQ"
896
+ msgstr "FAQ"
897
+
898
+ #: includes/fs-plugin-info-dialog.php616,
899
+ #: templates/plugin-info/description.php:55
900
+ msgid "Screenshots"
901
+ msgstr "Skærmbilleder"
902
+
903
+ #: includes/fs-plugin-info-dialog.php:617
904
+ msgctxt "Plugin installer section title"
905
+ msgid "Changelog"
906
+ msgstr "Ændringslog"
907
+
908
+ #: includes/fs-plugin-info-dialog.php:618
909
+ msgctxt "Plugin installer section title"
910
+ msgid "Reviews"
911
+ msgstr "Anmeldelser"
912
+
913
+ #: includes/fs-plugin-info-dialog.php:619
914
+ msgctxt "Plugin installer section title"
915
+ msgid "Other Notes"
916
+ msgstr "Andre noter"
917
+
918
+ #: includes/fs-plugin-info-dialog.php:634
919
+ msgctxt "Plugin installer section title"
920
+ msgid "Features & Pricing"
921
+ msgstr "Funktioner og priser"
922
+
923
+ #: includes/fs-plugin-info-dialog.php:644
924
+ msgid "Plugin Install"
925
+ msgstr "Plugin-installering"
926
+
927
+ #: includes/fs-plugin-info-dialog.php:716
928
+ msgctxt "e.g. Professional Plan"
929
+ msgid "%s Plan"
930
+ msgstr "%s Plan"
931
+
932
+ #: includes/fs-plugin-info-dialog.php:742
933
+ msgctxt "e.g. the best product"
934
+ msgid "Best"
935
+ msgstr "Bedste"
936
+
937
+ #: includes/fs-plugin-info-dialog.php748,
938
+ #: includes/fs-plugin-info-dialog.php:768
939
+ msgctxt "as every month"
940
+ msgid "Monthly"
941
+ msgstr "Månedligt"
942
+
943
+ #: includes/fs-plugin-info-dialog.php:751
944
+ msgctxt "as once a year"
945
+ msgid "Annual"
946
+ msgstr "Årligt"
947
+
948
+ #: includes/fs-plugin-info-dialog.php:754
949
+ msgid "Lifetime"
950
+ msgstr "Livstid"
951
+
952
+ #: includes/fs-plugin-info-dialog.php768,
953
+ #: includes/fs-plugin-info-dialog.php770,
954
+ #: includes/fs-plugin-info-dialog.php:772
955
+ msgctxt "e.g. billed monthly"
956
+ msgid "Billed %s"
957
+ msgstr "Faktureret %s"
958
+
959
+ #: includes/fs-plugin-info-dialog.php:770
960
+ msgctxt "as once a year"
961
+ msgid "Annually"
962
+ msgstr "Årligt"
963
+
964
+ #: includes/fs-plugin-info-dialog.php:772
965
+ msgctxt "as once a year"
966
+ msgid "Once"
967
+ msgstr "Engangsbeløb"
968
+
969
+ #: includes/fs-plugin-info-dialog.php:778
970
+ msgid "Single Site License"
971
+ msgstr "Single Site License"
972
+
973
+ #: includes/fs-plugin-info-dialog.php:780
974
+ msgid "Unlimited Licenses"
975
+ msgstr "Ubegrænsede licenser"
976
+
977
+ #: includes/fs-plugin-info-dialog.php:782
978
+ msgid "Up to %s Sites"
979
+ msgstr "Op til %s websteder"
980
+
981
+ #: includes/fs-plugin-info-dialog.php792,
982
+ #: templates/plugin-info/features.php:82
983
+ msgctxt "as monthly period"
984
+ msgid "mo"
985
+ msgstr "md"
986
+
987
+ #: includes/fs-plugin-info-dialog.php799,
988
+ #: templates/plugin-info/features.php:80
989
+ msgctxt "as annual period"
990
+ msgid "year"
991
+ msgstr "år"
992
+
993
+ #: includes/fs-plugin-info-dialog.php:853
994
+ msgctxt "noun"
995
+ msgid "Price"
996
+ msgstr "Pris"
997
+
998
+ #: includes/fs-plugin-info-dialog.php:901
999
+ msgid "Save %s"
1000
+ msgstr "Spar %s"
1001
+
1002
+ #: includes/fs-plugin-info-dialog.php:911
1003
+ msgid "No commitment for %s - cancel anytime"
1004
+ msgstr "Ingen bindinger ved %s - annuller når som helst"
1005
+
1006
+ #: includes/fs-plugin-info-dialog.php:914
1007
+ msgid "After your free %s, pay as little as %s"
1008
+ msgstr "Efter din gratis %s er prisen kun %s"
1009
+
1010
+ #: includes/fs-plugin-info-dialog.php:925
1011
+ msgid "Details"
1012
+ msgstr "Detaljer"
1013
+
1014
+ #: includes/fs-plugin-info-dialog.php929, templates/account.php91,
1015
+ #: templates/debug.php201, templates/debug.php238, templates/debug.php452,
1016
+ #: templates/account/partials/addon.php:32
1017
+ msgctxt "product version"
1018
+ msgid "Version"
1019
+ msgstr "Version"
1020
+
1021
+ #: includes/fs-plugin-info-dialog.php:936
1022
+ msgctxt "as the plugin author"
1023
+ msgid "Author"
1024
+ msgstr "Forfatter"
1025
+
1026
+ #: includes/fs-plugin-info-dialog.php:943
1027
+ msgid "Last Updated"
1028
+ msgstr "Senest opdateret"
1029
+
1030
+ #: includes/fs-plugin-info-dialog.php948, templates/account.php:376
1031
+ msgctxt "x-ago"
1032
+ msgid "%s ago"
1033
+ msgstr "%s siden"
1034
+
1035
+ #: includes/fs-plugin-info-dialog.php:957
1036
+ msgid "Requires WordPress Version"
1037
+ msgstr "Kræver WordPress-version"
1038
+
1039
+ #: includes/fs-plugin-info-dialog.php:958
1040
+ msgid "%s or higher"
1041
+ msgstr "%s eller højere"
1042
+
1043
+ #: includes/fs-plugin-info-dialog.php:965
1044
+ msgid "Compatible up to"
1045
+ msgstr "Kompatibel op til"
1046
+
1047
+ #: includes/fs-plugin-info-dialog.php:973
1048
+ msgid "Downloaded"
1049
+ msgstr "Downloadet"
1050
+
1051
+ #: includes/fs-plugin-info-dialog.php:977
1052
+ msgid "%s time"
1053
+ msgstr "%s gang"
1054
+
1055
+ #: includes/fs-plugin-info-dialog.php:979
1056
+ msgid "%s times"
1057
+ msgstr "%s gange"
1058
+
1059
+ #: includes/fs-plugin-info-dialog.php:989
1060
+ msgid "WordPress.org Plugin Page"
1061
+ msgstr "WordPress.org Plugin-side"
1062
+
1063
+ #: includes/fs-plugin-info-dialog.php:997
1064
+ msgid "Plugin Homepage"
1065
+ msgstr "Plugin-websted"
1066
+
1067
+ #: includes/fs-plugin-info-dialog.php1005,
1068
+ #: includes/fs-plugin-info-dialog.php:1087
1069
+ msgid "Donate to this plugin"
1070
+ msgstr "Donér til dette plugin"
1071
+
1072
+ #: includes/fs-plugin-info-dialog.php:1012
1073
+ msgid "Average Rating"
1074
+ msgstr "Gennemsnitlig vurdering"
1075
+
1076
+ #: includes/fs-plugin-info-dialog.php:1019
1077
+ msgid "based on %s"
1078
+ msgstr "baseret på %s"
1079
+
1080
+ #: includes/fs-plugin-info-dialog.php:1023
1081
+ msgid "%s rating"
1082
+ msgstr "%s vurdering"
1083
+
1084
+ #: includes/fs-plugin-info-dialog.php:1025
1085
+ msgid "%s ratings"
1086
+ msgstr "%s vurderinger"
1087
+
1088
+ #: includes/fs-plugin-info-dialog.php:1040
1089
+ msgid "%s star"
1090
+ msgstr "%s stjerne"
1091
+
1092
+ #: includes/fs-plugin-info-dialog.php:1042
1093
+ msgid "%s stars"
1094
+ msgstr "%s stjerner"
1095
+
1096
+ #: includes/fs-plugin-info-dialog.php:1053
1097
+ msgid "Click to see reviews that provided a rating of %s"
1098
+ msgstr "Click to see reviews that provided a rating of %s"
1099
+
1100
+ #: includes/fs-plugin-info-dialog.php:1066
1101
+ msgid "Contributors"
1102
+ msgstr "Bidragsydere"
1103
+
1104
+ #: includes/fs-plugin-info-dialog.php1095,
1105
+ #: includes/fs-plugin-info-dialog.php:1097
1106
+ msgid "Warning"
1107
+ msgstr "Advarsel"
1108
+
1109
+ #: includes/fs-plugin-info-dialog.php:1095
1110
+ msgid "This plugin has not been tested with your current version of WordPress."
1111
+ msgstr "Dette plugin er ikke blevet testet med din nuværende version af WordPress."
1112
+
1113
+ #: includes/fs-plugin-info-dialog.php:1097
1114
+ msgid "This plugin has not been marked as compatible with your version of WordPress."
1115
+ msgstr "This plugin has not been marked as compatible with your version of WordPress."
1116
+
1117
+ #: includes/fs-plugin-info-dialog.php:1116
1118
+ msgid "Paid add-on must be deployed to Freemius."
1119
+ msgstr "Paid add-on must be deployed to Freemius."
1120
+
1121
+ #: includes/fs-plugin-info-dialog.php:1117
1122
+ msgid "Add-on must be deployed to WordPress.org or Freemius."
1123
+ msgstr "Add-on must be deployed to WordPress.org or Freemius."
1124
+
1125
+ #: templates/account.php81, templates/forms/subscription-cancellation.php96,
1126
+ #: templates/account/partials/addon.php22,
1127
+ #: templates/account/partials/site.php:295
1128
+ msgid "Downgrading your plan"
1129
+ msgstr "Downgrading your plan"
1130
+
1131
+ #: templates/account.php82, templates/forms/subscription-cancellation.php97,
1132
+ #: templates/account/partials/addon.php23,
1133
+ #: templates/account/partials/site.php:296
1134
+ msgid "Cancelling the subscription"
1135
+ msgstr "Cancelling the subscription"
1136
+
1137
+ #. translators: %1s: Either 'Downgrading your plan' or 'Cancelling the
1138
+ #. subscription'
1139
+ #: templates/account.php84, templates/forms/subscription-cancellation.php99,
1140
+ #: templates/account/partials/addon.php25,
1141
+ #: templates/account/partials/site.php:298
1142
+ msgid "%1s will immediately stop all future recurring payments and your %s plan license will expire in %s."
1143
+ msgstr "%1s will immediately stop all future recurring payments and your %s plan license will expire in %s."
1144
+
1145
+ #: templates/account.php85, templates/forms/subscription-cancellation.php100,
1146
+ #: templates/account/partials/addon.php26,
1147
+ #: templates/account/partials/site.php:299
1148
+ msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1149
+ msgstr "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1150
+
1151
+ #: templates/account.php86, templates/forms/subscription-cancellation.php106,
1152
+ #: templates/account/partials/addon.php:27
1153
+ msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1154
+ msgstr "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1155
+
1156
+ #: templates/account.php87, templates/forms/subscription-cancellation.php101,
1157
+ #: templates/account/partials/addon.php28,
1158
+ #: templates/account/partials/site.php:300
1159
+ msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1160
+ msgstr "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1161
+
1162
+ #: templates/account.php88, templates/forms/subscription-cancellation.php102,
1163
+ #: templates/account/partials/addon.php29,
1164
+ #: templates/account/partials/site.php:301
1165
+ msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1166
+ msgstr "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1167
+
1168
+ #. translators: %s: Plan title (e.g. "Professional")
1169
+ #: templates/account.php90,
1170
+ #: templates/account/partials/activate-license-button.php31,
1171
+ #: templates/account/partials/addon.php:31
1172
+ msgid "Activate %s Plan"
1173
+ msgstr "Aktiver %s plan"
1174
+
1175
+ #. translators: %s: Time period (e.g. Auto renews in "2 months")
1176
+ #: templates/account.php93, templates/account/partials/addon.php34,
1177
+ #: templates/account/partials/site.php:275
1178
+ msgid "Auto renews in %s"
1179
+ msgstr "Auto-fornyer om %s"
1180
+
1181
+ #. translators: %s: Time period (e.g. Expires in "2 months")
1182
+ #: templates/account.php95, templates/account/partials/addon.php36,
1183
+ #: templates/account/partials/site.php:277
1184
+ msgid "Expires in %s"
1185
+ msgstr "Udløber om %s"
1186
+
1187
+ #: templates/account.php96, templates/account/partials/addon.php:37
1188
+ msgctxt "as synchronize license"
1189
+ msgid "Sync License"
1190
+ msgstr "Synkroniser licens"
1191
+
1192
+ #: templates/account.php97, templates/account/partials/addon.php:38
1193
+ msgid "Cancel Trial"
1194
+ msgstr "Annuller prøveperiode"
1195
+
1196
+ #: templates/account.php98, templates/account/partials/addon.php:39
1197
+ msgid "Change Plan"
1198
+ msgstr "Skift plan"
1199
+
1200
+ #: templates/account.php99, templates/account/partials/addon.php:40
1201
+ msgctxt "verb"
1202
+ msgid "Upgrade"
1203
+ msgstr "Opgrader"
1204
+
1205
+ #: templates/account.php101, templates/account/partials/addon.php42,
1206
+ #: templates/account/partials/site.php:302
1207
+ msgctxt "verb"
1208
+ msgid "Downgrade"
1209
+ msgstr "Nedgrader"
1210
+
1211
+ #: templates/account.php103, templates/add-ons.php130,
1212
+ #: templates/plugin-info/features.php72,
1213
+ #: templates/account/partials/addon.php44,
1214
+ #: templates/account/partials/site.php:31
1215
+ msgid "Free"
1216
+ msgstr "Gratis"
1217
+
1218
+ #: templates/account.php104, templates/account/partials/addon.php:45
1219
+ msgid "Activate"
1220
+ msgstr "Aktiver"
1221
+
1222
+ #: templates/account.php105, templates/debug.php371,
1223
+ #: includes/customizer/class-fs-customizer-upsell-control.php106,
1224
+ #: templates/account/partials/addon.php:46
1225
+ msgctxt "as product pricing plan"
1226
+ msgid "Plan"
1227
+ msgstr "Plan"
1228
+
1229
+ #: templates/account.php:158
1230
+ msgid "Free Trial"
1231
+ msgstr "Gratis prøveperiode"
1232
+
1233
+ #: templates/account.php:169
1234
+ msgid "Account Details"
1235
+ msgstr "Kontodetaljer"
1236
+
1237
+ #: templates/account.php:179
1238
+ msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1239
+ msgstr "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1240
+
1241
+ #: templates/account.php:181
1242
+ msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1243
+ msgstr "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1244
+
1245
+ #: templates/account.php:184
1246
+ msgid "Delete Account"
1247
+ msgstr "Slet konto"
1248
+
1249
+ #: templates/account.php196, templates/account/partials/addon.php159,
1250
+ #: templates/account/partials/deactivate-license-button.php:35
1251
+ msgid "Deactivate License"
1252
+ msgstr "Deaktiver licens"
1253
+
1254
+ #: templates/account.php219, templates/forms/subscription-cancellation.php:125
1255
+ msgid "Are you sure you want to proceed?"
1256
+ msgstr "Er du sikker på, du vil fortsætte?"
1257
+
1258
+ #: templates/account.php219, templates/account/partials/addon.php:182
1259
+ msgid "Cancel Subscription"
1260
+ msgstr "Annuller abonnement"
1261
+
1262
+ #: templates/account.php:247
1263
+ msgctxt "as synchronize"
1264
+ msgid "Sync"
1265
+ msgstr "Synkroniser"
1266
+
1267
+ #: templates/account.php261, templates/debug.php:487
1268
+ msgid "Name"
1269
+ msgstr "Navn"
1270
+
1271
+ #: templates/account.php267, templates/debug.php:488
1272
+ msgid "Email"
1273
+ msgstr "E-mail"
1274
+
1275
+ #: templates/account.php274, templates/debug.php370, templates/debug.php:526
1276
+ msgid "User ID"
1277
+ msgstr "Bruger-ID"
1278
+
1279
+ #: templates/account.php:282
1280
+ msgid "Site ID"
1281
+ msgstr "Websteds-ID"
1282
+
1283
+ #: templates/account.php:285
1284
+ msgid "No ID"
1285
+ msgstr "Intet ID"
1286
+
1287
+ #: templates/account.php290, templates/debug.php243, templates/debug.php372,
1288
+ #: templates/debug.php453, templates/debug.php490,
1289
+ #: templates/account/partials/site.php:219
1290
+ msgid "Public Key"
1291
+ msgstr "Offentlig nøgle"
1292
+
1293
+ #: templates/account.php296, templates/debug.php373, templates/debug.php454,
1294
+ #: templates/debug.php491, templates/account/partials/site.php:231
1295
+ msgid "Secret Key"
1296
+ msgstr "Privat nøgle"
1297
+
1298
+ #: templates/account.php:299
1299
+ msgctxt "as secret encryption key missing"
1300
+ msgid "No Secret"
1301
+ msgstr "Ingen privat nøgle"
1302
+
1303
+ #: templates/account.php318, templates/account/partials/site.php112,
1304
+ #: templates/account/partials/site.php:114
1305
+ msgid "Trial"
1306
+ msgstr "Prøveperiode"
1307
+
1308
+ #: templates/account.php337, templates/debug.php531,
1309
+ #: templates/account/partials/site.php:248
1310
+ msgid "License Key"
1311
+ msgstr "Licensnøgle"
1312
+
1313
+ #: templates/account.php:367
1314
+ msgid "not verified"
1315
+ msgstr "ikke verificeret"
1316
+
1317
+ #: templates/account.php376, templates/account/partials/addon.php:120
1318
+ msgid "Expired"
1319
+ msgstr "Udløbet"
1320
+
1321
+ #: templates/account.php:428
1322
+ msgid "Premium version"
1323
+ msgstr "Premium version"
1324
+
1325
+ #: templates/account.php:430
1326
+ msgid "Free version"
1327
+ msgstr "Gratis version"
1328
+
1329
+ #: templates/account.php:442
1330
+ msgid "Verify Email"
1331
+ msgstr "Verificer e-mail"
1332
+
1333
+ #: templates/account.php:453
1334
+ msgid "Download %s Version"
1335
+ msgstr "Download 1%s version"
1336
+
1337
+ #: templates/account.php467, templates/account.php649,
1338
+ #: templates/account/partials/site.php237,
1339
+ #: templates/account/partials/site.php:255
1340
+ msgctxt "verb"
1341
+ msgid "Show"
1342
+ msgstr "Vis"
1343
+
1344
+ #: templates/account.php:481
1345
+ msgid "What is your %s?"
1346
+ msgstr "Angiv venligst %s?"
1347
+
1348
+ #: templates/account.php489, templates/account/billing.php:27
1349
+ msgctxt "verb"
1350
+ msgid "Edit"
1351
+ msgstr "Rediger"
1352
+
1353
+ #: templates/account.php:502
1354
+ msgid "Sites"
1355
+ msgstr "Websteder"
1356
+
1357
+ #: templates/account.php:513
1358
+ msgid "Search by address"
1359
+ msgstr "Søg efter adresse"
1360
+
1361
+ #: templates/account.php522, templates/account.php570, templates/debug.php236,
1362
+ #: templates/debug.php364, templates/debug.php449, templates/debug.php486,
1363
+ #: templates/debug.php524, templates/debug.php597,
1364
+ #: templates/account/payments.php35, templates/debug/logger.php:21
1365
+ msgid "ID"
1366
+ msgstr "ID"
1367
+
1368
+ #: templates/account.php523, templates/debug.php:367
1369
+ msgid "Address"
1370
+ msgstr "Adresse"
1371
+
1372
+ #: templates/account.php:524
1373
+ msgid "License"
1374
+ msgstr "Licens"
1375
+
1376
+ #: templates/account.php:525
1377
+ msgid "Plan"
1378
+ msgstr "Plan"
1379
+
1380
+ #: templates/account.php:573
1381
+ msgctxt "as software license"
1382
+ msgid "License"
1383
+ msgstr "Licens"
1384
+
1385
+ #: templates/account.php:643
1386
+ msgctxt "verb"
1387
+ msgid "Hide"
1388
+ msgstr "Skjul"
1389
+
1390
+ #: templates/account.php:686
1391
+ msgid "Cancelling %s"
1392
+ msgstr "Cancelling %s"
1393
+
1394
+ #: templates/account.php686, templates/account.php703,
1395
+ #: templates/forms/subscription-cancellation.php27,
1396
+ #: templates/forms/deactivation/form.php:117
1397
+ msgid "trial"
1398
+ msgstr "trial"
1399
+
1400
+ #: templates/account.php701, templates/forms/deactivation/form.php:134
1401
+ msgid "Cancelling %s..."
1402
+ msgstr "Cancelling %s..."
1403
+
1404
+ #: templates/account.php704, templates/forms/subscription-cancellation.php28,
1405
+ #: templates/forms/deactivation/form.php:118
1406
+ msgid "subscription"
1407
+ msgstr "subscription"
1408
+
1409
+ #: templates/account.php:718
1410
+ msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1411
+ msgstr "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1412
+
1413
+ #: templates/add-ons.php:36
1414
+ msgid "Add Ons for %s"
1415
+ msgstr "Tilføjelser til %s"
1416
+
1417
+ #: templates/add-ons.php:44
1418
+ msgid "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1419
+ msgstr "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1420
+
1421
+ #: templates/add-ons.php:139
1422
+ msgid "View details"
1423
+ msgstr "Vis detaljer"
1424
+
1425
+ #: templates/admin-notice.php13, templates/forms/license-activation.php208,
1426
+ #: templates/forms/resend-key.php:77
1427
+ msgctxt "as close a window"
1428
+ msgid "Dismiss"
1429
+ msgstr "Fjern"
1430
+
1431
+ #: templates/auto-installation.php:45
1432
+ msgid "%s sec"
1433
+ msgstr "1%s sek"
1434
+
1435
+ #: templates/auto-installation.php:83
1436
+ msgid "Automatic Installation"
1437
+ msgstr "Automatisk installering"
1438
+
1439
+ #: templates/auto-installation.php:93
1440
+ msgid "An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now."
1441
+ msgstr "An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now."
1442
+
1443
+ #: templates/auto-installation.php:104
1444
+ msgid "The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page."
1445
+ msgstr "The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page."
1446
+
1447
+ #: templates/auto-installation.php:109
1448
+ msgid "Cancel Installation"
1449
+ msgstr "Annuller installering"
1450
+
1451
+ #: templates/checkout.php:172
1452
+ msgid "Checkout"
1453
+ msgstr "Udtjekning"
1454
+
1455
+ #: templates/checkout.php:172
1456
+ msgid "PCI compliant"
1457
+ msgstr "PCI compliant"
1458
+
1459
+ #. translators: %s: name (e.g. Hey John,)
1460
+ #: templates/connect.php:112
1461
+ msgctxt "greeting"
1462
+ msgid "Hey %s,"
1463
+ msgstr "Hey %s,"
1464
+
1465
+ #: templates/connect.php:154
1466
+ msgid "Allow & Continue"
1467
+ msgstr "Tillad & Fortsæt"
1468
+
1469
+ #: templates/connect.php:158
1470
+ msgid "Re-send activation email"
1471
+ msgstr "Gensend e-mail om aktivering"
1472
+
1473
+ #: templates/connect.php:162
1474
+ msgid "Thanks %s!"
1475
+ msgstr "Tak %s!"
1476
+
1477
+ #: templates/connect.php172, templates/forms/license-activation.php:43
1478
+ msgid "Agree & Activate License"
1479
+ msgstr "Accepter & aktiver licens"
1480
+
1481
+ #: templates/connect.php:181
1482
+ msgid "Thanks for purchasing %s! To get started, please enter your license key:"
1483
+ msgstr "Tak for at købe %s! For at komme i gang, venligst indtast din licensnøgle:"
1484
+
1485
+ #: templates/connect.php:188
1486
+ msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1487
+ msgstr "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1488
+
1489
+ #: templates/connect.php:189
1490
+ msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1491
+ msgstr "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1492
+
1493
+ #: templates/connect.php:195
1494
+ msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1495
+ msgstr "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1496
+
1497
+ #: templates/connect.php:196
1498
+ msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1499
+ msgstr "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1500
+
1501
+ #: templates/connect.php:230
1502
+ msgid "We're excited to introduce the Freemius network-level integration."
1503
+ msgstr "We're excited to introduce the Freemius network-level integration."
1504
+
1505
+ #: templates/connect.php:233
1506
+ msgid "During the update process we detected %d site(s) that are still pending license activation."
1507
+ msgstr "During the update process we detected %d site(s) that are still pending license activation."
1508
+
1509
+ #: templates/connect.php:235
1510
+ msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1511
+ msgstr "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1512
+
1513
+ #: templates/connect.php:237
1514
+ msgid "%s's paid features"
1515
+ msgstr "%s's paid features"
1516
+
1517
+ #: templates/connect.php:242
1518
+ msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1519
+ msgstr "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1520
+
1521
+ #: templates/connect.php:244
1522
+ msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1523
+ msgstr "During the update process we detected %s site(s) in the network that are still pending your attention."
1524
+
1525
+ #: templates/connect.php253, templates/forms/license-activation.php:46
1526
+ msgid "License key"
1527
+ msgstr "Licensnøgle"
1528
+
1529
+ #: templates/connect.php256, templates/forms/license-activation.php:19
1530
+ msgid "Can't find your license key?"
1531
+ msgstr "Kan du ikke finde din licensnøgle?"
1532
+
1533
+ #: templates/connect.php315, templates/connect.php630,
1534
+ #: templates/forms/deactivation/retry-skip.php:20
1535
+ msgctxt "verb"
1536
+ msgid "Skip"
1537
+ msgstr "Spring over"
1538
+
1539
+ #: templates/connect.php:318
1540
+ msgid "Delegate to Site Admins"
1541
+ msgstr "Delegate to Site Admins"
1542
+
1543
+ #: templates/connect.php:318
1544
+ msgid "If you click it, this decision will be delegated to the sites administrators."
1545
+ msgstr "If you click it, this decision will be delegated to the sites administrators."
1546
+
1547
+ #: templates/connect.php:346
1548
+ msgid "Your Profile Overview"
1549
+ msgstr "Overblik af din profil"
1550
+
1551
+ #: templates/connect.php:347
1552
+ msgid "Name and email address"
1553
+ msgstr "Navn og e-mailadresse"
1554
+
1555
+ #: templates/connect.php:352
1556
+ msgid "Your Site Overview"
1557
+ msgstr "Overblik af dit websted"
1558
+
1559
+ #: templates/connect.php:353
1560
+ msgid "Site URL, WP version, PHP info, plugins & themes"
1561
+ msgstr "Websteds-URL, WP version, PHP info, plugins og temaer"
1562
+
1563
+ #: templates/connect.php:358
1564
+ msgid "Admin Notices"
1565
+ msgstr "Admin-meddelelser"
1566
+
1567
+ #: templates/connect.php359, templates/connect.php:375
1568
+ msgid "Updates, announcements, marketing, no spam"
1569
+ msgstr "Updates, announcements, marketing, no spam"
1570
+
1571
+ #: templates/connect.php:364
1572
+ msgid "Current %s Events"
1573
+ msgstr "Current %s Events"
1574
+
1575
+ #: templates/connect.php:365
1576
+ msgid "Activation, deactivation and uninstall"
1577
+ msgstr "Aktivering, deaktivering og afinstallering"
1578
+
1579
+ #: templates/connect.php:374
1580
+ msgid "Newsletter"
1581
+ msgstr "Nyhedsbrev"
1582
+
1583
+ #: templates/connect.php391, templates/forms/license-activation.php:38
1584
+ msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1585
+ msgstr "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1586
+
1587
+ #: templates/connect.php:396
1588
+ msgid "What permissions are being granted?"
1589
+ msgstr "Hvilke tilladelser bliver givet?"
1590
+
1591
+ #: templates/connect.php:417
1592
+ msgid "Don't have a license key?"
1593
+ msgstr "Har du ikke en licensnøgle?"
1594
+
1595
+ #: templates/connect.php:418
1596
+ msgid "Activate Free Version"
1597
+ msgstr "Aktiver gratis version"
1598
+
1599
+ #: templates/connect.php:420
1600
+ msgid "Have a license key?"
1601
+ msgstr "Har du en licensnøgle?"
1602
+
1603
+ #: templates/connect.php:428
1604
+ msgid "Privacy Policy"
1605
+ msgstr "Privatlivspolitik"
1606
+
1607
+ #: templates/connect.php:430
1608
+ msgid "License Agreement"
1609
+ msgstr "License Agreement"
1610
+
1611
+ #: templates/connect.php:430
1612
+ msgid "Terms of Service"
1613
+ msgstr "Servicevilkår"
1614
+
1615
+ #: templates/connect.php:766
1616
+ msgctxt "as in the process of sending an email"
1617
+ msgid "Sending email"
1618
+ msgstr "Sender e-mail"
1619
+
1620
+ #: templates/connect.php:767
1621
+ msgctxt "as activating plugin"
1622
+ msgid "Activating"
1623
+ msgstr "Aktiverer"
1624
+
1625
+ #: templates/contact.php:78
1626
+ msgid "Contact"
1627
+ msgstr "Kontakt"
1628
+
1629
+ #: templates/debug.php:17
1630
+ msgctxt "as turned off"
1631
+ msgid "Off"
1632
+ msgstr "Fra"
1633
+
1634
+ #: templates/debug.php:18
1635
+ msgctxt "as turned on"
1636
+ msgid "On"
1637
+ msgstr "Til"
1638
+
1639
+ #: templates/debug.php:20
1640
+ msgid "SDK"
1641
+ msgstr "SDK"
1642
+
1643
+ #: templates/debug.php:24
1644
+ msgctxt "as code debugging"
1645
+ msgid "Debugging"
1646
+ msgstr "Fejlfinding"
1647
+
1648
+ #: templates/debug.php54, templates/debug.php248, templates/debug.php374,
1649
+ #: templates/debug.php:492
1650
+ msgid "Actions"
1651
+ msgstr "Handlinger"
1652
+
1653
+ #: templates/debug.php:64
1654
+ msgid "Are you sure you want to delete all Freemius data?"
1655
+ msgstr "Er du sikker på, du vil slette al Freemius data?"
1656
+
1657
+ #: templates/debug.php:64
1658
+ msgid "Delete All Accounts"
1659
+ msgstr "Slet alle konti"
1660
+
1661
+ #: templates/debug.php:71
1662
+ msgid "Clear API Cache"
1663
+ msgstr "Ryd API-cache"
1664
+
1665
+ #: templates/debug.php:79
1666
+ msgid "Clear Updates Transients"
1667
+ msgstr "Clear Updates Transients"
1668
+
1669
+ #: templates/debug.php:86
1670
+ msgid "Sync Data From Server"
1671
+ msgstr "Synkroniser data fra server"
1672
+
1673
+ #: templates/debug.php:95
1674
+ msgid "Migrate Options to Network"
1675
+ msgstr "Migrate Options to Network"
1676
+
1677
+ #: templates/debug.php:100
1678
+ msgid "Load DB Option"
1679
+ msgstr "Hent DB-indstilling"
1680
+
1681
+ #: templates/debug.php:103
1682
+ msgid "Set DB Option"
1683
+ msgstr "Sæt DB-indstilling"
1684
+
1685
+ #: templates/debug.php:180
1686
+ msgid "Key"
1687
+ msgstr "Nøgle"
1688
+
1689
+ #: templates/debug.php:181
1690
+ msgid "Value"
1691
+ msgstr "Værdi"
1692
+
1693
+ #: templates/debug.php:197
1694
+ msgctxt "as software development kit versions"
1695
+ msgid "SDK Versions"
1696
+ msgstr "SDK-versioner"
1697
+
1698
+ #: templates/debug.php:202
1699
+ msgid "SDK Path"
1700
+ msgstr "SDK-sti"
1701
+
1702
+ #: templates/debug.php203, templates/debug.php:242
1703
+ msgid "Module Path"
1704
+ msgstr "Modul-sti"
1705
+
1706
+ #: templates/debug.php:204
1707
+ msgid "Is Active"
1708
+ msgstr "Er aktiv"
1709
+
1710
+ #: templates/debug.php232, templates/debug/plugins-themes-sync.php:35
1711
+ msgid "Plugins"
1712
+ msgstr "Plugins"
1713
+
1714
+ #: templates/debug.php232, templates/debug/plugins-themes-sync.php:56
1715
+ msgid "Themes"
1716
+ msgstr "Temaer"
1717
+
1718
+ #: templates/debug.php237, templates/debug.php369, templates/debug.php451,
1719
+ #: templates/debug/scheduled-crons.php:80
1720
+ msgid "Slug"
1721
+ msgstr "Kortnavn"
1722
+
1723
+ #: templates/debug.php239, templates/debug.php:450
1724
+ msgid "Title"
1725
+ msgstr "Titel"
1726
+
1727
+ #: templates/debug.php:240
1728
+ msgctxt "as application program interface"
1729
+ msgid "API"
1730
+ msgstr "API"
1731
+
1732
+ #: templates/debug.php:241
1733
+ msgid "Freemius State"
1734
+ msgstr "Freemius tilstand"
1735
+
1736
+ #: templates/debug.php:245
1737
+ msgid "Network Blog"
1738
+ msgstr "Netværksblog"
1739
+
1740
+ #: templates/debug.php:246
1741
+ msgid "Network User"
1742
+ msgstr "Netværksbruger"
1743
+
1744
+ #: templates/debug.php:283
1745
+ msgctxt "as connection was successful"
1746
+ msgid "Connected"
1747
+ msgstr "Forbundet"
1748
+
1749
+ #: templates/debug.php:284
1750
+ msgctxt "as connection blocked"
1751
+ msgid "Blocked"
1752
+ msgstr "Blokeret"
1753
+
1754
+ #: templates/debug.php:320
1755
+ msgid "Simulate Trial Promotion"
1756
+ msgstr "Simulate Trial Promotion"
1757
+
1758
+ #: templates/debug.php:332
1759
+ msgid "Simulate Network Upgrade"
1760
+ msgstr "Simuler netværksopgradering"
1761
+
1762
+ #: templates/debug.php:358
1763
+ msgid "%s Installs"
1764
+ msgstr "%s installeringer"
1765
+
1766
+ #: templates/debug.php:360
1767
+ msgctxt "like websites"
1768
+ msgid "Sites"
1769
+ msgstr "Websteder"
1770
+
1771
+ #: templates/debug.php366, templates/account/partials/site.php:148
1772
+ msgid "Blog ID"
1773
+ msgstr "Blog-ID"
1774
+
1775
+ #: templates/debug.php431, templates/debug.php509,
1776
+ #: templates/account/partials/addon.php:339
1777
+ msgctxt "verb"
1778
+ msgid "Delete"
1779
+ msgstr "Slet"
1780
+
1781
+ #: templates/debug.php:445
1782
+ msgid "Add Ons of module %s"
1783
+ msgstr "Tilføjelser til modul %s"
1784
+
1785
+ #: templates/debug.php:482
1786
+ msgid "Users"
1787
+ msgstr "Brugere"
1788
+
1789
+ #: templates/debug.php:489
1790
+ msgid "Verified"
1791
+ msgstr "Verificeret"
1792
+
1793
+ #: templates/debug.php:520
1794
+ msgid "%s Licenses"
1795
+ msgstr "1%s licenser"
1796
+
1797
+ #: templates/debug.php:525
1798
+ msgid "Plugin ID"
1799
+ msgstr "Plugin-ID"
1800
+
1801
+ #: templates/debug.php:527
1802
+ msgid "Plan ID"
1803
+ msgstr "Plan-ID"
1804
+
1805
+ #: templates/debug.php:528
1806
+ msgid "Quota"
1807
+ msgstr "Kvote"
1808
+
1809
+ #: templates/debug.php:529
1810
+ msgid "Activated"
1811
+ msgstr "Aktiveret"
1812
+
1813
+ #: templates/debug.php:530
1814
+ msgid "Blocking"
1815
+ msgstr "Blokerer"
1816
+
1817
+ #: templates/debug.php:532
1818
+ msgctxt "as expiration date"
1819
+ msgid "Expiration"
1820
+ msgstr "Udløber"
1821
+
1822
+ #: templates/debug.php:555
1823
+ msgid "Debug Log"
1824
+ msgstr "Fejlfindingslog"
1825
+
1826
+ #: templates/debug.php:559
1827
+ msgid "All Types"
1828
+ msgstr "Alle typer"
1829
+
1830
+ #: templates/debug.php:566
1831
+ msgid "All Requests"
1832
+ msgstr "Alle forespørgsler"
1833
+
1834
+ #: templates/debug.php571, templates/debug.php600,
1835
+ #: templates/debug/logger.php:25
1836
+ msgid "File"
1837
+ msgstr "Fil"
1838
+
1839
+ #: templates/debug.php572, templates/debug.php598,
1840
+ #: templates/debug/logger.php:23
1841
+ msgid "Function"
1842
+ msgstr "Funktion"
1843
+
1844
+ #: templates/debug.php:573
1845
+ msgid "Process ID"
1846
+ msgstr "Proces-ID"
1847
+
1848
+ #: templates/debug.php:574
1849
+ msgid "Logger"
1850
+ msgstr "Logger"
1851
+
1852
+ #: templates/debug.php575, templates/debug.php599,
1853
+ #: templates/debug/logger.php:24
1854
+ msgid "Message"
1855
+ msgstr "Besked"
1856
+
1857
+ #: templates/debug.php:577
1858
+ msgid "Filter"
1859
+ msgstr "Filter"
1860
+
1861
+ #: templates/debug.php:585
1862
+ msgid "Download"
1863
+ msgstr "Download"
1864
+
1865
+ #: templates/debug.php596, templates/debug/logger.php:22
1866
+ msgid "Type"
1867
+ msgstr "Type"
1868
+
1869
+ #: templates/debug.php601, templates/debug/logger.php:26
1870
+ msgid "Timestamp"
1871
+ msgstr "Tidsstempel"
1872
+
1873
+ #: templates/secure-https-header.php:28
1874
+ msgid "Secure HTTPS %s page, running from an external domain"
1875
+ msgstr "Secure HTTPS %s page, running from an external domain"
1876
+
1877
+ #: includes/customizer/class-fs-customizer-support-section.php55,
1878
+ #: templates/plugin-info/features.php:43
1879
+ msgid "Support"
1880
+ msgstr "Support"
1881
+
1882
+ #: includes/debug/class-fs-debug-bar-panel.php48,
1883
+ #: templates/debug/api-calls.php54, templates/debug/logger.php:62
1884
+ msgctxt "milliseconds"
1885
+ msgid "ms"
1886
+ msgstr "ms"
1887
+
1888
+ #: includes/debug/debug-bar-start.php:41
1889
+ msgid "Freemius API"
1890
+ msgstr "Freemius API"
1891
+
1892
+ #: includes/debug/debug-bar-start.php:42
1893
+ msgid "Requests"
1894
+ msgstr "Requests"
1895
+
1896
+ #: templates/account/billing.php:28
1897
+ msgctxt "verb"
1898
+ msgid "Update"
1899
+ msgstr "Opdater"
1900
+
1901
+ #: templates/account/billing.php:39
1902
+ msgid "Billing"
1903
+ msgstr "Betaling"
1904
+
1905
+ #: templates/account/billing.php44, templates/account/billing.php:44
1906
+ msgid "Business name"
1907
+ msgstr "Firmanavn"
1908
+
1909
+ #: templates/account/billing.php45, templates/account/billing.php:45
1910
+ msgid "Tax / VAT ID"
1911
+ msgstr "Moms / VAT ID"
1912
+
1913
+ #: templates/account/billing.php48, templates/account/billing.php48,
1914
+ #: templates/account/billing.php49, templates/account/billing.php:49
1915
+ msgid "Address Line %d"
1916
+ msgstr "Adresselinje %d"
1917
+
1918
+ #: templates/account/billing.php52, templates/account/billing.php:52
1919
+ msgid "City"
1920
+ msgstr "By"
1921
+
1922
+ #: templates/account/billing.php52, templates/account/billing.php:52
1923
+ msgid "Town"
1924
+ msgstr "By"
1925
+
1926
+ #: templates/account/billing.php53, templates/account/billing.php:53
1927
+ msgid "ZIP / Postal Code"
1928
+ msgstr "ZIP / Postnummer"
1929
+
1930
+ #: templates/account/billing.php:308
1931
+ msgid "Country"
1932
+ msgstr "Land"
1933
+
1934
+ #: templates/account/billing.php:310
1935
+ msgid "Select Country"
1936
+ msgstr "Vælg land"
1937
+
1938
+ #: templates/account/billing.php317, templates/account/billing.php:318
1939
+ msgid "State"
1940
+ msgstr "Stat"
1941
+
1942
+ #: templates/account/billing.php317, templates/account/billing.php:318
1943
+ msgid "Province"
1944
+ msgstr "Provins"
1945
+
1946
+ #: templates/account/payments.php:29
1947
+ msgid "Payments"
1948
+ msgstr "Betalinger"
1949
+
1950
+ #: templates/account/payments.php:36
1951
+ msgid "Date"
1952
+ msgstr "Dato"
1953
+
1954
+ #: templates/account/payments.php:37
1955
+ msgid "Amount"
1956
+ msgstr "Beløb"
1957
+
1958
+ #: templates/account/payments.php38, templates/account/payments.php:50
1959
+ msgid "Invoice"
1960
+ msgstr "Faktura"
1961
+
1962
+ #: templates/debug/api-calls.php:56
1963
+ msgid "API"
1964
+ msgstr "API"
1965
+
1966
+ #: templates/debug/api-calls.php:68
1967
+ msgid "Method"
1968
+ msgstr "Metode"
1969
+
1970
+ #: templates/debug/api-calls.php:69
1971
+ msgid "Code"
1972
+ msgstr "Kode"
1973
+
1974
+ #: templates/debug/api-calls.php:70
1975
+ msgid "Length"
1976
+ msgstr "Længde"
1977
+
1978
+ #: templates/debug/api-calls.php:71
1979
+ msgctxt "as file/folder path"
1980
+ msgid "Path"
1981
+ msgstr "Sti"
1982
+
1983
+ #: templates/debug/api-calls.php:73
1984
+ msgid "Body"
1985
+ msgstr "Body"
1986
+
1987
+ #: templates/debug/api-calls.php:75
1988
+ msgid "Result"
1989
+ msgstr "Resultat"
1990
+
1991
+ #: templates/debug/api-calls.php:76
1992
+ msgid "Start"
1993
+ msgstr "Start"
1994
+
1995
+ #: templates/debug/api-calls.php:77
1996
+ msgid "End"
1997
+ msgstr "Slut"
1998
+
1999
+ #: templates/debug/logger.php:15
2000
+ msgid "Log"
2001
+ msgstr "Log"
2002
+
2003
+ #. translators: %s: time period (e.g. In "2 hours")
2004
+ #: templates/debug/plugins-themes-sync.php18,
2005
+ #: templates/debug/scheduled-crons.php:91
2006
+ msgid "In %s"
2007
+ msgstr "Om %s"
2008
+
2009
+ #. translators: %s: time period (e.g. "2 hours" ago)
2010
+ #: templates/debug/plugins-themes-sync.php20,
2011
+ #: templates/debug/scheduled-crons.php:93
2012
+ msgid "%s ago"
2013
+ msgstr "%s siden"
2014
+
2015
+ #: templates/debug/plugins-themes-sync.php21,
2016
+ #: templates/debug/scheduled-crons.php:74
2017
+ msgctxt "seconds"
2018
+ msgid "sec"
2019
+ msgstr "sek"
2020
+
2021
+ #: templates/debug/plugins-themes-sync.php:23
2022
+ msgid "Plugins & Themes Sync"
2023
+ msgstr "Synkronisering af plugins og temaer"
2024
+
2025
+ #: templates/debug/plugins-themes-sync.php:28
2026
+ msgid "Total"
2027
+ msgstr "Total"
2028
+
2029
+ #: templates/debug/plugins-themes-sync.php29,
2030
+ #: templates/debug/scheduled-crons.php:84
2031
+ msgid "Last"
2032
+ msgstr "Sidste"
2033
+
2034
+ #: templates/debug/scheduled-crons.php:76
2035
+ msgid "Scheduled Crons"
2036
+ msgstr "Planlagte cron jobs"
2037
+
2038
+ #: templates/debug/scheduled-crons.php:81
2039
+ msgid "Module"
2040
+ msgstr "Modul"
2041
+
2042
+ #: templates/debug/scheduled-crons.php:82
2043
+ msgid "Module Type"
2044
+ msgstr "Modultype"
2045
+
2046
+ #: templates/debug/scheduled-crons.php:83
2047
+ msgid "Cron Type"
2048
+ msgstr "Cron Type"
2049
+
2050
+ #: templates/debug/scheduled-crons.php:85
2051
+ msgid "Next"
2052
+ msgstr "Næste"
2053
+
2054
+ #: templates/forms/affiliation.php:82
2055
+ msgid "Non-expiring"
2056
+ msgstr "Udløber ikke"
2057
+
2058
+ #: templates/forms/affiliation.php:85
2059
+ msgid "Apply to become an affiliate"
2060
+ msgstr "Apply to become an affiliate"
2061
+
2062
+ #: templates/forms/affiliation.php:104
2063
+ msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
2064
+ msgstr "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
2065
+
2066
+ #: templates/forms/affiliation.php:119
2067
+ msgid "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
2068
+ msgstr "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
2069
+
2070
+ #: templates/forms/affiliation.php:122
2071
+ msgid "Your affiliation account was temporarily suspended."
2072
+ msgstr "Your affiliation account was temporarily suspended."
2073
+
2074
+ #: templates/forms/affiliation.php:125
2075
+ msgid "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
2076
+ msgstr "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
2077
+
2078
+ #: templates/forms/affiliation.php:128
2079
+ msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
2080
+ msgstr "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
2081
+
2082
+ #: templates/forms/affiliation.php:141
2083
+ msgid "Like the %s? Become our ambassador and earn cash ;-)"
2084
+ msgstr "Like the %s? Become our ambassador and earn cash ;-)"
2085
+
2086
+ #: templates/forms/affiliation.php:142
2087
+ msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
2088
+ msgstr "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
2089
+
2090
+ #: templates/forms/affiliation.php:145
2091
+ msgid "Program Summary"
2092
+ msgstr "Programoversigt"
2093
+
2094
+ #: templates/forms/affiliation.php:147
2095
+ msgid "%s commission when a customer purchases a new license."
2096
+ msgstr "%s commission when a customer purchases a new license."
2097
+
2098
+ #: templates/forms/affiliation.php:149
2099
+ msgid "Get commission for automated subscription renewals."
2100
+ msgstr "Get commission for automated subscription renewals."
2101
+
2102
+ #: templates/forms/affiliation.php:152
2103
+ msgid "%s tracking cookie after the first visit to maximize earnings potential."
2104
+ msgstr "%s tracking cookie after the first visit to maximize earnings potential."
2105
+
2106
+ #: templates/forms/affiliation.php:155
2107
+ msgid "Unlimited commissions."
2108
+ msgstr "Unlimited commissions."
2109
+
2110
+ #: templates/forms/affiliation.php:157
2111
+ msgid "%s minimum payout amount."
2112
+ msgstr "%s minimum payout amount."
2113
+
2114
+ #: templates/forms/affiliation.php:158
2115
+ msgid "Payouts are in USD and processed monthly via PayPal."
2116
+ msgstr "Payouts are in USD and processed monthly via PayPal."
2117
+
2118
+ #: templates/forms/affiliation.php:159
2119
+ msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
2120
+ msgstr "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
2121
+
2122
+ #: templates/forms/affiliation.php:162
2123
+ msgid "Affiliate"
2124
+ msgstr "Affiliate"
2125
+
2126
+ #: templates/forms/affiliation.php165, templates/forms/resend-key.php:23
2127
+ msgid "Email address"
2128
+ msgstr "E-mailadresse"
2129
+
2130
+ #: templates/forms/affiliation.php:169
2131
+ msgid "Full name"
2132
+ msgstr "Fulde navn"
2133
+
2134
+ #: templates/forms/affiliation.php:173
2135
+ msgid "PayPal account email address"
2136
+ msgstr "E-mailadresse til PayPal-konto"
2137
+
2138
+ #: templates/forms/affiliation.php:177
2139
+ msgid "Where are you going to promote the %s?"
2140
+ msgstr "Hvor vil du promovere %s?"
2141
+
2142
+ #: templates/forms/affiliation.php:179
2143
+ msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
2144
+ msgstr "Enter the domain of your website or other websites from where you plan to promote the %s."
2145
+
2146
+ #: templates/forms/affiliation.php:181
2147
+ msgid "Add another domain"
2148
+ msgstr "Tilføj andet domæne"
2149
+
2150
+ #: templates/forms/affiliation.php:185
2151
+ msgid "Extra Domains"
2152
+ msgstr "Ekstra domæner"
2153
+
2154
+ #: templates/forms/affiliation.php:186
2155
+ msgid "Extra domains where you will be marketing the product from."
2156
+ msgstr "Andre domæner du vil markedsføre produktet fra."
2157
+
2158
+ #: templates/forms/affiliation.php:196
2159
+ msgid "Promotion methods"
2160
+ msgstr "Promoveringsmetoder"
2161
+
2162
+ #: templates/forms/affiliation.php:199
2163
+ msgid "Social media (Facebook, Twitter, etc.)"
2164
+ msgstr "Sociale medier (Facebook, Twitter osv.)"
2165
+
2166
+ #: templates/forms/affiliation.php:203
2167
+ msgid "Mobile apps"
2168
+ msgstr "Mobil-apps"
2169
+
2170
+ #: templates/forms/affiliation.php:207
2171
+ msgid "Website, email, and social media statistics (optional)"
2172
+ msgstr "Websted, e-mail, og statistikker for sociale medier (valgfrit)"
2173
+
2174
+ #: templates/forms/affiliation.php:210
2175
+ msgid "Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential)."
2176
+ msgstr "Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential)."
2177
+
2178
+ #: templates/forms/affiliation.php:214
2179
+ msgid "How will you promote us?"
2180
+ msgstr "Hvordan vil du promovere os?"
2181
+
2182
+ #: templates/forms/affiliation.php:217
2183
+ msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2184
+ msgstr "Please provide details on how you intend to promote %s (please be as specific as possible)."
2185
+
2186
+ #: templates/forms/affiliation.php223, templates/forms/resend-key.php:22
2187
+ msgid "Cancel"
2188
+ msgstr "Annuller"
2189
+
2190
+ #: templates/forms/affiliation.php:225
2191
+ msgid "Become an affiliate"
2192
+ msgstr "Bliv en affiliate"
2193
+
2194
+ #: templates/forms/license-activation.php:20
2195
+ msgid "Please enter the license key that you received in the email right after the purchase:"
2196
+ msgstr "Indtast licensnøglen, du modtog i e-mailen lige efter købet:"
2197
+
2198
+ #: templates/forms/license-activation.php:25
2199
+ msgid "Update License"
2200
+ msgstr "Opdater licens"
2201
+
2202
+ #: templates/forms/optout.php:30
2203
+ msgctxt "verb"
2204
+ msgid "Opt Out"
2205
+ msgstr "Frameld"
2206
+
2207
+ #: templates/forms/optout.php:31
2208
+ msgctxt "verb"
2209
+ msgid "Opt In"
2210
+ msgstr "Tilmeld"
2211
+
2212
+ #: templates/forms/optout.php:33
2213
+ msgid "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
2214
+ msgstr "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
2215
+
2216
+ #: templates/forms/optout.php:35
2217
+ msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2218
+ msgstr "Ved at klikke \"Frameld\" vil vi ikke længere sende data fra %s til %s."
2219
+
2220
+ #: templates/forms/premium-versions-upgrade-handler.php:40
2221
+ msgid "There is a new version of %s available."
2222
+ msgstr "En ny version af %s er tilgængelig."
2223
+
2224
+ #: templates/forms/premium-versions-upgrade-handler.php:41
2225
+ msgid " %s to access version %s security & feature updates, and support."
2226
+ msgstr " %s to access version %s security & feature updates, and support."
2227
+
2228
+ #: templates/forms/premium-versions-upgrade-handler.php:54
2229
+ msgid "New Version Available"
2230
+ msgstr "Ny version tilgængelig"
2231
+
2232
+ #: templates/forms/premium-versions-upgrade-handler.php:75
2233
+ msgctxt "close a window"
2234
+ msgid "Dismiss"
2235
+ msgstr "Fjern"
2236
+
2237
+ #: templates/forms/resend-key.php:21
2238
+ msgid "Send License Key"
2239
+ msgstr "Send licensnøgle"
2240
+
2241
+ #: templates/forms/resend-key.php:57
2242
+ msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
2243
+ msgstr "Indtast e-mailadressen, som du benyttede ved opgraderingen, nedenfor og vi vil gensende licensnøglen til dig."
2244
+
2245
+ #: templates/forms/subscription-cancellation.php:37
2246
+ msgid "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
2247
+ msgstr "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
2248
+
2249
+ #: templates/forms/subscription-cancellation.php:47
2250
+ msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
2251
+ msgstr "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
2252
+
2253
+ #: templates/forms/subscription-cancellation.php:52
2254
+ msgid "license"
2255
+ msgstr "license"
2256
+
2257
+ #: templates/forms/subscription-cancellation.php:57
2258
+ msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
2259
+ msgstr "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
2260
+
2261
+ #: templates/forms/subscription-cancellation.php:68
2262
+ msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
2263
+ msgstr "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
2264
+
2265
+ #: templates/forms/subscription-cancellation.php:103
2266
+ msgid "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
2267
+ msgstr "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
2268
+
2269
+ #: templates/forms/subscription-cancellation.php:136
2270
+ msgid "Cancel %s?"
2271
+ msgstr "Cancel %s?"
2272
+
2273
+ #: templates/forms/subscription-cancellation.php:143
2274
+ msgid "Proceed"
2275
+ msgstr "Proceed"
2276
+
2277
+ #: templates/forms/subscription-cancellation.php191,
2278
+ #: templates/forms/deactivation/form.php:150
2279
+ msgid "Cancel %s & Proceed"
2280
+ msgstr "Cancel %s & Proceed"
2281
+
2282
+ #: templates/forms/trial-start.php:22
2283
+ msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
2284
+ msgstr "Du er 1 klik fra at begynde din %1$s dages gratis prøveperiode af planen %2$s."
2285
+
2286
+ #: templates/forms/trial-start.php:28
2287
+ msgid "For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial."
2288
+ msgstr "For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial."
2289
+
2290
+ #: templates/js/style-premium-theme.php:37
2291
+ msgid "Premium"
2292
+ msgstr "Premium"
2293
+
2294
+ #: templates/partials/network-activation.php:23
2295
+ msgid "Activate license on all sites in the network."
2296
+ msgstr "Aktiver licens på alle websteder i netværket."
2297
+
2298
+ #: templates/partials/network-activation.php:24
2299
+ msgid "Apply on all sites in the network."
2300
+ msgstr "Anvend på alle websteder i netværket."
2301
+
2302
+ #: templates/partials/network-activation.php:27
2303
+ msgid "Activate license on all pending sites."
2304
+ msgstr "Akiver licens på alle afventende websteder."
2305
+
2306
+ #: templates/partials/network-activation.php:28
2307
+ msgid "Apply on all pending sites."
2308
+ msgstr "Anvend på alle afventende websteder."
2309
+
2310
+ #: templates/partials/network-activation.php36,
2311
+ #: templates/partials/network-activation.php:68
2312
+ msgid "allow"
2313
+ msgstr "tillad"
2314
+
2315
+ #: templates/partials/network-activation.php38,
2316
+ #: templates/partials/network-activation.php:70
2317
+ msgid "delegate"
2318
+ msgstr "delegér"
2319
+
2320
+ #: templates/partials/network-activation.php41,
2321
+ #: templates/partials/network-activation.php:73
2322
+ msgid "skip"
2323
+ msgstr "spring over"
2324
+
2325
+ #: templates/plugin-info/description.php72,
2326
+ #: templates/plugin-info/screenshots.php:31
2327
+ msgid "Click to view full-size screenshot %d"
2328
+ msgstr "Klik for at vise skærmbillede %d i fuld skærm"
2329
+
2330
+ #: templates/plugin-info/features.php:56
2331
+ msgid "Unlimited Updates"
2332
+ msgstr "Ubegrænsede opdateringer"
2333
+
2334
+ #: templates/account/partials/activate-license-button.php:46
2335
+ msgid "Localhost"
2336
+ msgstr "Localhost"
2337
+
2338
+ #: templates/account/partials/activate-license-button.php:50
2339
+ msgctxt "as 5 licenses left"
2340
+ msgid "%s left"
2341
+ msgstr "%s tilbage"
2342
+
2343
+ #: templates/account/partials/activate-license-button.php:51
2344
+ msgid "Last license"
2345
+ msgstr "Seneste license"
2346
+
2347
+ #: templates/account/partials/addon.php:115
2348
+ msgid "Cancelled"
2349
+ msgstr "Annulleret"
2350
+
2351
+ #: templates/account/partials/addon.php:125
2352
+ msgid "No expiration"
2353
+ msgstr "Udløber ikke"
2354
+
2355
+ #: templates/account/partials/addon.php264,
2356
+ #: templates/account/partials/addon.php:317
2357
+ msgid "Activate this add-on"
2358
+ msgstr "Aktiver denne tilføjelse"
2359
+
2360
+ #: templates/account/partials/site.php:181
2361
+ msgid "Owner Name"
2362
+ msgstr "Ejer-navn"
2363
+
2364
+ #: templates/account/partials/site.php:193
2365
+ msgid "Owner Email"
2366
+ msgstr "E-mailadresse for ejer"
2367
+
2368
+ #: templates/account/partials/site.php:205
2369
+ msgid "Owner ID"
2370
+ msgstr "Ejer-ID"
2371
+
2372
+ #: templates/account/partials/site.php:270
2373
+ msgid "Subscription"
2374
+ msgstr "Abonnement"
2375
+
2376
+ #: templates/forms/deactivation/contact.php:19
2377
+ msgid "Sorry for the inconvenience and we are here to help if you give us a chance."
2378
+ msgstr "Vi beklager ulejligheden, og vi er her for at hjælpe, hvis du giver os chancen."
2379
+
2380
+ #: templates/forms/deactivation/contact.php:22
2381
+ msgid "Contact Support"
2382
+ msgstr "Kontakt support"
2383
+
2384
+ #: templates/forms/deactivation/form.php:59
2385
+ msgid "Anonymous feedback"
2386
+ msgstr "Anonym feedback"
2387
+
2388
+ #: templates/forms/deactivation/form.php:66
2389
+ msgid "Deactivate"
2390
+ msgstr "Deaktiver"
2391
+
2392
+ #: templates/forms/deactivation/form.php:68
2393
+ msgid "Activate %s"
2394
+ msgstr "Aktiver %s"
2395
+
2396
+ #: templates/forms/deactivation/form.php:80
2397
+ msgid "Quick Feedback"
2398
+ msgstr "Quick Feedback"
2399
+
2400
+ #: templates/forms/deactivation/form.php:84
2401
+ msgid "If you have a moment, please let us know why you are %s"
2402
+ msgstr "Hvis du har tid, så lad os venligst vide hvorfor du %s"
2403
+
2404
+ #: templates/forms/deactivation/form.php:84
2405
+ msgid "deactivating"
2406
+ msgstr "deaktiverer"
2407
+
2408
+ #: templates/forms/deactivation/form.php:84
2409
+ msgid "switching"
2410
+ msgstr "skifter"
2411
+
2412
+ #: templates/forms/deactivation/form.php:332
2413
+ msgid "Submit & %s"
2414
+ msgstr "Send & %s"
2415
+
2416
+ #: templates/forms/deactivation/form.php:353
2417
+ msgid "Kindly tell us the reason so we can improve."
2418
+ msgstr "Fortæl os venligst årsagen, så vi kan forbedre det."
2419
+
2420
+ #: templates/forms/deactivation/form.php:478
2421
+ msgid "Yes - %s"
2422
+ msgstr "Ja - %s"
2423
+
2424
+ #: templates/forms/deactivation/form.php:485
2425
+ msgid "Skip & %s"
2426
+ msgstr "Spring over & %s"
2427
+
2428
+ #: templates/forms/deactivation/retry-skip.php:21
2429
+ msgid "Click here to use the plugin anonymously"
2430
+ msgstr "Klik her for at benytte pluginnet anonymt"
2431
+
2432
+ #: templates/forms/deactivation/retry-skip.php:23
2433
+ msgid "You might have missed it, but you don't have to share any data and can just %s the opt-in."
2434
+ msgstr "Du har måske overset det, men du behøver ikke at dele data og kan blot %s tilmeldingen."
sdk/freemius/languages/freemius-en.mo CHANGED
Binary file
sdk/freemius/languages/freemius-en.po CHANGED
@@ -19,1222 +19,1301 @@ msgstr ""
19
  "X-Poedit-SearchPathExcluded-0: *.js\n"
20
  "X-Poedit-SourceCharset: UTF-8\n"
21
 
22
- #: includes/class-freemius.php:1551
23
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
24
  msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
25
 
26
- #: includes/class-freemius.php:1553
27
  msgid "Error"
28
  msgstr "Error"
29
 
30
- #: includes/class-freemius.php:1871
31
  msgid "I found a better %s"
32
  msgstr "I found a better %s"
33
 
34
- #: includes/class-freemius.php:1873
35
  msgid "What's the %s's name?"
36
  msgstr "What's the %s's name?"
37
 
38
- #: includes/class-freemius.php:1879
39
  msgid "It's a temporary %s. I'm just debugging an issue."
40
  msgstr "It's a temporary %s. I'm just debugging an issue."
41
 
42
- #: includes/class-freemius.php:1881
43
  msgid "Deactivation"
44
  msgstr "Deactivation"
45
 
46
- #: includes/class-freemius.php:1882
47
  msgid "Theme Switch"
48
  msgstr "Theme Switch"
49
 
50
- #: includes/class-freemius.php:1891, templates/forms/resend-key.php:24
51
  msgid "Other"
52
  msgstr "Other"
53
 
54
- #: includes/class-freemius.php:1899
55
  msgid "I no longer need the %s"
56
  msgstr "I no longer need the %s"
57
 
58
- #: includes/class-freemius.php:1906
59
  msgid "I only needed the %s for a short period"
60
  msgstr "I only needed the %s for a short period"
61
 
62
- #: includes/class-freemius.php:1912
63
  msgid "The %s broke my site"
64
  msgstr "The %s broke my site"
65
 
66
- #: includes/class-freemius.php:1919
67
  msgid "The %s suddenly stopped working"
68
  msgstr "The %s suddenly stopped working"
69
 
70
- #: includes/class-freemius.php:1929
71
  msgid "I can't pay for it anymore"
72
  msgstr "I can't pay for it anymore"
73
 
74
- #: includes/class-freemius.php:1931
75
  msgid "What price would you feel comfortable paying?"
76
  msgstr "What price would you feel comfortable paying?"
77
 
78
- #: includes/class-freemius.php:1937
79
  msgid "I don't like to share my information with you"
80
  msgstr "I don't like to share my information with you"
81
 
82
- #: includes/class-freemius.php:1958
83
  msgid "The %s didn't work"
84
  msgstr "The %s didn't work"
85
 
86
- #: includes/class-freemius.php:1968
87
  msgid "I couldn't understand how to make it work"
88
  msgstr "I couldn't understand how to make it work"
89
 
90
- #: includes/class-freemius.php:1976
91
  msgid "The %s is great, but I need specific feature that you don't support"
92
  msgstr "The %s is great, but I need specific feature that you don't support"
93
 
94
- #: includes/class-freemius.php:1978
95
  msgid "What feature?"
96
  msgstr "What feature?"
97
 
98
- #: includes/class-freemius.php:1982
99
  msgid "The %s is not working"
100
  msgstr "The %s is not working"
101
 
102
- #: includes/class-freemius.php:1984
103
  msgid "Kindly share what didn't work so we can fix it for future users..."
104
  msgstr "Kindly share what didn't work so we can fix it for future users..."
105
 
106
- #: includes/class-freemius.php:1988
107
  msgid "It's not what I was looking for"
108
  msgstr "It's not what I was looking for"
109
 
110
- #: includes/class-freemius.php:1990
111
  msgid "What you've been looking for?"
112
  msgstr "What you've been looking for?"
113
 
114
- #: includes/class-freemius.php:1994
115
  msgid "The %s didn't work as expected"
116
  msgstr "The %s didn't work as expected"
117
 
118
- #: includes/class-freemius.php:1996
119
  msgid "What did you expect?"
120
  msgstr "What did you expect?"
121
 
122
- #: includes/class-freemius.php:2729, templates/debug.php:20
123
  msgid "Freemius Debug"
124
  msgstr "Freemius Debug"
125
 
126
- #: includes/class-freemius.php:3402
127
  msgid "I don't know what is cURL or how to install it, help me!"
128
  msgstr "I don't know what is cURL or how to install it, help me!"
129
 
130
- #: includes/class-freemius.php:3404
131
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
132
  msgstr "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
133
 
134
- #: includes/class-freemius.php:3411
135
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
136
  msgstr "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
137
 
138
- #: includes/class-freemius.php:3516
139
  msgid "Yes - do your thing"
140
  msgstr "Yes - do your thing"
141
 
142
- #: includes/class-freemius.php:3521
143
  msgid "No - just deactivate"
144
  msgstr "No - just deactivate"
145
 
146
- #: includes/class-freemius.php:3566, includes/class-freemius.php:4066, includes/class-freemius.php:5127, includes/class-freemius.php:10941, includes/class-freemius.php:14205, includes/class-freemius.php:14257, includes/class-freemius.php:14319, includes/class-freemius.php:16448, includes/class-freemius.php:16458, includes/class-freemius.php:17014, includes/class-freemius.php:17032, includes/class-freemius.php:17130, includes/class-freemius.php:17866, templates/add-ons.php:43
147
  msgctxt "exclamation"
148
  msgid "Oops"
149
  msgstr "Oops"
150
 
151
- #: includes/class-freemius.php:3635
152
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
153
  msgstr "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
154
 
155
- #: includes/class-freemius.php:4063
156
  msgctxt "addonX cannot run without pluginY"
157
  msgid "%s cannot run without %s."
158
  msgstr "%s cannot run without %s."
159
 
160
- #: includes/class-freemius.php:4064
161
  msgctxt "addonX cannot run..."
162
  msgid "%s cannot run without the plugin."
163
  msgstr "%s cannot run without the plugin."
164
 
165
- #: includes/class-freemius.php:4176, includes/class-freemius.php:4201, includes/class-freemius.php:17103
166
  msgid "Unexpected API error. Please contact the %s's author with the following error."
167
  msgstr "Unexpected API error. Please contact the %s's author with the following error."
168
 
169
- #: includes/class-freemius.php:4815
170
  msgid "Premium %s version was successfully activated."
171
  msgstr "Premium %s version was successfully activated."
172
 
173
- #: includes/class-freemius.php:4827, includes/class-freemius.php:6660
174
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
175
  msgid "W00t"
176
  msgstr "W00t"
177
 
178
- #: includes/class-freemius.php:4842
179
  msgid "You have a %s license."
180
  msgstr "You have a %s license."
181
 
182
- #: includes/class-freemius.php:4846, includes/class-freemius.php:13626, includes/class-freemius.php:13637, includes/class-freemius.php:16376, includes/class-freemius.php:16676, includes/class-freemius.php:16741, includes/class-freemius.php:16891
183
  msgctxt "interjection expressing joy or exuberance"
184
  msgid "Yee-haw"
185
  msgstr "Yee-haw"
186
 
187
- #: includes/class-freemius.php:5110
188
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
189
  msgstr "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
190
 
191
- #: includes/class-freemius.php:5114
192
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
193
  msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
194
 
195
- #: includes/class-freemius.php:5123, templates/add-ons.php:99, templates/account/partials/addon.php:283
196
  msgid "More information about %s"
197
  msgstr "More information about %s"
198
 
199
- #: includes/class-freemius.php:5124
200
  msgid "Purchase License"
201
  msgstr "Purchase License"
202
 
203
- #: includes/class-freemius.php:6035, templates/connect.php:161
204
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
205
  msgstr "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
206
 
207
- #: includes/class-freemius.php:6039
208
  msgid "start the trial"
209
  msgstr "start the trial"
210
 
211
- #: includes/class-freemius.php:6040, templates/connect.php:165
212
  msgid "complete the install"
213
  msgstr "complete the install"
214
 
215
- #: includes/class-freemius.php:6147
216
  msgid "You are just one step away - %s"
217
  msgstr "You are just one step away - %s"
218
 
219
- #: includes/class-freemius.php:6150
220
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
221
  msgid "Complete \"%s\" Activation Now"
222
  msgstr "Complete \"%s\" Activation Now"
223
 
224
- #: includes/class-freemius.php:6227
225
  msgid "We made a few tweaks to the %s, %s"
226
  msgstr "We made a few tweaks to the %s, %s"
227
 
228
- #: includes/class-freemius.php:6231
229
- msgid "Opt in to make \"%s\" Better!"
230
- msgstr "Opt in to make \"%s\" Better!"
231
 
232
- #: includes/class-freemius.php:6659
233
  msgid "The upgrade of %s was successfully completed."
234
  msgstr "The upgrade of %s was successfully completed."
235
 
236
- #: includes/class-freemius.php:8384, includes/class-fs-plugin-updater.php:581, includes/class-fs-plugin-updater.php:733, includes/class-fs-plugin-updater.php:739, templates/auto-installation.php:32
237
  msgid "Add-On"
238
  msgstr "Add-On"
239
 
240
- #: includes/class-freemius.php:8386, templates/debug.php:349, templates/debug.php:510
241
  msgid "Plugin"
242
  msgstr "Plugin"
243
 
244
- #: includes/class-freemius.php:8387, templates/debug.php:349, templates/debug.php:510, templates/forms/deactivation/form.php:64
245
  msgid "Theme"
246
  msgstr "Theme"
247
 
248
- #: includes/class-freemius.php:10808
249
- msgid "invalid_site_details_collection"
250
- msgstr "invalid_site_details_collection"
251
 
252
- #: includes/class-freemius.php:10928
253
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
254
  msgstr "We couldn't find your email address in the system, are you sure it's the right address?"
255
 
256
- #: includes/class-freemius.php:10930
257
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
258
  msgstr "We can't see any active licenses associated with that email address, are you sure it's the right address?"
259
 
260
- #: includes/class-freemius.php:11166
261
  msgid "Account is pending activation."
262
  msgstr "Account is pending activation."
263
 
264
- #: includes/class-freemius.php:13608
 
 
 
 
 
 
 
 
 
 
 
 
265
  msgid "%s activation was successfully completed."
266
  msgstr "%s activation was successfully completed."
267
 
268
- #: includes/class-freemius.php:13622
269
  msgid "Your account was successfully activated with the %s plan."
270
  msgstr "Your account was successfully activated with the %s plan."
271
 
272
- #: includes/class-freemius.php:13633, includes/class-freemius.php:16737
273
  msgid "Your trial has been successfully started."
274
  msgstr "Your trial has been successfully started."
275
 
276
- #: includes/class-freemius.php:14203, includes/class-freemius.php:14255, includes/class-freemius.php:14317
277
  msgid "Couldn't activate %s."
278
  msgstr "Couldn't activate %s."
279
 
280
- #: includes/class-freemius.php:14204, includes/class-freemius.php:14256, includes/class-freemius.php:14318
281
  msgid "Please contact us with the following message:"
282
  msgstr "Please contact us with the following message:"
283
 
284
- #: includes/class-freemius.php:14666, includes/class-freemius.php:18929
285
  msgid "Upgrade"
286
  msgstr "Upgrade"
287
 
288
- #: includes/class-freemius.php:14672
289
  msgid "Start Trial"
290
  msgstr "Start Trial"
291
 
292
- #: includes/class-freemius.php:14674
293
  msgid "Pricing"
294
  msgstr "Pricing"
295
 
296
- #: includes/class-freemius.php:14734, includes/class-freemius.php:14736
297
  msgid "Affiliation"
298
  msgstr "Affiliation"
299
 
300
- #: includes/class-freemius.php:14756, includes/class-freemius.php:14758, templates/account.php:146, templates/debug.php:314
301
  msgid "Account"
302
  msgstr "Account"
303
 
304
- #: includes/class-freemius.php:14769, includes/class-freemius.php:14771, includes/customizer/class-fs-customizer-support-section.php:60
305
  msgid "Contact Us"
306
  msgstr "Contact Us"
307
 
308
- #: includes/class-freemius.php:14781, includes/class-freemius.php:14783, includes/class-freemius.php:18939, templates/account.php:96, templates/account/partials/addon.php:37
309
  msgid "Add-Ons"
310
  msgstr "Add-Ons"
311
 
312
- #: includes/class-freemius.php:14815, templates/pricing.php:97
 
 
 
 
 
 
 
 
 
 
313
  msgctxt "noun"
314
  msgid "Pricing"
315
  msgstr "Pricing"
316
 
317
- #: includes/class-freemius.php:15009, includes/customizer/class-fs-customizer-support-section.php:67
318
  msgid "Support Forum"
319
  msgstr "Support Forum"
320
 
321
- #: includes/class-freemius.php:15794
322
  msgid "Your email has been successfully verified - you are AWESOME!"
323
  msgstr "Your email has been successfully verified - you are AWESOME!"
324
 
325
- #: includes/class-freemius.php:15795
326
  msgctxt "a positive response"
327
  msgid "Right on"
328
  msgstr "Right on"
329
 
330
- #: includes/class-freemius.php:16367
331
  msgid "Your %s Add-on plan was successfully upgraded."
332
  msgstr "Your %s Add-on plan was successfully upgraded."
333
 
334
- #: includes/class-freemius.php:16369
335
  msgid "%s Add-on was successfully purchased."
336
  msgstr "%s Add-on was successfully purchased."
337
 
338
- #: includes/class-freemius.php:16372
339
  msgid "Download the latest version"
340
  msgstr "Download the latest version"
341
 
342
- #: includes/class-freemius.php:16444
343
  msgctxt "%1s - plugin title, %2s - API domain"
344
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
345
  msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
346
 
347
- #: includes/class-freemius.php:16447, includes/class-freemius.php:16862, includes/class-freemius.php:16927
348
  msgid "Error received from the server:"
349
  msgstr "Error received from the server:"
350
 
351
- #: includes/class-freemius.php:16457
352
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
353
  msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
354
 
355
- #: includes/class-freemius.php:16639, includes/class-freemius.php:16867, includes/class-freemius.php:16910
356
  msgctxt "something somebody says when they are thinking about what you have just said."
357
  msgid "Hmm"
358
  msgstr "Hmm"
359
 
360
- #: includes/class-freemius.php:16652
361
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
362
  msgstr "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
363
 
364
- #: includes/class-freemius.php:16653, templates/account.php:98, templates/add-ons.php:130, templates/account/partials/addon.php:39
365
  msgctxt "trial period"
366
  msgid "Trial"
367
  msgstr "Trial"
368
 
369
- #: includes/class-freemius.php:16658
370
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
371
  msgstr "I have upgraded my account but when I try to Sync the License, the plan remains %s."
372
 
373
- #: includes/class-freemius.php:16662, includes/class-freemius.php:16719
374
  msgid "Please contact us here"
375
  msgstr "Please contact us here"
376
 
377
- #: includes/class-freemius.php:16672
378
  msgid "Your plan was successfully upgraded."
379
  msgstr "Your plan was successfully upgraded."
380
 
381
- #: includes/class-freemius.php:16689
382
  msgid "Your plan was successfully changed to %s."
383
  msgstr "Your plan was successfully changed to %s."
384
 
385
- #: includes/class-freemius.php:16705
386
  msgid "Your license has expired. You can still continue using the free %s forever."
387
  msgstr "Your license has expired. You can still continue using the free %s forever."
388
 
389
- #: includes/class-freemius.php:16707
390
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
391
  msgstr "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
392
 
393
- #: includes/class-freemius.php:16715
394
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
395
  msgstr "Your license has been cancelled. If you think it's a mistake, please contact support."
396
 
397
- #: includes/class-freemius.php:16728
398
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
399
  msgstr "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
400
 
401
- #: includes/class-freemius.php:16751
402
  msgid "Your free trial has expired. You can still continue using all our free features."
403
  msgstr "Your free trial has expired. You can still continue using all our free features."
404
 
405
- #: includes/class-freemius.php:16753
406
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
407
  msgstr "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
408
 
409
- #: includes/class-freemius.php:16858
410
  msgid "It looks like the license could not be activated."
411
  msgstr "It looks like the license could not be activated."
412
 
413
- #: includes/class-freemius.php:16888
414
  msgid "Your license was successfully activated."
415
  msgstr "Your license was successfully activated."
416
 
417
- #: includes/class-freemius.php:16914
418
  msgid "It looks like your site currently doesn't have an active license."
419
  msgstr "It looks like your site currently doesn't have an active license."
420
 
421
- #: includes/class-freemius.php:16926
422
  msgid "It looks like the license deactivation failed."
423
  msgstr "It looks like the license deactivation failed."
424
 
425
- #: includes/class-freemius.php:16954
426
  msgid "Your license was successfully deactivated, you are back to the %s plan."
427
  msgstr "Your license was successfully deactivated, you are back to the %s plan."
428
 
429
- #: includes/class-freemius.php:16955
430
  msgid "O.K"
431
  msgstr "O.K"
432
 
433
- #: includes/class-freemius.php:17003
434
- msgid "Your plan was successfully downgraded. Your %s plan license will expire in %s."
435
- msgstr "Your plan was successfully downgraded. Your %s plan license will expire in %s."
436
 
437
- #: includes/class-freemius.php:17013
438
- msgid "Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes."
439
- msgstr "Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes."
440
 
441
- #: includes/class-freemius.php:17037
442
  msgid "You are already running the %s in a trial mode."
443
  msgstr "You are already running the %s in a trial mode."
444
 
445
- #: includes/class-freemius.php:17048
446
  msgid "You already utilized a trial before."
447
  msgstr "You already utilized a trial before."
448
 
449
- #: includes/class-freemius.php:17062
450
  msgid "Plan %s do not exist, therefore, can't start a trial."
451
  msgstr "Plan %s do not exist, therefore, can't start a trial."
452
 
453
- #: includes/class-freemius.php:17073
454
  msgid "Plan %s does not support a trial period."
455
  msgstr "Plan %s does not support a trial period."
456
 
457
- #: includes/class-freemius.php:17084
458
  msgid "None of the %s's plans supports a trial period."
459
  msgstr "None of the %s's plans supports a trial period."
460
 
461
- #: includes/class-freemius.php:17134
462
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
463
  msgstr "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
464
 
465
- #: includes/class-freemius.php:17185
466
- msgid "Your %s free trial was successfully cancelled."
467
- msgstr "Your %s free trial was successfully cancelled."
468
-
469
- #: includes/class-freemius.php:17190
470
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
471
  msgstr "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
472
 
473
- #: includes/class-freemius.php:17474
 
 
 
 
474
  msgid "Version %s was released."
475
  msgstr "Version %s was released."
476
 
477
- #: includes/class-freemius.php:17474
478
  msgid "Please download %s."
479
  msgstr "Please download %s."
480
 
481
- #: includes/class-freemius.php:17481
482
  msgid "the latest %s version here"
483
  msgstr "the latest %s version here"
484
 
485
- #: includes/class-freemius.php:17486
486
  msgid "New"
487
  msgstr "New"
488
 
489
- #: includes/class-freemius.php:17491
490
  msgid "Seems like you got the latest release."
491
  msgstr "Seems like you got the latest release."
492
 
493
- #: includes/class-freemius.php:17492
494
  msgid "You are all good!"
495
  msgstr "You are all good!"
496
 
497
- #: includes/class-freemius.php:17758
498
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
499
  msgstr "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
500
 
501
- #: includes/class-freemius.php:17893
502
  msgid "Site successfully opted in."
503
  msgstr "Site successfully opted in."
504
 
505
- #: includes/class-freemius.php:17894, includes/class-freemius.php:18671
506
  msgid "Awesome"
507
  msgstr "Awesome"
508
 
509
- #: includes/class-freemius.php:17910, templates/forms/optout.php:32
510
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
511
  msgstr "We appreciate your help in making the %s better by letting us track some usage data."
512
 
513
- #: includes/class-freemius.php:17911
514
  msgid "Thank you!"
515
  msgstr "Thank you!"
516
 
517
- #: includes/class-freemius.php:17918
518
  msgid "We will no longer be sending any usage data of %s on %s to %s."
519
  msgstr "We will no longer be sending any usage data of %s on %s to %s."
520
 
521
- #: includes/class-freemius.php:18033
522
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
523
  msgstr "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
524
 
525
- #: includes/class-freemius.php:18039
526
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
527
  msgstr "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
528
 
529
- #: includes/class-freemius.php:18044
530
  msgid "%s is the new owner of the account."
531
  msgstr "%s is the new owner of the account."
532
 
533
- #: includes/class-freemius.php:18046
534
  msgctxt "as congratulations"
535
  msgid "Congrats"
536
  msgstr "Congrats"
537
 
538
- #: includes/class-freemius.php:18066
539
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
540
  msgstr "Sorry, we could not complete the email update. Another user with the same email is already registered."
541
 
542
- #: includes/class-freemius.php:18067
543
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
544
  msgstr "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
545
 
546
- #: includes/class-freemius.php:18074
547
  msgid "Change Ownership"
548
  msgstr "Change Ownership"
549
 
550
- #: includes/class-freemius.php:18082
551
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
552
  msgstr "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
553
 
554
- #: includes/class-freemius.php:18094
555
  msgid "Please provide your full name."
556
  msgstr "Please provide your full name."
557
 
558
- #: includes/class-freemius.php:18099
559
  msgid "Your name was successfully updated."
560
  msgstr "Your name was successfully updated."
561
 
562
- #: includes/class-freemius.php:18160
563
  msgid "You have successfully updated your %s."
564
  msgstr "You have successfully updated your %s."
565
 
566
- #: includes/class-freemius.php:18300
567
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
568
  msgstr "Just letting you know that the add-ons information of %s is being pulled from an external server."
569
 
570
- #: includes/class-freemius.php:18301
571
  msgctxt "advance notice of something that will need attention."
572
  msgid "Heads up"
573
  msgstr "Heads up"
574
 
575
- #: includes/class-freemius.php:18711
576
  msgctxt "exclamation"
577
  msgid "Hey"
578
  msgstr "Hey"
579
 
580
- #: includes/class-freemius.php:18711
581
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
582
  msgstr "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
583
 
584
- #: includes/class-freemius.php:18719
585
  msgid "No commitment for %s days - cancel anytime!"
586
  msgstr "No commitment for %s days - cancel anytime!"
587
 
588
- #: includes/class-freemius.php:18720
589
  msgid "No credit card required"
590
  msgstr "No credit card required"
591
 
592
- #: includes/class-freemius.php:18727, templates/forms/trial-start.php:53
593
  msgctxt "call to action"
594
  msgid "Start free trial"
595
  msgstr "Start free trial"
596
 
597
- #: includes/class-freemius.php:18804
598
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
599
  msgstr "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
600
 
601
- #: includes/class-freemius.php:18813
602
  msgid "Learn more"
603
  msgstr "Learn more"
604
 
605
- #: includes/class-freemius.php:18963, templates/account.php:394, templates/account.php:497, templates/connect.php:169, templates/connect.php:408, templates/forms/license-activation.php:24, templates/account/partials/addon.php:230
606
  msgid "Activate License"
607
  msgstr "Activate License"
608
 
609
- #: includes/class-freemius.php:18964, templates/account.php:457, templates/account.php:496, templates/account/partials/site.php:256
610
  msgid "Change License"
611
  msgstr "Change License"
612
 
613
- #: includes/class-freemius.php:19046, templates/account/partials/site.php:161
614
  msgid "Opt Out"
615
  msgstr "Opt Out"
616
 
617
- #: includes/class-freemius.php:19048, includes/class-freemius.php:19053, templates/account/partials/site.php:43, templates/account/partials/site.php:161
618
  msgid "Opt In"
619
  msgstr "Opt In"
620
 
621
- #: includes/class-freemius.php:19245
 
 
 
 
 
 
 
 
622
  msgid "Please follow these steps to complete the upgrade"
623
  msgstr "Please follow these steps to complete the upgrade"
624
 
625
- #: includes/class-freemius.php:19249
626
  msgid "Download the latest %s version"
627
  msgstr "Download the latest %s version"
628
 
629
- #: includes/class-freemius.php:19253
630
  msgid "Upload and activate the downloaded version"
631
  msgstr "Upload and activate the downloaded version"
632
 
633
- #: includes/class-freemius.php:19255
634
  msgid "How to upload and activate?"
635
  msgstr "How to upload and activate?"
636
 
637
- #: includes/class-freemius.php:19384
638
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
639
  msgstr "%sClick here%s to choose the sites where you'd like to activate the license on."
640
 
641
- #: includes/class-freemius.php:19545
642
  msgid "Auto installation only works for opted-in users."
643
  msgstr "Auto installation only works for opted-in users."
644
 
645
- #: includes/class-freemius.php:19555, includes/class-freemius.php:19588, includes/class-fs-plugin-updater.php:713, includes/class-fs-plugin-updater.php:727
646
  msgid "Invalid module ID."
647
  msgstr "Invalid module ID."
648
 
649
- #: includes/class-freemius.php:19564, includes/class-fs-plugin-updater.php:747
650
  msgid "Premium version already active."
651
  msgstr "Premium version already active."
652
 
653
- #: includes/class-freemius.php:19571
654
  msgid "You do not have a valid license to access the premium version."
655
  msgstr "You do not have a valid license to access the premium version."
656
 
657
- #: includes/class-freemius.php:19578
658
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
659
  msgstr "Plugin is a \"Serviceware\" which means it does not have a premium code version."
660
 
661
- #: includes/class-freemius.php:19596, includes/class-fs-plugin-updater.php:746
662
  msgid "Premium add-on version already installed."
663
  msgstr "Premium add-on version already installed."
664
 
665
- #: includes/class-freemius.php:19941
666
  msgid "View paid features"
667
  msgstr "View paid features"
668
 
669
- #: includes/class-freemius.php:20251
670
  msgid "Thank you so much for using %s and its add-ons!"
671
  msgstr "Thank you so much for using %s and its add-ons!"
672
 
673
- #: includes/class-freemius.php:20252
674
  msgid "Thank you so much for using %s!"
675
  msgstr "Thank you so much for using %s!"
676
 
677
- #: includes/class-freemius.php:20258
678
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
679
  msgstr "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
680
 
681
- #: includes/class-freemius.php:20262
682
  msgid "Thank you so much for using our products!"
683
  msgstr "Thank you so much for using our products!"
684
 
685
- #: includes/class-freemius.php:20263
686
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
687
  msgstr "You've already opted-in to our usage-tracking, which helps us keep improving them."
688
 
689
- #: includes/class-freemius.php:20282
690
  msgid "%s and its add-ons"
691
  msgstr "%s and its add-ons"
692
 
693
- #: includes/class-freemius.php:20291
694
  msgid "Products"
695
  msgstr "Products"
696
 
697
- #: includes/class-freemius.php:20298, templates/connect.php:259
698
  msgid "Yes"
699
  msgstr "Yes"
700
 
701
- #: includes/class-freemius.php:20299, templates/connect.php:260
702
  msgid "send me security & feature updates, educational content and offers."
703
  msgstr "send me security & feature updates, educational content and offers."
704
 
705
- #: includes/class-freemius.php:20300, templates/connect.php:265
706
  msgid "No"
707
  msgstr "No"
708
 
709
- #: includes/class-freemius.php:20302, templates/connect.php:267
710
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
711
  msgstr "do %sNOT%s send me security & feature updates, educational content and offers."
712
 
713
- #: includes/class-freemius.php:20312
714
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard 🙂"
715
  msgstr "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard 🙂"
716
 
717
- #: includes/class-freemius.php:20314, templates/connect.php:274
718
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
719
  msgstr "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
720
 
721
- #: includes/class-freemius.php:20598
722
  msgid "License key is empty."
723
  msgstr "License key is empty."
724
 
725
- #: includes/class-fs-plugin-updater.php:184, includes/class-fs-plugin-updater.php:219
726
- msgid "%sRenew your license now%s to access version %s security & feature updates, and support."
727
- msgstr "%sRenew your license now%s to access version %s security & feature updates, and support."
 
 
 
 
 
 
 
 
728
 
729
- #: includes/class-fs-plugin-updater.php:776
 
 
 
 
 
 
 
 
730
  msgid "Installing plugin: %s"
731
  msgstr "Installing plugin: %s"
732
 
733
- #: includes/class-fs-plugin-updater.php:817
734
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
735
  msgstr "Unable to connect to the filesystem. Please confirm your credentials."
736
 
737
- #: includes/class-fs-plugin-updater.php:923
738
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
739
  msgstr "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
740
 
741
- #: includes/fs-plugin-info-dialog.php:336, templates/account/partials/addon.php:287
742
  msgctxt "verb"
743
  msgid "Purchase"
744
  msgstr "Purchase"
745
 
746
- #: includes/fs-plugin-info-dialog.php:339
747
  msgid "Start my free %s"
748
  msgstr "Start my free %s"
749
 
750
- #: includes/fs-plugin-info-dialog.php:380
751
  msgid "Install Free Version Now"
752
  msgstr "Install Free Version Now"
753
 
754
- #: includes/fs-plugin-info-dialog.php:381, templates/auto-installation.php:111, templates/account/partials/addon.php:267, templates/account/partials/addon.php:317
755
  msgid "Install Now"
756
  msgstr "Install Now"
757
 
758
- #: includes/fs-plugin-info-dialog.php:392
759
  msgctxt "as download latest version"
760
  msgid "Download Latest Free Version"
761
  msgstr "Download Latest Free Version"
762
 
763
- #: includes/fs-plugin-info-dialog.php:393, templates/account.php:80, templates/account/partials/addon.php:21
764
  msgctxt "as download latest version"
765
  msgid "Download Latest"
766
  msgstr "Download Latest"
767
 
768
- #: includes/fs-plugin-info-dialog.php:403
769
  msgid "Install Free Version Update Now"
770
  msgstr "Install Free Version Update Now"
771
 
772
- #: includes/fs-plugin-info-dialog.php:404, templates/account.php:448
773
  msgid "Install Update Now"
774
  msgstr "Install Update Now"
775
 
776
- #: includes/fs-plugin-info-dialog.php:415
777
  msgid "Newer Free Version (%s) Installed"
778
  msgstr "Newer Free Version (%s) Installed"
779
 
780
- #: includes/fs-plugin-info-dialog.php:416
781
  msgid "Newer Version (%s) Installed"
782
  msgstr "Newer Version (%s) Installed"
783
 
784
- #: includes/fs-plugin-info-dialog.php:424
785
  msgid "Latest Free Version Installed"
786
  msgstr "Latest Free Version Installed"
787
 
788
- #: includes/fs-plugin-info-dialog.php:425
789
  msgid "Latest Version Installed"
790
  msgstr "Latest Version Installed"
791
 
792
- #: includes/fs-plugin-info-dialog.php:580
793
  msgctxt "Plugin installer section title"
794
  msgid "Description"
795
  msgstr "Description"
796
 
797
- #: includes/fs-plugin-info-dialog.php:581
798
  msgctxt "Plugin installer section title"
799
  msgid "Installation"
800
  msgstr "Installation"
801
 
802
- #: includes/fs-plugin-info-dialog.php:582
803
  msgctxt "Plugin installer section title"
804
  msgid "FAQ"
805
  msgstr "FAQ"
806
 
807
- #: includes/fs-plugin-info-dialog.php:583, templates/plugin-info/description.php:55
808
  msgid "Screenshots"
809
  msgstr "Screenshots"
810
 
811
- #: includes/fs-plugin-info-dialog.php:584
812
  msgctxt "Plugin installer section title"
813
  msgid "Changelog"
814
  msgstr "Changelog"
815
 
816
- #: includes/fs-plugin-info-dialog.php:585
817
  msgctxt "Plugin installer section title"
818
  msgid "Reviews"
819
  msgstr "Reviews"
820
 
821
- #: includes/fs-plugin-info-dialog.php:586
822
  msgctxt "Plugin installer section title"
823
  msgid "Other Notes"
824
  msgstr "Other Notes"
825
 
826
- #: includes/fs-plugin-info-dialog.php:601
827
  msgctxt "Plugin installer section title"
828
  msgid "Features & Pricing"
829
  msgstr "Features & Pricing"
830
 
831
- #: includes/fs-plugin-info-dialog.php:611
832
  msgid "Plugin Install"
833
  msgstr "Plugin Install"
834
 
835
- #: includes/fs-plugin-info-dialog.php:683
836
  msgctxt "e.g. Professional Plan"
837
  msgid "%s Plan"
838
  msgstr "%s Plan"
839
 
840
- #: includes/fs-plugin-info-dialog.php:709
841
  msgctxt "e.g. the best product"
842
  msgid "Best"
843
  msgstr "Best"
844
 
845
- #: includes/fs-plugin-info-dialog.php:715, includes/fs-plugin-info-dialog.php:735
846
  msgctxt "as every month"
847
  msgid "Monthly"
848
  msgstr "Monthly"
849
 
850
- #: includes/fs-plugin-info-dialog.php:718
851
  msgctxt "as once a year"
852
  msgid "Annual"
853
  msgstr "Annual"
854
 
855
- #: includes/fs-plugin-info-dialog.php:721
856
  msgid "Lifetime"
857
  msgstr "Lifetime"
858
 
859
- #: includes/fs-plugin-info-dialog.php:735, includes/fs-plugin-info-dialog.php:737, includes/fs-plugin-info-dialog.php:739
860
  msgctxt "e.g. billed monthly"
861
  msgid "Billed %s"
862
  msgstr "Billed %s"
863
 
864
- #: includes/fs-plugin-info-dialog.php:737
865
  msgctxt "as once a year"
866
  msgid "Annually"
867
  msgstr "Annually"
868
 
869
- #: includes/fs-plugin-info-dialog.php:739
870
  msgctxt "as once a year"
871
  msgid "Once"
872
  msgstr "Once"
873
 
874
- #: includes/fs-plugin-info-dialog.php:745
875
  msgid "Single Site License"
876
  msgstr "Single Site License"
877
 
878
- #: includes/fs-plugin-info-dialog.php:747
879
  msgid "Unlimited Licenses"
880
  msgstr "Unlimited Licenses"
881
 
882
- #: includes/fs-plugin-info-dialog.php:749
883
  msgid "Up to %s Sites"
884
  msgstr "Up to %s Sites"
885
 
886
- #: includes/fs-plugin-info-dialog.php:759, templates/plugin-info/features.php:82
887
  msgctxt "as monthly period"
888
  msgid "mo"
889
  msgstr "mo"
890
 
891
- #: includes/fs-plugin-info-dialog.php:766, templates/plugin-info/features.php:80
892
  msgctxt "as annual period"
893
  msgid "year"
894
  msgstr "year"
895
 
896
- #: includes/fs-plugin-info-dialog.php:820
897
  msgctxt "noun"
898
  msgid "Price"
899
  msgstr "Price"
900
 
901
- #: includes/fs-plugin-info-dialog.php:868
902
  msgid "Save %s"
903
  msgstr "Save %s"
904
 
905
- #: includes/fs-plugin-info-dialog.php:878
906
  msgid "No commitment for %s - cancel anytime"
907
  msgstr "No commitment for %s - cancel anytime"
908
 
909
- #: includes/fs-plugin-info-dialog.php:881
910
  msgid "After your free %s, pay as little as %s"
911
  msgstr "After your free %s, pay as little as %s"
912
 
913
- #: includes/fs-plugin-info-dialog.php:892
914
  msgid "Details"
915
  msgstr "Details"
916
 
917
- #: includes/fs-plugin-info-dialog.php:896, templates/account.php:87, templates/debug.php:191, templates/debug.php:228, templates/debug.php:442, templates/account/partials/addon.php:28
918
  msgctxt "product version"
919
  msgid "Version"
920
  msgstr "Version"
921
 
922
- #: includes/fs-plugin-info-dialog.php:903
923
  msgctxt "as the plugin author"
924
  msgid "Author"
925
  msgstr "Author"
926
 
927
- #: includes/fs-plugin-info-dialog.php:910
928
  msgid "Last Updated"
929
  msgstr "Last Updated"
930
 
931
- #: includes/fs-plugin-info-dialog.php:915
932
  msgctxt "x-ago"
933
  msgid "%s ago"
934
  msgstr "%s ago"
935
 
936
- #: includes/fs-plugin-info-dialog.php:924
937
  msgid "Requires WordPress Version"
938
  msgstr "Requires WordPress Version"
939
 
940
- #: includes/fs-plugin-info-dialog.php:925
941
  msgid "%s or higher"
942
  msgstr "%s or higher"
943
 
944
- #: includes/fs-plugin-info-dialog.php:932
945
  msgid "Compatible up to"
946
  msgstr "Compatible up to"
947
 
948
- #: includes/fs-plugin-info-dialog.php:940
949
  msgid "Downloaded"
950
  msgstr "Downloaded"
951
 
952
- #: includes/fs-plugin-info-dialog.php:944
953
  msgid "%s time"
954
  msgstr "%s time"
955
 
956
- #: includes/fs-plugin-info-dialog.php:946
957
  msgid "%s times"
958
  msgstr "%s times"
959
 
960
- #: includes/fs-plugin-info-dialog.php:956
961
  msgid "WordPress.org Plugin Page"
962
  msgstr "WordPress.org Plugin Page"
963
 
964
- #: includes/fs-plugin-info-dialog.php:964
965
  msgid "Plugin Homepage"
966
  msgstr "Plugin Homepage"
967
 
968
- #: includes/fs-plugin-info-dialog.php:972, includes/fs-plugin-info-dialog.php:1054
969
  msgid "Donate to this plugin"
970
  msgstr "Donate to this plugin"
971
 
972
- #: includes/fs-plugin-info-dialog.php:979
973
  msgid "Average Rating"
974
  msgstr "Average Rating"
975
 
976
- #: includes/fs-plugin-info-dialog.php:986
977
  msgid "based on %s"
978
  msgstr "based on %s"
979
 
980
- #: includes/fs-plugin-info-dialog.php:990
981
  msgid "%s rating"
982
  msgstr "%s rating"
983
 
984
- #: includes/fs-plugin-info-dialog.php:992
985
  msgid "%s ratings"
986
  msgstr "%s ratings"
987
 
988
- #: includes/fs-plugin-info-dialog.php:1007
989
  msgid "%s star"
990
  msgstr "%s star"
991
 
992
- #: includes/fs-plugin-info-dialog.php:1009
993
  msgid "%s stars"
994
  msgstr "%s stars"
995
 
996
- #: includes/fs-plugin-info-dialog.php:1020
997
  msgid "Click to see reviews that provided a rating of %s"
998
  msgstr "Click to see reviews that provided a rating of %s"
999
 
1000
- #: includes/fs-plugin-info-dialog.php:1033
1001
  msgid "Contributors"
1002
  msgstr "Contributors"
1003
 
1004
- #: includes/fs-plugin-info-dialog.php:1062, includes/fs-plugin-info-dialog.php:1064
1005
  msgid "Warning"
1006
  msgstr "Warning"
1007
 
1008
- #: includes/fs-plugin-info-dialog.php:1062
1009
  msgid "This plugin has not been tested with your current version of WordPress."
1010
  msgstr "This plugin has not been tested with your current version of WordPress."
1011
 
1012
- #: includes/fs-plugin-info-dialog.php:1064
1013
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1014
  msgstr "This plugin has not been marked as compatible with your version of WordPress."
1015
 
1016
- #: includes/fs-plugin-info-dialog.php:1083
1017
  msgid "Paid add-on must be deployed to Freemius."
1018
  msgstr "Paid add-on must be deployed to Freemius."
1019
 
1020
- #: includes/fs-plugin-info-dialog.php:1084
1021
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1022
  msgstr "Add-on must be deployed to WordPress.org or Freemius."
1023
 
1024
- #: templates/account.php:81, templates/account/partials/addon.php:22, templates/account/partials/site.php:295
1025
- msgid "Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s."
1026
- msgstr "Downgrading your plan will immediately stop all future recurring payments and your %s plan license will expire in %s."
 
 
 
 
1027
 
1028
- #: templates/account.php:82, templates/account/partials/addon.php:23
 
 
 
 
 
 
 
 
 
1029
  msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1030
  msgstr "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1031
 
1032
- #: templates/account.php:83, templates/account/partials/addon.php:24, templates/account/partials/site.php:296
1033
- msgid "You can still enjoy all %s features but you will not have access to %s updates and support."
1034
- msgstr "You can still enjoy all %s features but you will not have access to %s updates and support."
1035
 
1036
- #: templates/account.php:84, templates/account/partials/addon.php:25, templates/account/partials/site.php:297
1037
  msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1038
  msgstr "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1039
 
1040
  #. translators: %s: Plan title (e.g. "Professional")
1041
- #: templates/account.php:86, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:27
1042
  msgid "Activate %s Plan"
1043
  msgstr "Activate %s Plan"
1044
 
1045
  #. translators: %s: Time period (e.g. Auto renews in "2 months")
1046
- #: templates/account.php:89, templates/account/partials/addon.php:30, templates/account/partials/site.php:275
1047
  msgid "Auto renews in %s"
1048
  msgstr "Auto renews in %s"
1049
 
1050
  #. translators: %s: Time period (e.g. Expires in "2 months")
1051
- #: templates/account.php:91, templates/account/partials/addon.php:32, templates/account/partials/site.php:277
1052
  msgid "Expires in %s"
1053
  msgstr "Expires in %s"
1054
 
1055
- #: templates/account.php:92, templates/account/partials/addon.php:33
1056
  msgctxt "as synchronize license"
1057
  msgid "Sync License"
1058
  msgstr "Sync License"
1059
 
1060
- #: templates/account.php:93, templates/account/partials/addon.php:34
1061
  msgid "Cancel Trial"
1062
  msgstr "Cancel Trial"
1063
 
1064
- #: templates/account.php:94, templates/account/partials/addon.php:35
1065
  msgid "Change Plan"
1066
  msgstr "Change Plan"
1067
 
1068
- #: templates/account.php:95, templates/account/partials/addon.php:36
1069
  msgctxt "verb"
1070
  msgid "Upgrade"
1071
  msgstr "Upgrade"
1072
 
1073
- #: templates/account.php:97, templates/account/partials/addon.php:38, templates/account/partials/site.php:298
1074
  msgctxt "verb"
1075
  msgid "Downgrade"
1076
  msgstr "Downgrade"
1077
 
1078
- #: templates/account.php:99, templates/add-ons.php:126, templates/plugin-info/features.php:72, templates/account/partials/addon.php:40, templates/account/partials/site.php:31
1079
  msgid "Free"
1080
  msgstr "Free"
1081
 
1082
- #: templates/account.php:100, templates/account/partials/addon.php:41
1083
  msgid "Activate"
1084
  msgstr "Activate"
1085
 
1086
- #: templates/account.php:101, templates/debug.php:361, includes/customizer/class-fs-customizer-upsell-control.php:106, templates/account/partials/addon.php:42
1087
  msgctxt "as product pricing plan"
1088
  msgid "Plan"
1089
  msgstr "Plan"
1090
 
1091
- #: templates/account.php:154
1092
  msgid "Free Trial"
1093
  msgstr "Free Trial"
1094
 
1095
- #: templates/account.php:165
1096
  msgid "Account Details"
1097
  msgstr "Account Details"
1098
 
1099
- #: templates/account.php:175
1100
  msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1101
  msgstr "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1102
 
1103
- #: templates/account.php:177
1104
  msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1105
  msgstr "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1106
 
1107
- #: templates/account.php:180
1108
  msgid "Delete Account"
1109
  msgstr "Delete Account"
1110
 
1111
- #: templates/account.php:192, templates/account/partials/addon.php:155, templates/account/partials/deactivate-license-button.php:35
1112
  msgid "Deactivate License"
1113
  msgstr "Deactivate License"
1114
 
1115
- #: templates/account.php:210
1116
  msgid "Are you sure you want to proceed?"
1117
  msgstr "Are you sure you want to proceed?"
1118
 
1119
- #: templates/account.php:210, templates/account/partials/addon.php:177
1120
  msgid "Cancel Subscription"
1121
  msgstr "Cancel Subscription"
1122
 
1123
- #: templates/account.php:239
1124
  msgctxt "as synchronize"
1125
  msgid "Sync"
1126
  msgstr "Sync"
1127
 
1128
- #: templates/account.php:253, templates/debug.php:477
1129
  msgid "Name"
1130
  msgstr "Name"
1131
 
1132
- #: templates/account.php:259, templates/debug.php:478
1133
  msgid "Email"
1134
  msgstr "Email"
1135
 
1136
- #: templates/account.php:266, templates/debug.php:360, templates/debug.php:516
1137
  msgid "User ID"
1138
  msgstr "User ID"
1139
 
1140
- #: templates/account.php:274
1141
  msgid "Site ID"
1142
  msgstr "Site ID"
1143
 
1144
- #: templates/account.php:277
1145
  msgid "No ID"
1146
  msgstr "No ID"
1147
 
1148
- #: templates/account.php:282, templates/debug.php:233, templates/debug.php:362, templates/debug.php:443, templates/debug.php:480, templates/account/partials/site.php:219
1149
  msgid "Public Key"
1150
  msgstr "Public Key"
1151
 
1152
- #: templates/account.php:288, templates/debug.php:363, templates/debug.php:444, templates/debug.php:481, templates/account/partials/site.php:231
1153
  msgid "Secret Key"
1154
  msgstr "Secret Key"
1155
 
1156
- #: templates/account.php:291
1157
  msgctxt "as secret encryption key missing"
1158
  msgid "No Secret"
1159
  msgstr "No Secret"
1160
 
1161
- #: templates/account.php:310, templates/account/partials/site.php:112, templates/account/partials/site.php:114
1162
  msgid "Trial"
1163
  msgstr "Trial"
1164
 
1165
- #: templates/account.php:329, templates/debug.php:521, templates/account/partials/site.php:248
1166
  msgid "License Key"
1167
  msgstr "License Key"
1168
 
1169
- #: templates/account.php:359
1170
  msgid "not verified"
1171
  msgstr "not verified"
1172
 
1173
- #: templates/account.php:416
 
 
 
 
1174
  msgid "Premium version"
1175
  msgstr "Premium version"
1176
 
1177
- #: templates/account.php:418
1178
  msgid "Free version"
1179
  msgstr "Free version"
1180
 
1181
- #: templates/account.php:430
1182
  msgid "Verify Email"
1183
  msgstr "Verify Email"
1184
 
1185
- #: templates/account.php:441
1186
  msgid "Download %s Version"
1187
  msgstr "Download %s Version"
1188
 
1189
- #: templates/account.php:455, templates/account.php:636, templates/account/partials/site.php:237, templates/account/partials/site.php:255
1190
  msgctxt "verb"
1191
  msgid "Show"
1192
  msgstr "Show"
1193
 
1194
- #: templates/account.php:469
1195
  msgid "What is your %s?"
1196
  msgstr "What is your %s?"
1197
 
1198
- #: templates/account.php:477, templates/account/billing.php:27
1199
  msgctxt "verb"
1200
  msgid "Edit"
1201
  msgstr "Edit"
1202
 
1203
- #: templates/account.php:490
1204
  msgid "Sites"
1205
  msgstr "Sites"
1206
 
1207
- #: templates/account.php:501
1208
  msgid "Search by address"
1209
  msgstr "Search by address"
1210
 
1211
- #: templates/account.php:510, templates/account.php:558, templates/debug.php:226, templates/debug.php:354, templates/debug.php:439, templates/debug.php:476, templates/debug.php:514, templates/debug.php:587, templates/account/payments.php:35, templates/debug/logger.php:21
1212
  msgid "ID"
1213
  msgstr "ID"
1214
 
1215
- #: templates/account.php:511, templates/debug.php:357
1216
  msgid "Address"
1217
  msgstr "Address"
1218
 
1219
- #: templates/account.php:512
1220
  msgid "License"
1221
  msgstr "License"
1222
 
1223
- #: templates/account.php:513
1224
  msgid "Plan"
1225
  msgstr "Plan"
1226
 
1227
- #: templates/account.php:561
1228
  msgctxt "as software license"
1229
  msgid "License"
1230
  msgstr "License"
1231
 
1232
- #: templates/account.php:630
1233
  msgctxt "verb"
1234
  msgid "Hide"
1235
  msgstr "Hide"
1236
 
1237
- #: templates/account.php:665
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1238
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1239
  msgstr "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1240
 
@@ -1246,7 +1325,7 @@ msgstr "Add Ons for %s"
1246
  msgid "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1247
  msgstr "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1248
 
1249
- #: templates/add-ons.php:135
1250
  msgid "View details"
1251
  msgstr "View details"
1252
 
@@ -1284,162 +1363,166 @@ msgid "PCI compliant"
1284
  msgstr "PCI compliant"
1285
 
1286
  #. translators: %s: name (e.g. Hey John,)
1287
- #: templates/connect.php:110
1288
  msgctxt "greeting"
1289
  msgid "Hey %s,"
1290
  msgstr "Hey %s,"
1291
 
1292
- #: templates/connect.php:152
1293
  msgid "Allow & Continue"
1294
  msgstr "Allow & Continue"
1295
 
1296
- #: templates/connect.php:156
1297
  msgid "Re-send activation email"
1298
  msgstr "Re-send activation email"
1299
 
1300
- #: templates/connect.php:160
1301
  msgid "Thanks %s!"
1302
  msgstr "Thanks %s!"
1303
 
1304
- #: templates/connect.php:170, templates/forms/license-activation.php:43
1305
  msgid "Agree & Activate License"
1306
  msgstr "Agree & Activate License"
1307
 
1308
- #: templates/connect.php:179
1309
  msgid "Thanks for purchasing %s! To get started, please enter your license key:"
1310
  msgstr "Thanks for purchasing %s! To get started, please enter your license key:"
1311
 
1312
- #: templates/connect.php:186
1313
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1314
  msgstr "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1315
 
1316
- #: templates/connect.php:187
1317
  msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1318
  msgstr "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1319
 
1320
- #: templates/connect.php:193
1321
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1322
  msgstr "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1323
 
1324
- #: templates/connect.php:194
1325
  msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1326
  msgstr "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1327
 
1328
- #: templates/connect.php:228
1329
  msgid "We're excited to introduce the Freemius network-level integration."
1330
  msgstr "We're excited to introduce the Freemius network-level integration."
1331
 
1332
- #: templates/connect.php:231
1333
  msgid "During the update process we detected %d site(s) that are still pending license activation."
1334
  msgstr "During the update process we detected %d site(s) that are still pending license activation."
1335
 
1336
- #: templates/connect.php:233
1337
  msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1338
  msgstr "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1339
 
1340
- #: templates/connect.php:235
1341
  msgid "%s's paid features"
1342
  msgstr "%s's paid features"
1343
 
1344
- #: templates/connect.php:240
1345
  msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1346
  msgstr "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1347
 
1348
- #: templates/connect.php:242
1349
  msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1350
  msgstr "During the update process we detected %s site(s) in the network that are still pending your attention."
1351
 
1352
- #: templates/connect.php:251, templates/forms/license-activation.php:46
1353
  msgid "License key"
1354
  msgstr "License key"
1355
 
1356
- #: templates/connect.php:254, templates/forms/license-activation.php:19
1357
  msgid "Can't find your license key?"
1358
  msgstr "Can't find your license key?"
1359
 
1360
- #: templates/connect.php:302, templates/connect.php:617, templates/forms/deactivation/retry-skip.php:20
1361
  msgctxt "verb"
1362
  msgid "Skip"
1363
  msgstr "Skip"
1364
 
1365
- #: templates/connect.php:305
1366
  msgid "Delegate to Site Admins"
1367
  msgstr "Delegate to Site Admins"
1368
 
1369
- #: templates/connect.php:305
1370
  msgid "If you click it, this decision will be delegated to the sites administrators."
1371
  msgstr "If you click it, this decision will be delegated to the sites administrators."
1372
 
1373
- #: templates/connect.php:333
1374
  msgid "Your Profile Overview"
1375
  msgstr "Your Profile Overview"
1376
 
1377
- #: templates/connect.php:334
1378
  msgid "Name and email address"
1379
  msgstr "Name and email address"
1380
 
1381
- #: templates/connect.php:339
1382
  msgid "Your Site Overview"
1383
  msgstr "Your Site Overview"
1384
 
1385
- #: templates/connect.php:340
1386
  msgid "Site URL, WP version, PHP info, plugins & themes"
1387
  msgstr "Site URL, WP version, PHP info, plugins & themes"
1388
 
1389
- #: templates/connect.php:345
1390
  msgid "Admin Notices"
1391
  msgstr "Admin Notices"
1392
 
1393
- #: templates/connect.php:346, templates/connect.php:362
1394
  msgid "Updates, announcements, marketing, no spam"
1395
  msgstr "Updates, announcements, marketing, no spam"
1396
 
1397
- #: templates/connect.php:351
1398
  msgid "Current %s Events"
1399
  msgstr "Current %s Events"
1400
 
1401
- #: templates/connect.php:352
1402
  msgid "Activation, deactivation and uninstall"
1403
  msgstr "Activation, deactivation and uninstall"
1404
 
1405
- #: templates/connect.php:361
1406
  msgid "Newsletter"
1407
  msgstr "Newsletter"
1408
 
1409
- #: templates/connect.php:378, templates/forms/license-activation.php:38
1410
  msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1411
  msgstr "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1412
 
1413
- #: templates/connect.php:383
1414
  msgid "What permissions are being granted?"
1415
  msgstr "What permissions are being granted?"
1416
 
1417
- #: templates/connect.php:404
1418
  msgid "Don't have a license key?"
1419
  msgstr "Don't have a license key?"
1420
 
1421
- #: templates/connect.php:405
1422
  msgid "Activate Free Version"
1423
  msgstr "Activate Free Version"
1424
 
1425
- #: templates/connect.php:407
1426
  msgid "Have a license key?"
1427
  msgstr "Have a license key?"
1428
 
1429
- #: templates/connect.php:415
1430
  msgid "Privacy Policy"
1431
  msgstr "Privacy Policy"
1432
 
1433
- #: templates/connect.php:417
 
 
 
 
1434
  msgid "Terms of Service"
1435
  msgstr "Terms of Service"
1436
 
1437
- #: templates/connect.php:750
1438
  msgctxt "as in the process of sending an email"
1439
  msgid "Sending email"
1440
  msgstr "Sending email"
1441
 
1442
- #: templates/connect.php:751
1443
  msgctxt "as activating plugin"
1444
  msgid "Activating"
1445
  msgstr "Activating"
@@ -1467,7 +1550,7 @@ msgctxt "as code debugging"
1467
  msgid "Debugging"
1468
  msgstr "Debugging"
1469
 
1470
- #: templates/debug.php:54, templates/debug.php:238, templates/debug.php:364, templates/debug.php:482
1471
  msgid "Actions"
1472
  msgstr "Actions"
1473
 
@@ -1491,194 +1574,198 @@ msgstr "Clear Updates Transients"
1491
  msgid "Sync Data From Server"
1492
  msgstr "Sync Data From Server"
1493
 
1494
- #: templates/debug.php:90
 
 
 
 
1495
  msgid "Load DB Option"
1496
  msgstr "Load DB Option"
1497
 
1498
- #: templates/debug.php:93
1499
  msgid "Set DB Option"
1500
  msgstr "Set DB Option"
1501
 
1502
- #: templates/debug.php:170
1503
  msgid "Key"
1504
  msgstr "Key"
1505
 
1506
- #: templates/debug.php:171
1507
  msgid "Value"
1508
  msgstr "Value"
1509
 
1510
- #: templates/debug.php:187
1511
  msgctxt "as software development kit versions"
1512
  msgid "SDK Versions"
1513
  msgstr "SDK Versions"
1514
 
1515
- #: templates/debug.php:192
1516
  msgid "SDK Path"
1517
  msgstr "SDK Path"
1518
 
1519
- #: templates/debug.php:193, templates/debug.php:232
1520
  msgid "Module Path"
1521
  msgstr "Module Path"
1522
 
1523
- #: templates/debug.php:194
1524
  msgid "Is Active"
1525
  msgstr "Is Active"
1526
 
1527
- #: templates/debug.php:222, templates/debug/plugins-themes-sync.php:35
1528
  msgid "Plugins"
1529
  msgstr "Plugins"
1530
 
1531
- #: templates/debug.php:222, templates/debug/plugins-themes-sync.php:56
1532
  msgid "Themes"
1533
  msgstr "Themes"
1534
 
1535
- #: templates/debug.php:227, templates/debug.php:359, templates/debug.php:441, templates/debug/scheduled-crons.php:80
1536
  msgid "Slug"
1537
  msgstr "Slug"
1538
 
1539
- #: templates/debug.php:229, templates/debug.php:440
1540
  msgid "Title"
1541
  msgstr "Title"
1542
 
1543
- #: templates/debug.php:230
1544
  msgctxt "as application program interface"
1545
  msgid "API"
1546
  msgstr "API"
1547
 
1548
- #: templates/debug.php:231
1549
  msgid "Freemius State"
1550
  msgstr "Freemius State"
1551
 
1552
- #: templates/debug.php:235
1553
  msgid "Network Blog"
1554
  msgstr "Network Blog"
1555
 
1556
- #: templates/debug.php:236
1557
  msgid "Network User"
1558
  msgstr "Network User"
1559
 
1560
- #: templates/debug.php:273
1561
  msgctxt "as connection was successful"
1562
  msgid "Connected"
1563
  msgstr "Connected"
1564
 
1565
- #: templates/debug.php:274
1566
  msgctxt "as connection blocked"
1567
  msgid "Blocked"
1568
  msgstr "Blocked"
1569
 
1570
- #: templates/debug.php:310
1571
- msgid "Simulate Trial"
1572
- msgstr "Simulate Trial"
1573
 
1574
- #: templates/debug.php:322
1575
  msgid "Simulate Network Upgrade"
1576
  msgstr "Simulate Network Upgrade"
1577
 
1578
- #: templates/debug.php:348
1579
  msgid "%s Installs"
1580
  msgstr "%s Installs"
1581
 
1582
- #: templates/debug.php:350
1583
  msgctxt "like websites"
1584
  msgid "Sites"
1585
  msgstr "Sites"
1586
 
1587
- #: templates/debug.php:356, templates/account/partials/site.php:148
1588
  msgid "Blog ID"
1589
  msgstr "Blog ID"
1590
 
1591
- #: templates/debug.php:421, templates/debug.php:499, templates/account/partials/addon.php:334
1592
  msgctxt "verb"
1593
  msgid "Delete"
1594
  msgstr "Delete"
1595
 
1596
- #: templates/debug.php:435
1597
  msgid "Add Ons of module %s"
1598
  msgstr "Add Ons of module %s"
1599
 
1600
- #: templates/debug.php:472
1601
  msgid "Users"
1602
  msgstr "Users"
1603
 
1604
- #: templates/debug.php:479
1605
  msgid "Verified"
1606
  msgstr "Verified"
1607
 
1608
- #: templates/debug.php:510
1609
  msgid "%s Licenses"
1610
  msgstr "%s Licenses"
1611
 
1612
- #: templates/debug.php:515
1613
  msgid "Plugin ID"
1614
  msgstr "Plugin ID"
1615
 
1616
- #: templates/debug.php:517
1617
  msgid "Plan ID"
1618
  msgstr "Plan ID"
1619
 
1620
- #: templates/debug.php:518
1621
  msgid "Quota"
1622
  msgstr "Quota"
1623
 
1624
- #: templates/debug.php:519
1625
  msgid "Activated"
1626
  msgstr "Activated"
1627
 
1628
- #: templates/debug.php:520
1629
  msgid "Blocking"
1630
  msgstr "Blocking"
1631
 
1632
- #: templates/debug.php:522
1633
  msgctxt "as expiration date"
1634
  msgid "Expiration"
1635
  msgstr "Expiration"
1636
 
1637
- #: templates/debug.php:545
1638
  msgid "Debug Log"
1639
  msgstr "Debug Log"
1640
 
1641
- #: templates/debug.php:549
1642
  msgid "All Types"
1643
  msgstr "All Types"
1644
 
1645
- #: templates/debug.php:556
1646
  msgid "All Requests"
1647
  msgstr "All Requests"
1648
 
1649
- #: templates/debug.php:561, templates/debug.php:590, templates/debug/logger.php:25
1650
  msgid "File"
1651
  msgstr "File"
1652
 
1653
- #: templates/debug.php:562, templates/debug.php:588, templates/debug/logger.php:23
1654
  msgid "Function"
1655
  msgstr "Function"
1656
 
1657
- #: templates/debug.php:563
1658
  msgid "Process ID"
1659
  msgstr "Process ID"
1660
 
1661
- #: templates/debug.php:564
1662
  msgid "Logger"
1663
  msgstr "Logger"
1664
 
1665
- #: templates/debug.php:565, templates/debug.php:589, templates/debug/logger.php:24
1666
  msgid "Message"
1667
  msgstr "Message"
1668
 
1669
- #: templates/debug.php:567
1670
  msgid "Filter"
1671
  msgstr "Filter"
1672
 
1673
- #: templates/debug.php:575
1674
  msgid "Download"
1675
  msgstr "Download"
1676
 
1677
- #: templates/debug.php:586, templates/debug/logger.php:22
1678
  msgid "Type"
1679
  msgstr "Type"
1680
 
1681
- #: templates/debug.php:591, templates/debug/logger.php:26
1682
  msgid "Timestamp"
1683
  msgstr "Timestamp"
1684
 
@@ -2022,23 +2109,19 @@ msgstr "Usage tracking is done in the name of making %s better. Making a better
2022
  msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2023
  msgstr "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2024
 
2025
- #: templates/forms/premium-versions-upgrade-handler.php:24
2026
  msgid "There is a new version of %s available."
2027
  msgstr "There is a new version of %s available."
2028
 
2029
- #: templates/forms/premium-versions-upgrade-handler.php:25
2030
- msgid " %sRenew your license now%s to access version %s security & feature updates, and support."
2031
- msgstr " %sRenew your license now%s to access version %s security & feature updates, and support."
2032
 
2033
- #: templates/forms/premium-versions-upgrade-handler.php:34
2034
  msgid "New Version Available"
2035
  msgstr "New Version Available"
2036
 
2037
- #: templates/forms/premium-versions-upgrade-handler.php:36
2038
- msgid "Renew license"
2039
- msgstr "Renew license"
2040
-
2041
- #: templates/forms/premium-versions-upgrade-handler.php:53
2042
  msgctxt "close a window"
2043
  msgid "Dismiss"
2044
  msgstr "Dismiss"
@@ -2051,6 +2134,42 @@ msgstr "Send License Key"
2051
  msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
2052
  msgstr "Enter the email address you've used for the upgrade below and we will resend you the license key."
2053
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2054
  #: templates/forms/trial-start.php:22
2055
  msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
2056
  msgstr "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
@@ -2112,19 +2231,15 @@ msgstr "%s left"
2112
  msgid "Last license"
2113
  msgstr "Last license"
2114
 
2115
- #: templates/account/partials/addon.php:111
2116
  msgid "Cancelled"
2117
  msgstr "Cancelled"
2118
 
2119
- #: templates/account/partials/addon.php:116
2120
- msgid "Expired"
2121
- msgstr "Expired"
2122
-
2123
- #: templates/account/partials/addon.php:121
2124
  msgid "No expiration"
2125
  msgstr "No expiration"
2126
 
2127
- #: templates/account/partials/addon.php:259, templates/account/partials/addon.php:312
2128
  msgid "Activate this add-on"
2129
  msgstr "Activate this add-on"
2130
 
@@ -2152,47 +2267,47 @@ msgstr "Sorry for the inconvenience and we are here to help if you give us a cha
2152
  msgid "Contact Support"
2153
  msgstr "Contact Support"
2154
 
2155
- #: templates/forms/deactivation/form.php:56
2156
  msgid "Anonymous feedback"
2157
  msgstr "Anonymous feedback"
2158
 
2159
- #: templates/forms/deactivation/form.php:63
2160
  msgid "Deactivate"
2161
  msgstr "Deactivate"
2162
 
2163
- #: templates/forms/deactivation/form.php:65
2164
  msgid "Activate %s"
2165
  msgstr "Activate %s"
2166
 
2167
- #: templates/forms/deactivation/form.php:76
2168
- msgid "Quick feedback"
2169
- msgstr "Quick feedback"
2170
-
2171
  #: templates/forms/deactivation/form.php:80
 
 
 
 
2172
  msgid "If you have a moment, please let us know why you are %s"
2173
  msgstr "If you have a moment, please let us know why you are %s"
2174
 
2175
- #: templates/forms/deactivation/form.php:80
2176
  msgid "deactivating"
2177
  msgstr "deactivating"
2178
 
2179
- #: templates/forms/deactivation/form.php:80
2180
  msgid "switching"
2181
  msgstr "switching"
2182
 
2183
- #: templates/forms/deactivation/form.php:269
2184
  msgid "Submit & %s"
2185
  msgstr "Submit & %s"
2186
 
2187
- #: templates/forms/deactivation/form.php:290
2188
  msgid "Kindly tell us the reason so we can improve."
2189
  msgstr "Kindly tell us the reason so we can improve."
2190
 
2191
- #: templates/forms/deactivation/form.php:411
2192
  msgid "Yes - %s"
2193
  msgstr "Yes - %s"
2194
 
2195
- #: templates/forms/deactivation/form.php:418
2196
  msgid "Skip & %s"
2197
  msgstr "Skip & %s"
2198
 
19
  "X-Poedit-SearchPathExcluded-0: *.js\n"
20
  "X-Poedit-SourceCharset: UTF-8\n"
21
 
22
+ #: includes/class-freemius.php:1602
23
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
24
  msgstr "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
25
 
26
+ #: includes/class-freemius.php:1604
27
  msgid "Error"
28
  msgstr "Error"
29
 
30
+ #: includes/class-freemius.php:1925
31
  msgid "I found a better %s"
32
  msgstr "I found a better %s"
33
 
34
+ #: includes/class-freemius.php:1927
35
  msgid "What's the %s's name?"
36
  msgstr "What's the %s's name?"
37
 
38
+ #: includes/class-freemius.php:1933
39
  msgid "It's a temporary %s. I'm just debugging an issue."
40
  msgstr "It's a temporary %s. I'm just debugging an issue."
41
 
42
+ #: includes/class-freemius.php:1935
43
  msgid "Deactivation"
44
  msgstr "Deactivation"
45
 
46
+ #: includes/class-freemius.php:1936
47
  msgid "Theme Switch"
48
  msgstr "Theme Switch"
49
 
50
+ #: includes/class-freemius.php:1945, templates/forms/resend-key.php:24
51
  msgid "Other"
52
  msgstr "Other"
53
 
54
+ #: includes/class-freemius.php:1953
55
  msgid "I no longer need the %s"
56
  msgstr "I no longer need the %s"
57
 
58
+ #: includes/class-freemius.php:1960
59
  msgid "I only needed the %s for a short period"
60
  msgstr "I only needed the %s for a short period"
61
 
62
+ #: includes/class-freemius.php:1966
63
  msgid "The %s broke my site"
64
  msgstr "The %s broke my site"
65
 
66
+ #: includes/class-freemius.php:1973
67
  msgid "The %s suddenly stopped working"
68
  msgstr "The %s suddenly stopped working"
69
 
70
+ #: includes/class-freemius.php:1983
71
  msgid "I can't pay for it anymore"
72
  msgstr "I can't pay for it anymore"
73
 
74
+ #: includes/class-freemius.php:1985
75
  msgid "What price would you feel comfortable paying?"
76
  msgstr "What price would you feel comfortable paying?"
77
 
78
+ #: includes/class-freemius.php:1991
79
  msgid "I don't like to share my information with you"
80
  msgstr "I don't like to share my information with you"
81
 
82
+ #: includes/class-freemius.php:2012
83
  msgid "The %s didn't work"
84
  msgstr "The %s didn't work"
85
 
86
+ #: includes/class-freemius.php:2022
87
  msgid "I couldn't understand how to make it work"
88
  msgstr "I couldn't understand how to make it work"
89
 
90
+ #: includes/class-freemius.php:2030
91
  msgid "The %s is great, but I need specific feature that you don't support"
92
  msgstr "The %s is great, but I need specific feature that you don't support"
93
 
94
+ #: includes/class-freemius.php:2032
95
  msgid "What feature?"
96
  msgstr "What feature?"
97
 
98
+ #: includes/class-freemius.php:2036
99
  msgid "The %s is not working"
100
  msgstr "The %s is not working"
101
 
102
+ #: includes/class-freemius.php:2038
103
  msgid "Kindly share what didn't work so we can fix it for future users..."
104
  msgstr "Kindly share what didn't work so we can fix it for future users..."
105
 
106
+ #: includes/class-freemius.php:2042
107
  msgid "It's not what I was looking for"
108
  msgstr "It's not what I was looking for"
109
 
110
+ #: includes/class-freemius.php:2044
111
  msgid "What you've been looking for?"
112
  msgstr "What you've been looking for?"
113
 
114
+ #: includes/class-freemius.php:2048
115
  msgid "The %s didn't work as expected"
116
  msgstr "The %s didn't work as expected"
117
 
118
+ #: includes/class-freemius.php:2050
119
  msgid "What did you expect?"
120
  msgstr "What did you expect?"
121
 
122
+ #: includes/class-freemius.php:2853, templates/debug.php:20
123
  msgid "Freemius Debug"
124
  msgstr "Freemius Debug"
125
 
126
+ #: includes/class-freemius.php:3581
127
  msgid "I don't know what is cURL or how to install it, help me!"
128
  msgstr "I don't know what is cURL or how to install it, help me!"
129
 
130
+ #: includes/class-freemius.php:3583
131
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
132
  msgstr "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
133
 
134
+ #: includes/class-freemius.php:3590
135
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
136
  msgstr "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
137
 
138
+ #: includes/class-freemius.php:3695
139
  msgid "Yes - do your thing"
140
  msgstr "Yes - do your thing"
141
 
142
+ #: includes/class-freemius.php:3700
143
  msgid "No - just deactivate"
144
  msgstr "No - just deactivate"
145
 
146
+ #: includes/class-freemius.php:3745, includes/class-freemius.php:4253, includes/class-freemius.php:5318, includes/class-freemius.php:11316, includes/class-freemius.php:14649, includes/class-freemius.php:14701, includes/class-freemius.php:14763, includes/class-freemius.php:16969, includes/class-freemius.php:16979, includes/class-freemius.php:17588, includes/class-freemius.php:18446, includes/class-freemius.php:18561, includes/class-freemius.php:18705, templates/add-ons.php:43
147
  msgctxt "exclamation"
148
  msgid "Oops"
149
  msgstr "Oops"
150
 
151
+ #: includes/class-freemius.php:3814
152
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
153
  msgstr "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
154
 
155
+ #: includes/class-freemius.php:4250
156
  msgctxt "addonX cannot run without pluginY"
157
  msgid "%s cannot run without %s."
158
  msgstr "%s cannot run without %s."
159
 
160
+ #: includes/class-freemius.php:4251
161
  msgctxt "addonX cannot run..."
162
  msgid "%s cannot run without the plugin."
163
  msgstr "%s cannot run without the plugin."
164
 
165
+ #: includes/class-freemius.php:4363, includes/class-freemius.php:4388, includes/class-freemius.php:17659
166
  msgid "Unexpected API error. Please contact the %s's author with the following error."
167
  msgstr "Unexpected API error. Please contact the %s's author with the following error."
168
 
169
+ #: includes/class-freemius.php:5006
170
  msgid "Premium %s version was successfully activated."
171
  msgstr "Premium %s version was successfully activated."
172
 
173
+ #: includes/class-freemius.php:5018, includes/class-freemius.php:6862
174
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
175
  msgid "W00t"
176
  msgstr "W00t"
177
 
178
+ #: includes/class-freemius.php:5033
179
  msgid "You have a %s license."
180
  msgstr "You have a %s license."
181
 
182
+ #: includes/class-freemius.php:5037, includes/class-freemius.php:14070, includes/class-freemius.php:14081, includes/class-freemius.php:16897, includes/class-freemius.php:17197, includes/class-freemius.php:17263, includes/class-freemius.php:17413
183
  msgctxt "interjection expressing joy or exuberance"
184
  msgid "Yee-haw"
185
  msgstr "Yee-haw"
186
 
187
+ #: includes/class-freemius.php:5301
188
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
189
  msgstr "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
190
 
191
+ #: includes/class-freemius.php:5305
192
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
193
  msgstr "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
194
 
195
+ #: includes/class-freemius.php:5314, templates/add-ons.php:103, templates/account/partials/addon.php:288
196
  msgid "More information about %s"
197
  msgstr "More information about %s"
198
 
199
+ #: includes/class-freemius.php:5315
200
  msgid "Purchase License"
201
  msgstr "Purchase License"
202
 
203
+ #: includes/class-freemius.php:6230, templates/connect.php:163
204
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
205
  msgstr "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
206
 
207
+ #: includes/class-freemius.php:6234
208
  msgid "start the trial"
209
  msgstr "start the trial"
210
 
211
+ #: includes/class-freemius.php:6235, templates/connect.php:167
212
  msgid "complete the install"
213
  msgstr "complete the install"
214
 
215
+ #: includes/class-freemius.php:6348
216
  msgid "You are just one step away - %s"
217
  msgstr "You are just one step away - %s"
218
 
219
+ #: includes/class-freemius.php:6351
220
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
221
  msgid "Complete \"%s\" Activation Now"
222
  msgstr "Complete \"%s\" Activation Now"
223
 
224
+ #: includes/class-freemius.php:6429
225
  msgid "We made a few tweaks to the %s, %s"
226
  msgstr "We made a few tweaks to the %s, %s"
227
 
228
+ #: includes/class-freemius.php:6433
229
+ msgid "Opt in to make \"%s\" better!"
230
+ msgstr "Opt in to make \"%s\" better!"
231
 
232
+ #: includes/class-freemius.php:6861
233
  msgid "The upgrade of %s was successfully completed."
234
  msgstr "The upgrade of %s was successfully completed."
235
 
236
+ #: includes/class-freemius.php:8705, includes/class-fs-plugin-updater.php:882, includes/class-fs-plugin-updater.php:1077, includes/class-fs-plugin-updater.php:1084, templates/auto-installation.php:32
237
  msgid "Add-On"
238
  msgstr "Add-On"
239
 
240
+ #: includes/class-freemius.php:8707, templates/debug.php:359, templates/debug.php:520
241
  msgid "Plugin"
242
  msgstr "Plugin"
243
 
244
+ #: includes/class-freemius.php:8708, templates/debug.php:359, templates/debug.php:520, templates/forms/deactivation/form.php:67
245
  msgid "Theme"
246
  msgstr "Theme"
247
 
248
+ #: includes/class-freemius.php:11183
249
+ msgid "Invalid site details collection."
250
+ msgstr "Invalid site details collection."
251
 
252
+ #: includes/class-freemius.php:11303
253
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
254
  msgstr "We couldn't find your email address in the system, are you sure it's the right address?"
255
 
256
+ #: includes/class-freemius.php:11305
257
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
258
  msgstr "We can't see any active licenses associated with that email address, are you sure it's the right address?"
259
 
260
+ #: includes/class-freemius.php:11541
261
  msgid "Account is pending activation."
262
  msgstr "Account is pending activation."
263
 
264
+ #: includes/class-freemius.php:11653, templates/forms/premium-versions-upgrade-handler.php:47
265
+ msgid "Buy a license now"
266
+ msgstr "Buy a license now"
267
+
268
+ #: includes/class-freemius.php:11665, templates/forms/premium-versions-upgrade-handler.php:46
269
+ msgid "Renew your license now"
270
+ msgstr "Renew your license now"
271
+
272
+ #: includes/class-freemius.php:11669
273
+ msgid "%s to access version %s security & feature updates, and support."
274
+ msgstr "%s to access version %s security & feature updates, and support."
275
+
276
+ #: includes/class-freemius.php:14052
277
  msgid "%s activation was successfully completed."
278
  msgstr "%s activation was successfully completed."
279
 
280
+ #: includes/class-freemius.php:14066
281
  msgid "Your account was successfully activated with the %s plan."
282
  msgstr "Your account was successfully activated with the %s plan."
283
 
284
+ #: includes/class-freemius.php:14077, includes/class-freemius.php:17259
285
  msgid "Your trial has been successfully started."
286
  msgstr "Your trial has been successfully started."
287
 
288
+ #: includes/class-freemius.php:14647, includes/class-freemius.php:14699, includes/class-freemius.php:14761
289
  msgid "Couldn't activate %s."
290
  msgstr "Couldn't activate %s."
291
 
292
+ #: includes/class-freemius.php:14648, includes/class-freemius.php:14700, includes/class-freemius.php:14762
293
  msgid "Please contact us with the following message:"
294
  msgstr "Please contact us with the following message:"
295
 
296
+ #: includes/class-freemius.php:15111, includes/class-freemius.php:19543
297
  msgid "Upgrade"
298
  msgstr "Upgrade"
299
 
300
+ #: includes/class-freemius.php:15117
301
  msgid "Start Trial"
302
  msgstr "Start Trial"
303
 
304
+ #: includes/class-freemius.php:15119
305
  msgid "Pricing"
306
  msgstr "Pricing"
307
 
308
+ #: includes/class-freemius.php:15181, includes/class-freemius.php:15183
309
  msgid "Affiliation"
310
  msgstr "Affiliation"
311
 
312
+ #: includes/class-freemius.php:15211, includes/class-freemius.php:15213, templates/account.php:150, templates/debug.php:324
313
  msgid "Account"
314
  msgstr "Account"
315
 
316
+ #: includes/class-freemius.php:15226, includes/class-freemius.php:15228, includes/customizer/class-fs-customizer-support-section.php:60
317
  msgid "Contact Us"
318
  msgstr "Contact Us"
319
 
320
+ #: includes/class-freemius.php:15238, includes/class-freemius.php:15240, includes/class-freemius.php:19553, templates/account.php:100, templates/account/partials/addon.php:41
321
  msgid "Add-Ons"
322
  msgstr "Add-Ons"
323
 
324
+ #: includes/class-freemius.php:15274
325
+ msgctxt "ASCII arrow left icon"
326
+ msgid "&#x2190;"
327
+ msgstr "&#x2190;"
328
+
329
+ #: includes/class-freemius.php:15274
330
+ msgctxt "ASCII arrow right icon"
331
+ msgid "&#x27a4;"
332
+ msgstr "&#x27a4;"
333
+
334
+ #: includes/class-freemius.php:15276, templates/pricing.php:97
335
  msgctxt "noun"
336
  msgid "Pricing"
337
  msgstr "Pricing"
338
 
339
+ #: includes/class-freemius.php:15479, includes/customizer/class-fs-customizer-support-section.php:67
340
  msgid "Support Forum"
341
  msgstr "Support Forum"
342
 
343
+ #: includes/class-freemius.php:16265
344
  msgid "Your email has been successfully verified - you are AWESOME!"
345
  msgstr "Your email has been successfully verified - you are AWESOME!"
346
 
347
+ #: includes/class-freemius.php:16266
348
  msgctxt "a positive response"
349
  msgid "Right on"
350
  msgstr "Right on"
351
 
352
+ #: includes/class-freemius.php:16888
353
  msgid "Your %s Add-on plan was successfully upgraded."
354
  msgstr "Your %s Add-on plan was successfully upgraded."
355
 
356
+ #: includes/class-freemius.php:16890
357
  msgid "%s Add-on was successfully purchased."
358
  msgstr "%s Add-on was successfully purchased."
359
 
360
+ #: includes/class-freemius.php:16893
361
  msgid "Download the latest version"
362
  msgstr "Download the latest version"
363
 
364
+ #: includes/class-freemius.php:16965
365
  msgctxt "%1s - plugin title, %2s - API domain"
366
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
367
  msgstr "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
368
 
369
+ #: includes/class-freemius.php:16968, includes/class-freemius.php:17384, includes/class-freemius.php:17461
370
  msgid "Error received from the server:"
371
  msgstr "Error received from the server:"
372
 
373
+ #: includes/class-freemius.php:16978
374
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
375
  msgstr "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
376
 
377
+ #: includes/class-freemius.php:17160, includes/class-freemius.php:17389, includes/class-freemius.php:17432, includes/class-freemius.php:17535
378
  msgctxt "something somebody says when they are thinking about what you have just said."
379
  msgid "Hmm"
380
  msgstr "Hmm"
381
 
382
+ #: includes/class-freemius.php:17173
383
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
384
  msgstr "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
385
 
386
+ #: includes/class-freemius.php:17174, templates/account.php:102, templates/add-ons.php:134, templates/account/partials/addon.php:43
387
  msgctxt "trial period"
388
  msgid "Trial"
389
  msgstr "Trial"
390
 
391
+ #: includes/class-freemius.php:17179
392
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
393
  msgstr "I have upgraded my account but when I try to Sync the License, the plan remains %s."
394
 
395
+ #: includes/class-freemius.php:17183, includes/class-freemius.php:17241
396
  msgid "Please contact us here"
397
  msgstr "Please contact us here"
398
 
399
+ #: includes/class-freemius.php:17193
400
  msgid "Your plan was successfully upgraded."
401
  msgstr "Your plan was successfully upgraded."
402
 
403
+ #: includes/class-freemius.php:17211
404
  msgid "Your plan was successfully changed to %s."
405
  msgstr "Your plan was successfully changed to %s."
406
 
407
+ #: includes/class-freemius.php:17227
408
  msgid "Your license has expired. You can still continue using the free %s forever."
409
  msgstr "Your license has expired. You can still continue using the free %s forever."
410
 
411
+ #: includes/class-freemius.php:17229
412
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
413
  msgstr "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
414
 
415
+ #: includes/class-freemius.php:17237
416
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
417
  msgstr "Your license has been cancelled. If you think it's a mistake, please contact support."
418
 
419
+ #: includes/class-freemius.php:17250
420
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
421
  msgstr "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
422
 
423
+ #: includes/class-freemius.php:17273
424
  msgid "Your free trial has expired. You can still continue using all our free features."
425
  msgstr "Your free trial has expired. You can still continue using all our free features."
426
 
427
+ #: includes/class-freemius.php:17275
428
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
429
  msgstr "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
430
 
431
+ #: includes/class-freemius.php:17380
432
  msgid "It looks like the license could not be activated."
433
  msgstr "It looks like the license could not be activated."
434
 
435
+ #: includes/class-freemius.php:17410
436
  msgid "Your license was successfully activated."
437
  msgstr "Your license was successfully activated."
438
 
439
+ #: includes/class-freemius.php:17436
440
  msgid "It looks like your site currently doesn't have an active license."
441
  msgstr "It looks like your site currently doesn't have an active license."
442
 
443
+ #: includes/class-freemius.php:17460
444
  msgid "It looks like the license deactivation failed."
445
  msgstr "It looks like the license deactivation failed."
446
 
447
+ #: includes/class-freemius.php:17488
448
  msgid "Your license was successfully deactivated, you are back to the %s plan."
449
  msgstr "Your license was successfully deactivated, you are back to the %s plan."
450
 
451
+ #: includes/class-freemius.php:17489
452
  msgid "O.K"
453
  msgstr "O.K"
454
 
455
+ #: includes/class-freemius.php:17542
456
+ msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
457
+ msgstr "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
458
 
459
+ #: includes/class-freemius.php:17551
460
+ msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
461
+ msgstr "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
462
 
463
+ #: includes/class-freemius.php:17593
464
  msgid "You are already running the %s in a trial mode."
465
  msgstr "You are already running the %s in a trial mode."
466
 
467
+ #: includes/class-freemius.php:17604
468
  msgid "You already utilized a trial before."
469
  msgstr "You already utilized a trial before."
470
 
471
+ #: includes/class-freemius.php:17618
472
  msgid "Plan %s do not exist, therefore, can't start a trial."
473
  msgstr "Plan %s do not exist, therefore, can't start a trial."
474
 
475
+ #: includes/class-freemius.php:17629
476
  msgid "Plan %s does not support a trial period."
477
  msgstr "Plan %s does not support a trial period."
478
 
479
+ #: includes/class-freemius.php:17640
480
  msgid "None of the %s's plans supports a trial period."
481
  msgstr "None of the %s's plans supports a trial period."
482
 
483
+ #: includes/class-freemius.php:17690
484
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
485
  msgstr "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
486
 
487
+ #: includes/class-freemius.php:17726
 
 
 
 
488
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
489
  msgstr "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
490
 
491
+ #: includes/class-freemius.php:17745
492
+ msgid "Your %s free trial was successfully cancelled."
493
+ msgstr "Your %s free trial was successfully cancelled."
494
+
495
+ #: includes/class-freemius.php:18052
496
  msgid "Version %s was released."
497
  msgstr "Version %s was released."
498
 
499
+ #: includes/class-freemius.php:18052
500
  msgid "Please download %s."
501
  msgstr "Please download %s."
502
 
503
+ #: includes/class-freemius.php:18059
504
  msgid "the latest %s version here"
505
  msgstr "the latest %s version here"
506
 
507
+ #: includes/class-freemius.php:18064
508
  msgid "New"
509
  msgstr "New"
510
 
511
+ #: includes/class-freemius.php:18069
512
  msgid "Seems like you got the latest release."
513
  msgstr "Seems like you got the latest release."
514
 
515
+ #: includes/class-freemius.php:18070
516
  msgid "You are all good!"
517
  msgstr "You are all good!"
518
 
519
+ #: includes/class-freemius.php:18338
520
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
521
  msgstr "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
522
 
523
+ #: includes/class-freemius.php:18473
524
  msgid "Site successfully opted in."
525
  msgstr "Site successfully opted in."
526
 
527
+ #: includes/class-freemius.php:18474, includes/class-freemius.php:19285
528
  msgid "Awesome"
529
  msgstr "Awesome"
530
 
531
+ #: includes/class-freemius.php:18490, templates/forms/optout.php:32
532
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
533
  msgstr "We appreciate your help in making the %s better by letting us track some usage data."
534
 
535
+ #: includes/class-freemius.php:18491
536
  msgid "Thank you!"
537
  msgstr "Thank you!"
538
 
539
+ #: includes/class-freemius.php:18498
540
  msgid "We will no longer be sending any usage data of %s on %s to %s."
541
  msgstr "We will no longer be sending any usage data of %s on %s to %s."
542
 
543
+ #: includes/class-freemius.php:18627
544
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
545
  msgstr "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
546
 
547
+ #: includes/class-freemius.php:18633
548
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
549
  msgstr "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
550
 
551
+ #: includes/class-freemius.php:18638
552
  msgid "%s is the new owner of the account."
553
  msgstr "%s is the new owner of the account."
554
 
555
+ #: includes/class-freemius.php:18640
556
  msgctxt "as congratulations"
557
  msgid "Congrats"
558
  msgstr "Congrats"
559
 
560
+ #: includes/class-freemius.php:18660
561
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
562
  msgstr "Sorry, we could not complete the email update. Another user with the same email is already registered."
563
 
564
+ #: includes/class-freemius.php:18661
565
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
566
  msgstr "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
567
 
568
+ #: includes/class-freemius.php:18668
569
  msgid "Change Ownership"
570
  msgstr "Change Ownership"
571
 
572
+ #: includes/class-freemius.php:18676
573
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
574
  msgstr "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
575
 
576
+ #: includes/class-freemius.php:18688
577
  msgid "Please provide your full name."
578
  msgstr "Please provide your full name."
579
 
580
+ #: includes/class-freemius.php:18693
581
  msgid "Your name was successfully updated."
582
  msgstr "Your name was successfully updated."
583
 
584
+ #: includes/class-freemius.php:18754
585
  msgid "You have successfully updated your %s."
586
  msgstr "You have successfully updated your %s."
587
 
588
+ #: includes/class-freemius.php:18894
589
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
590
  msgstr "Just letting you know that the add-ons information of %s is being pulled from an external server."
591
 
592
+ #: includes/class-freemius.php:18895
593
  msgctxt "advance notice of something that will need attention."
594
  msgid "Heads up"
595
  msgstr "Heads up"
596
 
597
+ #: includes/class-freemius.php:19325
598
  msgctxt "exclamation"
599
  msgid "Hey"
600
  msgstr "Hey"
601
 
602
+ #: includes/class-freemius.php:19325
603
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
604
  msgstr "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
605
 
606
+ #: includes/class-freemius.php:19333
607
  msgid "No commitment for %s days - cancel anytime!"
608
  msgstr "No commitment for %s days - cancel anytime!"
609
 
610
+ #: includes/class-freemius.php:19334
611
  msgid "No credit card required"
612
  msgstr "No credit card required"
613
 
614
+ #: includes/class-freemius.php:19341, templates/forms/trial-start.php:53
615
  msgctxt "call to action"
616
  msgid "Start free trial"
617
  msgstr "Start free trial"
618
 
619
+ #: includes/class-freemius.php:19418
620
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
621
  msgstr "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
622
 
623
+ #: includes/class-freemius.php:19427
624
  msgid "Learn more"
625
  msgstr "Learn more"
626
 
627
+ #: includes/class-freemius.php:19577, templates/account.php:406, templates/account.php:509, templates/connect.php:171, templates/connect.php:421, templates/forms/license-activation.php:24, templates/account/partials/addon.php:235
628
  msgid "Activate License"
629
  msgstr "Activate License"
630
 
631
+ #: includes/class-freemius.php:19578, templates/account.php:469, templates/account.php:508, templates/account/partials/site.php:256
632
  msgid "Change License"
633
  msgstr "Change License"
634
 
635
+ #: includes/class-freemius.php:19660, templates/account/partials/site.php:161
636
  msgid "Opt Out"
637
  msgstr "Opt Out"
638
 
639
+ #: includes/class-freemius.php:19662, includes/class-freemius.php:19667, templates/account/partials/site.php:43, templates/account/partials/site.php:161
640
  msgid "Opt In"
641
  msgstr "Opt In"
642
 
643
+ #: includes/class-freemius.php:19891
644
+ msgid " The paid version of %1s is already installed. Please activate it to start benefiting the %2s features. %3s"
645
+ msgstr " The paid version of %1s is already installed. Please activate it to start benefiting the %2s features. %3s"
646
+
647
+ #: includes/class-freemius.php:19899
648
+ msgid "Activate %s features"
649
+ msgstr "Activate %s features"
650
+
651
+ #: includes/class-freemius.php:19912
652
  msgid "Please follow these steps to complete the upgrade"
653
  msgstr "Please follow these steps to complete the upgrade"
654
 
655
+ #: includes/class-freemius.php:19916
656
  msgid "Download the latest %s version"
657
  msgstr "Download the latest %s version"
658
 
659
+ #: includes/class-freemius.php:19920
660
  msgid "Upload and activate the downloaded version"
661
  msgstr "Upload and activate the downloaded version"
662
 
663
+ #: includes/class-freemius.php:19922
664
  msgid "How to upload and activate?"
665
  msgstr "How to upload and activate?"
666
 
667
+ #: includes/class-freemius.php:20056
668
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
669
  msgstr "%sClick here%s to choose the sites where you'd like to activate the license on."
670
 
671
+ #: includes/class-freemius.php:20217
672
  msgid "Auto installation only works for opted-in users."
673
  msgstr "Auto installation only works for opted-in users."
674
 
675
+ #: includes/class-freemius.php:20227, includes/class-freemius.php:20260, includes/class-fs-plugin-updater.php:1056, includes/class-fs-plugin-updater.php:1070
676
  msgid "Invalid module ID."
677
  msgstr "Invalid module ID."
678
 
679
+ #: includes/class-freemius.php:20236, includes/class-fs-plugin-updater.php:1092
680
  msgid "Premium version already active."
681
  msgstr "Premium version already active."
682
 
683
+ #: includes/class-freemius.php:20243
684
  msgid "You do not have a valid license to access the premium version."
685
  msgstr "You do not have a valid license to access the premium version."
686
 
687
+ #: includes/class-freemius.php:20250
688
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
689
  msgstr "Plugin is a \"Serviceware\" which means it does not have a premium code version."
690
 
691
+ #: includes/class-freemius.php:20268, includes/class-fs-plugin-updater.php:1091
692
  msgid "Premium add-on version already installed."
693
  msgstr "Premium add-on version already installed."
694
 
695
+ #: includes/class-freemius.php:20613
696
  msgid "View paid features"
697
  msgstr "View paid features"
698
 
699
+ #: includes/class-freemius.php:20927
700
  msgid "Thank you so much for using %s and its add-ons!"
701
  msgstr "Thank you so much for using %s and its add-ons!"
702
 
703
+ #: includes/class-freemius.php:20928
704
  msgid "Thank you so much for using %s!"
705
  msgstr "Thank you so much for using %s!"
706
 
707
+ #: includes/class-freemius.php:20934
708
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
709
  msgstr "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
710
 
711
+ #: includes/class-freemius.php:20938
712
  msgid "Thank you so much for using our products!"
713
  msgstr "Thank you so much for using our products!"
714
 
715
+ #: includes/class-freemius.php:20939
716
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
717
  msgstr "You've already opted-in to our usage-tracking, which helps us keep improving them."
718
 
719
+ #: includes/class-freemius.php:20958
720
  msgid "%s and its add-ons"
721
  msgstr "%s and its add-ons"
722
 
723
+ #: includes/class-freemius.php:20967
724
  msgid "Products"
725
  msgstr "Products"
726
 
727
+ #: includes/class-freemius.php:20974, templates/connect.php:272
728
  msgid "Yes"
729
  msgstr "Yes"
730
 
731
+ #: includes/class-freemius.php:20975, templates/connect.php:273
732
  msgid "send me security & feature updates, educational content and offers."
733
  msgstr "send me security & feature updates, educational content and offers."
734
 
735
+ #: includes/class-freemius.php:20976, templates/connect.php:278
736
  msgid "No"
737
  msgstr "No"
738
 
739
+ #: includes/class-freemius.php:20978, templates/connect.php:280
740
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
741
  msgstr "do %sNOT%s send me security & feature updates, educational content and offers."
742
 
743
+ #: includes/class-freemius.php:20988
744
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard 🙂"
745
  msgstr "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard 🙂"
746
 
747
+ #: includes/class-freemius.php:20990, templates/connect.php:287
748
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
749
  msgstr "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
750
 
751
+ #: includes/class-freemius.php:21272
752
  msgid "License key is empty."
753
  msgstr "License key is empty."
754
 
755
+ #: includes/class-fs-plugin-updater.php:184, templates/forms/premium-versions-upgrade-handler.php:57
756
+ msgid "Renew license"
757
+ msgstr "Renew license"
758
+
759
+ #: includes/class-fs-plugin-updater.php:189, templates/forms/premium-versions-upgrade-handler.php:58
760
+ msgid "Buy license"
761
+ msgstr "Buy license"
762
+
763
+ #: includes/class-fs-plugin-updater.php:278
764
+ msgid "There is a %s of %s available."
765
+ msgstr "There is a %s of %s available."
766
 
767
+ #: includes/class-fs-plugin-updater.php:282
768
+ msgid "new version"
769
+ msgstr "new version"
770
+
771
+ #: includes/class-fs-plugin-updater.php:301
772
+ msgid "Important Upgrade Notice:"
773
+ msgstr "Important Upgrade Notice:"
774
+
775
+ #: includes/class-fs-plugin-updater.php:1121
776
  msgid "Installing plugin: %s"
777
  msgstr "Installing plugin: %s"
778
 
779
+ #: includes/class-fs-plugin-updater.php:1162
780
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
781
  msgstr "Unable to connect to the filesystem. Please confirm your credentials."
782
 
783
+ #: includes/class-fs-plugin-updater.php:1335
784
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
785
  msgstr "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
786
 
787
+ #: includes/fs-plugin-info-dialog.php:369, templates/account/partials/addon.php:292
788
  msgctxt "verb"
789
  msgid "Purchase"
790
  msgstr "Purchase"
791
 
792
+ #: includes/fs-plugin-info-dialog.php:372
793
  msgid "Start my free %s"
794
  msgstr "Start my free %s"
795
 
796
+ #: includes/fs-plugin-info-dialog.php:413
797
  msgid "Install Free Version Now"
798
  msgstr "Install Free Version Now"
799
 
800
+ #: includes/fs-plugin-info-dialog.php:414, templates/auto-installation.php:111, templates/account/partials/addon.php:272, templates/account/partials/addon.php:322
801
  msgid "Install Now"
802
  msgstr "Install Now"
803
 
804
+ #: includes/fs-plugin-info-dialog.php:425
805
  msgctxt "as download latest version"
806
  msgid "Download Latest Free Version"
807
  msgstr "Download Latest Free Version"
808
 
809
+ #: includes/fs-plugin-info-dialog.php:426, templates/account.php:80, templates/account/partials/addon.php:21
810
  msgctxt "as download latest version"
811
  msgid "Download Latest"
812
  msgstr "Download Latest"
813
 
814
+ #: includes/fs-plugin-info-dialog.php:436
815
  msgid "Install Free Version Update Now"
816
  msgstr "Install Free Version Update Now"
817
 
818
+ #: includes/fs-plugin-info-dialog.php:437, templates/account.php:460
819
  msgid "Install Update Now"
820
  msgstr "Install Update Now"
821
 
822
+ #: includes/fs-plugin-info-dialog.php:448
823
  msgid "Newer Free Version (%s) Installed"
824
  msgstr "Newer Free Version (%s) Installed"
825
 
826
+ #: includes/fs-plugin-info-dialog.php:449
827
  msgid "Newer Version (%s) Installed"
828
  msgstr "Newer Version (%s) Installed"
829
 
830
+ #: includes/fs-plugin-info-dialog.php:457
831
  msgid "Latest Free Version Installed"
832
  msgstr "Latest Free Version Installed"
833
 
834
+ #: includes/fs-plugin-info-dialog.php:458
835
  msgid "Latest Version Installed"
836
  msgstr "Latest Version Installed"
837
 
838
+ #: includes/fs-plugin-info-dialog.php:613
839
  msgctxt "Plugin installer section title"
840
  msgid "Description"
841
  msgstr "Description"
842
 
843
+ #: includes/fs-plugin-info-dialog.php:614
844
  msgctxt "Plugin installer section title"
845
  msgid "Installation"
846
  msgstr "Installation"
847
 
848
+ #: includes/fs-plugin-info-dialog.php:615
849
  msgctxt "Plugin installer section title"
850
  msgid "FAQ"
851
  msgstr "FAQ"
852
 
853
+ #: includes/fs-plugin-info-dialog.php:616, templates/plugin-info/description.php:55
854
  msgid "Screenshots"
855
  msgstr "Screenshots"
856
 
857
+ #: includes/fs-plugin-info-dialog.php:617
858
  msgctxt "Plugin installer section title"
859
  msgid "Changelog"
860
  msgstr "Changelog"
861
 
862
+ #: includes/fs-plugin-info-dialog.php:618
863
  msgctxt "Plugin installer section title"
864
  msgid "Reviews"
865
  msgstr "Reviews"
866
 
867
+ #: includes/fs-plugin-info-dialog.php:619
868
  msgctxt "Plugin installer section title"
869
  msgid "Other Notes"
870
  msgstr "Other Notes"
871
 
872
+ #: includes/fs-plugin-info-dialog.php:634
873
  msgctxt "Plugin installer section title"
874
  msgid "Features & Pricing"
875
  msgstr "Features & Pricing"
876
 
877
+ #: includes/fs-plugin-info-dialog.php:644
878
  msgid "Plugin Install"
879
  msgstr "Plugin Install"
880
 
881
+ #: includes/fs-plugin-info-dialog.php:716
882
  msgctxt "e.g. Professional Plan"
883
  msgid "%s Plan"
884
  msgstr "%s Plan"
885
 
886
+ #: includes/fs-plugin-info-dialog.php:742
887
  msgctxt "e.g. the best product"
888
  msgid "Best"
889
  msgstr "Best"
890
 
891
+ #: includes/fs-plugin-info-dialog.php:748, includes/fs-plugin-info-dialog.php:768
892
  msgctxt "as every month"
893
  msgid "Monthly"
894
  msgstr "Monthly"
895
 
896
+ #: includes/fs-plugin-info-dialog.php:751
897
  msgctxt "as once a year"
898
  msgid "Annual"
899
  msgstr "Annual"
900
 
901
+ #: includes/fs-plugin-info-dialog.php:754
902
  msgid "Lifetime"
903
  msgstr "Lifetime"
904
 
905
+ #: includes/fs-plugin-info-dialog.php:768, includes/fs-plugin-info-dialog.php:770, includes/fs-plugin-info-dialog.php:772
906
  msgctxt "e.g. billed monthly"
907
  msgid "Billed %s"
908
  msgstr "Billed %s"
909
 
910
+ #: includes/fs-plugin-info-dialog.php:770
911
  msgctxt "as once a year"
912
  msgid "Annually"
913
  msgstr "Annually"
914
 
915
+ #: includes/fs-plugin-info-dialog.php:772
916
  msgctxt "as once a year"
917
  msgid "Once"
918
  msgstr "Once"
919
 
920
+ #: includes/fs-plugin-info-dialog.php:778
921
  msgid "Single Site License"
922
  msgstr "Single Site License"
923
 
924
+ #: includes/fs-plugin-info-dialog.php:780
925
  msgid "Unlimited Licenses"
926
  msgstr "Unlimited Licenses"
927
 
928
+ #: includes/fs-plugin-info-dialog.php:782
929
  msgid "Up to %s Sites"
930
  msgstr "Up to %s Sites"
931
 
932
+ #: includes/fs-plugin-info-dialog.php:792, templates/plugin-info/features.php:82
933
  msgctxt "as monthly period"
934
  msgid "mo"
935
  msgstr "mo"
936
 
937
+ #: includes/fs-plugin-info-dialog.php:799, templates/plugin-info/features.php:80
938
  msgctxt "as annual period"
939
  msgid "year"
940
  msgstr "year"
941
 
942
+ #: includes/fs-plugin-info-dialog.php:853
943
  msgctxt "noun"
944
  msgid "Price"
945
  msgstr "Price"
946
 
947
+ #: includes/fs-plugin-info-dialog.php:901
948
  msgid "Save %s"
949
  msgstr "Save %s"
950
 
951
+ #: includes/fs-plugin-info-dialog.php:911
952
  msgid "No commitment for %s - cancel anytime"
953
  msgstr "No commitment for %s - cancel anytime"
954
 
955
+ #: includes/fs-plugin-info-dialog.php:914
956
  msgid "After your free %s, pay as little as %s"
957
  msgstr "After your free %s, pay as little as %s"
958
 
959
+ #: includes/fs-plugin-info-dialog.php:925
960
  msgid "Details"
961
  msgstr "Details"
962
 
963
+ #: includes/fs-plugin-info-dialog.php:929, templates/account.php:91, templates/debug.php:201, templates/debug.php:238, templates/debug.php:452, templates/account/partials/addon.php:32
964
  msgctxt "product version"
965
  msgid "Version"
966
  msgstr "Version"
967
 
968
+ #: includes/fs-plugin-info-dialog.php:936
969
  msgctxt "as the plugin author"
970
  msgid "Author"
971
  msgstr "Author"
972
 
973
+ #: includes/fs-plugin-info-dialog.php:943
974
  msgid "Last Updated"
975
  msgstr "Last Updated"
976
 
977
+ #: includes/fs-plugin-info-dialog.php:948, templates/account.php:376
978
  msgctxt "x-ago"
979
  msgid "%s ago"
980
  msgstr "%s ago"
981
 
982
+ #: includes/fs-plugin-info-dialog.php:957
983
  msgid "Requires WordPress Version"
984
  msgstr "Requires WordPress Version"
985
 
986
+ #: includes/fs-plugin-info-dialog.php:958
987
  msgid "%s or higher"
988
  msgstr "%s or higher"
989
 
990
+ #: includes/fs-plugin-info-dialog.php:965
991
  msgid "Compatible up to"
992
  msgstr "Compatible up to"
993
 
994
+ #: includes/fs-plugin-info-dialog.php:973
995
  msgid "Downloaded"
996
  msgstr "Downloaded"
997
 
998
+ #: includes/fs-plugin-info-dialog.php:977
999
  msgid "%s time"
1000
  msgstr "%s time"
1001
 
1002
+ #: includes/fs-plugin-info-dialog.php:979
1003
  msgid "%s times"
1004
  msgstr "%s times"
1005
 
1006
+ #: includes/fs-plugin-info-dialog.php:989
1007
  msgid "WordPress.org Plugin Page"
1008
  msgstr "WordPress.org Plugin Page"
1009
 
1010
+ #: includes/fs-plugin-info-dialog.php:997
1011
  msgid "Plugin Homepage"
1012
  msgstr "Plugin Homepage"
1013
 
1014
+ #: includes/fs-plugin-info-dialog.php:1005, includes/fs-plugin-info-dialog.php:1087
1015
  msgid "Donate to this plugin"
1016
  msgstr "Donate to this plugin"
1017
 
1018
+ #: includes/fs-plugin-info-dialog.php:1012
1019
  msgid "Average Rating"
1020
  msgstr "Average Rating"
1021
 
1022
+ #: includes/fs-plugin-info-dialog.php:1019
1023
  msgid "based on %s"
1024
  msgstr "based on %s"
1025
 
1026
+ #: includes/fs-plugin-info-dialog.php:1023
1027
  msgid "%s rating"
1028
  msgstr "%s rating"
1029
 
1030
+ #: includes/fs-plugin-info-dialog.php:1025
1031
  msgid "%s ratings"
1032
  msgstr "%s ratings"
1033
 
1034
+ #: includes/fs-plugin-info-dialog.php:1040
1035
  msgid "%s star"
1036
  msgstr "%s star"
1037
 
1038
+ #: includes/fs-plugin-info-dialog.php:1042
1039
  msgid "%s stars"
1040
  msgstr "%s stars"
1041
 
1042
+ #: includes/fs-plugin-info-dialog.php:1053
1043
  msgid "Click to see reviews that provided a rating of %s"
1044
  msgstr "Click to see reviews that provided a rating of %s"
1045
 
1046
+ #: includes/fs-plugin-info-dialog.php:1066
1047
  msgid "Contributors"
1048
  msgstr "Contributors"
1049
 
1050
+ #: includes/fs-plugin-info-dialog.php:1095, includes/fs-plugin-info-dialog.php:1097
1051
  msgid "Warning"
1052
  msgstr "Warning"
1053
 
1054
+ #: includes/fs-plugin-info-dialog.php:1095
1055
  msgid "This plugin has not been tested with your current version of WordPress."
1056
  msgstr "This plugin has not been tested with your current version of WordPress."
1057
 
1058
+ #: includes/fs-plugin-info-dialog.php:1097
1059
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1060
  msgstr "This plugin has not been marked as compatible with your version of WordPress."
1061
 
1062
+ #: includes/fs-plugin-info-dialog.php:1116
1063
  msgid "Paid add-on must be deployed to Freemius."
1064
  msgstr "Paid add-on must be deployed to Freemius."
1065
 
1066
+ #: includes/fs-plugin-info-dialog.php:1117
1067
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1068
  msgstr "Add-on must be deployed to WordPress.org or Freemius."
1069
 
1070
+ #: templates/account.php:81, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:22, templates/account/partials/site.php:295
1071
+ msgid "Downgrading your plan"
1072
+ msgstr "Downgrading your plan"
1073
+
1074
+ #: templates/account.php:82, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:23, templates/account/partials/site.php:296
1075
+ msgid "Cancelling the subscription"
1076
+ msgstr "Cancelling the subscription"
1077
 
1078
+ #. translators: %1s: Either 'Downgrading your plan' or 'Cancelling the subscription'
1079
+ #: templates/account.php:84, templates/forms/subscription-cancellation.php:99, templates/account/partials/addon.php:25, templates/account/partials/site.php:298
1080
+ msgid "%1s will immediately stop all future recurring payments and your %s plan license will expire in %s."
1081
+ msgstr "%1s will immediately stop all future recurring payments and your %s plan license will expire in %s."
1082
+
1083
+ #: templates/account.php:85, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:26, templates/account/partials/site.php:299
1084
+ msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1085
+ msgstr "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
1086
+
1087
+ #: templates/account.php:86, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:27
1088
  msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1089
  msgstr "Cancelling the trial will immediately block access to all premium features. Are you sure?"
1090
 
1091
+ #: templates/account.php:87, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:28, templates/account/partials/site.php:300
1092
+ msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1093
+ msgstr "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
1094
 
1095
+ #: templates/account.php:88, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:29, templates/account/partials/site.php:301
1096
  msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1097
  msgstr "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
1098
 
1099
  #. translators: %s: Plan title (e.g. "Professional")
1100
+ #: templates/account.php:90, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:31
1101
  msgid "Activate %s Plan"
1102
  msgstr "Activate %s Plan"
1103
 
1104
  #. translators: %s: Time period (e.g. Auto renews in "2 months")
1105
+ #: templates/account.php:93, templates/account/partials/addon.php:34, templates/account/partials/site.php:275
1106
  msgid "Auto renews in %s"
1107
  msgstr "Auto renews in %s"
1108
 
1109
  #. translators: %s: Time period (e.g. Expires in "2 months")
1110
+ #: templates/account.php:95, templates/account/partials/addon.php:36, templates/account/partials/site.php:277
1111
  msgid "Expires in %s"
1112
  msgstr "Expires in %s"
1113
 
1114
+ #: templates/account.php:96, templates/account/partials/addon.php:37
1115
  msgctxt "as synchronize license"
1116
  msgid "Sync License"
1117
  msgstr "Sync License"
1118
 
1119
+ #: templates/account.php:97, templates/account/partials/addon.php:38
1120
  msgid "Cancel Trial"
1121
  msgstr "Cancel Trial"
1122
 
1123
+ #: templates/account.php:98, templates/account/partials/addon.php:39
1124
  msgid "Change Plan"
1125
  msgstr "Change Plan"
1126
 
1127
+ #: templates/account.php:99, templates/account/partials/addon.php:40
1128
  msgctxt "verb"
1129
  msgid "Upgrade"
1130
  msgstr "Upgrade"
1131
 
1132
+ #: templates/account.php:101, templates/account/partials/addon.php:42, templates/account/partials/site.php:302
1133
  msgctxt "verb"
1134
  msgid "Downgrade"
1135
  msgstr "Downgrade"
1136
 
1137
+ #: templates/account.php:103, templates/add-ons.php:130, templates/plugin-info/features.php:72, templates/account/partials/addon.php:44, templates/account/partials/site.php:31
1138
  msgid "Free"
1139
  msgstr "Free"
1140
 
1141
+ #: templates/account.php:104, templates/account/partials/addon.php:45
1142
  msgid "Activate"
1143
  msgstr "Activate"
1144
 
1145
+ #: templates/account.php:105, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:106, templates/account/partials/addon.php:46
1146
  msgctxt "as product pricing plan"
1147
  msgid "Plan"
1148
  msgstr "Plan"
1149
 
1150
+ #: templates/account.php:158
1151
  msgid "Free Trial"
1152
  msgstr "Free Trial"
1153
 
1154
+ #: templates/account.php:169
1155
  msgid "Account Details"
1156
  msgstr "Account Details"
1157
 
1158
+ #: templates/account.php:179
1159
  msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1160
  msgstr "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1161
 
1162
+ #: templates/account.php:181
1163
  msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1164
  msgstr "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1165
 
1166
+ #: templates/account.php:184
1167
  msgid "Delete Account"
1168
  msgstr "Delete Account"
1169
 
1170
+ #: templates/account.php:196, templates/account/partials/addon.php:159, templates/account/partials/deactivate-license-button.php:35
1171
  msgid "Deactivate License"
1172
  msgstr "Deactivate License"
1173
 
1174
+ #: templates/account.php:219, templates/forms/subscription-cancellation.php:125
1175
  msgid "Are you sure you want to proceed?"
1176
  msgstr "Are you sure you want to proceed?"
1177
 
1178
+ #: templates/account.php:219, templates/account/partials/addon.php:182
1179
  msgid "Cancel Subscription"
1180
  msgstr "Cancel Subscription"
1181
 
1182
+ #: templates/account.php:247
1183
  msgctxt "as synchronize"
1184
  msgid "Sync"
1185
  msgstr "Sync"
1186
 
1187
+ #: templates/account.php:261, templates/debug.php:487
1188
  msgid "Name"
1189
  msgstr "Name"
1190
 
1191
+ #: templates/account.php:267, templates/debug.php:488
1192
  msgid "Email"
1193
  msgstr "Email"
1194
 
1195
+ #: templates/account.php:274, templates/debug.php:370, templates/debug.php:526
1196
  msgid "User ID"
1197
  msgstr "User ID"
1198
 
1199
+ #: templates/account.php:282
1200
  msgid "Site ID"
1201
  msgstr "Site ID"
1202
 
1203
+ #: templates/account.php:285
1204
  msgid "No ID"
1205
  msgstr "No ID"
1206
 
1207
+ #: templates/account.php:290, templates/debug.php:243, templates/debug.php:372, templates/debug.php:453, templates/debug.php:490, templates/account/partials/site.php:219
1208
  msgid "Public Key"
1209
  msgstr "Public Key"
1210
 
1211
+ #: templates/account.php:296, templates/debug.php:373, templates/debug.php:454, templates/debug.php:491, templates/account/partials/site.php:231
1212
  msgid "Secret Key"
1213
  msgstr "Secret Key"
1214
 
1215
+ #: templates/account.php:299
1216
  msgctxt "as secret encryption key missing"
1217
  msgid "No Secret"
1218
  msgstr "No Secret"
1219
 
1220
+ #: templates/account.php:318, templates/account/partials/site.php:112, templates/account/partials/site.php:114
1221
  msgid "Trial"
1222
  msgstr "Trial"
1223
 
1224
+ #: templates/account.php:337, templates/debug.php:531, templates/account/partials/site.php:248
1225
  msgid "License Key"
1226
  msgstr "License Key"
1227
 
1228
+ #: templates/account.php:367
1229
  msgid "not verified"
1230
  msgstr "not verified"
1231
 
1232
+ #: templates/account.php:376, templates/account/partials/addon.php:120
1233
+ msgid "Expired"
1234
+ msgstr "Expired"
1235
+
1236
+ #: templates/account.php:428
1237
  msgid "Premium version"
1238
  msgstr "Premium version"
1239
 
1240
+ #: templates/account.php:430
1241
  msgid "Free version"
1242
  msgstr "Free version"
1243
 
1244
+ #: templates/account.php:442
1245
  msgid "Verify Email"
1246
  msgstr "Verify Email"
1247
 
1248
+ #: templates/account.php:453
1249
  msgid "Download %s Version"
1250
  msgstr "Download %s Version"
1251
 
1252
+ #: templates/account.php:467, templates/account.php:649, templates/account/partials/site.php:237, templates/account/partials/site.php:255
1253
  msgctxt "verb"
1254
  msgid "Show"
1255
  msgstr "Show"
1256
 
1257
+ #: templates/account.php:481
1258
  msgid "What is your %s?"
1259
  msgstr "What is your %s?"
1260
 
1261
+ #: templates/account.php:489, templates/account/billing.php:27
1262
  msgctxt "verb"
1263
  msgid "Edit"
1264
  msgstr "Edit"
1265
 
1266
+ #: templates/account.php:502
1267
  msgid "Sites"
1268
  msgstr "Sites"
1269
 
1270
+ #: templates/account.php:513
1271
  msgid "Search by address"
1272
  msgstr "Search by address"
1273
 
1274
+ #: templates/account.php:522, templates/account.php:570, templates/debug.php:236, templates/debug.php:364, templates/debug.php:449, templates/debug.php:486, templates/debug.php:524, templates/debug.php:597, templates/account/payments.php:35, templates/debug/logger.php:21
1275
  msgid "ID"
1276
  msgstr "ID"
1277
 
1278
+ #: templates/account.php:523, templates/debug.php:367
1279
  msgid "Address"
1280
  msgstr "Address"
1281
 
1282
+ #: templates/account.php:524
1283
  msgid "License"
1284
  msgstr "License"
1285
 
1286
+ #: templates/account.php:525
1287
  msgid "Plan"
1288
  msgstr "Plan"
1289
 
1290
+ #: templates/account.php:573
1291
  msgctxt "as software license"
1292
  msgid "License"
1293
  msgstr "License"
1294
 
1295
+ #: templates/account.php:643
1296
  msgctxt "verb"
1297
  msgid "Hide"
1298
  msgstr "Hide"
1299
 
1300
+ #: templates/account.php:686
1301
+ msgid "Cancelling %s"
1302
+ msgstr "Cancelling %s"
1303
+
1304
+ #: templates/account.php:686, templates/account.php:703, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:117
1305
+ msgid "trial"
1306
+ msgstr "trial"
1307
+
1308
+ #: templates/account.php:701, templates/forms/deactivation/form.php:134
1309
+ msgid "Cancelling %s..."
1310
+ msgstr "Cancelling %s..."
1311
+
1312
+ #: templates/account.php:704, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:118
1313
+ msgid "subscription"
1314
+ msgstr "subscription"
1315
+
1316
+ #: templates/account.php:718
1317
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1318
  msgstr "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1319
 
1325
  msgid "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1326
  msgstr "We could'nt load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
1327
 
1328
+ #: templates/add-ons.php:139
1329
  msgid "View details"
1330
  msgstr "View details"
1331
 
1363
  msgstr "PCI compliant"
1364
 
1365
  #. translators: %s: name (e.g. Hey John,)
1366
+ #: templates/connect.php:112
1367
  msgctxt "greeting"
1368
  msgid "Hey %s,"
1369
  msgstr "Hey %s,"
1370
 
1371
+ #: templates/connect.php:154
1372
  msgid "Allow & Continue"
1373
  msgstr "Allow & Continue"
1374
 
1375
+ #: templates/connect.php:158
1376
  msgid "Re-send activation email"
1377
  msgstr "Re-send activation email"
1378
 
1379
+ #: templates/connect.php:162
1380
  msgid "Thanks %s!"
1381
  msgstr "Thanks %s!"
1382
 
1383
+ #: templates/connect.php:172, templates/forms/license-activation.php:43
1384
  msgid "Agree & Activate License"
1385
  msgstr "Agree & Activate License"
1386
 
1387
+ #: templates/connect.php:181
1388
  msgid "Thanks for purchasing %s! To get started, please enter your license key:"
1389
  msgstr "Thanks for purchasing %s! To get started, please enter your license key:"
1390
 
1391
+ #: templates/connect.php:188
1392
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1393
  msgstr "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
1394
 
1395
+ #: templates/connect.php:189
1396
  msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1397
  msgstr "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
1398
 
1399
+ #: templates/connect.php:195
1400
  msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1401
  msgstr "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1402
 
1403
+ #: templates/connect.php:196
1404
  msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1405
  msgstr "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
1406
 
1407
+ #: templates/connect.php:230
1408
  msgid "We're excited to introduce the Freemius network-level integration."
1409
  msgstr "We're excited to introduce the Freemius network-level integration."
1410
 
1411
+ #: templates/connect.php:233
1412
  msgid "During the update process we detected %d site(s) that are still pending license activation."
1413
  msgstr "During the update process we detected %d site(s) that are still pending license activation."
1414
 
1415
+ #: templates/connect.php:235
1416
  msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1417
  msgstr "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
1418
 
1419
+ #: templates/connect.php:237
1420
  msgid "%s's paid features"
1421
  msgstr "%s's paid features"
1422
 
1423
+ #: templates/connect.php:242
1424
  msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1425
  msgstr "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
1426
 
1427
+ #: templates/connect.php:244
1428
  msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
1429
  msgstr "During the update process we detected %s site(s) in the network that are still pending your attention."
1430
 
1431
+ #: templates/connect.php:253, templates/forms/license-activation.php:46
1432
  msgid "License key"
1433
  msgstr "License key"
1434
 
1435
+ #: templates/connect.php:256, templates/forms/license-activation.php:19
1436
  msgid "Can't find your license key?"
1437
  msgstr "Can't find your license key?"
1438
 
1439
+ #: templates/connect.php:315, templates/connect.php:630, templates/forms/deactivation/retry-skip.php:20
1440
  msgctxt "verb"
1441
  msgid "Skip"
1442
  msgstr "Skip"
1443
 
1444
+ #: templates/connect.php:318
1445
  msgid "Delegate to Site Admins"
1446
  msgstr "Delegate to Site Admins"
1447
 
1448
+ #: templates/connect.php:318
1449
  msgid "If you click it, this decision will be delegated to the sites administrators."
1450
  msgstr "If you click it, this decision will be delegated to the sites administrators."
1451
 
1452
+ #: templates/connect.php:346
1453
  msgid "Your Profile Overview"
1454
  msgstr "Your Profile Overview"
1455
 
1456
+ #: templates/connect.php:347
1457
  msgid "Name and email address"
1458
  msgstr "Name and email address"
1459
 
1460
+ #: templates/connect.php:352
1461
  msgid "Your Site Overview"
1462
  msgstr "Your Site Overview"
1463
 
1464
+ #: templates/connect.php:353
1465
  msgid "Site URL, WP version, PHP info, plugins & themes"
1466
  msgstr "Site URL, WP version, PHP info, plugins & themes"
1467
 
1468
+ #: templates/connect.php:358
1469
  msgid "Admin Notices"
1470
  msgstr "Admin Notices"
1471
 
1472
+ #: templates/connect.php:359, templates/connect.php:375
1473
  msgid "Updates, announcements, marketing, no spam"
1474
  msgstr "Updates, announcements, marketing, no spam"
1475
 
1476
+ #: templates/connect.php:364
1477
  msgid "Current %s Events"
1478
  msgstr "Current %s Events"
1479
 
1480
+ #: templates/connect.php:365
1481
  msgid "Activation, deactivation and uninstall"
1482
  msgstr "Activation, deactivation and uninstall"
1483
 
1484
+ #: templates/connect.php:374
1485
  msgid "Newsletter"
1486
  msgstr "Newsletter"
1487
 
1488
+ #: templates/connect.php:391, templates/forms/license-activation.php:38
1489
  msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1490
  msgstr "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1491
 
1492
+ #: templates/connect.php:396
1493
  msgid "What permissions are being granted?"
1494
  msgstr "What permissions are being granted?"
1495
 
1496
+ #: templates/connect.php:417
1497
  msgid "Don't have a license key?"
1498
  msgstr "Don't have a license key?"
1499
 
1500
+ #: templates/connect.php:418
1501
  msgid "Activate Free Version"
1502
  msgstr "Activate Free Version"
1503
 
1504
+ #: templates/connect.php:420
1505
  msgid "Have a license key?"
1506
  msgstr "Have a license key?"
1507
 
1508
+ #: templates/connect.php:428
1509
  msgid "Privacy Policy"
1510
  msgstr "Privacy Policy"
1511
 
1512
+ #: templates/connect.php:430
1513
+ msgid "License Agreement"
1514
+ msgstr "License Agreement"
1515
+
1516
+ #: templates/connect.php:430
1517
  msgid "Terms of Service"
1518
  msgstr "Terms of Service"
1519
 
1520
+ #: templates/connect.php:766
1521
  msgctxt "as in the process of sending an email"
1522
  msgid "Sending email"
1523
  msgstr "Sending email"
1524
 
1525
+ #: templates/connect.php:767
1526
  msgctxt "as activating plugin"
1527
  msgid "Activating"
1528
  msgstr "Activating"
1550
  msgid "Debugging"
1551
  msgstr "Debugging"
1552
 
1553
+ #: templates/debug.php:54, templates/debug.php:248, templates/debug.php:374, templates/debug.php:492
1554
  msgid "Actions"
1555
  msgstr "Actions"
1556
 
1574
  msgid "Sync Data From Server"
1575
  msgstr "Sync Data From Server"
1576
 
1577
+ #: templates/debug.php:95
1578
+ msgid "Migrate Options to Network"
1579
+ msgstr "Migrate Options to Network"
1580
+
1581
+ #: templates/debug.php:100
1582
  msgid "Load DB Option"
1583
  msgstr "Load DB Option"
1584
 
1585
+ #: templates/debug.php:103
1586
  msgid "Set DB Option"
1587
  msgstr "Set DB Option"
1588
 
1589
+ #: templates/debug.php:180
1590
  msgid "Key"
1591
  msgstr "Key"
1592
 
1593
+ #: templates/debug.php:181
1594
  msgid "Value"
1595
  msgstr "Value"
1596
 
1597
+ #: templates/debug.php:197
1598
  msgctxt "as software development kit versions"
1599
  msgid "SDK Versions"
1600
  msgstr "SDK Versions"
1601
 
1602
+ #: templates/debug.php:202
1603
  msgid "SDK Path"
1604
  msgstr "SDK Path"
1605
 
1606
+ #: templates/debug.php:203, templates/debug.php:242
1607
  msgid "Module Path"
1608
  msgstr "Module Path"
1609
 
1610
+ #: templates/debug.php:204
1611
  msgid "Is Active"
1612
  msgstr "Is Active"
1613
 
1614
+ #: templates/debug.php:232, templates/debug/plugins-themes-sync.php:35
1615
  msgid "Plugins"
1616
  msgstr "Plugins"
1617
 
1618
+ #: templates/debug.php:232, templates/debug/plugins-themes-sync.php:56
1619
  msgid "Themes"
1620
  msgstr "Themes"
1621
 
1622
+ #: templates/debug.php:237, templates/debug.php:369, templates/debug.php:451, templates/debug/scheduled-crons.php:80
1623
  msgid "Slug"
1624
  msgstr "Slug"
1625
 
1626
+ #: templates/debug.php:239, templates/debug.php:450
1627
  msgid "Title"
1628
  msgstr "Title"
1629
 
1630
+ #: templates/debug.php:240
1631
  msgctxt "as application program interface"
1632
  msgid "API"
1633
  msgstr "API"
1634
 
1635
+ #: templates/debug.php:241
1636
  msgid "Freemius State"
1637
  msgstr "Freemius State"
1638
 
1639
+ #: templates/debug.php:245
1640
  msgid "Network Blog"
1641
  msgstr "Network Blog"
1642
 
1643
+ #: templates/debug.php:246
1644
  msgid "Network User"
1645
  msgstr "Network User"
1646
 
1647
+ #: templates/debug.php:283
1648
  msgctxt "as connection was successful"
1649
  msgid "Connected"
1650
  msgstr "Connected"
1651
 
1652
+ #: templates/debug.php:284
1653
  msgctxt "as connection blocked"
1654
  msgid "Blocked"
1655
  msgstr "Blocked"
1656
 
1657
+ #: templates/debug.php:320
1658
+ msgid "Simulate Trial Promotion"
1659
+ msgstr "Simulate Trial Promotion"
1660
 
1661
+ #: templates/debug.php:332
1662
  msgid "Simulate Network Upgrade"
1663
  msgstr "Simulate Network Upgrade"
1664
 
1665
+ #: templates/debug.php:358
1666
  msgid "%s Installs"
1667
  msgstr "%s Installs"
1668
 
1669
+ #: templates/debug.php:360
1670
  msgctxt "like websites"
1671
  msgid "Sites"
1672
  msgstr "Sites"
1673
 
1674
+ #: templates/debug.php:366, templates/account/partials/site.php:148
1675
  msgid "Blog ID"
1676
  msgstr "Blog ID"
1677
 
1678
+ #: templates/debug.php:431, templates/debug.php:509, templates/account/partials/addon.php:339
1679
  msgctxt "verb"
1680
  msgid "Delete"
1681
  msgstr "Delete"
1682
 
1683
+ #: templates/debug.php:445
1684
  msgid "Add Ons of module %s"
1685
  msgstr "Add Ons of module %s"
1686
 
1687
+ #: templates/debug.php:482
1688
  msgid "Users"
1689
  msgstr "Users"
1690
 
1691
+ #: templates/debug.php:489
1692
  msgid "Verified"
1693
  msgstr "Verified"
1694
 
1695
+ #: templates/debug.php:520
1696
  msgid "%s Licenses"
1697
  msgstr "%s Licenses"
1698
 
1699
+ #: templates/debug.php:525
1700
  msgid "Plugin ID"
1701
  msgstr "Plugin ID"
1702
 
1703
+ #: templates/debug.php:527
1704
  msgid "Plan ID"
1705
  msgstr "Plan ID"
1706
 
1707
+ #: templates/debug.php:528
1708
  msgid "Quota"
1709
  msgstr "Quota"
1710
 
1711
+ #: templates/debug.php:529
1712
  msgid "Activated"
1713
  msgstr "Activated"
1714
 
1715
+ #: templates/debug.php:530
1716
  msgid "Blocking"
1717
  msgstr "Blocking"
1718
 
1719
+ #: templates/debug.php:532
1720
  msgctxt "as expiration date"
1721
  msgid "Expiration"
1722
  msgstr "Expiration"
1723
 
1724
+ #: templates/debug.php:555
1725
  msgid "Debug Log"
1726
  msgstr "Debug Log"
1727
 
1728
+ #: templates/debug.php:559
1729
  msgid "All Types"
1730
  msgstr "All Types"
1731
 
1732
+ #: templates/debug.php:566
1733
  msgid "All Requests"
1734
  msgstr "All Requests"
1735
 
1736
+ #: templates/debug.php:571, templates/debug.php:600, templates/debug/logger.php:25
1737
  msgid "File"
1738
  msgstr "File"
1739
 
1740
+ #: templates/debug.php:572, templates/debug.php:598, templates/debug/logger.php:23
1741
  msgid "Function"
1742
  msgstr "Function"
1743
 
1744
+ #: templates/debug.php:573
1745
  msgid "Process ID"
1746
  msgstr "Process ID"
1747
 
1748
+ #: templates/debug.php:574
1749
  msgid "Logger"
1750
  msgstr "Logger"
1751
 
1752
+ #: templates/debug.php:575, templates/debug.php:599, templates/debug/logger.php:24
1753
  msgid "Message"
1754
  msgstr "Message"
1755
 
1756
+ #: templates/debug.php:577
1757
  msgid "Filter"
1758
  msgstr "Filter"
1759
 
1760
+ #: templates/debug.php:585
1761
  msgid "Download"
1762
  msgstr "Download"
1763
 
1764
+ #: templates/debug.php:596, templates/debug/logger.php:22
1765
  msgid "Type"
1766
  msgstr "Type"
1767
 
1768
+ #: templates/debug.php:601, templates/debug/logger.php:26
1769
  msgid "Timestamp"
1770
  msgstr "Timestamp"
1771
 
2109
  msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2110
  msgstr "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
2111
 
2112
+ #: templates/forms/premium-versions-upgrade-handler.php:40
2113
  msgid "There is a new version of %s available."
2114
  msgstr "There is a new version of %s available."
2115
 
2116
+ #: templates/forms/premium-versions-upgrade-handler.php:41
2117
+ msgid " %s to access version %s security & feature updates, and support."
2118
+ msgstr " %s to access version %s security & feature updates, and support."
2119
 
2120
+ #: templates/forms/premium-versions-upgrade-handler.php:54
2121
  msgid "New Version Available"
2122
  msgstr "New Version Available"
2123
 
2124
+ #: templates/forms/premium-versions-upgrade-handler.php:75
 
 
 
 
2125
  msgctxt "close a window"
2126
  msgid "Dismiss"
2127
  msgstr "Dismiss"
2134
  msgid "Enter the email address you've used for the upgrade below and we will resend you the license key."
2135
  msgstr "Enter the email address you've used for the upgrade below and we will resend you the license key."
2136
 
2137
+ #: templates/forms/subscription-cancellation.php:37
2138
+ msgid "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
2139
+ msgstr "Deactivating or uninstalling the %s will automatically disable the license, which you'll be able to use on another site."
2140
+
2141
+ #: templates/forms/subscription-cancellation.php:47
2142
+ msgid "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
2143
+ msgstr "In case you are NOT planning on using this %s on this site (or any other site) - would you like to cancel the %s as well?"
2144
+
2145
+ #: templates/forms/subscription-cancellation.php:52
2146
+ msgid "license"
2147
+ msgstr "license"
2148
+
2149
+ #: templates/forms/subscription-cancellation.php:57
2150
+ msgid "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
2151
+ msgstr "Cancel %s - I no longer need any security & feature updates, nor support for %s because I'm not planning to use the %s on this, or any other site."
2152
+
2153
+ #: templates/forms/subscription-cancellation.php:68
2154
+ msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
2155
+ msgstr "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
2156
+
2157
+ #: templates/forms/subscription-cancellation.php:103
2158
+ msgid "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
2159
+ msgstr "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
2160
+
2161
+ #: templates/forms/subscription-cancellation.php:136
2162
+ msgid "Cancel %s?"
2163
+ msgstr "Cancel %s?"
2164
+
2165
+ #: templates/forms/subscription-cancellation.php:143
2166
+ msgid "Proceed"
2167
+ msgstr "Proceed"
2168
+
2169
+ #: templates/forms/subscription-cancellation.php:191, templates/forms/deactivation/form.php:150
2170
+ msgid "Cancel %s & Proceed"
2171
+ msgstr "Cancel %s & Proceed"
2172
+
2173
  #: templates/forms/trial-start.php:22
2174
  msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
2175
  msgstr "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
2231
  msgid "Last license"
2232
  msgstr "Last license"
2233
 
2234
+ #: templates/account/partials/addon.php:115
2235
  msgid "Cancelled"
2236
  msgstr "Cancelled"
2237
 
2238
+ #: templates/account/partials/addon.php:125
 
 
 
 
2239
  msgid "No expiration"
2240
  msgstr "No expiration"
2241
 
2242
+ #: templates/account/partials/addon.php:264, templates/account/partials/addon.php:317
2243
  msgid "Activate this add-on"
2244
  msgstr "Activate this add-on"
2245
 
2267
  msgid "Contact Support"
2268
  msgstr "Contact Support"
2269
 
2270
+ #: templates/forms/deactivation/form.php:59
2271
  msgid "Anonymous feedback"
2272
  msgstr "Anonymous feedback"
2273
 
2274
+ #: templates/forms/deactivation/form.php:66
2275
  msgid "Deactivate"
2276
  msgstr "Deactivate"
2277
 
2278
+ #: templates/forms/deactivation/form.php:68
2279
  msgid "Activate %s"
2280
  msgstr "Activate %s"
2281
 
 
 
 
 
2282
  #: templates/forms/deactivation/form.php:80
2283
+ msgid "Quick Feedback"
2284
+ msgstr "Quick Feedback"
2285
+
2286
+ #: templates/forms/deactivation/form.php:84
2287
  msgid "If you have a moment, please let us know why you are %s"
2288
  msgstr "If you have a moment, please let us know why you are %s"
2289
 
2290
+ #: templates/forms/deactivation/form.php:84
2291
  msgid "deactivating"
2292
  msgstr "deactivating"
2293
 
2294
+ #: templates/forms/deactivation/form.php:84
2295
  msgid "switching"
2296
  msgstr "switching"
2297
 
2298
+ #: templates/forms/deactivation/form.php:332
2299
  msgid "Submit & %s"
2300
  msgstr "Submit & %s"
2301
 
2302
+ #: templates/forms/deactivation/form.php:353
2303
  msgid "Kindly tell us the reason so we can improve."
2304
  msgstr "Kindly tell us the reason so we can improve."
2305
 
2306
+ #: templates/forms/deactivation/form.php:478
2307
  msgid "Yes - %s"
2308
  msgstr "Yes - %s"
2309
 
2310
+ #: templates/forms/deactivation/form.php:485
2311
  msgid "Skip & %s"
2312
  msgstr "Skip & %s"
2313
 
sdk/freemius/languages/freemius-es_ES.mo CHANGED
Binary file
sdk/freemius/languages/freemius-es_ES.po CHANGED
@@ -7,7 +7,7 @@ msgstr ""
7
  "Project-Id-Version: WordPress SDK\n"
8
  "Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
9
  "POT-Creation-Date: \n"
10
- "PO-Revision-Date: 2018-05-24 18:11+0000\n"
11
  "Last-Translator: Carlos Longarela <carlos@longarela.eu>\n"
12
  "Language: es_ES\n"
13
  "Language-Team: Spanish (Spain) (http://www.transifex.com/freemius/wordpress-sdk/language/es_ES/)\n"
@@ -21,1294 +21,1391 @@ msgstr ""
21
  "X-Poedit-SearchPathExcluded-0: *.js\n"
22
  "X-Poedit-SourceCharset: UTF-8\n"
23
 
24
- #: includes/class-freemius.php:1551
25
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
26
  msgstr "Freemius SDK no pudo encontrar el archivo principal del plugin. Por favor contacta a sdk@freemius.com con el error actual."
27
 
28
- #: includes/class-freemius.php:1553
29
  msgid "Error"
30
  msgstr "Error"
31
 
32
- #: includes/class-freemius.php:1871
33
  msgid "I found a better %s"
34
- msgstr "He encontrado un mejor %s"
35
 
36
- #: includes/class-freemius.php:1873
37
  msgid "What's the %s's name?"
38
  msgstr "¿Cuál es el nombre de %s?"
39
 
40
- #: includes/class-freemius.php:1879
41
  msgid "It's a temporary %s. I'm just debugging an issue."
42
- msgstr "Es temporal %s. Sólo estoy depurando un problema."
43
 
44
- #: includes/class-freemius.php:1881
45
  msgid "Deactivation"
46
  msgstr "Desactivación"
47
 
48
- #: includes/class-freemius.php:1882
49
  msgid "Theme Switch"
50
  msgstr "Cambiar tema"
51
 
52
- #: includes/class-freemius.php1891, templates/forms/resend-key.php:24
53
  msgid "Other"
54
  msgstr "Otra"
55
 
56
- #: includes/class-freemius.php:1899
57
  msgid "I no longer need the %s"
58
  msgstr "Ya no necesito el %s"
59
 
60
- #: includes/class-freemius.php:1906
61
  msgid "I only needed the %s for a short period"
62
  msgstr "Sólo necesitaba la %s por un corto período"
63
 
64
- #: includes/class-freemius.php:1912
65
  msgid "The %s broke my site"
66
  msgstr "%s ha roto mi sitio"
67
 
68
- #: includes/class-freemius.php:1919
69
  msgid "The %s suddenly stopped working"
70
  msgstr "%s de repente ha dejado de funcionar"
71
 
72
- #: includes/class-freemius.php:1929
73
  msgid "I can't pay for it anymore"
74
  msgstr "No puedo pagarlo durante más tiempo"
75
 
76
- #: includes/class-freemius.php:1931
77
  msgid "What price would you feel comfortable paying?"
78
  msgstr "¿Con qué precio te sentirías cómodo pagando?"
79
 
80
- #: includes/class-freemius.php:1937
81
  msgid "I don't like to share my information with you"
82
  msgstr "No me gusta compartir mi información contigo"
83
 
84
- #: includes/class-freemius.php:1958
85
  msgid "The %s didn't work"
86
- msgstr "%s no funcionaba"
87
 
88
- #: includes/class-freemius.php:1968
89
  msgid "I couldn't understand how to make it work"
90
  msgstr "No entiendo cómo hacerlo funcionar"
91
 
92
- #: includes/class-freemius.php:1976
93
  msgid "The %s is great, but I need specific feature that you don't support"
94
  msgstr "%s es genial, pero necesito una característica que no soportáis"
95
 
96
- #: includes/class-freemius.php:1978
97
  msgid "What feature?"
98
  msgstr "¿Qué característica?"
99
 
100
- #: includes/class-freemius.php:1982
101
  msgid "The %s is not working"
102
- msgstr "%s no funciona"
103
 
104
- #: includes/class-freemius.php:1984
105
  msgid "Kindly share what didn't work so we can fix it for future users..."
106
  msgstr "Por favor, comparte lo que no funcionó para que podamos arreglarlo para los futuros usuarios..."
107
 
108
- #: includes/class-freemius.php:1988
109
  msgid "It's not what I was looking for"
110
  msgstr "No es lo que estaba buscando"
111
 
112
- #: includes/class-freemius.php:1990
113
  msgid "What you've been looking for?"
114
  msgstr "¿Que has estado buscando?"
115
 
116
- #: includes/class-freemius.php:1994
117
  msgid "The %s didn't work as expected"
118
- msgstr "%s no funciona como esperaba"
119
 
120
- #: includes/class-freemius.php:1996
121
  msgid "What did you expect?"
122
  msgstr "¿Qué esperas?"
123
 
124
- #: includes/class-freemius.php2729, templates/debug.php:20
125
  msgid "Freemius Debug"
126
  msgstr "Debug Freemius"
127
 
128
- #: includes/class-freemius.php:3402
129
  msgid "I don't know what is cURL or how to install it, help me!"
130
  msgstr "No sé qué es cURL o cómo instalarlo, ¡ayúdame!"
131
 
132
- #: includes/class-freemius.php:3404
133
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
134
  msgstr "Nos aseguraremos de ponernos en contacto con tu empresa de alojamiento web y resolver el problema. Recibirás un correo electrónico de seguimiento a %s tan pronto tengamos una actualización."
135
 
136
- #: includes/class-freemius.php:3411
137
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
138
  msgstr "Genial, por favor instala cURL y habilítalo en el archivo php.ini. Además, busca la directiva 'disable_functions' en el archivo php.ini y quita cualquier método que comienza con 'curl_'. Para asegurarte de que se activó con éxito, utiliza 'phpinfo()'. Una vez activado, desactiva el %s y reactívalo de nuevo."
139
 
140
- #: includes/class-freemius.php:3516
141
  msgid "Yes - do your thing"
142
  msgstr "Vamos, adelante"
143
 
144
- #: includes/class-freemius.php:3521
145
  msgid "No - just deactivate"
146
  msgstr "No - sólo desactivar"
147
 
148
- #: includes/class-freemius.php3566, includes/class-freemius.php4066,
149
- #: includes/class-freemius.php5127, includes/class-freemius.php10941,
150
- #: includes/class-freemius.php14205, includes/class-freemius.php14257,
151
- #: includes/class-freemius.php14319, includes/class-freemius.php16448,
152
- #: includes/class-freemius.php16458, includes/class-freemius.php17014,
153
- #: includes/class-freemius.php17032, includes/class-freemius.php17130,
154
- #: includes/class-freemius.php17866, templates/add-ons.php:43
155
  msgctxt "exclamation"
156
  msgid "Oops"
157
  msgstr "Oops"
158
 
159
- #: includes/class-freemius.php:3635
160
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
161
  msgstr "¡Gracias por darnos la oportunidad de arreglarlo! Acabamos de enviar un mensaje a nuestro personal técnico. Nos pondremos en contacto contigo tan pronto como tengamos una actualización de %s. Apreciamos tu paciencia."
162
 
163
- #: includes/class-freemius.php:4063
164
  msgctxt "addonX cannot run without pluginY"
165
  msgid "%s cannot run without %s."
166
  msgstr "%s no se puede ejecutar sin %s."
167
 
168
- #: includes/class-freemius.php:4064
169
  msgctxt "addonX cannot run..."
170
  msgid "%s cannot run without the plugin."
171
  msgstr "%s no se puede ejecutar sin el plugin."
172
 
173
- #: includes/class-freemius.php4176, includes/class-freemius.php4201,
174
- #: includes/class-freemius.php:17103
175
  msgid "Unexpected API error. Please contact the %s's author with the following error."
176
  msgstr "Error inesperado del API. Pónte en contacto con el autor de %s indicándole el siguiente error."
177
 
178
- #: includes/class-freemius.php:4815
179
  msgid "Premium %s version was successfully activated."
180
  msgstr "La versión Premium %s ha sido activada con éxito."
181
 
182
- #: includes/class-freemius.php4827, includes/class-freemius.php:6660
183
  msgctxt ""
184
  msgid "W00t"
185
  msgstr "W00t"
186
 
187
- #: includes/class-freemius.php:4842
188
  msgid "You have a %s license."
189
  msgstr "Tienes una licencia %s."
190
 
191
- #: includes/class-freemius.php4846, includes/class-freemius.php13626,
192
- #: includes/class-freemius.php13637, includes/class-freemius.php16376,
193
- #: includes/class-freemius.php16676, includes/class-freemius.php16741,
194
- #: includes/class-freemius.php:16891
195
  msgctxt "interjection expressing joy or exuberance"
196
  msgid "Yee-haw"
197
  msgstr "Vaya"
198
 
199
- #: includes/class-freemius.php:5110
200
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
201
  msgstr "la prueba gratuita de %s fue cancelada con éxito. Puesto que el complemento es sólo premium se desactivó automáticamente. Si quieres utilizarlo en el futuro, deberás comprar una licencia."
202
 
203
- #: includes/class-freemius.php:5114
204
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
205
  msgstr "%s es un complemento único de premium. Tienes que comprar una licencia primero antes de activar el plugin."
206
 
207
- #: includes/class-freemius.php5123, templates/add-ons.php99,
208
- #: templates/account/partials/addon.php:283
209
  msgid "More information about %s"
210
  msgstr "Más información sobre %s"
211
 
212
- #: includes/class-freemius.php:5124
213
  msgid "Purchase License"
214
  msgstr "Comprar licencia"
215
 
216
- #: includes/class-freemius.php6035, templates/connect.php:161
217
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
218
  msgstr "Recibirás un correo de activación para %s en tu buzón en %s. Por favor, asegúrate de hacer clic en el botón de activación en ese correo electrónico para %s."
219
 
220
- #: includes/class-freemius.php:6039
221
  msgid "start the trial"
222
  msgstr "comenzar el período de prueba"
223
 
224
- #: includes/class-freemius.php6040, templates/connect.php:165
225
  msgid "complete the install"
226
  msgstr "completar la instalación"
227
 
228
- #: includes/class-freemius.php:6147
229
  msgid "You are just one step away - %s"
230
  msgstr "Estás a sólo un paso - %s"
231
 
232
- #: includes/class-freemius.php:6150
233
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
234
  msgid "Complete \"%s\" Activation Now"
235
  msgstr "Completar la activación de \"%s\" ahora"
236
 
237
- #: includes/class-freemius.php:6227
238
  msgid "We made a few tweaks to the %s, %s"
239
  msgstr "Hemos realizado algunas optimizaciones al %s, %s"
240
 
241
- #: includes/class-freemius.php:6231
242
- msgid "Opt in to make \"%s\" Better!"
243
- msgstr "¡Inscribirte para hacer \"%s\" Mejor!"
244
 
245
- #: includes/class-freemius.php:6659
246
  msgid "The upgrade of %s was successfully completed."
247
  msgstr "La actualización de %s se completó con éxito."
248
 
249
- #: includes/class-freemius.php8384, includes/class-fs-plugin-updater.php581,
250
- #: includes/class-fs-plugin-updater.php733,
251
- #: includes/class-fs-plugin-updater.php739, templates/auto-installation.php:32
 
252
  msgid "Add-On"
253
  msgstr "Complemento"
254
 
255
- #: includes/class-freemius.php8386, templates/debug.php349,
256
- #: templates/debug.php:510
257
  msgid "Plugin"
258
  msgstr "Plugin"
259
 
260
- #: includes/class-freemius.php8387, templates/debug.php349,
261
- #: templates/debug.php510, templates/forms/deactivation/form.php:64
262
  msgid "Theme"
263
  msgstr "Tema"
264
 
265
- #: includes/class-freemius.php:10808
266
- msgid "invalid_site_details_collection"
267
- msgstr "invalid_site_details_collection"
268
 
269
- #: includes/class-freemius.php:10928
270
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
271
  msgstr "No podemos encontrar tu dirección de correo electrónico en el sistema, ¿estás seguro de que es la dirección de correo electrónico correcta?"
272
 
273
- #: includes/class-freemius.php:10930
274
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
275
  msgstr "No vemos ninguna licencia activa asociada a esa dirección de correo electrónico, ¿estás seguro de que es la dirección de correo electrónico correcta?"
276
 
277
- #: includes/class-freemius.php:11166
278
  msgid "Account is pending activation."
279
  msgstr "La cuenta está pendiente de activación"
280
 
281
- #: includes/class-freemius.php:13608
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  msgid "%s activation was successfully completed."
283
  msgstr "%s activación se completó con éxito."
284
 
285
- #: includes/class-freemius.php:13622
286
  msgid "Your account was successfully activated with the %s plan."
287
  msgstr "Tu cuenta se ha activado correctamente con el plan %s."
288
 
289
- #: includes/class-freemius.php13633, includes/class-freemius.php:16737
290
  msgid "Your trial has been successfully started."
291
  msgstr "Tu versión de prueba se ha iniciado con éxito."
292
 
293
- #: includes/class-freemius.php14203, includes/class-freemius.php14255,
294
- #: includes/class-freemius.php:14317
295
  msgid "Couldn't activate %s."
296
  msgstr "No se puede activar %s."
297
 
298
- #: includes/class-freemius.php14204, includes/class-freemius.php14256,
299
- #: includes/class-freemius.php:14318
300
  msgid "Please contact us with the following message:"
301
  msgstr "Por favor contáctanos con el siguiente mensaje:"
302
 
303
- #: includes/class-freemius.php14666, includes/class-freemius.php:18929
304
  msgid "Upgrade"
305
  msgstr "Actualizar"
306
 
307
- #: includes/class-freemius.php:14672
308
  msgid "Start Trial"
309
  msgstr "Comenzar el período de prueba"
310
 
311
- #: includes/class-freemius.php:14674
312
  msgid "Pricing"
313
  msgstr "Precio"
314
 
315
- #: includes/class-freemius.php14734, includes/class-freemius.php:14736
316
  msgid "Affiliation"
317
  msgstr "Afiliación"
318
 
319
- #: includes/class-freemius.php14756, includes/class-freemius.php14758,
320
- #: templates/account.php146, templates/debug.php:314
321
  msgid "Account"
322
  msgstr "Cuenta"
323
 
324
- #: includes/class-freemius.php14769, includes/class-freemius.php14771,
325
  #: includes/customizer/class-fs-customizer-support-section.php:60
326
  msgid "Contact Us"
327
  msgstr "Contáctanos"
328
 
329
- #: includes/class-freemius.php14781, includes/class-freemius.php14783,
330
- #: includes/class-freemius.php18939, templates/account.php96,
331
- #: templates/account/partials/addon.php:37
332
  msgid "Add-Ons"
333
  msgstr "Complementos"
334
 
335
- #: includes/class-freemius.php14815, templates/pricing.php:97
 
 
 
 
 
 
 
 
 
 
336
  msgctxt "noun"
337
  msgid "Pricing"
338
  msgstr "Precio"
339
 
340
- #: includes/class-freemius.php15009,
341
  #: includes/customizer/class-fs-customizer-support-section.php:67
342
  msgid "Support Forum"
343
  msgstr "Foro de soporte"
344
 
345
- #: includes/class-freemius.php:15794
346
  msgid "Your email has been successfully verified - you are AWESOME!"
347
  msgstr "Tu email ha sido verificado correctamente - ¡Eres IMPRESIONANTE!"
348
 
349
- #: includes/class-freemius.php:15795
350
  msgctxt "a positive response"
351
  msgid "Right on"
352
  msgstr "Bien hecho"
353
 
354
- #: includes/class-freemius.php:16367
355
  msgid "Your %s Add-on plan was successfully upgraded."
356
  msgstr "Tu complemento %s del plan se actualizó con éxito."
357
 
358
- #: includes/class-freemius.php:16369
359
  msgid "%s Add-on was successfully purchased."
360
  msgstr "El complemento %s ha sido comprado correctamente."
361
 
362
- #: includes/class-freemius.php:16372
363
  msgid "Download the latest version"
364
  msgstr "Descargar la última versión"
365
 
366
- #: includes/class-freemius.php:16444
367
  msgctxt "%1s - plugin title, %2s - API domain"
368
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
369
  msgstr "Tu servidor está bloqueando el acceso a la API de Freemius, que es crucial para la sincronización de licencia %1s. Por favor, ponte en contacto con tu host para que lo añadan a su lista blanca %2s"
370
 
371
- #: includes/class-freemius.php16447, includes/class-freemius.php16862,
372
- #: includes/class-freemius.php:16927
373
  msgid "Error received from the server:"
374
  msgstr "Error recibido del servidor:"
375
 
376
- #: includes/class-freemius.php:16457
377
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
378
  msgstr "Parece que uno de los parámetros de autenticación es incorrecto. Actualiza tu clave pública, clave secreta e ID de usuario e inténtelo de nuevo."
379
 
380
- #: includes/class-freemius.php16639, includes/class-freemius.php16867,
381
- #: includes/class-freemius.php:16910
382
  msgctxt ""
383
  msgid "Hmm"
384
  msgstr "Hmm"
385
 
386
- #: includes/class-freemius.php:16652
387
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
388
  msgstr "Parece que todavía estás en el plan %s. Si actualizaste o cambiaste tu plan, probablemente sea un problema de nuestra parte - lo sentimos."
389
 
390
- #: includes/class-freemius.php16653, templates/account.php98,
391
- #: templates/add-ons.php130, templates/account/partials/addon.php:39
392
  msgctxt "trial period"
393
  msgid "Trial"
394
  msgstr "Período de Prueba Gratuito"
395
 
396
- #: includes/class-freemius.php:16658
397
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
398
  msgstr "He actualizado mi cuenta, pero cuando intento sincronizar la licencia, el plan sigue siendo %s."
399
 
400
- #: includes/class-freemius.php16662, includes/class-freemius.php:16719
401
  msgid "Please contact us here"
402
  msgstr "Contacta aquí con nosotros"
403
 
404
- #: includes/class-freemius.php:16672
405
  msgid "Your plan was successfully upgraded."
406
  msgstr "Tu plan se actualizó con éxito."
407
 
408
- #: includes/class-freemius.php:16689
409
  msgid "Your plan was successfully changed to %s."
410
  msgstr "Tu plan se cambió correctamente a %s."
411
 
412
- #: includes/class-freemius.php:16705
413
  msgid "Your license has expired. You can still continue using the free %s forever."
414
  msgstr "Tu licencia ha caducado. Puedes seguir usando el plan gratuito %s para siempre."
415
 
416
- #: includes/class-freemius.php:16707
417
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
418
  msgstr "Tu licencia ha caducado. %1$sActualiza ahora %2$s para continuar usando el %3$s sin interrupciones."
419
 
420
- #: includes/class-freemius.php:16715
421
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
422
  msgstr "Tu licencia ha sido cancelada. Si crees que es un error, ponte en contacto con el servicio de asistencia."
423
 
424
- #: includes/class-freemius.php:16728
425
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
426
  msgstr "Tu licencia ha caducado. Todavía puedes seguir usando todas las funciones de %s, pero tendrás que renovar tu licencia para seguir recibiendo actualizaciones y soporte."
427
 
428
- #: includes/class-freemius.php:16751
429
  msgid "Your free trial has expired. You can still continue using all our free features."
430
  msgstr "Tu período de prueba ha caducado. Todavía puedes seguir usando todas nuestras funciones gratuitas."
431
 
432
- #: includes/class-freemius.php:16753
433
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
434
  msgstr "Tu período de prueba ha caducado. %1$sActualiza ahora %2$s para continuar usando el %3$s sin interrupciones."
435
 
436
- #: includes/class-freemius.php:16858
437
  msgid "It looks like the license could not be activated."
438
  msgstr "Parece que la licencia no se pudo activar."
439
 
440
- #: includes/class-freemius.php:16888
441
  msgid "Your license was successfully activated."
442
  msgstr "Tu licencia fue activada correctamente."
443
 
444
- #: includes/class-freemius.php:16914
445
  msgid "It looks like your site currently doesn't have an active license."
446
  msgstr "Parece que tu sitio actualmente no tiene una licencia activa."
447
 
448
- #: includes/class-freemius.php:16926
449
  msgid "It looks like the license deactivation failed."
450
  msgstr "Parece que la desactivación de licencia ha fallado."
451
 
452
- #: includes/class-freemius.php:16954
453
  msgid "Your license was successfully deactivated, you are back to the %s plan."
454
  msgstr "Tu licencia fue desactivada correctamente, has vuelto al plan %s."
455
 
456
- #: includes/class-freemius.php:16955
457
  msgid "O.K"
458
  msgstr "O.K"
459
 
460
- #: includes/class-freemius.php:17003
461
- msgid "Your plan was successfully downgraded. Your %s plan license will expire in %s."
462
- msgstr "Tu plan fue degradado con éxito. Tu licencia %s plan caducará en %s."
463
 
464
- #: includes/class-freemius.php:17013
465
- msgid "Seems like we are having some temporary issue with your plan downgrade. Please try again in few minutes."
466
- msgstr "Parece que estamos teniendo algún problema temporal con tu degradación de plan. Vuelve a intentarlo en unos minutos."
467
 
468
- #: includes/class-freemius.php:17037
469
  msgid "You are already running the %s in a trial mode."
470
  msgstr "Estás ejecutando %s en modo de prueba."
471
 
472
- #: includes/class-freemius.php:17048
473
  msgid "You already utilized a trial before."
474
  msgstr "Ya utilizaste un período de prueba antes."
475
 
476
- #: includes/class-freemius.php:17062
477
  msgid "Plan %s do not exist, therefore, can't start a trial."
478
  msgstr "El plan %s no existe, por lo tanto, no puedes comenzar un período de prueba."
479
 
480
- #: includes/class-freemius.php:17073
481
  msgid "Plan %s does not support a trial period."
482
  msgstr "El plan %s no admite un período de prueba."
483
 
484
- #: includes/class-freemius.php:17084
485
  msgid "None of the %s's plans supports a trial period."
486
  msgstr "Ninguno de los planes de %s soportan un período de prueba."
487
 
488
- #: includes/class-freemius.php:17134
489
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
490
  msgstr "Parece que ya no estás en modo de prueba, así que no hay nada que cancelar :)"
491
 
492
- #: includes/class-freemius.php:17185
493
- msgid "Your %s free trial was successfully cancelled."
494
- msgstr "Tu prueba gratuita de %s fue cancelada con éxito."
495
-
496
- #: includes/class-freemius.php:17190
497
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
498
  msgstr "Parece que estamos teniendo algún problema temporal con tu cancelación de prueba. Vuelve a intentarlo en unos minutos."
499
 
500
- #: includes/class-freemius.php:17474
 
 
 
 
501
  msgid "Version %s was released."
502
  msgstr "La versión %s se ha lanzado."
503
 
504
- #: includes/class-freemius.php:17474
505
  msgid "Please download %s."
506
  msgstr "Por favor descarga %s."
507
 
508
- #: includes/class-freemius.php:17481
509
  msgid "the latest %s version here"
510
  msgstr "la última versión %s aquí"
511
 
512
- #: includes/class-freemius.php:17486
513
  msgid "New"
514
  msgstr "Nuevo"
515
 
516
- #: includes/class-freemius.php:17491
517
  msgid "Seems like you got the latest release."
518
  msgstr "Parece que tienes la última versión."
519
 
520
- #: includes/class-freemius.php:17492
521
  msgid "You are all good!"
522
  msgstr "¡Está todo listo!"
523
 
524
- #: includes/class-freemius.php:17758
525
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
526
  msgstr "El correo de verificación se acaba de enviar a %s. Si no puedes encontrarlo después de 5 min, comprueba tu carpeta de spam."
527
 
528
- #: includes/class-freemius.php:17893
529
  msgid "Site successfully opted in."
530
  msgstr "Sitio dado de alta correctamente."
531
 
532
- #: includes/class-freemius.php17894, includes/class-freemius.php:18671
533
  msgid "Awesome"
534
  msgstr "Increíble"
535
 
536
- #: includes/class-freemius.php17910, templates/forms/optout.php:32
537
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
538
  msgstr "Agradecemos tu ayuda para mejorar %s y por permitirnos rastrear algunos datos de uso."
539
 
540
- #: includes/class-freemius.php:17911
541
  msgid "Thank you!"
542
  msgstr "¡Gracias!"
543
 
544
- #: includes/class-freemius.php:17918
545
  msgid "We will no longer be sending any usage data of %s on %s to %s."
546
  msgstr "No continuaremos enviando datos de uso de %s en %s a %s."
547
 
548
- #: includes/class-freemius.php:18033
549
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
550
  msgstr "Comprueba tu buzón de correo, debes recibir un correo electrónico a través de %s para confirmar el cambio de propiedad. Por razones de seguridad, debes confirmar el cambio dentro de los próximos 15 min. Si no puedes encontrar el correo electrónico, comprueba tu carpeta de correo no deseado."
551
 
552
- #: includes/class-freemius.php:18039
553
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
554
  msgstr "Gracias por confirmar el cambio de propiedad. Se envió un correo
7
  "Project-Id-Version: WordPress SDK\n"
8
  "Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
9
  "POT-Creation-Date: \n"
10
+ "PO-Revision-Date: 2018-11-25 12:57+0000\n"
11
  "Last-Translator: Carlos Longarela <carlos@longarela.eu>\n"
12
  "Language: es_ES\n"
13
  "Language-Team: Spanish (Spain) (http://www.transifex.com/freemius/wordpress-sdk/language/es_ES/)\n"
21
  "X-Poedit-SearchPathExcluded-0: *.js\n"
22
  "X-Poedit-SourceCharset: UTF-8\n"
23
 
24
+ #: includes/class-freemius.php:1602
25
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
26
  msgstr "Freemius SDK no pudo encontrar el archivo principal del plugin. Por favor contacta a sdk@freemius.com con el error actual."
27
 
28
+ #: includes/class-freemius.php:1604
29
  msgid "Error"
30
  msgstr "Error"
31
 
32
+ #: includes/class-freemius.php:1925
33
  msgid "I found a better %s"
34
+ msgstr "He encontrado un %s mejor"
35
 
36
+ #: includes/class-freemius.php:1927
37
  msgid "What's the %s's name?"
38
  msgstr "¿Cuál es el nombre de %s?"
39
 
40
+ #: includes/class-freemius.php:1933
41
  msgid "It's a temporary %s. I'm just debugging an issue."
42
+ msgstr "Es una %stemporal . Sólo estoy depurando un problema"
43
 
44
+ #: includes/class-freemius.php:1935
45
  msgid "Deactivation"
46
  msgstr "Desactivación"
47
 
48
+ #: includes/class-freemius.php:1936
49
  msgid "Theme Switch"
50
  msgstr "Cambiar tema"
51
 
52
+ #: includes/class-freemius.php1945, templates/forms/resend-key.php:24
53
  msgid "Other"
54
  msgstr "Otra"
55
 
56
+ #: includes/class-freemius.php:1953
57
  msgid "I no longer need the %s"
58
  msgstr "Ya no necesito el %s"
59
 
60
+ #: includes/class-freemius.php:1960
61
  msgid "I only needed the %s for a short period"
62
  msgstr "Sólo necesitaba la %s por un corto período"
63
 
64
+ #: includes/class-freemius.php:1966
65
  msgid "The %s broke my site"
66
  msgstr "%s ha roto mi sitio"
67
 
68
+ #: includes/class-freemius.php:1973
69
  msgid "The %s suddenly stopped working"
70
  msgstr "%s de repente ha dejado de funcionar"
71
 
72
+ #: includes/class-freemius.php:1983
73
  msgid "I can't pay for it anymore"
74
  msgstr "No puedo pagarlo durante más tiempo"
75
 
76
+ #: includes/class-freemius.php:1985
77
  msgid "What price would you feel comfortable paying?"
78
  msgstr "¿Con qué precio te sentirías cómodo pagando?"
79
 
80
+ #: includes/class-freemius.php:1991
81
  msgid "I don't like to share my information with you"
82
  msgstr "No me gusta compartir mi información contigo"
83
 
84
+ #: includes/class-freemius.php:2012
85
  msgid "The %s didn't work"
86
+ msgstr "El %s no funcionaba"
87
 
88
+ #: includes/class-freemius.php:2022
89
  msgid "I couldn't understand how to make it work"
90
  msgstr "No entiendo cómo hacerlo funcionar"
91
 
92
+ #: includes/class-freemius.php:2030
93
  msgid "The %s is great, but I need specific feature that you don't support"
94
  msgstr "%s es genial, pero necesito una característica que no soportáis"
95
 
96
+ #: includes/class-freemius.php:2032
97
  msgid "What feature?"
98
  msgstr "¿Qué característica?"
99
 
100
+ #: includes/class-freemius.php:2036
101
  msgid "The %s is not working"
102
+ msgstr " El %s no funciona"
103
 
104
+ #: includes/class-freemius.php:2038
105
  msgid "Kindly share what didn't work so we can fix it for future users..."
106
  msgstr "Por favor, comparte lo que no funcionó para que podamos arreglarlo para los futuros usuarios..."
107
 
108
+ #: includes/class-freemius.php:2042
109
  msgid "It's not what I was looking for"
110
  msgstr "No es lo que estaba buscando"
111
 
112
+ #: includes/class-freemius.php:2044
113
  msgid "What you've been looking for?"
114
  msgstr "¿Que has estado buscando?"
115
 
116
+ #: includes/class-freemius.php:2048
117
  msgid "The %s didn't work as expected"
118
+ msgstr " El %s no funciona como esperaba"
119
 
120
+ #: includes/class-freemius.php:2050
121
  msgid "What did you expect?"
122
  msgstr "¿Qué esperas?"
123
 
124
+ #: includes/class-freemius.php2853, templates/debug.php:20
125
  msgid "Freemius Debug"
126
  msgstr "Debug Freemius"
127
 
128
+ #: includes/class-freemius.php:3581
129
  msgid "I don't know what is cURL or how to install it, help me!"
130
  msgstr "No sé qué es cURL o cómo instalarlo, ¡ayúdame!"
131
 
132
+ #: includes/class-freemius.php:3583
133
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
134
  msgstr "Nos aseguraremos de ponernos en contacto con tu empresa de alojamiento web y resolver el problema. Recibirás un correo electrónico de seguimiento a %s tan pronto tengamos una actualización."
135
 
136
+ #: includes/class-freemius.php:3590
137
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
138
  msgstr "Genial, por favor instala cURL y habilítalo en el archivo php.ini. Además, busca la directiva 'disable_functions' en el archivo php.ini y quita cualquier método que comienza con 'curl_'. Para asegurarte de que se activó con éxito, utiliza 'phpinfo()'. Una vez activado, desactiva el %s y reactívalo de nuevo."
139
 
140
+ #: includes/class-freemius.php:3695
141
  msgid "Yes - do your thing"
142
  msgstr "Vamos, adelante"
143
 
144
+ #: includes/class-freemius.php:3700
145
  msgid "No - just deactivate"
146
  msgstr "No - sólo desactivar"
147
 
148
+ #: includes/class-freemius.php3745, includes/class-freemius.php4253,
149
+ #: includes/class-freemius.php5318, includes/class-freemius.php11316,
150
+ #: includes/class-freemius.php14649, includes/class-freemius.php14701,
151
+ #: includes/class-freemius.php14763, includes/class-freemius.php16969,
152
+ #: includes/class-freemius.php16979, includes/class-freemius.php17588,
153
+ #: includes/class-freemius.php18446, includes/class-freemius.php18561,
154
+ #: includes/class-freemius.php18705, templates/add-ons.php:43
155
  msgctxt "exclamation"
156
  msgid "Oops"
157
  msgstr "Oops"
158
 
159
+ #: includes/class-freemius.php:3814
160
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
161
  msgstr "¡Gracias por darnos la oportunidad de arreglarlo! Acabamos de enviar un mensaje a nuestro personal técnico. Nos pondremos en contacto contigo tan pronto como tengamos una actualización de %s. Apreciamos tu paciencia."
162
 
163
+ #: includes/class-freemius.php:4250
164
  msgctxt "addonX cannot run without pluginY"
165
  msgid "%s cannot run without %s."
166
  msgstr "%s no se puede ejecutar sin %s."
167
 
168
+ #: includes/class-freemius.php:4251
169
  msgctxt "addonX cannot run..."
170
  msgid "%s cannot run without the plugin."
171
  msgstr "%s no se puede ejecutar sin el plugin."
172
 
173
+ #: includes/class-freemius.php4363, includes/class-freemius.php4388,
174
+ #: includes/class-freemius.php:17659
175
  msgid "Unexpected API error. Please contact the %s's author with the following error."
176
  msgstr "Error inesperado del API. Pónte en contacto con el autor de %s indicándole el siguiente error."
177
 
178
+ #: includes/class-freemius.php:5006
179
  msgid "Premium %s version was successfully activated."
180
  msgstr "La versión Premium %s ha sido activada con éxito."
181
 
182
+ #: includes/class-freemius.php5018, includes/class-freemius.php:6862
183
  msgctxt ""
184
  msgid "W00t"
185
  msgstr "W00t"
186
 
187
+ #: includes/class-freemius.php:5033
188
  msgid "You have a %s license."
189
  msgstr "Tienes una licencia %s."
190
 
191
+ #: includes/class-freemius.php5037, includes/class-freemius.php14070,
192
+ #: includes/class-freemius.php14081, includes/class-freemius.php16897,
193
+ #: includes/class-freemius.php17197, includes/class-freemius.php17263,
194
+ #: includes/class-freemius.php:17413
195
  msgctxt "interjection expressing joy or exuberance"
196
  msgid "Yee-haw"
197
  msgstr "Vaya"
198
 
199
+ #: includes/class-freemius.php:5301
200
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
201
  msgstr "la prueba gratuita de %s fue cancelada con éxito. Puesto que el complemento es sólo premium se desactivó automáticamente. Si quieres utilizarlo en el futuro, deberás comprar una licencia."
202
 
203
+ #: includes/class-freemius.php:5305
204
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
205
  msgstr "%s es un complemento único de premium. Tienes que comprar una licencia primero antes de activar el plugin."
206
 
207
+ #: includes/class-freemius.php5314, templates/add-ons.php103,
208
+ #: templates/account/partials/addon.php:288
209
  msgid "More information about %s"
210
  msgstr "Más información sobre %s"
211
 
212
+ #: includes/class-freemius.php:5315
213
  msgid "Purchase License"
214
  msgstr "Comprar licencia"
215
 
216
+ #: includes/class-freemius.php6230, templates/connect.php:163
217
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
218
  msgstr "Recibirás un correo de activación para %s en tu buzón en %s. Por favor, asegúrate de hacer clic en el botón de activación en ese correo electrónico para %s."
219
 
220
+ #: includes/class-freemius.php:6234
221
  msgid "start the trial"
222
  msgstr "comenzar el período de prueba"
223
 
224
+ #: includes/class-freemius.php6235, templates/connect.php:167
225
  msgid "complete the install"
226
  msgstr "completar la instalación"
227
 
228
+ #: includes/class-freemius.php:6348
229
  msgid "You are just one step away - %s"
230
  msgstr "Estás a sólo un paso - %s"
231
 
232
+ #: includes/class-freemius.php:6351
233
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
234
  msgid "Complete \"%s\" Activation Now"
235
  msgstr "Completar la activación de \"%s\" ahora"
236
 
237
+ #: includes/class-freemius.php:6429
238
  msgid "We made a few tweaks to the %s, %s"
239
  msgstr "Hemos realizado algunas optimizaciones al %s, %s"
240
 
241
+ #: includes/class-freemius.php:6433
242
+ msgid "Opt in to make \"%s\" better!"
243
+ msgstr "¡Inscríbite para hacer \"%s\" Mejor!"
244
 
245
+ #: includes/class-freemius.php:6861
246
  msgid "The upgrade of %s was successfully completed."
247
  msgstr "La actualización de %s se completó con éxito."
248
 
249
+ #: includes/class-freemius.php8705, includes/class-fs-plugin-updater.php882,
250
+ #: includes/class-fs-plugin-updater.php1077,
251
+ #: includes/class-fs-plugin-updater.php1084,
252
+ #: templates/auto-installation.php:32
253
  msgid "Add-On"
254
  msgstr "Complemento"
255
 
256
+ #: includes/class-freemius.php8707, templates/debug.php359,
257
+ #: templates/debug.php:520
258
  msgid "Plugin"
259
  msgstr "Plugin"
260
 
261
+ #: includes/class-freemius.php8708, templates/debug.php359,
262
+ #: templates/debug.php520, templates/forms/deactivation/form.php:67
263
  msgid "Theme"
264
  msgstr "Tema"
265
 
266
+ #: includes/class-freemius.php:11183
267
+ msgid "Invalid site details collection."
268
+ msgstr "Colección de detalles del sitio no válida."
269
 
270
+ #: includes/class-freemius.php:11303
271
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
272
  msgstr "No podemos encontrar tu dirección de correo electrónico en el sistema, ¿estás seguro de que es la dirección de correo electrónico correcta?"
273
 
274
+ #: includes/class-freemius.php:11305
275
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
276
  msgstr "No vemos ninguna licencia activa asociada a esa dirección de correo electrónico, ¿estás seguro de que es la dirección de correo electrónico correcta?"
277
 
278
+ #: includes/class-freemius.php:11541
279
  msgid "Account is pending activation."
280
  msgstr "La cuenta está pendiente de activación"
281
 
282
+ #: includes/class-freemius.php11653,
283
+ #: templates/forms/premium-versions-upgrade-handler.php:47
284
+ msgid "Buy a license now"
285
+ msgstr "Compra una licencia ahora"
286
+
287
+ #: includes/class-freemius.php11665,
288
+ #: templates/forms/premium-versions-upgrade-handler.php:46
289
+ msgid "Renew your license now"
290
+ msgstr "Renueva tu licencia ahora"
291
+
292
+ #: includes/class-freemius.php:11669
293
+ msgid "%s to access version %s security & feature updates, and support."
294
+ msgstr "%s para acceder a la versión %s de actualizaciones de funciones, seguridad y soporte."
295
+
296
+ #: includes/class-freemius.php:14052
297
  msgid "%s activation was successfully completed."
298
  msgstr "%s activación se completó con éxito."
299
 
300
+ #: includes/class-freemius.php:14066
301
  msgid "Your account was successfully activated with the %s plan."
302
  msgstr "Tu cuenta se ha activado correctamente con el plan %s."
303
 
304
+ #: includes/class-freemius.php14077, includes/class-freemius.php:17259
305
  msgid "Your trial has been successfully started."
306
  msgstr "Tu versión de prueba se ha iniciado con éxito."
307
 
308
+ #: includes/class-freemius.php14647, includes/class-freemius.php14699,
309
+ #: includes/class-freemius.php:14761
310
  msgid "Couldn't activate %s."
311
  msgstr "No se puede activar %s."
312
 
313
+ #: includes/class-freemius.php14648, includes/class-freemius.php14700,
314
+ #: includes/class-freemius.php:14762
315
  msgid "Please contact us with the following message:"
316
  msgstr "Por favor contáctanos con el siguiente mensaje:"
317
 
318
+ #: includes/class-freemius.php15111, includes/class-freemius.php:19543
319
  msgid "Upgrade"
320
  msgstr "Actualizar"
321
 
322
+ #: includes/class-freemius.php:15117
323
  msgid "Start Trial"
324
  msgstr "Comenzar el período de prueba"
325
 
326
+ #: includes/class-freemius.php:15119
327
  msgid "Pricing"
328
  msgstr "Precio"
329
 
330
+ #: includes/class-freemius.php15181, includes/class-freemius.php:15183
331
  msgid "Affiliation"
332
  msgstr "Afiliación"
333
 
334
+ #: includes/class-freemius.php15211, includes/class-freemius.php15213,
335
+ #: templates/account.php150, templates/debug.php:324
336
  msgid "Account"
337
  msgstr "Cuenta"
338
 
339
+ #: includes/class-freemius.php15226, includes/class-freemius.php15228,
340
  #: includes/customizer/class-fs-customizer-support-section.php:60
341
  msgid "Contact Us"
342
  msgstr "Contáctanos"
343
 
344
+ #: includes/class-freemius.php15238, includes/class-freemius.php15240,
345
+ #: includes/class-freemius.php19553, templates/account.php100,
346
+ #: templates/account/partials/addon.php:41
347
  msgid "Add-Ons"
348
  msgstr "Complementos"
349
 
350
+ #: includes/class-freemius.php:15274
351
+ msgctxt "ASCII arrow left icon"
352
+ msgid "&#x2190;"
353
+ msgstr "&#x2190;"
354
+
355
+ #: includes/class-freemius.php:15274
356
+ msgctxt "ASCII arrow right icon"
357
+ msgid "&#x27a4;"
358
+ msgstr "&#x27a4;"
359
+
360
+ #: includes/class-freemius.php15276, templates/pricing.php:97
361
  msgctxt "noun"
362
  msgid "Pricing"
363
  msgstr "Precio"
364
 
365
+ #: includes/class-freemius.php15479,
366
  #: includes/customizer/class-fs-customizer-support-section.php:67
367
  msgid "Support Forum"
368
  msgstr "Foro de soporte"
369
 
370
+ #: includes/class-freemius.php:16265
371
  msgid "Your email has been successfully verified - you are AWESOME!"
372
  msgstr "Tu email ha sido verificado correctamente - ¡Eres IMPRESIONANTE!"
373
 
374
+ #: includes/class-freemius.php:16266
375
  msgctxt "a positive response"
376
  msgid "Right on"
377
  msgstr "Bien hecho"
378
 
379
+ #: includes/class-freemius.php:16888
380
  msgid "Your %s Add-on plan was successfully upgraded."
381
  msgstr "Tu complemento %s del plan se actualizó con éxito."
382
 
383
+ #: includes/class-freemius.php:16890
384
  msgid "%s Add-on was successfully purchased."
385
  msgstr "El complemento %s ha sido comprado correctamente."
386
 
387
+ #: includes/class-freemius.php:16893
388
  msgid "Download the latest version"
389
  msgstr "Descargar la última versión"
390
 
391
+ #: includes/class-freemius.php:16965
392
  msgctxt "%1s - plugin title, %2s - API domain"
393
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1s synchronization. Please contact your host to whitelist %2s"
394
  msgstr "Tu servidor está bloqueando el acceso a la API de Freemius, que es crucial para la sincronización de licencia %1s. Por favor, ponte en contacto con tu host para que lo añadan a su lista blanca %2s"
395
 
396
+ #: includes/class-freemius.php16968, includes/class-freemius.php17384,
397
+ #: includes/class-freemius.php:17461
398
  msgid "Error received from the server:"
399
  msgstr "Error recibido del servidor:"
400
 
401
+ #: includes/class-freemius.php:16978
402
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
403
  msgstr "Parece que uno de los parámetros de autenticación es incorrecto. Actualiza tu clave pública, clave secreta e ID de usuario e inténtelo de nuevo."
404
 
405
+ #: includes/class-freemius.php17160, includes/class-freemius.php17389,
406
+ #: includes/class-freemius.php17432, includes/class-freemius.php:17535
407
  msgctxt ""
408
  msgid "Hmm"
409
  msgstr "Hmm"
410
 
411
+ #: includes/class-freemius.php:17173
412
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
413
  msgstr "Parece que todavía estás en el plan %s. Si actualizaste o cambiaste tu plan, probablemente sea un problema de nuestra parte - lo sentimos."
414
 
415
+ #: includes/class-freemius.php17174, templates/account.php102,
416
+ #: templates/add-ons.php134, templates/account/partials/addon.php:43
417
  msgctxt "trial period"
418
  msgid "Trial"
419
  msgstr "Período de Prueba Gratuito"
420
 
421
+ #: includes/class-freemius.php:17179
422
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
423
  msgstr "He actualizado mi cuenta, pero cuando intento sincronizar la licencia, el plan sigue siendo %s."
424
 
425
+ #: includes/class-freemius.php17183, includes/class-freemius.php:17241
426
  msgid "Please contact us here"
427
  msgstr "Contacta aquí con nosotros"
428
 
429
+ #: includes/class-freemius.php:17193
430
  msgid "Your plan was successfully upgraded."
431
  msgstr "Tu plan se actualizó con éxito."
432
 
433
+ #: includes/class-freemius.php:17211
434
  msgid "Your plan was successfully changed to %s."
435
  msgstr "Tu plan se cambió correctamente a %s."
436
 
437
+ #: includes/class-freemius.php:17227
438
  msgid "Your license has expired. You can still continue using the free %s forever."
439
  msgstr "Tu licencia ha caducado. Puedes seguir usando el plan gratuito %s para siempre."
440
 
441
+ #: includes/class-freemius.php:17229
442
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
443
  msgstr "Tu licencia ha caducado. %1$sActualiza ahora %2$s para continuar usando el %3$s sin interrupciones."
444
 
445
+ #: includes/class-freemius.php:17237
446
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
447
  msgstr "Tu licencia ha sido cancelada. Si crees que es un error, ponte en contacto con el servicio de asistencia."
448
 
449
+ #: includes/class-freemius.php:17250
450
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
451
  msgstr "Tu licencia ha caducado. Todavía puedes seguir usando todas las funciones de %s, pero tendrás que renovar tu licencia para seguir recibiendo actualizaciones y soporte."
452
 
453
+ #: includes/class-freemius.php:17273
454
  msgid "Your free trial has expired. You can still continue using all our free features."
455
  msgstr "Tu período de prueba ha caducado. Todavía puedes seguir usando todas nuestras funciones gratuitas."
456
 
457
+ #: includes/class-freemius.php:17275
458
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
459
  msgstr "Tu período de prueba ha caducado. %1$sActualiza ahora %2$s para continuar usando el %3$s sin interrupciones."
460
 
461
+ #: includes/class-freemius.php:17380
462
  msgid "It looks like the license could not be activated."
463
  msgstr "Parece que la licencia no se pudo activar."
464
 
465
+ #: includes/class-freemius.php:17410
466
  msgid "Your license was successfully activated."
467
  msgstr "Tu licencia fue activada correctamente."
468
 
469
+ #: includes/class-freemius.php:17436
470
  msgid "It looks like your site currently doesn't have an active license."
471
  msgstr "Parece que tu sitio actualmente no tiene una licencia activa."
472
 
473
+ #: includes/class-freemius.php:17460
474
  msgid "It looks like the license deactivation failed."
475
  msgstr "Parece que la desactivación de licencia ha fallado."
476
 
477
+ #: includes/class-freemius.php:17488
478
  msgid "Your license was successfully deactivated, you are back to the %s plan."
479
  msgstr "Tu licencia fue desactivada correctamente, has vuelto al plan %s."
480
 
481
+ #: includes/class-freemius.php:17489
482
  msgid "O.K"
483
  msgstr "O.K"
484
 
485
+ #: includes/class-freemius.php:17542
486
+ msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
487
+ msgstr "Parece que estamos teniendo algún problema temporal con tu cancelación de la suscripción. Vuelve a intentarlo en unos minutos."
488
 
489
+ #: includes/class-freemius.php:17551
490
+ msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
491
+ msgstr "Tu suscripción ha sido cancelada correctamente. Tu %s licencia del plan caducará en %s."
492
 
493
+ #: includes/class-freemius.php:17593
494
  msgid "You are already running the %s in a trial mode."
495
  msgstr "Estás ejecutando %s en modo de prueba."
496
 
497
+ #: includes/class-freemius.php:17604
498
  msgid "You already utilized a trial before."
499
  msgstr "Ya utilizaste un período de prueba antes."
500
 
501
+ #: includes/class-freemius.php:17618
502
  msgid "Plan %s do not exist, therefore, can't start a trial."
503
  msgstr "El plan %s no existe, por lo tanto, no puedes comenzar un período de prueba."
504
 
505
+ #: includes/class-freemius.php:17629
506
  msgid "Plan %s does not support a trial period."
507
  msgstr "El plan %s no admite un período de prueba."
508
 
509
+ #: includes/class-freemius.php:17640
510
  msgid "None of the %s's plans supports a trial period."
511
  msgstr "Ninguno de los planes de %s soportan un período de prueba."
512
 
513
+ #: includes/class-freemius.php:17690
514
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
515
  msgstr "Parece que ya no estás en modo de prueba, así que no hay nada que cancelar :)"
516
 
517
+ #: includes/class-freemius.php:17726
 
 
 
 
518
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
519
  msgstr "Parece que estamos teniendo algún problema temporal con tu cancelación de prueba. Vuelve a intentarlo en unos minutos."
520
 
521
+ #: includes/class-freemius.php:17745
522
+ msgid "Your %s free trial was successfully cancelled."
523
+ msgstr "Tu prueba gratuita de %s fue cancelada con éxito."
524
+
525
+ #: includes/class-freemius.php:18052
526
  msgid "Version %s was released."
527
  msgstr "La versión %s se ha lanzado."
528
 
529
+ #: includes/class-freemius.php:18052
530
  msgid "Please download %s."
531
  msgstr "Por favor descarga %s."
532
 
533
+ #: includes/class-freemius.php:18059
534
  msgid "the latest %s version here"
535
  msgstr "la última versión %s aquí"
536
 
537
+ #: includes/class-freemius.php:18064
538
  msgid "New"
539
  msgstr "Nuevo"
540
 
541
+ #: includes/class-freemius.php:18069
542
  msgid "Seems like you got the latest release."
543
  msgstr "Parece que tienes la última versión."
544
 
545
+ #: includes/class-freemius.php:18070
546
  msgid "You are all good!"
547
  msgstr "¡Está todo listo!"
548
 
549
+ #: includes/class-freemius.php:18338
550
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
551
  msgstr "El correo de verificación se acaba de enviar a %s. Si no puedes encontrarlo después de 5 min, comprueba tu carpeta de spam."
552
 
553
+ #: includes/class-freemius.php:18473
554
  msgid "Site successfully opted in."
555
  msgstr "Sitio dado de alta correctamente."
556
 
557
+ #: includes/class-freemius.php18474, includes/class-freemius.php:19285
558
  msgid "Awesome"
559
  msgstr "Increíble"
560
 
561
+ #: includes/class-freemius.php18490, templates/forms/optout.php:32
562
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
563
  msgstr "Agradecemos tu ayuda para mejorar %s y por permitirnos rastrear algunos datos de uso."
564
 
565
+ #: includes/class-freemius.php:18491
566
  msgid "Thank you!"
567
  msgstr "¡Gracias!"
568
 
569
+ #: includes/class-freemius.php:18498
570
  msgid "We will no longer be sending any usage data of %s on %s to %s."
571
  msgstr "No continuaremos enviando datos de uso de %s en %s a %s."
572
 
573
+ #: includes/class-freemius.php:18627
574
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
575
  msgstr "Comprueba tu buzón de correo, debes recibir un correo electrónico a través de %s para confirmar el cambio de propiedad. Por razones de seguridad, debes confirmar el cambio dentro de los próximos 15 min. Si no puedes encontrar el correo electrónico, comprueba tu carpeta de correo no deseado."
576
 
577
+ #: includes/class-freemius.php:18633
578
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
579
  msgstr "Gracias por confirmar el cambio de propiedad. Se envió un correo