Simple History - Version 2.0.30

Version Description

(May 2015) =

  • Added: Username of logged events now link to that user's profile.
  • Fixed: When expanding ocassions the first loaded occasion was the same event as the one you expanded from, and the last ocassion was missing. Looked extra stupid when only 1 occasion existed, and you clicked "show ocassions" only to just find the same event again. So stupid. But fixed now!
  • Fixed: If an event had many similar events the list of similar events could freeze the browser. (17948 failed login attempts overnight is not that uncommon it turns out!
  • Fixed: Some loggers were missing the "All"-message in the search.
  • Changed: Hide some more keys and values by default in the context data popup.
  • Changed: Use truncate instead of delete when clearing the database. Works much faster on large logs.
Download this release

Release Info

Developer eskapism
Plugin Icon 128x128 Simple History
Version 2.0.30
Comparing to
See all releases

Code changes from version 2.0.29 to 2.0.30

examples/examples.php CHANGED
@@ -16,6 +16,32 @@ define("SIMPLE_HISTORY_LOG_DEBUG", true);
16
  * Some examples of filter usage and so on
17
  */
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  // Skip adding things to the context table during logging.
20
  // Useful if you don't want to add cool and possible super useful info to your logged events.
21
  // Also nice to have if you want to make sure your database does not grow.
16
  * Some examples of filter usage and so on
17
  */
18
 
19
+
20
+ /**
21
+ * Change capability required to manage the options page of simple history.
22
+ * Default capability is "manage_options"
23
+ */
24
+ add_filter("simple_history/view_settings_capability", function($capability) {
25
+
26
+ $capability = "manage_options";
27
+ return $capability;
28
+
29
+ });
30
+
31
+
32
+ /**
33
+ * Change capability required to view main simple history page.
34
+ * Default capability is "edit_pages". Change to for example "manage options"
35
+ * to only allow admins to view the history log.
36
+ */
37
+ add_filter("simple_history/view_history_capability", function($capability) {
38
+
39
+ $capability = "manage_options";
40
+ return $capability;
41
+
42
+ });
43
+
44
+
45
  // Skip adding things to the context table during logging.
46
  // Useful if you don't want to add cool and possible super useful info to your logged events.
47
  // Also nice to have if you want to make sure your database does not grow.
inc/SimpleHistory.php CHANGED
@@ -10,7 +10,7 @@ class SimpleHistory {
10
  const NAME = "Simple History";
11
 
12
  // Dont use this any more! Will be removed in future versions. Use global SIMPLE_HISTORY_VERSION instead.
13
- const VERSION = "2.0.29";
14
 
15
  /**
16
  * For singleton
@@ -274,7 +274,6 @@ class SimpleHistory {
274
  if ($this->is_on_our_own_pages()) {
275
 
276
  ?>
277
-
278
  <script type="text/html" id="tmpl-simple-history-base">
279
 
280
  <div class="SimpleHistory__waitingForFirstLoad">
@@ -350,6 +349,30 @@ class SimpleHistory {
350
 
351
  </script>
352
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
  <?php
354
 
355
  // Call plugins so they can add their js
@@ -1218,9 +1241,9 @@ class SimpleHistory {
1218
  </h2>
1219
 
1220
  <?php
1221
- $active_tab = isset($_GET["selected-tab"]) ? $_GET["selected-tab"] : "settings";
1222
- $settings_base_url = menu_page_url(SimpleHistory::SETTINGS_MENU_SLUG, 0);
1223
- ?>
1224
 
1225
  <h3 class="nav-tab-wrapper">
1226
  <?php
@@ -1610,10 +1633,12 @@ $active_tab = isset($_GET["selected-tab"]) ? $_GET["selected-tab"] : "settings";
1610
  $sql_num_rows = "SELECT count(id) AS num_rows FROM {$tableprefix}{$simple_history_table}";
1611
  $num_rows = $wpdb->get_var($sql_num_rows, 0);
1612
 
1613
- $sql = "DELETE FROM {$tableprefix}{$simple_history_table}";
 
1614
  $wpdb->query($sql);
1615
 
1616
- $sql = "DELETE FROM {$tableprefix}{$simple_history_context_table}";
 
1617
  $wpdb->query($sql);
1618
 
1619
  // Zero state sucks
@@ -1970,6 +1995,17 @@ $active_tab = isset($_GET["selected-tab"]) ? $_GET["selected-tab"] : "settings";
1970
  */
1971
  $logRowKeysToShow = apply_filters("simple_history/log_html_output_details_table/row_keys_to_show", $logRowKeysToShow, $oneLogRow);
1972
 
 
 
 
 
 
 
 
 
 
 
 
1973
  foreach ( $oneLogRow as $rowKey => $rowVal ) {
1974
 
1975
  // Only columns from oneLogRow that exist in logRowKeysToShow will be outputed
@@ -1995,7 +2031,25 @@ $active_tab = isset($_GET["selected-tab"]) ? $_GET["selected-tab"] : "settings";
1995
 
1996
 
1997
  $logRowContextKeysToShow = array_fill_keys( array_keys( (array) $oneLogRow->context), true);
1998
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1999
  /**
2000
  * Filter what keys to show from the row context
2001
  *
10
  const NAME = "Simple History";
11
 
12
  // Dont use this any more! Will be removed in future versions. Use global SIMPLE_HISTORY_VERSION instead.
13
+ const VERSION = "2.0.30";
14
 
15
  /**
16
  * For singleton
274
  if ($this->is_on_our_own_pages()) {
275
 
276
  ?>
 
277
  <script type="text/html" id="tmpl-simple-history-base">
278
 
279
  <div class="SimpleHistory__waitingForFirstLoad">
349
 
350
  </script>
351
 
352
+ <script type="text/html" id="tmpl-simple-history-occasions-too-many">
353
+ <li
354
+ class="SimpleHistoryLogitem
355
+ SimpleHistoryLogitem--occasion
356
+ SimpleHistoryLogitem--occasion-tooMany
357
+ ">
358
+ <div class="SimpleHistoryLogitem__firstcol"></div>
359
+ <div class="SimpleHistoryLogitem__secondcol">
360
+ <div class="SimpleHistoryLogitem__text">
361
+ <?php _e('Sorry, but there are too many similar events to show.', "simple-history"); ?>
362
+ <!-- <br>occasionsCount: {{ data.occasionsCount }}
363
+ <br>occasionsCountMaxReturn: {{ data.occasionsCountMaxReturn }}
364
+ <br>diff: {{ data.occasionsCount - data.occasionsCountMaxReturn }}
365
+ Suggestions:
366
+ <ul>
367
+ <li>- dig into database directly
368
+ <li>- Export
369
+ </ul>
370
+ -->
371
+ </div>
372
+ </div>
373
+ </li>
374
+ </script>
375
+
376
  <?php
377
 
378
  // Call plugins so they can add their js
1241
  </h2>
1242
 
1243
  <?php
1244
+ $active_tab = isset($_GET["selected-tab"]) ? $_GET["selected-tab"] : "settings";
1245
+ $settings_base_url = menu_page_url(SimpleHistory::SETTINGS_MENU_SLUG, 0);
1246
+ ?>
1247
 
1248
  <h3 class="nav-tab-wrapper">
1249
  <?php
1633
  $sql_num_rows = "SELECT count(id) AS num_rows FROM {$tableprefix}{$simple_history_table}";
1634
  $num_rows = $wpdb->get_var($sql_num_rows, 0);
1635
 
1636
+ #$sql = "DELETE FROM {$tableprefix}{$simple_history_table}";
1637
+ $sql = "TRUNCATE {$tableprefix}{$simple_history_table}";
1638
  $wpdb->query($sql);
1639
 
1640
+ #$sql = "DELETE FROM {$tableprefix}{$simple_history_context_table}";
1641
+ $sql = "TRUNCATE {$tableprefix}{$simple_history_context_table}";
1642
  $wpdb->query($sql);
1643
 
1644
  // Zero state sucks
1995
  */
1996
  $logRowKeysToShow = apply_filters("simple_history/log_html_output_details_table/row_keys_to_show", $logRowKeysToShow, $oneLogRow);
1997
 
1998
+ // Hide some keys by default
1999
+ unset(
2000
+ $logRowKeysToShow["occasionsID"],
2001
+ $logRowKeysToShow["subsequentOccasions"],
2002
+ $logRowKeysToShow["rep"],
2003
+ $logRowKeysToShow["repeated"],
2004
+ $logRowKeysToShow["occasionsIDType"],
2005
+ $logRowKeysToShow["context"]
2006
+ );
2007
+
2008
+
2009
  foreach ( $oneLogRow as $rowKey => $rowVal ) {
2010
 
2011
  // Only columns from oneLogRow that exist in logRowKeysToShow will be outputed
2031
 
2032
 
2033
  $logRowContextKeysToShow = array_fill_keys( array_keys( (array) $oneLogRow->context), true);
2034
+ /*
2035
+ error_log($this->json_encode($logRowContextKeysToShow));
2036
+ Marker - 2 maj 2015 20:51:54
2037
+ [02-May-2015 18:51:57 UTC] {
2038
+ "post_id": true,
2039
+ "post_type": true,
2040
+ "post_title": true,
2041
+ "post_prev_post_title": true,
2042
+ "post_new_post_title": true,
2043
+ "post_prev_post_name": true,
2044
+ "post_new_post_name": true,
2045
+ "_message_key": true,
2046
+ "_user_id": true,
2047
+ "_user_login": true,
2048
+ "_user_email": true,
2049
+ "_server_remote_addr": true,
2050
+ "_server_http_referer": true
2051
+ }
2052
+ */
2053
  /**
2054
  * Filter what keys to show from the row context
2055
  *
inc/SimpleHistoryLogQuery.php CHANGED
@@ -66,7 +66,13 @@ class SimpleHistoryLogQuery {
66
  "messages" => null,
67
 
68
  // userID as number
69
- "user" => null
 
 
 
 
 
 
70
  );
71
 
72
  $args = wp_parse_args( $args, $defaults );
@@ -182,10 +188,21 @@ class SimpleHistoryLogQuery {
182
  %2$s
183
  ';
184
 
185
- $where .= " AND t.id <= " . (int) $args["logRowID"];
186
  $where .= " AND t.occasionsID = '" . esc_sql( $args["occasionsID"] ) . "'";
187
 
188
- $limit = "LIMIT " . (int) $args["occasionsCount"];
 
 
 
 
 
 
 
 
 
 
 
189
 
190
  // [logRowID] =&gt; 353
191
  // [occasionsID] =&gt; 73b06d5740d15e35079b6aa024255cb3
@@ -194,7 +211,7 @@ class SimpleHistoryLogQuery {
194
  }
195
 
196
  // Determine limit
197
- // Both posts_per_pae and paged must be set
198
  $is_limit_query = ( is_numeric( $args["posts_per_page"] ) && $args["posts_per_page"] > 0 );
199
  $is_limit_query = $is_limit_query && ( is_numeric( $args["paged"] ) && $args["paged"] > 0 );
200
  if ($is_limit_query) {
66
  "messages" => null,
67
 
68
  // userID as number
69
+ "user" => null,
70
+
71
+ // Can also contain:
72
+ // occasionsCount
73
+ // occasionsCountMaxReturn
74
+ // occasionsID
75
+
76
  );
77
 
78
  $args = wp_parse_args( $args, $defaults );
188
  %2$s
189
  ';
190
 
191
+ $where .= " AND t.id < " . (int) $args["logRowID"];
192
  $where .= " AND t.occasionsID = '" . esc_sql( $args["occasionsID"] ) . "'";
193
 
194
+ if ( isset( $args["occasionsCountMaxReturn"] ) && (int) $args["occasionsCountMaxReturn"] < (int) $args["occasionsCount"] ) {
195
+
196
+ // Limit to max nn events if occasionsCountMaxReturn is set.
197
+ // Used in gui to prevent top many events returned, that can stall the browser.
198
+ $limit = "LIMIT " . (int) $args["occasionsCountMaxReturn"];
199
+
200
+ } else {
201
+
202
+ // Regular limit that gets all occasions
203
+ $limit = "LIMIT " . (int) $args["occasionsCount"];
204
+
205
+ }
206
 
207
  // [logRowID] =&gt; 353
208
  // [occasionsID] =&gt; 73b06d5740d15e35079b6aa024255cb3
211
  }
212
 
213
  // Determine limit
214
+ // Both posts_per_page and paged must be set
215
  $is_limit_query = ( is_numeric( $args["posts_per_page"] ) && $args["posts_per_page"] > 0 );
216
  $is_limit_query = $is_limit_query && ( is_numeric( $args["paged"] ) && $args["paged"] > 0 );
217
  if ($is_limit_query) {
index.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Simple History
4
  Plugin URI: http://simple-history.com
5
  Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
6
- Version: 2.0.29
7
  Author: Pär Thernström
8
  Author URI: http://simple-history.com/
9
  License: GPL2
@@ -42,7 +42,7 @@ if ( version_compare( phpversion(), "5.3", ">=") ) {
42
  */
43
  // register_activation_hook( trailingslashit(WP_PLUGIN_DIR) . trailingslashit( plugin_basename(__DIR__) ) . "index.php" , array("SimpleHistory", "on_plugin_activate" ) );
44
 
45
- define( 'SIMPLE_HISTORY_VERSION', '2.0.29' );
46
 
47
  define( 'SIMPLE_HISTORY_FILE', __FILE__ );
48
  define( 'SIMPLE_HISTORY_PATH', plugin_dir_path( SIMPLE_HISTORY_FILE ) );
3
  Plugin Name: Simple History
4
  Plugin URI: http://simple-history.com
5
  Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
6
+ Version: 2.0.30
7
  Author: Pär Thernström
8
  Author URI: http://simple-history.com/
9
  License: GPL2
42
  */
43
  // register_activation_hook( trailingslashit(WP_PLUGIN_DIR) . trailingslashit( plugin_basename(__DIR__) ) . "index.php" , array("SimpleHistory", "on_plugin_activate" ) );
44
 
45
+ define( 'SIMPLE_HISTORY_VERSION', '2.0.30' );
46
 
47
  define( 'SIMPLE_HISTORY_FILE', __FILE__ );
48
  define( 'SIMPLE_HISTORY_PATH', plugin_dir_path( SIMPLE_HISTORY_FILE ) );
js/scripts.js CHANGED
@@ -133,7 +133,8 @@ var simple_history = (function($) {
133
  data: {
134
  logRowID: options.logRowID,
135
  occasionsID: options.occasionsID,
136
- occasionsCount: options.occasionsCount
 
137
  }
138
  });
139
 
@@ -167,6 +168,8 @@ var simple_history = (function($) {
167
 
168
  var logRowID = this.attributes.logRow.data("rowId");
169
  var occasionsCount = this.attributes.logRow.data("occasionsCount");
 
 
170
  var occasionsID = this.attributes.logRow.data("occasionsId");
171
 
172
  this.attributes.logRow.addClass("SimpleHistoryLogitem--occasionsOpening");
@@ -175,7 +178,8 @@ var simple_history = (function($) {
175
  logRow: this.attributes.logRow,
176
  logRowID: logRowID,
177
  occasionsID: occasionsID,
178
- occasionsCount: occasionsCount
 
179
  });
180
 
181
  this.logRows.on("reset", this.render, this);
@@ -197,6 +201,15 @@ var simple_history = (function($) {
197
  $html = $html.add($li);
198
  });
199
 
 
 
 
 
 
 
 
 
 
200
  this.$el.html($html);
201
 
202
  this.attributes.logRow.removeClass("SimpleHistoryLogitem--occasionsOpening").addClass("SimpleHistoryLogitem--occasionsOpened");
133
  data: {
134
  logRowID: options.logRowID,
135
  occasionsID: options.occasionsID,
136
+ occasionsCount: options.occasionsCount,
137
+ occasionsCountMaxReturn: options.occasionsCountMaxReturn
138
  }
139
  });
140
 
168
 
169
  var logRowID = this.attributes.logRow.data("rowId");
170
  var occasionsCount = this.attributes.logRow.data("occasionsCount");
171
+ var occasionsCountMaxReturn = 15;
172
+ this.occasionsCountMaxReturn = occasionsCountMaxReturn;
173
  var occasionsID = this.attributes.logRow.data("occasionsId");
174
 
175
  this.attributes.logRow.addClass("SimpleHistoryLogitem--occasionsOpening");
178
  logRow: this.attributes.logRow,
179
  logRowID: logRowID,
180
  occasionsID: occasionsID,
181
+ occasionsCount: occasionsCount,
182
+ occasionsCountMaxReturn: occasionsCountMaxReturn
183
  });
184
 
185
  this.logRows.on("reset", this.render, this);
201
  $html = $html.add($li);
202
  });
