--- loncom/interface/domainprefs.pm 2017/01/21 21:51:56 1.160.6.76 +++ loncom/interface/domainprefs.pm 2017/01/22 13:28:05 1.160.6.77 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.76 2017/01/21 21:51:56 raeburn Exp $ +# $Id: domainprefs.pm,v 1.160.6.77 2017/01/22 13:28:05 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -632,7 +632,7 @@ sub process_changes { } elsif ($action eq 'requestauthor') { $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); } elsif ($action eq 'helpsettings') { - $output = &modify_helpsettings($r,$dom,$confname,%domconfig); + $output = &modify_helpsettings($r,$dom,$confname,$lastactref,%domconfig); } elsif ($action eq 'coursedefaults') { $output = &modify_coursedefaults($dom,$lastactref,%domconfig); } elsif ($action eq 'selfenrollment') { @@ -2884,6 +2884,7 @@ sub print_contacts { sub print_helpsettings { my ($position,$dom,$settings,$rowtotal) = @_; my $confname = $dom.'-domainconfig'; + my $formname = 'display'; my ($datatable,$itemcount); if ($position eq 'top') { $itemcount = 1; @@ -2899,20 +2900,69 @@ sub print_helpsettings { } else { my $css_class; my %existing=&Apache::lonnet::dump('roles',$dom,$confname,'rolesdef_'); - my %customroles; - foreach my $key (keys(%existing)) { + my (%customroles,%ordered,%current); + if (ref($settings->{'adhoc'}) eq 'HASH') { + %current = %{$settings->{'adhoc'}}; + } + my $count = 0; + foreach my $key (sort(keys(%existing))) { if ($key=~/^rolesdef\_(\w+)$/) { my $rolename = $1; - my %privs; + my (%privs,$order); ($privs{'system'},$privs{'domain'},$privs{'course'}) = split(/\_/,$existing{$key}); $customroles{$rolename} = \%privs; + if (ref($current{$rolename}) eq 'HASH') { + $order = $current{$rolename}{'order'}; + } + if ($order eq '') { + $order = $count; + } + $ordered{$order} = $rolename; + $count++; } } - my $count = 0; + my $maxnum = scalar(keys(%ordered)); + my @roles_by_num = (); + foreach my $item (sort {$a <=> $b } (keys(%ordered))) { + push(@roles_by_num,$item); + } + my $context = 'domprefs'; + my $crstype = 'Course'; + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); + my @accesstypes = ('all','none'); + my ($numstatustypes,@jsarray); + if (ref($types) eq 'ARRAY') { + if (@{$types} > 0) { + $numstatustypes = scalar(@{$types}); + push(@accesstypes,'status'); + @jsarray = ('bystatus'); + } + } + my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh']); + if (keys(%domhelpdesk)) { + push(@accesstypes,('inc','exc')); + push(@jsarray,('notinc','notexc')); + } + my $hiddenstr = join("','",@jsarray); + $datatable .= &helpsettings_javascript(\@roles_by_num,$maxnum,$hiddenstr,$formname); my $context = 'domprefs'; my $crstype = 'Course'; - foreach my $role (sort(keys(%customroles))) { - my $prefix = 'custhelp'.$count; + my $prefix = 'helproles_'; + my $add_class = 'LC_hidden'; + foreach my $num (@roles_by_num) { + my $role = $ordered{$num}; + my ($desc,$access,@statuses); + if (ref($current{$role}) eq 'HASH') { + $desc = $current{$role}{'desc'}; + $access = $current{$role}{'access'}; + if (ref($current{$role}{'insttypes'}) eq 'ARRAY') { + @statuses = @{$current{$role}{'insttypes'}}; + } + } + if ($desc eq '') { + $desc = $role; + } + my $identifier = 'custhelp'.$num; my %full=(); my %levels= ( course => {}, @@ -2927,18 +2977,32 @@ sub print_helpsettings { &Apache::lonuserutils::custom_role_privs($customroles{$role},\%full,\%levels,\%levelscurrent); my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); $css_class = $itemcount%2?' class="LC_odd_row"':''; - $datatable .= ''. - ''.&mt('Existing helpdesk role:').' '. - ''.$role.'
'. - &Apache::lonuserutils::custom_role_header($context,$crstype, - \@templateroles,$prefix). + my $chgstr = ' onchange="javascript:reorderHelpRoles(this.form,'."'helproles_".$num."_pos'".');"'; + $datatable .= ''.$role.'
'. + ''.(' 'x2). + ''. + ''. + '
'.&mt('Role name').''. + &mt('Name shown to users:'). + ''. + '
'. + &helpdeskroles_access($dom,$prefix,$num,$add_class,$current{$role},\@accesstypes, + $othertitle,$usertypes,$types,\%domhelpdesk). + '
'. + ''.&mt('Role privileges').&adhocbutton($prefix,$num,'privs','show').''. &Apache::lonuserutils::custom_role_table($crstype,\%full,\%levels, - \%levelscurrent,$prefix). - '
'; - $count ++; + \%levelscurrent,$identifier, + 'LC_hidden',$prefix.$num.'_privs'). + '
'; $itemcount ++; } $css_class = $itemcount%2?' class="LC_odd_row"':''; @@ -2952,25 +3016,250 @@ sub print_helpsettings { ); &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); - $datatable .= '