thomascube
2007-09-19 5eee009671d773cb3ebef5beca6ad47c919ac4c7
Allow vars and PHP code in templates; improved page title; fixed #1484395

9 files modified
125 ■■■■ changed files
.htaccess 2 ●●●●● patch | view | raw | blame | history
CHANGELOG 8 ●●●●● patch | view | raw | blame | history
config/main.inc.php.dist 3 ●●●●● patch | view | raw | blame | history
program/include/rcmail_template.inc 66 ●●●●● patch | view | raw | blame | history
program/js/app.js 26 ●●●●● patch | view | raw | blame | history
program/steps/mail/check_recent.inc 2 ●●● patch | view | raw | blame | history
program/steps/mail/func.inc 10 ●●●● patch | view | raw | blame | history
program/steps/mail/list.inc 3 ●●●● patch | view | raw | blame | history
program/steps/settings/func.inc 5 ●●●● patch | view | raw | blame | history
.htaccess
@@ -6,6 +6,7 @@
  php_flag    log_errors    On
  php_value    error_log    logs/errors
  php_value    upload_max_filesize    5M
  php_value    post_max_size    6M
</IfModule>
<IfModule mod_php5.c>
@@ -13,6 +14,7 @@
  php_flag    log_errors    On
  php_value    error_log    logs/errors
  php_value    upload_max_filesize    5M
  php_value    post_max_size    6M
</IfModule>
<FilesMatch "(\.inc|\~)$">
CHANGELOG
@@ -1,6 +1,14 @@
CHANGELOG RoundCube Webmail
---------------------------
2007/09/18 (thomasb)
----------
- Eval PHP code in template includes (if configured)
- Show message when folder is empty. Mo more static text in table (#1484395)
- Only display unread count in page title when new messages arrived
- Show mailbox name in page title
2007/09/09 (thomasb)
----------
- Fixed wrong delete button tooltip (#1483965)
config/main.inc.php.dist
@@ -87,6 +87,9 @@
// relative path to the skin folder
$rcmail_config['skin_path'] = 'skins/default/';
// inludes shloud be interpreted as PHP files
$rcmail_config['skin_include_php'] = true;
// use this folder to store temp files (must be writebale for apache user)
$rcmail_config['temp_dir'] = 'temp/';
program/include/rcmail_template.inc
@@ -322,6 +322,13 @@
        join(',', $args));
    }
    
    // add command to set page title
    if ($this->ajax_call && !empty($this->pagetitle))
      $out .= sprintf(
        "this.set_pagetitle('%s');\n",
        JQ((!empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '') . $this->pagetitle)
      );
    return $out;
  }
  
@@ -453,10 +460,15 @@
      // include a file 
      case 'include':
        $path = realpath($this->config['skin_path'].$attrib['file']);
        if (filesize($path) && ($fp = @fopen($path, 'r')))
        if (filesize($path))
        {
          $incl = fread($fp, filesize($path));
          fclose($fp);
          if ($this->config['skin_include_php'])
            $incl = $this->include_php($path);
          else if ($fp = @fopen($path, 'r'))
          {
            $incl = fread($fp, filesize($path));
            fclose($fp);
          }
          return $this->parse_xml($incl);
        }
        break;
