--- loncom/interface/loncoursegroups.pm 2006/06/30 03:33:50 1.31 +++ loncom/interface/loncoursegroups.pm 2006/06/30 08:14:31 1.32 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursegroups.pm,v 1.31 2006/06/30 03:33:50 albertel Exp $ +# $Id: loncoursegroups.pm,v 1.32 2006/06/30 08:14:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3050,9 +3050,12 @@ sub write_group_data { if ($result eq 'ok') { if ($action eq 'create') { - my $put_result = &create_homepage($cdom,$cnum,$groupname, - \%groupinfo,$tools,$gpterm, - $ucgpterm); + my $result = &add_group_folder($cdom,$cnum,$now,$groupname,$action, + $description,$tools,\%groupinfo, + $gpterm,$ucgpterm,$crstype); + if ($result ne 'ok') { + $r->print(&mt('A problem occurred when creating folders for the new [_1]. [_2].',$gpterm,$result)); + } $r->print(&mt('[_1] [_2] was created.
',$ucgpterm,$groupname)); } else { $r->print(&mt('[_1] [_2] was updated.
',$ucgpterm,$groupname)); @@ -3578,8 +3581,159 @@ sub date_setting_table { return ($start_table, $end_table); } +sub add_group_folder { + my ($cdom,$cnum,$now,$groupname,$action,$description,$tools,$groupinfo, + $gpterm,$ucgpterm,$crstype) = @_; + if ($cdom eq '' || $cnum eq '') { + return &mt('Error: invalid course domain or number - group folder creation failed'); + } + my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage); + my $navmap = Apache::lonnavmaps::navmap->new(); + my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; + $allgrpsmap = $crspath.'default_0.sequence'; + my $topmap = $navmap->getResourceByUrl($allgrpsmap); + undef($navmap); + if ($action eq 'create') { + # check if default_0.sequence exists. + if (!$topmap) { + my $grpstitle = &mt('[_1] [_2]',$crstype,$ucgpterm); + my $topmap_url = '/'.$env{'course.'.$env{'request.course.id'}.'.url'}; + $topmap_url =~ s|/+|/|g; + if ($topmap_url =~ m|^/uploaded|) { + $outcome = &map_updater($cdom,$cnum,'default_0.sequence', + 'toplevelgroup',$grpstitle,$topmap_url); + if ($outcome ne 'ok') { + return $outcome; + } + } else { + $outcome = &mt('Non-standard course - group folder not added.'); + return $outcome; + } + } + my $grpfolder = &mt('[_1] Folder -',$ucgpterm,).$description; + $grppage='/adm/'.$cdom.'/'.$cnum.'/'.$groupname.'/grppg'; + my $grptitle = &mt('Group homepage').' - '.$description; + my ($seqid,$discussions,$disctitle); + my $outcome = &map_updater($cdom,$cnum,'default_'.$now.'.sequence', + 'grpseq',$grpfolder,$allgrpsmap,$grppage, + $grptitle); + if ($outcome ne 'ok') { + return $outcome; + } + my $pageout = &create_homepage($cdom,$cnum,$groupname,$groupinfo, + $tools,$gpterm,$ucgpterm,$now); + # Link to folder for bulletin boards + $grpmap = $crspath.'default_'.$now.'.sequence'; + if (grep/^discussion$/,@{$tools}) { + $seqid = $now + 1; + $disctitle = &mt('Discussion Boards'); + my $outcome = &map_updater($cdom,$cnum,'default_'.$seqid. + '.sequence','bbseq',$disctitle,$grpmap); + if ($outcome ne 'ok') { + return $outcome; + } + $boardsmap = $crspath.'default_'.$seqid.'.sequence'; + } + } else { + #modify group folder if status of discussions tools is changed + } + my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); + my $navmap = Apache::lonnavmaps::navmap->new(); + # modify parameters + my $parm_result; + if ($action eq 'create') { + if ($allgrpsmap) { + $parm_result .= &parm_setter($navmap,$cdom,$allgrpsmap,$groupname); + } + if ($grpmap) { + $parm_result .= &parm_setter($navmap,$cdom,$grpmap,$groupname); + } + if ($grppage) { + $parm_result .= &parm_setter($navmap,$cdom,$grppage,$groupname); + } + if ($boardsmap) { + $parm_result .= &parm_setter($navmap,$cdom,$boardsmap,$groupname); + } + } + if ($parm_result) { + return $parm_result; + } else { + return 'ok'; + } +} + +sub map_updater { + my ($cdom,$cnum,$newfile,$itemname,$itemtitle,$parentmap,$startsrc, + $starttitle,$endsrc,$endtitle) = @_; + my $outcome; + $env{'form.'.$itemname} = &new_map($startsrc,$starttitle,$endsrc, + $endtitle); + my $newmapurl=&Apache::lonnet::finishuserfileupload($cnum,$cdom,$itemname, + $newfile); + if ($newmapurl !~ m|^/uploaded|) { + $outcome = "Error uploading new folder ($newfile): $newmapurl"; + return $outcome; + } + my ($errtext,$fatal)=&Apache::lonratedt::mapread($parentmap); + if ($fatal) { + $outcome = "Error reading contents of parent folder ($parentmap): $errtext\n"; + return $outcome; + } else { + my $newidx=&Apache::lonratedt::getresidx($newmapurl); + $Apache::lonratedt::resources[$newidx] = $itemtitle.':'.$newmapurl. + ':false:normal:res'; + $Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx; + my ($outtext,$errtext) = &Apache::lonratedt::storemap($parentmap,1); + if ($errtext) { + $outcome = "Error storing updated parent folder ($parentmap): $errtext\n"; + return $outcome; + } + } + return 'ok'; +} + +sub new_map { + my ($startsrc,$starttitle,$endsrc,$endtitle) = @_; + my $newmapstr = ' + + + + + +'; + return $newmapstr; +} + +sub parm_setter { + my ($navmap,$cdom,$url,$groupname) = @_; + my %parmresult; + my %hide_settings = ( + 'course' => { + 'num' => 13, + 'set' => 'yes', + }, + 'group' => { + 'num' => 5, + 'set' => 'no', + 'extra' => $groupname, + }, + ); + my $res = $navmap->getResourceByUrl($url); + my $symb = $res->symb(); + foreach my $level (keys(%hide_settings)) { + $parmresult{$level} = &Apache::lonparmset::storeparm_by_symb($symb, + '0_hiddenresource', + $hide_settings{$level}{'num'}, + $hide_settings{$level}{'set'}, + 'string_yesno',undef,$cdom, + undef,undef, + $hide_settings{$level}{'extra'}); + } + return %parmresult; +} + sub create_homepage { - my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm) = @_; + my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm,$now) = @_; my $functionality = join(',',@{$tools}); my $content = &unescape($$groupinfo{description}); $content=~s/\s+$//s; @@ -3592,7 +3746,7 @@ sub create_homepage { 'abb_links' => $functionality, 'bbb_content' => $content, 'ccc_webreferences' => '', - 'uploaded.lastmodified' => time, + 'uploaded.lastmodified' => $now, ); my $putresult = &Apache::lonnet::put('grppage_'.$name,\%pageinfo,$cdom,$cnum); return $putresult;