[LON-CAPA-cvs] cvs: loncom /interface lonbulletin.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Sat, 08 Jul 2006 01:23:13 -0000


raeburn		Fri Jul  7 21:23:13 2006 EDT

  Modified files:              
    /loncom/interface	lonbulletin.pm 
  Log:
  Adding breadcrumbs to group discussion board display. Group context detected from course domain and course number in URL.  Corresponding groupID is determined from group entry in bulletinpage_$boardid.db file.    
  
  
Index: loncom/interface/lonbulletin.pm
diff -u loncom/interface/lonbulletin.pm:1.35 loncom/interface/lonbulletin.pm:1.36
--- loncom/interface/lonbulletin.pm:1.35	Mon Apr 10 15:59:53 2006
+++ loncom/interface/lonbulletin.pm	Fri Jul  7 21:23:13 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Bulletin Board Handler
 #
-# $Id: lonbulletin.pm,v 1.35 2006/04/10 19:59:53 albertel Exp $
+# $Id: lonbulletin.pm,v 1.36 2006/07/08 01:23:13 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -35,6 +35,8 @@
 use Apache::lontexconvert;
 use Apache::lonfeedback;
 use Apache::lonlocal;
+use Apache::lonhtmlcommon;
+use LONCAPA;
 
 sub handler {
     my $r = shift;
@@ -51,7 +53,7 @@
 # Is this even in a course?
     if (!$env{'request.course.id'}) {
 	&Apache::loncommon::simple_error_page($r,'Not in a course',
-					      'Not in a course');
+				                'Not in a course');
         return OK;
     }
 
@@ -65,6 +67,7 @@
 
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+    my ($group,$grp_desc);
 
 # --------------------------------------------------------- The syllabus fields
     my %syllabusfields=&Apache::lonlocal::texthash(
@@ -74,7 +77,8 @@
 
 # ------------------------------------------------------------ Get Query String
     &Apache::loncommon::get_unprocessed_cgi
-                ($ENV{'QUERY_STRING'},['forcestudent','forceedit','register','origpage']);
+                ($ENV{'QUERY_STRING'},['forcestudent','forceedit','register',
+                                       'origpage','group']);
 # ----------------------------------------------------- Force menu registration
     my %addentries;
     if ($env{'form.origpage'}) {
@@ -88,6 +92,33 @@
     if ($env{'form.forceedit'}) { $forceedit='edit'; }
 
     my %syllabus=&Apache::lonnet::dump('bulletinpage_'.$marker,$dom,$crs);
+
+    my $boardurl = $r->uri;
+    if ($boardurl =~ m|/adm/\Q$dom\E/\Q$crs\E/\d+/bulletinboard|) {
+        if (!exists($syllabus{'group'})) {
+            &Apache::loncommon::simple_error_page($r,'Group information missing',
+                                                 'Group information missing');
+
+            return OK;
+        } else {
+            $group = $syllabus{'group'};
+            if ($group eq '') {
+                &Apache::loncommon::simple_error_page($r,'Invalid group',
+                                                     'Invalid group');
+                return OK;
+            }
+            my %curr_groups = &Apache::longroup::coursegroups($dom,$crs,$group);
+            if (!defined($curr_groups{$group})) {
+                &Apache::loncommon::simple_error_page($r,'Invalid group',
+                                                     'Invalid group');
+                return OK;
+            } else {
+                my %content = &Apache::longroup::get_group_settings(
+                                                          $curr_groups{$group});
+                $grp_desc = &unescape($content{'description'});
+            }
+        }
+    }
        
 # --------------------------------------- There is such a user, get environment
     if ($target ne 'tex') {  
@@ -99,8 +130,36 @@
 					    'force_register' =>
 						$env{'form.register'}});
 	$r->print($start_page);
+        if ($group ne '' && $env{'form.group'} eq $group) {
+            my $gpterm =  &Apache::loncommon::group_term();
+            my $ucgpterm = $gpterm;
+            $ucgpterm =~ s/^(\w)/uc($1)/e;
+            my ($groupboards,$boards) = &Apache::longroup::get_group_bbinfo(
+                                                            $dom,$crs,$group);
+            my $boardtitle = $$boards{$marker}{'title'};
+            $boardurl .= '?register=1&group='.$group;
+            $r->print(&groupboard_breadcrumbs($dom,$crs,$group,$gpterm,
+                                $ucgpterm,$grp_desc,$boardurl,$boardtitle));
+        }
+    }
+    my ($allowed);
+    if ($group ne '') {
+        $allowed=&Apache::lonnet::allowed('mdg',$env{'request.course.id'});
+        if (!$allowed) {
+            $allowed = &Apache::lonnet::allowed('cgb',$env{'request.course.id'}.
+                                                '/'.$group);
+        }
+        if (!$allowed) {
+            if ((!&Apache::lonnet::allowed('vcg',$env{'request.course.id'})) &&
+               (!&Apache::lonnet::allowed('vgb',$env{'request.course.id'}.
+                                                '/'.$group))) { 
+                 &print_end_page($r,$target);
+                 return OK;   
+            }
+        }
+    } else {
+        $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
     }
