Diff for /loncom/interface/courseclassifier.pm between versions 1.21 and 1.30

version 1.21, 2015/05/13 19:30:13 version 1.30, 2023/07/10 01:55:15
Line 34  use Apache::loncommon; Line 34  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA;  use LONCAPA;
   
 sub retrieve_instcodes {  
     my ($coursecodes,$codedom) = @_;  
     my $totcodes;  
     my %courses = &Apache::lonnet::courseiddump($codedom,'.',1,'.','.','.',  
                                                 undef,undef,'Course');  
     foreach my $course (keys(%courses)) {  
         if (ref($courses{$course}) eq 'HASH') {  
             if ($courses{$course}{'inst_code'} ne '') {  
                 $$coursecodes{$course} = $courses{$course}{'inst_code'};  
                 $totcodes ++;  
             }  
         }  
     }  
     return $totcodes;  
 }  
   
 sub sort_cats {  sub sort_cats {
     my ($num,$cat_order,$codetitles,$idsarrayref,$sorted) = @_;      my ($num,$cat_order,$codetitles,$idsarrayref,$sorted) = @_;
     my @unsorted = @{$idsarrayref};      my @unsorted = @{$idsarrayref};
Line 85  sub recurse_list { Line 69  sub recurse_list {
                     push @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}}, $$codes{$cid}{$$codetitles[2]};                      push @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}}, $$codes{$cid}{$$codetitles[2]};
                 }                  }
             } else {              } else {
                 @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = ("$$codes{$cid}{$$codetitles[2]}");            }                  @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = ("$$codes{$cid}{$$codetitles[2]}");
               }
         } else {          } else {
             %{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}} = ();              %{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}} = ();
             @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = ("$$codes{$cid}{$$codetitles[2]}");              @{$$idarrays{$$codetitles[2]}{$$codes{$cid}{$$codetitles[0]}}{$$codes{$cid}{$$codetitles[1]}}} = ("$$codes{$cid}{$$codetitles[2]}");
