diff --git a/e107_handlers/event_class.php b/e107_handlers/event_class.php index 91d7b2659..2aec35a77 100644 --- a/e107_handlers/event_class.php +++ b/e107_handlers/event_class.php @@ -94,7 +94,8 @@ class e107_event 'user_ban_flood' => NS_LAN_2, 'user_ban_failed_login' => NS_LAN_3, 'user_profile_display' => NU_LAN_8, - 'user_profile_edit' => NU_LAN_9 + 'user_profile_edit' => NU_LAN_9, + 'user_ip_changed' => defset('NU_LAN_10', 'User IP changed') ), diff --git a/e107_handlers/user_model.php b/e107_handlers/user_model.php index 0902d4a72..e989eb298 100644 --- a/e107_handlers/user_model.php +++ b/e107_handlers/user_model.php @@ -2138,19 +2138,36 @@ class e_user extends e_user_model { $sql = e107::getDb(); $this->set('last_ip', $this->get('user_ip')); - $current_ip = e107::getIPHandler()->getIP(FALSE); - $update_ip = $this->get('user_ip' != $current_ip ? ", user_ip = '".$current_ip."'" : ""); + $current_ip = e107::getIPHandler()->getIP(); + $update_ip = ''; + + if($this->get('user_ip') != $current_ip) + { + $update_ip = ", user_ip = '".$current_ip."'"; + $edata = [ + 'old_ip' => $this->get('user_ip'), + 'new_ip' => $current_ip, + 'time' => date('c'), + 'user_id' => $this->getId(), + 'user_name' => $this->get('user_name'), + ]; + + e107::getEvent()->trigger('user_ip_changed', $edata); // new v2.3.3 + } + + + $update_ip = ($this->get('user_ip') != $current_ip) ? ", user_ip = '".$current_ip."'" : ''; $this->set('user_ip', $current_ip); if($this->get('user_currentvisit') + 3600 < time() || !$this->get('user_lastvisit')) { $this->set('user_lastvisit', (integer) $this->get('user_currentvisit')); $this->set('user_currentvisit', time()); - $sql->update('user', "user_visits = user_visits + 1, user_lastvisit = ".$this->get('user_lastvisit').", user_currentvisit = ".$this->get('user_currentvisit')."{$update_ip} WHERE user_id='".$this->getId()."' "); + $sql->update('user', "user_visits = user_visits + 1, user_lastvisit = ".$this->get('user_lastvisit').", user_currentvisit = ".$this->get('user_currentvisit').$update_ip." WHERE user_id = ".$this->getId()." LIMIT 1 "); } else { $this->set('user_currentvisit', time()); - $sql->update('user', "user_currentvisit = ".$this->get('user_currentvisit')."{$update_ip} WHERE user_id='".$this->getId()."' "); + $sql->update('user', "user_currentvisit = ".$this->get('user_currentvisit').$update_ip." WHERE user_id = ".$this->getId()." LIMIT 1 "); } } } diff --git a/e107_languages/English/admin/lan_notify.php b/e107_languages/English/admin/lan_notify.php index 02739cf2e..64a281e7f 100644 --- a/e107_languages/English/admin/lan_notify.php +++ b/e107_languages/English/admin/lan_notify.php @@ -27,6 +27,7 @@ define("NU_LAN_7", "User social signup"); define("NU_LAN_8", "User views profile"); define("NU_LAN_9", "User edits profile"); + define("NS_LAN_1", "Security Events"); define("NS_LAN_2", "IP banned for flooding site"); define("NS_LAN_3", "IP banned for multiple failed login attempts"); @@ -47,4 +48,5 @@ define("NF_LAN_2", "File uploaded by user"); define("LAN_NOTIFY_01", "Events"); +define("NU_LAN_10", "User IP changed");