[evolvis-commits] r12159: Fixed problems with emails being sent in the language of the user currently↵ connected on the web interface rather than in the language of their =?UTF-8?Q?=20intended=E2=86=B5=20recipien?==?UTF-8?Q?t?=. The correct language is now chosen for project submissions an =?UTF-8?Q?d=E2=86=B5=20group=20join=20submi?==?UTF-8?Q?ssions?=. ↵

mirabilos at evolvis.org mirabilos at evolvis.org
Thu Feb 24 18:41:48 CET 2011


Author: mirabilos
Date: 2011-02-24 18:41:48 +0100 (Thu, 24 Feb 2011)
New Revision: 12159

Modified:
   trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog
   trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class.php
   trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GroupJoinRequest.class.php
   trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/BaseLanguage.class.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php
   trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php
Log:
Fixed problems with emails being sent in the language of the user currently
connected on the web interface rather than in the language of their intended
recipient.  The correct language is now chosen for project submissions and
group join submissions.


Modified: trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/ChangeLog	2011-02-24 17:41:48 UTC (rev 12159)
@@ -1,3 +1,21 @@
+2007-11-07  Roland Mas  <lolando at debian.org>
+
+	* common/include/GroupJoinRequest.class.php: New
+	send_accept_mail() function.
+	* www/project/admin/index.php: Use it.
+
+2007-11-06  Roland Mas  <lolando at debian.org>
+
+	* www/include/BaseLanguage.class.php: Added
+	setup_gettext_from_browser() and setup_gettext_for_user(), to be
+	able to temporarily override a locale.
+	* www/include/pre.php: Adapt accordingly.
+	* common/include/GroupJoinRequest.class.php: Switch to the email
+	recipient's locale before sending email, then switch back to the
+	current user's locale.
+	* common/include/Group.class.php: Ditto for group
+	approval/rejection messages.
+
 2007-11-04  Roland Mas  <lolando at debian.org>
 
 	* Several fixes to remove vulnerabilities against symlink attacks

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class.php	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/include/Group.class.php	2011-02-24 17:41:48 UTC (rev 12159)
@@ -2036,7 +2036,7 @@
 	 */
 	function sendApprovalEmail() {
 		$res_admins = db_query("
-			SELECT users.user_name,users.email,users.language
+			SELECT users.user_name,users.email,users.language,users.user_id
 			FROM users,user_group
 			WHERE users.user_id=user_group.user_id
 			AND user_group.group_id='".$this->getID()."'
@@ -2050,8 +2050,8 @@
 
 		// send one email per admin
 		while ($row_admins = db_fetch_array($res_admins)) {
-			$l = new BaseLanguage () ;
-			$l->loadLanguageID($row_admins['language']);
+			$admin =& user_get_object($row_admins['user_id']);
+			setup_gettext_for_user ($admin) ;
 
 			//																			   $2					  $2					$3							  $4						  $5						$6
 			$message=stripcslashes(sprintf(_('Your project registration for %7$s has been approved.
@@ -2087,6 +2087,8 @@
 -- the %7$s crew'), $this->getPublicName(), $this->getUnixName(), $GLOBALS['sys_default_domain'], $GLOBALS['sys_shell_host'], $GLOBALS['sys_scm_host'], $this->getID(), $GLOBALS['sys_name']));
 	
 			util_send_message($row_admins['email'], sprintf(_('%1$s Project Approved'), $GLOBALS['sys_name']), $message);
+
+			setup_gettext_from_browser () ;
 		}
 
 		return true;
@@ -2106,7 +2108,7 @@
 	 */
 	function sendRejectionEmail($response_id, $message="zxcv") {
 		$res_admins = db_query("
-			SELECT u.email, u.language
+			SELECT u.email, u.language, u.user_id
 			FROM users u, user_group ug
 			WHERE ug.group_id='".$this->getID()."'
 			AND u.user_id=ug.user_id;
@@ -2118,8 +2120,8 @@
 		}
 		
 		while ($row_admins = db_fetch_array($res_admins)) {
-			$l = new BaseLanguage () ;
-			$l->loadLanguageID($row_admins['language']);
+			$admin =& user_get_object($row_admins['user_id']);
+			setup_gettext_for_user ($admin) ;
 
 			$response=stripcslashes(sprintf(_('Your project registration for %3$s has been denied.
 
@@ -2142,6 +2144,7 @@
 			}
 
 			util_send_message($row_admins['email'], sprintf(_('%1$s Project Denied'), $GLOBALS['sys_name']), $response);
+			setup_gettext_from_browser () ;
 		}
 
 		return true;
@@ -2159,7 +2162,7 @@
 	 */
 	function sendNewProjectNotificationEmail() {
 
-		$res = db_query("SELECT users.email, users.language
+		$res = db_query("SELECT users.email, users.language, users.user_id
 	 			FROM users,user_group
 				WHERE group_id=1 
 				AND user_group.admin_flags='A'
@@ -2171,9 +2174,9 @@
 		} else {
 			for ($i=0; $i<db_numrows($res) ; $i++) {
 				$admin_email = db_result($res,$i,'email') ;
-				$l = new BaseLanguage () ;
-				$l->loadLanguageID(db_result($res,$i,'language'));
-				
+				$admin =& user_get_object(db_result($res,$i,'user_id'));
+				setup_gettext_for_user ($admin) ;
+
 				$message=stripcslashes(sprintf(_('New %1$s Project Submitted
 
 Project Full Name:  %2$s
@@ -2183,11 +2186,12 @@
 Please visit the following URL to approve or reject this project:
 http://%5$s/admin/approve-pending.php'), $GLOBALS['sys_name'], $this->getPublicName(), util_unconvert_htmlspecialchars($this->getRegistrationPurpose()), $this->getLicenseName(), $GLOBALS['sys_default_domain']));
 				util_send_message($admin_email, sprintf(_('New %1$s Project Submitted'), $GLOBALS['sys_name']), $message);
+				setup_gettext_from_browser () ;
 			}
 		}
 		
 		// Get the email of the user who wants to register the project
-		$res = db_query("SELECT u.email, u.language
+		$res = db_query("SELECT u.email, u.language, u.user_id
 				 FROM users u, user_group ug
 				 WHERE ug.group_id='".$this->getID()."' AND u.user_id=ug.user_id;");
 
@@ -2197,8 +2201,8 @@
 		} else {
 			for ($i=0; $i<db_numrows($res) ; $i++) {
 				$email = db_result($res, $i, 'email');
-				$l = new BaseLanguage () ;
-				$l->loadLanguageID(db_result($res,$i,'language'));
+				$user =& user_get_object(db_result($res,$i,'user_id'));
+				setup_gettext_for_user ($user) ;
 				
 				$message=stripcslashes(sprintf(_('New %1$s Project Submitted
 
@@ -2209,6 +2213,7 @@
 The %1$s admin team will now examine your project submission.  You will be notified of their decision.'), $GLOBALS['sys_name'], $this->getPublicName(), util_unconvert_htmlspecialchars($this->getRegistrationPurpose()), $this->getLicenseName(), $GLOBALS['sys_default_domain']));
 				
 				util_send_message($email, sprintf(_('New %1$s Project Submitted'), $GLOBALS['sys_name']), $message);
+				setup_gettext_from_browser () ;
 			}
 		}
 		

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GroupJoinRequest.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GroupJoinRequest.class.php	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/common/include/GroupJoinRequest.class.php	2011-02-24 17:41:48 UTC (rev 12159)
@@ -157,7 +157,7 @@
 			db_rollback();
 			return false;
 		} else {
-			if (!$this->fetchData($group_id,$user_id)) {
+			if (!$this->fetchData($this->Group->getID(),$user_id)) {
 				db_rollback();
 				return false;
 			} else {
@@ -244,19 +244,24 @@
 		$user =& session_get_user();
 		$admins =& $this->Group->getAdmins();
 		for ($i=0; $i<count($admins); $i++) {
-			$emails[]=$admins[$i]->getEmail();
-		}
-		$email=implode($emails,',');
-		$subject = sprintf(_('Request to Join Project %1$s'), $this->Group->getPublicName());
-		$comments = util_unconvert_htmlspecialchars($this->data_array["comments"]);
-		$body = sprintf(_('%1$s has requested to join your project. 
+			setup_gettext_for_user ($admins[$i]) ;
+		  
+			$email=$admins[$i]->getEmail();
+			$subject = sprintf(_('Request to Join Project %1$s'), $this->Group->getPublicName());
+			$comments = util_unconvert_htmlspecialchars($this->data_array["comments"]);
+			$body = sprintf(_('%1$s has requested to join your project. 
 You can approve this request here: http://%2$s/project/admin/?group_id=%3$s. 
 
 Comments by the user:
 %4$s'), $user->getRealName(), $GLOBALS['sys_default_domain'], $this->Group->getId(), $comments);
-		$body = str_replace("\\n","\n",$body);
+			$body = str_replace("\\n","\n",$body);
 
-		return util_send_message($email,$subject,$body);
+			$ret = util_send_message($email,$subject,$body);
+			if (! $ret) { return $ret; }
+
+		}
+		setup_gettext_from_browser () ;
+		return true ;
 	}
 
 	/**
@@ -265,15 +270,29 @@
 	 *	@return	boolean	success.
 	 */
 	function reject() {
-		global $Language;
 		$user =& user_get_object($this->getUserId());
+		setup_gettext_for_user ($user) ;
 		$subject = sprintf(_('Request to Join Project %1$s'), $this->Group->getPublicName());
 		$body = sprintf(_('Your request to join the %1$s project was denied by the administrator.'), $this->Group->getPublicName());
 		util_send_message($user->getEmail(),$subject,$body);
+		setup_gettext_from_browser () ;
 		return $this->delete(1);
 	}
 
 	/**
+	 *	send_accept_mail()
+	 *
+	 */
+	function send_accept_mail() {
+		$user =& user_get_object($this->getUserId());
+		setup_gettext_for_user ($user) ;
+		$subject = sprintf(_('Request to Join Project %1$s'), $this->Group->getPublicName());
+		$body = sprintf(_('Your request to join the %1$s project was granted by the administrator.'), $this->Group->getPublicName());
+		util_send_message($user->getEmail(),$subject,$body);
+		setup_gettext_from_browser () ;
+	}
+
+	/**
 	 *	delete() - delete this row from the database.
 	 *
 	 *	@param	boolean	I'm Sure.
@@ -307,4 +326,10 @@
 	}
 }
 
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/debian/changelog	2011-02-24 17:41:48 UTC (rev 12159)
@@ -1,3 +1,9 @@
+gforge (4.6.99+svn6175+something-0+1) unstable; urgency=low
+
+  * New SVN snapshot.
+
+ -- Roland Mas <lolando at debian.org>  Wed, 07 Nov 2007 13:36:28 +0100
+
 gforge (4.6.99+svn6169-1) unstable; urgency=high
 
   * New SVN snapshot (r6169), including the removal of a few tables

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/BaseLanguage.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/BaseLanguage.class.php	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/BaseLanguage.class.php	2011-02-24 17:41:48 UTC (rev 12159)
@@ -526,6 +526,47 @@
 	textdomain('gforge');
 }
 
+function setup_gettext_from_browser() {
+	global $Language, $sys_lang ;
+	if (!$sys_lang) {
+		$sys_lang="English";
+	}
+	if (session_loggedin()) {
+		$LUSER =& session_get_user();
+		$Language=new BaseLanguage();
+		$Language->loadLanguageID($LUSER->getLanguage());
+	} else {
+		//if you aren't logged in, check your browser settings 
+		//and see if we support that language
+		//if we don't support it, just use default language
+		if (getStringFromServer('HTTP_ACCEPT_LANGUAGE')) {
+			$classname=getLanguageClassName(getStringFromServer('HTTP_ACCEPT_LANGUAGE'));
+		} else {
+			$classname='';
+		}
+		if (!$classname) {
+			$classname=$sys_lang;
+		}
+		$Language=new BaseLanguage();
+		$Language->loadLanguage($classname);
+	}
+
+	setlocale (LC_TIME, _('en_US'));
+	$sys_strftimefmt = _('%Y %B %e  %H:%M');
+	$sys_datefmt = _('Y-m-d H:i');
+	$sys_shortdatefmt = _('Y-m-d');
+}
+
+function setup_gettext_for_user($user) {
+	$Language=new BaseLanguage();
+	$Language->loadLanguageID($user->getLanguage());
+
+	setlocale (LC_TIME, _('en_US'));
+	$sys_strftimefmt = _('%Y %B %e  %H:%M');
+	$sys_datefmt = _('Y-m-d H:i');
+	$sys_shortdatefmt = _('Y-m-d');
+}
+
 // Local Variables:
 // mode: php
 // c-file-style: "bsd"

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/include/pre.php	2011-02-24 17:41:48 UTC (rev 12159)
@@ -159,34 +159,8 @@
 
 require_once('www/include/BaseLanguage.class.php');
 
-if (!$sys_lang) {
-	$sys_lang="English";
-}
-if (session_loggedin()) {
-	$Language=new BaseLanguage();
-	$Language->loadLanguageID($LUSER->getLanguage());
-} else {
-	//if you aren't logged in, check your browser settings 
-	//and see if we support that language
-	//if we don't support it, just use default language
-	if (getStringFromServer('HTTP_ACCEPT_LANGUAGE')) {
-		$classname=getLanguageClassName(getStringFromServer('HTTP_ACCEPT_LANGUAGE'));
-	} else {
-		$classname='';
-	}
-	if (!$classname) {
-		$classname=$sys_lang;
-	}
-	$Language=new BaseLanguage();
-	$Language->loadLanguage($classname);
-}
+setup_gettext_from_browser() ;
 
-setlocale (LC_TIME, _('en_US'));
-$sys_strftimefmt = _('%Y %B %e  %H:%M');
-$sys_datefmt = _('Y-m-d H:i');
-$sys_shortdatefmt = _('Y-m-d');
-
-
 /*
 
 
@@ -202,4 +176,10 @@
 
 */
 
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
 ?>

Modified: trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php	2011-02-24 17:41:46 UTC (rev 12158)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/www/project/admin/index.php	2011-02-24 17:41:48 UTC (rev 12159)
@@ -136,6 +136,7 @@
 			if (!$gjr || !is_object($gjr) || $gjr->isError()) {
 				$feedback .= 'Error Getting GroupJoinRequest';
 			} else {
+				$gjr->send_accept_mail();
 				$gjr->delete(true);
 			}
 			$feedback = _('User Added Successfully');
@@ -315,7 +316,7 @@
 			echo "Invalid User";
 		}
 		?>
-		<form action="<?php echo $PHP_SELF.'?group_id='.$group_id; ?>" method="post">
+		<form action="<?php echo getStringFromServer('PHP_SELF').'?group_id='.$group_id; ?>" method="post">
 		<input type="hidden" name="submit" value="y" />
 		<input type="hidden" name="form_userid" value="<?php echo $user->getId(); ?>" />
 		<tr><td><input type="hidden" name="form_unix_name" value="<?php echo $user->getUnixName(); ?>" /><a href="<?php echo $GLOBALS['sys_urlprefix']; ?>/users/<?php echo $user->getUnixName(); ?>"><?php echo $user->getRealName(); ?></a></td>



More information about the evolvis-commits mailing list