[LON-CAPA-cvs] cvs: loncom /interface loncommon.pm lonmsg.pm /localize lonlocal.pm

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Sat, 13 Sep 2008 02:37:32 -0000


raeburn		Fri Sep 12 22:37:32 2008 EDT

  Modified files:              
    /loncom/interface	lonmsg.pm loncommon.pm 
    /loncom/localize	lonlocal.pm 
  Log:
  - Bug 5786. Language used for text wrapped around body of message in notification e-mail should correspond to language preference of recipient determined in order: user pref, domain default), unless message is sent in course content, and a language is defined for course (use course langage in this case).
  lonmsg.pm - &user_lang() used to get a language hadler for recipient.
            - Translation of text uses &mt_user() instead of &mt().
  
  lonlocal.pm - &mt_user() added (exported). Calls maketext, but takes language handler as firrst arg.
  
  loncommon.pm - &get_genlanguages() added - functionality to turn en-ca into en-ca,en and also to remove duplicates from @preferred_languages - moved from &preferred_languages() to a separate subroutine so it is more widely available.
  
  
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.212 loncom/interface/lonmsg.pm:1.213
--- loncom/interface/lonmsg.pm:1.212	Fri Jun  6 01:24:28 2008
+++ loncom/interface/lonmsg.pm	Fri Sep 12 22:37:26 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging
 #
-# $Id: lonmsg.pm,v 1.212 2008/06/06 05:24:28 raeburn Exp $
+# $Id: lonmsg.pm,v 1.213 2008/09/13 02:37:26 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -279,7 +279,7 @@
 
 
 sub sendemail {
-    my ($to,$subject,$body)=@_;
+    my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_;
     my %senderemails=&Apache::loncommon::getemails();
     my $senderaddress='';
     foreach my $type ('notification','permanentemail','critnotification') {
@@ -288,9 +288,9 @@
 	}
     }
     $body=
-    "*** ".&mt('This is an automatic message generated by the LON-CAPA system.')."\n".
-    "*** ".($senderaddress?&mt('You can reply to this message'):&mt('Please do not reply to this address.')."\n*** ".
-	    &mt('A reply will not be received by the recipient!'))."\n\n".$body;
+    "*** ".&mt_user($user_lh,'This is an automatic message generated by the LON-CAPA system.')."\n".
+    "*** ".($senderaddress?&mt_user($user_lh,'You can reply to this message'):&mt_user($user_lh,'Please do not reply to this address.')."\n*** ".
+	    &mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body;
     my $msg = new Mail::Send;
     $msg->to($to);
     $msg->subject('[LON-CAPA] '.$subject);
@@ -319,8 +319,9 @@
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
         $symb,$error) = &Apache::lonmsg::unpackmsgid($msgid);
     my ($coursetext,$body,$bodybegin,$bodysubj,$bodyend);
+    my $user_lh = &user_lang($touname,$toudom,$fromcid);
     if ($fromcid ne '') {
-        $coursetext = "\n".&mt('Course').': ';
+        $coursetext = "\n".&mt_user($user_lh,'Course').': ';
         if ($env{'course.'.$fromcid.'.description'} ne '') {
             $coursetext .= $env{'course.'.$fromcid.'.description'};
         } else {
@@ -333,24 +334,25 @@
     }
     my @recipients = split(/,/,$to);
     $bodybegin = $coursetext. 
-               &mt('You received a'.$critical.' message from [_1] in LON-CAPA.',$sender).' ';
-    $bodysubj = &mt('The subject is 
+               &mt_user($user_lh,
+                         'You received a'.$critical.' message from [_1] in LON-CAPA.',$sender).' ';
+    $bodysubj = &mt_user($user_lh,'The subject is 
 
  [_1]
 
 ',$subj)."\n".
-'=== '.&mt('Excerpt')." ============================================================
+'=== '.&mt_user($user_lh,'Excerpt')." ============================================================
 ";
     $bodyend = "
 ========================================================================
 
-".&mt('Use 
+".&mt_user($user_lh,'Use 
 
  [_1]
 
 to access the full message.',$url);
     my %userenv = &Apache::lonnet::get('environment',['notifywithhtml'],$toudom,$touname);
-    my $subject = &mt("'New' $critical message from ").$sender;
+    my $subject = &mt_user($user_lh,"'New' $critical message from ").$sender;
  
     my ($blocked,$blocktext);
     if (!$crit) {
@@ -361,7 +363,7 @@
             $blocked = 1;
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);
             my $showend = &Apache::lonlocal::locallocaltime($endblock);
-            $blocktext = &mt('LON-CAPA messages sent to you between [_1] and [_2] will be inaccessible until the end of this time period, because you are a student in a course with an active communications block.',$showstart,$showend);
+            $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you between [_1] and [_2] will be inaccessible until the end of this time period, because you are a student in a course with an active communications block.',$showstart,$showend);
         }
     }
     if ($userenv{'notifywithhtml'} ne '') {
@@ -376,7 +378,7 @@
                 }
                 $body = $bodybegin.$bodysubj.$sendtext.$bodyend;
             }