203
 
204
+ // If occasionsCount is more than occasionsCountMaxReturn then show a message
205
+ var occasionsCount = this.attributes.logRow.data("occasionsCount");
206
+ if (occasionsCount > this.occasionsCountMaxReturn) {
207
+
208
+ var templateTooMany = wp.template("simple-history-occasions-too-many");
209
+ $html = $html.add(templateTooMany({ occasionsCount: occasionsCount, occasionsCountMaxReturn: this.occasionsCountMaxReturn }));
210
+
211
+ }
212
+
213
  this.$el.html($html);
214
 
215
  this.attributes.logRow.removeClass("SimpleHistoryLogitem--occasionsOpening").addClass("SimpleHistoryLogitem--occasionsOpened");
loggers/SimpleLogger.php CHANGED
@@ -168,17 +168,24 @@ class SimpleLogger {
168
 
169
  $user_display_name = $user->display_name;
170
 
171
- $tmpl_initiator_html = '
172
- <strong class="SimpleHistoryLogitem__inlineDivided">%3$s</strong>
173
- <span class="SimpleHistoryLogitem__inlineDivided SimpleHistoryLogitem__headerEmail">%2$s</span>
174
- ' ;
175
-
176
  // If user who logged this is the currently logged in user
177
- // we replace name and email with just "You"
178
- if ($is_current_user) {
 
179
  $tmpl_initiator_html = '
180
- <strong class="SimpleHistoryLogitem__inlineDivided">%5$s</strong>
 
 
181
  ' ;
 
 
 
 
 
 
 
 
 
182
  }
183
 
184
  /**
@@ -196,7 +203,8 @@ class SimpleLogger {
196
  esc_html($user->user_email), // 2
197
  esc_html($user_display_name), // 3
198
  $user_role, // 4
199
- _x("You", "header output when initiator is the currently logged in user", "simple-history") // 5
 
200
  );
201
 
202
  } else if ($user_id > 0) {
@@ -211,9 +219,9 @@ class SimpleLogger {
211
  '<strong class="SimpleHistoryLogitem__inlineDivided">' .
212
  __('Deleted user (had id %1$s, email %2$s, login %3$s)', "simple-history") .
213
  '</strong>',
214
- esc_html($context["_user_id"]),
215
- esc_html($context["_user_email"]),
216
- esc_html($context["_user_login"])
217
  );
218
 
219
  }
@@ -510,6 +518,7 @@ class SimpleLogger {
510
  break;
511
 
512
  }
 
513
  /**
514
  * Filter generated output for row image (sender image)
515
  *
168
 
169
  $user_display_name = $user->display_name;
170
 
 
 
 
 
 
171
  // If user who logged this is the currently logged in user
172
+ // skip name and email and use just "You"
173
+ if ( $is_current_user ) {
174
+
175
  $tmpl_initiator_html = '
176
+ <a href="%6$s" class="SimpleHistoryLogitem__headerUserProfileLink">
177
+ <strong class="SimpleHistoryLogitem__inlineDivided">%5$s</strong>
178
+ </a>
179
  ' ;
180
+ } else {
181
+
182
+ $tmpl_initiator_html = '
183
+ <a href="%6$s" class="SimpleHistoryLogitem__headerUserProfileLink">
184
+ <strong class="SimpleHistoryLogitem__inlineDivided">%3$s</strong>
185
+ <span class="SimpleHistoryLogitem__inlineDivided SimpleHistoryLogitem__headerEmail">%2$s</span>
186
+ </a>
187
+ ';
188
+
189
  }
190
 
191
  /**
203
  esc_html($user->user_email), // 2
204
  esc_html($user_display_name), // 3
205
  $user_role, // 4
206
+ _x("You", "header output when initiator is the currently logged in user", "simple-history"), // 5
207
+ get_edit_user_link( $user_id ) // 6
208
  );
209
 
210
  } else if ($user_id > 0) {
219
  '<strong class="SimpleHistoryLogitem__inlineDivided">' .
220
  __('Deleted user (had id %1$s, email %2$s, login %3$s)', "simple-history") .
221
  '</strong>',
222
+ esc_html($context["_user_id"]), // 1
223
+ esc_html($context["_user_email"]), // 2
224
+ esc_html($context["_user_login"]) // 3
225
  );
226
 
227
  }
518
  break;
519
 
520
  }
521
+
522
  /**
523
  * Filter generated output for row image (sender image)
524
  *
loggers/SimpleMediaLogger.php CHANGED
@@ -29,6 +29,7 @@ class SimpleMediaLogger extends SimpleLogger
29
  "labels" => array(
30
  "search" => array(
31
  "label" => _x("Media", "Media logger: search", "simple-history"),
 
32
  "options" => array(
33
  _x("Added media", "Media logger: search", "simple-history") => array(
34
  "attachment_created"
29
  "labels" => array(
30
  "search" => array(
31
  "label" => _x("Media", "Media logger: search", "simple-history"),
32
+ "label_all" => _x("All media activity", "Media logger: search", "simple-history"),
33
  "options" => array(
34
  _x("Added media", "Media logger: search", "simple-history") => array(
35
  "attachment_created"
loggers/SimpleMenuLogger.php CHANGED
@@ -31,6 +31,7 @@ class SimpleMenuLogger extends SimpleLogger
31
  "labels" => array(
32
  "search" => array(
33
  "label" => _x("Menus", "Menu logger: search", "simple-history"),
 
34
  "options" => array(
35
  _x("Created menus", "Menu updates logger: search", "simple-history") => array(
36
  "created_menu"
31
  "labels" => array(
32
  "search" => array(
33
  "label" => _x("Menus", "Menu logger: search", "simple-history"),
34
+ "label_all" => _x("All menu activity", "Menu updates logger: search", "simple-history"),
35
  "options" => array(
36
  _x("Created menus", "Menu updates logger: search", "simple-history") => array(
37
  "created_menu"
loggers/SimplePluginLogger.php CHANGED
@@ -82,6 +82,7 @@ class SimplePluginLogger extends SimpleLogger
82
  "labels" => array(
83
  "search" => array(
84
  "label" => _x("Plugins", "Plugin logger: search", "simple-history"),
 
85
  "options" => array(
86
  _x("Activated plugins", "Plugin logger: search", "simple-history") => array(
87
  'plugin_activated'
82
  "labels" => array(
83
  "search" => array(
84
  "label" => _x("Plugins", "Plugin logger: search", "simple-history"),
85
+ "label_all" => _x("All plugin activity", "Plugin logger: search", "simple-history"),
86
  "options" => array(
87
  _x("Activated plugins", "Plugin logger: search", "simple-history") => array(
88
  'plugin_activated'
loggers/SimplePostLogger.php CHANGED
@@ -125,6 +125,7 @@ class SimplePostLogger extends SimpleLogger
125
  "labels" => array(
126
  "search" => array(
127
  "label" => _x("Posts & Pages", "Post logger: search", "simple-history"),
 
128
  "options" => array(
129
  _x("Posts created", "Post logger: search", "simple-history") => array(
130
  "post_created"
125
  "labels" => array(
126
  "search" => array(
127
  "label" => _x("Posts & Pages", "Post logger: search", "simple-history"),
128
+ "label_all" => _x("All posts & pages activity", "Post logger: search", "simple-history"),
129
  "options" => array(
130
  _x("Posts created", "Post logger: search", "simple-history") => array(
131
  "post_created"
loggers/SimpleThemeLogger.php CHANGED
@@ -35,6 +35,7 @@ class SimpleThemeLogger extends SimpleLogger {
35
  "labels" => array(
36
  "search" => array(
37
  "label" => _x("Themes & Widgets", "Theme logger: search", "simple-history"),
 
38
  "options" => array(
39
  _x("Switched themes", "Theme logger: search", "simple-history") => array(
40
  "theme_switched"
35
  "labels" => array(
36
  "search" => array(
37
  "label" => _x("Themes & Widgets", "Theme logger: search", "simple-history"),
38
+ "label_all" => _x("All theme activity", "Theme logger: search", "simple-history"),
39
  "options" => array(
40
  _x("Switched themes", "Theme logger: search", "simple-history") => array(
41
  "theme_switched"
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: eskapism
3
  Donate link: http://eskapism.se/sida/donate/
4
  Tags: history, log, changes, changelog, audit, trail, pages, attachments, users, cms, dashboard, admin, syslog, feed, activity, stream
5
  Requires at least: 3.6.0
6
- Tested up to: 4.2
7
- Stable tag: 2.0.29
8
 
9
  View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
10
 
@@ -111,10 +111,20 @@ initiated by a specific user.
111
 
112
  4. Click on the IP address of an entry to view the location of for example a failed login attempt.
113
 
 
114
  == Changelog ==
115
 
116
  ## Changelog
117
 
 
 
 
 
 
 
 
 
 
118
  = 2.0.29 (April 2015) =
119
 
120
  - Added: Introducing [Post "Quick Diff"](http://eskapism.se/blog/2015/04/quick-diff-shows-post-changes-in-wordpress/) – a very simple and efficient way to quickly see what’s been changed in a post. With Quick Diff you will in a glance see the difference between the title, permalink, content, publish date, post status, post author, or the template of the post. It's really a super simple and fast way to follow the work of your co-editors.
3
  Donate link: http://eskapism.se/sida/donate/
4
  Tags: history, log, changes, changelog, audit, trail, pages, attachments, users, cms, dashboard, admin, syslog, feed, activity, stream
5
  Requires at least: 3.6.0
6
+ Tested up to: 4.2.1
7
+ Stable tag: 2.0.30
8
 
9
  View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
10
 
111
 
112
  4. Click on the IP address of an entry to view the location of for example a failed login attempt.
113
 
114
+
115
  == Changelog ==
116
 
117
  ## Changelog
118
 
119
+ = 2.0.30 (May 2015) =
120
+
121
+ - Added: Username of logged events now link to that user's profile.
122
+ - Fixed: When expanding ocassions the first loaded occasion was the same event as the one you expanded from, and the last ocassion was missing. Looked extra stupid when only 1 occasion existed, and you clicked "show ocassions" only to just find the same event again. So stupid. But fixed now!
123
+ - Fixed: If an event had many similar events the list of similar events could freeze the browser. ([17948 failed login attempts overnight](https://twitter.com/eskapism/status/595478847598002176) is not that uncommon it turns out!
124
+ - Fixed: Some loggers were missing the "All"-message in the search.
125
+ - Changed: Hide some more keys and values by default in the context data popup.
126
+ - Changed: Use `truncate` instead of `delete` when clearing the database. Works much faster on large logs.
127
+
128
  = 2.0.29 (April 2015) =
129
 
130
  - Added: Introducing [Post "Quick Diff"](http://eskapism.se/blog/2015/04/quick-diff-shows-post-changes-in-wordpress/) – a very simple and efficient way to quickly see what’s been changed in a post. With Quick Diff you will in a glance see the difference between the title, permalink, content, publish date, post status, post author, or the template of the post. It's really a super simple and fast way to follow the work of your co-editors.