Line 260  sub build_code_selections { Line 245  sub build_code_selections {
 }  }
   
 sub javascript_code_selections {  sub javascript_code_selections {
     my ($formname,@codetitles) = @_;      my ($formname,$codetitlesref,$knowncodes,$sectionlist) = @_;
       return unless (ref($codetitlesref) eq 'ARRAY');
       my @codetitles = @{$codetitlesref};
     my $numtitles = @codetitles;      my $numtitles = @codetitles;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                       Select => 'Select',                        Select => 'Select',
Line 355  sub javascript_code_selections { Line 342  sub javascript_code_selections {
    document.$formname.Number.selectedIndex = 0     document.$formname.Number.selectedIndex = 0
  }   }
 }  }
   END_OF_BLOCK
   
       if ((ref($knowncodes) eq 'HASH') && (keys(%{$knowncodes}) > 0)) {
           my @standardnames = &Apache::loncommon::get_standard_codeitems();
           my (%local_to_standard,$currstr);
           for (my $i=0; $i<@codetitles; $i++) {
               $local_to_standard{$codetitles[$i]} = $standardnames[$i];
           }
           $output .= <<"ENDJS";
   
   function initialize_codes() {
   ENDJS
           for (my $i=0; $i<@codetitles-1; $i++) {
               my $item = $local_to_standard{$codetitles[$i]};
               $currstr .= $knowncodes->{$codetitles[$i]};
               if ($knowncodes->{$codetitles[$i]} != -1) {
                   $output .= '
       for (var j=0; j<document.'.$formname.'.'.$item.'.length; j++) {
           if (document.'.$formname.'.'.$item.'[j].value == "'.$knowncodes->{$codetitles[$i]}.'") {
               document.'.$formname.'.'.$item.'.selectedIndex = j;
           }
       }
   ';
               }
               $output .= '   courseSet('."'$codetitles[$i]'".')'."\n";
           }
           my $lastcodetitle =  $local_to_standard{$codetitles[-1]};
           $currstr .= $knowncodes->{$codetitles[-1]};
           if ($knowncodes->{$codetitles[-1]} != -1) {
               $output .= '
       for (var j=0; j<document.'.$formname.'.'.$lastcodetitle.'.length; j++) {
           if (document.'.$formname.'.'.$lastcodetitle.'[j].value == "'.$knowncodes->{$codetitles[-1]}.'") {
               document.'.$formname.'.'.$lastcodetitle.'.selectedIndex = j;
           }
       }
   ';
           }
           $output .= "    return;\n}\n";
           if ($sectionlist) {
               $output .= '
   function toggleSecVis() {
       var currcode = "";
       var crscode = '."'$currstr'".';
   ';
               for (my $i=0; $i<@codetitles-1; $i++) {
                   my $item = $local_to_standard{$codetitles[$i]};
                   $output .= 'currcode += document.'.$formname.'.'.$item.'.options[document.'.$formname.'.'.$item.'.selectedIndex].value;'."\n";
               }
               my $lastcodetitle =  $local_to_standard{$codetitles[-1]};
               if ($lastcodetitle ne '') {
                   if ($knowncodes->{$codetitles[-1]} != -1) {
                       $output .= 'currcode += document.'.$formname.'.'.$lastcodetitle.'.options[document.'.$formname.'.'.$lastcodetitle.'.selectedIndex].value;'."\n";
                   }
               }
               $output .= <<"ENDSEC";
       var showlist = 'none';
       var showbox = 'inline';
       if ((crscode != '') && (currcode == crscode)) {
           showlist = 'inline';
           showbox = 'none';
       }
       if (document.getElementById('LC_helpdesk_sectionlist')) {
           document.getElementById('LC_helpdesk_sectionlist').style.display = showlist;
       }
       if (document.getElementById('LC_helpdesk_section')) {
           document.getElementById('LC_helpdesk_section').style.display = showbox;
       }
       return;
   }
   
   ENDSEC
   
           }
       } else {
           $output .= <<"END_OF_JS";
   
 function initialize_codes() {  function initialize_codes() {
     courseSet();      courseSet();
     return;      return;
 }  }
 END_OF_BLOCK  END_OF_JS
       }
       return $output;
 }  }
   
   
 sub javascript_definitions {  sub javascript_definitions {
     my ($codetitles,$idlist,$idlist_titles,$idnums,$cat_titles) = @_;      my ($codetitles,$idlist,$idlist_titles,$idnums,$cat_titles) = @_;
     my $numtitles = @{$codetitles};      my $numtitles = @{$codetitles};
Line 454  END Line 517  END
   
 sub instcode_selectors_data {  sub instcode_selectors_data {
     my ($codedom,$formname,$cat_items,$codetitles,$cat_titles,$cat_order,$officialjs) = @_;      my ($codedom,$formname,$cat_items,$codetitles,$cat_titles,$cat_order,$officialjs) = @_;
     my ($jscript,%coursecodes,%codes,%idlist,%idnums,%idlist_titles,      my ($jscript,$codes,%idlist,%idnums,%idlist_titles,%by_year,%by_sem,%by_dept);
         %by_year,%by_sem,%by_dept);      my ($numtitles,$lasttitle,$totcodes);
     my ($numtitles,$lasttitle);      my $instcats = &Apache::lonnet::get_dom_instcats($codedom);
     my $caller = 'global';      if (ref($instcats) eq 'HASH') {
     my $totcodes = &retrieve_instcodes(\%coursecodes,$codedom);          if ((ref($instcats->{'codetitles'}) eq 'ARRAY') && (ref($instcats->{'codes'}) eq 'HASH') &&
     if ($totcodes > 0) {              (ref($instcats->{'cat_titles'}) eq 'HASH') && (ref($instcats->{'cat_order'}) eq 'HASH')) {
         if (&Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,              %{$codes} = %{$instcats->{'codes'}};
                            \%codes,$codetitles,$cat_titles,$cat_order) eq 'ok') {              @{$codetitles} = @{$instcats->{'codetitles'}};
             &build_code_selections(\%codes,$codetitles,$cat_titles,$cat_order,              %{$cat_titles} = %{$instcats->{'cat_titles'}};
               %{$cat_order} = %{$instcats->{'cat_order'}};
               $totcodes = scalar(keys(%{$codes}));
               if ((!$totcodes) && (exists($instcats->{'totcodes'}))) {
                   $totcodes = $instcats->{'totcodes'};
               }
               &build_code_selections($codes,$codetitles,$cat_titles,$cat_order,
                                    \%idlist,\%idnums,\%idlist_titles);                                     \%idlist,\%idnums,\%idlist_titles);
             my ($scripttext,$longtitles) =               my ($scripttext,$longtitles) =
                 &javascript_definitions($codetitles,\%idlist,\%idlist_titles,                  &javascript_definitions($codetitles,\%idlist,\%idlist_titles,
                                         \%idnums,$cat_titles);                                          \%idnums,$cat_titles);
             my $longtitles_str = join('","',@{$longtitles});              my $longtitles_str = join('","',@{$longtitles});
Line 575  function setElements() { Line 644  function setElements() {
 }  }
   
 sub build_instcode_selectors {  sub build_instcode_selectors {
     my ($numtitles,$lasttitle,$cat_items,$codetitles,$cat_titles,$cat_order) = @_;      my ($numtitles,$lasttitle,$cat_items,$codetitles,$cat_titles,$cat_order,$official,$class,$id,$noedit) = @_;
     my $output;      my $output;
     my @standardnames = &Apache::loncommon::get_standard_codeitems();      my @standardnames = &Apache::loncommon::get_standard_codeitems();
     if ($numtitles > 0) {      if ($numtitles > 0) {
         my $style;          my $style;
         if ($env{'form.official'} eq 'off') {          if ($official eq 'off') {
             $style = ' style="display: none"';              $style = ' style="display: none"';
         }          }
         $output .= '<div id="instcodes"'.$style.'><table><tr>';          if ($id eq '') {
               $id = 'instcodes';
           }
           my $disabled;
           if ($noedit) {
               $disabled = ' disabled="disabled"';
           }
           $output .= '<div id="'.$id.'"'.$style.'><table><tr>';
         for (my $k=0; $k<$lasttitle-1; $k++) {          for (my $k=0; $k<$lasttitle-1; $k++) {
             my (@items,@unsorted);              my (@items,@unsorted);
             if (ref($cat_items->{$codetitles->[$k]}) eq 'ARRAY') {              if (ref($cat_items->{$codetitles->[$k]}) eq 'ARRAY') {
Line 599  sub build_instcode_selectors { Line 675  sub build_instcode_selectors {
                 @longitems = @items;                  @longitems = @items;
             }              }
             $output .= '<td align="center">'.$codetitles->[$k].'<br />'."\n".              $output .= '<td align="center">'.$codetitles->[$k].'<br />'."\n".
                        '<select name="'.$standardnames[$k].'" onchange="courseSet(this)"'.                         '<select name="'.$standardnames[$k].'" onchange="courseSet(this)"';
                        '>'."\n".'<option value="0">'.&mt('All').'</option>'."\n";              if ($class) {
                   $output .= ' class="'.$class.'"';
               }
               $output .= $disabled.'>'."\n".'<option value="0">'.&mt('All').'</option>'."\n";
             for (my $i=0; $i<@items; $i++) {              for (my $i=0; $i<@items; $i++) {
                 if ($longitems[$i] eq '') {                  if ($longitems[$i] eq '') {
                     $longitems[$i] = $items[$i];                      $longitems[$i] = $items[$i];
Line 610  sub build_instcode_selectors { Line 689  sub build_instcode_selectors {
             $output .= '</select></td>';              $output .= '</select></td>';
         }          }
         $output .= '<td align="center">'.$codetitles->[$lasttitle-1].'<br />'."\n".          $output .= '<td align="center">'.$codetitles->[$lasttitle-1].'<br />'."\n".
                    '<select name="'.$standardnames[$lasttitle-1].'">'."\n".                     '<select name="'.$standardnames[$lasttitle-1].'"';
           if ($class) {
               $output .= ' class="'.$class.'"';
           }
           $output .= $disabled.'>'."\n".
                    '<option value="0">'.&mt('All')."\n".                     '<option value="0">'.&mt('All')."\n".
                    '</option>'."\n".'</select>'."\n".                     '</option>'."\n".'</select>'."\n".
                    '</td></tr></table>'."\n";                     '</td></tr></table>'."\n";
         if ($numtitles > 4) {          if ($numtitles > 4) {
             $output .= '<br /><br />'.$codetitles->[$numtitles-1].'<br />'."\n".              $output .= '<br /><br />'.$codetitles->[$numtitles-1].'<br />'."\n".
                        '<input type="text" name="'.$standardnames[$numtitles-1].                         '<input type="text" name="'.$standardnames[$numtitles-1].
                        '" /><br />'."\n";                         '"'.$disabled.' /><br />'."\n";
         }          }
         $output .= '</div>';          $output .= '</div>';
     }      }
Line 644  sub instcode_selectors { Line 727  sub instcode_selectors {
                    '<input type="radio" name="official" value="off"'.$unofficial.                     '<input type="radio" name="official" value="off"'.$unofficial.
                    ' onclick="toggleOfficial();" />'.&mt('No').'</label></span><br />'.                     ' onclick="toggleOfficial();" />'.&mt('No').'</label></span><br />'.
                    &build_instcode_selectors($numtitles,$lasttitle,\%cat_items,$codetitles,                     &build_instcode_selectors($numtitles,$lasttitle,\%cat_items,$codetitles,
                                              \%cat_titles,\%cat_order)."\n".                                               \%cat_titles,\%cat_order,$env{'form.official'})."\n".
                    '<input type="hidden" name="numtitles" value="'.$numtitles.'" />'."\n".                     '<input type="hidden" name="numtitles" value="'.$numtitles.'" />'."\n".
                    '<input type="hidden" name="state" value="listing" />'."\n";                     '<input type="hidden" name="state" value="listing" />'."\n";
     }      }
Line 968  sub instcode_search_str { Line 1051  sub instcode_search_str {
 sub instcode_from_selectors {  sub instcode_from_selectors {
     my ($cdom,$noregexps) = @_;      my ($cdom,$noregexps) = @_;
     my $instcode;      my $instcode;
     my $caller = 'global';      my (@codetitles,%codedefaults,@code_order);
     my (%coursecodes,%codes,@codetitles,%cat_titles,%cat_order,      my $instcats = &Apache::lonnet::get_dom_instcats($cdom);
         %codedefaults,@code_order);      if (ref($instcats) eq 'HASH') {
     my $format_reply =          if (ref($instcats->{'codetitles'}) eq 'ARRAY') {
         &Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes,              @codetitles = @{$instcats->{'codetitles'}};
                             \%codes,\@codetitles,\%cat_titles,\%cat_order);          }
       }
     my $defaults_result =      my $defaults_result =
         &Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults,          &Apache::lonnet::auto_instcode_defaults($cdom,\%codedefaults,
                                                 \@code_order);                                                  \@code_order);
     if (($defaults_result eq 'ok') && ($format_reply eq 'ok')) {      if (($defaults_result eq 'ok') && (@codetitles > 0)) {
         my @standardnames = &Apache::loncommon::get_standard_codeitems();          my @standardnames = &Apache::loncommon::get_standard_codeitems();
         my %local_to_standard;          my %local_to_standard;
         for (my $i=0; $i<@codetitles; $i++) {          for (my $i=0; $i<@codetitles; $i++) {

Removed from v.1.21  
changed lines
  Added in v.1.30


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