From 5eee009671d773cb3ebef5beca6ad47c919ac4c7 Mon Sep 17 00:00:00 2001 From: thomascube Date: Wed, 19 Sep 2007 06:29:28 +0000 Subject: Allow vars and PHP code in templates; improved page title; fixed #1484395 --- .htaccess | 2 ++ CHANGELOG | 8 +++++ config/main.inc.php.dist | 3 ++ program/include/rcmail_template.inc | 66 ++++++++++++++++++++++++++++++++++--- program/js/app.js | 26 ++++++++++----- program/steps/mail/check_recent.inc | 2 +- program/steps/mail/func.inc | 10 +++--- program/steps/mail/list.inc | 3 +- program/steps/settings/func.inc | 5 ++- 9 files changed, 104 insertions(+), 21 deletions(-) diff --git a/.htaccess b/.htaccess index 0826245bd..b40b7ea8a 100644 --- a/.htaccess +++ b/.htaccess @@ -6,6 +6,7 @@ AddType text/x-component .htc php_flag log_errors On php_value error_log logs/errors php_value upload_max_filesize 5M + php_value post_max_size 6M @@ -13,6 +14,7 @@ AddType text/x-component .htc php_flag log_errors On php_value error_log logs/errors php_value upload_max_filesize 5M + php_value post_max_size 6M diff --git a/CHANGELOG b/CHANGELOG index 12d7872cc..39f505028 100644 --- a/CHANGELOG +++ b/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) diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 377aa2cc3..b948b3845 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -87,6 +87,9 @@ $rcmail_config['list_cols'] = array('subject', 'from', 'date', 'size'); // 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/'; diff --git a/program/include/rcmail_template.inc b/program/include/rcmail_template.inc index 4acc717b8..734032e9e 100644 --- a/program/include/rcmail_template.inc +++ b/program/include/rcmail_template.inc @@ -322,6 +322,13 @@ class rcmail_template extends rcube_html_page 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 @@ class rcmail_template extends rcube_html_page // 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,12 +506,58 @@ class rcmail_template extends rcube_html_page } 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 * diff --git a/program/js/app.js b/program/js/app.js index 506683502..9693ff53d 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -2943,6 +2943,14 @@ function rcube_webmail() }; + // 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 @@ function rcube_webmail() 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 @@ function rcube_webmail() 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 @@ function rcube_webmail() 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 @@ function rcube_webmail() } 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); }; diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc index 119d481ab..a2100f1d2 100644 --- a/program/steps/mail/check_recent.inc +++ b/program/steps/mail/check_recent.inc @@ -31,7 +31,7 @@ foreach ($a_mailboxes as $mbox_name) $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()); diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 9f4c714c4..0712ef8df 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -75,6 +75,10 @@ if ($CONFIG['junk_mbox']) 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 @@ function rcmail_message_list($attrib) // no messages in this mailbox if (!sizeof($a_headers)) - { - $out .= sprintf('%s', - sizeof($a_show_cols)+2, - Q(rcube_label('nomessagesfound'))); - } + $OUTPUT->show_message('nomessagesfound', 'notice'); $a_js_message_arr = array(); diff --git a/program/steps/mail/list.inc b/program/steps/mail/list.inc index 6c727068d..568f3d58c 100644 --- a/program/steps/mail/list.inc +++ b/program/steps/mail/list.inc @@ -58,7 +58,8 @@ $OUTPUT->command('set_unread_count', $mbox_name, $unseen); // 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(); diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index ec9001f70..18e8e523d 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -26,7 +26,10 @@ $sql_result = $DB->query("SELECT username, mail_host FROM ".get_table_name('user $_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)); +} -- cgit v1.2.3