Version Description
(Jule 2016) =
- Log a warning message if a plugin gets disabled automatically by WordPress because of any of these errors: "Plugin file does not exist.", "Invalid plugin path.", "The plugin does not have a valid header."
- Fix warning error if
on_wp_login()was called without second argument. - Fix options diff not being shown correctly.
- Fix notice if no message key did exist for a log message.
Download this release
Release Info
| Developer | eskapism |
| Plugin | |
| Version | 2.7.4 |
| Comparing to | |
| See all releases | |
Code changes from version 2.7.3 to 2.7.4
- index.php +2 -2
- loggers/SimpleLogger.php +13 -13
- loggers/SimpleOptionsLogger.php +1 -1
- loggers/SimplePluginLogger.php +60 -1
- loggers/SimpleUserLogger.php +45 -45
- readme.txt +9 -2
index.php
CHANGED
|
@@ -5,7 +5,7 @@ Plugin URI: http://simple-history.com
|
|
| 5 |
Text Domain: simple-history
|
| 6 |
Domain Path: /languages
|
| 7 |
Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
|
| 8 |
-
Version: 2.7.
|
| 9 |
Author: Pär Thernström
|
| 10 |
Author URI: http://simple-history.com/
|
| 11 |
License: GPL2
|
|
@@ -42,7 +42,7 @@ if ( version_compare( phpversion(), "5.3", ">=") ) {
|
|
| 42 |
// register_activation_hook( trailingslashit(WP_PLUGIN_DIR) . trailingslashit( plugin_basename(__DIR__) ) . "index.php" , array("SimpleHistory", "on_plugin_activate" ) );
|
| 43 |
|
| 44 |
if ( ! defined( 'SIMPLE_HISTORY_VERSION' ) ) {
|
| 45 |
-
define( 'SIMPLE_HISTORY_VERSION', '2.7.
|
| 46 |
}
|
| 47 |
|
| 48 |
if ( ! defined( 'SIMPLE_HISTORY_PATH' ) ) {
|
| 5 |
Text Domain: simple-history
|
| 6 |
Domain Path: /languages
|
| 7 |
Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
|
| 8 |
+
Version: 2.7.4
|
| 9 |
Author: Pär Thernström
|
| 10 |
Author URI: http://simple-history.com/
|
| 11 |
License: GPL2
|
| 42 |
// register_activation_hook( trailingslashit(WP_PLUGIN_DIR) . trailingslashit( plugin_basename(__DIR__) ) . "index.php" , array("SimpleHistory", "on_plugin_activate" ) );
|
| 43 |
|
| 44 |
if ( ! defined( 'SIMPLE_HISTORY_VERSION' ) ) {
|
| 45 |
+
define( 'SIMPLE_HISTORY_VERSION', '2.7.4' );
|
| 46 |
}
|
| 47 |
|
| 48 |
if ( ! defined( 'SIMPLE_HISTORY_PATH' ) ) {
|
loggers/SimpleLogger.php
CHANGED
|
@@ -101,7 +101,7 @@ class SimpleLogger {
|
|
| 101 |
* @return Mixed
|
| 102 |
*/
|
| 103 |
function getInfoValueByKey( $key ) {
|
| 104 |
-
|
| 105 |
$arr_info = $this->getInfo();
|
| 106 |
|
| 107 |
return isset( $arr_info[ $key ] ) ? $arr_info[ $key ] : null;
|
|
@@ -142,7 +142,7 @@ class SimpleLogger {
|
|
| 142 |
|
| 143 |
/**
|
| 144 |
* Filter the context used to create the message from the message template
|
| 145 |
-
*
|
| 146 |
* @since 2.2.4
|
| 147 |
*/
|
| 148 |
$context = apply_filters( "simple_history/logger/interpolate/context", $context, $message, $row );
|
|
@@ -392,10 +392,10 @@ class SimpleLogger {
|
|
| 392 |
|
| 393 |
// $row->date is in GMT
|
| 394 |
$date_datetime = new DateTime( $row->date );
|
| 395 |
-
|
| 396 |
// Current datetime in GMT
|
| 397 |
$time_current = strtotime( current_time("mysql", 1) );
|
| 398 |
-
|
| 399 |
/**
|
| 400 |
* Filter how many seconds as most that can pass since an
|
| 401 |
* event occured to show "nn minutes ago" (human diff time-format) instead of exact date
|
|
@@ -437,7 +437,7 @@ class SimpleLogger {
|
|
| 437 |
$str_when = sprintf(__('%1$s ago', 'simple-history'), $date_human_time_diff);
|
| 438 |
|
| 439 |
}
|
| 440 |
-
|
| 441 |
$item_permalink = admin_url("index.php?page=simple_history_page");
|
| 442 |
if ( ! empty( $row->id ) ) {
|
| 443 |
$item_permalink .= "#item/{$row->id}";
|
|
@@ -478,13 +478,13 @@ class SimpleLogger {
|
|
| 478 |
// that "caused" this event
|
| 479 |
$via_html = "";
|
| 480 |
$logger_name_via = $this->getInfoValueByKey("name_via");
|
| 481 |
-
|
| 482 |
if ( $logger_name_via ) {
|
| 483 |
-
|
| 484 |
$via_html = "<span class='SimpleHistoryLogitem__inlineDivided SimpleHistoryLogitem__via'>";
|
| 485 |
$via_html .= $logger_name_via;
|
| 486 |
$via_html .= "</span>";
|
| 487 |
-
|
| 488 |
}
|
| 489 |
|
| 490 |
// Loglevel
|
|
@@ -498,8 +498,8 @@ class SimpleLogger {
|
|
| 498 |
|
| 499 |
// Glue together final result
|
| 500 |
$template = '
|
| 501 |
-
%1$s
|
| 502 |
-
%2$s
|
| 503 |
%3$s
|
| 504 |
';
|
| 505 |
#if ( ! $initiator_html ) {
|
|
@@ -546,7 +546,7 @@ class SimpleLogger {
|
|
| 546 |
public function getLogRowPlainTextOutput($row) {
|
| 547 |
|
| 548 |
$message = $row->message;
|
| 549 |
-
$message_key = $row->context["_message_key"];
|
| 550 |
|
| 551 |
// Message is translated here, but translation must be added in
|
| 552 |
// plain text before
|
|
@@ -955,7 +955,7 @@ class SimpleLogger {
|
|
| 955 |
* @since 2.3.1
|
| 956 |
*/
|
| 957 |
$do_log = apply_filters( "simple_history/log/do_log", true, $level, $message, $context, $this );
|
| 958 |
-
|
| 959 |
if ( $do_log === false ) {
|
| 960 |
return $this;
|
| 961 |
}
|
|
@@ -1278,7 +1278,7 @@ class SimpleLogger {
|
|
| 1278 |
}
|
| 1279 |
|
| 1280 |
}
|
| 1281 |
-
|
| 1282 |
$this->lastInsertID = $history_inserted_id;
|
| 1283 |
|
| 1284 |
$this->simpleHistory->get_cache_incrementor(true);
|
| 101 |
* @return Mixed
|
| 102 |
*/
|
| 103 |
function getInfoValueByKey( $key ) {
|
| 104 |
+
|
| 105 |
$arr_info = $this->getInfo();
|
| 106 |
|
| 107 |
return isset( $arr_info[ $key ] ) ? $arr_info[ $key ] : null;
|
| 142 |
|
| 143 |
/**
|
| 144 |
* Filter the context used to create the message from the message template
|
| 145 |
+
*
|
| 146 |
* @since 2.2.4
|
| 147 |
*/
|
| 148 |
$context = apply_filters( "simple_history/logger/interpolate/context", $context, $message, $row );
|
| 392 |
|
| 393 |
// $row->date is in GMT
|
| 394 |
$date_datetime = new DateTime( $row->date );
|
| 395 |
+
|
| 396 |
// Current datetime in GMT
|
| 397 |
$time_current = strtotime( current_time("mysql", 1) );
|
| 398 |
+
|
| 399 |
/**
|
| 400 |
* Filter how many seconds as most that can pass since an
|
| 401 |
* event occured to show "nn minutes ago" (human diff time-format) instead of exact date
|
| 437 |
$str_when = sprintf(__('%1$s ago', 'simple-history'), $date_human_time_diff);
|
| 438 |
|
| 439 |
}
|
| 440 |
+
|
| 441 |
$item_permalink = admin_url("index.php?page=simple_history_page");
|
| 442 |
if ( ! empty( $row->id ) ) {
|
| 443 |
$item_permalink .= "#item/{$row->id}";
|
| 478 |
// that "caused" this event
|
| 479 |
$via_html = "";
|
| 480 |
$logger_name_via = $this->getInfoValueByKey("name_via");
|
| 481 |
+
|
| 482 |
if ( $logger_name_via ) {
|
| 483 |
+
|
| 484 |
$via_html = "<span class='SimpleHistoryLogitem__inlineDivided SimpleHistoryLogitem__via'>";
|
| 485 |
$via_html .= $logger_name_via;
|
| 486 |
$via_html .= "</span>";
|
| 487 |
+
|
| 488 |
}
|
| 489 |
|
| 490 |
// Loglevel
|
| 498 |
|
| 499 |
// Glue together final result
|
| 500 |
$template = '
|
| 501 |
+
%1$s
|
| 502 |
+
%2$s
|
| 503 |
%3$s
|
| 504 |
';
|
| 505 |
#if ( ! $initiator_html ) {
|
| 546 |
public function getLogRowPlainTextOutput($row) {
|
| 547 |
|
| 548 |
$message = $row->message;
|
| 549 |
+
$message_key = isset( $row->context["_message_key"] ) ? $row->context["_message_key"] : null;
|
| 550 |
|
| 551 |
// Message is translated here, but translation must be added in
|
| 552 |
// plain text before
|
| 955 |
* @since 2.3.1
|
| 956 |
*/
|
| 957 |
$do_log = apply_filters( "simple_history/log/do_log", true, $level, $message, $context, $this );
|
| 958 |
+
|
| 959 |
if ( $do_log === false ) {
|
| 960 |
return $this;
|
| 961 |
}
|
| 1278 |
}
|
| 1279 |
|
| 1280 |
}
|
| 1281 |
+
|
| 1282 |
$this->lastInsertID = $history_inserted_id;
|
| 1283 |
|
| 1284 |
$this->simpleHistory->get_cache_incrementor(true);
|
loggers/SimpleOptionsLogger.php
CHANGED
|
@@ -234,7 +234,7 @@ class SimpleOptionsLogger extends SimpleLogger
|
|
| 234 |
}
|
| 235 |
|
| 236 |
if ( strlen( $old_value ) > $trim_length ) {
|
| 237 |
-
$
|
| 238 |
}
|
| 239 |
|
| 240 |
$output .= sprintf(
|
| 234 |
}
|
| 235 |
|
| 236 |
if ( strlen( $old_value ) > $trim_length ) {
|
| 237 |
+
$trimmed_old_value .= $more;
|
| 238 |
}
|
| 239 |
|
| 240 |
$output .= sprintf(
|
loggers/SimplePluginLogger.php
CHANGED
|
@@ -78,6 +78,14 @@ class SimplePluginLogger extends SimpleLogger
|
|
| 78 |
'Plugin was updated in bulk',
|
| 79 |
'simple-history'
|
| 80 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
), // messages
|
| 82 |
"labels" => array(
|
| 83 |
"search" => array(
|
|
@@ -88,7 +96,8 @@ class SimplePluginLogger extends SimpleLogger
|
|
| 88 |
'plugin_activated'
|
| 89 |
),
|
| 90 |
_x("Deactivated plugins", "Plugin logger: search", "simple-history") => array(
|
| 91 |
-
'plugin_deactivated'
|
|
|
|
| 92 |
),
|
| 93 |
_x("Installed plugins", "Plugin logger: search", "simple-history") => array(
|
| 94 |
'plugin_installed'
|
|
@@ -167,8 +176,58 @@ class SimplePluginLogger extends SimpleLogger
|
|
| 167 |
return $arr_headers;
|
| 168 |
} );
|
| 169 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 170 |
}
|
| 171 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 172 |
/**
|
| 173 |
* Show readme from github in a modal win
|
| 174 |
*/
|
| 78 |
'Plugin was updated in bulk',
|
| 79 |
'simple-history'
|
| 80 |
),
|
| 81 |
+
|
| 82 |
+
// plugin disabled due to some error
|
| 83 |
+
'plugin_disabled_because_error' => _x(
|
| 84 |
+
'Deactivated a plugin because of an error: {error_message}',
|
| 85 |
+
'Plugin was disabled because of an error',
|
| 86 |
+
'simple-history'
|
| 87 |
+
),
|
| 88 |
+
|
| 89 |
), // messages
|
| 90 |
"labels" => array(
|
| 91 |
"search" => array(
|
| 96 |
'plugin_activated'
|
| 97 |
),
|
| 98 |
_x("Deactivated plugins", "Plugin logger: search", "simple-history") => array(
|
| 99 |
+
'plugin_deactivated',
|
| 100 |
+
'plugin_disabled_because_error'
|
| 101 |
),
|
| 102 |
_x("Installed plugins", "Plugin logger: search", "simple-history") => array(
|
| 103 |
'plugin_installed'
|
| 176 |
return $arr_headers;
|
| 177 |
} );
|
| 178 |
|
| 179 |
+
// There is no way to ue a filter and detect a plugin that is disabled because it can't be found or similar error.
|
| 180 |
+
// So we hook into gettext and look for the usage of the error that is returned when this happens.
|
| 181 |
+
add_filter( 'gettext', array( $this, "on_gettext" ), 10, 3 );
|
| 182 |
+
|
| 183 |
}
|
| 184 |
|
| 185 |
+
/**
|
| 186 |
+
*
|
| 187 |
+
* There is no way to ue a filter and detect a plugin that is disabled because it can't be found or similar error.
|
| 188 |
+
* we hook into gettext and look for the usage of the error that is returned when this happens.
|
| 189 |
+
*/
|
| 190 |
+
function on_gettext( $translation, $text, $domain ) {
|
| 191 |
+
|
| 192 |
+
// The errors we can get is:
|
| 193 |
+
// return new WP_Error('plugin_invalid', __('Invalid plugin path.'));
|
| 194 |
+
// return new WP_Error('plugin_not_found', __('Plugin file does not exist.'));
|
| 195 |
+
// return new WP_Error('no_plugin_header', __('The plugin does not have a valid header.'));
|
| 196 |
+
|
| 197 |
+
// We only act on page plugins.php
|
| 198 |
+
global $pagenow;
|
| 199 |
+
|
| 200 |
+
if ( ! isset( $pagenow ) || $pagenow !== "plugins.php" ) {
|
| 201 |
+
return $translation;
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
// We only act if the untranslated text is among the following ones
|
| 205 |
+
// (Literally these, no translation)
|
| 206 |
+
$untranslated_texts = array(
|
| 207 |
+
"Plugin file does not exist.",
|
| 208 |
+
"Invalid plugin path.",
|
| 209 |
+
"The plugin does not have a valid header."
|
| 210 |
+
);
|
| 211 |
+
|
| 212 |
+
if ( ! in_array( $text, $untranslated_texts )) {
|
| 213 |
+
return $translation;
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
+
// We don't know what plugin that was that got this error and currently there does not seem to be a way to determine that
|
| 217 |
+
// So that's why we use such generic log messages
|
| 218 |
+
$this->warningMessage(
|
| 219 |
+
"plugin_disabled_because_error",
|
| 220 |
+
array(
|
| 221 |
+
"_initiator" => SimpleLoggerLogInitiators::WORDPRESS,
|
| 222 |
+
"error_message" => $text
|
| 223 |
+
)
|
| 224 |
+
);
|
| 225 |
+
|
| 226 |
+
return $translation;
|
| 227 |
+
|
| 228 |
+
} //on_gettext
|
| 229 |
+
|
| 230 |
+
|
| 231 |
/**
|
| 232 |
* Show readme from github in a modal win
|
| 233 |
*/
|
loggers/SimpleUserLogger.php
CHANGED
|
@@ -120,7 +120,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 120 |
// User reaches reset password (from link or only from user created link)
|
| 121 |
add_action( 'validate_password_reset', array( $this, "on_validate_password_reset" ), 10, 2 );
|
| 122 |
|
| 123 |
-
add_action( 'retrieve_password_message', array( $this, "on_retrieve_password_message" ), 10, 4 );
|
| 124 |
|
| 125 |
add_filter( 'insert_user_meta', array( $this, "on_insert_user_meta" ), 10, 3 );
|
| 126 |
|
|
@@ -129,11 +129,11 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 129 |
|
| 130 |
/*
|
| 131 |
* Called before the user is updated
|
| 132 |
-
*
|
| 133 |
* Filter a user's meta values and keys before the user is created or updated.
|
| 134 |
*
|
| 135 |
* Does not include contact methods. These are added using `wp_get_user_contact_methods( $user )`.
|
| 136 |
-
*
|
| 137 |
* @param array $meta {
|
| 138 |
* Default meta values and keys for the user.
|
| 139 |
*
|
|
@@ -163,7 +163,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 163 |
if ( empty( $user ) || ! is_object( $user ) ) {
|
| 164 |
return $meta;
|
| 165 |
}
|
| 166 |
-
|
| 167 |
// Make of copy of the posted data, because we change the keys
|
| 168 |
$posted_data = $_POST;
|
| 169 |
$posted_data = stripslashes_deep( $posted_data );
|
|
@@ -172,7 +172,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 172 |
if ( ! function_exists( "_get_additional_user_keys" ) ) {
|
| 173 |
return $meta;
|
| 174 |
}
|
| 175 |
-
|
| 176 |
// Get the default fields to include. This includes contact methods (including filter, so more could have been added)
|
| 177 |
$arr_keys_to_check = _get_additional_user_keys( $user );
|
| 178 |
|
|
@@ -187,20 +187,20 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 187 |
$posted_data["user_url"] = isset( $posted_data["url"] ) ? $posted_data["url"] : null;
|
| 188 |
$posted_data["show_admin_bar_front"] = isset( $posted_data["admin_bar_front"] ) ? true : null;
|
| 189 |
$posted_data["user_email"] = isset( $posted_data["email"] ) ? $posted_data["email"] : null;
|
| 190 |
-
|
| 191 |
// Display name publicly as = POST "display_name"
|
| 192 |
#var_dump($user->display_name);
|
| 193 |
|
| 194 |
// Set vals for Enable keyboard shortcuts for comment moderation
|
| 195 |
$posted_data['comment_shortcuts'] = isset( $posted_data['comment_shortcuts'] ) ? "true" : "false";
|
| 196 |
-
|
| 197 |
// Set vals for Disable the visual editor when writing
|
| 198 |
// posted val = string "false" = yes, disable
|
| 199 |
$posted_data['rich_editing'] = isset( $posted_data['rich_editing'] ) ? "false" : "true";
|
| 200 |
-
|
| 201 |
// Set vals for Show Toolbar when viewing site
|
| 202 |
$posted_data['show_admin_bar_front'] = isset( $posted_data['admin_bar_front'] ) ? "true" : "false";
|
| 203 |
-
|
| 204 |
// if checkbox is checked in admin then this is the saved value on the user object
|
| 205 |
// @todo:
|
| 206 |
|
|
@@ -209,7 +209,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 209 |
if ( ! empty( $posted_data['pass1'] ) && ! empty( $posted_data['pass2'] ) && $posted_data['pass1'] == $posted_data['pass2'] ) {
|
| 210 |
$password_changed = 1;
|
| 211 |
}
|
| 212 |
-
|
| 213 |
// Check if role was changed
|
| 214 |
//[role] => bbp_moderator
|
| 215 |
$role_changed = false;
|
|
@@ -222,10 +222,10 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 222 |
// Compare user role against currently editable roles
|
| 223 |
$user_roles = array_intersect( array_values( $user->roles ), array_keys( get_editable_roles() ) );
|
| 224 |
$old_role = reset( $user_roles );
|
| 225 |
-
|
| 226 |
$role_changed = $new_role != $old_role;
|
| 227 |
}
|
| 228 |
-
|
| 229 |
// Will contain the differences
|
| 230 |
$user_data_diff = array();
|
| 231 |
|
|
@@ -245,7 +245,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 245 |
}
|
| 246 |
|
| 247 |
$user_data_diff = $this->add_diff($user_data_diff, $one_key_to_check, $old_val, $new_val);
|
| 248 |
-
|
| 249 |
}
|
| 250 |
|
| 251 |
// Setup basic context
|
|
@@ -282,7 +282,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 282 |
|
| 283 |
}
|
| 284 |
|
| 285 |
-
|
| 286 |
$this->infoMessage("user_updated_profile", $context);
|
| 287 |
|
| 288 |
return $meta;
|
|
@@ -295,9 +295,9 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 295 |
*
|
| 296 |
*/
|
| 297 |
function on_retrieve_password_message( $message, $key, $user_login, $user_data ) {
|
| 298 |
-
|
| 299 |
if ( isset( $_GET["action"] ) && ( "lostpassword" == $_GET["action"] ) ) {
|
| 300 |
-
|
| 301 |
$context = array(
|
| 302 |
"_initiator" => SimpleLoggerLogInitiators::WEB_USER,
|
| 303 |
"message" => $message,
|
|
@@ -336,14 +336,14 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 336 |
User resets password
|
| 337 |
$errors empty
|
| 338 |
$user user object
|
| 339 |
-
$_post
|
| 340 |
|
| 341 |
*/
|
| 342 |
|
| 343 |
$context = array();
|
| 344 |
|
| 345 |
if ( is_a( $user, "WP_User") ) {
|
| 346 |
-
|
| 347 |
$context["_initiator"] = SimpleLoggerLogInitiators::WP_USER;
|
| 348 |
$context["_user_id"] = $user->ID;
|
| 349 |
$context["_user_login"] = $user->user_login;
|
|
@@ -352,7 +352,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 352 |
}
|
| 353 |
|
| 354 |
if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] ) {
|
| 355 |
-
|
| 356 |
// $errors->add( 'password_reset_mismatch', __( 'The passwords do not match.' ) );
|
| 357 |
// user failed to reset password
|
| 358 |
|
|
@@ -360,8 +360,8 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 360 |
|
| 361 |
|
| 362 |
if ( ( ! $errors->get_error_code() ) && isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
|
| 363 |
-
|
| 364 |
-
// login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url(
|
| 365 |
$this->infoMessage( "user_password_reseted", $context );
|
| 366 |
|
| 367 |
|
|
@@ -478,7 +478,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 478 |
$context["edit_profile_link"] = get_edit_user_link( $wp_user->ID );
|
| 479 |
|
| 480 |
$use_you = apply_filters("simple_history/user_logger/plain_text_output_use_you", true);
|
| 481 |
-
|
| 482 |
//error_log( serialize( $current_user_id) ); // int 1
|
| 483 |
//error_log( serialize( $context["_user_id"]) ); // string 1
|
| 484 |
|
|
@@ -522,7 +522,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 522 |
}
|
| 523 |
|
| 524 |
// if user_updated_profile
|
| 525 |
-
|
| 526 |
} else if ( "user_created" == $context["_message_key"] ) {
|
| 527 |
|
| 528 |
// A user was created. Create link of username that goes to user profile.
|
|
@@ -539,13 +539,13 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 539 |
$msg = __('Created user <a href="{edit_profile_link}">{created_user_login} ({created_user_email})</a> with role {created_user_role}', "simple-history");
|
| 540 |
|
| 541 |
$output = $this->interpolate(
|
| 542 |
-
$msg,
|
| 543 |
-
$context,
|
| 544 |
$row
|
| 545 |
);
|
| 546 |
|
| 547 |
} else {
|
| 548 |
-
|
| 549 |
// User does not exist any longer, keep original message
|
| 550 |
|
| 551 |
|
|
@@ -563,7 +563,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 563 |
* @param string $user_login
|
| 564 |
* @param object $user
|
| 565 |
*/
|
| 566 |
-
function on_wp_login($user_login, $user) {
|
| 567 |
|
| 568 |
$context = array(
|
| 569 |
"user_login" => $user_login
|
|
@@ -572,9 +572,9 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 572 |
if ( isset( $user_login ) ) {
|
| 573 |
|
| 574 |
$user_obj = get_user_by( "login", $user_login );
|
| 575 |
-
|
| 576 |
} else if ( isset( $user ) && isset( $user->ID ) ) {
|
| 577 |
-
|
| 578 |
$user_obj = get_user_by( "id", $user->ID );
|
| 579 |
|
| 580 |
}
|
|
@@ -602,7 +602,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 602 |
// Could not get any info about the user logging in
|
| 603 |
$this->warningMessage("user_unknown_logged_in", $context);
|
| 604 |
}
|
| 605 |
-
|
| 606 |
}
|
| 607 |
|
| 608 |
/**
|
|
@@ -617,7 +617,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 617 |
|
| 618 |
/**
|
| 619 |
* User is edited
|
| 620 |
-
*
|
| 621 |
* Called immediately after an existing user is updated.
|
| 622 |
* @param int $user_id User ID.
|
| 623 |
* @param object $old_user_data Object containing user's data prior to update.
|
|
@@ -639,7 +639,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 639 |
"old_user_data" => $old_user_data
|
| 640 |
);
|
| 641 |
|
| 642 |
-
|
| 643 |
$this->infoMessage("user_updated_profile", $context);
|
| 644 |
*/
|
| 645 |
|
|
@@ -730,7 +730,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 730 |
|
| 731 |
/**
|
| 732 |
* Attempt to login to user that does not exist
|
| 733 |
-
*
|
| 734 |
* @param $user (null or WP_User or WP_Error) (required) null indicates no process has authenticated the user yet. A WP_Error object indicates another process has failed the authentication. A WP_User object indicates another process has authenticated the user.
|
| 735 |
* @param $username The user's username.
|
| 736 |
* @param $password The user's password (encrypted)
|
|
@@ -744,9 +744,9 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 744 |
|
| 745 |
// If already auth ok
|
| 746 |
if ( is_a( $user, 'WP_User' ) ) {
|
| 747 |
-
|
| 748 |
$wp_user = $user;
|
| 749 |
-
|
| 750 |
} else {
|
| 751 |
|
| 752 |
// If username is not a user in the system then this
|
|
@@ -791,7 +791,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 791 |
return $user;
|
| 792 |
|
| 793 |
}
|
| 794 |
-
|
| 795 |
/**
|
| 796 |
* Add diff to array if old and new values are different
|
| 797 |
*
|
|
@@ -814,7 +814,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 814 |
|
| 815 |
/**
|
| 816 |
* Return more info about an logged event
|
| 817 |
-
* Supports so far:
|
| 818 |
*/
|
| 819 |
function getLogRowDetailsOutput( $row ) {
|
| 820 |
|
|
@@ -884,7 +884,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 884 |
foreach ( $arr_user_keys_to_show_diff_for as $key => $val ) {
|
| 885 |
|
| 886 |
if ( isset( $context["user_prev_{$key}"] ) && isset( $context["user_new_{$key}"] ) ) {
|
| 887 |
-
|
| 888 |
$user_old_value = $context["user_prev_{$key}"];
|
| 889 |
$user_new_value = $context["user_new_{$key}"];
|
| 890 |
|
|
@@ -892,9 +892,9 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 892 |
'<tr>
|
| 893 |
<td>%1$s</td>
|
| 894 |
<td>%2$s</td>
|
| 895 |
-
</tr>',
|
| 896 |
$val["title"],
|
| 897 |
-
sprintf(
|
| 898 |
'<ins class="SimpleHistoryLogitem__keyValueTable__addedThing">%1$s</ins> <del class="SimpleHistoryLogitem__keyValueTable__removedThing">%2$s</del>',
|
| 899 |
esc_html( $user_new_value ), // 1
|
| 900 |
esc_html( $user_old_value ) // 2
|
|
@@ -912,7 +912,7 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 912 |
'<tr>
|
| 913 |
<td>%1$s</td>
|
| 914 |
<td>%2$s</td>
|
| 915 |
-
</tr>',
|
| 916 |
_x("Password", "User logger", "simple-history"),
|
| 917 |
_x("Changed", "User logger", "simple-history")
|
| 918 |
);
|
|
@@ -962,9 +962,9 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 962 |
'<tr>
|
| 963 |
<td>%1$s</td>
|
| 964 |
<td>%2$s</td>
|
| 965 |
-
</tr>',
|
| 966 |
_x("Notification", "User logger", "simple-history"),
|
| 967 |
-
sprintf(
|
| 968 |
'<ins class="SimpleHistoryLogitem__keyValueTable__addedThing">%1$s</ins>',
|
| 969 |
esc_html( $sent_status ) // 1
|
| 970 |
)
|
|
@@ -978,9 +978,9 @@ class SimpleUserLogger extends SimpleLogger {
|
|
| 978 |
'<tr>
|
| 979 |
<td>%1$s</td>
|
| 980 |
<td>%2$s</td>
|
| 981 |
-
</tr>',
|
| 982 |
$val["title"],
|
| 983 |
-
sprintf(
|
| 984 |
'<ins class="SimpleHistoryLogitem__keyValueTable__addedThing">%1$s</ins>',
|
| 985 |
esc_html( $context[ $key ] ) // 1
|
| 986 |
)
|
| 120 |
// User reaches reset password (from link or only from user created link)
|
| 121 |
add_action( 'validate_password_reset', array( $this, "on_validate_password_reset" ), 10, 2 );
|
| 122 |
|
| 123 |
+
add_action( 'retrieve_password_message', array( $this, "on_retrieve_password_message" ), 10, 4 );
|
| 124 |
|
| 125 |
add_filter( 'insert_user_meta', array( $this, "on_insert_user_meta" ), 10, 3 );
|
| 126 |
|
| 129 |
|
| 130 |
/*
|
| 131 |
* Called before the user is updated
|
| 132 |
+
*
|
| 133 |
* Filter a user's meta values and keys before the user is created or updated.
|
| 134 |
*
|
| 135 |
* Does not include contact methods. These are added using `wp_get_user_contact_methods( $user )`.
|
| 136 |
+
*
|
| 137 |
* @param array $meta {
|
| 138 |
* Default meta values and keys for the user.
|
| 139 |
*
|
| 163 |
if ( empty( $user ) || ! is_object( $user ) ) {
|
| 164 |
return $meta;
|
| 165 |
}
|
| 166 |
+
|
| 167 |
// Make of copy of the posted data, because we change the keys
|
| 168 |
$posted_data = $_POST;
|
| 169 |
$posted_data = stripslashes_deep( $posted_data );
|
| 172 |
if ( ! function_exists( "_get_additional_user_keys" ) ) {
|
| 173 |
return $meta;
|
| 174 |
}
|
| 175 |
+
|
| 176 |
// Get the default fields to include. This includes contact methods (including filter, so more could have been added)
|
| 177 |
$arr_keys_to_check = _get_additional_user_keys( $user );
|
| 178 |
|
| 187 |
$posted_data["user_url"] = isset( $posted_data["url"] ) ? $posted_data["url"] : null;
|
| 188 |
$posted_data["show_admin_bar_front"] = isset( $posted_data["admin_bar_front"] ) ? true : null;
|
| 189 |
$posted_data["user_email"] = isset( $posted_data["email"] ) ? $posted_data["email"] : null;
|
| 190 |
+
|
| 191 |
// Display name publicly as = POST "display_name"
|
| 192 |
#var_dump($user->display_name);
|
| 193 |
|
| 194 |
// Set vals for Enable keyboard shortcuts for comment moderation
|
| 195 |
$posted_data['comment_shortcuts'] = isset( $posted_data['comment_shortcuts'] ) ? "true" : "false";
|
| 196 |
+
|
| 197 |
// Set vals for Disable the visual editor when writing
|
| 198 |
// posted val = string "false" = yes, disable
|
| 199 |
$posted_data['rich_editing'] = isset( $posted_data['rich_editing'] ) ? "false" : "true";
|
| 200 |
+
|
| 201 |
// Set vals for Show Toolbar when viewing site
|
| 202 |
$posted_data['show_admin_bar_front'] = isset( $posted_data['admin_bar_front'] ) ? "true" : "false";
|
| 203 |
+
|
| 204 |
// if checkbox is checked in admin then this is the saved value on the user object
|
| 205 |
// @todo:
|
| 206 |
|
| 209 |
if ( ! empty( $posted_data['pass1'] ) && ! empty( $posted_data['pass2'] ) && $posted_data['pass1'] == $posted_data['pass2'] ) {
|
| 210 |
$password_changed = 1;
|
| 211 |
}
|
| 212 |
+
|
| 213 |
// Check if role was changed
|
| 214 |
//[role] => bbp_moderator
|
| 215 |
$role_changed = false;
|
| 222 |
// Compare user role against currently editable roles
|
| 223 |
$user_roles = array_intersect( array_values( $user->roles ), array_keys( get_editable_roles() ) );
|
| 224 |
$old_role = reset( $user_roles );
|
| 225 |
+
|
| 226 |
$role_changed = $new_role != $old_role;
|
| 227 |
}
|
| 228 |
+
|
| 229 |
// Will contain the differences
|
| 230 |
$user_data_diff = array();
|
| 231 |
|
| 245 |
}
|
| 246 |
|
| 247 |
$user_data_diff = $this->add_diff($user_data_diff, $one_key_to_check, $old_val, $new_val);
|
| 248 |
+
|
| 249 |
}
|
| 250 |
|
| 251 |
// Setup basic context
|
| 282 |
|
| 283 |
}
|
| 284 |
|
| 285 |
+
|
| 286 |
$this->infoMessage("user_updated_profile", $context);
|
| 287 |
|
| 288 |
return $meta;
|
| 295 |
*
|
| 296 |
*/
|
| 297 |
function on_retrieve_password_message( $message, $key, $user_login, $user_data ) {
|
| 298 |
+
|
| 299 |
if ( isset( $_GET["action"] ) && ( "lostpassword" == $_GET["action"] ) ) {
|
| 300 |
+
|
| 301 |
$context = array(
|
| 302 |
"_initiator" => SimpleLoggerLogInitiators::WEB_USER,
|
| 303 |
"message" => $message,
|
| 336 |
User resets password
|
| 337 |
$errors empty
|
| 338 |
$user user object
|
| 339 |
+
$_post
|
| 340 |
|
| 341 |
*/
|
| 342 |
|
| 343 |
$context = array();
|
| 344 |
|
| 345 |
if ( is_a( $user, "WP_User") ) {
|
| 346 |
+
|
| 347 |
$context["_initiator"] = SimpleLoggerLogInitiators::WP_USER;
|
| 348 |
$context["_user_id"] = $user->ID;
|
| 349 |
$context["_user_login"] = $user->user_login;
|
| 352 |
}
|
| 353 |
|
| 354 |
if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] ) {
|
| 355 |
+
|
| 356 |
// $errors->add( 'password_reset_mismatch', __( 'The passwords do not match.' ) );
|
| 357 |
// user failed to reset password
|
| 358 |
|
| 360 |
|
| 361 |
|
| 362 |
if ( ( ! $errors->get_error_code() ) && isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
|
| 363 |
+
|
| 364 |
+
// login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url(
|
| 365 |
$this->infoMessage( "user_password_reseted", $context );
|
| 366 |
|
| 367 |
|
| 478 |
$context["edit_profile_link"] = get_edit_user_link( $wp_user->ID );
|
| 479 |
|
| 480 |
$use_you = apply_filters("simple_history/user_logger/plain_text_output_use_you", true);
|
| 481 |
+
|
| 482 |
//error_log( serialize( $current_user_id) ); // int 1
|
| 483 |
//error_log( serialize( $context["_user_id"]) ); // string 1
|
| 484 |
|
| 522 |
}
|
| 523 |
|
| 524 |
// if user_updated_profile
|
| 525 |
+
|
| 526 |
} else if ( "user_created" == $context["_message_key"] ) {
|
| 527 |
|
| 528 |
// A user was created. Create link of username that goes to user profile.
|
| 539 |
$msg = __('Created user <a href="{edit_profile_link}">{created_user_login} ({created_user_email})</a> with role {created_user_role}', "simple-history");
|
| 540 |
|
| 541 |
$output = $this->interpolate(
|
| 542 |
+
$msg,
|
| 543 |
+
$context,
|
| 544 |
$row
|
| 545 |
);
|
| 546 |
|
| 547 |
} else {
|
| 548 |
+
|
| 549 |
// User does not exist any longer, keep original message
|
| 550 |
|
| 551 |
|
| 563 |
* @param string $user_login
|
| 564 |
* @param object $user
|
| 565 |
*/
|
| 566 |
+
function on_wp_login( $user_login = null, $user = null) {
|
| 567 |
|
| 568 |
$context = array(
|
| 569 |
"user_login" => $user_login
|
| 572 |
if ( isset( $user_login ) ) {
|
| 573 |
|
| 574 |
$user_obj = get_user_by( "login", $user_login );
|
| 575 |
+
|
| 576 |
} else if ( isset( $user ) && isset( $user->ID ) ) {
|
| 577 |
+
|
| 578 |
$user_obj = get_user_by( "id", $user->ID );
|
| 579 |
|
| 580 |
}
|
| 602 |
// Could not get any info about the user logging in
|
| 603 |
$this->warningMessage("user_unknown_logged_in", $context);
|
| 604 |
}
|
| 605 |
+
|
| 606 |
}
|
| 607 |
|
| 608 |
/**
|
| 617 |
|
| 618 |
/**
|
| 619 |
* User is edited
|
| 620 |
+
*
|
| 621 |
* Called immediately after an existing user is updated.
|
| 622 |
* @param int $user_id User ID.
|
| 623 |
* @param object $old_user_data Object containing user's data prior to update.
|
| 639 |
"old_user_data" => $old_user_data
|
| 640 |
);
|
| 641 |
|
| 642 |
+
|
| 643 |
$this->infoMessage("user_updated_profile", $context);
|
| 644 |
*/
|
| 645 |
|
| 730 |
|
| 731 |
/**
|
| 732 |
* Attempt to login to user that does not exist
|
| 733 |
+
*
|
| 734 |
* @param $user (null or WP_User or WP_Error) (required) null indicates no process has authenticated the user yet. A WP_Error object indicates another process has failed the authentication. A WP_User object indicates another process has authenticated the user.
|
| 735 |
* @param $username The user's username.
|
| 736 |
* @param $password The user's password (encrypted)
|
| 744 |
|
| 745 |
// If already auth ok
|
| 746 |
if ( is_a( $user, 'WP_User' ) ) {
|
| 747 |
+
|
| 748 |
$wp_user = $user;
|
| 749 |
+
|
| 750 |
} else {
|
| 751 |
|
| 752 |
// If username is not a user in the system then this
|
| 791 |
return $user;
|
| 792 |
|
| 793 |
}
|
| 794 |
+
|
| 795 |
/**
|
| 796 |
* Add diff to array if old and new values are different
|
| 797 |
*
|
| 814 |
|
| 815 |
/**
|
| 816 |
* Return more info about an logged event
|
| 817 |
+
* Supports so far:
|
| 818 |
*/
|
| 819 |
function getLogRowDetailsOutput( $row ) {
|
| 820 |
|
| 884 |
foreach ( $arr_user_keys_to_show_diff_for as $key => $val ) {
|
| 885 |
|
| 886 |
if ( isset( $context["user_prev_{$key}"] ) && isset( $context["user_new_{$key}"] ) ) {
|
| 887 |
+
|
| 888 |
$user_old_value = $context["user_prev_{$key}"];
|
| 889 |
$user_new_value = $context["user_new_{$key}"];
|
| 890 |
|
| 892 |
'<tr>
|
| 893 |
<td>%1$s</td>
|
| 894 |
<td>%2$s</td>
|
| 895 |
+
</tr>',
|
| 896 |
$val["title"],
|
| 897 |
+
sprintf(
|
| 898 |
'<ins class="SimpleHistoryLogitem__keyValueTable__addedThing">%1$s</ins> <del class="SimpleHistoryLogitem__keyValueTable__removedThing">%2$s</del>',
|
| 899 |
esc_html( $user_new_value ), // 1
|
| 900 |
esc_html( $user_old_value ) // 2
|
| 912 |
'<tr>
|
| 913 |
<td>%1$s</td>
|
| 914 |
<td>%2$s</td>
|
| 915 |
+
</tr>',
|
| 916 |
_x("Password", "User logger", "simple-history"),
|
| 917 |
_x("Changed", "User logger", "simple-history")
|
| 918 |
);
|
| 962 |
'<tr>
|
| 963 |
<td>%1$s</td>
|
| 964 |
<td>%2$s</td>
|
| 965 |
+
</tr>',
|
| 966 |
_x("Notification", "User logger", "simple-history"),
|
| 967 |
+
sprintf(
|
| 968 |
'<ins class="SimpleHistoryLogitem__keyValueTable__addedThing">%1$s</ins>',
|
| 969 |
esc_html( $sent_status ) // 1
|
| 970 |
)
|
| 978 |
'<tr>
|
| 979 |
<td>%1$s</td>
|
| 980 |
<td>%2$s</td>
|
| 981 |
+
</tr>',
|
| 982 |
$val["title"],
|
| 983 |
+
sprintf(
|
| 984 |
'<ins class="SimpleHistoryLogitem__keyValueTable__addedThing">%1$s</ins>',
|
| 985 |
esc_html( $context[ $key ] ) // 1
|
| 986 |
)
|
readme.txt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
=== Simple History ===
|
| 2 |
Contributors: eskapism
|
| 3 |
Donate link: http://eskapism.se/sida/donate/
|
| 4 |
-
Tags: history, log, changes, changelog, audit, trail, pages, attachments, users,
|
| 5 |
Requires at least: 4.5.1
|
| 6 |
Tested up to: 4.5.2
|
| 7 |
-
Stable tag: 2.7.
|
| 8 |
|
| 9 |
View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
|
| 10 |
|
|
@@ -147,6 +147,13 @@ A simple way to see any uncommon activity, for example an increased number of lo
|
|
| 147 |
|
| 148 |
## Changelog
|
| 149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
= 2.7.3 (June 2016) =
|
| 151 |
|
| 152 |
- Removed the usage of the mb_* functions and mbstring is no longer a requirement.
|
| 1 |
=== Simple History ===
|
| 2 |
Contributors: eskapism
|
| 3 |
Donate link: http://eskapism.se/sida/donate/
|
| 4 |
+
Tags: history, log, changes, changelog, audit, trail, pages, attachments, users, dashboard, admin, syslog, feed, activity, stream, audit trail, brute-force
|
| 5 |
Requires at least: 4.5.1
|
| 6 |
Tested up to: 4.5.2
|
| 7 |
+
Stable tag: 2.7.4
|
| 8 |
|
| 9 |
View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
|
| 10 |
|
| 147 |
|
| 148 |
## Changelog
|
| 149 |
|
| 150 |
+
= 2.7.4 (Jule 2016) =
|
| 151 |
+
|
| 152 |
+
- Log a warning message if a plugin gets disabled automatically by WordPress because of any of these errors: "Plugin file does not exist.", "Invalid plugin path.", "The plugin does not have a valid header."
|
| 153 |
+
- Fix warning error if `on_wp_login()` was called without second argument.
|
| 154 |
+
- Fix options diff not being shown correctly.
|
| 155 |
+
- Fix notice if no message key did exist for a log message.
|
| 156 |
+
|
| 157 |
= 2.7.3 (June 2016) =
|
| 158 |
|
| 159 |
- Removed the usage of the mb_* functions and mbstring is no longer a requirement.
|
