Diff for /loncom/interface/courseprefs.pm between versions 1.35 and 1.36

version 1.35, 2010/12/21 00:26:56 version 1.36, 2010/12/24 16:50:38
Line 215  use Apache::lonnet; Line 215  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::lonconfigsettings;  use Apache::lonconfigsettings;
   use Apache::lonparmset;
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
Line 336  sub handler { Line 337  sub handler {
         return OK;          return OK;
     }      }
   
       if ($phase eq 'releaseinfo') {
           my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'};
           if ($loncaparev) { 
               &display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype);
               return OK;
           }
       }
   
     my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);      my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);
     my @prefs_order = ('courseinfo','localization','feedback','discussion',      my @prefs_order = ('courseinfo','localization','feedback','discussion',
                        'classlists','appearance','grading','printouts',                         'classlists','appearance','grading','printouts',
Line 502  sub handler { Line 511  sub handler {
                                                  \@prefs_order,\%prefs,\%values,                                                   \@prefs_order,\%prefs,\%values,
                                                   $cnum,undef,\@allitems);                                                    $cnum,undef,\@allitems);
     } elsif ($phase eq 'display') {      } elsif ($phase eq 'display') {
         my $jscript = &get_jscript($cdom,$phase,$crstype);          my $jscript = &get_jscript($cid,$cdom,$phase,$crstype);
         my @allitems = &get_allitems(%prefs);          my @allitems = &get_allitems(%prefs);
         &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,          &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,
             \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype);              \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype);
Line 1514  sub get_course { Line 1523  sub get_course {
 }  }
   
 sub get_jscript {  sub get_jscript {
     my ($cdom,$phase,$crstype) = @_;      my ($cid,$cdom,$phase,$crstype) = @_;
     my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype);      my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype);
     my ($jscript,$categorize_js);      my ($jscript,$categorize_js,$loncaparev_js);
     my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript();      my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript();
     my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset');      my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset');
     my $cloners_js = &cloners_javascript($phase);      my $cloners_js = &cloners_javascript($phase);
Line 1533  function catsbrowser() { Line 1542  function catsbrowser() {
 }  }
 ENDSCRIPT  ENDSCRIPT
     }      }
       my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'};
       if ($loncaparev) {
           $loncaparev_js = <<ENDSCRIPT;
   function loncaparevinfo() {
       var lcrevwin = null;
       var url = '/adm/courseprefs?phase=releaseinfo';
       if (!lcrevwin || lcrevwin.closed) {
           lcrevwin=window.open(url,'releasewin','height=480,width=600,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');
       } else {
           lcrevwin.focus();
       }
   }
   ENDSCRIPT
       }
     $jscript = '<script type="text/javascript" language="Javascript">'."\n".      $jscript = '<script type="text/javascript" language="Javascript">'."\n".
                $browse_js."\n".$categorize_js."\n".$cloners_js."\n".'</script>'.                 $browse_js."\n".$categorize_js."\n".$loncaparev_js."\n".
                "\n".$stubrowse_js."\n";                 $cloners_js."\n".'</script>'."\n".$stubrowse_js."\n";
     return $jscript;      return $jscript;
 }  }
   
Line 1877  sub print_courseinfo { Line 1900  sub print_courseinfo {
             my $loncaparev = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'};              my $loncaparev = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'};
             my $showreqd;              my $showreqd;
             if ($loncaparev) {              if ($loncaparev) {
                 $showreqd = &mt('[_1] or newer',$loncaparev);                  $showreqd = &mt('[_1] or newer',$loncaparev).' <a href="javascript:loncaparevinfo()">'.
                               &mt('Details').'</a>',
             } else {              } else {
                 $showreqd = &mt('No specific version required');                  $showreqd = &mt('No specific version required');
             }              }
             $datatable .= $showreqd;              $datatable .= $showreqd;
   
         } else {          } else {
             $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size});              $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size});
         }          }