-    my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
 
     my $privileged=$allowed;
     if (($syllabus{'uploaded.lastmodified'}) && (!$forceedit)) {
@@ -110,12 +169,20 @@
       if ($forcestudent or $target eq 'tex') { $allowed=0; }
  
       if ($allowed) {
+          my $query_str = 'forcestudent=1';
+          if (($group ne '') && ($env{'form.group'} eq $group)) {
+              $query_str.='&group='.$group;
+          }
           $r->print(
 	  '<p>'.
-&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').'<br /><a href="'.$r->uri.'?forcestudent=1"><font size="+1">'.&mt('Show Student View').'</font></a>'.
+&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').'<br /><a href="'.$r->uri.'?'.$query_str.'"><font size="+1">'.&mt('Show Student View').'</font></a>'.
  &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'</p>');
       }  elsif ($privileged and $target ne 'tex') {
-	  $r->print('<a href="'.$r->uri.'?forceedit=edit"><font size="+1">'
+          my $query_str = 'forceedit=edit';
+          if (($group ne '') && ($env{'form.group'} eq $group)) {
+              $query_str.='&amp;group='.$group;
+          }
+	  $r->print('<a href="'.$r->uri.'?'.$query_str.'"><font size="+1">'
 		    .&mt('Edit').'</font></a>');
       } 
 
@@ -220,13 +287,36 @@
 	           ('board','OPEN','bulletin___'.$marker.'___'.
 	            $r->uri)));
     }
+    &print_end_page($r,$target);
+    return OK;
+}
+
+sub print_end_page {
+    my ($r,$target) = @_;
     if ($target ne 'tex') {
-	$r->print(&Apache::loncommon::end_page());
+        $r->print(&Apache::loncommon::end_page());
     } else {
-	$r->print('\end{document}');
+        $r->print('\end{document}');
     }
-    return OK;
-} 
+}
+
+sub groupboard_breadcrumbs {
+    my ($cdom,$cnum,$group,$gpterm,$ucgpterm,$description,$boardurl,$boardtitle)= @_;
+    &Apache::lonhtmlcommon::clear_breadcrumbs();
+    &Apache::lonhtmlcommon::add_breadcrumb
+        ({href=>"/adm/$cdom/$cnum/$group/smppg",
+          text=>"$ucgpterm: $description",
+          title=>"Go to group's home page"},
+         {href=>"/adm/groupboards?group=$group",
+          text=>"Discussion Boards",
+          title=>"Display group discussion boards"},
+         {href=>"$boardurl",
+          text=>"$boardtitle",
+          title=>"$boardtitle"},
+        );
+    my $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('[_1] discussion boards - [_2]',$gpterm,$description));
+    return $output;
+}
 
 1;
 __END__