--- loncom/interface/loncoursegroups.pm 2005/10/27 23:42:17 1.2
+++ loncom/interface/loncoursegroups.pm 2006/07/07 21:04:57 1.47
@@ -1,3 +1,6 @@
+# The LearningOnline Network with CAPA
+#
+# $Id: loncoursegroups.pm,v 1.47 2006/07/07 21:04:57 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,208 +32,3552 @@ use Apache::lonnet;
use Apache::loncommon;
use Apache::lonhtmlcommon;
use Apache::lonlocal;
+use Apache::lonnavmaps;
+use Apache::longroup;
+use Apache::portfolio;
use Apache::Constants qw(:common :http);
+use lib '/home/httpd/lib/perl/';
+use LONCAPA;
sub handler {
my ($r) = @_;
+
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
-
+
if ($r->header_only) {
return OK;
}
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['action','state']);
-
- $r->print(&header());
-
- &Apache::lonhtmlcommon::clear_breadcrumbs();
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/groups",
- text=>"Group Management",
- faq=>9,bug=>'Instructor Interface',});
# Needs to be in a course
if (! ($env{'request.course.fn'})) {
# Not in a course
$env{'user.error.msg'}=
- "/adm/groups:mdg:0:0:Cannot create, modify or delete course groups";
+ "/adm/coursegroups:mdg:0:0:Cannot edit or view course groups";
return HTTP_NOT_ACCEPTABLE;
}
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['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'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+
my $view_permission =
- &Apache::lonnet::allowed('vcg',$env{'request.course.id'});
+ &Apache::lonnet::allowed('vcg',$env{'request.course.id'});
my $manage_permission =
- &Apache::lonnet::allowed('mdg',$env{'request.course.id'});
+ &Apache::lonnet::allowed('mdg',$env{'request.course.id'});
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
- if (! exists($env{'form.action'})) {
- $r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Course Group Manager'));
- &print_main_menu($r,$manage_permission,$view_permission);
- } elsif ($env{'form.action'} eq 'create' && $manage_permission) {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>'/adm/coursegroups?action=create&state=',
- text=>"Create Group"});
- $r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Create Group','Course_Create_Group'));
- if (! exists($env{'form.state'})) {
- &first_creation_form($r);
- } elsif ($env{'form.state'} eq 'pick_members') {
- &second_creation_form($r);
- } elsif ($env{'form.state'} eq 'complete') {
- &completed_creation($r);
+ my $gpterm = &Apache::loncommon::group_term();
+ my $ucgpterm = $gpterm;
+ $ucgpterm =~ s/^(\w)/uc($1)/e;
+ my $crstype = &Apache::loncommon::course_type();
+
+ my %functions = (
+ email => 'E-mail',
+ discussion => 'Discussion boards',
+ chat => 'Chat',
+ files => 'File repository',
+ roster => 'Membership roster',
+ homepage => $ucgpterm.' home page',
+ );
+
+ my %idx = ();
+ $idx{id} = &Apache::loncoursedata::CL_ID();
+ $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";
+
+ my $action = $env{'form.action'};
+ my $state = $env{'form.state'};
+ if ((!defined($action)) || ($action eq 'view')) {
+ if (!defined($state)) {
+ $state = 'view';
+ }
+ }
+ if ($action eq 'create' || $action eq 'modify' || $action eq 'view') {
+ if ($view_permission || $manage_permission) {
+ &group_administration($r,$action,$state,$cdom,$cnum,
+ $tabcol,\%functions,\%idx,$view_permission,
+ $manage_permission,$rowColor1,$rowColor2,
+ $gpterm,$ucgpterm,$crstype);
} else {
- &first_creation_form($r);
+ $r->print(&mt('You do not have [_1] administration '.
+ 'privileges in this [_2]',$gpterm,lc($crstype)));
}
+ } else {
+ &print_main_menu($r,$cdom,$cnum,\%functions,\%idx,$view_permission,
+ $manage_permission,$action,$state,$gpterm,$ucgpterm,
+ $crstype);
}
- $r->print(&footer());
return OK;
}
-sub header {
- my $html=&Apache::lonxml::xmlbegin();
- my $bodytag=&Apache::loncommon::bodytag('Course Groups Manager');
- my $title = &mt('LON-CAPA Groups Manager');
- return(<
-$title
-
-$bodytag
-
'.$/;
}
- $r->print($menu_html);
return;
}
+sub group_administration {
+ my ($r,$action,$state,$cdom,$cnum,$tabcol,$functions,$idx,
+ $view_permission,$manage_permission,$rowColor1,$rowColor2,$gpterm,
+ $ucgpterm,$crstype) = @_;
+ my %sectioncount = ();
+ my @tools = ();
+ my @types = ();
+ my @roles = ();
+ my @sections = ();
+ my %users = ();
+ my %userdata = ();
+ my @members = ();
+ my %usertools = ();
+ my %stored = ();
+ my %memchg;
+ my @member_changes = ('deletion','expire','activate','reenable',
+ 'changefunc','changepriv');
+ my ($groupname,$description,$startdate,$enddate,$granularity,$specificity,
+ $quota,$validate_script);
+
+ 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 (defined($env{'form.quota'})) {
+ $quota=$env{'form.quota'};
+ }
+ }
+ 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') {
+ if ($state eq '') {
+ if (defined($env{'form.groupname'})) {
+ $state = 'pick_task';
+ } else {
+ $state = 'pick_group';
+ }
+ } else {
+ %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'};
+ $quota = $stored{'quota'};
+ }
+ }
+ }
+
+ my $toolprivs = &Apache::longroup::get_tool_privs($gpterm);
+
+ my $fixedprivs = &Apache::longroup::get_fixed_privs();
+
+ my %elements =
+ (
+ create => {
+ pick_name => {
+ startdate_month => 'selectbox',
+ startdate_hour => 'selectbox',
+ enddate_month => 'selectbox',
+ enddate_hour => 'selectbox',
+ startdate_day => 'text',
+ startdate_year => 'text',
+ startdate_minute => 'text',
+ startdate_second => 'text',
+ enddate_day => 'text',
+ enddate_year => 'text',
+ enddate_minute => 'text',
+ enddate_second => 'text',
+ groupname => 'text',
+ description => 'text',
+ quota => 'text',
+ tool => 'checkbox',
+ granularity => 'radio',
+ no_end_date => 'checkbox',
+ },
+ pick_members => {
+ member => 'checkbox',
+ defpriv => 'checkbox',
+ },
+ },
+ );
+
+ $elements{'modify'} = {
+ change_settings => {
+ %{$elements{'create'}{'pick_name'}},
+ specificity => 'radio',
+ defpriv => 'checkbox',
+ autorole => 'checkbox',
+ autoadd => 'radio',
+ autodrop => 'radio',
+ },
+ add_members => {
+ types => 'selectbox',
+ roles => 'selectbox',
+ },
+ };
+
+ if (ref($stored{'autorole'}) eq 'ARRAY') {
+ foreach my $role (@{$stored{'autorole'}}) {
+ unless ($role eq 'cc') {
+ $elements{'modify'}{'change_settings'}{'sec_'.$role} =
+ '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')))) {
+ %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
+ if (%sectioncount) {
+ $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
+ $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
+ $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
+ }
+ }
+
+ if (($action eq 'create') ||
+ ($action eq 'modify' && $state eq 'pick_members')) {
+ if (defined($env{'form.types'})) {
+ @types=&Apache::loncommon::get_env_multiple('form.types');
+ }
+ if (defined($env{'form.roles'})) {
+ @roles=&Apache::loncommon::get_env_multiple('form.roles');
+ }
+ if (defined($env{'form.sectionpick'})) {
+ @sections=&Apache::loncommon::get_env_multiple('form.sectionpick');
+ if (grep/^all$/,@sections) {
+ @sections = sort {$a cmp $b} keys(%sectioncount);
+ }
+ }
+ }
+
+ if (($state eq 'pick_members') || ($state eq 'pick_privs') || ($state eq 'change_privs')) {
+ &build_members_list($cdom,$cnum,\@types,\@roles,\@sections,\%users,
+ \%userdata);
+ }
+ if ($state eq 'pick_members') {
+ if ((keys(%users) > 0) && (@tools > 0)) {
+ if ($granularity eq 'Yes') {
+ $elements{$action}{'pick_members'}{'togglefunc'} = 'checkbox';
+ }
+ foreach my $tool (@tools) {
+ if ($granularity eq 'Yes') {
+ $elements{$action}{'pick_members'}{'user_'.$tool} = 'checkbox';
+ }
+ }
+ $elements{$action}{'pick_members'}{'specificity'} = 'radio';
+ }
+ }
+ if ($state eq 'change_members') {
+ my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
+ $groupname);
+ my $now = time;
+ my $num_expire = 0;
+ my $num_activate = 0;
+ my $num_reenable = 0;
+ my $num_deletion = 0;
+ my $numusers = 0;
+ foreach my $key (sort(keys(%membership))) {
+ if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) {
+ my $user = $1;
+ my($end,$start,@userprivs) = split(/:/,$membership{$key});
+ unless ($start == -1) {
+ $numusers ++;
+ $num_deletion ++;
+ if (($end > 0) && ($end < $now)) {
+ $num_reenable ++;
+ next;
+ } elsif (($start > $now)) {
+ $num_activate = 1;
+ next;
+ } else {
+ $num_expire ++;
+ next;
+ }
+ next;
+ }
+ if ($num_reenable && $num_activate && $num_expire) {
+ last;
+ }
+ }
+ }
+ if ($num_deletion) {
+ $elements{$action}{'change_members'}{'deletion'} = 'checkbox';
+ }
+ if ($num_expire) {
+ $elements{$action}{'change_members'}{'expire'} = 'checkbox';
+ }
+ if ($num_activate) {
+ $elements{$action}{'change_members'}{'activate'} = 'checkbox';
+ }
+ if ($num_reenable) {
+ $elements{$action}{'change_members'}{'reenable'} = 'checkbox';
+ }
+ if ($numusers) {
+ if ($granularity eq 'Yes') {
+ $elements{$action}{'change_members'}{'togglefunc'} = 'checkbox';
+ }
+ foreach my $tool (@tools) {
+ if ($granularity eq 'Yes') {
+ $elements{$action}{'change_members'}{'user_'.$tool} = 'checkbox';
+ }
+ }
+ if ($specificity eq 'Yes') {
+ $elements{$action}{'change_members'}{'changepriv'} = 'checkbox';
+ }
+ }
+ }
+
+ if (($state eq 'pick_privs') || ($state eq 'change_privs') ||
+ (($specificity eq 'No') &&
+ ($state eq 'memresult' || $state eq 'result' || $state eq 'addresult'))) {
+ foreach my $tool (@tools) {
+ my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool);
+ foreach my $user (@values) {
+ if ($state eq 'pick_privs' || $state eq 'result'
+ || $state eq 'addresult') {
+ if (!grep(/^\Q$user\E$/,@members)) {
+ next;
+ }
+ }
+ unless(exists($usertools{$user}{$tool})) {
+ $usertools{$user}{$tool} = 1;
+ }
+ }
+ }
+ }
+
+ 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);
+ }
+ }
+
+ if ($state eq 'change_privs') {
+ my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
+ $groupname);
+ my $now = time;
+ foreach my $key (sort(keys(%membership))) {
+ if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) {
+ my $user = $1;
+ my $changefunc = 0;
+ my ($end,$start,@userprivs) = split(/:/,$membership{$key});
+ unless ($start == -1) {
+ if (($end > 0) && ($end < $now)) {
+ unless (grep/^$user$/,$memchg{'reenable'}) {
+ next;
+ }
+ }
+ my @currtools = ();
+ if (@userprivs > 0) {
+ foreach my $tool (sort(keys(%{$fixedprivs}))) {
+ foreach my $priv (keys(%{$$fixedprivs{$tool}})) {
+ if (grep/^$priv$/,@userprivs) {
+ push(@currtools,$tool);
+ last;
+ }
+ }
+ }
+ }
+ foreach my $tool (@currtools) {
+ if (keys(%{$usertools{$user}}) > 0) {
+ if (!$usertools{$user}{$tool}) {
+ push(@{$memchg{'changefunc'}},$user);
+ $changefunc = 1;
+ last;
+ }
+ } else {
+ push(@{$memchg{'changefunc'}},$user);
+ $changefunc = 1;
+ }
+ }
+ if ($changefunc) {
+ next;
+ }
+ if (keys(%{$usertools{$user}}) > 0) {
+ foreach my $tool (keys(%{$usertools{$user}})) {
+ if (!grep/^$tool$/,@currtools) {
+ push(@{$memchg{'changefunc'}},$user);
+ $changefunc = 1;
+ last;
+ }
+ }
+ }
+ }
+ }
+ }
+ &check_changes(\@member_changes,\%memchg);
+ my %temptools;
+ foreach my $change (@member_changes) {
+ if (($change eq 'deletion') || ($change eq 'expire')) {
+ next;
+ }
+ foreach my $user (@{$memchg{$change}}) {
+ unless (exists($usertools{$user})) {
+ %{$usertools{$user}} = ();
+ }
+ %{$temptools{$user}} = %{$usertools{$user}};
+ }
+ }
+ %usertools = %temptools;
+ } elsif ($state eq 'memresult') {
+ foreach my $change (@member_changes) {
+ if ($change eq 'expire' || $change eq 'deletion') {
+ next;
+ }
+ if (ref($memchg{$change}) eq 'ARRAY') {
+ my @users = @{$memchg{$change}};
+ foreach my $user (@users) {
+ unless (exists($usertools{$user})) {
+ %{$usertools{$user}} = ();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ 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{$action}{$state}{'userpriv_'.$priv} = 'checkbox';
+ }
+ }
+ }
+ }
+ }
+
+ if (($action eq 'create' && $state eq 'pick_name') ||
+ ($action eq 'modify' && $state eq 'change_settings')) {
+ my ($crsquota,$freespace,$maxposs) = &get_quota_constraints($action,\%stored);
+ my $space_trim = '/^\s*|\s*\$/g,""';
+ my $float_check = '/^([0-9]*\.?[0-9]*)$/';
+ $validate_script = '
+ var newquota = document.'.$state.'.quota.value;
+ newquota.replace('.$space_trim.');
+ if (newquota == "" ) {
+ document.'.$state.'.quota.value = 0;
+ newquota = 0;
+ }
+ var maxposs = '.$maxposs.';
+ if (newquota > maxposs) {
+ alert("The file repository quota you entered for this group ("+newquota+" Mb) exceeds the maximum possible ("+maxposs+" Mb). Please enter a smaller number.");
+ return;
+ }
+ var re_quota = '.$float_check.';
+ var check_quota = newquota.match(re_quota);
+ if (check_quota == null) {
+ alert("The quota you entered contains invalid characters, the quota should only include numbers, with or without a decimal point.");
+ return;
+ }
+ if (newquota == 0) {
+ var warn_zero = 0;
+ for (var i=0; iprint(&header("$crumbtitle Manager",
+ $jscript,$action,$state,$page,$loaditems));
+
+ if ($env{'form.refpage'} eq 'enrl') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/dropadd",
+ text=>"Enrollment Manager",
+ faq=>9,bug=>'Instructor Interface',});
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/coursegroups",
+ text=>"$crumbtitle",
+ faq=>9,bug=>'Instructor Interface',});
+ }
+
+ my %trail = ();
+ %{$trail{'create'}} = &Apache::lonlocal::texthash (
+ pick_name => $ucgpterm.' Settings',
+ pick_members => 'Select Members',
+ pick_privs => 'Choose Privileges',
+ result => 'Creation Complete',
+ );
+ %{$trail{'modify'}} = &Apache::lonlocal::texthash(
+ pick_group => $ucgpterm.'s',
+ pick_task => 'Choose Task',
+ change_settings => "$ucgpterm 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 '.$gpterm,
+ 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++) {
+ if ($state eq $states{$action}[$i]) {
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {text=>"$trail{$action}{$state}"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ ("$crumbtitle Manager"));
+ &display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page,
+ \%sectioncount,$groupname,$description,$functions,
+ \@tools,$toolprivs,$fixedprivs,$startdate,$enddate,
+ \%users,\%userdata,$idx,\%memchg,\%usertools,
+ $view_permission,$manage_permission,
+ \%stored,$granularity,$quota,$specificity,\@types,\@roles,
+ \@sections,\%states,\%navbuttons,$rowColor1,$rowColor2,
+ $gpterm,$ucgpterm,$crstype);
+ last;
+ } else {
+ if (($state eq 'result') && ($i > 0)) {
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {href=>"javascript:backPage(document.$state,'$states{$action}[0]')",
+ text=>"$trail{$action}{$states{$action}[$i]}"});
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {href=>"javascript:backPage(document.$state,'$states{$action}[$i]')",
+ text=>"$trail{$action}{$states{$action}[$i]}"});
+ }
+ }
+ }
+ } elsif (($action eq 'view') && ($view_permission)) {
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {text=>"View $gpterm".'s'});
+ my $crumbtitle = "$crstype $ucgpterm".'s Manager';
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs
+ (&mt($crumbtitle)));
+ &display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
+ $manage_permission,$action,$state,$gpterm,$ucgpterm,
+ $crstype);
+
+ }
+ $r->print(&footer());
+ return;
+}
+
+sub retrieve_settings {
+ my ($cdom,$cnum,$groupname) = @_;
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname);
+
+ return if (!%curr_groups);
+
+ my %groupinfo =
+ &Apache::longroup::get_group_settings($curr_groups{$groupname});
+
+ my %stored;
+
+ $stored{'description'} =
+ &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'};
+ $stored{'quota'} = $groupinfo{'quota'};
+
+ 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'}}))) {
+ if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') {
+ 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,$page,$sectioncount,$groupname,
+ $description,$functions,$tools,$toolprivs,$fixedprivs,$startdate,
+ $enddate,$users,$userdata,$idx,$memchg,$usertools,
+ $view_permission,$manage_permission,$stored,$granularity,$quota,
+ $specificity,$types,$roles,$sections,$states,$navbuttons,$rowColor1,
+ $rowColor2,$gpterm,$ucgpterm,$crstype) = @_;
+ if ($action eq 'create') {
+ if ($state eq 'pick_name') {
+ &general_settings_form($r,$cdom,$cnum,$action,$state,$page,
+ $functions,$tools,$toolprivs,$fixedprivs,
+ $sectioncount,$stored,$states,$navbuttons,
+ $gpterm,$ucgpterm,$crstype);
+ } elsif ($state eq 'pick_members') {
+ &choose_members_form($r,$cdom,$cnum,$action,$state,$page,
+ $groupname,$description,$granularity,$quota,
+ $startdate,$enddate,$tools,$fixedprivs,
+ $toolprivs,$functions,$users,$userdata,$idx,
+ $stored,$states,$navbuttons,$gpterm,$ucgpterm,
+ $crstype);
+ } elsif ($state eq 'pick_privs') {
+ &choose_privs_form($r,$cdom,$cnum,$action,$state,$page,
+ $startdate,$enddate,$tools,$functions,
+ $toolprivs,$fixedprivs,$userdata,$usertools,
+ $idx,$states,$stored,$sectioncount,$navbuttons,
+ $gpterm,$ucgpterm,$crstype);
+ } elsif ($state eq 'result') {
+ &process_request($r,$cdom,$cnum,$action,$state,$page,
+ $groupname,$description,$specificity,$userdata,
+ $startdate,$enddate,$tools,$functions,
+ $toolprivs,$usertools,$idx,$types,$roles,
+ $sections,$states,$navbuttons,$memchg,
+ $sectioncount,$stored,$gpterm,$ucgpterm,$crstype);
+ }
+ } elsif ($action eq 'modify') {
+ my $groupname = $env{'form.groupname'};
+ if ($state eq 'pick_group') {
+ &display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
+ $manage_permission,$action,$state,$gpterm,
+ $ucgpterm,$crstype);
+ } elsif ($state eq 'pick_task') {
+ &modify_menu($r,$groupname,$page,$gpterm);
+ } elsif ($state eq 'change_settings') {
+ &general_settings_form($r,$cdom,$cnum,$action,$state,$page,
+ $functions,$tools,$toolprivs,$fixedprivs,
+ $sectioncount,$stored,$states,$navbuttons,
+ $gpterm,$ucgpterm,$crstype);
+ } 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,$quota,$specificity,
+ $idx,$states,$navbuttons,$rowColor1,$rowColor2,
+ $gpterm,$ucgpterm);
+ } elsif ($state eq 'add_members') {
+ &add_members_form($r,$action,$state,$page,$startdate,
+ $enddate,$groupname,$description,$granularity,
+ $quota,$sectioncount,$tools,$functions,$stored,
+ $states,$navbuttons,$gpterm,$ucgpterm);
+ } elsif ($state eq 'pick_members') {
+ &choose_members_form($r,$cdom,$cnum,$action,$state,$page,
+ $groupname,$description,$granularity,$quota,
+ $startdate,$enddate,$tools,$fixedprivs,
+ $toolprivs,$functions,$users,$userdata,$idx,
+ $stored,$states,$navbuttons,$gpterm,$ucgpterm,
+ $crstype);
+ } elsif ($state eq 'pick_privs') {
+ &choose_privs_form($r,$cdom,$cnum,$action,$state,$page,
+ $startdate,$enddate,$tools,$functions,
+ $toolprivs,$fixedprivs,$userdata,$usertools,
+ $idx,$states,$stored,$sectioncount,$navbuttons,
+ $gpterm,$ucgpterm,$crstype);
+ } elsif ($state eq 'change_privs') {
+ &change_privs_form($r,$cdom,$cnum,$action,$state,$page,
+ $startdate,$enddate,$tools,$functions,
+ $toolprivs,$fixedprivs,$userdata,$usertools,
+ $memchg,$idx,$states,$stored,$sectioncount,
+ $navbuttons,$gpterm,$ucgpterm);
+ } elsif ($state eq 'chgresult' || $state eq 'memresult' ||
+ $state eq 'addresult') {
+ &process_request($r,$cdom,$cnum,$action,$state,$page,
+ $groupname,$description,$specificity,$userdata,
+ $startdate,$enddate,$tools,$functions,
+ $toolprivs,$usertools,$idx,$types,$roles,
+ $sections,$states,$navbuttons,$memchg,
+ $sectioncount,$stored,$gpterm,$ucgpterm,$crstype);
+ }
+ }
+}
+
+sub header {
+ my ($bodytitle,$jscript,$action,$state,$page,$loaditems) = @_;
+ my $start_page=
+ &Apache::loncommon::start_page($bodytitle,
+ '',
+ {'add_entries' => $loaditems,});
+ my $output = <<"END";
+$start_page
+
-