--- loncom/interface/lonnotify.pm	2006/07/29 00:48:21	1.23
+++ loncom/interface/lonnotify.pm	2010/07/09 14:40:20	1.37
@@ -1,3 +1,7 @@
+# The LearningOnline Network with CAPA
+# Sending messages
+#
+# $Id: lonnotify.pm,v 1.37 2010/07/09 14:40:20 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -27,7 +31,7 @@ package Apache::lonnotify;
 use strict;
 use Apache::lonnet;
 use Apache::loncommon;
-use Apache::lonsupportreq;
+use Apache::courseclassifier;
 use LONCAPA::Enrollment;
 use Apache::Constants qw(:common :http);
 use Apache::lonlocal;
@@ -114,7 +118,7 @@ sub start_page {
 $start_page
 $breadcrumbs
 <br />
-<form name="$formname" method="POST">
+<form name="$formname" method="post" action="">
 ENDONE
 
     return $output;
@@ -139,19 +143,35 @@ function next_page(caller) {
 }
     |; 
 
-    my $output = &start_page(&add_script($jscript),
-			     'Broadcast e-mail to Domain', $formname);
-
-    $output .= '<input type="hidden" name="command" />';
-    $output .= '<table class="LC_notify_front_page">'.
-              '<tr><td><a href="javascript:next_page('."'new'".')">'.
-              'Send a new e-mail message to selected users from this domain</a></td></tr><tr>'.
-              '<td><a href="javascript:next_page('."'view'".')">'.
-              'Display e-mail sent by Domain Coordinators in this domain'.
-              '</a></td></tr></table>';
-    $output .= &end_page();
 
-    $r->print($output);
+    my @menu=
+        ({  categorytitle=>'Broadcast e-mail to Domain',
+        items =>[
+            {   linktext => 'Send e-mail to selected users',
+                url => 'javascript:next_page('."'new'".')',
+                permission => 1,
+                #help => '',
+                icon => 'mail-reply-all.png',
+                linktitle => 'Send a new e-mail to selected users from this domain'
+            },
+            {   linktext => 'Display sent e-mails',
+                url => 'javascript:next_page('."'view'".')',
+                permission => 1,
+                #help => '',
+                icon => 'messalog.png',
+                linktitle => 'Display e-mail sent by Domain Coordinators in this domain'
+            },
+        ]
+        },
+        );
+
+    $r->print(
+        &start_page(&add_script($jscript),
+            'Broadcast e-mail to Domain', $formname)
+       .'<input type="hidden" name="command" />'
+       .&Apache::lonhtmlcommon::generate_menu(@menu)
+       .&end_page()
+    );
     return;
 }
 
@@ -160,7 +180,7 @@ sub print_display_option_form {
     &Apache::lonhtmlcommon::add_breadcrumb({text=>"Display options"});
 
     my $cmd = 'display';
-    my $submit_text = 'Display e-mail';
+    my $submit_text = &mt('Display e-mail');
     my @roles = ('dc');
     my $now = time;
 
@@ -205,7 +225,7 @@ sub print_display_option_form {
             my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user);
             unless (grep/^$uname:$udom$/,@domcc) {
                 my %userinfo = &Apache::lonnet::get('environment',['lastname','firstname'],$udom,$uname);
-                $output .= '<input type="checkbox" name="sender" value="'.$uname.':'.$udom.'" />&nbsp;'.$userinfo{firstname}.' '.$userinfo{lastname}.'&nbsp;&nbsp;('.$uname.':'.$udom.')';
+                $output .= '<input type="checkbox" name="sender" value="'.$uname.':'.$udom.'" />&nbsp;'.$userinfo{'firstname'}.' '.$userinfo{'lastname'}.'&nbsp;&nbsp;('.$uname.':'.$udom.')';
                 push (@domcc,$uname.':'.$udom);
             }
         }
@@ -374,20 +394,26 @@ sub print_selection_form {
                'buil' => 'Building valid e-mail address from username, if missing from preferences:',
                'kerb' => 'Kerberos: enter default for each realm used in the domain, with comma separation of entries',
                'infs' => 'Internal, Filesystem and Local authentication: enter single default.',
-               'comp' => 'Compose Message'
+               'comp' => 'Compose E-mail'
            );
     &Apache::lonhtmlcommon::add_breadcrumb
           ({text=>"Select Audience"});
 