@@ -494,13 +506,59 @@
        }
        break;
      }
      // return variable
      case 'var':
        $var = explode(':', $attrib['name']);
        $name = $var[1];
        $value = '';
        switch ($var[0])
        {
          case 'env':
            $value = $this->env[$name];
            break;
          case 'config':
            $value = $this->config[$name];
            if (is_array($value) && $value[$_SESSION['imap_host']])
              $value = $value[$_SESSION['imap_host']];
            break;
          case 'request':
            $value = get_input_value($name, RCUBE_INPUT_GPC);
            break;
          case 'session':
            $value = $_SESSION[$name];
            break;
        }
        if (is_array($value))
          $value = join(", ", $value);
        return Q($value);
    }
    return '';
  }
  /**
   * Include a specific file and return it's contents
   *
   * @param string File path
   * @return string Contents of the processed file
   */
  function include_php($file)
  {
    ob_start();
    @include($file);
    $out = ob_get_contents();
    ob_end_clean();
    return $out;
  }
  /**
   * Create and register a button
   *
   * @param array Button attributes
program/js/app.js
@@ -2943,6 +2943,14 @@
    };
  // write to the document/window title
  this.set_pagetitle = function(title)
  {
    if (title && document.title)
      document.title = title;
  }
  // display a system message
  this.display_message = function(msg, type, hold)
    {
@@ -3129,9 +3137,6 @@
    if (!this.gui_objects.mailboxlist)
      return false;
    if (mbox==this.env.mailbox)
      set_title = true;
    var reg, text_obj;
    var item = this.get_folder_li(mbox);
    mbox = String(mbox).toLowerCase().replace(this.identifier_expr, '');
@@ -3158,13 +3163,16 @@
    if (set_title && document.title)
      {
      var doc_title = String(document.title);
      var new_title = "";
      if (count && doc_title.match(reg))
        document.title = doc_title.replace(reg, '('+count+') ');
        new_title = doc_title.replace(reg, '('+count+') ');
      else if (count)
        document.title = '('+count+') '+doc_title;
        new_title = '('+count+') '+doc_title;
      else
        document.title = doc_title.replace(reg, '');
        new_title = doc_title.replace(reg, '');
      this.set_pagetitle(new_title);
      }
    };
@@ -3318,7 +3326,8 @@
      ctype = ctype_array[0];
    }
    this.set_busy(false);
    if (request_obj.__lock)
        this.set_busy(false);
    console.log(request_obj.get_text());
@@ -3381,8 +3390,7 @@
      }
    this.set_busy(true, 'checkingmail');
    var d = new Date();
    this.http_request('check-recent', '_t='+d.getTime());
    this.http_request('check-recent', '_t='+(new Date().getTime()), true);
    };
program/steps/mail/check_recent.inc
@@ -31,7 +31,7 @@
      $unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
      $OUTPUT->set_env('messagecount', $count);
      $OUTPUT->command('set_unread_count', $mbox_name, $unread_count);
      $OUTPUT->command('set_unread_count', $mbox_name, $unread_count, true);
      $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
      $OUTPUT->command('set_quota', $IMAP->get_quota());
program/steps/mail/func.inc
@@ -75,6 +75,10 @@
if (!$OUTPUT->ajax_call)
  rcube_add_label('checkingmail', 'deletemessage', 'movemessagetotrash');
// set page title
if (empty($_action) || $_action == 'list')
  $OUTPUT->set_pagetitle(rcube_charset_convert($IMAP->get_mailbox_name(), 'UTF-7'));
// return the message list as HTML table
@@ -189,11 +193,7 @@
  // no messages in this mailbox
  if (!sizeof($a_headers))
    {
    $out .= sprintf('<tr><td colspan="%d">%s</td></tr>',
                    sizeof($a_show_cols)+2,
                    Q(rcube_label('nomessagesfound')));
    }
    $OUTPUT->show_message('nomessagesfound', 'notice');
  $a_js_message_arr = array();
program/steps/mail/list.inc
@@ -58,7 +58,8 @@
// add message rows
if (isset($a_headers) && count($a_headers))
  rcmail_js_message_list($a_headers);
else
  $OUTPUT->show_message('nomessagesfound', 'notice');
  
// send response
$OUTPUT->send();
program/steps/settings/func.inc
@@ -26,7 +26,10 @@
                          $_SESSION['user_id']);
                                 
if ($USER_DATA = $DB->fetch_assoc($sql_result))
  $OUTPUT->set_pagetitle(sprintf('%s %s@%s', rcube_label('settingsfor'), $USER_DATA['username'], $USER_DATA['mail_host']));
{
  $username = $USER_DATA['username'] . (!strpos($USER_DATA['username'], '@') ? '@'.$USER_DATA['mail_host'] : '');
  $OUTPUT->set_pagetitle(sprintf('%s %s', rcube_label('settingsfor'), $username));
}