Skip to content

Commit

Permalink
more pear/mdb2 integration
Browse files Browse the repository at this point in the history
  • Loading branch information
thomascube committed Oct 25, 2005
1 parent e0ed972 commit d7cb774
Show file tree
Hide file tree
Showing 21 changed files with 343 additions and 325 deletions.
8 changes: 4 additions & 4 deletions SQL/postgres.initial.sql
Expand Up @@ -117,11 +117,11 @@ CREATE TABLE identities (
del boolean DEFAULT false NOT NULL,
"default" boolean DEFAULT false NOT NULL,
name character varying(128) NOT NULL,
organization character varying(128) NOT NULL,
organization character varying(128),
email character varying(128) NOT NULL,
"reply-to" character varying(128) NOT NULL,
bcc character varying(128) NOT NULL,
signature text NOT NULL
"reply-to" character varying(128),
bcc character varying(128),
signature text
);


Expand Down
8 changes: 5 additions & 3 deletions index.php
Expand Up @@ -51,17 +51,19 @@
$CURRENT_PATH.='/';

// set environment first
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.$INSTALL_PATH.PATH_SEPARATOR.$CURRENT_PATH.'program'.PATH_SEPARATOR.$CURRENT_PATH.'program/lib');
// RC include folders MUST be included FIRST to avoid other
// possible not compatible libraries (i.e PEAR) to be included
// instead the ones provided by RC
ini_set('include_path', $INSTALL_PATH.PATH_SEPARATOR.$CURRENT_PATH.'program'.PATH_SEPARATOR.$CURRENT_PATH.'program/lib'.PATH_SEPARATOR.ini_get('include_path'));

ini_set('session.name', 'sessid');
ini_set('session.use_cookies', 1);
ini_set('error_reporting', E_ALL&~E_NOTICE);


// increase maximum execution time for php scripts
// (does not work in safe mode)
@set_time_limit('120');


// include base files
require_once('include/rcube_shared.inc');
require_once('include/rcube_imap.inc');
Expand Down
69 changes: 32 additions & 37 deletions program/include/cache.inc
Expand Up @@ -25,13 +25,12 @@ function rcube_read_cache($key)
global $DB, $CACHE_KEYS;

// query db
$sql_result = $DB->query(sprintf("SELECT cache_id, data
FROM %s
WHERE user_id=%d
AND cache_key='%s'",
get_table_name('cache'),
$_SESSION['user_id'],
$key));
$sql_result = $DB->query("SELECT cache_id, data
FROM ".get_table_name('cache')."
WHERE user_id=?
AND cache_key=?",
$_SESSION['user_id'],
$key);

// get cached data
if ($sql_arr = $DB->fetch_assoc($sql_result))
Expand All @@ -53,13 +52,12 @@ function rcube_write_cache($key, $data, $session_cache=FALSE)
// check if we already have a cache entry for this key
if (!isset($CACHE_KEYS[$key]))
{
$sql_result = $DB->query(sprintf("SELECT cache_id
FROM %s
WHERE user_id=%d
AND cache_key='%s'",
get_table_name('cache'),
$_SESSION['user_id'],
$key));
$sql_result = $DB->query("SELECT cache_id
FROM ".get_table_name('cache')."
WHERE user_id=?
AND cache_key=?",
$_SESSION['user_id'],
$key);

if ($sql_arr = $DB->fetch_assoc($sql_result))
$CACHE_KEYS[$key] = $sql_arr['cache_id'];
Expand All @@ -70,27 +68,25 @@ function rcube_write_cache($key, $data, $session_cache=FALSE)
// update existing cache record
if ($CACHE_KEYS[$key])
{
$DB->query(sprintf("UPDATE %s
SET created=NOW(),
data='%s'
WHERE user_id=%d
AND cache_key='%s'",
get_table_name('cache'),
addslashes($data),
$_SESSION['user_id'],
$key));
$DB->query("UPDATE ".get_table_name('cache')."
SET created=NOW(),
data=?
WHERE user_id=?
AND cache_key=?",
$data,
$_SESSION['user_id'],
$key);
}
// add new cache record
else
{
$DB->query(sprintf("INSERT INTO %s
(created, user_id, session_id, cache_key, data)
VALUES (NOW(), %d, %s, '%s', '%s')",
get_table_name('cache'),
$_SESSION['user_id'],
$session_cache ? "'$sess_id'" : 'NULL',
$key,
addslashes($data)));
$DB->query("INSERT INTO ".get_table_name('cache')."
(created, user_id, session_id, cache_key, data)
VALUES (NOW(), ?, ?, ?', ?)",
$_SESSION['user_id'],
$session_cache ? $sess_id : 'NULL',
$key,
$data);
}
}

Expand All @@ -100,12 +96,11 @@ function rcube_clear_cache($key)
{
global $DB;

$DB->query(sprintf("DELETE FROM %s
WHERE user_id=%d
AND cache_key='%s'",
get_table_name('cache'),
$_SESSION['user_id'],
$key));
$DB->query("DELETE FROM ".get_table_name('cache')."
WHERE user_id=?
AND cache_key=?",
$_SESSION['user_id'],
$key);
}


Expand Down
52 changes: 24 additions & 28 deletions program/include/main.inc
Expand Up @@ -263,13 +263,12 @@ function rcmail_login($user, $pass, $host=NULL)
}

// query if user already registered
$sql_result = $DB->query(sprintf("SELECT user_id, username, language, preferences
FROM %s
WHERE mail_host='%s' AND (username='%s' OR alias='%s')",
get_table_name('users'),
addslashes($host),
addslashes($user),
addslashes($user)));
$sql_result = $DB->query("SELECT user_id, username, language, preferences
FROM ".get_table_name('users')."
WHERE mail_host=? AND (username=? OR alias=?)",
$host,
$user,
$user);

