--- loncom/interface/loncoursegroups.pm 2005/11/22 00:01:41 1.4 +++ loncom/interface/loncoursegroups.pm 2006/02/18 01:27:07 1.5 @@ -51,8 +51,7 @@ sub handler { } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['action','refpage']); - + ['action','refpage','state','groupname','branch']); my $function = &Apache::loncommon::get_users_function(); my $tabcol = &Apache::loncommon::designparm($function.'.tabbg'); my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -62,7 +61,6 @@ sub handler { &Apache::lonnet::allowed('vcg',$env{'request.course.id'}); my $manage_permission = &Apache::lonnet::allowed('mdg',$env{'request.course.id'}); - &Apache::lonhtmlcommon::clear_breadcrumbs(); my %functions = ( @@ -80,49 +78,67 @@ sub handler { $idx{udom} = &Apache::loncoursedata::CL_SDOM(); $idx{uname} = &Apache::loncoursedata::CL_SNAME(); + my $rowColor1 = "#dddddd"; + my $rowColor2 = "#eeeeee"; + my $action = $env{'form.action'}; if ($action eq 'create' || $action eq 'modify' || $action eq 'view') { if ($view_permission || $manage_permission) { &group_administration($r,$action,$cdom,$cnum,$function,$tabcol, - \%functions,\%idx,$view_permission,$manage_permission); + \%functions,\%idx,$view_permission, + $manage_permission,$rowColor1,$rowColor2); } else { $r->print('You do not have group administration '. 'privileges in this course'); } } else { &print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx, - $view_permission,$manage_permission); + $view_permission,$manage_permission,$action, + $rowColor1,$rowColor2); } return OK; } sub print_main_menu { my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission, - $manage_permission) - = @_; + $manage_permission,$action,$rowColor1,$rowColor2) = @_; $r->print(&header('Course Groups',&mt('LON-CAPA Course Groups'), - undef,undef,undef,$function)); + undef,undef,undef,undef,$function)); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/coursegroups", text=>"Course Groups",}); $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,'Course Groups')); + (undef,'Course Groups')); &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, - $view_permission,$manage_permission); + $view_permission,$manage_permission,$action,$rowColor1, + $rowColor2); $r->print(&footer()); return; } sub display_groups { my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission, - $manage_permission) = @_; + $manage_permission,$action,$rowColor1,$rowColor2) = @_; my %curr_groups = (); my %grp_info = (); - my $rowColor1 = "#dddddd"; - my $rowColor2 = "#eeeeee"; + my %actionlinks = ( + modify => ' ' - View Modify'.$group.''.$description.''.$creator.''. &Apache::lonnavmaps::timeToHumanString($creation).''. &Apache::lonnavmaps::timeToHumanString($modified).''.$functionality.''.$quota.''.$totalmembers.''.$totalfiles.''.$boards.''.$diskuse.''); + my $link = $actionlinks{$action}; + if ($action eq 'modify' || $action eq 'delete') { + $link .= $group; + } else { + $link .= $group.'/grppg?register=1'; + } + $link .= '">'.$actiontext{$action}.''; + $r->print(''.$link.''.$group.''.$description.''.$creator.''. &Apache::lonnavmaps::timeToHumanString($creation).''. &Apache::lonnavmaps::timeToHumanString($modified).''.$functionality.''.$quota.''.$totalmembers.''.$totalfiles.''.$boards.''.$diskuse.''); $rowNum ++; } } @@ -226,9 +248,9 @@ END if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) { foreach my $group (@coursegroups) { my %group_info = &Apache::loncommon::get_group_settings( - $curr_groups{$group}); + $curr_groups{$group}); my $description = &Apache::lonnet::unescape( - $group_info{description}); + $group_info{description}); my ($uname,$udom) = split(/:/,$group_info{creator}); $r->print(''.$group,'
'.$description.'

