diff --git a/administrator/components/com_admin/sql/updates/postgresql/3.9.15-2020-01-08.sql b/administrator/components/com_admin/sql/updates/postgresql/3.9.15-2020-01-08.sql new file mode 100644 index 0000000000000..a25179f9b38d1 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/3.9.15-2020-01-08.sql @@ -0,0 +1 @@ +CREATE INDEX "#__users_email_lower" ON "#__users" (lower("email")); diff --git a/administrator/components/com_privacy/models/export.php b/administrator/components/com_privacy/models/export.php index 0bb8e5acac71d..89d323638d59e 100644 --- a/administrator/components/com_privacy/models/export.php +++ b/administrator/components/com_privacy/models/export.php @@ -69,7 +69,7 @@ public function collectDataForExportRequest($id = null) $db->getQuery(true) ->select('id') ->from($db->quoteName('#__users')) - ->where($db->quoteName('email') . ' = ' . $db->quote($table->email)), + ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($table->email) . ')'), 0, 1 )->loadResult(); @@ -164,7 +164,7 @@ public function emailDataExport($id = null) $db->getQuery(true) ->select('id') ->from($db->quoteName('#__users')) - ->where($db->quoteName('email') . ' = ' . $db->quote($table->email)), + ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($table->email) . ')'), 0, 1 )->loadResult(); diff --git a/administrator/components/com_privacy/models/remove.php b/administrator/components/com_privacy/models/remove.php index 86e1d551284b2..75f3e73bc8acd 100644 --- a/administrator/components/com_privacy/models/remove.php +++ b/administrator/components/com_privacy/models/remove.php @@ -70,7 +70,7 @@ public function removeDataForRequest($id = null) $db->getQuery(true) ->select('id') ->from($db->quoteName('#__users')) - ->where($db->quoteName('email') . ' = ' . $db->quote($table->email)), + ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($table->email) . ')'), 0, 1 )->loadResult(); diff --git a/administrator/components/com_privacy/models/request.php b/administrator/components/com_privacy/models/request.php index bf3eead939c3e..5c679f5ca3acb 100644 --- a/administrator/components/com_privacy/models/request.php +++ b/administrator/components/com_privacy/models/request.php @@ -262,7 +262,7 @@ public function notifyUserAdminCreatedRequest($id) $db->getQuery(true) ->select('id') ->from($db->quoteName('#__users')) - ->where($db->quoteName('email') . ' = ' . $db->quote($table->email)), + ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($table->email) . ')'), 0, 1 )->loadResult(); diff --git a/components/com_users/models/remind.php b/components/com_users/models/remind.php index 967daac122de7..c940c67087410 100644 --- a/components/com_users/models/remind.php +++ b/components/com_users/models/remind.php @@ -125,7 +125,7 @@ public function processRemindRequest($data) $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__users')) - ->where($db->quoteName('email') . ' = ' . $db->quote($data['email'])); + ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($data['email']) . ')'); // Get the user id. $db->setQuery($query); diff --git a/components/com_users/models/reset.php b/components/com_users/models/reset.php index d93c49eb491e7..fc9117e1fb41f 100644 --- a/components/com_users/models/reset.php +++ b/components/com_users/models/reset.php @@ -379,7 +379,7 @@ public function processResetRequest($data) $query = $db->getQuery(true) ->select('id') ->from($db->quoteName('#__users')) - ->where($db->quoteName('email') . ' = ' . $db->quote($data['email'])); + ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($data['email']) . ')'); // Get the user object. $db->setQuery($query); diff --git a/installation/sql/postgresql/joomla.sql b/installation/sql/postgresql/joomla.sql index 77cebdbebafcb..54116efe76d21 100644 --- a/installation/sql/postgresql/joomla.sql +++ b/installation/sql/postgresql/joomla.sql @@ -2055,6 +2055,7 @@ CREATE INDEX "#__users_idx_name" ON "#__users" ("name"); CREATE INDEX "#__users_idx_block" ON "#__users" ("block"); CREATE INDEX "#__users_username" ON "#__users" ("username"); CREATE INDEX "#__users_email" ON "#__users" ("email"); +CREATE INDEX "#__users_email_lower" ON "#__users" (lower("email")); COMMENT ON COLUMN "#__users"."lastResetTime" IS 'Date of last password reset'; COMMENT ON COLUMN "#__users"."resetCount" IS 'Count of password resets since lastResetTime'; diff --git a/libraries/src/Table/User.php b/libraries/src/Table/User.php index fd35e44864ce3..2527c988b817b 100644 --- a/libraries/src/Table/User.php +++ b/libraries/src/Table/User.php @@ -245,7 +245,7 @@ public function check() $query->clear() ->select($this->_db->quoteName('id')) ->from($this->_db->quoteName('#__users')) - ->where($this->_db->quoteName('email') . ' = ' . $this->_db->quote($this->email)) + ->where('LOWER(' . $this->_db->quoteName('email') . ') = LOWER(' . $this->_db->quote($this->email) . ')') ->where($this->_db->quoteName('id') . ' != ' . (int) $this->id); $this->_db->setQuery($query); $xid = (int) $this->_db->loadResult(); diff --git a/plugins/system/updatenotification/updatenotification.php b/plugins/system/updatenotification/updatenotification.php index da06897328ed2..c3df4a09f323e 100644 --- a/plugins/system/updatenotification/updatenotification.php +++ b/plugins/system/updatenotification/updatenotification.php @@ -366,7 +366,7 @@ private function getSuperUsers($email = null) if (!empty($emails)) { - $query->where($db->qn('email') . 'IN(' . implode(',', $emails) . ')'); + $query->where('LOWER(' . $db->qn('email') . ') IN(' . implode(',', array_map('strtolower', $emails)) . ')'); } $db->setQuery($query);