WP Security Audit Log - Version 1.2.3

Version Description

(2014-07-23) = * Improvements * Improved database structure for better support of high-traffic WordPress and WordPress multisite installations * Developer options are reset during updates for improved performance * Added a warning / note to the developer options (such options should NEVER be enabled on live websites but only on testing, staging and development websites)

  • Bug Fixes
    • Fixed database issue with primary key constraint
Download this release

Release Info

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

Code changes from version 1.2.2 to 1.2.3

classes/AbstractView.php CHANGED
@@ -52,6 +52,11 @@ abstract class WSAL_AbstractView {
52
  */
53
  public function IsVisible(){ return true; }
54
 
 
 
 
 
 
55
  /**
56
  * Used for rendering stuff into head tag.
57
  */
52
  */
53
  public function IsVisible(){ return true; }
54
 
55
+ /**
56
+ * @return boolean Whether page should be accessible or not.
57
+ */
58
+ public function IsAccessible(){ return true; }
59
+
60
  /**
61
  * Used for rendering stuff into head tag.
62
  */
classes/DB/ActiveRecord.php CHANGED
@@ -39,40 +39,50 @@ abstract class WSAL_DB_ActiveRecord {
39
  protected function _GetInstallQuery(){
40
  global $wpdb;
41
 
42
- $copy = get_class($this);
43
- $copy = new $copy();
44
 
45
  $sql = 'CREATE TABLE ' . $this->GetTable() . ' (' . PHP_EOL;
 
46
  foreach($this->GetColumns() as $key) {
 
47
  switch(true) {
48
  case $key == $copy->_idkey:
49
- $sql .= $key . ' BIGINT NOT NULL AUTO_INCREMENT,'.PHP_EOL;
50
  break;
51
  case is_integer($copy->$key):
52
- $sql .= $key . ' BIGINT NOT NULL,'.PHP_EOL;
53
  break;
54
  case is_float($copy->$key):
55
- $sql .= $key . ' DOUBLE NOT NULL,'.PHP_EOL;
56
  break;
57
  case is_string($copy->$key):
58
- $sql .= $key . ' TEXT NOT NULL,'.PHP_EOL;
 
 
 
 
 
59
  break;
60
  case is_bool($copy->$key):
61
- $sql .= $key . ' BIT NOT NULL,'.PHP_EOL;
62
  break;
63
  case is_array($copy->$key):
64
  case is_object($copy->$key):
65
- $sql .= $key . ' LONGTEXT NOT NULL,'.PHP_EOL;
66
  break;
67
  }
68
  }
69
- $sql .= 'CONSTRAINT PK_' . $this->GetTable().'_'.$this->_idkey
70
- . ' PRIMARY KEY (' . $this->_idkey . ')' . PHP_EOL
71
- . ' )';
 
 
72
  if ( ! empty($wpdb->charset) )
73
  $sql .= ' DEFAULT CHARACTER SET ' . $wpdb->charset;
74
  if ( ! empty($wpdb->collate) )
75
  $sql .= ' COLLATE ' . $wpdb->collate;
 
76
  return $sql;
77
  }
78
 
@@ -109,6 +119,13 @@ abstract class WSAL_DB_ActiveRecord {
109
  return $wpdb->base_prefix . $this->_table;
110
  }
111
 
 
 
 
 
 
 
 
112
  /**
113
  * @return array Returns this records' columns.
114
  */
39
  protected function _GetInstallQuery(){
40
  global $wpdb;
41
 
42
+ $class = get_class($this);
43
+ $copy = new $class();
44
 
45
  $sql = 'CREATE TABLE ' . $this->GetTable() . ' (' . PHP_EOL;
46
+
47
  foreach($this->GetColumns() as $key) {
48
+ $sql .= ' ';
49
  switch(true) {
50
  case $key == $copy->_idkey:
51
+ $sql .= $key . ' BIGINT NOT NULL AUTO_INCREMENT,' . PHP_EOL;
52
  break;
53
  case is_integer($copy->$key):
54
+ $sql .= $key . ' BIGINT NOT NULL,' . PHP_EOL;
55
  break;
56
  case is_float($copy->$key):
57
+ $sql .= $key . ' DOUBLE NOT NULL,' . PHP_EOL;
58
  break;
59
  case is_string($copy->$key):
60
+ $maxlenght = $key . '_maxlength';
61
+ if(property_exists($class, $maxlenght)){
62
+ $sql .= $key . ' VARCHAR(' . intval($class::$$maxlenght) . ') NOT NULL,' . PHP_EOL;
63
+ }else{
64
+ $sql .= $key . ' TEXT NOT NULL,' . PHP_EOL;
65
+ }
66
  break;
67
  case is_bool($copy->$key):
68
+ $sql .= $key . ' BIT NOT NULL,' . PHP_EOL;
69
  break;
70
  case is_array($copy->$key):
71
  case is_object($copy->$key):
72
+ $sql .= $key . ' LONGTEXT NOT NULL,' . PHP_EOL;
73
  break;
74
  }
75
  }
76
+
77
+ $sql .= $this->GetTableOptions() . PHP_EOL;
78
+
79
+ $sql .= ')';
80
+
81
  if ( ! empty($wpdb->charset) )
82
  $sql .= ' DEFAULT CHARACTER SET ' . $wpdb->charset;
83
  if ( ! empty($wpdb->collate) )
84
  $sql .= ' COLLATE ' . $wpdb->collate;
85
+
86
  return $sql;
87
  }
88
 
119
  return $wpdb->base_prefix . $this->_table;
120
  }
121
 
122
+ /**
123
+ * @return string SQL table options (constraints, foreign keys, indexes etc).
124
+ */
125
+ protected function GetTableOptions(){
126
+ return ' PRIMARY KEY (' . $this->_idkey . ')';
127
+ }
128
+
129
  /**
130
  * @return array Returns this records' columns.
131
  */
classes/DB/Meta.php CHANGED
@@ -7,5 +7,11 @@ class WSAL_DB_Meta extends WSAL_DB_ActiveRecord {
7
  public $id = 0;
8
  public $occurrence_id = 0;
9
  public $name = '';
 
10
  public $value = array(); // force mixed type
 
 
 
 
 
11
  }
7
  public $id = 0;
8
  public $occurrence_id = 0;
9
  public $name = '';
10
+ public static $name_maxlength = 100;
11
  public $value = array(); // force mixed type
12
+
13
+ protected function GetTableOptions(){
14
+ return parent::GetTableOptions() . ',' . PHP_EOL
15
+ . ' KEY occurrence_name (occurrence_id,name)';
16
+ }
17
  }