'); } @@ -242,7 +264,7 @@ END sub group_administration { my ($r,$action,$cdom,$cnum,$function,$tabcol,$functions,$idx, - $view_permission,$manage_permission) = @_; + $view_permission,$manage_permission,$rowColor1,$rowColor2) = @_; my %sectioncount = (); my @tools = (); my @types = (); @@ -252,29 +274,87 @@ sub group_administration { my %userdata = (); my @members = (); my %usertools = (); - + my %stored = (); + my %memchg; + my @member_changes = ('delete','expire','activate','reenable', + 'changefunc','changepriv'); my $state = $env{'form.state'}; - my ($groupname,$description,$startdate,$enddate); + my ($groupname,$description,$startdate,$enddate,$granularity,$specificity); - if ($action eq 'create') { + if (defined($env{'form.groupname'})) { + $groupname = $env{'form.groupname'}; + } + + if (($action eq 'create') && ($state eq '')) { + $state = 'pick_name'; + } + if (($action eq 'create') || + (($action eq 'modify') && ($state eq 'chgresult'))) { + ($startdate,$enddate) = &get_dates_from_form(); + if (defined($env{'form.description'})) { + $description = $env{'form.description'}; + } + if (defined($env{'form.tool'})) { + @tools=&Apache::loncommon::get_env_multiple('form.tool'); + } + if (defined($env{'form.granularity'})) { + $granularity=$env{'form.granularity'}; + } + if (defined($env{'form.specificity'})) { + $specificity=$env{'form.specificity'}; + } + + } + if (($action eq 'create') || (($action eq 'modify') + && (($state eq 'pick_privs') || ($state eq 'addresult')))) { + if (defined($env{'form.member'})) { + @members = &Apache::loncommon::get_env_multiple('form.member'); + foreach my $user (@members) { + %{$usertools{$user}} = (); + } + } + } + + if (($action eq 'modify') && (($state eq 'change_privs') || ($state eq 'memresult'))) { + foreach my $chg (@member_changes) { + if (defined($env{'form.'.$chg})) { + @{$memchg{$chg}} = &Apache::loncommon::get_env_multiple('form.'.$chg); + } + } + &check_changes(\@member_changes,\%memchg); + foreach my $change (@member_changes) { + if (($change eq 'delete') || ($change eq 'expire')) { + next; + } + foreach my $user (@{$memchg{$change}}) { + %{$usertools{$user}} = (); + } + } + } + + if ($action eq 'modify') { if ($state eq '') { - $state = 'pick_name'; + $state = 'pick_group'; } else { - ($startdate,$enddate) = &get_dates_from_form(); - if (defined($env{'form.groupname'})) { - $groupname = $env{'form.groupname'}; - } - if (defined($env{'form.description'})) { - $description = $env{'form.description'}; - } - if (defined($env{'form.tool'})) { - @tools=&Apache::loncommon::get_env_multiple('form.tool'); - } - if (defined($env{'form.member'})) { - @members = &Apache::loncommon::get_env_multiple('form.member'); - foreach my $user (@members) { - %{$usertools{$user}} = (); + %stored = &retrieve_settings($cdom,$cnum,$groupname); + if (ref($stored{'types'}) eq 'ARRAY') { + @types = @{$stored{'types'}}; + } + if (ref($stored{'roles'}) eq 'ARRAY') { + @roles = @{$stored{'roles'}}; + } + if (ref($stored{'sectionpick'}) eq 'ARRAY') { + @sections = @{$stored{'sectionpick'}}; + } + unless ($state eq 'chgresult') { + if (ref($stored{'tool'}) eq 'ARRAY') { + @tools = @{$stored{'tool'}}; } + $startdate = $stored{'startdate'}; + $enddate = $stored{'enddate'}; + $description = $stored{'description'}; + $granularity = $stored{'granularity'}; + $specificity = $stored{'specificity'}; } } } @@ -322,8 +402,6 @@ sub group_administration { startdate_hour => 'selectbox', enddate_month => 'selectbox', enddate_hour => 'selectbox', - types => 'selectbox', - roles => 'selectbox', startdate_day => 'text', startdate_year => 'text', startdate_minute => 'text', @@ -338,19 +416,47 @@ sub group_administration { granularity => 'radio', no_end_date => 'checkbox', ); + %{$elements{'modify'}{'change_settings'}} = ( + %{$elements{'create'}{'pick_name'}}, + specificity => 'radio', + defpriv => 'checkbox', + autorole => 'checkbox', + autoadd => 'radio', + autodrop => 'radio', + ); + if (ref($stored{'autorole'}) eq 'ARRAY') { + foreach my $role (@{$stored{'autorole'}}) { + $elements{'modify'}{'change_settings'}{'sec_'.$role} = 'selectbox'; + } + } %{$elements{'create'}{'pick_members'}} = ( member => 'checkbox', + defpriv => 'checkbox', + ); + + %{$elements{'modify'}{'add_members'}} = ( + types => 'selectbox', + roles => 'selectbox', ); + if (($action eq 'create') && ($state eq 'pick_name')) { + $elements{'create'}{'pick_name'}{'types'} = 'selectbox'; + $elements{'create'}{'pick_name'}{'roles'} = 'selectbox'; + } + if ((($action eq 'create') && + (($state eq 'pick_name') || ($state eq 'pick_privs'))) || + (($action eq 'modify') && (($state eq 'change_settings') || + ($state eq 'add_members')))) { my $numsections = &Apache::loncommon::get_sections($cdom,$cnum, - \%sectioncount); + \%sectioncount); if ($numsections > 0) { $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox'; + $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox'; + $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox'; } } - - if (($action eq 'create') && (($state eq 'pick_members') || - ($state eq 'pick_privs'))) { + + if ($action eq 'create') { if (defined($env{'form.types'})) { @types=&Apache::loncommon::get_env_multiple('form.types'); } @@ -363,20 +469,24 @@ sub group_administration { @sections = sort {$a cmp $b} keys(%sectioncount); } } + } + + if (($state eq 'pick_members') || ($state eq 'pick_privs')) { &build_members_list($cdom,$cnum,\@types,\@roles, - \@sections,\%users,\%userdata); + \@sections,\%users,\%userdata); if ((keys(%users) > 0) && (@tools > 0)) { foreach my $tool (@tools) { - if ($env{'form.granularity'} eq 'Yes') { - $elements{'create'}{'pick_members'}{'user_'.$tool} = 'checkbox'; + if ($granularity eq 'Yes') { + $elements{$action}{'pick_members'}{'user_'.$tool} = 'checkbox'; } } - $elements{'create'}{'pick_members'}{'specificity'} = 'radio'; + $elements{$action}{'pick_members'}{'specificity'} = 'radio'; } } - if (($action eq 'create') && (($state eq 'pick_privs') || (($state eq 'result') && - ($env{'form.specificity'} eq 'No')))) { + if (($state eq 'pick_privs') || ($state eq 'change_privs') || + (($specificity eq 'No') && + (($state eq 'result') || ($state eq 'memresult')))) { foreach my $tool (@tools) { my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool); foreach my $user (@values) { @@ -385,13 +495,13 @@ sub group_administration { } } } - if (($state eq 'pick_privs') && ($env{'form.specificity'} eq 'Yes')) { - foreach my $member (@members) { - foreach my $tool (keys(%{$usertools{$member}})) { + if ((($state eq 'pick_privs') || ($state eq 'change_privs')) + && ($specificity eq 'Yes')) { + foreach my $user (sort(keys(%usertools))) { + foreach my $tool (keys(%{$usertools{$user}})) { foreach my $priv (keys(%{$toolprivs{$tool}})) { unless (exists($fixedprivs{$tool}{$priv})) { - $elements{'create'}{'pick_privs'}{'userpriv_'.$priv} = - 'checkbox'; + $elements{$action}{$state}{'userpriv_'.$priv} = 'checkbox'; } } } @@ -399,10 +509,7 @@ sub group_administration { } } - my $jscript; - if ($env{'form.action'} eq 'create') { - $jscript = &Apache::loncommon::check_uncheck_jscript(); - } + my $jscript = &Apache::loncommon::check_uncheck_jscript(); $jscript .= qq| function nextPage(formname,nextstate) { formname.state.value= nextstate; @@ -414,14 +521,38 @@ function backPage(formname,prevstate) { } |; - $jscript .= &Apache::lonhtmlcommon::set_form_elements( - \%{$elements{$action}{$state}}); - + \%{$elements{$action}{$state}},\%stored); + my $page = 0; + my %states = (); + my %branchstates = (); + @{$states{'create'}} = ('pick_name','pick_members','pick_privs','result'); + @{$states{'modify'}} = ('pick_group','pick_task'); + @{$branchstates{'noprivs'}} = ('result'); + @{$branchstates{'settings'}} = ('change_settings','chgresult'); + @{$branchstates{'members'}} = ('change_members','change_privs','memresult'); + @{$branchstates{'adds'}} = ('add_members','pick_members','pick_privs', + 'addresult'); + + if (defined($env{'form.branch'})) { + push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}}); + } + + if (($action eq 'create') || ($action eq 'modify')) { + my $done = 0; + my $i=0; + while ($i<@{$states{$action}} && !$done) { + if ($states{$action}[$i] eq $state) { + $page = $i; + $done = 1; + } + $i++; + } + } my $loaditems = &onload_action($action,$state); $r->print(&header('Course Groups Manager',&mt('LON-CAPA Groups Manager'), - $jscript,$action,$state,$function,$loaditems)); + $jscript,$action,$state,$page,$function,$loaditems)); if ($env{'form.refpage'} eq 'enrl') { &Apache::lonhtmlcommon::add_breadcrumb @@ -435,19 +566,35 @@ function backPage(formname,prevstate) { faq=>9,bug=>'Instructor Interface',}); } - my %states = (); - @{$states{'create'}} = ('pick_name','pick_members','pick_privs','result'); - @{$states{'modify'}} = (); - my %trail = (); - %{$trail{'create'}} = ( + %{$trail{'create'}} = &Apache::lonlocal::texthash ( pick_name => 'Group Settings', pick_members => 'Select Members', pick_privs => 'Choose Privileges', result => 'Creation Complete', ); - %{$trail{'modify'}} = (); - + %{$trail{'modify'}} = &Apache::lonlocal::texthash( + pick_group => 'Groups', + pick_task => 'Choose Task', + change_settings => 'Group Settings', + change_members => 'Modify/Delete Members', + change_privs => 'Change Privileges', + change_mapping => 'Membership Mapping', + add_members => 'Add Members', + pick_members => 'Select Members', + pick_privs => 'Choose Privileges', + chgresult => 'Setting Changes Complete', + memresult => 'Modifications Complete', + addresult => 'Additions Complete', + ); + my %navbuttons = &Apache::lonlocal::texthash( + gtns => 'Go to next step', + gtps => 'Go to previous step', + crgr => 'Create group', + mose => 'Modify settings', + gtpp => 'Go to previous page', + adme => 'Add members', + ); if ((($action eq 'create') || ($action eq 'modify')) && ($manage_permission)) { for (my $i=0; $i<@{$states{$action}}; $i++) { @@ -456,13 +603,16 @@ function backPage(formname,prevstate) { {text=>"$trail{$action}{$state}"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs (undef,'Course Groups Manager')); - &display_control($r,$cdom,$cnum,$tabcol,$action,$state, - \%sectioncount,$groupname,$description,$functions, - \@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate, - \%users,\%userdata,$idx,\@members,\%usertools); + &display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page, + \%sectioncount,$groupname,$description,$functions, + \@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate, + \%users,\%userdata,$idx,\%memchg,\%usertools, + $function,$view_permission,$manage_permission, + \%stored,$granularity,$specificity,\@types,\@roles, + \@sections,\%states,\%navbuttons,$rowColor1,$rowColor2); last; } else { - if ($state eq 'result' && $i > 0) { + if (($state =~ /^\w+result$/) && ($i > 0)) { &Apache::lonhtmlcommon::add_breadcrumb( {href=>"javascript:backPage(document.$state,'$states{$action}[0]')", text=>"$trail{$action}{$states{$action}[$i]}"}); @@ -479,39 +629,159 @@ function backPage(formname,prevstate) { $r->print(&Apache::lonhtmlcommon::breadcrumbs (undef,'Course Groups Manager')); &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, - $view_permission,$manage_permission); + $view_permission,$manage_permission,$action, + $rowColor1,$rowColor2); } $r->print(&footer()); return; } +sub retrieve_settings { + my ($cdom,$cnum,$groupname) = @_; + my %groupinfo; + my %stored; + my %curr_groups; + my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom, + $cnum,$groupname); + if ($numgroups > 0) { + %groupinfo = &Apache::loncommon::get_group_settings( + $curr_groups{$groupname}); + $stored{'description'} = &Apache::lonnet::unescape( + $groupinfo{'description'}); + $stored{'startdate'} = $groupinfo{'startdate'}; + $stored{'enddate'} = $groupinfo{'enddate'}; + if ($stored{'enddate'} == 0) { + $stored{'no_end_date'} = 1; + } + $stored{'granularity'} = $groupinfo{'granularity'}; + $stored{'specificity'} = $groupinfo{'specificity'}; + $stored{'creation'} = $groupinfo{'creation'}; + $stored{'creator'} = $groupinfo{'creator'}; + + foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) { + if ($groupinfo{functions}{$tool} eq 'on') { + push(@{$stored{tool}},$tool); + } + } + foreach my $role (@{$groupinfo{'roles'}}) { + push(@{$stored{roles}},$role); + } + foreach my $type (@{$groupinfo{'types'}}) { + push(@{$stored{types}},$type); + } + foreach my $section (@{$groupinfo{'sectionpick'}}) { + push(@{$stored{sectionpick}},$section); + } + foreach my $defpriv (@{$groupinfo{'defpriv'}}) { + push(@{$stored{defpriv}},$defpriv); + } + $stored{'autoadd'} = $groupinfo{'autoadd'}; + $stored{'autodrop'} = $groupinfo{'autodrop'}; + if (exists($groupinfo{'autosec'})) { + foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) { + foreach my $section (@{$groupinfo{'autosec'}{$role}}) { + push (@{$stored{'sec_'.$role}},$section); + } + if (@{$groupinfo{'autosec'}{$role}} > 0) { + push(@{$stored{'autorole'}},$role); + } + } + } + } + return %stored; +} + sub display_control { - my ($r,$cdom,$cnum,$tabcol,$action,$state,$sectioncount,$groupname, + my ($r,$cdom,$cnum,$tabcol,$action,$state,$page,$sectioncount,$groupname, $description,$functions,$tools,$toolprivs,$fixedprivs,$startdate, - $enddate,$users,$userdata,$idx,$members,$usertools) = @_; + $enddate,$users,$userdata,$idx,$memchg,$usertools,$function, + $view_permission,$manage_permission,$stored,$granularity,$specificity, + $types,$roles,$sections,$states,$navbuttons,$rowColor1,$rowColor2)=@_; if ($action eq 'create') { if ($state eq 'pick_name') { - &first_creation_form($r,$cdom,$cnum,$tabcol,$state,$functions, - $sectioncount); + &general_settings_form($r,$cdom,$cnum,$action,$tabcol,$state,$page, + $functions,$tools,$toolprivs,$fixedprivs, + $sectioncount,$stored,$states,$navbuttons, + $rowColor1,$rowColor2); } elsif ($state eq 'pick_members') { - &second_creation_form($r,$cdom,$cnum,$tabcol,$state,$groupname, - $description,$startdate,$enddate,$tools, - $functions,$users,$userdata,$idx); + &choose_members_form($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $groupname,$description,$granularity, + $startdate,$enddate,$tools,$fixedprivs, + $toolprivs,$functions,$users,$userdata,$idx, + $stored,$states,$navbuttons,$rowColor1, + $rowColor2); } elsif ($state eq 'pick_privs') { - &third_creation_form($r,$cdom,$cnum,$tabcol,$state,$startdate, - $enddate,$tools,$functions,$toolprivs,$fixedprivs, - $userdata,$members,$usertools,$idx); + &choose_privs_form($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $startdate,$enddate,$tools,$functions, + $toolprivs,$fixedprivs,$userdata,$usertools, + $idx,$states,$stored,$sectioncount,$navbuttons, + $rowColor1,$rowColor2); } elsif ($state eq 'result') { - &completed_creation($r,$cdom,$cnum,$tabcol,$state,$groupname, - $description,$userdata,$startdate,$enddate,$tools, - $functions,$toolprivs,$members,$usertools,$idx); + &process_request($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $groupname,$description,$specificity,$userdata, + $startdate,$enddate,$tools,$functions, + $toolprivs,$usertools,$idx,$types,$roles, + $sections,$states,$navbuttons,$memchg, + $sectioncount,$stored,$rowColor1,$rowColor2); + } + } elsif ($action eq 'modify') { + my $groupname = $env{'form.groupname'}; + if ($state eq 'pick_group') { + &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, + $view_permission,$manage_permission,$action, + $rowColor1,$rowColor2); + } elsif ($state eq 'pick_task') { + &modify_menu($r,$groupname,$page); + } elsif ($state eq 'change_settings') { + &general_settings_form($r,$cdom,$cnum,$action,$tabcol,$state,$page, + $functions,$tools,$toolprivs,$fixedprivs, + $sectioncount,$stored,$states,$navbuttons, + $rowColor1,$rowColor2); + } elsif ($state eq 'change_members') { + &change_members_form($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $groupname,$description,$startdate,$enddate, + $tools,$fixedprivs,$functions,$users, + $userdata,$granularity,$specificity,$idx, + $states,$navbuttons,$rowColor1,$rowColor2); + } elsif ($state eq 'add_members') { + &add_members_form($r,$tabcol,$action,$state,$page,$startdate, + $enddate,$groupname,$description,$granularity, + $sectioncount,$tools,$functions,$stored,$states, + $navbuttons,$rowColor1,$rowColor2); + } elsif ($state eq 'pick_members') { + &choose_members_form($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $groupname,$description,$granularity, + $startdate,$enddate,$tools,$fixedprivs, + $toolprivs,$functions,$users,$userdata,$idx, + $stored,$states,$navbuttons,$rowColor1, + $rowColor2); + } elsif ($state eq 'pick_privs') { + &choose_privs_form($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $startdate,$enddate,$tools,$functions, + $toolprivs,$fixedprivs,$userdata,$usertools, + $idx,$states,$stored,$sectioncount,$navbuttons, + $rowColor1,$rowColor2); + } elsif ($state eq 'change_privs') { + &change_privs_form($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $startdate,$enddate,$tools,$functions, + $toolprivs,$fixedprivs,$userdata,$usertools, + $memchg,$idx,$states,$stored,$sectioncount, + $navbuttons,$rowColor1,$rowColor2) = @_; + } elsif ($state eq 'chgresult' || $state eq 'memresult' || + $state eq 'addresult') { + &process_request($r,$cdom,$cnum,$tabcol,$action,$state,$page, + $groupname,$description,$specificity,$userdata, + $startdate,$enddate,$tools,$functions, + $toolprivs,$usertools,$idx,$types,$roles, + $sections,$states,$navbuttons,$memchg, + $sectioncount,$stored,$rowColor1,$rowColor2); } } } sub header { - my ($bodytitle,$title,$jscript,$action,$state,$function,$loaditems) = @_; + my ($bodytitle,$title,$jscript,$action,$state,$page,$function,$loaditems) = @_; my $html=&Apache::lonxml::xmlbegin(); my $bodytag=&Apache::loncommon::bodytag($bodytitle,$function,$loaditems); my $output = <<"END"; @@ -531,6 +801,7 @@ END + END } return $output; @@ -547,6 +818,12 @@ sub onload_action { 'onload="javascript:setFormElements(document.'.$state.')"'; } } + if (($action eq 'modify') && + ($state eq 'change_settings' || $state eq 'change_members' || + $state eq 'change_privs') || $state eq 'add_members') { + $loaditems = + 'onload="javascript:setFormElements(document.'.$state.')"'; + } return $loaditems; } @@ -568,7 +845,7 @@ sub build_members_list { $access{$type} = $type; } &Apache::loncommon::get_course_users($cdom,$cnum,\%access,$roles, - $sections,$users,$userdata); + $sections,$users,$userdata); return; } @@ -610,85 +887,92 @@ sub group_members { } -sub first_creation_form { - my ($r,$cdom,$cnum,$tabcol,$formname,$functions,$sectioncount) = @_; +sub general_settings_form { + my ($r,$cdom,$cnum,$action,$tabcol,$formname,$page,$functions,$tools, + $toolprivs,$fixedprivs,$sectioncount,$stored,$states,$navbuttons, + $rowColor1,$rowColor2) = @_; + my ($nexttext,$prevtext); + $r->print('
+ +'); + &groupsettings_options($r,$tabcol,$functions,$action,$formname,$stored,1); + $r->print(' + + + '); + &access_date_settings($r,$tabcol,$action,$formname,$stored,2); + $r->print(' + + + '); + if ($action eq 'create') { + &membership_options($r,$action,$formname,$tabcol,$sectioncount,3); + $nexttext = $$navbuttons{'gtns'}; + } else { + my @available = (); + my @unavailable = (); + &check_tools($functions,$tools,\@available,\@unavailable); + @{$tools} = sort(keys(%{$functions})); + &privilege_specificity($r,$tabcol,$rowColor1,$rowColor2,$action, + 3,$tools,$stored,$toolprivs,$fixedprivs, + \@available,$formname); + $r->print(' + + + '); + &mapping_options($r,$action,$formname,$page,$tabcol,$sectioncount, + $states,$stored,$navbuttons,4,5,$rowColor1, + $rowColor2); + $nexttext = $$navbuttons{'mose'}; + } + $prevtext = $$navbuttons{'gtpp'}; + &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, + $$states{$action}[$page+1],$nexttext); + $r->print(' +
 
 
 
'); + return; +} + +sub groupsettings_options { + my ($r,$tabcol,$functions,$action,$formname,$stored,$image) = @_; my %lt = &Apache::lonlocal::texthash( - 'gmem' => 'Group membership options', - 'picr' => 'Pick the criteria to use to build a list of course users '. - 'from which you will select members of the new group', 'gdat' => 'Group open and close dates', 'sten' => 'Set a start date/time and end date/time for the group', - 'acty' => 'Access types', - 'coro' => 'Course roles', - 'cose' => 'Course sections', 'gfun' => 'Group functionality', + 'gnde' => 'Group name, description and available functionality', + 'desc' => 'Description', + 'func' => 'Functionality', + 'gnam' => 'Group Name', + 'doyo' => 'Do you want to assign different functionality '. + 'to different group members?', ); - - my %status_types = ( - active => &mt('Currently has access'), - previous => &mt('Previously had access'), - future => &mt('Will have future access'), - ); - - my @roles = ('st','cc','in','ta','ep','cr'); - - my $starttime = time; - my $endtime = time+(6*30*24*60*60); # 6 months from now, approx - my ($start_table,$end_table) = &date_setting_table - ($starttime,$endtime,$formname); - - my @sections = (); - my $section_sel = ''; - my $numvisible = 4; - - @sections = sort {$a cmp $b} keys(%{$sectioncount}); - if (@sections > 0) { - unshift(@sections,'_all'); # Put 'all' at the front of the list - if (@sections < 4) { - $numvisible = @sections; - } - foreach (@sections) { - if ($_ eq '_all') { - $section_sel .= '