summaryrefslogtreecommitdiff
path: root/program/include/rcube_html.inc
diff options
context:
space:
mode:
Diffstat (limited to 'program/include/rcube_html.inc')
-rw-r--r--program/include/rcube_html.inc667
1 files changed, 0 insertions, 667 deletions
diff --git a/program/include/rcube_html.inc b/program/include/rcube_html.inc
deleted file mode 100644
index d23760ade..000000000
--- a/program/include/rcube_html.inc
+++ /dev/null
@@ -1,667 +0,0 @@
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | rcube_html.inc |
- | |
- | This file is part of the RoundCube PHP suite |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | CONTENTS: |
- | Common Classes to create HTML output |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: $
-
-*/
-
-
-/**
- * HTML page builder class
- *
- * @package HTML
- */
-class rcube_html_page
-{
- var $scripts_path = '';
- var $script_files = array();
- var $scripts = array();
- var $charset = 'UTF-8';
-
- var $script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n";
- var $script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n";
- var $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>";
-
- var $title = 'RoundCube Mail';
- var $header = '';
- var $footer = '';
- var $body = '';
- var $body_attrib = array();
- var $meta_tags = array();
-
-
- /**
- * Link an external script file
- *
- * @param string File URL
- * @param string Target position [head|foot]
- */
- function include_script($file, $position='head')
- {
- static $sa_files = array();
-
- if (in_array($file, $sa_files))
- return;
-
- if (!is_array($this->script_files[$position]))
- $this->script_files[$position] = array();
-
- $this->script_files[$position][] = $file;
- }
-
- /**
- * Add inline javascript code
- *
- * @param string JS code snippet
- * @param string Target position [head|head_top|foot]
- */
- function add_script($script, $position='head')
- {
- if (!isset($this->scripts[$position]))
- $this->scripts[$position] = "\n".rtrim($script);
- else
- $this->scripts[$position] .= "\n".rtrim($script);
- }
-
- /**
- * Add HTML code to the page header
- */
- function add_header($str)
- {
- $this->header .= "\n".$str;
- }
-
- /**
- * Add HTML code to the page footer
- * To be added right befor </body>
- */
- function add_footer($str)
- {
- $this->footer .= "\n".$str;
- }
-
- /**
- * Setter for page title
- */
- function set_title($t)
- {
- $this->title = $t;
- }
-
-
- /**
- * Setter for output charset.
- * To be specified in a meta tag and sent as http-header
- */
- function set_charset($charset)
- {
- global $MBSTRING;
-
- $this->charset = $charset;
-
- if ($MBSTRING && function_exists("mb_internal_encoding"))
- {
- if(!@mb_internal_encoding($charset))
- $MBSTRING = FALSE;
- }
- }
-
- /**
- * Getter for output charset
- */
- function get_charset()
- {
- return $this->charset;
- }
-
-
- /**
- * Reset all saved properties
- */
- function reset()
- {
- $this->script_files = array();
- $this->scripts = array();
- $this->title = '';
- $this->header = '';
- $this->footer = '';
- }
-
-
- /**
- * Process template and write to stdOut
- *
- * @param string HTML template
- * @param string Base for absolute paths
- */
- function write($templ='', $base_path='')
- {
- $output = empty($templ) ? $this->default_template : trim($templ);
-
- // replace specialchars in content
- $__page_title = Q($this->title, 'show', FALSE);
- $__page_header = $__page_body = $__page_footer = '';
-
-
- // include meta tag with charset
- if (!empty($this->charset))
- {
- header('Content-Type: text/html; charset='.$this->charset, true);
- $__page_header = '<meta http-equiv="content-type" content="text/html; charset='.$this->charset.'" />'."\n";
- }
-
-
- // definition of the code to be placed in the document header and footer
- if (is_array($this->script_files['head']))
- foreach ($this->script_files['head'] as $file)
- $__page_header .= sprintf($this->script_tag_file, $this->scripts_path, $file);
-
- $head_script = $this->scripts['head_top'] . $this->scripts['head'];
- if (!empty($head_script))
- $__page_header .= sprintf($this->script_tag, $head_script);
-
- if (!empty($this->header))
- $__page_header .= $this->header;
-
- if (is_array($this->script_files['foot']))
- foreach ($this->script_files['foot'] as $file)
- $__page_footer .= sprintf($this->script_tag_file, $this->scripts_path, $file);
-
- if (!empty($this->scripts['foot']))
- $__page_footer .= sprintf($this->script_tag, $this->scripts['foot']);
-
- if (!empty($this->footer))
- $__page_footer .= $this->footer;
-
- // find page header
- if ($hpos = strpos(strtolower($output), '</head>'))
- $__page_header .= "\n";
- else
- {
- if (!is_numeric($hpos))
- $hpos = strpos(strtolower($output), '<body');
- if (!is_numeric($hpos) && ($hpos = strpos(strtolower($output), '<html')))
- {
- while($output[$hpos]!='>')
- $hpos++;
- $hpos++;
- }
-
- $__page_header = "<head>\n<title>$__page_title</title>\n$__page_header\n</head>\n";
- }
-
- // add page hader
- if ($hpos)
- $output = substr($output,0,$hpos) . $__page_header . substr($output,$hpos,strlen($output));
- else
- $output = $__page_header . $output;
-
-
- // find page body
- if($bpos = strpos(strtolower($output), '<body'))
- {
- while($output[$bpos]!='>') $bpos++;
- $bpos++;
- }
- else
- $bpos = strpos(strtolower($output), '</head>')+7;
-
- // add page body
- if($bpos && $__page_body)
- $output = substr($output,0,$bpos) . "\n$__page_body\n" . substr($output,$bpos,strlen($output));
-
-
- // find and add page footer
- $output_lc = strtolower($output);
- if(($fpos = strrstr($output_lc, '</body>')) ||
- ($fpos = strrstr($output_lc, '</html>')))
- $output = substr($output, 0, $fpos) . "$__page_footer\n" . substr($output, $fpos);
- else
- $output .= "\n$__page_footer";
-
-
- // reset those global vars
- $__page_header = $__page_footer = '';
-
-
- // correct absolute paths in images and other tags
- $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output);
- $output = str_replace('$__skin_path', $base_path, $output);
-
- print rcube_charset_convert($output, 'UTF-8', $this->charset);
- }
-
-} // end class rcube_html_page
-
-
-
-/**
- * Base class to build a HTML for element
- *
- * @package HTML
- */
-class rcube_form_element
- {
- var $uppertags = FALSE;
- var $upperattribs = FALSE;
- var $upperprops = FALSE;
- var $newline = FALSE;
-
- var $attrib = array();
-
-
- /**
- * Create string with saved attributes
- *
- * @return string HTML formatted tag attributes
- */
- function create_attrib_string()
- {
- if (!sizeof($this->attrib))
- return '';
-
- if ($this->name!='')
- $this->attrib['name'] = $this->name;
-
- $attrib_arr = array();
- foreach ($this->attrib as $key => $value)
- {
- // don't output some internally used attributes
- if (in_array($key, array('form', 'quicksearch')))
- continue;
-
- // skip if size if not numeric
- if (($key=='size' && !is_numeric($value)))
- continue;
-
- // skip empty eventhandlers
- if ((strpos($key,'on')===0 && $value==''))
- continue;
-
- // attributes with no value
- if (in_array($key, array('checked', 'multiple', 'disabled', 'selected', 'nowrap')))
- {
- if ($value)
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $key);
- }
- // don't convert size of value attribute
- else if ($key=='value')
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), Q($value, 'strict', false));
-
- // regular tag attributes
- else
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $this->_conv_case(Q($value), 'value'));
- }
-
- return sizeof($attrib_arr) ? ' '.implode(' ', $attrib_arr) : '';
- }
-
-
- /**
- * Convert tags and attributes to upper-/lowercase
- *
- * @param string Input string
- * @param string Value type (can either be "tag" or "attrib")
- * @return string Converted output string
- * @access private
- */
- function _conv_case($str, $type='attrib')
- {
- if ($type == 'tag')
- return $this->uppertags ? strtoupper($str) : strtolower($str);
- else if ($type == 'attrib')
- return $this->upperattribs ? strtoupper($str) : strtolower($str);
- else if ($type == 'value')
- return $this->upperprops ? strtoupper($str) : strtolower($str);
- }
- }
-
-
-/**
- * Builder for an <input> field
- *
- * @package HTML
- */
-class input_field extends rcube_form_element
-{
- var $type = 'text';
-
- /**
- * Constructor
- * @param array Named tag attributes
- */
- function input_field($attrib=array())
- {
- if (is_array($attrib))
- $this->attrib = $attrib;
-
- if ($attrib['type'])
- $this->type = $attrib['type'];
-
- if ($attrib['newline'])
- $this->newline = TRUE;
- }
-
- /**
- * Compose input tag
- *
- * @param string Field value
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($value=NULL, $attrib=NULL)
- {
- // overwrite object attributes
- if (is_array($attrib))
- $this->attrib = array_merge($this->attrib, $attrib);
-
- // set value attribute
- if ($value!==NULL)
- $this->attrib['value'] = $value;
-
- $this->attrib['type'] = $this->type;
-
- // return final tag
- return sprintf(
- '<%s%s />%s',
- $this->_conv_case('input', 'tag'),
- $this->create_attrib_string(),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-/**
- * Builder for a <input type="text"> field
- *
- * @package HTML
- */
-class textfield extends input_field
-{
- var $type = 'text';
-}
-
-/**
- * Builder for a <input type="password"> field
- *
- * @package HTML
- */
-class passwordfield extends input_field
-{
- var $type = 'password';
-}
-
-/**
- * Builder for <input type="radio"> fields
- *
- * @package HTML
- */
-class radiobutton extends input_field
-{
- var $type = 'radio';
-}
-
-/**
- * Builder for <input type="checkbox"> fields
- *
- * @package HTML
- */
-class checkbox extends input_field
-{
- var $type = 'checkbox';
-
-
- /**
- * Compose input tag
- *
- * @param string Field value
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($value='', $attrib=NULL)
- {
- // overwrite object attributes
- if (is_array($attrib))
- $this->attrib = array_merge($this->attrib, $attrib);
-
- $this->attrib['type'] = $this->type;
-
- if ($value && (string)$value==(string)$this->attrib['value'])
- $this->attrib['checked'] = TRUE;
- else
- $this->attrib['checked'] = FALSE;
-
- // return final tag
- return sprintf(
- '<%s%s />%s',
- $this->_conv_case('input', 'tag'),
- $this->create_attrib_string(),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-/**
- * Builder for a <textarea> field
- *
- * @package HTML
- */
-class textarea extends rcube_form_element
- {
-
- /**
- * Constructor
- * @param array Named tag attributes
- */
- function textarea($attrib=array())
- {
- $this->attrib = $attrib;
-
- if ($attrib['newline'])
- $this->newline = TRUE;
- }
-
- /**
- * Create HTML representation for this field
- *
- * @param string Field value
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($value='', $attrib=NULL)
- {
- // overwrite object attributes
- if (is_array($attrib))
- $this->attrib = array_merge($this->attrib, $attrib);
-
- // take value attribute as content
- if ($value=='')
- $value = $this->attrib['value'];
-
- // make shure we don't print the value attribute
- if (isset($this->attrib['value']))
- unset($this->attrib['value']);
-
- if (!empty($value) && !isset($this->attrib['mce_editable']))
- $value = Q($value, 'strict', FALSE);
-
- // return final tag
- return sprintf(
- '<%s%s>%s</%s>%s',
- $this->_conv_case('textarea', 'tag'),
- $this->create_attrib_string(),
- $value,
- $this->_conv_case('textarea', 'tag'),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-/**
- * Builder for group of hidden form fields
- *
- * @package HTML
- */
-class hiddenfield extends rcube_form_element
-{
- var $fields_arr = array();
- var $newline = TRUE;
-
- /**
- * Constructor
- *
- * @param array Named tag attributes
- */
- function hiddenfield($attrib=NULL)
- {
- if (is_array($attrib))
- $this->add($attrib);
- }
-
- /**
- * Add a hidden field to this instance
- * @param array Named tag attributes
- */
- function add($attrib)
- {
- $this->fields_arr[] = $attrib;
- }
-
-
- /**
- * Create HTML code for the hidden fields
- *
- * @return string Final HTML code
- */
- function show()
- {
- $out = '';
- foreach ($this->fields_arr as $attrib)
- {
- $this->attrib = $attrib;
- $this->attrib['type'] = 'hidden';
-
- $out .= sprintf(
- '<%s%s />%s',
- $this->_conv_case('input', 'tag'),
- $this->create_attrib_string(),
- ($this->newline ? "\n" : ""));
- }
-
- return $out;
- }
-}
-
-
-/**
- * Builder for HTML drop-down menus
- * Syntax:<pre>
- * // create instance. arguments are used to set attributes of select-tag
- * $select = new select(array('name' => 'fieldname'));
- *
- * // add one option
- * $select->add('Switzerland', 'CH');
- *
- * // add multiple options
- * $select->add(array('Switzerland','Germany'), array('CH','DE'));
- *
- * // generate pulldown with selection 'Switzerland' and return html-code
- * // as second argument the same attributes available to instanciate can be used
- * print $select->show('CH');
- * </pre>
- *
- * @package HTML
- */
-class select extends rcube_form_element
-{
- var $options = array();
-
- /**
- * Constructor
- *
- * @param array Named tag attributes
- */
- function select($attrib=NULL)
- {
- if (is_array($attrib))
- $this->attrib = $attrib;
-
- if ($attrib['newline'])
- $this->newline = TRUE;
- }
-
-
- /**
- * Add one ore more menu options
- *
- * @param mixed Array with names or single option name
- * @param mixed Array with values or single option value
- */
- function add($names, $values=NULL)
- {
- if (is_array($names))
- {
- foreach ($names as $i => $text)
- $this->options[] = array('text' => $text, 'value' => $values[$i]);
- }
- else
- $this->options[] = array('text' => $names, 'value' => $values);
- }
-
-
- /**
- * Generate HTML code for this drop-down menu
- *
- * @param string Value of the selected option
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($select=array(), $attrib=NULL)
- {
- $options_str = "\n";
- $value_str = $this->_conv_case(' value="%s"', 'attrib');
-
- if (!is_array($select))
- $select = array($select);
-
- foreach ($this->options as $option)
- {
- $selected = ((isset($option['value']) &&
- in_array($option['value'], $select, TRUE)) ||
- (in_array($option['text'], $select, TRUE))) ?
- $this->_conv_case(' selected="selected"', 'attrib') : '';
-
- $options_str .= sprintf("<%s%s%s>%s</%s>\n",
- $this->_conv_case('option', 'tag'),
- isset($option['value']) ? sprintf($value_str, Q($option['value'])) : '',
- $selected,
- Q($option['text'], 'strict', FALSE),
- $this->_conv_case('option', 'tag'));
- }
-
- // return final tag
- return sprintf('<%s%s>%s</%s>%s',
- $this->_conv_case('select', 'tag'),
- $this->create_attrib_string(),
- $options_str,
- $this->_conv_case('select', 'tag'),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-?>