-    $totcodes = &Apache::lonsupportreq::retrieve_instcodes(\%coursecodes,$cdom,$totcodes);
+    $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$cdom,$totcodes);
     if ($totcodes > 0) {
         $format_reply = &Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order);
         if ($format_reply eq 'ok') {
             my $numtypes = @codetitles;
-            &Apache::lonsupportreq::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);
-            &Apache::lonsupportreq::javascript_code_selections($formname,$numtypes,\%cat_titles,\$jscript,\%idlist,\%idnums,\%idlist_titles,\@codetitles);
+            &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);
+            my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);
+            my $longtitles_str = join('","',@{$longtitles});
+            my $allidlist = $idlist{$codetitles[0]};
+            $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist);
+            $jscript .= $scripttext;
+            $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,@codetitles);
         }
     }
+    my @standardnames = &Apache::loncommon::get_standard_codeitems();
 
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($cdom);
 
@@ -401,7 +427,7 @@ sub print_selection_form {
                      internal => 'text',
                      krb4 => 'text',
                      krb5 => 'text',
-                     local => 'text',
+                     localauth => 'text',
                      unix => 'text',
                    );
     $jscript .= &Apache::lonhtmlcommon::set_form_elements(\%elements);
@@ -411,7 +437,7 @@ function setCourseCat(formname) {
     if (formname.Year.options[formname.Year.selectedIndex].value == -1) {
         return;
     }
-    courseSet('Year');
+    courseSet('$codetitles[0]');
     for (var j=0; j<formname.Semester.length; j++) {
         if (formname.Semester.options[j].value == "$env{'form.Semester'}") {
             formname.Semester.options[j].selected = true;
@@ -420,7 +446,7 @@ function setCourseCat(formname) {
     if (formname.Semester.options[formname.Semester.selectedIndex].value == -1) {
         return;
     }
-    courseSet('Semester');
+    courseSet('$codetitles[1]');
     for (var j=0; j<formname.Department.length; j++) {
         if (formname.Department.options[j].value == "$env{'form.Department'}") {
             formname.Department.options[j].selected = true;
@@ -429,7 +455,7 @@ function setCourseCat(formname) {
     if (formname.Department.options[formname.Department.selectedIndex].value == -1) {
         return;
     }
-    courseSet('Department');
+    courseSet('$codetitles[2]');
     for (var j=0; j<formname.Number.length; j++) {
         if (formname.Number.options[j].value == "$env{'form.Number'}") {
             formname.Number.options[j].selected = true;
@@ -455,10 +481,10 @@ function setCourseCat(formname) {
 </ul>'."\n";
     my $submit_text = $lt{'comp'};
     my $cmd = 'compose';
-    $output .= &Apache::lonhtmlcommon::role_select_row(\@roles,'Roles');
-    $output .= &Apache::lonhtmlcommon::course_select_row('Courses',$formname,$totcodes,\@codetitles,\%idlist,\%idlist_titles);
+    $output .= &Apache::lonhtmlcommon::role_select_row(\@roles,&mt('Roles'));
+    $output .= &Apache::lonhtmlcommon::course_select_row(&mt('Courses'),$formname,$totcodes,\@codetitles,\%idlist,\%idlist_titles,undef,undef,\@standardnames);
     $output .= &Apache::lonhtmlcommon::status_select_row(\%longtypes,&mt('Access status'));
-    $output .= &Apache::lonhtmlcommon::email_default_row(\%authtypes,&mt('Username -> Email conversion'),$descrip);
+    $output .= &Apache::lonhtmlcommon::email_default_row(\%authtypes,&mt('Username -> E-mail conversion'),$descrip);
     $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),$cmd,$submit_text);
     $output .= &Apache::lonhtmlcommon::end_pick_box();
     $output .= &end_page();
@@ -471,7 +497,7 @@ sub print_composition_form {
     &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"javascript:goBack('pick_target')",
           text=>"Select Audience"},
-         {text=>"Compose Message"});
+         {text=>"Compose E-mail"});
     my $jscript = &Apache::loncommon::check_uncheck_jscript();
     $jscript .= qq|
 function goBack(target) {
@@ -496,30 +522,25 @@ function goBack(target) {
 			  'Broadcast e-mail to users', $formname));
 
     my $coursefilter = $env{'form.coursepick'};
-    my %courses = ();
+    my %courses;
     if ($coursefilter eq 'all') {
         %courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.',
                                                  undef,undef,'Course');
     } elsif ($coursefilter eq 'category') {
-        my $instcode = '';
-        my @cats = ('Semester','Year','Department','Number');
-        foreach my $category (@cats) {
-            if (defined($env{'form.'.$category})) {
-                unless ($env{'form.'.$category} eq '-1') {
-                    $instcode .= $env{'form.'.$category};
-                }
-            }
-        }
+        my $instcode = &Apache::courseclassifier::instcode_from_selectors($cdom);
+        my $regexp = '';
         if ($instcode eq '') {
             $instcode = '.';
+        } else {
+            $regexp = 1;
         }
         %courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.',
-                                                 undef,undef,'Course');
+                                                 undef,undef,'Course',$regexp);
     } elsif ($coursefilter eq 'specific') {
         if ($env{'form.coursetotal'} > 1) {
             my @course_ids = split(/&&/,$env{'form.courselist'});
-            foreach (@course_ids) {
-                $courses{$_} = '';
+            foreach my $cid (@course_ids) {
+                $courses{$cid} = '';
             }
         } else {
             $courses{$env{'form.courselist'}} = '';
@@ -572,7 +593,10 @@ function goBack(target) {
         $access{$type} = $type;
     }
     foreach my $course_id (keys(%courses)) {
-        my ($cdom,$cnum) = split(/_/,$course_id);
+        my %coursehash = 
+            &Apache::lonnet::coursedescription($course_id,{'one_time' => 1});
+        my $cdom = $coursehash{'domain'};
+        my $cnum = $coursehash{'num'};
         &Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users);
     }
     foreach my $role (keys(%users)) {
@@ -630,7 +654,7 @@ function goBack(target) {
         $output .= &Apache::lonhtmlcommon::row_title(&mt('Sender e-mail address'));
         $output .= '<input type="text" name="sender" value="'.$sender.'" />';
         $output .= &Apache::lonhtmlcommon::row_closure();
-        $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),'process',&mt('Send Message'));
+        $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),'process',&mt('Send'));
         $output .= &Apache::lonhtmlcommon::end_pick_box();
     } else {
         $output .= $lt{'nore'}."\n".
@@ -662,7 +686,7 @@ ENDSCRIPT
           text=>"Select audience"});
     &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"javascript:goBack('compose')",
-          text=>"Compose Message"});
+          text=>"Compose E-mail"});
     &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/notify?command=process",
           text=>"Outcome"});
