summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.php38
-rw-r--r--program/include/html.php8
-rwxr-xr-xprogram/include/iniset.php2
-rw-r--r--program/include/main.inc147
-rw-r--r--program/include/rcube_config.php41
-rw-r--r--program/include/rcube_json_output.php2
-rwxr-xr-xprogram/include/rcube_template.php5
-rw-r--r--program/include/rcube_user.php39
-rw-r--r--program/steps/mail/func.inc16
-rw-r--r--program/steps/mail/sendmail.inc6
10 files changed, 129 insertions, 175 deletions
diff --git a/index.php b/index.php
index 9f4d9148a..2e7015a63 100644
--- a/index.php
+++ b/index.php
@@ -2,7 +2,7 @@
/*
+-------------------------------------------------------------------------+
| RoundCube Webmail IMAP Client |
- | Version 0.1-20080506 |
+ | Version 0.2-20080614 |
| |
| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| |
@@ -33,6 +33,12 @@ require_once 'program/include/iniset.php';
// define global vars
$OUTPUT_TYPE = 'html';
+// init application and start session with requested task
+$RCMAIL = rcmail::get_instance();
+
+// init output class
+$OUTPUT = !empty($_REQUEST['_remote']) ? $RCMAIL->init_json() : $RCMAIL->load_gui(!empty($_REQUEST['_framed']));
+
// set output buffering
if ($RCMAIL->action != 'get' && $RCMAIL->action != 'viewsource') {
// use gzip compression if supported
@@ -46,14 +52,6 @@ if ($RCMAIL->action != 'get' && $RCMAIL->action != 'viewsource') {
}
}
-
-// init application and start session with requested task
-$RCMAIL = rcmail::get_instance();
-
-// init output class
-$OUTPUT = (!empty($_GET['_remote']) || !empty($_POST['_remote'])) ? $RCMAIL->init_json() : $RCMAIL->load_gui((!empty($_GET['_framed']) || !empty($_POST['_framed'])));
-
-
// check DB connections and exit on failure
if ($err_str = $DB->is_error()) {
raise_error(array(
@@ -127,18 +125,9 @@ if (!empty($RCMAIL->user->ID) && $RCMAIL->task == 'mail') {
}
-// not logged in -> set task to 'login
-if (empty($RCMAIL->user->ID)) {
- if ($OUTPUT->ajax_call)
- $OUTPUT->remote_response("setTimeout(\"location.href='\"+this.env.comm_path+\"'\", 2000);");
-
- $RCMAIL->set_task('login');
-}
-
-
// check client X-header to verify request origin
if ($OUTPUT->ajax_call) {
- if (empty($CONFIG['devel_mode']) && !rc_request_header('X-RoundCube-Referer')) {
+ if ($RCMAIL->config->get('devel_mode') && !rc_request_header('X-RoundCube-Referer')) {
header('HTTP/1.1 404 Not Found');
die("Invalid Request");
}
@@ -147,8 +136,12 @@ if ($OUTPUT->ajax_call) {
// not logged in -> show login page
if (empty($RCMAIL->user->ID)) {
+
+ if ($OUTPUT->ajax_call)
+ $OUTPUT->remote_response("setTimeout(\"location.href='\"+this.env.comm_path+\"'\", 2000);");
+
// check if installer is still active
- if ($CONFIG['enable_installer'] && is_readable('./installer/index.php')) {
+ if ($RCMAIL->config->get('enable_installer') && is_readable('./installer/index.php')) {
$OUTPUT->add_footer(html::div(array('style' => "background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em"),
html::tag('h2', array('style' => "margin-top:0.2em"), "Installer script is still accessible") .
html::p(null, "The install script of your RoundCube installation is still stored in its default location!") .
@@ -160,17 +153,14 @@ if (empty($RCMAIL->user->ID)) {
}
$OUTPUT->set_env('task', 'login');
- $OUTPUT->task = 'login';
$OUTPUT->send('login');
- exit;
}
// handle keep-alive signal
if ($RCMAIL->action=='keep-alive') {
$OUTPUT->reset();
- $OUTPUT->send('');
- exit;
+ $OUTPUT->send();
}
// include task specific files
diff --git a/program/include/html.php b/program/include/html.php
index 4ac45da65..4057bd14d 100644
--- a/program/include/html.php
+++ b/program/include/html.php
@@ -571,7 +571,7 @@ class html_table extends html
* @param array Cell attributes
* @param string Cell content
*/
- private function add_header($attr, $cont)
+ public function add_header($attr, $cont)
{
if (is_string($attr))
$attr = array('class' => $attr);
@@ -587,7 +587,7 @@ class html_table extends html
*
* @param array Row attributes
*/
- private function add_row($attr = array())
+ public function add_row($attr = array())
{
$this->rowindex++;
$this->colindex = 0;
@@ -612,7 +612,7 @@ class html_table extends html
if (!empty($this->header)) {
$rowcontent = '';
foreach ($this->header as $c => $col) {
- $rowcontent .= self::tag('th', $col->attrib, $col->content);
+ $rowcontent .= self::tag('td', $col->attrib, $col->content);
}
$thead = self::tag('thead', null, self::tag('tr', null, $rowcontent));
}
@@ -624,7 +624,7 @@ class html_table extends html
}
if ($r < $this->rowindex || count($row->cells)) {
- $tbody .= self::tag('tr', $rows->attrib, $rowcontent);
+ $tbody .= self::tag('tr', $row->attrib, $rowcontent);
}
}
diff --git a/program/include/iniset.php b/program/include/iniset.php
index 5072d636c..5dacf8552 100755
--- a/program/include/iniset.php
+++ b/program/include/iniset.php
@@ -22,7 +22,7 @@
// application constants
-define('RCMAIL_VERSION', '0.1-trunk');
+define('RCMAIL_VERSION', '0.2-trunk');
define('RCMAIL_CHARSET', 'UTF-8');
define('JS_OBJECT_NAME', 'rcmail');
diff --git a/program/include/main.inc b/program/include/main.inc
index cdcc710cc..73b9c4124 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -105,51 +105,6 @@ function rcube_label($p)
/**
- * Load virtuser table in array
- *
- * @return array Virtuser table entries
- */
-function rcmail_getvirtualfile()
- {
- global $CONFIG;
- if (empty($CONFIG['virtuser_file']) || !is_file($CONFIG['virtuser_file']))
- return FALSE;
-
- // read file
- $a_lines = file($CONFIG['virtuser_file']);
- return $a_lines;
- }
-
-
-/**
- * Find matches of the given pattern in virtuser table
- *
- * @param string Regular expression to search for
- * @return array Matching entries
- */
-function rcmail_findinvirtual($pattern)
- {
- $result = array();
- $virtual = rcmail_getvirtualfile();
- if ($virtual==FALSE)
- return $result;
-
- // check each line for matches
- foreach ($virtual as $line)
- {
- $line = trim($line);
- if (empty($line) || $line{0}=='#')
- continue;
-
- if (eregi($pattern, $line))
- $result[] = $line;
- }
-
- return $result;
- }
-
-
-/**
* Overwrite action variable
*
* @param string New action value
@@ -574,65 +529,46 @@ function template_exists($name)
*/
function rcube_table_output($attrib, $table_data, $a_show_cols, $id_col)
{
- global $DB;
-
- // allow the following attributes to be added to the <table> tag
- $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id', 'cellpadding', 'cellspacing', 'border', 'summary'));
+ global $RCMAIL;
- $table = '<table' . $attrib_str . ">\n";
+ $table = new html_table(/*array('cols' => count($a_show_cols))*/);
- // add table title
- $table .= "<thead><tr>\n";
-
+ // add table header
foreach ($a_show_cols as $col)
- $table .= '<td class="'.$col.'">' . Q(rcube_label($col)) . "</td>\n";
-
- $table .= "</tr></thead>\n<tbody>\n";
+ $table->add_header($col, Q(rcube_label($col)));
$c = 0;
if (!is_array($table_data))
+ {
+ $db = $RCMAIL->get_dbh();
+ while ($table_data && ($sql_arr = $db->fetch_assoc($table_data)))
{
- while ($table_data && ($sql_arr = $DB->fetch_assoc($table_data)))
- {
- $zebra_class = $c%2 ? 'even' : 'odd';
-
- $table .= sprintf('<tr id="rcmrow%d" class="contact '.$zebra_class.'">'."\n", $sql_arr[$id_col]);
+ $zebra_class = $c % 2 ? 'even' : 'odd';
+ $table->add_row(array('id' => 'rcmrow' . $sql_arr[$id_col], 'class' => "contact $zebra_class"));
// format each col
foreach ($a_show_cols as $col)
- {
- $cont = Q($sql_arr[$col]);
- $table .= '<td class="'.$col.'">' . $cont . "</td>\n";
- }
-
- $table .= "</tr>\n";
+ $table->add($col, Q($sql_arr[$col]));
+
$c++;
- }
}
+ }
else
- {
+ {
foreach ($table_data as $row_data)
- {
- $zebra_class = $c%2 ? 'even' : 'odd';
-
- $table .= sprintf('<tr id="rcmrow%s" class="contact '.$zebra_class.'">'."\n", $row_data[$id_col]);
+ {
+ $zebra_class = $c % 2 ? 'even' : 'odd';
+ $table->add_row(array('id' => 'rcmrow' . $row_data[$id_col], 'class' => "contact $zebra_class"));
// format each col
foreach ($a_show_cols as $col)
- {
- $cont = Q($row_data[$col]);
- $table .= '<td class="'.$col.'">' . $cont . "</td>\n";
- }
-
- $table .= "</tr>\n";
+ $table->add($col, Q($row_data[$col]));
+
$c++;
- }
}
+ }
- // complete message table
- $table .= "</tbody></table>\n";
-
- return $table;
+ return $table->show($attrib);
}
@@ -674,29 +610,6 @@ function rcmail_get_edit_field($col, $value, $attrib, $type='text')
/**
- * Return the mail domain configured for the given host
- *
- * @param string IMAP host
- * @return string Resolved SMTP host
- */
-function rcmail_mail_domain($host)
- {
- global $CONFIG;
-
- $domain = $host;
- if (is_array($CONFIG['mail_domain']))
- {
- if (isset($CONFIG['mail_domain'][$host]))
- $domain = $CONFIG['mail_domain'][$host];
- }
- else if (!empty($CONFIG['mail_domain']))
- $domain = $CONFIG['mail_domain'];
-
- return $domain;
- }
-
-
-/**
* Replace all css definitions with #container [def]
* and remove css-inlined scripting
*
@@ -744,26 +657,6 @@ function rcmail_mod_css_styles($source, $container_id, $base_url = '')
return $styles;
}
-/**
- * Try to autodetect operating system and find the correct line endings
- *
- * @return string The appropriate mail header delimiter
- */
-function rcmail_header_delm()
-{
- global $CONFIG;
-
- // use the configured delimiter for headers
- if (!empty($CONFIG['mail_header_delimiter']))
- return $CONFIG['mail_header_delimiter'];
- else if (strtolower(substr(PHP_OS, 0, 3)=='win'))
- return "\r\n";
- else if (strtolower(substr(PHP_OS, 0, 3)=='mac'))
- return "\r\n";
- else
- return "\n";
-}
-
/**
* Compose a valid attribute string for HTML tags
diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php
index 8e956de1e..5c744ba53 100644
--- a/program/include/rcube_config.php
+++ b/program/include/rcube_config.php
@@ -177,5 +177,46 @@ class rcube_config
}
+ /**
+ * Try to autodetect operating system and find the correct line endings
+ *
+ * @return string The appropriate mail header delimiter
+ */
+ public function header_delimiter()
+ {
+ // use the configured delimiter for headers
+ if (!empty($this->prop['mail_header_delimiter']))
+ return $this->prop['mail_header_delimiter'];
+ else if (strtolower(substr(PHP_OS, 0, 3) == 'win'))
+ return "\r\n";
+ else if (strtolower(substr(PHP_OS, 0, 3) == 'mac'))
+ return "\r\n";
+ else
+ return "\n";
+ }
+
+
+
+ /**
+ * Return the mail domain configured for the given host
+ *
+ * @param string IMAP host
+ * @return string Resolved SMTP host
+ */
+ public function mail_domain($host)
+ {
+ $domain = $host;
+
+ if (is_array($this->prop['mail_domain'])) {
+ if (isset($this->prop['mail_domain'][$host]))
+ $domain = $this->prop['mail_domain'][$host];
+ }
+ else if (!empty($this->prop['mail_domain']))
+ $domain = $this->prop['mail_domain'];
+
+ return $domain;
+ }
+
+
}
diff --git a/program/include/rcube_json_output.php b/program/include/rcube_json_output.php
index a633f8555..678b1948a 100644
--- a/program/include/rcube_json_output.php
+++ b/program/include/rcube_json_output.php
@@ -34,7 +34,6 @@ class rcube_json_output
private $texts = array();
private $commands = array();
- public $task = '';
public $ajax_call = true;
@@ -43,7 +42,6 @@ class rcube_json_output
*/
public function __construct($task)
{
- $this->task = $task;
$this->config = rcmail::get_instance()->config;
}
diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 0c0a9211b..5834e42ab 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -32,7 +32,6 @@ class rcube_template extends rcube_html_page
{
var $app;
var $config;
- var $task = '';
var $framed = false;
var $pagetitle = '';
var $env = array();
@@ -56,7 +55,7 @@ class rcube_template extends rcube_html_page
$this->config = $this->app->config->all();
//$this->framed = $framed;
- $this->task = $task;
+ $this->set_env('task', $task);
// add common javascripts
$javascript = 'var '.JS_OBJECT_NAME.' = new rcube_webmail();';
@@ -542,7 +541,7 @@ class rcube_template extends rcube_html_page
return $ver;
}
if ($object=='pagetitle') {
- $task = $this->task;
+ $task = $this->env['task'];
$title = !empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '';
if (!empty($this->pagetitle)) {
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index c808d079e..5f970ec6a 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -362,7 +362,7 @@ class rcube_user
if ($user_id = $dbh->insert_id(get_sequence_name('users')))
{
- $mail_domain = rcmail_mail_domain($host);
+ $mail_domain = $rcmail->config->mail_domain($host);
if ($user_email=='')
$user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
@@ -420,7 +420,7 @@ class rcube_user
static function email2user($email)
{
$user = $email;
- $r = rcmail_findinvirtual("^$email");
+ $r = self::findinvirtual("^$email");
for ($i=0; $i<count($r); $i++)
{
@@ -446,7 +446,7 @@ class rcube_user
static function user2email($user)
{
$email = "";
- $r = rcmail_findinvirtual("$user$");
+ $r = self::findinvirtual("$user$");
for ($i=0; $i<count($r); $i++)
{
@@ -461,6 +461,39 @@ class rcube_user
return $email;
}
+
+
+ /**
+ * Find matches of the given pattern in virtuser table
+ *
+ * @param string Regular expression to search for
+ * @return array Matching entries
+ */
+ private static function findinvirtual($pattern)
+ {
+ $result = array();
+ $virtual = null;
+
+ if ($virtuser_file = rcmail::get_instance()->config->get('virtuser_file'))
+ $virtual = file($virtuser_file);
+
+ if (empty($virtual))
+ return $result;
+
+ // check each line for matches
+ foreach ($virtual as $line)
+ {
+ $line = trim($line);
+ if (empty($line) || $line{0}=='#')
+ continue;
+
+ if (eregi($pattern, $line))
+ $result[] = $line;
+ }
+
+ return $result;
+ }
+
}
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 718461ec2..af3f6e72f 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -1040,18 +1040,18 @@ function rcmail_deliver_message(&$message, $from, $mailto)
function rcmail_send_mdn($uid)
{
- global $CONFIG, $USER, $IMAP;
+ global $RCMAIL, $IMAP;
$message = new rcube_message($uid);
if ($message->headers->mdn_to && !$message->headers->mdn_sent)
{
- $identity = $USER->get_identity();
+ $identity = $RCMAIL->user->get_identity();
$sender = format_email_recipient($identity['email'], $identity['name']);
$recipient = array_shift($IMAP->decode_address_list($message->headers->mdn_to));
$mailto = $recipient['mailto'];
- $compose = new rcube_mail_mime(rcmail_header_delm());
+ $compose = new rcube_mail_mime($RCMAIL->config->header_delimiter());
$compose->setParam(array(
'text_encoding' => 'quoted-printable',
'html_encoding' => 'quoted-printable',
@@ -1067,21 +1067,21 @@ function rcmail_send_mdn($uid)
'From' => $sender,
'To' => $message->headers->mdn_to,
'Subject' => rcube_label('receiptread') . ': ' . $message->subject,
- 'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])),
+ 'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), $RCMAIL->config->mail_domain($_SESSION['imap_host'])),
'X-Sender' => $identity['email'],
'Content-Type' => 'multipart/report; report-type=disposition-notification',
);
- if (!empty($CONFIG['useragent']))
- $headers['User-Agent'] = $CONFIG['useragent'];
+ if ($agent = $RCMAIL->config->get('useragent'))
+ $headers['User-Agent'] = $agent;
$body = rcube_label("yourmessage") . "\r\n\r\n" .
"\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($message->headers->to, $message->headers->charset) . "\r\n" .
"\t" . rcube_label("subject") . ': ' . $message->subject . "\r\n" .
- "\t" . rcube_label("sent") . ': ' . format_date($message->headers->date, $CONFIG['date_long']) . "\r\n" .
+ "\t" . rcube_label("sent") . ': ' . format_date($message->headers->date, $RCMAIL->config->get('date_long')) . "\r\n" .
"\r\n" . rcube_label("receiptnote") . "\r\n";
- $ua = !empty($CONFIG['useragent']) ? $CONFIG['useragent'] : "RoundCube Webmail (Version ".RCMAIL_VERSION.")";
+ $ua = $RCMAIL->config->get('useragent', "RoundCube Webmail (Version ".RCMAIL_VERSION.")");
$report = "Reporting-UA: $ua\r\n";
if ($message->headers->to)
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 72ef9f4d6..3860c4fd0 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -113,7 +113,7 @@ function rcmail_attach_emoticons(&$mime_message)
if (strlen($_POST['_draft_saveid']) > 3)
$olddraftmessageid = get_input_value('_draft_saveid', RCUBE_INPUT_POST);
-$message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host']));
+$message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), $RCMAIL->config->mail_domain($_SESSION['imap_host']));
$savedraft = !empty($_POST['_draft']) ? TRUE : FALSE;
// remove all scripts and act as called in frame
@@ -207,7 +207,7 @@ if (!empty($_POST['_receipt']))
// additional headers
if ($CONFIG['http_received_header'])
{
- $nldlm = rcmail_header_delm() . "\t";
+ $nldlm = $RCMAIL->config->header_delimiter() . "\t";
$headers['Received'] = wordwrap('from ' . (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?
gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']).' ['.$_SERVER['HTTP_X_FORWARDED_FOR'].']'.$nldlm.' via ' : '') .
gethostbyaddr($_SERVER['REMOTE_ADDR']).' ['.$_SERVER['REMOTE_ADDR'].']'.$nldlm.'with ' .
@@ -232,7 +232,7 @@ $isHtmlVal = strtolower(get_input_value('_is_html', RCUBE_INPUT_POST));
$isHtml = ($isHtmlVal == "1");
// create extended PEAR::Mail_mime instance
-$MAIL_MIME = new rcube_mail_mime(rcmail_header_delm());
+$MAIL_MIME = new rcube_mail_mime($RCMAIL->config->header_delimiter());
// For HTML-formatted messages, construct the MIME message with both
// the HTML part and the plain-text part