-            &sendemail($addr,$subject,$body);
+            &sendemail($addr,$subject,$body,$touname,$toudom,$user_lh);
         }
     } else {
         if ($blocked) {
@@ -385,7 +387,7 @@
             $text =~ s/\<\/*[^\>]+\>//gs;
             $body = $bodybegin.$bodysubj.$text.$bodyend;
         }
-        &sendemail($to,$subject,$body);
+        &sendemail($to,$subject,$body,$touname,$toudom,$user_lh);
     }
 }
 # ============================================================= Check for email
@@ -922,6 +924,28 @@
     return ($typestyle,%to);
 }
 
+sub user_lang {
+    my ($touname,$toudom,$fromcid) = @_;
+    my @userlangs;
+    if (($fromcid ne '') && ($env{'course.'.$fromcid.'.languages'} ne '')) {
+        @userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/,
+                    $env{'course.'.$fromcid.'.languages'}));
+    } else {
+        my %langhash = &Apache::lonnet::get('environment',['languages'],$toudom,$touname);
+        if ($langhash{'languages'} ne '') {
+            @userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'});  
+        } else {
+            my %domdefs = &Apache::lonnet::get_domain_defaults($toudom);
+            if ($domdefs{'lang_def'} ne '') {
+                @userlangs = ($domdefs{'lang_def'});
+            }
+        }
+    }
+    my @languages=&Apache::loncommon::get_genlanguages(@userlangs);
+    my $user_lh = Apache::localize->get_handle(@languages);
+    return $user_lh;
+}
+
 =pod
 
 =back
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.685 loncom/interface/loncommon.pm:1.686
--- loncom/interface/loncommon.pm:1.685	Thu Sep 11 17:05:19 2008
+++ loncom/interface/loncommon.pm	Fri Sep 12 22:37:26 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.685 2008/09/11 21:05:19 tempelho Exp $
+# $Id: loncommon.pm,v 1.686 2008/09/13 02:37:26 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2988,14 +2988,19 @@
             }
         }
     }
+    return &get_genlanguages(@languages);
+}
+
+sub get_genlanguages {
+    my (@languages) = @_;
 # turn "en-ca" into "en-ca,en"
     my @genlanguages;
     foreach my $lang (@languages) {
-	unless ($lang=~/\w/) { next; }
-	push(@genlanguages,$lang);
-	if ($lang=~/(\-|\_)/) {
-	    push(@genlanguages,(split(/(\-|\_)/,$lang))[0]);
-	}
+        unless ($lang=~/\w/) { next; }
+        push(@genlanguages,$lang);
+        if ($lang=~/(\-|\_)/) {
+            push(@genlanguages,(split(/(\-|\_)/,$lang))[0]);
+        }
     }
     #uniqueify the languages list
     my %count;
Index: loncom/localize/lonlocal.pm
diff -u loncom/localize/lonlocal.pm:1.47 loncom/localize/lonlocal.pm:1.48
--- loncom/localize/lonlocal.pm:1.47	Wed Jul  2 17:31:32 2008
+++ loncom/localize/lonlocal.pm	Fri Sep 12 22:37:29 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Localization routines
 #
-# $Id: lonlocal.pm,v 1.47 2008/07/02 21:31:32 raeburn Exp $
+# $Id: lonlocal.pm,v 1.48 2008/09/13 02:37:29 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -170,7 +170,7 @@
 require Exporter;
 
 our @ISA = qw (Exporter);
-our @EXPORT = qw(mt mtn ns);
+our @EXPORT = qw(mt mtn ns mt_user);
 
 # ========================================================= The language handle
 
@@ -201,6 +201,27 @@
     }
 }
 
+sub mt_user {
+    my ($user_lh,@what) = @_;
+    if ($user_lh) {
+        if ($what[0] eq '') {
+            if (wantarray) {
+                return @what;
+            } else {
+                return $what[0];
+            }
+        } else {
+            return $user_lh->maketext(@what);
+        }
+    } else {
+        if (wantarray) {
+            return @what;
+        } else {
+            return $what[0];
+        }
+    }
+}
+
 # ============================================================== What language?
 
 sub current_language {