classes/DB/Occurrence.php CHANGED
@@ -11,6 +11,11 @@ class WSAL_DB_Occurrence extends WSAL_DB_ActiveRecord {
11
  public $is_read = false;
12
  public $is_migrated = false;
13
 
 
 
 
 
 
14
  protected $_meta;
15
 
16
  /**
11
  public $is_read = false;
12
  public $is_migrated = false;
13
 
14
+ protected function GetTableOptions(){
15
+ return parent::GetTableOptions() . ',' . PHP_EOL
16
+ . ' KEY site_alert_created (site_id,alert_id,created_on)';
17
+ }
18
+
19
  protected $_meta;
20
 
21
  /**
classes/Sensors/MetaData.php ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
4
+
5
+ public function HookEvents() {
6
+ /*add_action('added_post_meta', array($this, 'EventPostMetaCreated'), 10, 4);
7
+ add_action('update_post_meta', array($this, 'EventPostMetaUpdating'), 10, 3);
8
+ add_action('updated_post_meta', array($this, 'EventPostMetaUpdated'), 10, 4);
9
+ add_action('deleted_post_meta', array($this, 'EventPostMetaDeleted'), 10, 4);*/
10
+ }
11
+
12
+ protected $old_meta = array();
13
+
14
+ public function EventPostMetaCreated($meta_id, $object_id, $meta_key, $_meta_value){
15
+ $post = get_post($object_id);
16
+
17
+ switch($post->post_type){
18
+ case 'page':
19
+ $this->plugin->alerts->Trigger(2059, array(
20
+ 'PostID' => $object_id,
21
+ 'PostTitle' => $post->post_title,
22
+ 'MetaID' => $meta_id,
23
+ 'MetaKey' => $meta_key,
24
+ 'MetaValue' => $_meta_value,
25
+ ));
26
+ break;
27
+ case 'post':
28
+ $this->plugin->alerts->Trigger(2053, array(
29
+ 'PostID' => $object_id,
30
+ 'PostTitle' => $post->post_title,
31
+ 'MetaID' => $meta_id,
32
+ 'MetaKey' => $meta_key,
33
+ 'MetaValue' => $_meta_value,
34
+ ));
35
+ break;
36
+ default:
37
+ $this->plugin->alerts->Trigger(2056, array(
38
+ 'PostID' => $object_id,
39
+ 'PostTitle' => $post->post_title,
40
+ 'PostType' => $post->post_type,
41
+ 'MetaID' => $meta_id,
42
+ 'MetaKey' => $meta_key,
43
+ 'MetaValue' => $_meta_value,
44
+ ));
45
+ break;
46
+ }
47
+ }
48
+
49
+ public function EventPostMetaUpdating($meta_id, $object_id, $meta_key){
50
+ $this->old_meta[$meta_id] = array($meta_key, get_metadata('post', $object_id, $meta_key, true));
51
+ }
52
+
53
+ public function EventPostMetaUpdated($meta_id, $object_id, $meta_key, $_meta_value){
54
+ $post = get_post($object_id);
55
+
56
+ if(isset($this->old_meta[$meta_id])){
57
+
58
+ // check change in meta key
59
+ if($this->old_meta[$meta_id][0] != $meta_key){
60
+ switch($post->post_type){
61
+ case 'page':
62
+ $this->plugin->alerts->Trigger(2064, array(
63
+ 'PostID' => $object_id,
64
+ 'PostTitle' => $post->post_title,
65
+ 'MetaID' => $meta_id,
66
+ 'MetaKeyNew' => $meta_key,
67
+ 'MetaKeyOld' => $this->old_meta[$meta_id][0],
68
+ 'MetaValue' => $_meta_value,
69
+ ));
70
+ break;
71
+ case 'post':
72
+ $this->plugin->alerts->Trigger(2062, array(
73
+ 'PostID' => $object_id,
74
+ 'PostTitle' => $post->post_title,
75
+ 'MetaID' => $meta_id,
76
+ 'MetaKeyNew' => $meta_key,
77
+ 'MetaKeyOld' => $this->old_meta[$meta_id][0],
78
+ 'MetaValue' => $_meta_value,
79
+ ));
80
+ break;
81
+ default:
82
+ $this->plugin->alerts->Trigger(2063, array(
83
+ 'PostID' => $object_id,
84
+ 'PostTitle' => $post->post_title,
85
+ 'PostType' => $post->post_type,
86
+ 'MetaID' => $meta_id,
87
+ 'MetaKeyNew' => $meta_key,
88
+ 'MetaKeyOld' => $this->old_meta[$meta_id][0],
89
+ 'MetaValue' => $_meta_value,
90
+ ));
91
+ break;
92
+ }
93
+ }
94
+
95
+ // check change in meta value
96
+ if($this->old_meta[$meta_id][1] != $_meta_value){
97
+ switch($post->post_type){
98
+ case 'page':
99
+ $this->plugin->alerts->Trigger(2060, array(
100
+ 'PostID' => $object_id,
101
+ 'PostTitle' => $post->post_title,
102
+ 'MetaID' => $meta_id,
103
+ 'MetaKey' => $meta_key,
104
+ 'MetaValueNew' => $_meta_value,
105
+ 'MetaValueOld' => $this->old_meta[$meta_id][1],
106
+ ));
107
+ break;
108
+ case 'post':
109
+ $this->plugin->alerts->Trigger(2054, array(
110
+ 'PostID' => $object_id,
111
+ 'PostTitle' => $post->post_title,
112
+ 'MetaID' => $meta_id,
113
+ 'MetaKey' => $meta_key,
114
+ 'MetaValueNew' => $_meta_value,
115
+ 'MetaValueOld' => $this->old_meta[$meta_id][1],
116
+ ));
117
+ break;
118
+ default:
119
+ $this->plugin->alerts->Trigger(2057, array(
120
+ 'PostID' => $object_id,
121
+ 'PostTitle' => $post->post_title,
122
+ 'PostType' => $post->post_type,
123
+ 'MetaID' => $meta_id,
124
+ 'MetaKey' => $meta_key,
125
+ 'MetaValueNew' => $_meta_value,
126
+ 'MetaValueOld' => $this->old_meta[$meta_id][1],
127
+ ));
128
+ break;
129
+ }
130
+ }
131
+
132
+ // remove old meta update data
133
+ unset($this->old_meta[$meta_id]);
134
+ }
135
+ }
136
+
137
+ public function EventPostMetaDeleted($meta_ids, $object_id, $meta_key, $_meta_value){
138
+ $post = get_post($object_id);
139
+ foreach($meta_ids as $meta_id){
140
+ switch($post->post_type){
141
+ case 'page':
142
+ $this->plugin->alerts->Trigger(2061, array(
143
+ 'PostID' => $object_id,
144
+ 'PostTitle' => $post->post_title,
145
+ 'MetaID' => $meta_id,
146
+ 'MetaKey' => $meta_key,
147
+ 'MetaValue' => $_meta_value,
148
+ ));
149
+ break;
150
+ case 'post':
151
+ $this->plugin->alerts->Trigger(2055, array(
152
+ 'PostID' => $object_id,
153
+ 'PostTitle' => $post->post_title,
154
+ 'MetaID' => $meta_id,
155
+ 'MetaKey' => $meta_key,
156
+ 'MetaValue' => $_meta_value,
157
+ ));
158
+ break;
159
+ default:
160
+ $this->plugin->alerts->Trigger(2058, array(
161
+ 'PostID' => $object_id,
162
+ 'PostTitle' => $post->post_title,
163
+ 'PostType' => $post->post_type,
164
+ 'MetaID' => $meta_id,
165
+ 'MetaKey' => $meta_key,
166
+ 'MetaValue' => $_meta_value,
167
+ ));
168
+ break;
169
+ }
170
+ }
171
+ }
172
+ }
classes/Sensors/PluginsThemes.php CHANGED
@@ -24,7 +24,7 @@ class WSAL_Sensors_PluginsThemes extends WSAL_AbstractSensor {
24
  $is_plugins = $actype == 'plugins';
25
 
26
  // install plugin
27
- if(($action=='install-plugin' || $action=='upload-plugin')){
28
  $plugin = array_values(array_diff(array_keys(get_plugins()), array_keys($this->old_plugins)));
29
  if(count($plugin) != 1)
30
  return $this->LogError(
24
  $is_plugins = $actype == 'plugins';
25
 
26
  // install plugin
27
+ if(in_array($action, array('install-plugin', 'upload-plugin'))){
28
  $plugin = array_values(array_diff(array_keys(get_plugins()), array_keys($this->old_plugins)));
29
  if(count($plugin) != 1)
30
  return $this->LogError(
classes/Settings.php CHANGED
@@ -6,35 +6,10 @@ class WSAL_Settings {
6
  */
7
  protected $_plugin;
8
 
9
- const OPT_PRFX = 'wsal-';
10
-
11
  public function __construct(WpSecurityAuditLog $plugin){
12
  $this->_plugin = $plugin;
13
  }
14
 
15
- protected function IsMultisite(){
16
- return function_exists('is_multisite') && is_multisite();
17
- }
18
-
19
- protected function GetGlobalOption($option, $default = false){
20
- $fn = $this->IsMultisite() ? 'get_site_option' : 'get_option';
21
- return $fn($option, $default);
22
- }
23
-
24
- protected function SetGlobalOption($option, $value){
25
- $fn = $this->IsMultisite() ? 'update_site_option' : 'update_option';
26
- return $fn($option, $value);
27
- }
28
-
29
- protected function GetLocalOption($option, $default = false){
30
- $result = get_user_option($option, get_current_user_id());
31
- return $result === false ? $default : $result;
32
- }
33
-
34
- protected function SetLocalOption($option, $value){
35
- update_user_option(get_current_user_id(), $option, $value, false);
36
- }
37
-
38
  const OPT_DEV_DATA_INSPECTOR = 'd';
39
  const OPT_DEV_PHP_ERRORS = 'p';
40
  const OPT_DEV_REQUEST_LOG = 'r';
@@ -57,8 +32,8 @@ class WSAL_Settings {
57
  */
58
  public function IsDevOptionEnabled($option){
59
  if(is_null($this->_devoption)){
60
- $this->_devoption = $this->GetGlobalOption(
61
- self::OPT_PRFX . 'dev-options',
62
  implode(',', $this->GetDefaultDevOptions())
63
  );
64
  $this->_devoption = explode(',', $this->_devoption);
@@ -70,7 +45,7 @@ class WSAL_Settings {
70
  * @return boolean Whether any developer option has been enabled or not.
71
  */
72
  public function IsAnyDevOptionEnabled(){
73
- return !!$this->GetGlobalOption(self::OPT_PRFX . 'dev-options', null);
74
  }
75
 
76
  /**
@@ -88,8 +63,8 @@ class WSAL_Settings {
88
  if($enabled)
89
  $this->_devoption[] = $option;
90
  // commit option
91
- $this->SetGlobalOption(
92
- self::OPT_PRFX . 'dev-options',
93
  implode(',', $this->_devoption)
94
  );
95
  }
@@ -99,7 +74,7 @@ class WSAL_Settings {
99
  */
100
  public function ClearDevOptions(){
101
  $this->_devoption = array();
102
- $this->SetGlobalOption(self::OPT_PRFX . 'dev-options', '');
103
  }
104
 
105
  /**
@@ -141,28 +116,28 @@ class WSAL_Settings {
141
  * @return boolean Whether dashboard widgets are enabled or not.
142
  */
143
  public function IsWidgetsEnabled(){
144
- return !$this->GetGlobalOption(self::OPT_PRFX . 'disable-widgets');
145
  }
146
 
147
  /**
148
  * @param boolean $newvalue Whether dashboard widgets are enabled or not.
149
  */
150
  public function SetWidgetsEnabled($newvalue){
151
- $this->SetGlobalOption(self::OPT_PRFX . 'disable-widgets', !$newvalue);
152
  }
153
 
154
  /**
155
  * @return boolean Whether alerts in audit log view refresh automatically or not.
156
  */
157
  public function IsRefreshAlertsEnabled(){
158
- return !$this->GetGlobalOption(self::OPT_PRFX . 'disable-refresh');
159
  }
160
 
161
  /**
162
  * @param boolean $newvalue Whether alerts in audit log view refresh automatically or not.
163
  */
164
  public function SetRefreshAlertsEnabled($newvalue){
165
- $this->SetGlobalOption(self::OPT_PRFX . 'disable-refresh', !$newvalue);
166
  }
167
 
168
  /**
@@ -193,7 +168,7 @@ class WSAL_Settings {
193
  */
194
  public function GetPruningDate(){
195
  if(!$this->_pruning){
196
- $this->_pruning = $this->GetGlobalOption(self::OPT_PRFX . 'pruning-date');
197
  if(!strtotime($this->_pruning))
198
  $this->_pruning = $this->GetDefaultPruningDate();
199
  }
@@ -205,7 +180,7 @@ class WSAL_Settings {
205
  */
206
  public function SetPruningDate($newvalue){
207
  if(strtotime($newvalue)){
208
- $this->SetGlobalOption(self::OPT_PRFX . 'pruning-date', $newvalue);
209
  $this->_pruning = $newvalue;
210
  }
211
  }
@@ -214,7 +189,7 @@ class WSAL_Settings {
214
  * @return integer Maximum number of alerts to keep.
215
  */
216
  public function GetPruningLimit(){
217
- $val = (int)$this->GetGlobalOption(self::OPT_PRFX . 'pruning-limit');
218
  return $val ? $val : $this->GetMaxAllowedAlerts();
219
  }
220
 
@@ -223,23 +198,23 @@ class WSAL_Settings {
223
  */
224
  public function SetPruningLimit($newvalue){
225
  $newvalue = max(/*min(*/(int)$newvalue/*, $this->GetMaxAllowedAlerts())*/, 1);
226
- $this->SetGlobalOption(self::OPT_PRFX . 'pruning-limit', $newvalue);
227
  }
228
 
229
  public function SetPruningDateEnabled($enabled){
230
- $this->SetGlobalOption(self::OPT_PRFX . 'pruning-date-e', $enabled);
231
  }
232
 
233
  public function SetPruningLimitEnabled($enabled){
234
- $this->SetGlobalOption(self::OPT_PRFX . 'pruning-limit-e', $enabled);
235
  }
236
 
237
  public function IsPruningDateEnabled(){
238
- return $this->GetGlobalOption(self::OPT_PRFX . 'pruning-date-e', true);
239
  }
240
 
241
  public function IsPruningLimitEnabled(){
242
- return $this->GetGlobalOption(self::OPT_PRFX . 'pruning-limit-e', true);
243
  }
244
 
245
  protected $_disabled = null;
@@ -254,7 +229,7 @@ class WSAL_Settings {
254
  public function GetDisabledAlerts(){
255
  if(!$this->_disabled){
256
  $this->_disabled = implode(',', $this->GetDefaultDisabledAlerts());
257
- $this->_disabled = $this->GetGlobalOption(self::OPT_PRFX . 'disabled-alerts', $this->_disabled);
258
  $this->_disabled = explode(',', $this->_disabled);
259
  $this->_disabled = array_map('intval', $this->_disabled);
260
  }
@@ -266,19 +241,19 @@ class WSAL_Settings {
266
  */
267
  public function SetDisabledAlerts($types){
268
  $this->_disabled = array_unique(array_map('intval', $types));
269
- $this->SetGlobalOption(self::OPT_PRFX . 'disabled-alerts', implode(',', $this->_disabled));
270
  }
271
 
272
  protected $_viewers = null;
273
 
274
  public function SetAllowedPluginViewers($usersOrRoles){
275
  $this->_viewers = $usersOrRoles;
276
- $this->SetGlobalOption(self::OPT_PRFX . 'plugin-viewers', implode(',', $this->_viewers));
277
  }
278
 
279
  public function GetAllowedPluginViewers(){
280
  if(is_null($this->_viewers)){
281
- $this->_viewers = array_unique(array_filter(explode(',', $this->GetGlobalOption(self::OPT_PRFX . 'plugin-viewers'))));
282
  }
283
  return $this->_viewers;
284
  }
@@ -287,12 +262,12 @@ class WSAL_Settings {
287
 
288
  public function SetAllowedPluginEditors($usersOrRoles){
289
  $this->_editors = $usersOrRoles;
290
- $this->SetGlobalOption(self::OPT_PRFX . 'plugin-editors', implode(',', $this->_editors));
291
  }
292
 
293
  public function GetAllowedPluginEditors(){
294
  if(is_null($this->_editors)){
295
- $this->_editors = array_unique(array_filter(explode(',', $this->GetGlobalOption(self::OPT_PRFX . 'plugin-editors'))));
296
  }
297
  return $this->_editors;
298
  }
@@ -301,12 +276,12 @@ class WSAL_Settings {
301
 
302
  public function SetViewPerPage($newvalue){
303
  $this->_perpage = max($newvalue, 1);
304
- $this->SetGlobalOption(self::OPT_PRFX . 'items-per-page', $this->_perpage);
305
  }
306
 
307
  public function GetViewPerPage(){
308
  if(is_null($this->_perpage)){
309
- $this->_perpage = (int)$this->GetGlobalOption(self::OPT_PRFX . 'items-per-page', 10);
310
  }
311
  return $this->_perpage;
312
  }
@@ -323,14 +298,14 @@ class WSAL_Settings {
323
  * @return string[] List of superadmin usernames.
324
  */
325
  protected function GetSuperAdmins(){
326
- return $this->IsMultisite() ? get_super_admins() : array();
327
  }
328
 
329
  /**
330
  * @return string[] List of admin usernames.
331
  */
332
  protected function GetAdmins(){
333
- if($this->IsMultisite()){
334
  // see: https://gist.github.com/1508426/65785a15b8638d43a9905effb59e4d97319ef8f8
335
  global $wpdb;
336
  $cap = get_current_blog_id();
@@ -367,7 +342,7 @@ class WSAL_Settings {
367
  break;
368
  case 'edit':
369
  $allowed = $this->GetAllowedPluginEditors();
370
- $allowed = array_merge($allowed, $this->IsMultisite() ?
371
  $this->GetSuperAdmins() : $this->GetAdmins()
372
  );
373
  break;
@@ -396,10 +371,10 @@ class WSAL_Settings {
396
  }
397
 
398
  public function IsIncognito(){
399
- return $this->GetGlobalOption(self::OPT_PRFX . 'hide-plugin');
400
  }
401
 
402
  public function SetIncognito($enabled){
403
- return $this->SetGlobalOption(self::OPT_PRFX . 'hide-plugin', $enabled);
404
  }
405
  }
6
  */
7
  protected $_plugin;
8
 
 
 
9
  public function __construct(WpSecurityAuditLog $plugin){
10
  $this->_plugin = $plugin;
11
  }
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  const OPT_DEV_DATA_INSPECTOR = 'd';
14
  const OPT_DEV_PHP_ERRORS = 'p';
15
  const OPT_DEV_REQUEST_LOG = 'r';
32
  */
33
  public function IsDevOptionEnabled($option){
34
  if(is_null($this->_devoption)){
35
+ $this->_devoption = $this->_plugin->GetGlobalOption(
36
+ 'dev-options',
37
  implode(',', $this->GetDefaultDevOptions())
38
  );
39
  $this->_devoption = explode(',', $this->_devoption);
45
  * @return boolean Whether any developer option has been enabled or not.
46
  */
47
  public function IsAnyDevOptionEnabled(){
48
+ return !!$this->_plugin->GetGlobalOption('dev-options', null);
49
  }
50
 
51
  /**
63
  if($enabled)
64
  $this->_devoption[] = $option;
65
  // commit option
66
+ $this->_plugin->SetGlobalOption(
67
+ 'dev-options',
68
  implode(',', $this->_devoption)
69
  );
70
  }
74
  */
75
  public function ClearDevOptions(){
76
  $this->_devoption = array();
77
+ $this->_plugin->SetGlobalOption('dev-options', '');
78
  }
79
 
80
  /**
116
  * @return boolean Whether dashboard widgets are enabled or not.
117
  */
118
  public function IsWidgetsEnabled(){
119
+ return !$this->_plugin->GetGlobalOption('disable-widgets');
120
  }
121
 
122
  /**
123
  * @param boolean $newvalue Whether dashboard widgets are enabled or not.
124
  */
125
  public function SetWidgetsEnabled($newvalue){
126
+ $this->_plugin->SetGlobalOption('disable-widgets', !$newvalue);
127
  }
128
 
129
  /**
130
  * @return boolean Whether alerts in audit log view refresh automatically or not.
131
  */
132
  public function IsRefreshAlertsEnabled(){
133
+ return !$this->_plugin->GetGlobalOption('disable-refresh');
134
  }
135
 
136
  /**
137
  * @param boolean $newvalue Whether alerts in audit log view refresh automatically or not.
138
  */
139
  public function SetRefreshAlertsEnabled($newvalue){
140
+ $this->_plugin->SetGlobalOption('disable-refresh', !$newvalue);
141
  }
142
 
143
  /**
168
  */
169
  public function GetPruningDate(){
170
  if(!$this->_pruning){
171
+ $this->_pruning = $this->_plugin->GetGlobalOption('pruning-date');
172
  if(!strtotime($this->_pruning))
173
  $this->_pruning = $this->GetDefaultPruningDate();
174
  }
180
  */
181
  public function SetPruningDate($newvalue){
182
  if(strtotime($newvalue)){
183
+ $this->_plugin->SetGlobalOption('pruning-date', $newvalue);
184
  $this->_pruning = $newvalue;
185
  }
186
  }
189
  * @return integer Maximum number of alerts to keep.
190
  */
191
  public function GetPruningLimit(){
192
+ $val = (int)$this->_plugin->GetGlobalOption('pruning-limit');
193
  return $val ? $val : $this->GetMaxAllowedAlerts();
194
  }
195
 
198
  */
199
  public function SetPruningLimit($newvalue){
200
  $newvalue = max(/*min(*/(int)$newvalue/*, $this->GetMaxAllowedAlerts())*/, 1);
201
+ $this->_plugin->SetGlobalOption('pruning-limit', $newvalue);
202
  }
203
 
204
  public function SetPruningDateEnabled($enabled){
205
+ $this->_plugin->SetGlobalOption('pruning-date-e', $enabled);
206
  }
207
 
208
  public function SetPruningLimitEnabled($enabled){
209
+ $this->_plugin->SetGlobalOption('pruning-limit-e', $enabled);
210
  }
211
 
212
  public function IsPruningDateEnabled(){
213
+ return $this->_plugin->GetGlobalOption('pruning-date-e', true);
214
  }
215
 
216
  public function IsPruningLimitEnabled(){
217
+ return $this->_plugin->GetGlobalOption('pruning-limit-e', true);
218
  }
219
 
220
  protected $_disabled = null;
229
  public function GetDisabledAlerts(){
230
  if(!$this->_disabled){
231
  $this->_disabled = implode(',', $this->GetDefaultDisabledAlerts());
232
+ $this->_disabled = $this->_plugin->GetGlobalOption('disabled-alerts', $this->_disabled);
233
  $this->_disabled = explode(',', $this->_disabled);
234
  $this->_disabled = array_map('intval', $this->_disabled);
235
  }
241
  */
242
  public function SetDisabledAlerts($types){
243
  $this->_disabled = array_unique(array_map('intval', $types));
244
+ $this->_plugin->SetGlobalOption('disabled-alerts', implode(',', $this->_disabled));
245
  }
246
 
247
  protected $_viewers = null;
248
 
249
  public function SetAllowedPluginViewers($usersOrRoles){
250
  $this->_viewers = $usersOrRoles;
251
+ $this->_plugin->SetGlobalOption('plugin-viewers', implode(',', $this->_viewers));
252
  }
253
 
254
  public function GetAllowedPluginViewers(){
255
  if(is_null($this->_viewers)){
256
+ $this->_viewers = array_unique(array_filter(explode(',', $this->_plugin->GetGlobalOption('plugin-viewers'))));
257
  }
258
  return $this->_viewers;
259
  }
262
 
263
  public function SetAllowedPluginEditors($usersOrRoles){
264
  $this->_editors = $usersOrRoles;
265
+ $this->_plugin->SetGlobalOption('plugin-editors', implode(',', $this->_editors));
266
  }
267
 
268
  public function GetAllowedPluginEditors(){
269
  if(is_null($this->_editors)){
270
+ $this->_editors = array_unique(array_filter(explode(',', $this->_plugin->GetGlobalOption('plugin-editors'))));
271
  }
272
  return $this->_editors;
273
  }
276
 
277
  public function SetViewPerPage($newvalue){
278
  $this->_perpage = max($newvalue, 1);
279
+ $this->_plugin->SetGlobalOption('items-per-page', $this->_perpage);
280
  }
281
 
282
  public function GetViewPerPage(){
283
  if(is_null($this->_perpage)){
284
+ $this->_perpage = (int)$this->_plugin->GetGlobalOption('items-per-page', 10);
285
  }
286
  return $this->_perpage;
287
  }
298
  * @return string[] List of superadmin usernames.
299
  */
300
  protected function GetSuperAdmins(){
301
+ return $this->_plugin->IsMultisite() ? get_super_admins() : array();
302
  }
303
 
304
  /**
305
  * @return string[] List of admin usernames.
306
  */
307
  protected function GetAdmins(){
308
+ if($this->_plugin->IsMultisite()){
309
  // see: https://gist.github.com/1508426/65785a15b8638d43a9905effb59e4d97319ef8f8
310
  global $wpdb;
311
  $cap = get_current_blog_id();
342
  break;
343
  case 'edit':
344
  $allowed = $this->GetAllowedPluginEditors();
345
+ $allowed = array_merge($allowed, $this->_plugin->IsMultisite() ?
346
  $this->GetSuperAdmins() : $this->GetAdmins()
347
  );
348
  break;
371
  }
372
 
373
  public function IsIncognito(){
374
+ return $this->_plugin->GetGlobalOption('hide-plugin');
375
  }
376
 
377
  public function SetIncognito($enabled){
378
+ return $this->_plugin->SetGlobalOption('hide-plugin', $enabled);
379
  }
380
  }
classes/ViewManager.php CHANGED
@@ -102,9 +102,9 @@ class WSAL_ViewManager {
102
 
103
  // add menu items
104
  foreach($this->views as $view){
105
- if($view->IsVisible()){
106
  add_submenu_page(
107
- $this->views[0]->GetSafeViewName(),
108
  $view->GetTitle(),
109
  $view->GetName(),
110
  'read', // no capability requirement
102
 
103
  // add menu items
104
  foreach($this->views as $view){
105
+ if($view->IsAccessible()){
106
  add_submenu_page(
107
+ $view->IsVisible() ? $this->views[0]->GetSafeViewName() : null,
108
  $view->GetTitle(),
109
  $view->GetName(),
110
  'read', // no capability requirement
classes/Views/Sandbox.php CHANGED
@@ -23,7 +23,7 @@ class WSAL_Views_Sandbox extends WSAL_AbstractView {
23
  return 5;
24
  }
25
 
26
- public function IsVisible(){
27
  return $this->_plugin->settings->CurrentUserCan('edit')
28
  && $this->_plugin->settings->IsSandboxPageEnabled();
29
  }
23
  return 5;
24
  }
25
 
26
+ public function IsAccessible(){
27
  return $this->_plugin->settings->CurrentUserCan('edit')
28
  && $this->_plugin->settings->IsSandboxPageEnabled();
29
  }
defaults.php CHANGED
@@ -23,7 +23,7 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal){
23
  array('name' => 'E_COMPILE_WARNING', 'description' => __('Compile-time warning.', 'wp-security-audit-log')),
24
  array('name' => 'E_USER_ERROR', 'description' => __('User-generated error message.', 'wp-security-audit-log')),
25
  array('name' => 'E_USER_WARNING', 'description' => __('User-generated warning message.', 'wp-security-audit-log')),
26
- array('name' => 'E_USER_NOTICE', 'description' => __('User-generated notice message. ', 'wp-security-audit-log')),
27
  array('name' => 'E_STRICT', 'description' => __('Non-standard/optimal code warning.', 'wp-security-audit-log')),
28
  array('name' => 'E_RECOVERABLE_ERROR', 'description' => __('Catchable fatal error.', 'wp-security-audit-log')),
29
  array('name' => 'E_DEPRECATED', 'description' => __('Run-time deprecation notices.', 'wp-security-audit-log')),
@@ -62,6 +62,10 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal){
62
  array(2027, E_NOTICE, __('User changed the date of a blog post', 'wp-security-audit-log'), __('Changed the date of %PostTitle% blog post from %OldDate% to %NewDate%', 'wp-security-audit-log')),
63
  array(2049, E_NOTICE, __('User sets a post as sticky', 'wp-security-audit-log'), __('Set the post %PostTitle% as Sticky', 'wp-security-audit-log')),
64
  array(2050, E_NOTICE, __('User removes post from sticky', 'wp-security-audit-log'), __('Removed the post %PostTitle% from Sticky', 'wp-security-audit-log')),
 
 
 
 
65
  ),
66
  __('Pages', 'wp-security-audit-log') => array(
67
  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%. Page ID is %PostID%', 'wp-security-audit-log')),
@@ -78,6 +82,10 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal){
78
  array(2028, E_NOTICE, __('User changed the date of a page post', 'wp-security-audit-log'), __('Changed the date of %PostTitle% page from %OldDate% to %NewDate%', 'wp-security-audit-log')),
79
  array(2047, E_NOTICE, __('User changed the parent of a page', 'wp-security-audit-log'), __('Changed the parent of %PostTitle% page from %OldParentName% to %NewParentName%', 'wp-security-audit-log')),
80
  array(2048, E_CRITICAL, __('User changes the template of a page', 'wp-security-audit-log'), __('Changed the template of %PostTitle% page from %OldTemplate% to %NewTemplate%', 'wp-security-audit-log')),
 
 
 
 
81
  ),
82
  __('Custom Posts', 'wp-security-audit-log') => array(
83
  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%. Post ID is %PostID%', 'wp-security-audit-log')),
@@ -93,6 +101,10 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal){
93
  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%', 'wp-security-audit-log')),
94
  array(2040, E_WARNING, __('User changed the visibility of a post with custom post type', 'wp-security-audit-log'), __('Changed the visibility of custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%', 'wp-security-audit-log')),
95
  array(2041, E_NOTICE, __('User changed the date of post with custom post type', 'wp-security-audit-log'), __('Changed the date of custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%', 'wp-security-audit-log')),
 
 
 
 
96
  ),
97
  __('Widgets', 'wp-security-audit-log') => array(
98
  array(2042, E_CRITICAL, __('User added a new widget', 'wp-security-audit-log'), __('Added a new %WidgetName% widget in %Sidebar%', 'wp-security-audit-log')),
23
  array('name' => 'E_COMPILE_WARNING', 'description' => __('Compile-time warning.', 'wp-security-audit-log')),
24
  array('name' => 'E_USER_ERROR', 'description' => __('User-generated error message.', 'wp-security-audit-log')),
25
  array('name' => 'E_USER_WARNING', 'description' => __('User-generated warning message.', 'wp-security-audit-log')),
26
+ array('name' => 'E_USER_NOTICE', 'description' => __('User-generated notice message.', 'wp-security-audit-log')),
27
  array('name' => 'E_STRICT', 'description' => __('Non-standard/optimal code warning.', 'wp-security-audit-log')),
28
  array('name' => 'E_RECOVERABLE_ERROR', 'description' => __('Catchable fatal error.', 'wp-security-audit-log')),
29
  array('name' => 'E_DEPRECATED', 'description' => __('Run-time deprecation notices.', 'wp-security-audit-log')),
62
  array(2027, E_NOTICE, __('User changed the date of a blog post', 'wp-security-audit-log'), __('Changed the date of %PostTitle% blog post from %OldDate% to %NewDate%', 'wp-security-audit-log')),
63
  array(2049, E_NOTICE, __('User sets a post as sticky', 'wp-security-audit-log'), __('Set the post %PostTitle% as Sticky', 'wp-security-audit-log')),
64
  array(2050, E_NOTICE, __('User removes post from sticky', 'wp-security-audit-log'), __('Removed the post %PostTitle% from Sticky', 'wp-security-audit-log')),
65
+ array(2053, E_CRITICAL, __('User creates a custom field for a post', 'wp-security-audit-log'), __('Created custom field %MetaKey% with value %MetaValue% in post %PostTitle%', 'wp-security-audit-log')),
66
+ array(2054, E_CRITICAL, __('User updates a custom field value for a post', 'wp-security-audit-log'), __('Modified the value of custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in post %PostTitle%', 'wp-security-audit-log')),
67
+ array(2055, E_CRITICAL, __('User deletes a custom field from a post', 'wp-security-audit-log'), __('Deleted custom field %MetaKey% with value %MetaValue% from post %PostTitle%', 'wp-security-audit-log')),
68
+ array(2062, E_CRITICAL, __('User updates a custom field name for a post', 'wp-security-audit-log'), __('Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in post %PostTitle%', 'wp-security-audit-log')),
69
  ),
70
  __('Pages', 'wp-security-audit-log') => array(
71
  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%. Page ID is %PostID%', 'wp-security-audit-log')),
82
  array(2028, E_NOTICE, __('User changed the date of a page post', 'wp-security-audit-log'), __('Changed the date of %PostTitle% page from %OldDate% to %NewDate%', 'wp-security-audit-log')),
83
  array(2047, E_NOTICE, __('User changed the parent of a page', 'wp-security-audit-log'), __('Changed the parent of %PostTitle% page from %OldParentName% to %NewParentName%', 'wp-security-audit-log')),
84
  array(2048, E_CRITICAL, __('User changes the template of a page', 'wp-security-audit-log'), __('Changed the template of %PostTitle% page from %OldTemplate% to %NewTemplate%', 'wp-security-audit-log')),
85
+ array(2059, E_CRITICAL, __('User creates a custom field for a page', 'wp-security-audit-log'), __('Created custom field %MetaKey% with value %MetaValue% in page %PostTitle%', 'wp-security-audit-log')),
86
+ array(2060, E_CRITICAL, __('User updates a custom field value for a page', 'wp-security-audit-log'), __('Modified the value of custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in page %PostTitle%', 'wp-security-audit-log')),
87
+ array(2061, E_CRITICAL, __('User deletes a custom field from a page', 'wp-security-audit-log'), __('Deleted custom field %MetaKey% with value %MetaValue% from page %PostTitle%', 'wp-security-audit-log')),
88
+ array(2064, E_CRITICAL, __('User updates a custom field name for a page', 'wp-security-audit-log'), __('Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in page %PostTitle%', 'wp-security-audit-log')),
89
  ),
90
  __('Custom Posts', 'wp-security-audit-log') => array(
91
  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%. Post ID is %PostID%', 'wp-security-audit-log')),
101
  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%', 'wp-security-audit-log')),
102
  array(2040, E_WARNING, __('User changed the visibility of a post with custom post type', 'wp-security-audit-log'), __('Changed the visibility of custom post %PostTitle% of type %PostType% from %OldVisibility% to %NewVisibility%', 'wp-security-audit-log')),
103
  array(2041, E_NOTICE, __('User changed the date of post with custom post type', 'wp-security-audit-log'), __('Changed the date of custom post %PostTitle% of type %PostType% from %OldDate% to %NewDate%', 'wp-security-audit-log')),
104
+ array(2056, E_CRITICAL, __('User creates a custom field for a custom post', 'wp-security-audit-log'), __('Created custom field %MetaKey% with value %MetaValue% in custom post %PostTitle% of type %PostType%', 'wp-security-audit-log')),
105
+ array(2057, E_CRITICAL, __('User updates a custom field for a custom post', 'wp-security-audit-log'), __('Modified the value of custom field %MetaKey% from %MetaValueOld% to %MetaValueNew% in custom post %PostTitle% of type %PostType%', 'wp-security-audit-log')),
106
+ array(2058, E_CRITICAL, __('User deletes a custom field from a custom post', 'wp-security-audit-log'), __('Deleted custom field %MetaKey% with value %MetaValue% from custom post %PostTitle% of type %PostType%', 'wp-security-audit-log')),
107
+ array(2063, E_CRITICAL, __('User updates a custom field name for a custom post', 'wp-security-audit-log'), __('Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom post %PostTitle% of type %PostType%', 'wp-security-audit-log')),
108
  ),
109
  __('Widgets', 'wp-security-audit-log') => array(
110
  array(2042, E_CRITICAL, __('User added a new widget', 'wp-security-audit-log'), __('Added a new %WidgetName% widget in %Sidebar%', 'wp-security-audit-log')),
languages/wp-security-audit-log.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the WP Security Audit Log package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP Security Audit Log 1.2.2\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-security-audit-log\n"
7
- "POT-Creation-Date: 2014-07-16 09:23:29+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -553,7 +553,7 @@ msgid "User-generated warning message."
553
  msgstr ""
554
 
555
  #: defaults.php:26
556
- msgid "User-generated notice message. "
557
  msgstr ""
558
 
559
  #: defaults.php:27
@@ -785,641 +785,757 @@ msgstr ""
785
  msgid "Removed the post %PostTitle% from Sticky"
786
  msgstr ""
787
 
 
 
 
 
 
 
 
 
 
788
  #: defaults.php:66
789
- msgid "Pages"
 
 
 
 
 
 
790
  msgstr ""
791
 
792
  #: defaults.php:67
793
- msgid "User created a new WordPress page and saved it as draft"
794
  msgstr ""
795
 
796
  #: defaults.php:67
797
- msgid "Created a new page called %PostTitle%. Page ID is %PostID%"
 
798
  msgstr ""
799
 
800
  #: defaults.php:68
801
- msgid "User published a WorPress page"
802
  msgstr ""
803
 
804
  #: defaults.php:68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
805
  msgid "Published a page called %PostTitle%. Page URL is %PostUrl%"
806
  msgstr ""
807
 
808
- #: defaults.php:69
809
  msgid "User modified a published WordPress page"
810
  msgstr ""
811
 
812
- #: defaults.php:69
813
  msgid "Modified the published page %PostTitle%. Page URL is %PostUrl%"
814
  msgstr ""
815
 
816
- #: defaults.php:70
817
  msgid "User modified a draft WordPress page"
818
  msgstr ""
819
 
820
- #: defaults.php:70
821
  msgid "Modified the draft page %PostTitle%. page ID is %PostID%"
822
  msgstr ""
823
 
824
- #: defaults.php:71
825
  msgid "User permanently deleted a page from the trash"
826
  msgstr ""
827
 
828
- #: defaults.php:71
829
  msgid "Deleted the page %PostTitle%. Page ID is %PostID%"
830
  msgstr ""
831
 
832
- #: defaults.php:72
833
  msgid "User moved WordPress page to the trash"
834
  msgstr ""
835
 
836
- #: defaults.php:72
837
  msgid "Moved the page %PostTitle% to trash"
838
  msgstr ""
839
 
840
- #: defaults.php:73
841
  msgid "User restored a WordPress page from trash"
842
  msgstr ""
843
 
844
- #: defaults.php:73
845
  msgid "Restored page %PostTitle% from trash"
846
  msgstr ""
847
 
848
- #: defaults.php:74
849
  msgid "User changed page URL"
850
  msgstr ""
851
 
852
- #: defaults.php:74
853
  msgid "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%"
854
  msgstr ""
855
 
856
- #: defaults.php:75
857
  msgid "User changed page author"
858
  msgstr ""
859
 
860
- #: defaults.php:75
861
  msgid "Changed the author of %PostTitle% page from %OldAuthor% to %NewAuthor%"
862
  msgstr ""
863
 
864
- #: defaults.php:76
865
  msgid "User changed page status"
866
  msgstr ""
867
 
868
- #: defaults.php:76
869
  msgid "Changed the status of %PostTitle% page from %OldStatus% to %NewStatus%"
870
  msgstr ""
871
 
872
- #: defaults.php:77
873
  msgid "User changed the visibility of a page post"
874
  msgstr ""
875
 
876
- #: defaults.php:77
877
  msgid ""
878
  "Changed the visibility of %PostTitle% page from %OldVisibility% to "
879
  "%NewVisibility%"
880
  msgstr ""
881
 
882
- #: defaults.php:78
883
  msgid "User changed the date of a page post"
884
  msgstr ""
885
 
886
- #: defaults.php:78
887
  msgid "Changed the date of %PostTitle% page from %OldDate% to %NewDate%"
888
  msgstr ""
889
 
890
- #: defaults.php:79
891
  msgid "User changed the parent of a page"
892
  msgstr ""
893
 
894
- #: defaults.php:79
895
  msgid ""
896
  "Changed the parent of %PostTitle% page from %OldParentName% to %NewParentName"
897
  "%"
898
  msgstr ""
899
 
900
- #: defaults.php:80
901
  msgid "User changes the template of a page"
902
  msgstr ""
903
 
904
- #: defaults.php:80
905
  msgid ""
906
  "Changed the template of %PostTitle% page from %OldTemplate% to %NewTemplate%"
907
  msgstr ""
908
 
909
- #: defaults.php:82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
910
  msgid "Custom Posts"
911
  msgstr ""
912
 
913
- #: defaults.php:83
914
  msgid "User created a new post with custom post type and saved it as draft"
915
  msgstr ""
916
 
917
- #: defaults.php:83
918
  msgid ""
919
  "Created a new custom post called %PostTitle% of type %PostType%. Post ID is "
920
  "%PostID%"
921
  msgstr ""
922
 
923
- #: defaults.php:84
924
  msgid "User published a post with custom post type"
925
  msgstr ""
926
 
927
- #: defaults.php:84
928
  msgid ""
929
  "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%"
930
  msgstr ""
931
 
932
- #: defaults.php:85
933
  msgid "User modified a post with custom post type"
934
  msgstr ""
935
 
936
- #: defaults.php:85
937
  msgid ""
938
  "Modified custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%"
939
  msgstr ""
940
 
941
- #: defaults.php:86
942
  msgid "User modified a draft post with custom post type"
943
  msgstr ""
944
 
945
- #: defaults.php:86
946
  msgid ""
947
  "Modified draft custom post %PostTitle% of type is %PostType%. Post URL is "
948
  "%PostUrl%"
949
  msgstr ""
950
 
951
- #: defaults.php:87
952
  msgid "User permanently deleted post with custom post type"
953
  msgstr ""
954
 
955
- #: defaults.php:87
956
  msgid "Deleted custom post %PostTitle% of type %PostType%"
957
  msgstr ""
958
 
959
- #: defaults.php:88
960
  msgid "User moved post with custom post type to trash"
961
  msgstr ""
962
 
963
- #: defaults.php:88
964
  msgid "Moved custom post %PostTitle% to trash. Post type is %PostType%"
965
  msgstr ""
966
 
967
- #: defaults.php:89
968
  msgid "User restored post with custom post type from trash"
969
  msgstr ""
970
 
971
- #: defaults.php:89
972
  msgid "Restored custom post %PostTitle% of type %PostType% from trash"
973
  msgstr ""
974
 
975
- #: defaults.php:90
976
  msgid "User changed the category of a post with custom post type"
977
  msgstr ""
978
 
979
- #: defaults.php:90
980
  msgid ""
981
  "Changed the category(ies) of custom post %PostTitle% of type %PostType% from "
982
  "%OldCategories% to %NewCategories%"
983
  msgstr ""
984
 
985
- #: defaults.php:91
986
  msgid "User changed the URL of a post with custom post type"
987
  msgstr ""
988
 
989
- #: defaults.php:91
990
  msgid ""
991
  "Changed the URL of custom post %PostTitle% of type %PostType% from %OldUrl% "
992
  "to %NewUrl%"
993
  msgstr ""
994
 
995
- #: defaults.php:92
996
  msgid "User changed the author or post with custom post type"
997
  msgstr ""
998
 
999
- #: defaults.php:92
1000
  msgid ""
1001
  "Changed the author of custom post %PostTitle% of type %PostType% from "
1002
  "%OldAuthor% to %NewAuthor%"
1003
  msgstr ""
1004
 
1005
- #: defaults.php:93
1006
  msgid "User changed the status of post with custom post type"
1007
  msgstr ""
1008
 
1009
- #: defaults.php:93
1010
  msgid ""
1011
  "Changed the status of custom post %PostTitle% of type %PostType% from "
1012
  "%OldStatus% to %NewStatus%"
1013
  msgstr ""
1014
 
1015
- #: defaults.php:94
1016
  msgid "User changed the visibility of a post with custom post type"
1017
  msgstr ""
1018
 
1019
- #: defaults.php:94
1020
  msgid ""
1021
  "Changed the visibility of custom post %PostTitle% of type %PostType% from "
1022
  "%OldVisibility% to %NewVisibility%"
1023
  msgstr ""
1024
 
1025
- #: defaults.php:95
1026
  msgid "User changed the date of post with custom post type"
1027
  msgstr ""
1028
 
1029
- #: defaults.php:95
1030
  msgid ""
1031
  "Changed the date of custom post %PostTitle% of type %PostType% from %OldDate"
1032
  "% to %NewDate%"
1033
  msgstr ""
1034
 
1035
- #: defaults.php:97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1036
  msgid "Widgets"
1037
  msgstr ""
1038
 
1039
- #: defaults.php:98
1040
  msgid "User added a new widget"
1041
  msgstr ""
1042
 
1043
- #: defaults.php:98
1044
  msgid "Added a new %WidgetName% widget in %Sidebar%"
1045
  msgstr ""
1046
 
1047
- #: defaults.php:99
1048
  msgid "User modified a widget"
1049
  msgstr ""
1050
 
1051
- #: defaults.php:99
1052
  msgid "Modified the %WidgetName% widget in %Sidebar%"
1053
  msgstr ""
1054
 
1055
- #: defaults.php:100
1056
  msgid "User deleted widget"
1057
  msgstr ""
1058
 
1059
- #: defaults.php:100
1060
  msgid "Deleted the %WidgetName% widget from %Sidebar%"
1061
  msgstr ""
1062
 
1063
- #: defaults.php:101
1064
  msgid "User moved widget"
1065
  msgstr ""
1066
 
1067
- #: defaults.php:101
1068
  msgid "Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%"
1069
  msgstr ""
1070
 
1071
- #: defaults.php:103
1072
  msgid "User Profiles"
1073
  msgstr ""
1074
 
1075
- #: defaults.php:104
1076
  msgid "A new user was created on WordPress"
1077
  msgstr ""
1078
 
1079
- #: defaults.php:104
1080
  msgid ""
1081
  "User %NewUserData->Username% subscribed with a role of %NewUserData->Roles%"
1082
  msgstr ""
1083
 
1084
- #: defaults.php:105
1085
  msgid "A user created another WordPress user"
1086
  msgstr ""
1087
 
1088
- #: defaults.php:105
1089
  msgid ""
1090
  "Created a new user %NewUserData->Username% with the role of %NewUserData-"
1091
  ">Roles%"
1092
  msgstr ""
1093
 
1094
- #: defaults.php:106
1095
  msgid "The role of a user was changed by another WordPress user"
1096
  msgstr ""
1097
 
1098
- #: defaults.php:106
1099
  msgid "Changed the role of user %TargetUsername% from %OldRole% to %NewRole%"
1100
  msgstr ""
1101
 
1102
- #: defaults.php:107
1103
  msgid "User has changed his or her password"
1104
  msgstr ""
1105
 
1106
- #: defaults.php:107
1107
  msgid "Changed the password"
1108
  msgstr ""
1109
 
1110
- #: defaults.php:108
1111
  msgid "A user changed another user's password"
1112
  msgstr ""
1113
 
1114
- #: defaults.php:108
1115
  msgid ""
1116
  "Changed the password for user %TargetUserData->Username% with the role of "
1117
  "%TargetUserData->Roles%"
1118
  msgstr ""
1119
 
1120
- #: defaults.php:109
1121
  msgid "User changed his or her email address"
1122
  msgstr ""
1123
 
1124
- #: defaults.php:109
1125
  msgid "Changed the email address from %OldEmail% to %NewEmail%"
1126
  msgstr ""
1127
 
1128
- #: defaults.php:110
1129
  msgid "A user changed another user's email address"
1130
  msgstr ""
1131
 
1132
- #: defaults.php:110
1133
  msgid ""
1134
  "Changed the email address of user account %TargetUsername% from %OldEmail% "
1135
  "to %NewEmail%"
1136
  msgstr ""
1137
 
1138
- #: defaults.php:111
1139
  msgid "A user was deleted by another user"
1140
  msgstr ""
1141
 
1142
- #: defaults.php:111
1143
  msgid ""
1144
  "Deleted User %TargetUserData->Username% with the role of %TargetUserData-"
1145
  ">Roles%"
1146
  msgstr ""
1147
 
1148
- #: defaults.php:113
1149
  msgid "Plugins & Themes"
1150
  msgstr ""
1151
 
1152
- #: defaults.php:114
1153
  msgid "User installed a plugin"
1154
  msgstr ""
1155
 
1156
- #: defaults.php:114
1157
  msgid "Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%"
1158
  msgstr ""
1159
 
1160
- #: defaults.php:115
1161
  msgid "User activated a WordPress plugin"
1162
  msgstr ""
1163
 
1164
- #: defaults.php:115
1165
  msgid "Activated the plugin %PluginData->Name% installed in %PluginFile%"
1166
  msgstr ""
1167
 
1168
- #: defaults.php:116
1169
  msgid "User deactivated a WordPress plugin"
1170
  msgstr ""
1171
 
1172
- #: defaults.php:116
1173
  msgid "Deactivated the plugin %PluginData->Name% installed in %PluginFile%"
1174
  msgstr ""
1175
 
1176
- #: defaults.php:117
1177
  msgid "User uninstalled a plugin"
1178
  msgstr ""
1179
 
1180
- #: defaults.php:117
1181
  msgid ""
1182
  "Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile%"
1183
  msgstr ""
1184
 
1185
- #: defaults.php:118
1186
  msgid "User upgraded a plugin"
1187
  msgstr ""
1188
 
1189
- #: defaults.php:118
1190
  msgid "Upgraded the plugin %PluginData->Name% installed in %PluginFile%"
1191
  msgstr ""
1192
 
1193
- #: defaults.php:119
1194
  msgid "User installed a theme"
1195
  msgstr ""
1196
 
1197
- #: defaults.php:119
1198
  msgid "Installed theme \"%Theme->Name%\" in %Theme->get_template_directory%"
1199
  msgstr ""
1200
 
1201
- #: defaults.php:120
1202
  msgid "User activated a theme"
1203
  msgstr ""
1204
 
1205
- #: defaults.php:120
1206
  msgid ""
1207
  "Activated theme \"%Theme->Name%\", installed in %Theme-"
1208
  ">get_template_directory%"
1209
  msgstr ""
1210
 
1211
- #: defaults.php:121
1212
  msgid "User uninstalled a theme"
1213
  msgstr ""
1214
 
1215
- #: defaults.php:121
1216
  msgid ""
1217
  "Deleted theme \"%Theme->Name%\" installed in %Theme->get_template_directory%"
1218
  msgstr ""
1219
 
1220
- #: defaults.php:123
1221
  msgid "System Activity"
1222
  msgstr ""
1223
 
1224
- #: defaults.php:124
1225
  msgid "Unknown Error"
1226
  msgstr ""
1227
 
1228
- #: defaults.php:124
1229
  msgid "An unexpected error has occurred"
1230
  msgstr ""
1231
 
1232
- #: defaults.php:125
1233
  msgid "PHP error"
1234
  msgstr ""
1235
 
1236
- #: defaults.php:125 defaults.php:126 defaults.php:127 defaults.php:128
1237
- #: defaults.php:129
1238
  msgid "%Message%"
1239
  msgstr ""
1240
 
1241
- #: defaults.php:126
1242
  msgid "PHP warning"
1243
  msgstr ""
1244
 
1245
- #: defaults.php:127
1246
  msgid "PHP notice"
1247
  msgstr ""
1248
 
1249
- #: defaults.php:128
1250
  msgid "PHP exception"
1251
  msgstr ""
1252
 
1253
- #: defaults.php:129
1254
  msgid "PHP shutdown error"
1255
  msgstr ""
1256
 
1257
- #: defaults.php:130
1258
  msgid "Events automatically pruned by system"
1259
  msgstr ""
1260
 
1261
- #: defaults.php:130
1262
  msgid "%EventCount% event(s) automatically deleted by system"
1263
  msgstr ""
1264
 
1265
- #: defaults.php:131
1266
  msgid "Option Anyone Can Register in WordPress settings changed"
1267
  msgstr ""
1268
 
1269
- #: defaults.php:131
1270
  msgid "%NewValue% the option \"Anyone can register\""
1271
  msgstr ""
1272
 
1273
- #: defaults.php:132
1274
  msgid "New User Default Role changed"
1275
  msgstr ""
1276
 
1277
- #: defaults.php:132
1278
  msgid "Changed the New User Default Role from %OldRole% to %NewRole%"
1279
  msgstr ""
1280
 
1281
- #: defaults.php:133
1282
  msgid "WordPress Administrator Notification email changed"
1283
  msgstr ""
1284
 
1285
- #: defaults.php:133
1286
  msgid ""
1287
  "Changed the WordPress administrator notifications email address from "
1288
  "%OldEmail% to %NewEmail%"
1289
  msgstr ""
1290
 
1291
- #: defaults.php:134
1292
  msgid "WordPress was updated"
1293
  msgstr ""
1294
 
1295
- #: defaults.php:134
1296
  msgid "Updated WordPress from version %OldVersion% to %NewVersion%"
1297
  msgstr ""
1298
 
1299
- #: defaults.php:135
1300
  msgid "User changes the WordPress Permalinks"
1301
  msgstr ""
1302
 
1303
- #: defaults.php:135
1304
  msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%"
1305
  msgstr ""
1306
 
1307
- #: defaults.php:137
1308
  msgid "MultiSite"
1309
  msgstr ""
1310
 
1311
- #: defaults.php:138
1312
  msgid "User granted Super Admin privileges"
1313
  msgstr ""
1314
 
1315
- #: defaults.php:138
1316
  msgid "Granted Super Admin privileges to %TargetUsername%"
1317
  msgstr ""
1318
 
1319
- #: defaults.php:139
1320
  msgid "User revoked from Super Admin privileges"
1321
  msgstr ""
1322
 
1323
- #: defaults.php:139
1324
  msgid "Revoked Super Admin privileges from %TargetUsername%"
1325
  msgstr ""
1326
 
1327
- #: defaults.php:140
1328
  msgid "Existing user added to a site"
1329
  msgstr ""
1330
 
1331
- #: defaults.php:140
1332
  msgid ""
1333
  "Added existing user %TargetUsername% with %TargetUserRole% role to site "
1334
  "%SiteName%"
1335
  msgstr ""
1336
 
1337
- #: defaults.php:141
1338
  msgid "User removed from site"
1339
  msgstr ""
1340
 
1341
- #: defaults.php:141
1342
  msgid ""
1343
  "Removed user %TargetUsername% with role %TargetUserRole% from %SiteName% site"
1344
  msgstr ""
1345
 
1346
- #: defaults.php:142
1347
  msgid "New network user created"
1348
  msgstr ""
1349
 
1350
- #: defaults.php:142
1351
  msgid "Created a new network user %NewUserData->Username%"
1352
  msgstr ""
1353
 
1354
- #: defaults.php:143
1355
  msgid "New site added on network"
1356
  msgstr ""
1357
 
1358
- #: defaults.php:143
1359
  msgid "Added site %SiteName% to the network"
1360
  msgstr ""
1361
 
1362
- #: defaults.php:144
1363
  msgid "Existing site archived"
1364
  msgstr ""
1365
 
1366
- #: defaults.php:144
1367
  msgid "Archived site %SiteName%"
1368
  msgstr ""
1369
 
1370
- #: defaults.php:145
1371
  msgid "Archived site has been unarchived"
1372
  msgstr ""
1373
 
1374
- #: defaults.php:145
1375
  msgid "Unarchived site %SiteName%"
1376
  msgstr ""
1377
 
1378
- #: defaults.php:146
1379
  msgid "Deactivated site has been activated"
1380
  msgstr ""
1381
 
1382
- #: defaults.php:146
1383
  msgid "Activated site %SiteName%"
1384
  msgstr ""
1385
 
1386
- #: defaults.php:147
1387
  msgid "Site has been deactivated"
1388
  msgstr ""
1389
 
1390
- #: defaults.php:147
1391
  msgid "Deactivated site %SiteName%"
1392
  msgstr ""
1393
 
1394
- #: defaults.php:148
1395
  msgid "Existing site deleted from network"
1396
  msgstr ""
1397
 
1398
- #: defaults.php:148
1399
  msgid "Deleted site %SiteName%"
1400
  msgstr ""
1401
 
1402
- #: defaults.php:149
1403
  msgid "Activated theme on network"
1404
  msgstr ""
1405
 
1406
- #: defaults.php:149
1407
  msgid ""
1408
  "Network activated %Theme->Name% theme installed in %Theme-"
1409
  ">get_template_directory%"
1410
  msgstr ""
1411
 
1412
- #: defaults.php:150
1413
  msgid "Deactivated theme from network"
1414
  msgstr ""
1415
 
1416
- #: defaults.php:150
1417
  msgid ""
1418
  "Network deactivated %Theme->Name% theme installed in %Theme-"
1419
  ">get_template_directory%"
1420
  msgstr ""
1421
 
1422
- #: wp-security-audit-log.php:135
1423
  msgid ""
1424
  "You are using a version of PHP that is older than %s, which is no longer "
1425
  "supported.<br/>Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
2
  # This file is distributed under the same license as the WP Security Audit Log package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WP Security Audit Log 1.2.3\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-security-audit-log\n"
7
+ "POT-Creation-Date: 2014-07-23 10:21:20+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
553
  msgstr ""
554
 
555
  #: defaults.php:26
556
+ msgid "User-generated notice message."
557
  msgstr ""
558
 
559
  #: defaults.php:27
785
  msgid "Removed the post %PostTitle% from Sticky"
786
  msgstr ""
787
 
788
+ #: defaults.php:65
789
+ msgid "User creates a custom field for a post"
790
+ msgstr ""
791
+
792
+ #: defaults.php:65
793
+ msgid ""
794
+ "Created custom field %MetaKey% with value %MetaValue% in post %PostTitle%"
795
+ msgstr ""
796
+
797
  #: defaults.php:66
798
+ msgid "User updates a custom field value for a post"
799
+ msgstr ""
800
+
801
+ #: defaults.php:66
802
+ msgid ""
803
+ "Modified the value of custom field %MetaKey% from %MetaValueOld% to "
804
+ "%MetaValueNew% in post %PostTitle%"
805
  msgstr ""
806
 
807
  #: defaults.php:67
808
+ msgid "User deletes a custom field from a post"
809
  msgstr ""
810
 
811
  #: defaults.php:67
812
+ msgid ""
813
+ "Deleted custom field %MetaKey% with value %MetaValue% from post %PostTitle%"
814
  msgstr ""
815
 
816
  #: defaults.php:68
817
+ msgid "User updates a custom field name for a post"
818
  msgstr ""
819
 
820
  #: defaults.php:68
821
+ msgid ""
822
+ "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in post "
823
+ "%PostTitle%"
824
+ msgstr ""
825
+
826
+ #: defaults.php:70
827
+ msgid "Pages"
828
+ msgstr ""
829
+
830
+ #: defaults.php:71
831
+ msgid "User created a new WordPress page and saved it as draft"
832
+ msgstr ""
833
+
834
+ #: defaults.php:71
835
+ msgid "Created a new page called %PostTitle%. Page ID is %PostID%"
836
+ msgstr ""
837
+
838
+ #: defaults.php:72
839
+ msgid "User published a WorPress page"
840
+ msgstr ""
841
+
842
+ #: defaults.php:72
843
  msgid "Published a page called %PostTitle%. Page URL is %PostUrl%"
844
  msgstr ""
845
 
846
+ #: defaults.php:73
847
  msgid "User modified a published WordPress page"
848
  msgstr ""
849
 
850
+ #: defaults.php:73
851
  msgid "Modified the published page %PostTitle%. Page URL is %PostUrl%"
852
  msgstr ""
853
 
854
+ #: defaults.php:74
855
  msgid "User modified a draft WordPress page"
856
  msgstr ""
857
 
858
+ #: defaults.php:74
859
  msgid "Modified the draft page %PostTitle%. page ID is %PostID%"
860
  msgstr ""
861
 
862
+ #: defaults.php:75
863
  msgid "User permanently deleted a page from the trash"
864
  msgstr ""
865
 
866
+ #: defaults.php:75
867
  msgid "Deleted the page %PostTitle%. Page ID is %PostID%"
868
  msgstr ""
869
 
870
+ #: defaults.php:76
871
  msgid "User moved WordPress page to the trash"
872
  msgstr ""
873
 
874
+ #: defaults.php:76
875
  msgid "Moved the page %PostTitle% to trash"
876
  msgstr ""
877
 
878
+ #: defaults.php:77
879
  msgid "User restored a WordPress page from trash"
880
  msgstr ""
881
 
882
+ #: defaults.php:77
883
  msgid "Restored page %PostTitle% from trash"
884
  msgstr ""
885
 
886
+ #: defaults.php:78
887
  msgid "User changed page URL"
888
  msgstr ""
889
 
890
+ #: defaults.php:78
891
  msgid "Changed the URL of the page %PostTitle% from %OldUrl% to %NewUrl%"
892
  msgstr ""
893
 
894
+ #: defaults.php:79
895
  msgid "User changed page author"
896
  msgstr ""
897
 
898
+ #: defaults.php:79
899
  msgid "Changed the author of %PostTitle% page from %OldAuthor% to %NewAuthor%"
900
  msgstr ""
901
 
902
+ #: defaults.php:80
903
  msgid "User changed page status"
904
  msgstr ""
905
 
906
+ #: defaults.php:80
907
  msgid "Changed the status of %PostTitle% page from %OldStatus% to %NewStatus%"
908
  msgstr ""
909
 
910
+ #: defaults.php:81
911
  msgid "User changed the visibility of a page post"
912
  msgstr ""
913
 
914
+ #: defaults.php:81
915
  msgid ""
916
  "Changed the visibility of %PostTitle% page from %OldVisibility% to "
917
  "%NewVisibility%"
918
  msgstr ""
919
 
920
+ #: defaults.php:82
921
  msgid "User changed the date of a page post"
922
  msgstr ""
923
 
924
+ #: defaults.php:82
925
  msgid "Changed the date of %PostTitle% page from %OldDate% to %NewDate%"
926
  msgstr ""
927
 
928
+ #: defaults.php:83
929
  msgid "User changed the parent of a page"
930
  msgstr ""
931
 
932
+ #: defaults.php:83
933
  msgid ""
934
  "Changed the parent of %PostTitle% page from %OldParentName% to %NewParentName"
935
  "%"
936
  msgstr ""
937
 
938
+ #: defaults.php:84
939
  msgid "User changes the template of a page"
940
  msgstr ""
941
 
942
+ #: defaults.php:84
943
  msgid ""
944
  "Changed the template of %PostTitle% page from %OldTemplate% to %NewTemplate%"
945
  msgstr ""
946
 
947
+ #: defaults.php:85
948
+ msgid "User creates a custom field for a page"
949
+ msgstr ""
950
+
951
+ #: defaults.php:85
952
+ msgid ""
953
+ "Created custom field %MetaKey% with value %MetaValue% in page %PostTitle%"
954
+ msgstr ""
955
+
956
+ #: defaults.php:86
957
+ msgid "User updates a custom field value for a page"
958
+ msgstr ""
959
+
960
+ #: defaults.php:86
961
+ msgid ""
962
+ "Modified the value of custom field %MetaKey% from %MetaValueOld% to "
963
+ "%MetaValueNew% in page %PostTitle%"
964
+ msgstr ""
965
+
966
+ #: defaults.php:87
967
+ msgid "User deletes a custom field from a page"
968
+ msgstr ""
969
+
970
+ #: defaults.php:87
971
+ msgid ""
972
+ "Deleted custom field %MetaKey% with value %MetaValue% from page %PostTitle%"
973
+ msgstr ""
974
+
975
+ #: defaults.php:88
976
+ msgid "User updates a custom field name for a page"
977
+ msgstr ""
978
+
979
+ #: defaults.php:88
980
+ msgid ""
981
+ "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in page "
982
+ "%PostTitle%"
983
+ msgstr ""
984
+
985
+ #: defaults.php:90
986
  msgid "Custom Posts"
987
  msgstr ""
988
 
989
+ #: defaults.php:91
990
  msgid "User created a new post with custom post type and saved it as draft"
991
  msgstr ""
992
 
993
+ #: defaults.php:91
994
  msgid ""
995
  "Created a new custom post called %PostTitle% of type %PostType%. Post ID is "
996
  "%PostID%"
997
  msgstr ""
998
 
999
+ #: defaults.php:92
1000
  msgid "User published a post with custom post type"
1001
  msgstr ""
1002
 
1003
+ #: defaults.php:92
1004
  msgid ""
1005
  "Published a custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%"
1006
  msgstr ""
1007
 
1008
+ #: defaults.php:93
1009
  msgid "User modified a post with custom post type"
1010
  msgstr ""
1011
 
1012
+ #: defaults.php:93
1013
  msgid ""
1014
  "Modified custom post %PostTitle% of type %PostType%. Post URL is %PostUrl%"
1015
  msgstr ""
1016
 
1017
+ #: defaults.php:94
1018
  msgid "User modified a draft post with custom post type"
1019
  msgstr ""
1020
 
1021
+ #: defaults.php:94
1022
  msgid ""
1023
  "Modified draft custom post %PostTitle% of type is %PostType%. Post URL is "
1024
  "%PostUrl%"
1025
  msgstr ""
1026
 
1027
+ #: defaults.php:95
1028
  msgid "User permanently deleted post with custom post type"
1029
  msgstr ""
1030
 
1031
+ #: defaults.php:95
1032
  msgid "Deleted custom post %PostTitle% of type %PostType%"
1033
  msgstr ""
1034
 
1035
+ #: defaults.php:96
1036
  msgid "User moved post with custom post type to trash"
1037
  msgstr ""
1038
 
1039
+ #: defaults.php:96
1040
  msgid "Moved custom post %PostTitle% to trash. Post type is %PostType%"
1041
  msgstr ""
1042
 
1043
+ #: defaults.php:97
1044
  msgid "User restored post with custom post type from trash"
1045
  msgstr ""
1046
 
1047
+ #: defaults.php:97
1048
  msgid "Restored custom post %PostTitle% of type %PostType% from trash"
1049
  msgstr ""
1050
 
1051
+ #: defaults.php:98
1052
  msgid "User changed the category of a post with custom post type"
1053
  msgstr ""
1054
 
1055
+ #: defaults.php:98
1056
  msgid ""
1057
  "Changed the category(ies) of custom post %PostTitle% of type %PostType% from "
1058
  "%OldCategories% to %NewCategories%"
1059
  msgstr ""
1060
 
1061
+ #: defaults.php:99
1062
  msgid "User changed the URL of a post with custom post type"
1063
  msgstr ""
1064
 
1065
+ #: defaults.php:99
1066
  msgid ""
1067
  "Changed the URL of custom post %PostTitle% of type %PostType% from %OldUrl% "
1068
  "to %NewUrl%"
1069
  msgstr ""
1070
 
1071
+ #: defaults.php:100
1072
  msgid "User changed the author or post with custom post type"
1073
  msgstr ""
1074
 
1075
+ #: defaults.php:100
1076
  msgid ""
1077
  "Changed the author of custom post %PostTitle% of type %PostType% from "
1078
  "%OldAuthor% to %NewAuthor%"
1079
  msgstr ""
1080
 
1081
+ #: defaults.php:101
1082
  msgid "User changed the status of post with custom post type"
1083
  msgstr ""
1084
 
1085
+ #: defaults.php:101
1086
  msgid ""
1087
  "Changed the status of custom post %PostTitle% of type %PostType% from "
1088
  "%OldStatus% to %NewStatus%"
1089
  msgstr ""
1090
 
1091
+ #: defaults.php:102
1092
  msgid "User changed the visibility of a post with custom post type"
1093
  msgstr ""
1094
 
1095
+ #: defaults.php:102
1096
  msgid ""
1097
  "Changed the visibility of custom post %PostTitle% of type %PostType% from "
1098
  "%OldVisibility% to %NewVisibility%"
1099
  msgstr ""
1100
 
1101
+ #: defaults.php:103
1102
  msgid "User changed the date of post with custom post type"
1103
  msgstr ""
1104
 
1105
+ #: defaults.php:103
1106
  msgid ""
1107
  "Changed the date of custom post %PostTitle% of type %PostType% from %OldDate"
1108
  "% to %NewDate%"
1109
  msgstr ""
1110
 
1111
+ #: defaults.php:104
1112
+ msgid "User creates a custom field for a custom post"
1113
+ msgstr ""
1114
+
1115
+ #: defaults.php:104
1116
+ msgid ""
1117
+ "Created custom field %MetaKey% with value %MetaValue% in custom post "
1118
+ "%PostTitle% of type %PostType%"
1119
+ msgstr ""
1120
+
1121
+ #: defaults.php:105
1122
+ msgid "User updates a custom field for a custom post"
1123
+ msgstr ""
1124
+
1125
+ #: defaults.php:105
1126
+ msgid ""
1127
+ "Modified the value of custom field %MetaKey% from %MetaValueOld% to "
1128
+ "%MetaValueNew% in custom post %PostTitle% of type %PostType%"
1129
+ msgstr ""
1130
+
1131
+ #: defaults.php:106
1132
+ msgid "User deletes a custom field from a custom post"
1133
+ msgstr ""
1134
+
1135
+ #: defaults.php:106
1136
+ msgid ""
1137
+ "Deleted custom field %MetaKey% with value %MetaValue% from custom post "
1138
+ "%PostTitle% of type %PostType%"
1139
+ msgstr ""
1140
+
1141
+ #: defaults.php:107
1142
+ msgid "User updates a custom field name for a custom post"
1143
+ msgstr ""
1144
+
1145
+ #: defaults.php:107
1146
+ msgid ""
1147
+ "Changed the custom field name from %MetaKeyOld% to %MetaKeyNew% in custom "
1148
+ "post %PostTitle% of type %PostType%"
1149
+ msgstr ""
1150
+
1151
+ #: defaults.php:109
1152
  msgid "Widgets"
1153
  msgstr ""
1154
 
1155
+ #: defaults.php:110
1156
  msgid "User added a new widget"
1157
  msgstr ""
1158
 
1159
+ #: defaults.php:110
1160
  msgid "Added a new %WidgetName% widget in %Sidebar%"
1161
  msgstr ""
1162
 
1163
+ #: defaults.php:111
1164
  msgid "User modified a widget"
1165
  msgstr ""
1166
 
1167
+ #: defaults.php:111
1168
  msgid "Modified the %WidgetName% widget in %Sidebar%"
1169
  msgstr ""
1170
 
1171
+ #: defaults.php:112
1172
  msgid "User deleted widget"
1173
  msgstr ""
1174
 
1175
+ #: defaults.php:112
1176
  msgid "Deleted the %WidgetName% widget from %Sidebar%"
1177
  msgstr ""
1178
 
1179
+ #: defaults.php:113
1180
  msgid "User moved widget"
1181
  msgstr ""
1182
 
1183
+ #: defaults.php:113
1184
  msgid "Moved the %WidgetName% widget from %OldSidebar% to %NewSidebar%"
1185
  msgstr ""
1186
 
1187
+ #: defaults.php:115
1188
  msgid "User Profiles"
1189
  msgstr ""
1190
 
1191
+ #: defaults.php:116
1192
  msgid "A new user was created on WordPress"
1193
  msgstr ""
1194
 
1195
+ #: defaults.php:116
1196
  msgid ""
1197
  "User %NewUserData->Username% subscribed with a role of %NewUserData->Roles%"
1198
  msgstr ""
1199
 
1200
+ #: defaults.php:117
1201
  msgid "A user created another WordPress user"
1202
  msgstr ""
1203
 
1204
+ #: defaults.php:117
1205
  msgid ""
1206
  "Created a new user %NewUserData->Username% with the role of %NewUserData-"
1207
  ">Roles%"
1208
  msgstr ""
1209
 
1210
+ #: defaults.php:118
1211
  msgid "The role of a user was changed by another WordPress user"
1212
  msgstr ""
1213
 
1214
+ #: defaults.php:118
1215
  msgid "Changed the role of user %TargetUsername% from %OldRole% to %NewRole%"
1216
  msgstr ""
1217
 
1218
+ #: defaults.php:119
1219
  msgid "User has changed his or her password"
1220
  msgstr ""
1221
 
1222
+ #: defaults.php:119
1223
  msgid "Changed the password"
1224
  msgstr ""
1225
 
1226
+ #: defaults.php:120
1227
  msgid "A user changed another user's password"
1228
  msgstr ""
1229
 
1230
+ #: defaults.php:120
1231
  msgid ""
1232
  "Changed the password for user %TargetUserData->Username% with the role of "
1233
  "%TargetUserData->Roles%"
1234
  msgstr ""
1235
 
1236
+ #: defaults.php:121
1237
  msgid "User changed his or her email address"
1238
  msgstr ""
1239
 
1240
+ #: defaults.php:121
1241
  msgid "Changed the email address from %OldEmail% to %NewEmail%"
1242
  msgstr ""
1243
 
1244
+ #: defaults.php:122
1245
  msgid "A user changed another user's email address"
1246
  msgstr ""
1247
 
1248
+ #: defaults.php:122
1249
  msgid ""
1250
  "Changed the email address of user account %TargetUsername% from %OldEmail% "
1251
  "to %NewEmail%"
1252
  msgstr ""
1253
 
1254
+ #: defaults.php:123
1255
  msgid "A user was deleted by another user"
1256
  msgstr ""
1257
 
1258
+ #: defaults.php:123
1259
  msgid ""
1260
  "Deleted User %TargetUserData->Username% with the role of %TargetUserData-"
1261
  ">Roles%"
1262
  msgstr ""
1263
 
1264
+ #: defaults.php:125
1265
  msgid "Plugins & Themes"
1266
  msgstr ""
1267
 
1268
+ #: defaults.php:126
1269
  msgid "User installed a plugin"
1270
  msgstr ""
1271
 
1272
+ #: defaults.php:126
1273
  msgid "Installed the plugin %Plugin->Name% in %Plugin->plugin_dir_path%"
1274
  msgstr ""
1275
 
1276
+ #: defaults.php:127
1277
  msgid "User activated a WordPress plugin"
1278
  msgstr ""
1279
 
1280
+ #: defaults.php:127
1281
  msgid "Activated the plugin %PluginData->Name% installed in %PluginFile%"
1282
  msgstr ""
1283
 
1284
+ #: defaults.php:128
1285
  msgid "User deactivated a WordPress plugin"
1286
  msgstr ""
1287
 
1288
+ #: defaults.php:128
1289
  msgid "Deactivated the plugin %PluginData->Name% installed in %PluginFile%"
1290
  msgstr ""
1291
 
1292
+ #: defaults.php:129
1293
  msgid "User uninstalled a plugin"
1294
  msgstr ""
1295
 
1296
+ #: defaults.php:129
1297
  msgid ""
1298
  "Uninstalled the plugin %PluginData->Name% which was installed in %PluginFile%"
1299
  msgstr ""
1300
 
1301
+ #: defaults.php:130
1302
  msgid "User upgraded a plugin"
1303
  msgstr ""
1304
 
1305
+ #: defaults.php:130
1306
  msgid "Upgraded the plugin %PluginData->Name% installed in %PluginFile%"
1307
  msgstr ""
1308
 
1309
+ #: defaults.php:131
1310
  msgid "User installed a theme"
1311
  msgstr ""
1312
 
1313
+ #: defaults.php:131
1314
  msgid "Installed theme \"%Theme->Name%\" in %Theme->get_template_directory%"
1315
  msgstr ""
1316
 
1317
+ #: defaults.php:132
1318
  msgid "User activated a theme"
1319
  msgstr ""
1320
 
1321
+ #: defaults.php:132
1322
  msgid ""
1323
  "Activated theme \"%Theme->Name%\", installed in %Theme-"
1324
  ">get_template_directory%"
1325
  msgstr ""
1326
 
1327
+ #: defaults.php:133
1328
  msgid "User uninstalled a theme"
1329
  msgstr ""
1330
 
1331
+ #: defaults.php:133
1332
  msgid ""
1333
  "Deleted theme \"%Theme->Name%\" installed in %Theme->get_template_directory%"
1334
  msgstr ""
1335
 
1336
+ #: defaults.php:135
1337
  msgid "System Activity"
1338
  msgstr ""
1339
 
1340
+ #: defaults.php:136
1341
  msgid "Unknown Error"
1342
  msgstr ""
1343
 
1344
+ #: defaults.php:136
1345
  msgid "An unexpected error has occurred"
1346
  msgstr ""
1347
 
1348
+ #: defaults.php:137
1349
  msgid "PHP error"
1350
  msgstr ""
1351
 
1352
+ #: defaults.php:137 defaults.php:138 defaults.php:139 defaults.php:140
1353
+ #: defaults.php:141
1354
  msgid "%Message%"
1355
  msgstr ""
1356
 
1357
+ #: defaults.php:138
1358
  msgid "PHP warning"
1359
  msgstr ""
1360
 
1361
+ #: defaults.php:139
1362
  msgid "PHP notice"
1363
  msgstr ""
1364
 
1365
+ #: defaults.php:140
1366
  msgid "PHP exception"
1367
  msgstr ""
1368
 
1369
+ #: defaults.php:141
1370
  msgid "PHP shutdown error"
1371
  msgstr ""
1372
 
1373
+ #: defaults.php:142
1374
  msgid "Events automatically pruned by system"
1375
  msgstr ""
1376
 
1377
+ #: defaults.php:142
1378
  msgid "%EventCount% event(s) automatically deleted by system"
1379
  msgstr ""
1380
 
1381
+ #: defaults.php:143
1382
  msgid "Option Anyone Can Register in WordPress settings changed"
1383
  msgstr ""
1384
 
1385
+ #: defaults.php:143
1386
  msgid "%NewValue% the option \"Anyone can register\""
1387
  msgstr ""
1388
 
1389
+ #: defaults.php:144
1390
  msgid "New User Default Role changed"
1391
  msgstr ""
1392
 
1393
+ #: defaults.php:144
1394
  msgid "Changed the New User Default Role from %OldRole% to %NewRole%"
1395
  msgstr ""
1396
 
1397
+ #: defaults.php:145
1398
  msgid "WordPress Administrator Notification email changed"
1399
  msgstr ""
1400
 
1401
+ #: defaults.php:145
1402
  msgid ""
1403
  "Changed the WordPress administrator notifications email address from "
1404
  "%OldEmail% to %NewEmail%"
1405
  msgstr ""
1406
 
1407
+ #: defaults.php:146
1408
  msgid "WordPress was updated"
1409
  msgstr ""
1410
 
1411
+ #: defaults.php:146
1412
  msgid "Updated WordPress from version %OldVersion% to %NewVersion%"
1413
  msgstr ""
1414
 
1415
+ #: defaults.php:147
1416
  msgid "User changes the WordPress Permalinks"
1417
  msgstr ""
1418
 
1419
+ #: defaults.php:147
1420
  msgid "Changed the WordPress permalinks from %OldPattern% to %NewPattern%"
1421
  msgstr ""
1422
 
1423
+ #: defaults.php:149
1424
  msgid "MultiSite"
1425
  msgstr ""
1426
 
1427
+ #: defaults.php:150
1428
  msgid "User granted Super Admin privileges"
1429
  msgstr ""
1430
 
1431
+ #: defaults.php:150
1432
  msgid "Granted Super Admin privileges to %TargetUsername%"
1433
  msgstr ""
1434
 
1435
+ #: defaults.php:151
1436
  msgid "User revoked from Super Admin privileges"
1437
  msgstr ""
1438
 
1439
+ #: defaults.php:151
1440
  msgid "Revoked Super Admin privileges from %TargetUsername%"
1441
  msgstr ""
1442
 
1443
+ #: defaults.php:152
1444
  msgid "Existing user added to a site"
1445
  msgstr ""
1446
 
1447
+ #: defaults.php:152
1448
  msgid ""
1449
  "Added existing user %TargetUsername% with %TargetUserRole% role to site "
1450
  "%SiteName%"
1451
  msgstr ""
1452
 
1453
+ #: defaults.php:153
1454
  msgid "User removed from site"
1455
  msgstr ""
1456
 
1457
+ #: defaults.php:153
1458
  msgid ""
1459
  "Removed user %TargetUsername% with role %TargetUserRole% from %SiteName% site"
1460
  msgstr ""
1461
 
1462
+ #: defaults.php:154
1463
  msgid "New network user created"
1464
  msgstr ""
1465
 
1466
+ #: defaults.php:154
1467
  msgid "Created a new network user %NewUserData->Username%"
1468
  msgstr ""
1469
 
1470
+ #: defaults.php:155
1471
  msgid "New site added on network"
1472
  msgstr ""
1473
 
1474
+ #: defaults.php:155
1475
  msgid "Added site %SiteName% to the network"
1476
  msgstr ""
1477
 
1478
+ #: defaults.php:156
1479
  msgid "Existing site archived"
1480
  msgstr ""
1481
 
1482
+ #: defaults.php:156
1483
  msgid "Archived site %SiteName%"
1484
  msgstr ""
1485
 
1486
+ #: defaults.php:157
1487
  msgid "Archived site has been unarchived"
1488
  msgstr ""
1489
 
1490
+ #: defaults.php:157
1491
  msgid "Unarchived site %SiteName%"
1492
  msgstr ""
1493
 
1494
+ #: defaults.php:158
1495
  msgid "Deactivated site has been activated"
1496
  msgstr ""
1497
 
1498
+ #: defaults.php:158
1499
  msgid "Activated site %SiteName%"
1500
  msgstr ""
1501
 
1502
+ #: defaults.php:159
1503
  msgid "Site has been deactivated"
1504
  msgstr ""
1505
 
1506
+ #: defaults.php:159
1507
  msgid "Deactivated site %SiteName%"
1508
  msgstr ""
1509
 
1510
+ #: defaults.php:160
1511
  msgid "Existing site deleted from network"
1512
  msgstr ""
1513
 
1514
+ #: defaults.php:160
1515
  msgid "Deleted site %SiteName%"
1516
  msgstr ""
1517
 
1518
+ #: defaults.php:161
1519
  msgid "Activated theme on network"
1520
  msgstr ""
1521
 
1522
+ #: defaults.php:161
1523
  msgid ""
1524
  "Network activated %Theme->Name% theme installed in %Theme-"
1525
  ">get_template_directory%"
1526
  msgstr ""
1527
 
1528
+ #: defaults.php:162
1529
  msgid "Deactivated theme from network"
1530
  msgstr ""
1531
 
1532
+ #: defaults.php:162
1533
  msgid ""
1534
  "Network deactivated %Theme->Name% theme installed in %Theme-"
1535
  ">get_template_directory%"
1536
  msgstr ""
1537
 
1538
+ #: wp-security-audit-log.php:142
1539
  msgid ""
1540
  "You are using a version of PHP that is older than %s, which is no longer "
1541
  "supported.<br/>Contact us on <a href=\"mailto:plugins@wpwhitesecurity.com"
readme.txt CHANGED
@@ -7,7 +7,7 @@ License URI: http://www.gnu.org/licenses/gpl.html
7
  Tags: wordpress security plugin, wordpress security audit log, audit log, wordpress log, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, security audit trail, wordpress security alerts, wordpress monitor, wordpress security monitor, wordpress admin, wordpress admin monitoring, analytics, activity, admin, multisite, wordpress multisite
8
  Requires at least: 3.6
9
  Tested up to: 3.9.1
10
- Stable tag: 1.2.2
11
 
12
  Identify WordPress issues before they become a security problem by keeping an audit log of users and all of the under the hood WordPress activity.
13
 
@@ -61,9 +61,9 @@ We need help translating the plugin and the WordPress Security Events. If you're
61
  * German translation by [Mourad Louha](http://excel-translator.de)
62
 
63
  = WordPress & PHP Errors Monitoring Tools =
64
- Plugins and themes customizations are most probably the norm of the day on large WordPress websites, not to mention the installation of new plugins and components. Unforunately sometimes such changes create problems and it is not always easy and possible to setup real live scenarios and replicate specific problems or bugs.
65
 
66
- With WP Security Audit Log now it is easier than ever before to monitor your plugins', theme's and other code behaviour, it will generate a alert when a PHP error, warning, exception or shutdown is detected. It is also possible to log all HTTP GET and POST requests that are reaching your WordPress installation to a log file with WP Security Audit Log. Simply enable the PHP Errors monitoring or logging from the plugins settings.
67
 
68
  = Other Noteworthy Features =
69
  WP Security Audit Log plugin also has a number of features that make WordPress and WordPress multisite monitoring and auditing easier, such as:
@@ -74,17 +74,8 @@ WP Security Audit Log plugin also has a number of features that make WordPress a
74
  * Configure WordPress security alerts purging by time or by number of alerts
75
  * User role is reported in alerts for a complete overview of what is happening
76
  * User avatar is reported in the alerts for better recognizability
77
- * Enable or disable any security alerts so they are not logged
78
- * And much more...
79
-
80
  * From where WordPress users are logging in
81
- * Users who created. modified or deleted categories
82
- * Users who created a blog post, page or a custom post
83
- * Users who published a blog post, page or a custom post
84
- * Users who modified published WordPress content such as custom posts, pages or a blog posts
85
- * Users who moves content such as blog posts or WordPress pages to trash or permanently deletes it
86
- * Users who modify WordPress widgets
87
- * Uses who upload or delete any sort of files
88
  * and much more...
89
 
90
  = As Featured On: =
@@ -139,38 +130,45 @@ Yes, WP Security Audit Log works on WordPress Multisite networks, i.e. it can mo
139
 
140
  == Changelog ==
141
 
 
 
 
 
 
 
 
 
 
142
  = 1.2.2 (2014-07-16) =
143
  * New Features
144
- * Italian translation available thanks to [Leonardo Musumeci](http://leonardomusumeci.net/)
145
 
146
  * Improvements
147
- * Added a warning to developer options
148
- * "Hidden" developer options from default settings. User has to click link to access developer plugins
 
149
 
150
  * Bug Fixes
151
- * Solved several issues related to translations. Now everything in the plugin is translatable
152
- * Fixed several other issues reported by email
153
-
154
- * Bug Fix
155
- * Fixed reported issue with ugrade (more info [here](http://wordpress.org/support/topic/errors-showing-since-120-upgrade-on-multisite-install?replies=4))
156
 
157
  = 1.2.1 (2014-07-2) =
158
  * Bug Fix
159
- * Fixed reported issue with ugrade (more info [here](http://wordpress.org/support/topic/errors-showing-since-120-upgrade-on-multisite-install?replies=4))
160
 
161
  = 1.2.0 (2014-07-2) =
162
  * New Features
163
- * Unlimited Alerts can be stored (removed the 5000 alerts limit)
164
- * Alert time now includes milliseconds for more precision (ideal for auditing and compliance)
165
- * Reported alert time is now relative to user's configured timezone
166
- * Alerts automatic pruning procedures can now be enabled / disabled
167
- * Option to hide WP Security Audit Log from plugins page in WordPress
168
- * If there are more than 15 websites in a multisite installation, an auto complete site search box is shown instead of the drop down menu
169
 
170
  * New WordPress Security Alerts
171
- * Alert 5007: User has uninstalled / deleted a theme
172
- * Alert 5008: Super administrator network activated a theme on multisite
173
- * Alert 5009: Super administrator network deactivated a theme on multisite
174
 
175
  = 1.1.0 (2014-05-27) =
176
  * New Features
7
  Tags: wordpress security plugin, wordpress security audit log, audit log, wordpress log, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, security audit trail, wordpress security alerts, wordpress monitor, wordpress security monitor, wordpress admin, wordpress admin monitoring, analytics, activity, admin, multisite, wordpress multisite
8
  Requires at least: 3.6
9
  Tested up to: 3.9.1
10
+ Stable tag: 1.2.3
11
 
12
  Identify WordPress issues before they become a security problem by keeping an audit log of users and all of the under the hood WordPress activity.
13
 
61
  * German translation by [Mourad Louha](http://excel-translator.de)
62
 
63
  = WordPress & PHP Errors Monitoring Tools =
64
+ Plugins and themes customizations are most probably the norm of the day on large WordPress websites, not to mention the installation of new plugins and components. With WP Security Audit Log now it is easier than ever before to monitor your plugins', theme's and other code behaviour, it will generate a alert when a PHP error, warning, exception or shutdown is detected. It is also possible to log all HTTP GET and POST requests that are reaching your WordPress installation to a log file with WP Security Audit Log. Simply enable the PHP Errors monitoring or logging from the plugins settings.
65
 
66
+ NOTE: Developer options should NEVER be enabled on Live websites. They should only be enabled on testing, staging and development WordPress and WordPress multisite installations.
67
 
68
  = Other Noteworthy Features =
69
  WP Security Audit Log plugin also has a number of features that make WordPress and WordPress multisite monitoring and auditing easier, such as:
74
  * Configure WordPress security alerts purging by time or by number of alerts
75
  * User role is reported in alerts for a complete overview of what is happening
76
  * User avatar is reported in the alerts for better recognizability
77
+ * Enable or disable any security alerts
 
 
78
  * From where WordPress users are logging in
 
 
 
 
 
 
 
79
  * and much more...
80
 
81
  = As Featured On: =
130
 
131
  == Changelog ==
132
 
133
+ = 1.2.3 (2014-07-23) =
134
+ * Improvements
135
+ * Improved database structure for better support of high-traffic WordPress and WordPress multisite installations
136
+ * Developer options are reset during updates for improved performance
137
+ * Added a warning / note to the developer options (such options should NEVER be enabled on live websites but only on testing, staging and development websites)
138
+
139
+ * Bug Fixes
140
+ * Fixed database issue with primary key constraint
141
+
142
  = 1.2.2 (2014-07-16) =
143
  * New Features
144
+ * Italian translation available thanks to [Leonardo Musumeci](http://leonardomusumeci.net/)
145
 
146
  * Improvements
147
+ * Added a warning to developer options
148
+ * "Hidden" developer options from default settings; user has to click link to access developer settings
149
+ * Backtrace logging now made optional from a developer setting
150
 
151
  * Bug Fixes
152
+ * Solved several issues related to translations. Now everything in the plugin is translatable
153
+ * Fixed several other issues reported by email
 
 
 
154
 
155
  = 1.2.1 (2014-07-2) =
156
  * Bug Fix
157
+ * Fixed reported issue with upgrade (more info [here](http://wordpress.org/support/topic/errors-showing-since-120-upgrade-on-multisite-install?replies=4))
158
 
159
  = 1.2.0 (2014-07-2) =
160
  * New Features
161
+ * Unlimited Alerts can be stored (removed the 5000 alerts limit)
162
+ * Alert time now includes milliseconds for more precision (ideal for auditing and compliance)
163
+ * Reported alert time is now relative to user's configured timezone
164
+ * Alerts automatic pruning procedures can now be enabled / disabled
165
+ * Option to hide WP Security Audit Log from Plugins page in WordPress
166
+ * If there are more than 15 websites in a multisite installation, an auto complete site search box is shown instead of the drop down menu
167
 
168
  * New WordPress Security Alerts
169
+ * Alert 5007: User has uninstalled / deleted a theme
170
+ * Alert 5008: Super administrator network activated a theme on multisite
171
+ * Alert 5009: Super administrator network deactivated a theme on multisite
172
 
173
  = 1.1.0 (2014-05-27) =
174
  * New Features
wp-security-audit-log.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: WP Security Audit Log
4
  Plugin URI: http://www.wpwhitesecurity.com/wordpress-security-plugins/wp-security-audit-log/
5
  Description: Identify WordPress security issues before they become a problem and keep track of everything happening on your WordPress, including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Security Audit Log will generate a security alert for everything that happens on your WordPress blog or website. Use the Audit Log Viewer included in the plugin to see all the security alerts.
6
  Author: WP White Security
7
- Version: 1.2.2
8
  Text Domain: wp-security-audit-log
9
  Author URI: http://www.wpwhitesecurity.com/
10
  License: GPL2
@@ -34,6 +34,8 @@ class WpSecurityAuditLog {
34
 
35
  const MIN_PHP_VERSION = '5.3.0';
36
 
 
 
37
  /**
38
  * Views supervisor.
39
  * @var WSAL_ViewManager
@@ -76,6 +78,8 @@ class WpSecurityAuditLog {
76
 
77
  /**
78
  * Standard singleton pattern.
 
 
79
  * @return \self Returns the current plugin instance.
80
  */
81
  public static function GetInstance(){
@@ -122,6 +126,9 @@ class WpSecurityAuditLog {
122
  do_action('wsal_init', $this);
123
  }
124
 
 
 
 
125
  public function Install(){
126
  if (version_compare(PHP_VERSION, self::MIN_PHP_VERSION) < 0) {
127
  ?><html>
@@ -140,18 +147,52 @@ class WpSecurityAuditLog {
140
  }
141
 
142
  $PreInstalled = $this->IsInstalled();
 
 
 
 
 
 
 
143
  WSAL_DB_ActiveRecord::InstallAll();
144
- if (!$PreInstalled && $this->CanUpgrade()) $this->Upgrade();
145
 
 
 
 
 
146
  wp_schedule_event(0, 'hourly', 'wsal_cleanup');
147
  }
148
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  public function Uninstall(){
150
  WSAL_DB_ActiveRecord::UninstallAll();
151
  wp_unschedule_event(0, 'wsal_cleanup');
152
  }
153
 
154
- public function Upgrade(){
 
 
 
155
  global $wpdb;
156
  static $migTypes = array(
157
  3000 => 5006
@@ -212,6 +253,24 @@ class WpSecurityAuditLog {
212
 
213
  // <editor-fold desc="Utility Methods">
214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  public function HidePlugin(){
216
  ?><style type="text/css">.wp-list-table.plugins #wp-security-audit-log { display: none; }</style><?php
217
  }
@@ -255,27 +314,90 @@ class WpSecurityAuditLog {
255
  return function_exists('is_multisite') && is_multisite();
256
  }
257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  public function CleanUp(){
259
  foreach($this->_cleanup_hooks as $hook)
260
  call_user_func($hook);
261
  }
262
 
 
 
 
 
263
  public function AddCleanupHook($hook){
264
  $this->_cleanup_hooks[] = $hook;
265
  }
266
 
 
 
 
 
267
  public function RemoveCleanupHook($hook){
268
  while(($pos = array_search($hook, $this->_cleanup_hooks)) !== false)
269
  unset($this->_cleanup_hooks[$pos]);
270
  }
271
 
 
 
 
 
272
  public function IsInstalled(){
273
  global $wpdb;
274
  $table = $wpdb->base_prefix . 'wsal_occurrences';
275
  return ($wpdb->get_var('SHOW TABLES LIKE "'.$table.'"') == $table);
276
  }
277
 
278
- public function CanUpgrade(){
 
 
 
279
  global $wpdb;
280
  $table = $wpdb->base_prefix . 'wordpress_auditlog_events';
281
  return ($wpdb->get_var('SHOW TABLES LIKE "'.$table.'"') == $table);
4
  Plugin URI: http://www.wpwhitesecurity.com/wordpress-security-plugins/wp-security-audit-log/
5
  Description: Identify WordPress security issues before they become a problem and keep track of everything happening on your WordPress, including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Security Audit Log will generate a security alert for everything that happens on your WordPress blog or website. Use the Audit Log Viewer included in the plugin to see all the security alerts.
6
  Author: WP White Security
7
+ Version: 1.2.3
8
  Text Domain: wp-security-audit-log
9
  Author URI: http://www.wpwhitesecurity.com/
10
  License: GPL2
34
 
35
  const MIN_PHP_VERSION = '5.3.0';
36
 
37
+ const OPT_PRFX = 'wsal-';
38
+
39
  /**
40
  * Views supervisor.
41
  * @var WSAL_ViewManager
78
 
79
  /**
80
  * Standard singleton pattern.
81
+ * WARNING! To ensure the system always works as expected, AVOID using this method.
82
+ * Instead, make use of the plugin instance provided by 'wsal_init' action.
83
  * @return \self Returns the current plugin instance.
84
  */
85
  public static function GetInstance(){
126
  do_action('wsal_init', $this);
127
  }
128
 
129
+ /**
130
+ * Install all assets required for a useable system.
131
+ */
132
  public function Install(){
133
  if (version_compare(PHP_VERSION, self::MIN_PHP_VERSION) < 0) {
134
  ?><html>
147
  }
148
 
149
  $PreInstalled = $this->IsInstalled();
150
+
151
+ // if system already installed, do updates now (if any)
152
+ $OldVersion = $this->GetOldVersion();
153
+ $NewVersion = $this->GetNewVersion();
154
+ if ($PreInstalled && $OldVersion != $NewVersion) $this->Update($OldVersion, $NewVersion);
155
+
156
+ // ensure that the system is installed and schema is correct
157
  WSAL_DB_ActiveRecord::InstallAll();
 
158
 
159
+ // if system wasn't installed, try migration now
160
+ if (!$PreInstalled && $this->CanMigrate()) $this->Migrate();
161
+
162
+ // install cleanup hook
163
  wp_schedule_event(0, 'hourly', 'wsal_cleanup');
164
  }
165
 
166
+ /**
167
+ * Run some code that updates critical components required for a newwer version.
168
+ * @param string $old_version The old version.
169
+ * @param string $new_version The new version.
170
+ */
171
+ public function Update($old_version, $new_version){
172
+ // update version in db
173
+ $this->GetGlobalOption('version', $new_version);
174
+
175
+ // disable all developer options
176
+ $this->settings->ClearDevOptions();
177
+
178
+ // do version-to-version specific changes
179
+ if(version_compare($old_version, '1.2.3') == -1){
180
+ // ... an example
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Uninstall plugin.
186
+ */
187
  public function Uninstall(){
188
  WSAL_DB_ActiveRecord::UninstallAll();
189
  wp_unschedule_event(0, 'wsal_cleanup');
190
  }
191
 
192
+ /**
193
+ * Migrate data from old plugin.
194
+ */
195
+ public function Migrate(){
196
  global $wpdb;
197
  static $migTypes = array(
198
  3000 => 5006
253
 
254
  // <editor-fold desc="Utility Methods">
255
 
256
+ /**
257
+ * @return string The current plugin version (according to plugin file metadata).
258
+ */
259
+ public function GetNewVersion(){
260
+ $version = get_plugin_data(__FILE__, false, false);
261
+ return isset($version['Version']) ? $version['Version'] : '0.0.0';
262
+ }
263
+
264
+ /**
265
+ * @return string The plugin version as stored in DB (will be the old version during an update/install).
266
+ */
267
+ public function GetOldVersion(){
268
+ return $this->GetGlobalOption('version', '0.0.0');
269
+ }
270
+
271
+ /**
272
+ * @internal To be called in admin header for hiding plugin form Plugins list.
273
+ */
274
  public function HidePlugin(){
275
  ?><style type="text/css">.wp-list-table.plugins #wp-security-audit-log { display: none; }</style><?php
276
  }
314
  return function_exists('is_multisite') && is_multisite();
315
  }
316
 
317
+ /**
318
+ * Get a global option.
319
+ * @param string $option Option name.
320
+ * @param mixed $default (Optional) Value returned when option is not set (defaults to false).
321
+ * @param string $prefix (Optional) A prefix used before option name.
322
+ * @return mixed Option's value or $default if option not set.
323
+ */
324
+ public function GetGlobalOption($option, $default = false, $prefix = self::OPT_PRFX){
325
+ $fn = $this->IsMultisite() ? 'get_site_option' : 'get_option';
326
+ return $fn($prefix . $option, $default);
327
+ }
328
+
329
+ /**
330
+ * Set a global option.
331
+ * @param string $option Option name.
332
+ * @param mixed $value New value for option.
333
+ * @param string $prefix (Optional) A prefix used before option name.
334
+ */
335
+ public function SetGlobalOption($option, $value, $prefix = self::OPT_PRFX){
336
+ $fn = $this->IsMultisite() ? 'update_site_option' : 'update_option';
337
+ $fn($prefix . $option, $value);
338
+ }
339
+
340
+ /**
341
+ * Get a user-specific option.
342
+ * @param string $option Option name.
343
+ * @param mixed $default (Optional) Value returned when option is not set (defaults to false).
344
+ * @param string $prefix (Optional) A prefix used before option name.
345
+ * @return mixed Option's value or $default if option not set.
346
+ */
347
+ public function GetUserOption($option, $default = false, $prefix = self::OPT_PRFX){
348
+ $result = get_user_option($prefix . $option, get_current_user_id());
349
+ return $result === false ? $default : $result;
350
+ }
351
+
352
+ /**
353
+ * Set a user-specific option.
354
+ * @param string $option Option name.
355
+ * @param mixed $value New value for option.
356
+ * @param string $prefix (Optional) A prefix used before option name.
357
+ */
358
+ public function SetUserOption($option, $value, $prefix = self::OPT_PRFX){
359
+ update_user_option(get_current_user_id(), $prefix . $option, $value, false);
360
+ }
361
+
362
+ /**
363
+ * Run cleanup routines.
364
+ */
365
  public function CleanUp(){
366
  foreach($this->_cleanup_hooks as $hook)
367
  call_user_func($hook);
368
  }
369
 
370
+ /**
371
+ * Add callback to be called when a cleanup operation is required.
372
+ * @param callable $hook
373
+ */
374
  public function AddCleanupHook($hook){
375
  $this->_cleanup_hooks[] = $hook;
376
  }
377
 
378
+ /**
379
+ * Remove a callback from the cleanup callbacks list.
380
+ * @param callable $hook
381
+ */
382
  public function RemoveCleanupHook($hook){
383
  while(($pos = array_search($hook, $this->_cleanup_hooks)) !== false)
384
  unset($this->_cleanup_hooks[$pos]);
385
  }
386
 
387
+ /**
388
+ * Do we have an existing installation? This only applies for version 1.0 onwards.
389
+ * @return boolean
390
+ */
391
  public function IsInstalled(){
392
  global $wpdb;
393
  $table = $wpdb->base_prefix . 'wsal_occurrences';
394
  return ($wpdb->get_var('SHOW TABLES LIKE "'.$table.'"') == $table);
395
  }
396
 
397
+ /**
398
+ * @return boolean Whether the old plugin was present or not.
399
+ */
400
+ public function CanMigrate(){
401
  global $wpdb;
402
  $table = $wpdb->base_prefix . 'wordpress_auditlog_events';
403
  return ($wpdb->get_var('SHOW TABLES LIKE "'.$table.'"') == $table);