summaryrefslogtreecommitdiff
path: root/program/include/rcmail_template.inc
diff options
context:
space:
mode:
Diffstat (limited to 'program/include/rcmail_template.inc')
-rw-r--r--program/include/rcmail_template.inc308
1 files changed, 287 insertions, 21 deletions
diff --git a/program/include/rcmail_template.inc b/program/include/rcmail_template.inc
index 3609bec1b..d158a019c 100644
--- a/program/include/rcmail_template.inc
+++ b/program/include/rcmail_template.inc
@@ -10,7 +10,7 @@
| |
| PURPOSE: |
| Class to handle HTML page output using a skin template. |
- | Extends rcube_html_page class from rcube_shared.inc |
+ | Extends rcube_html_page class from rcube_html.inc |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
@@ -20,9 +20,19 @@
*/
-require_once('include/rcube_shared.inc');
+/**
+ * Classes and functions for HTML output
+ *
+ * @package View
+ */
+require_once('include/rcube_html.inc');
+
+
+/**
+ * Class to create HTML page output using a skin template
+ */
class rcmail_template extends rcube_html_page
{
var $config;
@@ -36,11 +46,14 @@ class rcmail_template extends rcube_html_page
var $object_handlers = array();
- // PHP 5 constructor
+ /**
+ * Constructor
+ *
+ * @param array Configuration array
+ * @param string Current task
+ */
function __construct(&$config, $task)
{
- parent::__construct();
-
$this->task = $task;
$this->config = $config;
$this->ajax_call = !empty($_GET['_remote']) || !empty($_POST['_remote']);
@@ -61,7 +74,10 @@ class rcmail_template extends rcube_html_page
}
}
- // PHP 4 compatibility
+ /**
+ * PHP 4 compatibility
+ * @see rcmail_template::__construct()
+ */
function rcmail_template(&$config, $task)
{
$this->__construct($config, $task);
@@ -70,6 +86,10 @@ class rcmail_template extends rcube_html_page
/**
* Set environment variable
+ *
+ * @param string Property name
+ * @param mixed Property value
+ * @param boolean True if this property should be added to client environment
*/
function set_env($name, $value, $addtojs=true)
{
@@ -135,6 +155,10 @@ class rcmail_template extends rcube_html_page
/**
* Invoke display_message command
+ *
+ * @param string Message to display
+ * @param string Message type [notice|confirm|error]
+ * @param array Key-value pairs to be replaced in localized text
*/
function show_message($message, $type='notice', $vars=NULL)
{
@@ -211,7 +235,10 @@ class rcmail_template extends rcube_html_page
/**
- * @override
+ * Process template and write to stdOut
+ *
+ * @param string HTML template
+ * @see rcube_html_page::write()
*/
function write($template='')
{
@@ -273,7 +300,7 @@ class rcmail_template extends rcube_html_page
/**
* Return executable javascript code for all registered commands
- * @private
+ * @access private
*/
function get_js_commands()
{
@@ -300,6 +327,7 @@ class rcmail_template extends rcube_html_page
/**
* Make URLs starting with a slash point to skin directory
+ * @access private
*/
function abs_url($str)
{
@@ -311,8 +339,9 @@ class rcmail_template extends rcube_html_page
/***** Template parsing methods *****/
/**
- * Replace all strings ($varname) with the content
- * of the according global variable.
+ * Replace all strings ($varname)
+ * with the content of the according global variable.
+ * @access private
*/
function parse_with_globals($input)
{
@@ -323,6 +352,7 @@ class rcmail_template extends rcube_html_page
/**
* Parse for conditional tags
+ * @access private
*/
function parse_conditions($input)
{
@@ -361,6 +391,7 @@ class rcmail_template extends rcube_html_page
* Determines if a given condition is met
*
* @return True if condition is valid, False is not
+ * @access private
*/
function check_condition($condition)
{
@@ -379,6 +410,7 @@ class rcmail_template extends rcube_html_page
*
* @param string Input string to parse
* @return Altered input string
+ * @access private
*/
function parse_xml($input)
{
@@ -392,9 +424,10 @@ class rcmail_template extends rcube_html_page
* @param string Tag command: object,button,label, etc.
* @param string Attribute string
* @return Tag/Object content string
+ * @access private
*/
function xml_command($command, $str_attrib, $add_attrib=array())
- {
+ {
$command = strtolower($command);
$attrib = parse_attrib_string($str_attrib) + $add_attrib;
@@ -437,16 +470,16 @@ class rcmail_template extends rcube_html_page
return call_user_func($this->object_handlers[$object], $attrib);
else if ($object=='productname')
- {
+ {
$name = !empty($this->config['product_name']) ? $this->config['product_name'] : 'RoundCube Webmail';
return Q($name);
- }
+ }
else if ($object=='version')
- {
+ {
return (string)RCMAIL_VERSION;
- }
+ }
else if ($object=='pagetitle')
- {
+ {
$task = $this->task;
$title = !empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '';
@@ -458,13 +491,13 @@ class rcmail_template extends rcube_html_page
$title .= ucfirst($task);
return Q($title);
- }
+ }
break;
}
return '';
- }
+ }
/**
@@ -472,9 +505,10 @@ class rcmail_template extends rcube_html_page
*
* @param array Button attributes
* @return HTML button
+ * @access private
*/
function button($attrib)
- {
+ {
global $CONFIG, $OUTPUT, $BROWSER, $MAIN_TASKS;
static $sa_buttons = array();
static $s_button_count = 100;
@@ -626,6 +660,238 @@ class rcmail_template extends rcube_html_page
return $out;
}
-}
+} // end class rcmail_template
+
+
+
+// ************** common functions delivering gui objects **************
+
+
+/**
+ * Builder for GUI object 'message'
+ *
+ * @param array Named tag parameters
+ * @return string HTML code for the gui object
+ */
+function rcmail_message_container($attrib)
+ {
+ global $OUTPUT;
+
+ if (!$attrib['id'])
+ $attrib['id'] = 'rcmMessageContainer';
+
+ // allow the following attributes to be added to the <table> tag
+ $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
+ $out = '<div' . $attrib_str . "></div>";
+
+ $OUTPUT->add_gui_object('message', $attrib['id']);
+
+ return $out;
+ }
+
+
+/**
+ * GUI object 'username'
+ * Showing IMAP username of the current session
+ *
+ * @param array Named tag parameters (currently not used)
+ * @return string HTML code for the gui object
+ */
+function rcmail_current_username($attrib)
+ {
+ global $DB;
+ static $s_username;
+
+ // alread fetched
+ if (!empty($s_username))
+ return $s_username;
+
+ // get e-mail address form default identity
+ $sql_result = $DB->query(
+ "SELECT email AS mailto
+ FROM ".get_table_name('identities')."
+ WHERE user_id=?
+ AND standard=1
+ AND del<>1",
+ $_SESSION['user_id']);
+
+ if ($DB->num_rows($sql_result))
+ {
+ $sql_arr = $DB->fetch_assoc($sql_result);
+ $s_username = $sql_arr['mailto'];
+ }
+ else if (strstr($_SESSION['username'], '@'))
+ $s_username = $_SESSION['username'];
+ else
+ $s_username = $_SESSION['username'].'@'.$_SESSION['imap_host'];
+
+ return $s_username;
+ }
+
+
+/**
+ * GUI object 'loginform'
+ * Returns code for the webmail login form
+ *
+ * @param array Named parameters
+ * @return string HTML code for the gui object
+ */
+function rcmail_login_form($attrib)
+ {
+ global $CONFIG, $OUTPUT, $SESS_HIDDEN_FIELD;
+
+ $labels = array();
+ $labels['user'] = rcube_label('username');
+ $labels['pass'] = rcube_label('password');
+ $labels['host'] = rcube_label('server');
+
+ $input_user = new textfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30, 'autocomplete' => 'off'));
+ $input_pass = new passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd', 'size' => 30));
+ $input_action = new hiddenfield(array('name' => '_action', 'value' => 'login'));
+
+ $fields = array();
+ $fields['user'] = $input_user->show(get_input_value('_user', RCUBE_INPUT_POST));
+ $fields['pass'] = $input_pass->show();
+ $fields['action'] = $input_action->show();
+
+ if (is_array($CONFIG['default_host']))
+ {
+ $select_host = new select(array('name' => '_host', 'id' => 'rcmloginhost'));
+
+ foreach ($CONFIG['default_host'] as $key => $value)
+ {
+ if (!is_array($value))
+ $select_host->add($value, (is_numeric($key) ? $value : $key));
+ else
+ {
+ unset($select_host);
+ break;
+ }
+ }
+
+ $fields['host'] = isset($select_host) ? $select_host->show($_POST['_host']) : null;
+ }
+ else if (!strlen($CONFIG['default_host']))
+ {
+ $input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
+ $fields['host'] = $input_host->show($_POST['_host']);
+ }
+
+ $form_name = strlen($attrib['form']) ? $attrib['form'] : 'form';
+ $form_start = !strlen($attrib['form']) ? '<form name="form" action="./" method="post">' : '';
+ $form_end = !strlen($attrib['form']) ? '</form>' : '';
+
+ if ($fields['host'])
+ $form_host = <<<EOF
+
+</tr><tr>
+
+<td class="title"><label for="rcmloginhost">$labels[host]</label></td>
+<td>$fields[host]</td>
+
+EOF;
+
+ $OUTPUT->add_gui_object('loginform', $form_name);
+
+ $out = <<<EOF
+$form_start
+$SESS_HIDDEN_FIELD
+$fields[action]
+<table><tr>
+
+<td class="title"><label for="rcmloginuser">$labels[user]</label></td>
+<td>$fields[user]</td>
+
+</tr><tr>
+
+<td class="title"><label for="rcmloginpwd">$labels[pass]</label></td>
+<td>$fields[pass]</td>
+$form_host
+</tr></table>
+$form_end
+EOF;
+
+ return $out;
+ }
+
+
+/**
+ * GUI object 'charsetselector'
+ *
+ * @param array Named parameters for the select tag
+ * @return string HTML code for the gui object
+ */
+function rcmail_charset_selector($attrib)
+ {
+ global $OUTPUT;
+
+ // pass the following attributes to the form class
+ $field_attrib = array('name' => '_charset');
+ foreach ($attrib as $attr => $value)
+ if (in_array($attr, array('id', 'class', 'style', 'size', 'tabindex')))
+ $field_attrib[$attr] = $value;
+
+ $charsets = array(
+ 'US-ASCII' => 'ASCII (English)',
+ 'EUC-JP' => 'EUC-JP (Japanese)',
+ 'EUC-KR' => 'EUC-KR (Korean)',
+ 'BIG5' => 'BIG5 (Chinese)',
+ 'GB2312' => 'GB2312 (Chinese)',
+ 'ISO-2022-JP' => 'ISO-2022-JP (Japanese)',
+ 'ISO-8859-1' => 'ISO-8859-1 (Latin-1)',
+ 'ISO-8859-2' => 'ISO-8895-2 (Central European)',
+ 'ISO-8859-7' => 'ISO-8859-7 (Greek)',
+ 'ISO-8859-9' => 'ISO-8859-9 (Turkish)',
+ 'Windows-1251' => 'Windows-1251 (Cyrillic)',
+ 'Windows-1252' => 'Windows-1252 (Western)',
+ 'Windows-1255' => 'Windows-1255 (Hebrew)',
+ 'Windows-1256' => 'Windows-1256 (Arabic)',
+ 'Windows-1257' => 'Windows-1257 (Baltic)',
+ 'UTF-8' => 'UTF-8'
+ );
+
+ $select = new select($field_attrib);
+ $select->add(array_values($charsets), array_keys($charsets));
+
+ $set = $_POST['_charset'] ? $_POST['_charset'] : $OUTPUT->get_charset();
+ return $select->show($set);
+ }
+
+
+/**
+ * GUI object 'searchform'
+ * Returns code for search function
+ *
+ * @param array Named parameters
+ * @return string HTML code for the gui object
+ */
+function rcmail_search_form($attrib)
+ {
+ global $OUTPUT;
+
+ // add some labels to client
+ rcube_add_label('searching');
+
+ $attrib['name'] = '_q';
+
+ if (empty($attrib['id']))
+ $attrib['id'] = 'rcmqsearchbox';
+
+ $input_q = new textfield($attrib);
+ $out = $input_q->show();
+
+ $OUTPUT->add_gui_object('qsearchbox', $attrib['id']);
+
+ // add form tag around text field
+ if (empty($attrib['form']))
+ $out = sprintf(
+ '<form name="rcmqsearchform" action="./" '.
+ 'onsubmit="%s.command(\'search\');return false" style="display:inline;">%s</form>',
+ JS_OBJECT_NAME,
+ $out);
+
+ return $out;
+ }
+
-?> \ No newline at end of file
+?>