Hey, Would you like to work at Home ?? Just click here No need to pay, just register free and activate your account and get data Entry Work at your Home.

Thursday, December 6, 2007

util.inc.php

/*
+----------------------------------------------------------------------+
| BasiliX - Copyright (C) 2000-2002 Murat Arslan |
| Contributions from: |
| Mike Peters |
+----------------------------------------------------------------------+
*/

// This file includes several useful functions..
// -----------------------------------------------------------------------

// You may want to set this, if when attaching a file to the message the connection
// hangs up due to time out.
set_time_limit(0);

// get an array containing some configuration details
function get_conf()
{
$conf = array();
// Should we use javascript?
if($_GET['is_js'])
{
$conf['is_js'] = $_GET['is_js'];
}
else if($_POST['is_js']){
$conf['is_js'] = $_POST['is_js'];
}
else {
$conf['is_js'] = 0;
}
// Are we using ssl?
if($_GET['is_ssl'])
{
$conf['is_ssl'] = $_GET['is_ssl'];
}
else if($_POST['is_ssl']){
$conf['is_ssl'] = $_POST['is_ssl'];
}
else {
$conf['is_ssl'] = 0;
}
// All domains?
if($_GET['is_alldomains'])
{
$conf['is_alldomains'] = $_GET['is_alldomains'];
}
else if($_POST['is_alldomains']){
$conf['is_alldomains'] = $_POST['is_alldomains'];
}
else {
$conf['is_alldomains'] = 0;
}
return $conf;
}

function url_redirect($url = "") {
global $BSX_BASEHREF;
$conf = get_conf();
$is_ssl = $conf['is_ssl'];
$is_js = $conf['is_js'];
$is_alldomains = $conf['is_alldomains'];
$SESSID = $_COOKIE['BSX_SESSID'];

if($url == "") $url = $BSX_BASEHREF;
if($is_ssl || $GLOBALS["SERVER_PORT"] == 443) {
if(eregi("\?", $url))
$url .= "&is_ssl=" . ($is_ssl > 0 ? $is_ssl : 1);
else
$url .= "?is_ssl=" . ($is_ssl > 0 ? $is_ssl : 1);
$url = ereg_replace("http://", "https://", $url);
}
if($is_js) {
if(eregi("\?", $url))
$url .= "&is_js=" . $is_js;
else
$url .= "?is_js=" . $is_js;
}
if($SESSID) {
if(eregi("\?", $url))
$url .= "&SESSID=" . $SESSID;
else
$url .= "?SESSID=" . $SESSID;
}
if($is_alldomains) {
if(eregi("\?", $url))
$url .= "&is_alldomains=" . $is_alldomains;
else
$url .= "?is_alldomains=" . $is_alldomains;
}
Header("Location: " . $url);
exit();
}

// gets the array index of a domain
function domain2index($domain) {
global $bsx_domains, $bsx_domains_cnt;
$domain1 = strtolower($domain);
for($i = 0 ; $i < $bsx_domains_cnt ; $i++) {
$domain2 = strtolower($bsx_domains[$i]["domain"]);
if($domain1 == $domain2) return $i;
}
return -1;
}


// gets the domain name of an index
function index2domain($indx) {
global $bsx_domains;
$domain = $bsx_domains[$indx]["domain"];
if($domain == "") return false;
return $domain;
}


// Turkce karakterler (turkish characters)
// tr -> us
// 199 -> 67
// 208 -> 71
// 214 -> 79
// 220 -> 85
// 221 -> 73
// 222 -> 83
// 231 -> 99
// 240 -> 103
// 246 -> 111
// 252 -> 117
// 253 -> 105
// 254 -> 115

function make_readable($name) {
$newname = "";
for($i = 0 ; $i < strlen($name) ; $i++) {
$z = ord($name[$i]);
switch($z) {
case 199:
$newname .= chr(67);
break;
case 208:
$newname .= chr(71);
break;
case 214:
$newname .= chr(79);
break;
case 220:
$newname .= chr(85);
break;
case 221:
$newname .= chr(73);
break;
case 222:
$newname .= chr(83);
break;
case 231:
$newname .= chr(99);
break;
case 240:
$newname .= chr(103);
break;
case 246:
$newname .= chr(111);
break;
case 252:
$newname .= chr(117);
break;
case 253:
$newname .= chr(105);
break;
case 254:
$newname .= chr(115);
break;
default:
$newname .= chr($z);
}
}
// we converted the tr chars to us chars

// now we need to get rid of unreadable chars
// i.e we allow: A-Z, a-z, 0-9 and blank
$name2 = $newname;
$newname = "";
for($i = 0 ; $i < strlen($name2) ; $i++) {
$z = ord($name2[$i]);
if($z == 32) $newname .= " ";
if(($z < 48) || (($z > 57) && ($z < 65)) ||
(($z > 90) && ($z < 97)) || ($z > 122)) continue;
$newname .= $name2[$i];
}
return $newname;
}