Line 2040  ENDSCRIPT Line 2063  ENDSCRIPT
     return;      return;
 }  }
   
   sub display_loncaparev_constraints {
       my ($r,$navmap,$loncaparev,$crstype) = @_;
       my $cid = $env{'request.course.id'};
       my $cdom = $env{'course.'.$cid.'.domain'};
       my $cnum = $env{'course.'.$cid.'.num'};
       my $output;
       my (%checkparms,%checkresponsetypes,%checkcrstypes,%anonsurvey,%randomizetry);
       &Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes,
                                                 \%checkcrstypes,\%anonsurvey,\%randomizetry);
   
   #    my %paramstrings =  
   #       ('string_questiontype' => 
   #                                  [[ 'anonsurveycred', 'Anonymous Survey'],
   #                                   [ 'anonsurvey', 'Anonymous Survey'],
   #                                   [ 'randomizetry', 'New Randomization Each N Tries']]
   #       );
       if (defined($checkcrstypes{$crstype})) {
           $output .= '<h4>'.&mt('Course type: [_1] requires [_2] or newer',$crstype,
                                 $checkcrstypes{$crstype}).'</h4>';
       }
       my (%fromparam,%rowspan,%bymap,%byresource,@scopeorder,%toshow,%allmaps,
           %byresponsetype,%bysubmission);
       @scopeorder = ('course','section/group','user');
       my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom);
       if (ref($resourcedata) eq 'HASH') {
           foreach my $key (keys(%{$resourcedata})) {
               foreach my $item (keys(%checkparms)) {
                   if ($key =~ /(\Q$item\E)$/) {
                        if (ref($checkparms{$item}) eq 'ARRAY') {
                            my $value = $resourcedata->{$key};
                            my ($middle,$scope,$which,$level,$map,$resource);
                            if (grep(/^\Q$value\E$/,@{$checkparms{$item}})) {
                                my $stdtype = &Apache::lonparmset::standard_parameter_types($item);
                                my $stdname = &Apache::lonparmset::standard_parameter_names($item);
                                my $valname = &get_param_description($stdtype,$value);
                                my $rev = $Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value};
                                my $start = $cid.'.';
                                if ($key =~ /^\Q$start\E(\[useropt\:($match_username\:$match_domain)\]\.)/) {
                                    $middle = $1;
                                    $which = $2;
                                    $scope = 'user'; 
                                } elsif ($key =~ /^\Q$start\E(\[(\w+)\]\.)/) {
                                    $middle = $1;
                                    $which = $2;
                                    $scope = 'section/group';
                                } else {
                                    $scope = 'course';
                                }
                                my $what="$stdname=$valname";
                                if ($key =~ /^\Q$start$middle\E\w+\.\Q$item\E$/) {
                                    $level = 'general';
                                    if ($scope eq 'course') {
                                        if (ref($fromparam{$rev}{$scope}) eq 'ARRAY') {
                                            unless(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}})) {
                                                push(@{$fromparam{$rev}{$scope}},$what);
                                            }
                                        } else {
                                            push(@{$fromparam{$rev}{$scope}},$what);
                                        }
                                    } else {
                                        if (ref($fromparam{$rev}{$scope}{$which}) eq 'ARRAY') {
                                            unless (grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}{$which}})) {
                                                push(@{$fromparam{$rev}{$scope}{$which}},$what);
                                            }
                                        } else {
                                            push(@{$fromparam{$rev}{$scope}{$which}},$what);
                                        }
                                    }
                                    $rowspan{$rev} ++;
                                } elsif ($key =~ /^\Q$start$middle\E(.+)___\(all\).\w+\.\Q$item\E$/) {
                                    $level = 'folder';
                                    $map = $1;
                                    if ($scope eq 'course') {
                                        if (ref($bymap{$map}{$rev}{$scope}) eq 'ARRAY') {
                                            unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}})) {
                                                push(@{$bymap{$map}{$rev}{$scope}},$what);
                                            }
                                        } else {
                                            push(@{$bymap{$map}{$rev}{$scope}},$what);
                                        }
                                    } else {
                                        if (ref($bymap{$map}{$rev}{$scope}{$which}) eq 'ARRAY') {
                                            unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}{$which}})) {
                                                push(@{$bymap{$map}{$rev}{$scope}{$which}},$what);
                                            }
                                        } else {
                                            push(@{$bymap{$map}{$rev}{$scope}{$which}},$what);
                                        }
                                    }
                                } elsif ($key =~ /^\Q$start$middle\E(.+)\.\w+\.\Q$item\E$/) {
                                    $level = 'resource';
                                    $resource = $1;
                                    if ($scope eq 'course') {
                                        if (ref($byresource{$resource}{$rev}{$scope}) eq 'ARRAY') {
                                            unless(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}})) {
                                                push(@{$byresource{$resource}{$rev}{$scope}},$what);
                                            }
                                        } else {
                                            push(@{$byresource{$resource}{$rev}{$scope}},$what);
                                        }
                                    } else {
                                        if (ref($byresource{$resource}{$rev}{$scope}{$which}) eq 'ARRAY') {
                                            unless (grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}{$which}})) {
                                                push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what);
                                            }
                                        } else {
                                            push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what);
                                        }
                                    }
                                }
                           }
                       }
                   }
               }
           }
           if (keys(%fromparam)) {
               $output .= '<h4>'.&mt('Requirements from general settings').'</h4>'.
                          &Apache::loncommon::start_data_table().
                          &Apache::loncommon::start_data_table_header_row().
                          '<th>'.&mt('Release').'</th><th>'.&mt('Scope').'</th>'.
                          '<th>'.&mt('Extent').'</th><th>'.&mt('Setting').'</th>'.
                          &Apache::loncommon::end_data_table_header_row();
               foreach my $rev (keys(%fromparam)) {
                   $output .=  &Apache::loncommon::start_data_table_row().
                               '<td rowspan="'.$rowspan{$rev}.'">'.$rev.'</td>';
                   my $newrow;
                   foreach my $scope (@scopeorder) {
                       if (ref($fromparam{$rev}{$scope}) eq 'HASH') {
                            if ($newrow) {
                                $output .= &Apache::loncommon::continue_data_table_row();
                            }
                            $output .= '<td>'.$scope.'</td>';
                            foreach my $which (sort(keys(%{$fromparam{$rev}{$scope}}))) {
                                $output .= '<td>'.$which.'</td><td>'.
                                           join('<br />',@{$fromparam{$rev}{$scope}{$which}}).'</td>';
                            }
                            $output .= &Apache::loncommon::end_data_table_row();
                            $newrow = 1;
                       } elsif (ref($fromparam{$rev}{$scope}) eq 'ARRAY') {
                            if ($newrow) {
                                $output .= &Apache::loncommon::continue_data_table_row();
                            }
                            $output .= '<td>'.$scope.'</td><td>&nbsp;</td><td>'.
                                       join('<br />',@{$fromparam{$rev}{$scope}}).'</td>'.
                                       &Apache::loncommon::end_data_table_row();
                            $newrow = 1;
                       }
                   }
               }
               $output .= &Apache::loncommon::end_data_table().'<br />';
           }
       }
   
       if (defined($navmap)) {
           my %anonsubms=&Apache::lonnet::dump('nohist_anonsurveys',$cdom,$cnum);
           my $rev_anonsurv=$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'};
           my %randtrysubms=&Apache::lonnet::dump('nohist_randomizetry',$cdom,$cnum);
           my $rev_randtry=$Apache::lonnet::needsrelease{'parameter:type:randomizetry'};
           my $stdtype=&Apache::lonparmset::standard_parameter_types('type');
           my $stdname=&Apache::lonparmset::standard_parameter_names('type');
           my $valanon=&get_param_description($stdtype,'anonsurvey');
           my $valrandtry=&get_param_description($stdtype,'randomizetry');
   
           foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) {
               my @parts = @{$res->parts()};
               my $symb = $res->symb();
               my $enclosing_map = &Apache::lonnet::declutter($res->enclosing_map_src());
               foreach my $part (@parts) {
                   if (exists($anonsubms{$symb."\0".$part})) {
                       my $rev = $rev_anonsurv;
                       my $what="$stdname=$valanon";
                       if (ref($bysubmission{$symb}{$rev}) eq 'ARRAY') {
                           unless (grep(/^\Q$what\E/,@{$bysubmission{$symb}{$rev}})) {
                               push(@{$bysubmission{$symb}{$rev}},$what);
                           }
                       } else {
                           push(@{$bysubmission{$symb}{$rev}},$what);
                       }
                       $allmaps{$enclosing_map} = 1;
                   }
                   if (exists($randtrysubms{$symb."\0".$part})) {
                       my $rev = $rev_randtry;
                       my $what="$stdname=$valrandtry";
                       if (ref($bysubmission{$symb}{$rev}) eq 'ARRAY') {
                           unless (grep(/^\Q$what\E/,@{$bysubmission{$symb}{$rev}})) {
                               push(@{$bysubmission{$symb}{$rev}},$what);
                           }
                       } else {
                           push(@{$bysubmission{$symb}{$rev}},$what);
                       }
                       $allmaps{$enclosing_map} = 1;
                   }
               }
               my %responses = $res->responseTypes();
               foreach my $key (keys(%responses)) {
                   if (exists($checkresponsetypes{$key})) {
                       push(@{$byresponsetype{$symb}{$checkresponsetypes{$key}}},$key);
                       $allmaps{$enclosing_map} = 1;
                   }
               }
           }
           if (keys(%byresource) > 0) {
               foreach my $symb (keys(%byresource)) {
                   my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb);
                   $allmaps{$map} = 1;
               }
           }
           if (keys(%bymap) > 0) {
               foreach my $map (keys(%bymap)) {
                   $allmaps{$map} = 1;
               }
           }
           foreach my $map (keys(%allmaps)) {
               my $mapres = $navmap->getResourceByUrl($map);
               my $mapsymb = $mapres->symb();
               $toshow{$mapsymb} = 1;
               if (ref($mapres)) {
                   my $pcslist = $mapres->map_hierarchy();
                   if ($pcslist ne '') {
                       foreach my $pc (split(/,/,$pcslist)) {
                           my $res = $navmap->getByMapPc($pc);
                           if (ref($res)) {
                               my $symb = $res->symb();
                               unless ($symb eq '______') {
                                   $toshow{$symb} = 1;
                               }
                           }
                       }
                   }
               }
           }
       }
       my $mapres_header = '<h4>'.
                           &mt('Requirements for specific folders or resources').
                           '</h4>';
       if ((keys(%toshow) > 0) || (keys(%byresource) > 0) || 
           (keys(%bysubmission) > 0) || (keys(%byresponsetype))) {
           $output .= $mapres_header;
       }
       my $top_header = '<h3>'.&mt('LON-CAPA version dependencies').'</h3>';
       my $title = 'Version Constraints';
       my $start_page =
           &Apache::loncommon::start_page($title,undef,{'only_body' => 1,});
       $r->print($start_page.$top_header);
       if ($output) {
           $r->print($output);
           if (defined($navmap)) {
               &show_contents_view($r,$navmap,$cid,\%toshow,\%bymap,\%byresource,\%bysubmission,
                                   \%byresponsetype,\@scopeorder);
           }
           $r->print('<br /><br />'); 
       } else {
           $r->print('<p class="LC_info">'.
                     &mt('No version requirements from resource content or settings.').
                     '</p>'); 
       }
       $r->print(&Apache::loncommon::end_page());
       return;
   }
   
   sub show_contents_view {
       my ($r,$navmap,$cid,$toshow,$bymap,$byresource,$bysubmission,$byresponsetype,$scopeorder) = @_;
       if ((keys(%{$toshow}) > 0) || (keys(%{$byresource}) > 0) || 
           (keys(%{$bysubmission}) > 0) || (keys(%{$byresponsetype}) > 0)) {
           my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons");
           my $whitespace = '<img src="'.$location.'/whitespace_21.gif" alt="" />';
           my $icon =  '<img src="'.$location.'/navmap.folder.open.gif" alt="" />';
           my $topmap = $env{'course.'.$cid.'.url'};
           $r->print(&Apache::loncommon::start_data_table().
                     &Apache::loncommon::start_data_table_header_row().
                     '<th>'.&mt('Location').'</th><th>'.&mt('Release').'</th>'.
                     '<th>'.&mt('Attribute/Setting').'</th>'.
                     &Apache::loncommon::end_data_table_header_row().
                     &Apache::loncommon::start_data_table_row().
                     '<td>&nbsp;'.$icon.'&nbsp;'.&mt('Main Course Documents').'</td>');
                     &releases_by_map($r,$bymap,$topmap,$scopeorder);
                     $r->print(&Apache::loncommon::end_data_table_row());
           my $it=$navmap->getIterator(undef,undef,undef,1,1,undef);
           my $curRes;
           my $depth = 0;
           my %parent = ();
           my $startcount = 5;
           my $lastcontainer = $startcount;
           while ($curRes = $it->next()) {
               if ($curRes == $it->BEGIN_MAP()) {
                   $depth++;
                   $parent{$depth}= $lastcontainer;
               }
               if ($curRes == $it->END_MAP()) {
                   $depth--;
                   $lastcontainer = $parent{$depth};
               }
               my $indent;
               for (my $i=0; $i<$depth; $i++) {
                   $indent.= $whitespace;
               }
               if (ref($curRes)) {
                   my $symb = $curRes->symb();
                   my $ressymb = $symb;
                   my $srcf = $curRes->src();
                   my $title = &Apache::lonnet::gettitle($srcf);
                   if (($curRes->is_sequence()) || ($curRes->is_page())) {
                       next unless($toshow->{$symb});
                       my ($parent,$ind,$url) = &Apache::lonnet::decode_symb($symb);
                       $icon =  '<img src="'.$location.'/navmap.folder.open.gif" alt="" />';
                       if ($curRes->is_page()) {
                           $icon = '<img src="'.$location.'/navmap.page.open.gif" alt="" />';
                       }
                       my $rowspan = 1;
                       if (ref($bymap->{$url}) eq 'HASH') {
                           $rowspan = scalar(keys(%{$bymap->{$url}}));
                       }
                       $r->print(&Apache::loncommon::start_data_table_row().
                                 '<td rowspan="'.$rowspan.'">'.$indent.$icon.'&nbsp;'.$title.'</td>');
                       &releases_by_map($r,$bymap,$url,$scopeorder);
                       $r->print(&Apache::loncommon::end_data_table_row());
                   } else {
                       my $rowspan;
                       if (ref($byresource->{$symb}) eq 'HASH') {
                           $rowspan += scalar(keys(%{$byresource->{$symb}}));
                       }
                       if (ref($bysubmission->{$symb}) eq 'HASH') {
                           $rowspan += scalar(keys(%{$bysubmission->{$symb}}));
                       }
                       if (ref($byresponsetype->{$symb}) eq 'HASH') {
                           $rowspan += scalar(keys(%{$byresponsetype->{$symb}}));
                       }
                       next if (!$rowspan);
                       $icon = '<img class="LC_contentImage" src="'.$location.'/problem.gif" alt="'.
                               &mt('Problem').'" />';
                       $r->print(&Apache::loncommon::start_data_table_row().
                                 '<td rowspan="'.$rowspan.'">'.$indent.$icon.'&nbsp;'.$title.'</td>');
                       my $newrow;
                       if (ref($byresource->{$symb}) eq 'HASH') {
                           foreach my $rev (sort(keys(%{$byresource->{$symb}}))) {
                               if ($newrow) {
                                   $r->print(&Apache::loncommon::continue_data_table_row());
                               }
                               $r->print('<td valign="middle">'.$rev.'</td><td>');
                               if (ref($byresource->{$symb}{$rev}) eq 'HASH') {
                                   $r->print('<table border="0">');
                                   foreach my $scope (@{$scopeorder}) {
                                       if (ref($byresource->{$symb}{$rev}{$scope}) eq 'HASH') {
                                           $r->print('<tr><td>'.&mt('Setting - scope: [_1]',$scope).'</td>');
                                           foreach my $which (sort(keys(%{$byresource->{$symb}{$rev}{$scope}}))) {
                                               $r->print('<td>'.$which.'</td><td>'.
                                                   join('<br />',@{$byresource->{$symb}{$rev}{$scope}{$which}}).
                                                         '</td>');
                                           }
                                           $r->print('</tr>');
                                       } elsif (ref($byresource->{$symb}{$rev}{$scope}) eq 'ARRAY') {
                                           $r->print('<tr><td>'.&mt('Setting - scope: [_1]',$scope).'</td>'.
                                                     '<td>&nbsp;</td><td>'.
                                                     join('<br />',@{$byresource->{$symb}{$rev}{$scope}}).'</td></tr>');
                                       }
                                   }
                                   $r->print('</table>');
                               }
                               $r->print('</td>');
                               $r->print(&Apache::loncommon::end_data_table_row());
                               $newrow = 1;
                           }
                       }
                       if (ref($bysubmission->{$symb}) eq 'HASH') {
                           foreach my $rev (sort(keys(%{$bysubmission->{$symb}}))) {
                               if ($newrow) {
                                   $r->print(&Apache::loncommon::continue_data_table_row());
                               }
                               $r->print('<td>'.$rev.'</td><td>');
                               if (ref($bysubmission->{$symb}{$rev}) eq 'ARRAY') {
                                   $r->print(&mt('Submissions to: ').' '.
                                            join(', ',@{$bysubmission->{$symb}{$rev}}));
                               }
                               $r->print('</td>');
                               $r->print(&Apache::loncommon::end_data_table_row());
                               $newrow = 1;
                           }
                       }
                       if (ref($byresponsetype->{$symb}) eq 'HASH') {
                           foreach my $rev (sort(keys(%{$byresponsetype->{$symb}}))) {
                               if ($newrow) {
                                   $r->print(&Apache::loncommon::continue_data_table_row());
                               }
                               $r->print('<td>'.$rev.'</td><td>');
                               if (ref($byresponsetype->{$symb}{$rev}) eq 'ARRAY') {
                                   $r->print(&mt('Response Type(s): ').' '.
                                            join('<br />',@{$byresponsetype->{$symb}{$rev}}));
                               }
                               $r->print('</td>');
                           }
                           $r->print(&Apache::loncommon::end_data_table_row());
                       }
                   }
               }
           }
           $r->print(&Apache::loncommon::end_data_table());
       }
   }
   
   sub releases_by_map {
       my ($r,$bymap,$url,$scopeorder) = @_; 
       return unless ((ref($bymap) eq 'HASH') && (ref($scopeorder) eq 'ARRAY'));
       if (ref($bymap->{$url}) eq 'HASH') {
           foreach my $rev (sort(keys(%{$bymap->{$url}}))) {
               $r->print('<td valign="middle">'.$rev.'</td><td>');
               if (ref($bymap->{$url}{$rev}) eq 'HASH') {
                   $r->print('<table border="0">');
                   foreach my $scope (@{$scopeorder}) {
                       if (ref($bymap->{$url}{$rev}{$scope}) eq 'HASH') {
                           $r->print('<tr><td>'.&mt('Setting - scope: [_1]',$scope).'</td>');
                           foreach my $which (sort(keys(%{$bymap->{$url}{$rev}{$scope}}))) {
                               $r->print('<td>'.$which.'</td><td>'.
                                         join('<br />',@{$bymap->{$url}{$rev}{$scope}{$which}}).
                                         '</td>');
                           }
                           $r->print('</tr>');
                       } elsif (ref($bymap->{$url}{$rev}{$scope}) eq 'ARRAY') {
                           $r->print('<tr><td>'.&mt('Setting - scope: [_1]',$scope).
                                     '</td><td>&nbsp;</td><td>'.
                                     join('<br />',@{$bymap->{$url}{$rev}{$scope}}).'</td></tr>');
                       }
                   }
                   $r->print('</table>');
               }
               $r->print('</td>');
           }
       } else {
           $r->print('<td colspan="2">&nbsp;</td>');
       }
       return;
   }
   
   sub get_param_description {
       my ($stdtype,$value) = @_;
       my $name = $value;
       my $paramstrings = &Apache::lonparmset::standard_string_options($stdtype);
       unless (ref($paramstrings) eq 'ARRAY') {
           return $name;
       }
       foreach my $possibilities (@{$paramstrings}) {
           next unless (ref($possibilities) eq 'ARRAY');
           my ($thing, $description) = @{ $possibilities };
           if ($thing eq $value) {
               $name = $description;
               last;
           }
       }
       return $name;
   }
   
 sub show_autocoowners {  sub show_autocoowners {
     my (@currcoown) = @_;      my (@currcoown) = @_;
     my $output = '<i>'.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').'</i>';      my $output = '<i>'.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').'</i>';

Removed from v.1.35  
changed lines
  Added in v.1.36


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>