Diff for /loncom/interface/coursecatalog.pm between versions 1.93 and 1.98

version 1.93, 2017/08/07 20:22:12 version 1.98, 2018/12/27 20:10:31
Line 77  sub handler { Line 77  sub handler {
     }      }
     my $domdesc = &Apache::lonnet::domain($serverdefdom,'description');      my $domdesc = &Apache::lonnet::domain($serverdefdom,'description');
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     if (&Apache::lonnet::notcallable('catalog',$codedom)) {      
       unless (($serverdefdom eq $codedom) ||
               (&Apache::lonnet::will_trust('catalog',$serverdefdom,$codedom))) {
         my $serverdomdesc = &Apache::lonnet::domain($serverdefdom,'description');          my $serverdomdesc = &Apache::lonnet::domain($serverdefdom,'description');
         $r->print(&Apache::loncommon::start_page('Course/Community Catalog'));          $r->print(&Apache::loncommon::start_page('Course/Community Catalog'));
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
Line 190  sub handler { Line 192  sub handler {
                                 if ($courseinfo{$codedom.'_'.$cnum}{'showsyllabus'}) {                                  if ($courseinfo{$codedom.'_'.$cnum}{'showsyllabus'}) {
                                     my $usehttp = 0;                                      my $usehttp = 0;
                                     if (($ENV{'SERVER_PORT'} == 443) && ($courseinfo{$codedom.'_'.$cnum}{'extsyllplain'})) {                                      if (($ENV{'SERVER_PORT'} == 443) && ($courseinfo{$codedom.'_'.$cnum}{'extsyllplain'})) {
                                         $usehttp = 1;                                          unless (&Apache::lonnet::uses_sts()) {
                                               $usehttp = 1;
                                           }
                                     }                                      }
                                     $r->print('&nbsp;<font size="-2">'.                                      $r->print('&nbsp;<font size="-2">'.
                                               '<a href="javascript:ToSyllabus('."'$codedom','$cnum','$usehttp'".')">'.                                                '<a href="javascript:ToSyllabus('."'$codedom','$cnum','$usehttp'".')">'.
Line 223  sub handler { Line 227  sub handler {
         $r->print('<br />'.&Apache::loncommon::end_page());          $r->print('<br />'.&Apache::loncommon::end_page());
         return OK;          return OK;
     } else {      } else {
         if ($env{'form.coursenum'}) {          if ($env{'form.coursenum'} ne '') {
             $cnum = $env{'form.coursenum'};              if ($env{'form.coursenum'} =~ /^$LONCAPA::match_courseid$/) {
                   $cnum = $env{'form.coursenum'};
               } else {
                   delete($env{'form.coursenum'});
               }
         }          }
     }      }
   
     if ($env{'form.catalog_maxdepth'} ne '') {      my (@cats,@trails,%allitems,%idx,@jsarray,%subcathash,$subcats,%maxd,
         $env{'form.catalog_maxdepth'} =~ s{\D}{}g;          $toplevelstr,$maxdepthstr);
     }  
   
     my (@cats,@trails,%allitems,%idx,@jsarray,%subcathash,$subcats);  
     if ($env{'form.withsubcats'}) {      if ($env{'form.withsubcats'}) {
         $subcats = \%subcathash;          $subcats = \%subcathash;
     }      }
     &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,\%allitems,      &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,\%allitems,
                                            \%idx,\@jsarray,$subcats);                                             \%idx,\@jsarray,$subcats,\%maxd);
       if (ref($cats[0]) eq 'ARRAY') {
           foreach my $item (@{$cats[0]}) {
               $toplevelstr .= "'".&js_escape($item)."::0',";
               $maxdepthstr .= "'$maxd{$item}',";
           }
           $toplevelstr =~ s/,$//;
           $maxdepthstr =~ s/,$//;
       }
       &validate_input(\@cats,\%maxd);
     my ($numtitles,@codetitles);      my ($numtitles,@codetitles);
     if (($env{'form.coursenum'} ne '') && ($knownuser)) {      if (($env{'form.coursenum'} ne '') && ($knownuser)) {
         &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems,\@codetitles);          &course_details($r,$codedom,$formname,$domdesc,\@trails,\%allitems,\@codetitles);
Line 247  sub handler { Line 261  sub handler {
         my $catjs = <<"ENDSCRIPT";          my $catjs = <<"ENDSCRIPT";
   
 function setCatDepth(depth) {  function setCatDepth(depth) {
     document.coursecats.catalog_maxdepth.value = depth;      var depth = parseInt(depth);
     if (depth == '') {      if (depth !== NaN) {
         document.coursecats.currcat_0.value = '';          if (depth > 0) {
               var possmaxd = 0;
               var toplevel = new Array($toplevelstr);
               var maxdepths = new Array($maxdepthstr);
               if (toplevel.length) {
                   for (var i=0; i<toplevel.length; i++) {
                       var item = unescape(toplevel[i]);
                       if (item == document.coursecats.currcat_0.value) {
                           possmaxd = maxdepths[i];
                           break;
                       }
                   }
               }
               if (depth > possmaxd) {
                   depth = possmaxd;
               }
           }
           document.coursecats.catalog_maxdepth.value = depth;
       } else {
           document.coursecats.currcat_0.value = ''; 
           document.coursecats.catalog_maxdepth.value = '';
     }      }
     document.coursecats.submit();      document.coursecats.submit();
     return;      return;
Line 358  ENDJS Line 392  ENDJS
     return OK;      return OK;
 }  }
   
   sub validate_input {
       my ($cats,$maxd) = @_;
       my $currcat = '';
       my $depth = 0;
       if ($env{'form.catalog_maxdepth'} ne '') {
           $env{'form.catalog_maxdepth'} =~ s{\D}{}g;
       }
       if ((ref($cats) eq 'ARRAY') && (ref($maxd) eq 'HASH')) {
           if (ref($cats->[0]) eq 'ARRAY') {
               if (@{$cats->[0]} == 1) {
                   if ($cats->[0][0] eq 'instcode') {
                       $currcat = 'instcode::0';
                   } elsif ($cats->[0][0] eq 'communities') {
                       $currcat = 'communities::0';
                   } elsif ($cats->[0][0] eq 'placement') {
                       $currcat = 'placement::0';
                   } else {
                       my $name = $cats->[0][0];
                       $currcat = &escape($name).'::0';
                   }
                   if (exists($maxd->{$cats->[0][0]})) {
                       if ($env{'form.catalog_maxdepth'} <= $maxd->{$cats->[0][0]}) {
                           $depth = $env{'form.catalog_maxdepth'};
                       } else {
                           $depth = $maxd->{$cats->[0][0]};
                       }
                   }
               } elsif ((@{$cats->[0]} > 1) && ($env{'form.currcat_0'} ne '')) {
                   my ($escname) = ($env{'form.currcat_0'} =~ /^([^:]+)\:\:0$/);
                   if ($escname =~ /^instcode|communities|placement$/) {
                       $currcat = $env{'form.currcat_0'};
                       if (exists($maxd->{$escname})) {
                           if ($env{'form.catalog_maxdepth'} <= $maxd->{$escname}) {
                               $depth = $env{'form.catalog_maxdepth'};
                           } else {
                               $depth = $maxd->{$escname};
                           }
                       } else {
                           $depth = 1;
                       }
                   } elsif ($escname ne '') {
                       my $name = &unescape($escname);
                       if (grep(/^\Q$name\E$/,@{$cats->[0]})) {
                           $currcat = $env{'form.currcat_0'};
                           if (exists($maxd->{$name})) {
                               if ($env{'form.catalog_maxdepth'} <= $maxd->{$name}) {
                                   $depth = $env{'form.catalog_maxdepth'};
                               } else {
                                   $depth = $maxd->{$name};
                               }
                           }
                       }
                   }
               }
           }
       }
       $env{'form.currcat_0'} = $currcat;
       $env{'form.catalog_maxdepth'} = $depth;
       return;
   }
   
 sub course_details {  sub course_details {
     my ($r,$codedom,$formname,$domdesc,$trails,$allitems,$codetitles) = @_;      my ($r,$codedom,$formname,$domdesc,$trails,$allitems,$codetitles) = @_;
     my $output;      my $output;
Line 1585  sub courseinfo_row { Line 1680  sub courseinfo_row {
     if ($showsyllabus) {      if ($showsyllabus) {
         my $usehttp = 0;          my $usehttp = 0;
         if (($ENV{'SERVER_PORT'} == 443) && ($extsyllplain)) {          if (($ENV{'SERVER_PORT'} == 443) && ($extsyllplain)) {
             $usehttp = 1;              unless (&Apache::lonnet::uses_sts()) {
                   $usehttp = 1;
               }
         }          }
         $output .= '<a href="javascript:ToSyllabus('."'$cdom','$cnum','$usehttp'".')">'.&mt('Syllabus').'</a>';          $output .= '<a href="javascript:ToSyllabus('."'$cdom','$cnum','$usehttp'".')">'.&mt('Syllabus').'</a>';
     } else {      } else {
Line 1667  sub identify_sections { Line 1764  sub identify_sections {
 sub get_valid_classes {  sub get_valid_classes {
     my ($seclist,$xlist_items,$crscode,$owners,$cdom,$cnum) = @_;      my ($seclist,$xlist_items,$crscode,$owners,$cdom,$cnum) = @_;
     my $response;      my $response;
     my %validations;      my (@sections,@xlists,%possclasses,%okclasses,%validations);
     @{$validations{'sections'}} = ();      @{$validations{'sections'}} = ();
     @{$validations{'xlists'}} = ();      @{$validations{'xlists'}} = ();
     my $totalitems = 0;      my $totalitems = 0;
     if ($seclist) {      if ($seclist) {
         foreach my $sec (split(/, /,$seclist)) {          @sections = split(/,\s+/,$seclist);
             my $class = $crscode.$sec;          map { $possclasses{$crscode.$_} = 1; } @sections;
             if (&Apache::lonnet::auto_validate_class_sec($cdom,$cnum,$owners,      }
  $class) eq 'ok') {      if ($xlist_items) {
           @xlists = split(/,\s+/,$xlist_items);
           map { $possclasses{$_} = 1; } @xlists;
       }
       my %okclasses = &Apache::lonnet::auto_validate_instclasses($cdom,$cnum,$owners,
                                                                  \%possclasses);
       if (keys(%okclasses)) {
           foreach my $sec (@sections) {
               if ($okclasses{$crscode.$sec}) {
                 if (!grep(/^\Q$sec$\E/,@{$validations{'sections'}})) {                  if (!grep(/^\Q$sec$\E/,@{$validations{'sections'}})) {
                     push(@{$validations{'sections'}},$sec);                      push(@{$validations{'sections'}},$sec);
                     $totalitems ++;                      $totalitems ++;
                 }                  }
             }              }
         }          }
     }          foreach my $item (@xlists) {
     if ($xlist_items) {              if ($okclasses{$item}) {
         foreach my $item (split(/, /,$xlist_items)) {                  if (!grep(/^\Q$item\E$/,@{$validations{'xlists'}})) {
             if (&Apache::lonnet::auto_validate_class_sec($cdom,$cnum,$owners,  
  $item) eq 'ok') {  
                 if (!grep(/^\Q$item$\E/,@{$validations{'xlists'}})) {  
                     push(@{$validations{'xlists'}},$item);                      push(@{$validations{'xlists'}},$item);
                     $totalitems ++;                      $totalitems ++;
                 }                  }

Removed from v.1.93  
changed lines
  Added in v.1.98


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