--- loncom/interface/loncoursegroups.pm 2006/06/29 17:01:26 1.30
+++ 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.30 2006/06/29 17:01:26 albertel Exp $
+# $Id: loncoursegroups.pm,v 1.32 2006/06/30 08:14:31 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -89,6 +89,7 @@ sub handler {
$idx{fullname} = &Apache::loncoursedata::CL_FULLNAME();
$idx{udom} = &Apache::loncoursedata::CL_SDOM();
$idx{uname} = &Apache::loncoursedata::CL_SNAME();
+ $idx{section} = &Apache::loncoursedata::CL_SECTION();
my $rowColor1 = "#dddddd";
my $rowColor2 = "#eeeeee";
@@ -1402,8 +1403,8 @@ sub membership_options {
$r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
- unshift(@sections,'all'); # Put 'all' at the front of the list
unshift(@sections,'none'); # Put 'no sections' next
+ unshift(@sections,'all'); # Put 'all' at the front of the list
$r->print('
'.
$fullname.' '.$uname.' '.
- $udom.' '.$id.' ');
+ $udom.''.$id.' '.
+ ''.$section.' ');
if (@{$available} > 0) {
$r->print(''.
' ');
@@ -3044,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));
@@ -3572,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;
@@ -3586,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;