thomascube
2008-06-14 83a7636872d58f044d1fac444268dd2e7c7ebaee
More code cleanup

10 files modified
304 ■■■■■ changed files
index.php 38 ●●●●● patch | view | raw | blame | history
program/include/html.php 8 ●●●● patch | view | raw | blame | history
program/include/iniset.php 2 ●●● patch | view | raw | blame | history
program/include/main.inc 147 ●●●● patch | view | raw | blame | history
program/include/rcube_config.php 41 ●●●●● patch | view | raw | blame | history
program/include/rcube_json_output.php 2 ●●●●● patch | view | raw | blame | history
program/include/rcube_template.php 5 ●●●●● patch | view | raw | blame | history
program/include/rcube_user.php 39 ●●●●● patch | view | raw | blame | history
program/steps/mail/func.inc 16 ●●●● patch | view | raw | blame | history
program/steps/mail/sendmail.inc 6 ●●●● patch | view | raw | blame | history
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 @@
// 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
@@ -45,14 +51,6 @@
    ob_start();
  }
}
// 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()) {
@@ -127,18 +125,9 @@
}
// 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 @@
// 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 @@
  }
  
  $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
program/include/html.php
@@ -571,7 +571,7 @@
     * @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 @@
     *
     * @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 @@
        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 @@
            }
            if ($r < $this->rowindex || count($row->cells)) {
                $tbody .= self::tag('tr', $rows->attrib, $rowcontent);
                $tbody .= self::tag('tr', $row->attrib, $rowcontent);
            }
        }
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');
program/include/main.inc
@@ -105,51 +105,6 @@
/**
 * 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 rcube_table_output($attrib, $table_data, $a_show_cols, $id_col)
  {
  global $DB;
  global $RCMAIL;
  
  // 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'));
  $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);
  }
@@ -670,29 +606,6 @@
  $out = $input->show($value);
         
  return $out;
  }
/**
 * 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;
  }
@@ -743,26 +656,6 @@
  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";
}
/**
program/include/rcube_config.php
@@ -177,5 +177,46 @@
  }
  
  
  /**
   * 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;
  }
}
program/include/rcube_json_output.php
@@ -34,7 +34,6 @@
    private $texts = array();
    private $commands = array();
    public $task = '';
    public $ajax_call = true;
    
    
@@ -43,7 +42,6 @@
     */
    public function __construct($task)
    {
        $this->task   = $task;
        $this->config = rcmail::get_instance()->config;
    }
    
program/include/rcube_template.php
@@ -32,7 +32,6 @@
{
    var $app;
    var $config;
    var $task = '';
    var $framed = false;
    var $pagetitle = '';
    var $env = array();
@@ -56,7 +55,7 @@
        $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 @@
                    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)) {
program/include/rcube_user.php
@@ -362,7 +362,7 @@
    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 @@
  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 @@
  static function user2email($user)
  {
    $email = "";
    $r = rcmail_findinvirtual("$user$");
    $r = self::findinvirtual("$user$");
    for ($i=0; $i<count($r); $i++)
    {
@@ -461,6 +461,39 @@
    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;
  }
}
program/steps/mail/func.inc
@@ -1040,18 +1040,18 @@
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 @@
      '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)
program/steps/mail/sendmail.inc
@@ -113,7 +113,7 @@
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 @@
// 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 @@
$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