// convert the size in bytes to kB/mB
function convert_size($byte) {
if($byte == 0) // no need to calculate
return "0kB";
if($byte < 1000) // i guess users dont want to see the size like 1020 bytes
return "$byte" . " B";
$rem = $byte / 1024.0;
$kb = sprintf("%.1f", $rem);
$remkb = sprintf("%d", $rem);
if($remkb < 1000) // kilobytes is ok
return "$kb" . "kB";
$rem2 = $remkb / 1024.0;
$mb = sprintf("%.1f", $rem2);
return "$mb" . "mB"; // finally megabytes
}

// simple decrypt of a string
function decode_strip($str) {
$str2 = stripslashes(urldecode($str));
return trans_tr($str2);
}

function decode_mime($string) {
if(eregi("=?([A-Z,0-9,-]+)?([A-Z,0-9,-]+)?([A-Z,0-9,-,=,_]+)?=", $string)) {
$coded_strings = explode('=?', $string);
$counter = 1;
$string = $coded_strings[0];
while($counter < count($coded_strings)) {
$elements = explode('?', $coded_strings[$counter]);
if(eregi("Q", $elements[1])) {
$elements[2] = str_replace('_', ' ', $elements[2]);
$elements[2] = eregi_replace("=([A-F,0-9]{2})", "%\\1", $elements[2]);
$string .= urldecode($elements[2]);
} else {
$elements[2] = str_replace('=', '', $elements[2]);
if ($elements[2]) { $string .= base64_decode($elements[2]);
}
}
if(isset($elements[3]) && $elements[3] != '') {
$elements[3] = ereg_replace("^=", '', $elements[3]);
$string .= $elements[3];
}
$string .= " ";
$counter++;
}
}
return $string;
}

function handle_emails($str) {
global $BSX_BASEHREF, $BSX_LAUNCHER;
$SESSID = $_COOKIE['BSX_SESSID'];
$conf = get_conf();
$is_ssl = $conf['is_ssl'];
$is_js = $conf['is_js'];

$url = $BSX_BASEHREF . "/" . $BSX_LAUNCHER . "?RequestID=CMPSNEW&premail=-1";
if($SESSID) $url .= "&SESSID=$SESSID";
if($is_js) $url .= "&is_js=$is_js";
if($is_ssl || $GLOBALS["SERVER_PORT"] == 443) $url .= "&is_ssl=" . $is_ssl;
$url .= "&cmps_to";
return(ereg_replace("([A-Za-z0-9._-]+\@[[:alnum:].[a-zA-Z0-9_-]+[a-zA-Z]+)",
"<a href='$url=\\1'>\\1< /a>", $str));
}
function handle_urls($str) {
// Replaced with handle_links
return handle_links($str);
}
function handle_links($str) {
// Slip in a target='_new' to existing tags
$str = preg_replace("/(?<=<a href=\')((news|(ht|f)tp(s?):\/\/).*?)[\'>]/ie", "'\\1'.'\' target=\'_new\' '", $str);
// Make links of text mail, news, ftp, ftps, http and https addresses
$str = handle_emails($str);
$str = preg_replace("/(?<!<a href=\')((news|(ht|f)tp(s?):\/\/)[^\s]*)[^\'>]/ie", "'<a href=\''.'\\1'.'\' target=\'_new\' >'.'\\1'.'</a>'", $str);
return $str;
}

function put_ahref($href, $name, $linkid = "", $title = "") {
$conf = get_conf();
$is_ssl = $conf['is_ssl'];
$is_js = $conf['is_js'];

$url = $GLOBALS["BSX_BASEHREF"] . "/" . $GLOBALS["BSX_LAUNCHER"] . "?" . $href;
if($GLOBALS["SESSID"]) $url .= "&SESSID=" . $GLOBALS["SESSID"];
if($is_js) $url .= "&is_js=" . $is_js;
if($is_ssl || $GLOBALS["SERVER_PORT"] == 443) $url .= "&is_ssl=" . $is_ssl;
if($GLOBALS["expand_folders"]) $url .= "&expand_folders=1";

$output = "<a href=\"$url\"";
if($linkid != "") $output .= " id=\"$linkid\"";
if($title != "") $output .= " title=\"" . htmlspecialchars($title) . "\"";

$output .= ">$name</a>";
echo $output;
}

