diff --git a/phpgwapi/inc/class.html.inc.php b/phpgwapi/inc/class.html.inc.php
index 7d0c358f8a..8aec4bf17f 100644
--- a/phpgwapi/inc/class.html.inc.php
+++ b/phpgwapi/inc/class.html.inc.php
@@ -1,697 +1,694 @@
*
- * -------------------------------------------- *
- * This program is free software; you can redistribute it and/or modify it *
- * under the terms of the GNU General Public License as published by the *
- * Free Software Foundation; either version 2 of the License, or (at your *
- * option) any later version. *
- \**************************************************************************/
+/**************************************************************************\
+* eGroupWare - HTML creation class *
+* http://www.eGroupWare.org *
+* Written and (c) by Ralf Becker *
+* -------------------------------------------- *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU General Public License as published by the *
+* Free Software Foundation; either version 2 of the License, or (at your *
+* option) any later version. *
+\**************************************************************************/
- /* $Id$ */
+/* $Id$ */
- class html
- {
- var $user_agent,$ua_version; // 'mozilla','msie','konqueror'
- var $prefered_img_title;
- var $charset,$phpgwapi_js_url;
- var $need_footer = False; // do we need to be called at the end of the page
-
- function html()
- {
- // should be Ok for all HTML 4 compatible browsers
- if (!eregi('(Safari)/([0-9.]+)',$_SERVER['HTTP_USER_AGENT'],$parts) &&
- !eregi('compatible; ([a-z_]+)[/ ]+([0-9.]+)',$_SERVER['HTTP_USER_AGENT'],$parts))
- {
+class html
+{
+ var $user_agent,$ua_version; // 'mozilla','msie','konqueror'
+ var $prefered_img_title;
+ var $charset,$phpgwapi_js_url;
+ var $need_footer = False; // do we need to be called at the end of the page
+
+ function html()
+ {
+ // should be Ok for all HTML 4 compatible browsers
+ if (!eregi('(Safari)/([0-9.]+)',$_SERVER['HTTP_USER_AGENT'],$parts) &&
+ !eregi('compatible; ([a-z_]+)[/ ]+([0-9.]+)',$_SERVER['HTTP_USER_AGENT'],$parts))
+ {
eregi('^([a-z_]+)/([0-9.]+)',$_SERVER['HTTP_USER_AGENT'],$parts);
- }
- list(,$this->user_agent,$this->ua_version) = $parts;
- $this->user_agent = strtolower($this->user_agent);
-
- $this->netscape4 = $this->user_agent == 'mozilla' && $this->ua_version < 5;
- $this->prefered_img_title = $this->netscape4 ? 'alt' : 'title';
- //echo "
'
- */
- function tooltip($text,$do_lang=False,$options=False)
- {
- if (!$this->wz_tooltip_included)
- {
+ }
+
+ /**
+ * Handles tooltips via the wz_tooltip class from Walter Zorn
+ *
+ * Note: The wz_tooltip.js file gets automaticaly loaded at the end of the page
+ *
+ * @param $text string/boolean text or html for the tooltip, all chars allowed, they will be quoted approperiate
+ * Or if False the content (innerHTML) of the element itself is used.
+ * @param $do_lang boolean (default False) should the text be run though lang()
+ * @param $options array param/value pairs, eg. 'TITLE' => 'I am the title'. Some common parameters:
+ * title (string) gives extra title-row, width (int,'auto') , padding (int), above (bool), bgcolor (color), bgimg (URL)
+ * For a complete list and description see http://www.walterzorn.com/tooltip/tooltip_e.htm
+ * @return string to be included in any tag, like '
tooltip('Hello Ralf').'>Text with tooltip
'
+ */
+ function tooltip($text,$do_lang=False,$options=False)
+ {
+ if (!$this->wz_tooltip_included)
+ {
if (!strstr('wz_tooltip',$GLOBALS['phpgw_info']['flags']['need_footer']))
{
- $GLOBALS['phpgw_info']['flags']['need_footer'] .= ''."\n";
+ $GLOBALS['phpgw_info']['flags']['need_footer'] .= ''."\n";
}
$this->wz_tooltip_included = True;
- }
- if ($do_lang) $text = lang($text);
-
- $opt_out = 'this.T_WIDTH = 200;';
- if (is_array($options))
- {
+ }
+ if ($do_lang) $text = lang($text);
+
+ $opt_out = 'this.T_WIDTH = 200;';
+ if (is_array($options))
+ {
foreach($options as $option => $value)
{
$opt_out .= 'this.T_'.strtoupper($option).'='.(is_numeric($value)?$value:"'".str_replace("'","\\'",$value)."'").'; ';
}
- }
- if ($text === False) return ' onmouseover="'.$opt_out.'return escape(this.innerHTML);"';
-
- return ' onmouseover="'.$opt_out.'return escape(\''.str_replace(array("\n","\r","'",'"'),array('','',"\\'",'"'),$text).'\')"';
- }
-
- function activate_links($content)
- {
- // Exclude everything which is already a link
- $NotAnchor = '(?\\1 AT \\2 DOT \\3',
- $content);
-
- // First match things beginning with http:// (or other protocols)
- $Protocol = '(http|ftp|https):\/\/';
- $Domain = '([\w]+.[\w]+)';
- $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
- $Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';
-
- $result = preg_replace( $Expr, "$2$3", $result );
-
- // Now match things beginning with www.
- $NotHTTP = '(?$0", $result );
- }
-
- function htmlspecialchars($str)
- {
- // add @ by lkneschke to supress warning about unknown charset
- $str = @htmlspecialchars($str,ENT_COMPAT,$this->charset);
-
- // we need '' unchanged, so we translate it back
- $str = str_replace('&#','',$str);
-
- return $str;
- }
-
- /*!
- @function select
- @abstract allows to show and select one item from an array
- @param $name string with name of the submitted var which holds the key of the selected item form array
- @param $key key(s) of already selected item(s) from $arr, eg. '1' or '1,2' or array with keys
- @param $arr array with items to select, eg. $arr = array ( 'y' => 'yes','n' => 'no','m' => 'maybe');
- @param $no_lang if !$no_lang send items through lang()
- @param $options additional options (e.g. 'width')
- @param $multiple number of lines for a multiselect, default 0 = no multiselect
- @returns string to set for a template or to echo into html page
- */
- function select($name, $key, $arr=0,$no_lang=0,$options='',$multiple=0)
- {
- // should be in class common.sbox
- if (!is_array($arr))
- {
+ }
+ if ($text === False) return ' onmouseover="'.$opt_out.'return escape(this.innerHTML);"';
+
+ return ' onmouseover="'.$opt_out.'return escape(\''.str_replace(array("\n","\r","'",'"'),array('','',"\\'",'"'),$text).'\')"';
+ }
+
+ function activate_links($content)
+ {
+ // Exclude everything which is already a link
+ $NotAnchor = '(?\\1 AT \\2 DOT \\3',
+ $content);
+
+ // First match things beginning with http:// (or other protocols)
+ $Protocol = '(http|ftp|https):\/\/';
+ $Domain = '([\w]+.[\w]+)';
+ $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
+ $Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';
+
+ $result = preg_replace( $Expr, "$2$3", $result );
+
+ // Now match things beginning with www.
+ $NotHTTP = '(?$0", $result );
+ }
+
+ function htmlspecialchars($str)
+ {
+ // add @ by lkneschke to supress warning about unknown charset
+ $str = @htmlspecialchars($str,ENT_COMPAT,$this->charset);
+
+ // we need '' unchanged, so we translate it back
+ $str = str_replace('&#','',$str);
+
+ return $str;
+ }
+
+ /**
+ * allows to show and select one item from an array
+ *
+ * @param string $name string with name of the submitted var which holds the key of the selected item form array
+ * @param string/array $key key(s) of already selected item(s) from $arr, eg. '1' or '1,2' or array with keys
+ * @param array $arr array with items to select, eg. $arr = array ( 'y' => 'yes','n' => 'no','m' => 'maybe');
+ * @param boolean $no_lang if !$no_lang send items through lang()
+ * @param string $options additional options (e.g. 'width')
+ * @param int $multiple number of lines for a multiselect, default 0 = no multiselect
+ * @return string to set for a template or to echo into html page
+ */
+ function select($name, $key, $arr=0,$no_lang=0,$options='',$multiple=0)
+ {
+ if (!is_array($arr))
+ {
$arr = array('no','yes');
- }
- if ((int)$multiple > 0)
- {
+ }
+ if ((int)$multiple > 0)
+ {
$options .= ' multiple="1" size="'.(int)$multiple.'"';
if (substr($name,-2) != '[]')
{
- $name .= '[]';
+ $name .= '[]';
}
- }
- $out = "\n";
+
+ return $out;
+ }
+
+ function div($content,$options='',$class='',$style='')
+ {
+ if ($class) $options .= ' class="'.$class.'"';
+ if ($style) $options .= ' style="'.$style.'"';
+
+ return "
\n".($content ? "$content
\n" : '');
+ }
+
+ function input_hidden($vars,$value='',$ignore_empty=True)
+ {
+ if (!is_array($vars))
+ {
$vars = array( $vars => $value );
- }
- foreach($vars as $name => $value)
- {
+ }
+ foreach($vars as $name => $value)
+ {
if (is_array($value))
{
- $value = serialize($value);
+ $value = serialize($value);
}
if (!$ignore_empty || $value && !($name == 'filter' && $value == 'none')) // dont need to send all the empty vars
{
- $html .= "htmlspecialchars($value)."\" />\n";
+ $html .= "htmlspecialchars($value)."\" />\n";
}
- }
- return $html;
- }
-
- function textarea($name,$value='',$options='' )
- {
- return "\n";
- }
-
- /*!
- @function htmlarea_avalible
- @author ralfbecker
- @abstract Checks if HTMLarea (or an other richtext editor) is availible for the used browser
- */
- function htmlarea_availible()
- {
- switch($this->user_agent)
- {
+ }
+ return $html;
+ }
+
+ function textarea($name,$value='',$options='' )
+ {
+ return "\n";
+ }
+
+ /**
+ * Checks if HTMLarea (or an other richtext editor) is availible for the used browser
+ */
+ function htmlarea_availible()
+ {
+ switch($this->user_agent)
+ {
case 'msie':
- return $this->ua_version >= 5.5;
+ return $this->ua_version >= 5.5;
case 'mozilla':
- return $this->ua_version >= 1.3;
+ return $this->ua_version >= 1.3;
default:
- return False;
- }
- }
-
- /**
- * creates a textarea inputfield for the htmlarea js-widget (returns the necessary html and js)
- *
- * Please note: it need to be called before the call to phpgw_header() !!!
- * @author ralfbecker
- * @param $name string name and id of the input-field
- * @param $content string of the htmlarea (will be run through htmlspecialchars !!!), default ''
- * @param $style string inline styles, eg. dimension of textarea element
- * @param $base_href string set a base href to get relative image-pathes working
- * @param $plugins string plugins to load seperated by comma's, eg 'TableOperations,ContextMenu'
- * (htmlarea breaks when a plugin calls a nonexisiting lang file)
- * @param $custom_toolbar when given this toolbar lay-out replaces the default lay-out.
- * @return the necessary html for the textarea
- */
- function htmlarea($name,$content='',$style='',$base_href='',$plugins='',$custom_toolbar='')
- {
- // check if htmlarea is availible for the browser and use a textarea if not
- if (!$this->htmlarea_availible())
- {
+ return False;
+ }
+ }
+
+ /**
+ * creates a textarea inputfield for the htmlarea js-widget (returns the necessary html and js)
+ *
+ * Please note: it need to be called before the call to phpgw_header() !!!
+ * @author ralfbecker
+ * @param $name string name and id of the input-field
+ * @param $content string of the htmlarea (will be run through htmlspecialchars !!!), default ''
+ * @param $style string inline styles, eg. dimension of textarea element
+ * @param $base_href string set a base href to get relative image-pathes working
+ * @param $plugins string plugins to load seperated by comma's, eg 'TableOperations,ContextMenu'
+ * (htmlarea breaks when a plugin calls a nonexisiting lang file)
+ * @param $custom_toolbar when given this toolbar lay-out replaces the default lay-out.
+ * @return the necessary html for the textarea
+ */
+ function htmlarea($name,$content='',$style='',$base_href='',$plugins='',$custom_toolbar='')
+ {
+ // check if htmlarea is availible for the browser and use a textarea if not
+ if (!$this->htmlarea_availible())
+ {
return $this->textarea($name,$content,'style="'.$style.'"');
- }
-
- $id = str_replace(array('[',']'),array('_',''),$name); // no brakets in the id allowed by js
-
- if($custom_toolbar)
- {
+ }
+
+ $id = str_replace(array('[',']'),array('_',''),$name); // no brakets in the id allowed by js
+
+ if($custom_toolbar)
+ {
$custom_toolbar='htmlareaConfig_'.$id.'.toolbar = '.$custom_toolbar;
- }
-
- if (!$style)
- {
+ }
+
+ if (!$style)
+ {
$style = 'width:100%; min-width:500px; height:300px;';
- }
-
- if (!$plugins)
- {
+ }
+
+ if (!$plugins)
+ {
$plugins = 'ContextMenu,TableOperations,SpellChecker';
- }
-
- if (!is_object($GLOBALS['phpgw']->js))
- {
+ }
+
+ if (!is_object($GLOBALS['phpgw']->js))
+ {
$GLOBALS['phpgw']->js = CreateObject('phpgwapi.javascript');
- }
-
- /* do stuff once */
- if (!strstr($GLOBALS['phpgw_info']['flags']['java_script'],'htmlarea'))
- {
+ }
+
+ /* do stuff once */
+ if (!strstr($GLOBALS['phpgw_info']['flags']['java_script'],'htmlarea'))
+ {
$GLOBALS['phpgw']->js->validate_file('htmlarea','htmlarea');
$GLOBALS['phpgw']->js->validate_file('htmlarea','dialog');
$lang = $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'];
if ($lang == 'en') // other lang-files are utf-8 only and incomplete (crashes htmlarea as of 3.0beta)
{
- $GLOBALS['phpgw']->js->validate_file('htmlarea',"lang/$lang");
+ $GLOBALS['phpgw']->js->validate_file('htmlarea',"lang/$lang");
}
else
{
- $GLOBALS['phpgw_info']['flags']['java_script'] .=
- ''."\n";
+ $GLOBALS['phpgw_info']['flags']['java_script'] .=
+ ''."\n";
}
-
+
$GLOBALS['phpgw_info']['flags']['java_script_thirst'] .=
- '
- \n";
-
+ '
+\n";
+
// set a base href to get relative image-pathes working
if ($base_href && $this->user_agent != 'msie') // HTMLarea does not work in IE with base href set !!!
{
- $GLOBALS['phpgw_info']['flags']['java_script_thirst'] .= ''."\n";
+ $GLOBALS['phpgw_info']['flags']['java_script_thirst'] .= ''."\n";
}
-
+
if (!empty($plugins))
{
- foreach(explode(',',$plugins) as $plg_name)
- {
- $plg_name = trim($plg_name);
- $plg_dir = PHPGW_SERVER_ROOT.'/phpgwapi/js/htmlarea/plugins/'.$plg_name;
- if (!@is_dir($plg_dir) || !@file_exists($plg_lang_script="$plg_dir/lang/lang.php") && !@file_exists($plg_lang_file="$plg_dir/lang/$lang.js"))
- {
- //echo "$plg_dir or $plg_lang_file not found !!!";
- continue; // else htmlarea fails with js errors
- }
- $script_name = strtolower(preg_replace('/([A-Z][a-z]+)([A-Z][a-z]+)/','\\1-\\2',$plg_name));
- $GLOBALS['phpgw']->js->validate_file('htmlarea',"plugins/$plg_name/$script_name");
- if ($lang == 'en' || !@file_exists($plg_lang_script)) // other lang-files are utf-8 only and incomplete (crashes htmlarea as of 3.0beta)
- {
- $GLOBALS['phpgw']->js->validate_file('htmlarea',"plugins/$plg_name/lang/$lang");
- }
- else
- {
- $GLOBALS['phpgw_info']['flags']['java_script'] .=
- ''."\n";
- }
- }
- }
-
- }
-
- /* do stuff for every htmlarea in the page */
-
- if (!empty($plugins))
- {
+ foreach(explode(',',$plugins) as $plg_name)
+ {
+ $plg_name = trim($plg_name);
+ $plg_dir = PHPGW_SERVER_ROOT.'/phpgwapi/js/htmlarea/plugins/'.$plg_name;
+ if (!@is_dir($plg_dir) || !@file_exists($plg_lang_script="$plg_dir/lang/lang.php") && !@file_exists($plg_lang_file="$plg_dir/lang/$lang.js"))
+ {
+ //echo "$plg_dir or $plg_lang_file not found !!!";
+ continue; // else htmlarea fails with js errors
+ }
+ $script_name = strtolower(preg_replace('/([A-Z][a-z]+)([A-Z][a-z]+)/','\\1-\\2',$plg_name));
+ $GLOBALS['phpgw']->js->validate_file('htmlarea',"plugins/$plg_name/$script_name");
+ if ($lang == 'en' || !@file_exists($plg_lang_script)) // other lang-files are utf-8 only and incomplete (crashes htmlarea as of 3.0beta)
+ {
+ $GLOBALS['phpgw']->js->validate_file('htmlarea',"plugins/$plg_name/lang/$lang");
+ }
+ else
+ {
+ $GLOBALS['phpgw_info']['flags']['java_script'] .=
+ ''."\n";
+ }
+ }
+ }
+ }
+
+ /* do stuff for every htmlarea in the page */
+
+ if (!empty($plugins))
+ {
foreach(explode(',',$plugins) as $plg_name)
{
- //$load_plugin_string .= 'HTMLArea.loadPlugin("'.$plg_name.'");'."\n";
- $register_plugin_string .= 'ret_editor = editor.registerPlugin("'.$plg_name.'");'."\n";
-// $register_plugin_string .= 'editor.registerPlugin("'.$plg_name.'");'."\n";
+ //$load_plugin_string .= 'HTMLArea.loadPlugin("'.$plg_name.'");'."\n";
+ $register_plugin_string .= 'ret_editor = editor.registerPlugin("'.$plg_name.'");'."\n";
+ // $register_plugin_string .= 'editor.registerPlugin("'.$plg_name.'");'."\n";
}
- }
+ }
+
+ // FIXME strange bug when plugins are registered fullscreen editor don't work anymore
+ $GLOBALS['phpgw_info']['flags']['java_script'] .=
+ '\n";
-
-
- $GLOBALS['phpgw']->js->set_onload("HTMLArea.replace_$id('$id',htmlareaConfig_$id);");
-
- if (!empty($style)) $style = " style=\"$style\"";
-
- return "\n";
- }
-
- function input($name,$value='',$type='',$options='' )
- {
- if ($type)
- {
+htmlareaConfig_'.$id.'.editorURL = '."'$this->phpgwapi_js_url/htmlarea/';";
+
+ $GLOBALS['phpgw_info']['flags']['java_script'] .="\n";
+
+
+ $GLOBALS['phpgw']->js->set_onload("HTMLArea.replace_$id('$id',htmlareaConfig_$id);");
+
+ if (!empty($style)) $style = " style=\"$style\"";
+
+ return "\n";
+ }
+
+ function input($name,$value='',$type='',$options='' )
+ {
+ if ($type)
+ {
$type = 'type="'.$type.'"';
- }
- return "htmlspecialchars($value)."\" $options />\n";
- }
-
- function submit_button($name,$lang,$onClick='',$no_lang=0,$options='',$image='',$app='phpgwapi')
- {
- // workaround for idots and IE button problem (wrong cursor-image)
- if ($this->user_agent == 'msie')
- {
+ }
+ return "htmlspecialchars($value)."\" $options />\n";
+ }
+
+ function submit_button($name,$lang,$onClick='',$no_lang=0,$options='',$image='',$app='phpgwapi')
+ {
+ // workaround for idots and IE button problem (wrong cursor-image)
+ if ($this->user_agent == 'msie')
+ {
$options .= ' style="cursor: pointer; cursor: hand;"';
- }
- if ($image != '')
- {
+ }
+ if ($image != '')
+ {
$image = str_replace(array('.gif','.GIF','.png','.PNG'),'',$image);
-
+
if (!($path = $GLOBALS['phpgw']->common->image($app,$image)))
{
- $path = $image; // name may already contain absolut path
+ $path = $image; // name may already contain absolut path
}
$image = ' src="'.$path.'"';
- }
- if (!$no_lang)
- {
+ }
+ if (!$no_lang)
+ {
$lang = lang($lang);
- }
- if (($accesskey = strstr($lang,'&')) && $accesskey[1] != ' ' &&
- (($pos = strpos($accesskey,';')) === False || $pos > 5))
- {
+ }
+ if (($accesskey = strstr($lang,'&')) && $accesskey[1] != ' ' &&
+ (($pos = strpos($accesskey,';')) === False || $pos > 5))
+ {
$lang_u = str_replace('&'.$accesskey[1],''.$accesskey[1].'',$lang);
$lang = str_replace('&','',$lang);
$options = 'accesskey="'.$accesskey[1].'" '.$options;
- }
- else
- {
+ }
+ else
+ {
$accesskey = '';
$lang_u = $lang;
- }
- if ($onClick) $options .= " onclick=\"$onClick\"";
-
- //