diff --git a/phpgwapi/inc/class.tplsavant2.inc.php b/phpgwapi/inc/class.tplsavant2.inc.php
new file mode 100755
index 0000000000..f4cf99d6fe
--- /dev/null
+++ b/phpgwapi/inc/class.tplsavant2.inc.php
@@ -0,0 +1,228 @@
+ *
+ * *
+ * Wrapper for the savant2 template engine www.phpsavant.com *
+ * Copyright (C) 2005 Lingewoud BV and Pim Snel *
+ * -------------------------------------------------------------------------*
+ * This library is part of the eGroupWare API *
+ * http://www.egroupware.org *
+ * ------------------------------------------------------------------------ *
+ * This library is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as published by *
+ * the Free Software Foundation; either version 2.1 of the License, *
+ * or any later version. *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
+ * See the GNU Lesser General Public License for more details. *
+ * You should have received a copy of the GNU Lesser General Public License *
+ * along with this library; if not, write to the Free Software Foundation, *
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+ \**************************************************************************/
+
+ /* $Id$ */
+
+ if(is_file(EGW_INCLUDE_ROOT.'/phpgwapi/inc/savant2/Savant2.php'))
+ {
+ include_once(EGW_INCLUDE_ROOT.'/phpgwapi/inc/savant2/Savant2.php');
+ }
+
+ /*!
+ @class tplsavant2
+ @abstract wrapper class for the Savant2 template engine
+ */
+ class tplsavant2 extends Savant2
+ {
+ /*!
+ @var $version
+ @abstract the version this wrapper is testet against
+ */
+ var $version = '2.3.3';
+
+ /*!
+ @var $do_version_check
+ @abstract set this to true to halt when versions of this wrapper and savant2 itself differ
+ */
+ var $do_version_check = false;
+
+ /*!
+ @function tplsavant2
+ @abstract constructor function which calls the constructor of Savant2 and sets necesary things for eGroupware
+ */
+ function tplsavant2()
+ {
+ // run constructor of the Savant2 class
+ $this->Savant2();
+
+ if($this->do_version_check)
+ {
+ $this->version_check();
+ }
+
+ $this->set_tpl_path();
+ }
+
+ /**
+ @function version_check
+ @abstract check version of this wrapper with installed savant2 version and halts when version differs
+ @return void
+ */
+ function version_check()
+ {
+ $Sav2Version = @file_get_contents(EGW_INCLUDE_ROOT.'/phpgwapi/inc/savant2/VERSION',"rb");
+
+ if(trim($Sav2Version) != trim($this->version))
+ {
+ $this->halt(lang('Savant2 version differs from Savant2 wrapper.
This version: %1
Savants version: %2',$this->version, $Sav2Version));
+ }
+ }
+
+
+ /*!
+ @function set_tpl_path
+ @abstract sets the preferred and fallback template search paths
+ @return void
+ */
+ function set_tpl_path()
+ {
+ $preferred_dir=$this->get_tpl_dir();
+ $fallback_dir=$this->get_tpl_dir(true);
+
+ if(!$preferred_dir && $fallback_dir)
+ {
+ $this->halt(lang('No Savant2 template directories were found in:'.EGW_APP_ROOT));
+ }
+ else
+ {
+ if($fallback_dir)
+ {
+ $this->addPath('template',$fallback_dir);
+ }
+ // add preferred tpl dir last because savant set the last added first in the search array
+ if($preferred_dir)
+ {
+ $this->addPath('template',$preferred_dir);
+ }
+
+ }
+
+ }
+
+ /*!
+ @function get_tpl_dir
+ @abstract get template dir of an application
+ @param $fallback if true the default fallback template dir is returned
+ @param $appname appication name optional can be derived from $GLOBALS['egw_info']['flags']['currentapp'];
+ */
+ function get_tpl_dir($fallback=false,$appname = '')
+ {
+ if (! $appname)
+ {
+ $appname = $GLOBALS['egw_info']['flags']['currentapp'];
+ }
+ if ($appname == 'home' || $appname == 'logout' || $appname == 'login')
+ {
+ $appname = 'phpgwapi';
+ }
+
+ if (!isset($GLOBALS['egw_info']['server']['template_set']) && isset($GLOBALS['egw_info']['user']['preferences']['common']['template_set']))
+ {
+ $GLOBALS['egw_info']['server']['template_set'] = $GLOBALS['egw_info']['user']['preferences']['common']['template_set'];
+ }
+
+ // Setting this for display of template choices in user preferences
+ if ($GLOBALS['egw_info']['server']['template_set'] == 'user_choice')
+ {
+ $GLOBALS['egw_info']['server']['usrtplchoice'] = 'user_choice';
+ }
+
+ if (($GLOBALS['egw_info']['server']['template_set'] == 'user_choice' ||
+ !isset($GLOBALS['egw_info']['server']['template_set'])) &&
+ isset($GLOBALS['egw_info']['user']['preferences']['common']['template_set']))
+ {
+ $GLOBALS['egw_info']['server']['template_set'] = $GLOBALS['egw_info']['user']['preferences']['common']['template_set'];
+ }
+ elseif ($GLOBALS['egw_info']['server']['template_set'] == 'user_choice' ||
+ !isset($GLOBALS['egw_info']['server']['template_set']))
+ {
+ $GLOBALS['egw_info']['server']['template_set'] = 'default';
+ }
+
+ $tpldir = EGW_SERVER_ROOT . '/' . $appname . '/templatesSavant2/' . $GLOBALS['egw_info']['server']['template_set'];
+ $tpldir_default = EGW_SERVER_ROOT . '/' . $appname . '/templatesSavant2/default';
+
+ if (!$fallback && @is_dir($tpldir))
+ {
+ return $tpldir;
+ }
+ elseif (@is_dir($tpldir_default))
+ {
+ return $tpldir_default;
+ }
+ else
+ {
+ return False;
+ }
+ }
+
+ /***************************************************************************/
+ /* public: halt(string $msg)
+ * msg: error message to show.
+ */
+ function halt($msg)
+ {
+ $this->last_error = $msg;
+
+ if ($this->halt_on_error != 'no')
+ {
+ $this->haltmsg($msg);
+ }
+
+ if ($this->halt_on_error == 'yes')
+ {
+ echo('Halted.');
+ }
+
+ $GLOBALS['phpgw']->common->phpgw_exit(True);
+ }
+
+ /* public, override: haltmsg($msg)
+ * msg: error message to show.
+ */
+ function haltmsg($msg)
+ {
+ printf("Savant Template Error: %s
\n", $msg);
+ echo "Backtrace: ".function_backtrace(2)."
\n";
+ }
+
+ function fetch_string($string)
+ {
+ $tmpfname = tempnam ("/tmp", "sav");
+ $fp = fopen($tmpfname, "w");
+ fwrite($fp, $string);
+ fclose($fp);
+ $this->addPath('template','/tmp');
+ $file_arr= explode('/',$tmpfname);
+ return $this->fetch($file_arr[2]);
+ unlink($tmpfname);
+ }
+
+ /**
+ * set_var the same as assign()
+ *
+ * @param mixed $tplvar
+ * @param string $val
+ * @access public
+ * @return void
+ */
+ function set_var($tplvar,$val='')
+ {
+ $this->assign($tplvar,$val);
+ }
+
+
+
+
+ }