function nbsp($str) {
if(is_string($str)) {
if(empty($str)) return " ";
return " $str ";
}
return " $str ";
}

function start_form($name, $extra = "") {
global $BSX_BASEHREF, $BSX_LAUNCHER;
global $is_ssl;

$posturl = $BSX_BASEHREF . "/" . $BSX_LAUNCHER;
echo "<form name=\"$name\" method=\"POST\" action=\"$posturl\" $extra>\n";
}

function stop_form() {
global $is_nocookie, $is_alldomains;
$SESSID = $_COOKIE['BSX_SESSID'];
$conf = get_conf();
$is_ssl = $conf['is_ssl'];
$is_js = $conf['is_js'];
$is_alldomains = $conf['is_alldomains'];

if($SESSID)
echo "<input type=\"hidden\" name=\"SESSID\" value=\"$SESSID\">";
if($is_js)
echo "<input type=\"hidden\" name=\"is_js\" value=\"$is_js\">";
if($is_ssl | $GLOBALS["SERVER_PORT"] == "443")
echo "<input type=\"hidden\" name=\"is_ssl\" value=\"$is_ssl\">";
if($is_nocookie)
echo "<input type=\"hidden\" name=\"is_nocookie\" value=\"$is_nocookie\">";
if($is_alldomains)
echo "<input type=\"hidden\" name=\"is_alldomains\" value=\"$is_alldomains\">";
echo "</form>\n";
}

// push the pages of the mbox
function push_pages($nmsgs) {
global $sort, $fromMsg, $fromPage, $lng, $mbox, $nextPage, $prevPage;
global $pluspsize;
// TODO: get user set using a function
$user_set = $_COOKIE['user_set'];
$fromPage = $_GET['fromPage'];
$fromMsg = $_GET['fromMsg'];
$nextPage = $_GET['nextPage'];
$prevPage = $_GET['prevPage'];

// print the More pages stuff
// --
// well, this is not necessary for most of us, but hey, may be we use this feature?
// --
// this routine is written just for the people who has hundreds (may be thousands) of messages
// staying just in one mailbox.
// --
// kinda complicated stuff but it works.
// --
$pages = ceil($nmsgs / $user_set["psize"]);
$pgcnt = 0;
if($pages != 1) { // if we have pages
echo $lng->p(228);
if($fromPage) {
$prevPage = $fromPage - 10; // if we are not on the firstPage
if($fromPage * $user_set["psize"] == $fromMsg) $prevMsg = $fromMsg - $user_set["psize"]; // if this page is x1 (e.g 21, 31, 41, etc)
else $prevMsg = $fromMsg - (10 * $user_set["psize"]); // if this page is x1 make it (x-1)1 (e.g 23 -> 13, 45 -> 35, etc)
put_ahref("RequestID=MBOXLST&mbox=" . urlencode($mbox) . "&sort=" . $sort . "&fromMsg=" . $prevMsg . "&fromPage=" . $prevPage, " « ");
} else $fromPage = 0;
for($i = $fromPage ; $i < $pages ; $i++, $pgcnt++) {
$this_from = $i * $user_set["psize"];
if($pgcnt == 10) {
$nextPage = $i;
if(($nextPage - 1) * $user_set["psize"] == $fromMsg) $nextMsg = $fromMsg + $user_set["psize"];
else {
$nextMsg = $fromMsg + (10 * $user_set["psize"]);
if($nextMsg > $nmsgs) // what if the next page does not exist?
$nextMsg = $nextPage * $user_set["psize"]; // if so, make the next page the first page of the next 10
}
put_ahref("RequestID=MBOXLST&mbox=" . urlencode($mbox) . "&sort=" . $sort . "&fromMsg=" . $nextMsg . "&fromPage=" . $nextPage, " »");
break; // not user set (max 10 "more pages")
}
$j = $i + 1;
if($pgcnt) echo " <small>·</small> ";
if($this_from != $fromMsg)
put_ahref("RequestID=MBOXLST&mbox=" . urlencode($mbox) . "&sort=" . $sort . "&fromMsg=" . $this_from . "&fromPage=" . $fromPage, $j);
else echo "<b>$j </b>";
}
}

// attach the nextPage stuff to the Previous|XXX|Next.
if((($fromPage + 1) * $user_set["psize"]) == $pluspsize) $prevPage = $fromPage - 10;
else $prevPage = $fromPage;
if((($fromPage + 10) * $user_set["psize"]) == $pluspsize) $nextPage = $fromPage + 10;
else $nextPage = $fromPage;
}

