--- 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(''.$sname.'@'.$sdom.''.$section. + $fullname.''.$sname.':'.$sdom.''.$section. ''); } $r->print(''); @@ -359,7 +359,7 @@ sub discrit { $result.='
'.&mt('From').': '. &Apache::loncommon::aboutmewrapper( &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('. -$content{'sendername'}.'@'. +$content{'sendername'}.':'. $content{'senderdomain'}.') '.$content{'time'}. '
'.&mt('Subject').': '.$content{'subject'}. '
'.
@@ -867,7 +867,7 @@ sub compout {
 	    $r->print(''.&mt('Replying to').' '.
 		      &Apache::loncommon::aboutmewrapper(
 							 &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.
-		      $content{'sendername'}.'@'.
+		      $content{'sendername'}.':'.
 		      $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').': '.
 &Apache::loncommon::aboutmewrapper(
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.
-$content{'sendername'}.'@'.
+$content{'sendername'}.':'.
             $content{'senderdomain'}.') '.$content{'time'}.
             '
'.
               &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");
        
@@ -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(''.$courseinfo{'description'}.''.
                       ''.$openblock.' to '.$closeblock.''.
-                      ''.$fullname.' ('.$uname.'@'.$udom.
+                      ''.$fullname.' ('.$uname.':'.$udom.
                       ')');
         }
     }
@@ -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,