// user already registered -> overwrite username
if ($sql_arr = $DB->fetch_assoc($sql_result))
Expand Down Expand Up @@ -299,11 +298,10 @@ function rcmail_login($user, $pass, $host=NULL)
$sess_user_lang = $_SESSION['user_lang'] = $sql_arr['language'];

// update user's record
$DB->query(sprintf("UPDATE %s
SET last_login=NOW()
WHERE user_id=%d",
get_table_name('users'),
$user_id));
$DB->query("UPDATE ".get_table_name('users')."
SET last_login=NOW()
WHERE user_id=?",
$user_id);
}
// create new system user
else if ($CONFIG['auto_create_user'])
Expand Down Expand Up @@ -336,27 +334,25 @@ function rcmail_create_user($user, $host)
{
global $DB, $CONFIG, $IMAP;

$DB->query(sprintf("INSERT INTO %s
(created, last_login, username, mail_host, language)
VALUES (NOW(), NOW(), '%s', '%s', '%s')",
get_table_name('users'),
addslashes($user),
addslashes($host),
$_SESSION['user_lang']));

if ($user_id = $DB->insert_id())
$DB->query("INSERT INTO ".get_table_name('users')."
(created, last_login, username, mail_host, language)
VALUES (NOW(), NOW(), ?, ?, ?)",
$user,
$host,
$_SESSION['user_lang']);

if ($user_id = $DB->insert_id('user_ids'))
{
$user_email = strstr($user, '@') ? $user : sprintf('%s@%s', $user, $host);
$user_name = $user!=$user_email ? $user : '';

// also create a new identity record
$DB->query(sprintf("INSERT INTO %s
(user_id, `default`, name, email)
VALUES (%d, '1', '%s', '%s')",
get_table_name('identities'),
$user_id,
addslashes($user_name),
addslashes($user_email)));
$DB->query("INSERT INTO ".get_table_name('identities')."
(user_id, `default`, name, email)
VALUES (?, '1', ?, ?)",
$user_id,
$user_name,
$user_email);

// get existing mailboxes
$a_mailboxes = $IMAP->list_mailboxes();
Expand Down
53 changes: 47 additions & 6 deletions program/include/rcube_db.inc
Expand Up @@ -101,9 +101,27 @@ class rcube_db
$this->db_connected = true;
}

// Query database (read operations)
// Query database

function query($query, $offset=0, $numrows=0)
function query()
{
$params = func_get_args();
$query = array_shift($params);

return $this->_query($query, 0, 0, $params);
}

function limitquery()
{
$params = func_get_args();
$query = array_shift($params);
$offset = array_shift($params);
$numrows = array_shift($params);

return $this->_query($query, $offset, $numrows, $params);
}

function _query($query, $offset, $numrows, $params)
{
// Read or write ?
if (strtolower(trim(substr($query,0,6)))=='select')
Expand All @@ -118,18 +136,21 @@ class rcube_db

if ($numrows || $offset)
{
$result = $this->db_handle->limitQuery($query,$offset,$numrows);
$result = $this->db_handle->limitQuery($query,$offset,$numrows,$params);
}
else
$result = $this->db_handle->query($query);
$result = $this->db_handle->query($query,$params);

if (DB::isError($result))
{
raise_error(array('code' => 500,
'type' => 'db',
'line' => __LINE__,
'file' => __FILE__,
'message' => $result->getMessage()), TRUE, FALSE);

return false;
}

return $this->_add_result($result, $query);
}

Expand Down Expand Up @@ -196,6 +217,26 @@ class rcube_db
return $result->fetchRow(DB_FETCHMODE_ASSOC);
}

function quoteIdentifier ( $str )
{
if (!$this->db_handle)
$this->db_connect('r');

return $this->db_handle->quoteIdentifier($str);
}

function unixtimestamp($field)
{
switch($this->db_provider)
{
case 'pgsql':
return "EXTRACT (EPOCH FROM $field)";
break;
default:
return "UNIX_TIMESTAMP($field)";
}
}

function _add_result($res, $query)
{
// sql error occured
Expand Down
42 changes: 40 additions & 2 deletions program/include/rcube_mdb2.inc
Expand Up @@ -101,9 +101,27 @@ class rcube_db
$this->db_connected = true;
}

// Query database (read operations)
// Query database

function query($query, $offset=0, $numrows=0)
function query()
{
$params = func_get_args();
$query = array_shift($params);

return $this->_query($query, 0, 0, $params);
}

function limitquery()
{
$params = func_get_args();
$query = array_shift($params);
$offset = array_shift($params);
$numrows = array_shift($params);

return $this->_query($query, $offset, $numrows, $params);
}

function _query($query, $offset, $numrows, $params)
{
// Read or write ?
if (strtolower(trim(substr($query,0,6)))=='select')
Expand Down Expand Up @@ -175,6 +193,26 @@ class rcube_db
return $result->fetchRow(MDB2_FETCHMODE_ASSOC);
}

function quoteIdentifier ( $str )
{
if (!$this->db_handle)
$this->db_connect('r');

return $this->db_handle->quoteIdentifier($str);
}

function unixtimestamp($field)
{
switch($this->db_provider)
{
case 'pgsql':
return "EXTRACT (EPOCH FROM $field)";
break;
default:
return "UNIX_TIMESTAMP($field)";
}
}

function _add_result($res, $query)
{
// sql error occured
Expand Down

0 comments on commit d7cb774

Please sign in to comment.