@@ -698,7 +722,7 @@ ENDSCRIPT
     } else {
         $output .= 'No mail sent - no recipients identified'; 
     }
-    $output .= '<br /><a href="/adm/notify">Send another message?</a>'."\n";
+    $output .= '<br /><a href="/adm/notify">'.&mt('Send another e-mail').'</a>'."\n";
     $output .= '<input type="hidden" name="command" />'."\n".
                '<input type="hidden" name="origin" value="'.$formname.'" />'."\n";
     $output .= &Apache::lonhtmlcommon::echo_form_input(['command','origin']);
@@ -730,7 +754,7 @@ sub get_user_info {
     my ($user,%email_defaults) = @_;
     my ($uname,$udom) = split(/:/,$user);
     my @emailtypes = ('permanentemail','critnotification','notification');
-    my %userinfo = &Apache::lonnet::get('environment',\@emailtypes,$udom,$uname);
+    my %userinfo = &Apache::loncommon::getemails($uname,$udom);
     my $email = '';
     foreach my $type (@emailtypes) {
         $email = $userinfo{$type};
@@ -757,16 +781,16 @@ sub get_user_info {
 sub form_elements {
    my ($longtypes,$authtypes) = @_;
    %{$longtypes} = (
-                   active => 'Currently has access',
-                   previous => 'Previously had access',
-                   future => 'Will have future access',
+                   active => &mt('Currently has access'),
+                   previous => &mt('Previously had access'),
+                   future => &mt('Will have future access'),
                    );
    %{$authtypes} = (
                    krb4 => 'Kerberos 4',
                    krb5 => 'Kerberos 5',
                    internal => 'Internal (LON-CAPA)',
                    unix => 'Filesystem (UNIX)',
-                   local => 'Local/Customized',
+                   localauth => 'Local/Customized',
                    );
    return;
 }
@@ -778,7 +802,7 @@ sub store_mail {
                         $attachmenturl,$recipients,undef,undef,'dcmail');
 
 # Store in dc email db files on primary library server for domain.
-    my $server = $Apache::lonnet::domain_primary{$domain};
+    my $server = &Apache::lonnet::domain($domain,'primary');
     if (defined($server)) {
         unless (&Apache::lonnet::dcmailput($domain,$msgid,$message,$server) 
                                                             eq 'ok') {