diff --git a/libraries/joomla/application/application.php b/libraries/joomla/application/application.php index 1b772a6468..fa322f600e 100644 --- a/libraries/joomla/application/application.php +++ b/libraries/joomla/application/application.php @@ -1056,7 +1056,10 @@ protected function _createSession($name) // The modulus introduces a little entropy, making the flushing less accurate // but fires the query less than half the time. $query = $db->getQuery(true); - $db->setQuery('DELETE FROM ' . $query->qn('#__session') . ' WHERE ' . $query->qn('time') . ' < ' . (int) ($time - $session->getExpire())); + $query->delete($query->qn('#__session')) + ->where($query->qn('time') . ' < ' . $query->q((int) ($time - $session->getExpire()))); + + $db->setQuery($query); $db->query(); } @@ -1087,32 +1090,37 @@ public function checkSession() $user = JFactory::getUser(); $query = $db->getQuery(true); - $db->setQuery( - 'SELECT ' . $query->qn('session_id') . ' FROM ' . $query->qn('#__session') . ' WHERE ' . $query->qn('session_id') . ' = ' . - $query->q($session->getId()), - 0, 1 - ); + $query->select($query->qn('session_id')) + ->from($query->qn('#__session')) + ->where($query->qn('session_id') . ' = ' . $query->q($session->getId())); + + $db->setQuery($query, 0, 1); $exists = $db->loadResult(); // If the session record doesn't exist initialise it. if (!$exists) { + $query->clear(); if ($session->isNew()) { - $db->setQuery( - 'INSERT INTO ' . $query->qn('#__session') . ' (' . $query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' . - $query->qn('time') . ')' . ' VALUES (' . $query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . - (int) time() . ')' - ); + $query->insert($query->qn('#__session')) + ->columns($query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' . $query->qn('time')) + ->values($query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . $query->q((int) time())); + $db->setQuery($query); } else { - $db->setQuery( - 'INSERT INTO ' . $query->qn('#__session') . ' (' . $query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' . - $query->qn('guest') . ', ' . $query->qn('time') . ', ' . $query->qn('userid') . ', ' . $query->qn('username') . ')' . - ' VALUES (' . $query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . (int) $user->get('guest') . ', ' . - (int) $session->get('session.timer.start') . ', ' . (int) $user->get('id') . ', ' . $query->q($user->get('username')) . ')' - ); + $query->insert($query->qn('#__session')) + ->columns( + $query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' . $query->qn('guest') . ', ' . + $query->qn('time') . ', ' . $query->qn('userid') . ', ' . $query->qn('username') + ) + ->values( + $query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . (int) $user->get('guest') . ', ' . + $query->q((int) $session->get('session.timer.start')) . ', ' . (int) $user->get('id') . ', ' . $query->q($user->get('username')) + ); + + $db->setQuery($query); } // If the insert failed, exit the application. diff --git a/libraries/joomla/application/categories.php b/libraries/joomla/application/categories.php index 98380fe6a3..62c9ed174d 100644 --- a/libraries/joomla/application/categories.php +++ b/libraries/joomla/application/categories.php @@ -290,7 +290,7 @@ protected function _load($id) // Right join with c for category $query->select('c.*'); $case_when = ' CASE WHEN '; - $case_when .= $query->charLength('c.alias'); + $case_when .= $query->charLength('c.alias') . '!=0'; $case_when .= ' THEN '; $c_id = $query->castAsChar('c.id'); $case_when .= $query->concatenate(array($c_id, 'c.alias'), ':'); diff --git a/libraries/joomla/session/storage/database.php b/libraries/joomla/session/storage/database.php index b99842055c..bb64a29d10 100644 --- a/libraries/joomla/session/storage/database.php +++ b/libraries/joomla/session/storage/database.php @@ -100,12 +100,14 @@ public function write($id, $data) return false; } + $query = $db->getQuery(true); + $query->update($db->quoteName('#__session')) + ->set($db->quoteName('data') . ' = ' . $db->quote($data)) + ->set($db->quoteName('time') . ' = ' . $db->quote((int) time())) + ->where($db->quoteName('session_id') . ' = ' . $db->quote($id)); + // Try to update the session data in the database table. - $db->setQuery( - 'UPDATE ' . $db->quoteName('#__session') . - ' SET ' . $db->quoteName('data') . ' = ' . $db->quote($data) . ',' . ' ' . $db->quoteName('time') . ' = ' . (int) time() . - ' WHERE ' . $db->quoteName('session_id') . ' = ' . $db->quote($id) - ); + $db->setQuery($query); if (!$db->query()) { return false; @@ -117,12 +119,13 @@ public function write($id, $data) } else { + $query->clear(); + $query->insert($db->quoteName('#__session')) + ->columns($db->quoteName('session_id') . ', ' . $db->quoteName('data') . ', ' . $db->quoteName('time')) + ->values($db->quote($id) . ', ' . $db->quote($data) . ', ' . $db->quote((int) time())); + // If the session does not exist, we need to insert the session. - $db->setQuery( - 'INSERT INTO ' . $db->quoteName('#__session') . - ' (' . $db->quoteName('session_id') . ', ' . $db->quoteName('data') . ', ' . $db->quoteName('time') . ')' . - ' VALUES (' . $db->quote($id) . ', ' . $db->quote($data) . ', ' . (int) time() . ')' - ); + $db->setQuery($query); return (boolean) $db->query(); } } @@ -145,11 +148,12 @@ public function destroy($id) return false; } + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__session')) + ->where($db->quoteName('session_id') . ' = ' . $db->quote($id)); + // Remove a session from the database. - $db->setQuery( - 'DELETE FROM ' . $db->quoteName('#__session') . - ' WHERE ' . $db->quoteName('session_id') . ' = ' . $db->quote($id) - ); + $db->setQuery($query); return (boolean) $db->query(); } @@ -175,11 +179,12 @@ public function gc($lifetime = 1440) // Determine the timestamp threshold with which to purge old sessions. $past = time() - $lifetime; + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__session')) + ->where($db->quoteName('time') . ' < ' . $db->quote((int) $past)); + // Remove expired sessions from the database. - $db->setQuery( - 'DELETE FROM ' . $db->quoteName('#__session') . - ' WHERE ' . $db->quoteName('time') . ' < ' . (int) $past - ); + $db->setQuery($query); return (boolean) $db->query(); }