function push_errinfo() {
global $err_msg, $info_msg;
if(!empty($err_msg)) {
echo "";
echo "\n";
echo "\n";
echo "
 $err_msg 
";
echo "\n";
} else if(!empty($info_msg)) {
echo "";
echo "\n";
echo "\n";
echo "
 $info_msg 
";
echo "\n";
}
}

function push_pagehdr() {
$m = $GLOBALS["pagehdr_msg"];
$u = $GLOBALS["username"];
$d = $GLOBALS["domain_name"];
echo "";
echo "
<b>";
echo $m . ":< /b> " . $u . "@" . $d;
echo "
\n";
}

// select box for settings
function push_langs() {
global $bsx_lang;
global $set_lang;

echo "<select name='set_lang' size='1'>\n";
for($i = 0 ; $i < count($bsx_lang) ; $i++) {
echo "\n";
}
echo "</select>\n";
}

// build the js array for theme preview
function push_jsthemes() {
global $bsx_theme;

echo "\n";
}

// select box for themes
function push_themes() {
global $bsx_theme, $set_theme, $theme_stats;
global $BSX_BASEHREF;

echo "<select name='set_theme' size='1' onChange='javascript:previewTheme(\"$BSX_BASEHREF\", this);'>\n";
for($i = 0 ; $i < count($bsx_theme) ; $i++) {
if(!$bsx_theme[$i]["active"]) continue;
echo "\n";
else
echo ">" . $bsx_theme[$i]["desc"] . "\n";
}
echo "</select>\n";
}

// if the server basilix runs on has lots of virtual domains, and if you want their
// users use this webmail system, they need to select their domain from the select box
// and login. so if the user types "abc.com" as an address which is one of the virtual domains
// hosted on that machine, we'll push him a login form not selectable but abc.com instead.
function check_desired_domain() {
global $bsx_domains, $bsx_domains_cnt;

$http_host = strtolower($GLOBALS["HTTP_HOST"]);
for($i = 0 ; $i < $bsx_domains_cnt ; $i++) {
if(strtolower($bsx_domains[$i]["domain"]) == $http_host) return $i;
}
return -1;
}

// safe exec
function sexec($cmd) {
// cleanup the cmd to prevent running of shell commands
// on exec() call.
$cmd = eregi_replace("[^-A-Za-z0-9_/\. ]", "", $cmd);
@exec($cmd);
}

// correct strings (if they have "../")
function sstrings() {
$okg = 0;
while(list($gk, $gv) = each($GLOBALS)) {
if($okg || $gk == "PHP_SELF") {
if(is_string($GLOBALS[$gk])) {
$GLOBALS[$gk] = ereg_replace("\.\./", "", $gv);
}
$okg = 1;

}
}
}

// correct turkish chars wrt the translation table
// @TODO Is this needed if we are using encoding correctly? It seems like a
// lot of overhead for all but a limited number of users.
function trans_tr($str) {
$trans = array(
"ı" => "",
"ğ" => "",
"ş" => "",
"Ğ" => "",
"Ş" => "",
"İ" => ""
);
return strtr($str, $trans);
}

// Remove unwanted html tags
function removeEvilTags($source)
{
$allowedTags = '< h1><b><br><br /><i><a><ul><li> < pre>
< blockquote>< img>';
//$source = nl2br($source);
$source = strip_tags($source, $allowedTags);
return preg_replace('/<(.*?)>/ie', "'<'.removeEvilAttributes('\\1').'>'", $source);
}

// Remove unwanted attributes from the allowed tags
function removeEvilAttributes($tagSource)
{
$stripAttrib = 'javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|'.
'onmousemove|onmouseout|onkeypress|onkeydown|onkeyup';
return stripslashes(preg_replace("/$stripAttrib/i", 'forbidden', $tagSource));
}
sstrings();
?>

No comments:

Your Ad Here