<?php
// ------------------------------------------------------------------------ //
// //
// Astrocytes - Medical Managment Systems //
// Copyright (c) 2005 astrocytes.org //
// <http://www.astrocytes.org/> //
// <http://sourceforge.net/projects/astroarm/> //
// BY YAZID JIBREL //
// hide@address.com //
// Based on XOOPS CMS <xoops.org> //
// ------------------------------------------------------------------------ //
// 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. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program 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 General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software <gnu.org> //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// ------------------------------------------------------------------------ //
// Authors: author name (hide@address.com), //
// URL: http://www.astrocytes.org //
// Package: Package name //
// Project: Astrocytes //
// version: 1.1 //
// ------------------------------------------------------------------------- //
// ################## Various functions from here ################
function astro_header($closehead=true)
{
global $astroConfig, $astroTheme, $astroConfigMetaFooter;
$myts =& MyTextSanitizer::getInstance();
if ($astroConfig['gzip_compression'] == 1) {
ob_start("ob_gzhandler");
} else {
ob_start();
}
if (!headers_sent()) {
header('Content-Type:text/html; charset='._CHARSET);
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header('Cache-Control: no-store, no-cache, max-age=1, s-maxage=1, must-revalidate, post-check=0, pre-check=0');
header("Pragma: no-cache");
}
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>";
echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'._LANGCODE.'" lang="'._LANGCODE.'">
<head>
<meta http-equiv="content-type" content="text/html; charset='._CHARSET.'" />
<meta http-equiv="content-language" content="'._LANGCODE.'" />
<meta name="robots" content="'.$astroConfigMetaFooter['meta_robots'].'" />
<meta name="keywords" content="'.$astroConfigMetaFooter['meta_keywords'].'" />
<meta name="description" content="'.$astroConfigMetaFooter['meta_desc'].'" />
<meta name="rating" content="'.$astroConfigMetaFooter['meta_rating'].'" />
<meta name="author" content="'.$astroConfigMetaFooter['meta_author'].'" />
<meta name="copyright" content="'.$astroConfigMetaFooter['meta_copyright'].'" />
<meta name="generator" content="ASTRO" />
<title>'.$astroConfig['sitename'].'</title>
<script type="text/javascript" src="'.ASTRO_URL.'/include/astro.js"></script>
';
$themecss = getcss($astroConfig['theme_set']);
echo '<link rel="stylesheet" type="text/css" media="all" href="'.ASTRO_URL.'/astro.css" />';
if ($themecss) {
echo '<link rel="stylesheet" type="text/css" media="all" href="'.$themecss.'" />';
//echo '<style type="text/css" media="all"><!-- @import url('.$themecss.'); --></style>';
}
if ($closehead) {
echo '</head><body>';
}
}
function astro_footer()
{
echo '</body></html>';
ob_end_flush();
}
function astro_error($msg, $title='')
{
echo '
<div class="errorMsg">';
if ($title != '') {
echo '<h4>'.$title.'</h4>';
}
if (is_array($msg)) {
foreach ($msg as $m) {
echo $m.'<br />';
}
} else {
echo $msg;
}
echo '</div>';
}
function astro_result($msg, $title='')
{
echo '
<div class="resultMsg">';
if ($title != '') {
echo '<h4>'.$title.'</h4>';
}
if (is_array($msg)) {
foreach ($msg as $m) {
echo $m.'<br />';
}
} else {
echo $msg;
}
echo '</div>';
}
function astro_confirm($hiddens, $action, $msg, $submit='', $addtoken = true)
{
$submit = ($submit != '') ? trim($submit) : _SUBMIT;
echo '
<div class="confirmMsg">
<h4>'.$msg.'</h4>
<form method="post" action="'.$action.'">
';
foreach ($hiddens as $name => $value) {
if (is_array($value)) {
foreach ($value as $caption => $newvalue) {
echo '<input type="radio" name="'.$name.'" value="'.htmlspecialchars($newvalue).'" /> '.$caption;
}
echo '<br />';
} else {
echo '<input type="hidden" name="'.$name.'" value="'.htmlspecialchars($value).'" />';
}
}
if ($addtoken != false) {
echo $GLOBALS['astroSecurity']->getTokenHTML();
}
echo '
<input type="submit" name="confirm_submit" value="'.$submit.'" /> <input type="button" name="confirm_back" value="'._CANCEL.'" onclick="javascript:history.go(-1);" />
</form>
</div>
';
}
/**
* Deprecated, use {@link AstroSecurity} class instead
**/
function astro_refcheck($docheck=1)
{
return $GLOBALS['astroSecurity']->checkReferer($docheck);
}
function astro_getUserTimestamp($time, $timeoffset="")
{
global $astroConfig, $astroUser;
if ($timeoffset == '') {
if ($astroUser) {
$timeoffset = $astroUser->getVar("timezone_offset");
} else {
$timeoffset = $astroConfig['default_TZ'];
}
}
$usertimestamp = intval($time) + (intval($timeoffset) - $astroConfig['server_TZ'])*3600;
return $usertimestamp;
}
/*
* Function to display formatted times in user timezone
*/
function formatTimestamp($time, $format="l", $timeoffset="")
{
global $astroConfig, $astroUser;
$usertimestamp = astro_getUserTimestamp($time, $timeoffset);
switch (strtolower($format)) {
case 's':
$datestring = _SHORTDATESTRING;
break;
case 'm':
$datestring = _MEDIUMDATESTRING;
break;
case 'mysql':
$datestring = "Y-m-d H:i:s";
break;
case 'rss':
$datestring = "r";
break;
case 'l':
$datestring = _DATESTRING;
break;
default:
if ($format != '') {
$datestring = $format;
} else {
$datestring = _DATESTRING;
}
break;
}
return ucfirst(date($datestring, $usertimestamp));
}
/*
* Function to calculate server timestamp from user entered time (timestamp)
*/
function userTimeToServerTime($timestamp, $userTZ=null)
{
global $astroConfig;
if (!isset($userTZ)) {
$userTZ = $astroConfig['default_TZ'];
}
$timestamp = $timestamp - (($userTZ - $astroConfig['server_TZ']) * 3600);
return $timestamp;
}
function astro_makepass() {
$makepass = '';
$syllables = array("er","in","tia","wol","fe","pre","vet","jo","nes","al","len","son","cha","ir","ler","bo","ok","tio","nar","sim","ple","bla","ten","toe","cho","co","lat","spe","ak","er","po","co","lor","pen","cil","li","ght","wh","at","the","he","ck","is","mam","bo","no","fi","ve","any","way","pol","iti","cs","ra","dio","sou","rce","sea","rch","pa","per","com","bo","sp","eak","st","fi","rst","gr","oup","boy","ea","gle","tr","ail","bi","ble","brb","pri","dee","kay","en","be","se");
srand((double)microtime()*1000000);
for ($count = 1; $count <= 4; $count++) {
if (rand()%10 == 1) {
$makepass .= sprintf("%0.0f",(rand()%50)+1);
} else {
$makepass .= sprintf("%s",$syllables[rand()%62]);
}
}
return $makepass;
}
/*
* Functions to display dhtml loading image box
*/
function OpenWaitBox()
{
echo "<div id='waitDiv' style='position:absolute;left:40%;top:50%;visibility:hidden;text-align: center;'>
<table cellpadding='6' border='2' class='bg2'>
<tr>
<td align='center'><b><big>" ._FETCHING."</big></b><br /><img src='".ASTRO_URL."/images/await.gif' alt='' /><br />" ._PLEASEWAIT."</td>
</tr>
</table>
</div>
<script type='text/javascript'>
<!--//
var DHTML = (document.getElementById || document.all || document.layers);
function ap_getObj(name) {
if (document.getElementById) {
return document.getElementById(name).style;
} else if (document.all) {
return document.all[name].style;
} else if (document.layers) {
return document.layers[name];
}
}
function ap_showWaitMessage(div,flag) {
if (!DHTML) {
return;
}
var x = ap_getObj(div);
x.visibility = (flag) ? 'visible' : 'hidden';
if (!document.getElementById) {
if (document.layers) {
x.left=280/2;
}
}
return true;
}
ap_showWaitMessage('waitDiv', 1);
//-->
</script>";
}
function CloseWaitBox()
{
echo "<script type='text/javascript'>
<!--//
ap_showWaitMessage('waitDiv', 0);
//-->
</script>
";
}
function checkEmail($email,$antispam = false)
{
if (!$email || !preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i",$email)){
return false;
}
if ($antispam) {
$email = str_replace("@", " at ", $email);
$email = str_replace(".", " dot ", $email);
}
return $email;
}
function formatURL($url)
{
$url = trim($url);
if ($url != '') {
if ((!preg_match("/^http[s]*:\/\//i", $url)) && (!preg_match("/^ftp*:\/\//i", $url)) && (!preg_match("/^ed2k*:\/\//i", $url)) ) {
$url = 'http://'.$url;
}
}
return $url;
}
/*
* Function to display banners in all pages
*/
function showbanner()
{
echo astro_getbanner();
}
/*
* Function to get banner html tags for use in templates
*/
function astro_getbanner()
{
global $astroConfig;
$db =& Database::getInstance();
$bresult = $db->query("SELECT COUNT(*) FROM ".$db->prefix("banner"));
list ($numrows) = $db->fetchRow($bresult);
if ( $numrows > 1 ) {
$numrows = $numrows-1;
mt_srand((double)microtime()*1000000);
$bannum = mt_rand(0, $numrows);
} else {
$bannum = 0;
}
if ( $numrows > 0 ) {
$bresult = $db->query("SELECT * FROM ".$db->prefix("banner"), 1, $bannum);
list ($bid, $cid, $imptotal, $impmade, $clicks, $imageurl, $clickurl, $date, $htmlbanner, $htmlcode) = $db->fetchRow($bresult);
if ($astroConfig['my_ip'] == astro_getenv('REMOTE_ADDR')) {
// EMPTY
} else {
$db->queryF(sprintf("UPDATE %s SET impmade = impmade+1 WHERE bid = %u", $db->prefix("banner"), $bid));
}
/* Check if this impression is the last one and print the banner */
if ( $imptotal == $impmade ) {
$newid = $db->genId($db->prefix("bannerfinish")."_bid_seq");
$sql = sprintf("INSERT INTO %s (bid, cid, impressions, clicks, datestart, dateend) VALUES (%u, %u, %u, %u, %u, %u)", $db->prefix("bannerfinish"), $newid, $cid, $impmade, $clicks, $date, time());
$db->queryF($sql);
$db->queryF(sprintf("DELETE FROM %s WHERE bid = %u", $db->prefix("banner"), $bid));
}
if ($htmlbanner){
$bannerobject = $htmlcode;
}else{
$bannerobject = '<div><a href="'.ASTRO_URL.'/banners.php?op=click&bid='.$bid.'" target="_blank">';
if (stristr($imageurl, '.swf')) {
$bannerobject = $bannerobject
.'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="468" height="60">'
.'<param name=movie value="'.$imageurl.'">'
.'<param name=quality value=high>'
.'<embed src="'.$imageurl.'" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"; type="application/x-shockwave-flash" width="468" height="60">'
.'</embed>'
.'</object>';
} else {
$bannerobject = $bannerobject.'<img src="'.$imageurl.'" alt="" />';
}
$bannerobject = $bannerobject.'</a></div>';
}
return $bannerobject;
}
}
/*
* Function to redirect a user to certain pages
*/
function redirect_header($url, $time = 3, $message = '', $addredirect = true)
{
global $astroConfig, $astroRequestUri, $astroLogger, $astroUserIsAdmin;
if ( preg_match( "/[\\0-\\31]|about:|script:/i", $url) ) {
$url = ASTRO_URL;
}
if (defined('ASTRO_CPFUNC_LOADED')) {
$theme = 'default';
} else {
$theme = $astroConfig['theme_set'];
}
require_once ASTRO_ROOT_PATH.'/class/template.php';
$astroTpl = new AstroTpl();
$astroTpl->assign(array('astro_theme' => $theme, 'astro_imageurl' => ASTRO_THEME_URL.'/'.$theme.'/', 'astro_themecss'=> astro_getcss($theme), 'astro_requesturi' => htmlspecialchars($GLOBALS['astroRequestUri'], ENT_QUOTES), 'astro_sitename' => htmlspecialchars($astroConfig['sitename'], ENT_QUOTES), 'astro_slogan' => htmlspecialchars($astroConfig['slogan'], ENT_QUOTES)));
if ($astroConfig['debug_mode'] == 2 && $astroUserIsAdmin) {
$astroTpl->assign('time', 300);
$astroTpl->assign('astro_logdump', $astroLogger->dumpAll());
} else {
$astroTpl->assign('time', intval($time));
}
if ($addredirect && strstr($url, 'user.php')) {
if (!strstr($url, '?')) {
$url .= '?astro_redirect='.urlencode($astroRequestUri);
} else {
$url .= '&astro_redirect='.urlencode($astroRequestUri);
}
}
if (defined('SID') && (! isset($_COOKIE[session_name()]) || ($astroConfig['use_mysession'] && $astroConfig['session_name'] != '' && !isset($_COOKIE[$astroConfig['session_name']])))) {
if (!strstr($url, '?')) {
$url .= '?' . SID;
} else {
$url .= '&'.SID;
}
}
$url = preg_replace("/&/i", '&', htmlspecialchars($url, ENT_QUOTES));
$astroTpl->assign('url', $url);
$message = trim($message) != '' ? $message : _TAKINGBACK;
$astroTpl->assign('message', $message);
$astroTpl->assign('lang_ifnotreload', sprintf(_IFNOTRELOAD, $url));
$astroTpl->display('db:system_redirect.html');
exit();
}
function astro_getenv($key)
{
$ret = '';
//$phpv = explode(".", PHP_VERSION);
//if ($phpv[0] > 3 && $phpv[1] > 0) {
// $ret = isset($_SERVER[$key]) ? $_SERVER[$key] : $_ENV[$key];
//} else {
$ret = isset($_SERVER[$key]) ? $_SERVER[$key] : $_ENV[$key];
//}
return $ret;
}
/*
* This function is deprecated. Do not use!
*/
function getTheme()
{
return $GLOBALS['astroConfig']['theme_set'];
}
/*
* Function to get css file for a certain theme
* This function will be deprecated.
*/
function getcss($theme = '')
{
return astro_getcss($theme);
}
/*
* Function to get css file for a certain themeset
*/
function astro_getcss($theme = '')
{
if ($theme == '') {
$theme = $GLOBALS['astroConfig']['theme_set'];
}
$uagent = astro_getenv('HTTP_USER_AGENT');
if (stristr($uagent, 'mac')) {
$str_css = 'styleMAC.css';
} elseif (preg_match("/MSIE ([0-9]\.[0-9]{1,2})/i", $uagent)) {
$str_css = 'style.css';
} else {
$str_css = 'styleNN.css';
}
if (is_dir(ASTRO_THEME_PATH.'/'.$theme)) {
if (file_exists(ASTRO_THEME_PATH.'/'.$theme.'/'.$str_css)) {
return ASTRO_THEME_URL.'/'.$theme.'/'.$str_css;
} elseif (file_exists(ASTRO_THEME_PATH.'/'.$theme.'/style.css')) {
return ASTRO_THEME_URL.'/'.$theme.'/style.css';
}
}
return '';
}
function &getMailer()
{
global $astroConfig;
include_once ASTRO_ROOT_PATH."/class/astromailer.php";
if ( file_exists(ASTRO_ROOT_PATH."/language/".$astroConfig['language']."/astromailerlocal.php") ) {
include_once ASTRO_ROOT_PATH."/language/".$astroConfig['language']."/astromailerlocal.php";
if ( class_exists("AstroMailerLocal") ) {
return new AstroMailerLocal();
}
}
return new AstroMailer();
}
function &astro_gethandler($name, $optional = false )
{
static $handlers;
$name = strtolower(trim($name));
if (!isset($handlers[$name])) {
if ( file_exists( $hnd_file = ASTRO_ROOT_PATH.'/include/'.$name.'.php' ) ) {
require_once $hnd_file;
}
$class = 'Astro'.ucfirst($name).'Handler';
if (class_exists($class)) {
$handlers[$name] = new $class($GLOBALS['astroDB']);
}
}
if (!isset($handlers[$name]) && !$optional ) {
trigger_error('Class <b>'.$class.'</b> does not exist<br />Handler Name: '.$name, E_USER_ERROR);
}
return isset($handlers[$name]) ? $handlers[$name] : false;
}
function &astro_getmodulehandler($name = null, $module_dir = null, $optional = false)
{
static $handlers;
// if $module_dir is not specified
if (!isset($module_dir)) {
//if a module is loaded
if (isset($GLOBALS['astroModule']) && is_object($GLOBALS['astroModule'])) {
$module_dir = $GLOBALS['astroModule']->getVar('dirname');
} else {
trigger_error('No Module is loaded', E_USER_ERROR);
}
} else {
$module_dir = trim($module_dir);
}
$name = (!isset($name)) ? $module_dir : trim($name);
if (!isset($handlers[$module_dir][$name])) {
if ( file_exists( $hnd_file = ASTRO_ROOT_PATH . "/modules/{$module_dir}/class/{$name}.php" ) ) {
include_once $hnd_file;
}
$class = ucfirst(strtolower($module_dir)).ucfirst($name).'Handler';
if (class_exists($class)) {
$handlers[$module_dir][$name] = new $class($GLOBALS['astroDB']);
}
}
if (!isset($handlers[$module_dir][$name]) && !$optional) {
trigger_error('Handler does not exist<br />Module: '.$module_dir.'<br />Name: '.$name, E_USER_ERROR);
}
return isset($handlers[$module_dir][$name]) ? $handlers[$module_dir][$name] : false;
}
function astro_getrank($rank_id =0, $posts = 0)
{
$db =& Database::getInstance();
$myts =& MyTextSanitizer::getInstance();
$rank_id = intval($rank_id);
if ($rank_id != 0) {
$sql = "SELECT rank_title AS title, rank_image AS image FROM ".$db->prefix('ranks')." WHERE rank_id = ".$rank_id;
} else {
$sql = "SELECT rank_title AS title, rank_image AS image FROM ".$db->prefix('ranks')." WHERE rank_min <= ".$posts." AND rank_max >= ".$posts." AND rank_special = 0";
}
$rank = $db->fetchArray($db->query($sql));
$rank['title'] = $myts->makeTboxData4Show($rank['title']);
$rank['id'] = $rank_id;
return $rank;
}
/**
* Returns the portion of string specified by the start and length parameters. If $trimmarker is supplied, it is appended to the return string. This function works fine with multi-byte characters if mb_* functions exist on the server.
*
* @param string $str
* @param int $start
* @param int $length
* @param string $trimmarker
*
* @return string
*/
function astro_substr($str, $start, $length, $trimmarker = '...')
{
if ( !ASTRO_USE_MULTIBYTES ) {
return ( strlen($str) - $start <= $length ) ? substr( $str, $start, $length ) : substr( $str, $start, $length - strlen($trimmarker) ) . $trimmarker;
}
if (function_exists('mb_internal_encoding') && @mb_internal_encoding(_CHARSET)) {
$str2 = mb_strcut( $str , $start , $length - strlen( $trimmarker ) );
return $str2 . ( mb_strlen($str)!=mb_strlen($str2) ? $trimmarker : '' );
}
// phppp patch
$DEP_CHAR=127;
$pos_st=0;
$action = false;
for ( $pos_i = 0; $pos_i < strlen($str); $pos_i++ ) {
if ( ord( substr( $str, $pos_i, 1) ) > 127 ) {
$pos_i++;
}
if ($pos_i<=$start) {
$pos_st=$pos_i;
}
if ($pos_i>=$pos_st+$length) {
$action = true;
break;
}
}
return ($action) ? substr( $str, $pos_st, $pos_i - $pos_st - strlen($trimmarker) ) . $trimmarker : $str;
}
// RMV-NOTIFY
// ################ Notification Helper Functions ##################
// We want to be able to delete by module, by user, or by item.
// How do we specify this??
function astro_notification_deletebymodule ($module_id)
{
$notification_handler =& astro_gethandler('notification');
return $notification_handler->unsubscribeByModule ($module_id);
}
function astro_notification_deletebyuser ($user_id)
{
$notification_handler =& astro_gethandler('notification');
return $notification_handler->unsubscribeByUser ($user_id);
}
function astro_notification_deletebyitem ($module_id, $category, $item_id)
{
$notification_handler =& astro_gethandler('notification');
return $notification_handler->unsubscribeByItem ($module_id, $category, $item_id);
}
// ################### Comment helper functions ####################
function astro_comment_count($module_id, $item_id = null)
{
$comment_handler =& astro_gethandler('comment');
$criteria = new CriteriaCompo(new Criteria('com_modid', intval($module_id)));
if (isset($item_id)) {
$criteria->add(new Criteria('com_itemid', intval($item_id)));
}
return $comment_handler->getCount($criteria);
}
function astro_comment_delete($module_id, $item_id)
{
if (intval($module_id) > 0 && intval($item_id) > 0) {
$comment_handler =& astro_gethandler('comment');
$comments =& $comment_handler->getByItemId($module_id, $item_id);
if (is_array($comments)) {
$count = count($comments);
$deleted_num = array();
for ($i = 0; $i < $count; $i++) {
if (false != $comment_handler->delete($comments[$i])) {
// store poster ID and deleted post number into array for later use
$poster_id = $comments[$i]->getVar('com_uid');
if ($poster_id != 0) {
$deleted_num[$poster_id] = !isset($deleted_num[$poster_id]) ? 1 : ($deleted_num[$poster_id] + 1);
}
}
}
$member_handler =& astro_gethandler('member');
foreach ($deleted_num as $user_id => $post_num) {
// update user posts
$com_poster = $member_handler->getUser($user_id);
if (is_object($com_poster)) {
$member_handler->updateUserByField($com_poster, 'posts', $com_poster->getVar('posts') - $post_num);
}
}
return true;
}
}
return false;
}
// ################ Group Permission Helper Functions ##################
function astro_groupperm_deletebymoditem($module_id, $perm_name, $item_id = null)
{
// do not allow system permissions to be deleted
if (intval($module_id) <= 1) {
return false;
}
$gperm_handler =& astro_gethandler('groupperm');
return $gperm_handler->deleteByModule($module_id, $perm_name, $item_id);
}
function &astro_utf8_encode(&$text)
{
if (ASTRO_USE_MULTIBYTES == 1) {
if (function_exists('mb_convert_encoding')) {
return mb_convert_encoding($text, 'UTF-8', 'auto');
}
return $text;
}
return utf8_encode($text);
}
function &astro_convert_encoding(&$text)
{
return astro_utf8_encode($text);
}
function astro_getLinkedUnameFromId($userid)
{
$userid = intval($userid);
if ($userid > 0) {
$member_handler =& astro_gethandler('member');
$user =& $member_handler->getUser($userid);
if (is_object($user)) {
$linkeduser = '<a href="'.ASTRO_URL.'/userinfo.php?uid='.$userid.'">'. $user->getVar('uname').'</a>';
return $linkeduser;
}
}
return $GLOBALS['astroConfig']['anonymous'];
}
function astro_trim($text)
{
if (function_exists('astro_language_trim')) {
return astro_language_trim($text);
}
return trim($text);
}
?>