# The LearningOnline Network # Group Bulletin Boards Manager # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # package Apache::groupboards; use strict; use Apache::Constants qw(:common :http); use Apache::loncommon; use Apache::lonnet; use Apache::lonnavmaps; use Apache::lonuserstate; use Apache::lonratedt; use Apache::lonlocal; use LONCAPA; sub handler { my ($r) = @_; &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; # Needs to be in a course if (! ($env{'request.course.fn'})) { # Not in a course $env{'user.error.msg'}= "/adm/groupboards:mdg:0:0:Cannot edit or view course groups"; return HTTP_NOT_ACCEPTABLE; } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['group']); my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $now = time; my $crstype = &Apache::loncommon::course_type(); my $gpterm = &Apache::loncommon::group_term(); my $bodytitle = &mt('[_1] Discussion Boards',$crstype); my $group = $env{'form.group'}; if (!defined($group)) { $r->print(&Apache::loncommon::start_page($bodytitle)); $r->print(&mt('No [_1] defined, so there are no [_1] discussion boards to display',$gpterm)); $r->print(&Apache::loncommon::end_page()); return OK; } my $can_create=&Apache::lonnet::allowed('cgb',$env{'request.course.id'}. '/'.$group); my $can_view=&Apache::lonnet::allowed('pgd',$env{'request.course.id'}. '/'.$group); if (defined($env{'form.newbul'})) { if (($can_create) || (&Apache::lonnet::allowed('mdg',$env{'request.course.id'}))) { $r->print(&Apache::loncommon::start_page($bodytitle)); my ($outcome,$newurl,$bbtitle) = &create_board($cdom,$cnum,$group,$env{'form.newbul'}); if ($outcome eq 'ok') { my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); $r->print(&mt('The new discussion board was added successfully.
')); $r->print(''. '
'. ''. &mt('Edit [_1] board',$bbtitle).'  '. ''. &mt('View all group discussion boards'). '
'); } else { $r->print(&mt('There was a problem creating the new discussion board - [_1]',''.$outcome.'').'
'. &mt('Return to discussion boards').''); } $r->print(&Apache::loncommon::end_page()); return OK; } } my $jscript; if (($can_create) || (&Apache::lonnet::allowed('mdg',$env{'request.course.id'}))) { $jscript = qq| function makebulboard() { var title=prompt('Discussion Board Title'); if (title) { this.document.forms.newbb.newbul.value= title+'=/adm/$cdom/$cnum/$now/bulletinboard'; this.document.forms.newbb.submit(); } } |; } $r->print(&Apache::loncommon::start_page($bodytitle, '')); if (!$can_view) { $r->print(&mt('You do not have privileges to view discussion boards in this [_1]',$crstype)); return OK; } my $navmap = Apache::lonnavmaps::navmap->new(); my ($groupboards,$boards) = &Apache::longroup::get_group_bbinfo($cdom,$cnum, $group); if (($can_create) || (&Apache::lonnet::allowed('mdg',$env{'request.course.id'}))) { $r->print('
'. "\n".''."\n". ' '."\n". ' '. "\n".'

'); } if (@{$groupboards} > 0) { foreach my $board (@{$groupboards}) { $r->print(''.$$boards{$board}{'title'}.'
'); } } else { $r->print(&mt('There are currently no discussion boards in this [_1].', $gpterm)); } $r->print(&Apache::loncommon::end_page()); return OK; } sub create_board { my ($cdom,$cnum,$group,$newboard) = @_; my ($bbtitle,$newurl)=split(/\=/,$newboard); $bbtitle=&unescape($bbtitle); $newurl=&unescape($newurl); my $allbbsmap = &Apache::longroup::get_bbfolder_url($cdom,$cnum,$group); my ($outcome); if ($allbbsmap =~ m|^/uploaded|) { my ($errtext,$fatal)=&Apache::lonratedt::mapread($allbbsmap); if (!$fatal) { my $newidx=&Apache::lonratedt::getresidx($newurl); $Apache::lonratedt::resources[$newidx]=$bbtitle.':'.$newurl. ':false:normal:res'; push(@Apache::lonratedt::order,$newidx); my ($errtext,$fatal)=&Apache::lonratedt::storemap($allbbsmap,1); if ($fatal) { $outcome = "error: failed to store discussion boards map - $errtext\n"; } else { $outcome = 'ok'; } } else { $outcome = "error: failed to read all discussion boards map - $errtext\n"; } } else { $outcome = 'error: discussion boards folder absent, '. 'or in unexpected location - '.$allbbsmap."\n"; } return ($outcome,$newurl,$bbtitle); } 1;