--- loncom/interface/loncommon.pm 2007/11/13 01:47:56 1.613 +++ loncom/interface/loncommon.pm 2007/12/03 22:58:46 1.618 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.613 2007/11/13 01:47:56 albertel Exp $ +# $Id: loncommon.pm,v 1.618 2007/12/03 22:58:46 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -4834,6 +4834,7 @@ table.LC_descriptive_input td.LC_descrip font-weight: bold; } div.LC_feedback_link { + clear: both; background: white; width: 100%; } @@ -5104,12 +5105,15 @@ table.LC_scantron_action tr th { font: normal bold $sans; } -div.LC_edit_problem_header { +div.LC_edit_problem_header, +div.LC_edit_problem_footer { font: normal medium $sans; margin: 2px; } div.LC_edit_problem_header, div.LC_edit_problem_header div, +div.LC_edit_problem_footer, +div.LC_edit_problem_footer div, div.LC_edit_problem_editxml_header, div.LC_edit_problem_editxml_header div { margin-top: 5px; @@ -5857,7 +5861,6 @@ sub get_course_users { my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist($cdom,$cnum); my $now = time; foreach my $student (keys(%{$classlist})) { - my $status; my $match = 0; my $secmatch = 0; my $section = $$classlist{$student}[$idx{section}]; @@ -6437,60 +6440,64 @@ END_BLOCK } sub user_rule_check { - my ($usershash,$checks,$alerts,$rulematch,$inst_results,$curr_rules) = @_; + my ($usershash,$checks,$alerts,$rulematch,$inst_results,$curr_rules,$got_rules) = @_; my $response; if (ref($usershash) eq 'HASH') { - my %got_rules; foreach my $user (keys(%{$usershash})) { my ($uname,$udom) = split(/:/,$user); next if ($udom eq '' || $uname eq ''); - my ($userstatus,$id); + my ($id,$newuser); if (ref($usershash->{$user}) eq 'HASH') { - $userstatus = $usershash->{$user}->{'status'}; + $newuser = $usershash->{$user}->{'newuser'}; $id = $usershash->{$user}->{'id'}; } my $inst_response; if (ref($checks) eq 'HASH') { if (defined($checks->{'username'})) { - ($inst_response,%{$inst_results}) = + ($inst_response,%{$inst_results->{$user}}) = &Apache::lonnet::get_instuser($udom,$uname); } elsif (defined($checks->{'id'})) { - ($inst_response,%{$inst_results}) = + ($inst_response,%{$inst_results->{$user}}) = &Apache::lonnet::get_instuser($udom,undef,$id); } + } else { + ($inst_response,%{$inst_results->{$user}}) = + &Apache::lonnet::get_instuser($udom,$uname); + return; } - if (!$got_rules{$udom}) { + if (!$got_rules->{$udom}) { my %domconfig = &Apache::lonnet::get_dom('configuration', ['usercreation'],$udom); if (ref($domconfig{'usercreation'}) eq 'HASH') { - foreach my $item (keys(%{$checks})) { + foreach my $item ('username','id') { if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') { $$curr_rules{$udom}{$item} = $domconfig{'usercreation'}{$item.'_rule'}; } } } - $got_rules{$udom} = 1; + $got_rules->{$udom} = 1; } foreach my $item (keys(%{$checks})) { if (ref($$curr_rules{$udom}) eq 'HASH') { if (ref($$curr_rules{$udom}{$item}) eq 'ARRAY') { if (@{$$curr_rules{$udom}{$item}} > 0) { - my %rule_check; my %rule_check = &Apache::lonnet::inst_rulecheck($udom,$uname,$id,$item,$$curr_rules{$udom}{$item}); foreach my $rule (@{$$curr_rules{$udom}{$item}}) { if ($rule_check{$rule}) { $$rulematch{$user}{$item} = $rule; if ($inst_response eq 'ok') { - if (keys(%{$inst_results}) == 0) { - if ($userstatus eq 'new') { - $$alerts{$user}{$item} = 1; + if (ref($inst_results) eq 'HASH') { + if (ref($inst_results->{$user}) eq 'HASH') { + if (keys(%{$inst_results->{$user}}) == 0) { + $$alerts{$item}{$udom}{$uname} = 1; + } } } - } + } + last; } } - last; } } } @@ -6528,7 +6535,7 @@ sub user_rule_formats { } sub instrule_disallow_msg { - my ($checkitem,$domdesc,$count) = @_; + my ($checkitem,$domdesc,$count,$mode) = @_; my $response; my %text = ( item => 'username', @@ -6549,12 +6556,24 @@ sub instrule_disallow_msg { $text{'items'} = 'IDs'; $text{'item'} = 'ID'; $text{'action'} = 'an ID'; + if ($count > 1) { + $text{'item'} = 'IDs'; + $text{'action'} = 'IDs'; + } } $response = &mt("The $text{'item'} you chose $text{'match'} the format of $text{'items'} defined for [_1], but the $text{'item'} $text{'do'} not exist in the institutional directory.",$domdesc).'
'; - if ($checkitem eq 'username') { - $response .= &mt("You must choose $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}."); - } elsif ($checkitem eq 'id') { - $response .= &mt("You must either choose $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or leave this field blank."); + if ($mode eq 'upload') { + if ($checkitem eq 'username') { + $response .= &mt("You will need to modify your upload file so it will include $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}."); + } elsif ($checkitem eq 'id') { + $response .= &mt("Either upload a file which includes $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or when associating fields with data columns, omit an association for the ID/Student Number field."); + } + } else { + if ($checkitem eq 'username') { + $response .= &mt("You must choose $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}."); + } elsif ($checkitem eq 'id') { + $response .= &mt("You must either choose $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or leave the ID field blank."); + } } return $response; } @@ -7617,6 +7636,66 @@ sub restore_settings { } } +####################################################### +####################################################### + +=pod + +=head1 Domain E-mail Routines + +=over 4 + +=item &build_recipient_list + +Build recipient lists for three types of e-mail: +(a) Error Reports, (b) Package Updates, (c) Help requests, generated by +lonerrorhandler.pm, CHECKRPMS and lonhelpdesk.pm respectively. + +Inputs: +Request object, defmail (scalar - email address of default recipient), +mailing type (scalar - errormail, packagesmail, or helpdeskmail), +defdom (domain for which to retrieve configuration settings). + +Returns: comma separated list of addresses to which to send e-mail. + +=cut + +############################################################ +############################################################ +sub build_recipient_list { + my ($r,$defmail,$mailing,$defdom) = @_; + my @recipients; + my $otheremails; + my $defdom = $r->dir_config('lonDefDomain'); + my %domconfig = + &Apache::lonnet::get_dom('configuration',['contacts'],$defdom); + if (ref($domconfig{'contacts'}) eq 'HASH') { + if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') { + my @contacts = ('adminemail','supportemail'); + foreach my $item (@contacts) { + if ($domconfig{'contacts'}{$mailing}{$item}) { + push(@recipients,$domconfig{'contacts'}{$item}); + } + $otheremails = $domconfig{'contacts'}{$mailing}{'others'}; + } + } else { + push(@recipients,$r->dir_config('lonAdmEMail')); + } + } + if ($defmail ne '') { + push(@recipients,$defmail); + } + my $recipientlist = join(',',@recipients); + if ($otheremails) { + if ($recipientlist ne '') { + $recipientlist .= ','.$otheremails; + } else { + $recipientlist = $otheremails; + } + } + return $recipientlist; +} + ############################################################ ############################################################