--- loncom/interface/lonmsgdisplay.pm 2006/04/25 19:50:09 1.13 +++ loncom/interface/lonmsgdisplay.pm 2006/04/25 21:25:13 1.15 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging display # -# $Id: lonmsgdisplay.pm,v 1.13 2006/04/25 19:50:09 albertel Exp $ +# $Id: lonmsgdisplay.pm,v 1.15 2006/04/25 21:25:13 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -338,7 +338,7 @@ ENDDISHEADER if (! defined($fullname) || $fullname eq '') { $fullname = $sname; } $r->print('<tr><td><label>'. qq{<input type="checkbox" name="$key" />}.(' 'x2). - $fullname.'</label></td><td>'.$sname.'@'.$sdom.'</td><td>'.$section. + $fullname.'</label></td><td>'.$sname.':'.$sdom.'</td><td>'.$section. '</td></tr>'); } $r->print('</table>'); @@ -359,7 +359,7 @@ sub discrit { $result.='<hr />'.&mt('From').': <b>'. &Apache::loncommon::aboutmewrapper( &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('. -$content{'sendername'}.'@'. +$content{'sendername'}.':'. $content{'senderdomain'}.') '.$content{'time'}. '<br />'.&mt('Subject').': '.$content{'subject'}. '<br /><pre>'. @@ -867,7 +867,7 @@ sub compout { $r->print('<tr><td colspan="2">'.&mt('Replying to').' '. &Apache::loncommon::aboutmewrapper( &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('. - $content{'sendername'}.'@'. + $content{'sendername'}.':'. $content{'senderdomain'}.')'. '<input type="hidden" name="recuname" value="'.$content{'sendername'}.'" />'. '<input type="hidden" name="recdomain" value="'.$content{'senderdomain'}.'" />'. @@ -960,7 +960,7 @@ sub retrieve_instructor_comments { next if ($content{'subject'} !~ /^Record/); # &Apache::lonfeedback::newline_to_br(\$content{'message'}); $result.='Recorded by '. - $content{'sendername'}.'@'.$content{'senderdomain'}."\n"; + $content{'sendername'}.':'.$content{'senderdomain'}."\n"; $result.= &Apache::lontexconvert::msgtexconverted($content{'message'})."\n"; } @@ -1018,7 +1018,7 @@ sub disfacetoface { $result.=&mt('By').': <b>'. &Apache::loncommon::aboutmewrapper( &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('. -$content{'sendername'}.'@'. +$content{'sendername'}.':'. $content{'senderdomain'}.') '.$content{'time'}. '<br /><pre>'. &Apache::lontexconvert::msgtexconverted($content{'message'}). @@ -1232,7 +1232,7 @@ sub blockstore { unless ( defined($cancels{$_}) ) { my ($newstart,$newend) = &get_dates_from_form($_); my $newkey = $newstart.'____'.$newend; - $blocking{$newkey} = $env{'user.name'}.'@'.$env{'user.domain'}.':'.$env{'form.title_'.$_}; + $blocking{$newkey} = $env{'user.name'}.':'.$env{'user.domain'}.':'.$env{'form.title_'.$_}; } } if ($addtotal + $modtotal > 0) { @@ -1275,13 +1275,11 @@ sub get_blockdates { $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'} ); - $$blockcount = keys %{$records}; - - foreach (keys %{$records}) { - if ($_ eq 'error: 2 tie(GDBM) Failed while attempting dump') { - $$blockcount = 0; - last; - } + $$blockcount = keys(%{$records}); + + if ((keys(%{$records}))[0] =~ /^error: 2 /) { + $records = {}; + $$blockcount = 0; } } @@ -1319,8 +1317,8 @@ END my ($start,$end) = split/____/,$_; my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange); my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange); - my ($setter,$title) = split/:/,$$records{$_}; - my ($setuname,$setudom) = split/@/,$setter; + + my ($setuname,$setudom,$title) = &parse_block_record($$records{$_}); my $settername = &Apache::loncommon::plainname($setuname,$setudom); $r->print(<<"END"); <tr bgcolor="$bgcols[$iter]"> @@ -1346,6 +1344,19 @@ END return $parmcount; } +sub parse_block_record { + my ($record) = @_; + my ($setuname,$setudom,$title); + my @data = split(/:/,$record,3); + if (scalar(@data) eq 2) { + $title = $data[1]; + ($setuname,$setudom) = split(/@/,$data[0]); + } else { + ($setuname,$setudom,$title) = @data; + } + return ($setuname,$setudom,$title); +} + sub display_addblocker_table { my ($r,$parmcount,$ltext) = @_; my $start = time; @@ -1396,58 +1407,47 @@ END sub blockcheck { my ($setters,$startblock,$endblock) = @_; # Retrieve active student roles and active course coordinator/instructor roles - my @livecses = (); - my @staffcses = (); - $$startblock = 0; - $$endblock = 0; - foreach (keys %env) { - if ($_ =~ m-^user\.role\.(st|cc|in)\./(.+)$-) { - my $role = $1; - my $cse = $2; - $cse =~ s|/|_|; - if ($env{$_} =~ m/^(\d*)\.(\d*)$/) { - unless (($2 > 0 && $2 < time) || ($1 > time)) { - if ($role eq 'st') { - push @livecses, $cse; - } else { - unless (grep/^$cse$/,@staffcses) { - push @staffcses, $cse; - } - } - } - } - } elsif ($_ =~ m-user\.role\.cr/(\w+)/(\w+)/([^/]+)\./(.+)$- ) { - my $rolepriv = $env{'user.role..rolesdef_'.$3}; - } - } - # Retrieve blocking times and identity of blocker for active courses for students. - if (@livecses > 0) { - foreach my $cse (@livecses) { - my ($cdom,$crs) = split/_/,$cse; - if ( (grep/^$cse$/,@staffcses) && ($env{'request.role'} !~ m-^st\./$cdom/$crs$-) ) { - next; - } else { - %{$$setters{$cse}} = (); - @{$$setters{$cse}{'staff'}} = (); - @{$$setters{$cse}{'times'}} = (); - my %records = &Apache::lonnet::dump('comm_block',$cdom,$crs); - foreach (keys %records) { - if ($_ =~ m/^(\d+)____(\d+)$/) { - if ($1 <= time && $2 >= time) { - my ($staff,$title) = split/:/,$records{$_}; - push @{$$setters{$cse}{'staff'}}, $staff; - push @{$$setters{$cse}{'times'}}, $_; - if ( ($$startblock == 0) || ($$startblock > $1) ) { - $$startblock = $1; - } - if ( ($$endblock == 0) || ($$endblock < $2) ) { - $$endblock = $2; - } - } - } - } - } - } + my %live_courses = + map { $_ => 1} &Apache::loncommon::findallcourses(); + # FIXME should really probe for apriv, but ::allowed can only probe the + # currently active role + my %staff_of = + map { $_ => 1} &Apache::loncommon::findallcourses(['cc','in']); + + # Retrieve blocking times and identity of blocker for active courses + # for students. + return if (!%live_courses); + + &Apache::lonnet::logthis("hmm"); + &Apache::lonnet::logthis(join(" ",%live_courses)); + &Apache::lonnet::logthis(join(" ",%staff_of)); + + foreach my $course (keys(%live_courses)) { + my ($cdom,$cnum) = split(/_/,$course); + + # if they are a staff member and are currently not playing student + next if ( $staff_of{$course} + && ($env{'request.role'} !~ m{^st\./$cdom/$cnum})); + + $setters->{$course} = {}; + $setters->{$course}{'staff'} = []; + $setters->{$course}{'times'} = []; + my %records = &Apache::lonnet::dump('comm_block',$cdom,$cnum); + foreach my $record (keys %records) { + my ($start,$end) = ($record =~ m/^(\d+)____(\d+)$/); + if ($start <= time && $end >= time) { + my ($staff_name,$staff_dom,$title) = + &parse_block_record($records{$record}); + push(@{$$setters{$course}{'staff'}}, [$staff_name,$staff_dom]); + push(@{$$setters{$course}{'times'}}, [$start,$end]); + if ( ($$startblock == 0) || ($$startblock > $1) ) { + $$startblock = $1; + } + if ( ($$endblock == 0) || ($$endblock < $2) ) { + $$endblock = $2; + } + } + } } } @@ -1480,14 +1480,14 @@ END foreach (keys %{$setters}) { my %courseinfo=&Apache::lonnet::coursedescription($_); for (my $i=0; $i<@{$$setters{$_}{staff}}; $i++) { - my ($uname,$udom) = split/\@/,$$setters{$_}{staff}[$i]; + my ($uname,$udom) = @{$$setters{$_}{staff}[$i]}; my $fullname = &Apache::loncommon::plainname($uname,$udom); - my ($openblock,$closeblock) = split/____/,$$setters{$_}{times}[$i]; + my ($openblock,$closeblock) = @{$$setters{$_}{times}[$i]}; $openblock = &Apache::lonlocal::locallocaltime($openblock); $closeblock= &Apache::lonlocal::locallocaltime($closeblock); $r->print('<tr><td>'.$courseinfo{'description'}.'</td>'. '<td>'.$openblock.' to '.$closeblock.'</td>'. - '<td>'.$fullname.' ('.$uname.'@'.$udom. + '<td>'.$fullname.' ('.$uname.':'.$udom. ')</td></tr>'); } } @@ -1722,7 +1722,7 @@ sub sendoffmail { my %toaddr; if ($env{'form.sendmode'} eq 'group') { - foreach $address (keys(%env)) { + foreach my $address (keys(%env)) { if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) { $toaddr{$1}=''; } @@ -1778,7 +1778,7 @@ sub sendoffmail { $env{'form.permanent'}, \$sentmessage{$address}); } else { - $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': '); + $r->print(&mt('Sending').' '.$recuname.':'.$recdomain.': '); @thismsg= &Apache::lonmsg::user_normal_msg($recuname,$recdomain, $msgsubj,$msgtxt,