* FusionForge miscellaneous utils
*
* Copyright 1999-2001, VA Linux Systems, Inc.
+ * Copyright 2009, Roland Mas
*
* This file is part of FusionForge.
*
* USA
*/
+/**
+ * is_utf8($string) - utf-8 detection
+ *
+ * From http://www.php.net/manual/en/function.mb-detect-encoding.php#85294
+ */
+function is_utf8($str) {
+ $c=0; $b=0;
+ $bits=0;
+ $len=strlen($str);
+ for($i=0; $i<$len; $i++){
+ $c=ord($str[$i]);
+ if($c > 128){
+ if(($c >= 254)) return false;
+ elseif($c >= 252) $bits=6;
+ elseif($c >= 248) $bits=5;
+ elseif($c >= 240) $bits=4;
+ elseif($c >= 224) $bits=3;
+ elseif($c >= 192) $bits=2;
+ else return false;
+ if(($i+$bits) > $len) return false;
+ while($bits > 1){
+ $i++;
+ $b=ord($str[$i]);
+ if($b < 128 || $b > 191) return false;
+ $bits--;
+ }
+ }
+ }
+ return true;
+}
+
/**
* removeCRLF() - remove any Carriage Return-Line Feed from a string.
* That function is useful to remove the possibility of a CRLF Injection when sending mail
$body2 .= "\nBCC: $BCC";
}
$send_html_email?$type="html":$type="plain";
- $body2 .= "\nSubject: ".util_encode_mimeheader($subject, $charset).
+ $body2 .= "\n".util_encode_mimeheader("Subject", $subject, $charset).
"\nContent-type: text/$type; charset=$charset".
"\n\n".
util_convert_body($body, $charset);
$sys_sendmail_path="/usr/sbin/sendmail";
}
- exec ("/bin/echo ". util_prep_string_for_sendmail($body2) .
- " | ".$sys_sendmail_path." -f'$from' -t -i > /dev/null 2>&1 &");
- // WARNING : popen commented code probably brought some trouble, we will use the pipe method as we were before
- /*if (!$handle = popen($sys_sendmail_path." -f'$from' -t -i", "w")) {
- echo "<p>Error: cannot run '$sys_sendmail_path' - mail not sent</p>\n";
- } else {
- fwrite($handle, util_prep_string_for_sendmail($body2));
- pclose($handle);
- }*/
+ $handle = popen($sys_sendmail_path." -f'$from' -t -i", 'w');
+ fwrite ($handle, $body2);
+ pclose($handle);
}
/**
/**
* util_encode_mimeheader() - Encode mimeheader
*
+ * @param string The name of the header (e.g. "Subject")
* @param string The email subject
* @param string The converting charset (like ISO-2022-JP)
* @return string The MIME encoded subject
*
*/
-function util_encode_mimeheader($str,$charset) {
+function util_encode_mimeheader($headername,$str,$charset) {
+ if (function_exists('mb_internal_encoding') &&
+ function_exists('mb_encode_mimeheader')) {
+ $x = mb_internal_encoding();
+ mb_internal_encoding("UTF-8");
+ $y = mb_encode_mimeheader($headername . ": " . $str,
+ $charset, "Q");
+ mb_internal_encoding($x);
+ return $y;
+ }
+
if (!function_exists('mb_convert_encoding')) {
- return $str;
+ return $headername . ": " . $str;
}
- return "=?".$charset."?B?".
+ return $headername . ": " . "=?".$charset."?B?".
base64_encode(mb_convert_encoding(
$str,$charset,"UTF-8")).
"?=";
if (count($id_arr) < 1) {
} else {
- $res=db_query("SELECT user_id, jabber_address,email,jabber_only
- FROM users WHERE user_id IN (". implode($id_arr,',') .")");
- $rows=db_numrows($res);
+ $res = db_query_params ('SELECT user_id,jabber_address,email,jabber_only FROM users WHERE user_id = ANY ($1)',
+ array (db_int_array_to_any_clause ($id_arr))) ;
+ $rows = db_numrows($res) ;
for ($i=0; $i<$rows; $i++) {
if (db_result($res, $i, 'user_id') == 100) {
*/
function util_is_valid_filename ($file) {
//bad char test
- $invalidchars = eregi_replace("[-A-Z0-9+_\.]","",$file);
+ $invalidchars = eregi_replace("[-A-Z0-9+_\. ]","",$file);
if (!empty($invalidchars)) {
return false;
return false;
}
+ ob_start () ;
while (!feof($handle)) {
- $buffer = fread($handle, $chunksize);
- echo $buffer;
- if ($returnBytes) {
- $byteCounter += strlen($buffer);
- }
+ $buffer = fread($handle, $chunksize);
+ echo $buffer;
+ ob_flush() ;
+ flush () ;
+ if ($returnBytes) {
+ $byteCounter += strlen($buffer);
+ }
}
+ ob_end_flush () ;
$status = fclose($handle);
if ($returnBytes && $status) {
return $byteCounter; // return num. bytes delivered like readfile() does.
return !preg_match('/[^\\/]/',$dir);
}
+/**
+ * util_strip_accents() - Remove accents from given text.
+ * @param string Text
+ * @return string
+ */
+function util_strip_accents($text) {
+ $find = utf8_decode($text);
+ $find = strtr($find,
+ utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ'),
+ 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
+ return utf8_encode($find);
+}
+
+/**
+ * Constructs the forge's URL prefix out of $GLOBALS['sys_urlprefix']
+ *
+ * @return string
+ */
+function normalized_urlprefix () {
+ $prefix = $GLOBALS['sys_urlprefix'] ;
+ $prefix = ereg_replace ("^/", "", $prefix) ;
+ $prefix = ereg_replace ("/$", "", $prefix) ;
+ $prefix = "/$prefix/" ;
+ if ($prefix == '//')
+ $prefix = '/' ;
+ return $prefix ;
+}
+
+/**
+ * Construct full URL from a relative path
+ *
+ * @param string $path
+ * @return string URL
+ */
function util_make_url ($path) {
if ($GLOBALS['sys_use_ssl'])
$url = "https://" ;
$url = "http://" ;
$url .= $GLOBALS['sys_default_domain'] ;
- $url .= $GLOBALS['sys_urlprefix'] ;
- $url .= "/" ;
- $path = ereg_replace ("^/", "", $path) ;
- $url .= $path ;
+ $url .= util_make_uri ($path) ;
return $url ;
}
-function util_make_link ($path, $text, $extra_params=false) {
+/**
+ * Construct proper (relative) URI (prepending prefix)
+ *
+ * @param string $path
+ * @return string URI
+ */
+function util_make_uri ($path) {
+ $path = ereg_replace ("^/", "", $path) ;
+ $uri = normalized_urlprefix () ;
+ $uri .= $path ;
+ return $uri ;
+}
+
+function util_make_link ($path, $text, $extra_params=false, $absolute=false) {
$ep = '' ;
if (is_array($extra_params)) {
foreach ($extra_params as $key => $value) {
$ep .= "$key=\"$value\" ";
}
}
- return '<a ' . $ep . 'href="' . util_make_url ($path) . '">' . $text . '</a>' ;
+ if ($absolute) {
+ return '<a ' . $ep . 'href="' . $path . '">' . $text . '</a>' ;
+ } else {
+ return '<a ' . $ep . 'href="' . util_make_url ($path) . '">' . $text . '</a>' ;
+ }
}
+/**
+ * Create an HTML link to a user's profile page
+ *
+ * @param string $username
+ * @param int $user_id
+ * @param string $text
+ * @return string
+ */
function util_make_link_u ($username, $user_id,$text) {
return '<a href="' . util_make_url_u ($username, $user_id) . '">' . $text . '</a>' ;
}
+/**
+ * Create URL for user's profile page
+ *
+ * @param string $username
+ * @param int $user_id
+ * @return string URL
+ */
function util_make_url_u ($username, $user_id) {
if (isset ($GLOBALS['sys_noforcetype']) && $GLOBALS['sys_noforcetype']) {
return util_make_url ("/developer/?user_id=$user_id");
}
}
+/**
+ * Create a HTML link to a project's page
+ * @param string $groupame
+ * @param int $group_id
+ * @param string $text
+ * @return string
+ */
function util_make_link_g ($groupame, $group_id,$text) {
return '<a href="' . util_make_url_g ($groupame, $group_id) . '">' . $text . '</a>' ;
}
+/**
+ * Create URL for a project's page
+ *
+ * @param string $groupame
+ * @param int $group_id
+ * @return string
+ */
function util_make_url_g ($groupame, $group_id) {
if (isset ($GLOBALS['sys_noforcetype']) && $GLOBALS['sys_noforcetype']) {
return util_make_url ("/project/?group_id=$group_id");
}
}
+function util_ensure_value_in_set ($value, $set) {
+ if (in_array ($value, $set)) {
+ return $value ;
+ } else {
+ return $set[0] ;
+ }
+}
+
+function check_email_available($group, $email, &$response) {
+ // Check if a mailing list with same name already exists
+ $mlFactory = new MailingListFactory($group);
+ if (!$mlFactory || !is_object($mlFactory) || $mlFactory->isError()) {
+ $response .= $mlFactory->getErrorMessage();
+ return false;
+ }
+ $mlArray =& $mlFactory->getMailingLists();
+ if ($mlFactory->isError()) {
+ $response .= $mlFactory->getErrorMessage();
+ return false;
+ }
+ for ($j = 0; $j < count($mlArray); $j++) {
+ $currentList =& $mlArray[$j];
+ if ($email == $currentList->getName()) {
+ $response .= _('Error: a mailing list with the same email address already exists.');
+ return false;
+ }
+ }
+
+ // Check if a forum with same name already exists
+ $ff = new ForumFactory($group);
+ if (!$ff || !is_object($ff) || $ff->isError()) {
+ $response .= $ff->getErrorMessage();
+ return false;
+ }
+ $farr =& $ff->getForums();
+ $prefix = $group->getUnixName() . '-';
+ for ($j = 0; $j < count($farr); $j++) {
+ if (is_object($farr[$j])) {
+ if ($email == $prefix . $farr[$j]->getName()) {
+ $response .= _('Error: a forum with the same email address already exists.');
+ return false;
+ }
+ }
+ }
+
+ // Email is available
+ return true;
+}
+
// Local Variables:
// mode: php
// c-file-style: "bsd"