From bbf610b87655bce6003d09654f52a690e002f3ef Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Fri, 25 May 2007 21:53:45 +0000 Subject: [PATCH] Admins can search ip and email in quick search classes.inc.php | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1838 839d8a87-29fc-0310-9880-83ba4fa771e5 --- modules/search/classes.inc.php | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/modules/search/classes.inc.php b/modules/search/classes.inc.php index a23853b..63da70a 100644 --- a/modules/search/classes.inc.php +++ b/modules/search/classes.inc.php @@ -198,6 +198,9 @@ class QuickSearch extends SField var $strings; /** stores numerical ranges */ var $ranges; + /** stores admin searches */ + var $email; + var $ip; // }}} // {{{ constructor @@ -216,7 +219,7 @@ class QuickSearch extends SField function isempty() { - return empty($this->strings) && empty($this->ranges); + return empty($this->strings) && empty($this->ranges) && empty($this->email) && empty($this->ip); } // }}} @@ -226,12 +229,22 @@ class QuickSearch extends SField { parent::get_request(); $s = replace_accent(trim($this->value)); + $r = $s = str_replace('*','%',$s); + + if (S::has_perms() && strpos($s, '@') !== false) { + $this->email = $s; + } else if (S::has_perms() && preg_match('/[0-9]+\.([0-9]+|%)\.([0-9]+|%)\.([0-9]+|%)/', $s)) { + $this->ip = $s; + } + if ($this->email || $this->ip) { + $this->strings = $this->ranges = array(); + return; + } + $s = preg_replace('!\d+!', ' ', $s); - $s = str_replace('*','%',$s); $this->strings = preg_split("![^a-zA-Z%]+!",$s, -1, PREG_SPLIT_NO_EMPTY); - $s = trim($this->value); - $s = preg_replace('! *- *!', '-', $s); + $s = preg_replace('! *- *!', '-', $r); $s = preg_replace('!([<>]) *!', ' \1', $s); $s = preg_replace('![^0-9\-><]!', ' ', $s); $s = preg_replace('![<>\-] !', '', $s); @@ -276,6 +289,13 @@ class QuickSearch extends SField if (!empty($wherep)) { $where[] = '('.join(' OR ',$wherep).')'; } + if (!empty($this->email)) { + $where[] = 'ems.email = ' . XDB::escape($this->email); + } + if (!empty($this->ip)) { + $ip = XDB::escape($this->ip); + $where[] = "( ls.ip = $ip OR ls.forward_ip = $ip )"; + } return join(" AND ", $where); } @@ -294,6 +314,12 @@ class QuickSearch extends SField $join .= "INNER JOIN search_name AS sn$i ON (u.user_id = sn$i.uid $and$myu)\n"; $uniq .= " AND sn$i.token != snv.token"; } + if (!empty($this->email)) { + $join .= "LEFT JOIN emails AS ems ON (ems.uid = u.user_id)"; + } + if (!empty($this->ip)) { + $join .= "INNER JOIN logger.sessions AS ls ON (ls.uid = u.user_id)\n"; + } return $join; } // }}} -- 2.1.4