Diff for /loncom/interface/coursecatalog.pm between versions 1.50 and 1.51

version 1.50, 2009/03/18 20:58:02 version 1.51, 2009/05/01 01:30:08
Line 226  function ToSelfenroll(courseid) { Line 226  function ToSelfenroll(courseid) {
 END  END
 }  }
   
   
 sub instcode_course_selector {  sub instcode_course_selector {
     my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_;      my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_;
     my %coursecodes = ();      my %coursecodes = ();
Line 234  sub instcode_course_selector { Line 233  sub instcode_course_selector {
     my @codetitles = ();      my @codetitles = ();
     my %cat_titles = ();      my %cat_titles = ();
     my %cat_order = ();      my %cat_order = ();
     my %idlist = ();  
     my %idnums = ();  
     my %idlist_titles = ();  
     my %by_year;  
     my %by_sem;  
     my %by_dept;  
     my %cat_items;      my %cat_items;
     my $caller = 'global';      my $caller = 'global';
     my $format_reply;      my $format_reply;
     my $totcodes = 0;  
     my $jscript = '';  
     my ($numtitles,$lasttitle);  
     my %add_entries = (topmargin    => "0",      my %add_entries = (topmargin    => "0",
                        marginheight => "0",);                         marginheight => "0",);
     my $js;      my ($jscript,$totcodes,$numtitles,$lasttitle) = 
     $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom);          &Apache::courseclassifier::instcode_selectors_data($codedom,$formname,
     if ($totcodes > 0) {                             \%cat_items,\@codetitles,\%cat_titles,\%cat_order);
         $format_reply = &Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order);      my $js = '<script type"text/javascript">'."\n$jscript\n$catjs\n".
         if ($format_reply eq 'ok') {  
             my $numtypes = @codetitles;  
             &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);  
             my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);  
             my $longtitles_str = join('","',@{$longtitles});  
             my $allidlist = $idlist{$codetitles[0]};  
             $numtitles = @codetitles;  
             $lasttitle = $numtitles;  
             if ($numtitles > 4) {  
                 $lasttitle = 4;  
             }  
             if ($numtitles == 0) {  
                 if (!defined($env{'form.state'})) {  
                     $env{'form.state'} = 'listing';  
                 }  
             } else {  
                 my @data = ('top');  
                 for (my $k=0; $k<$lasttitle; $k++) {  
                     my $cat = $codetitles[$k];  
                     my $level = 1;  
                     $level = &recurse_options($codetitles[$k],$idlist{$codetitles[$k]},$level,$cat,\%cat_items,\@data,\%by_year,\%by_sem,\%by_dept);  
                 }  
                 $scripttext .= &build_javascript(\%by_year,\%by_sem,\%by_dept,\%cat_order,\@codetitles);  
                 $jscript .= &javascript_select_filler($formname,$scripttext,\@codetitles,$longtitles_str,$allidlist);  
                 if ($env{'form.state'} eq 'listing') {  
                     $jscript .= '  
 function setElements() {  
 ';  
                     for (my $i=0; $i<@codetitles-1; $i++) {  
                         if ($env{'form.'.$codetitles[$i]} != -1) {  
                             $jscript .= '  
     for (var j=0; j<document.'.$formname.'.'.$codetitles[$i].'.length; j++) {  
         if (document.'.$formname.'.'.$codetitles[$i].'[j].value == "'.$env{'form.'.$codetitles[$i]}.'") {  
             document.'.$formname.'.'.$codetitles[$i].'.selectedIndex = j;  
         }  
     }  
 ';  
                         }  
                     }  
                     $jscript .= '   courseSet()'."\n";  
                     if ($env{'form.'.$codetitles[-1]} != -1) {  
                         $jscript .= '  
     for (var j=0; j<document.'.$formname.'.'.$codetitles[-1].'.length; j++) {  
         if (document.'.$formname.'.'.$codetitles[-1].'[j].value == "'.$env{'form.'.$codetitles[-1]}.'") {  
             document.'.$formname.'.'.$codetitles[-1].'.selectedIndex = j;  
         }  
     }  
 ';  
                     }  
                     $jscript .= '}';  
                 }  
             }  
         }  
         $js = '<script type"text/javascript">'."\n$jscript\n$catjs\n".  
               '</script>';                '</script>';
       if ($totcodes) {
         if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) {          if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) {
             $add_entries{'onLoad'} = 'setElements()';              $add_entries{'onLoad'} = 'setElements()';
         }          }
Line 318  function setElements() { Line 255  function setElements() {
                   '<input type="hidden" name="currcat_0" value="instcode::0" />'.                    '<input type="hidden" name="currcat_0" value="instcode::0" />'.
                   &additional_filters($codedom));                    &additional_filters($codedom));
         if ($numtitles > 0) {          if ($numtitles > 0) {
             $r->print('<b>'.&mt('Choose which course(s) to list.').'</b><br />');              $r->print('<b>'.&mt('Choose which course(s) to list.').'</b><br />'.
             $r->print('<table><tr>');                        &Apache::courseclassifier::build_instcode_selectors($numtitles,
             for (my $k=0; $k<$lasttitle-1; $k++) {                         $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order));
                 my (@items,@unsorted);  
                 if (ref($cat_items{$codetitles[$k]}) eq 'ARRAY') {  
                     @unsorted = @{$cat_items{$codetitles[$k]}};  
                 }  
                 &Apache::courseclassifier::sort_cats($k,\%cat_order,\@codetitles,\@unsorted,\@items);  
                 my @longitems;  
                 if (defined($cat_titles{$codetitles[$k]})) {  
                     foreach my $item (@items) {  
                         push(@longitems,$cat_titles{$codetitles[$k]}{$item});  
                     }  
                 } else {  
                     @longitems = @items;  
                 }  
                 $r->print('<td align="center">'.$codetitles[$k].'<br />'."\n".  
                           '<select name="'.$codetitles[$k].'" onChange="courseSet()"');  
                 $r->print('>'."\n".'<option value="0" />All'."\n");  
                 for (my $i=0; $i<@items; $i++) {  
                     if ($longitems[$i] eq '') {  
                         $longitems[$i] = $items[$i];  
                     }  
                     $r->print(' <option value="'.$items[$i].'">'.$longitems[$i].'</option>');  
                 }  
                 $r->print('</select></td>');  
             }  
             $r->print('<td align="center">'.$codetitles[$lasttitle-1].'<br />'."\n".  
                       '<select name="'.$codetitles[$lasttitle-1].'">'."\n".  
                       '<option value="0">All'."\n".  
                       '</option>'."\n".'</select>'."\n".  
                  '</td></tr></table>'."\n");  
             if ($numtitles > 4) {  
                 $r->print('<br /><br />'.$codetitles[$numtitles-1].'<br />'."\n".  
                 '<input type="text" name="'.$codetitles[$numtitles-1].'" /><br />'."\n");  
             }  
             $r->print('<br />');  
         }          }
         $r->print('<input type="hidden" name="coursenum" value="" />'."\n".          $r->print('<input type="hidden" name="coursenum" value="" />'."\n".
                   '<input type="hidden" name="sortby" value="" />'."\n".                    '<input type="hidden" name="sortby" value="" />'."\n".
Line 615  sub user_is_dc { Line 518  sub user_is_dc {
     return;      return;
 }  }
   
 sub recurse_options {  
     my ($currkey,$currlist,$level,$cat,$cat_options,$data,$by_year,$by_sem,$by_dept) = @_;  
     if (ref($currlist) eq 'HASH') {  
         $level ++;  
         foreach my $key (sort(keys(%{$currlist}))) {  
             $$data[$level-1]= $key;  
             &recurse_options($key,$currlist->{$key},$level,$cat,$cat_options,$data,$by_year,$by_sem,$by_dept);  
         }  
     } else {  
         $level --;  
         my @contents = split(/","/,$currlist);  
         foreach my $item (@contents) {  
             if (!grep(/^\Q$item\E$/,@{$cat_options->{$cat}})) {  
                 push(@{$cat_options->{$cat}},$item);  
             }  
             if ($level == 3) {  
                 if (!grep/^\Q$item\E$/,@{$by_year->{$data->[1]}->{$currkey}}) {  
                     push(@{$by_year->{$data->[1]}->{$currkey}},$item);                   
                 }  
                 if (!grep/^\Q$item\E$/,@{$by_sem->{$data->[2]}->{$currkey}}) {  
                     push(@{$by_sem->{$data->[2]}->{$currkey}},$item);  
                 }  
                 if (!grep/^\Q$item\E$/,@{$by_dept->{$currkey}}) {  
                     push(@{$by_dept->{$currkey}},$item);  
                 }  
   
             }  
         }  
     }  
     return $level;  
 }  
   
 sub build_javascript {  
     my ($by_year,$by_sem,$by_dept,$cat_order,$codetitles) = @_;  
     my @unsorted = keys(%{$by_year});  
     my @sorted_yrs;   
     &Apache::courseclassifier::sort_cats('0',$cat_order,$codetitles,\@unsorted,\@sorted_yrs);  
     my $output = 'var idcse_by_yr_year = new Array("'.join('","',@sorted_yrs).'");'."\n".  
                  'var idcse_by_yr_dept = new Array('.scalar(@sorted_yrs).');'."\n".  
                  'var idcse_by_yr_num = new Array('.scalar(@sorted_yrs).');'."\n";  
     for (my $i=0; $i<@sorted_yrs; $i++) {  
         my $numkeys = keys(%{$by_year->{$sorted_yrs[$i]}});  
         $output .= " idcse_by_yr_num[$i] = new Array($numkeys);\n";  
         if (ref($by_year->{$sorted_yrs[$i]}) eq 'HASH') {  
             @unsorted = keys(%{$by_year->{$sorted_yrs[$i]}});  
             my @sorted_depts;  
             &Apache::courseclassifier::sort_cats('2',$cat_order,$codetitles,\@unsorted,\@sorted_depts);  
             $output .= qq| idcse_by_yr_dept[$i] = new Array ("|.join('","',@sorted_depts).'");'."\n";  
             for (my $j=0; $j<@sorted_depts; $j++) {  
                 $output .= qq| idcse_by_yr_num[$i][$j] = new Array ("|;  
                 $output .= join('","',sort(@{$by_year->{$sorted_yrs[$i]}->{$sorted_depts[$j]}})).'");'."\n";  
             }  
         }  
     }  
     @unsorted = keys(%{$by_sem});  
     my @sorted_sems;  
     &Apache::courseclassifier::sort_cats('1',$cat_order,$codetitles,\@unsorted,\@sorted_sems);  
     $output .=  'idcse_by_sem_sems = new Array("'.join('","',@sorted_sems).'");'."\n".  
                 'idcse_by_sem_dept = new Array('.scalar(@sorted_sems).');'."\n".  
                 'idcse_by_sem_num = new Array('.scalar(@sorted_sems).');'."\n";  
     for (my $i=0; $i<@sorted_sems; $i++) {  
         my $numkeys = keys(%{$by_sem->{$sorted_sems[$i]}});  
         $output .= " idcse_by_sem_num[$i] = new Array($numkeys);\n";  
         if (ref($by_sem->{$sorted_sems[$i]}) eq 'HASH') {  
             @unsorted = keys(%{$by_sem->{$sorted_sems[$i]}});  
             my @sorted_depts;  
             &Apache::courseclassifier::sort_cats('2',$cat_order,$codetitles,\@unsorted,\@sorted_depts);  
             $output .= qq| idcse_by_sem_dept[$i] = new Array("|.join('","',@sorted_depts).'");'."\n";  
             for (my $j=0; $j<@sorted_depts; $j++) {  
                 $output .= qq| idcse_by_sem_num[$i][$j] = new Array ("|.join('","',sort(@{$by_sem->{$sorted_sems[$i]}->{$sorted_depts[$j]}})).'");'."\n";  
             }  
         }  
     }  
     @unsorted = keys(%{$by_dept});  
     my @sorted_deps;  
     &Apache::courseclassifier::sort_cats('2',$cat_order,$codetitles,\@unsorted,\@sorted_deps);  
     $output .= 'idcse_by_dep = new Array('.scalar(@sorted_deps).');'."\n";   
     for (my $k=0; $k<@sorted_deps; $k++) {  
         $output .= qq| idcse_by_dep[$k] = new Array ("|.join('","',sort(@{$by_dept->{$sorted_deps[$k]}})).'");'."\n";  
     }  
     return $output;  
 }  
   
 sub search_official_courselist {  sub search_official_courselist {
     my ($domain,$numtitles) = @_;      my ($domain,$numtitles) = @_;
     my $instcode;      my $instcode = &Apache::courseclassifier::instcode_search_str($domain,$numtitles);
     if (defined($numtitles) && $numtitles == 0) {  
         $instcode = '.+';  
     } else {  
         my (%codedefaults,@code_order);  
         my $defaults_result =   
             &Apache::lonnet::auto_instcode_defaults($domain,\%codedefaults,  
                                                     \@code_order);  
         if ($defaults_result eq 'ok') {  
             $instcode ='^';  
             foreach my $item (@code_order) {  
                 if ($env{'form.'.$item} eq '0' ) {  
                     $instcode .= $codedefaults{$item};   
                 } else {  
                     $instcode .= $env{'form.'.$item};  
                 }  
             }  
             $instcode .= '$';  
         } else {  
             $instcode = '.';  
         }  
     }  
     my $showhidden;      my $showhidden;
     if (&user_is_dc($domain)) {      if (&user_is_dc($domain)) {
         $showhidden = $env{'form.showhidden'};          $showhidden = $env{'form.showhidden'};
Line 1219  sub get_valid_classes { Line 1018  sub get_valid_classes {
     return $response;      return $response;
 }  }
   
 sub javascript_select_filler {  
     my ($formname,$scripttext,$codetitles,$longtitles_str,$allidlist) = @_;  
     my $output = <<END;  
 function courseSet() {  
     var longtitles = new Array ("$longtitles_str");  
     var valyr = document.$formname.Year.options[document.$formname.Year.selectedIndex].value  
     var valsem  = document.$formname.Semester.options[document.$formname.Semester.selectedIndex].value  
     var valdept = document.$formname.Department.options[document.$formname.Department.selectedIndex].value  
     var valclass = document.$formname.Number.options[document.$formname.Number.selectedIndex].value  
     var idyears = new Array("$allidlist");  
     var idyr = -1;  
     var idsem = -1;  
     var iddept = -1;  
     document.$formname.Number.length = 0;  
   
     $scripttext  
   
     selYear = document.$formname.Year.selectedIndex-1;  
     selSemester = document.$formname.Semester.selectedIndex-1;  
     selDepartment = document.$formname.Department.selectedIndex-1;  
     if (selYear == -1) {  
         if (selSemester == -1) {  
             if (selDepartment > -1) {  
                 document.$formname.Number.options[0] =  new Option('All','0',false,false);  
                 for (var k=0; k<idcse_by_dep[selDepartment].length; k++) {  
                     document.$formname.Number.options[k+1] = new Option(idcse_by_dep[selDepartment][k],idcse_by_dep[selDepartment][k],false,false);  
   
                 }  
             }   
             else {  
                 document.$formname.Number.options[0] = new Option("All","0",true,true);  
             }  
         }  
         else {  
             if (selDepartment > -1) {  
                 for (var i=0; i<idcse_by_sem_sems.length; i++) {  
                     if (idcse_by_sem_sems[i] == valsem) {  
                         idsem = i;  
                     }  
                 }  
                 if (idsem != -1) {  
                     for (var i=0; i<idcse_by_sem_dept[idsem].length; i++) {  
                         if (idcse_by_sem_dept[idsem][i] == valdept) {  
                             iddept = i;  
                         }  
                     }  
                 }  
                 if (iddept != -1) {  
                     document.$formname.Number.options[0] =  new Option('All','0',false,false);  
                     for (var k=0; k<idcse_by_sem_num[idsem][iddept].length; k++) {  
                         document.$formname.Number.options[k+1] = new Option(idcse_by_sem_num[idsem][iddept][k],idcse_by_sem_num[idsem][iddept][k],false,false);  
                     }  
                 }  
                 else {  
                     document.$formname.Number.options[0] =  new Option('No courses','0',true,true);  
                 }  
             }  
             else {  
                 document.$formname.Number.options[0] = new Option("All","0",true,true);  
             }  
         }  
     }  
     else {  
         if (selSemester == -1) {  
             if (selDepartment > -1) {  
                 for (var i=0; i<idcse_by_yr_year.length; i++) {  
                     if (idcse_by_yr_year[i] == valyr) {  
                         idyr = i;  
                     }  
                 }  
                 if (idyr != -1) {        
                     for (var i=0; i<idcse_by_yr_dept[idyr].length; i++) {  
                         if (idcse_by_yr_dept[idyr][i] == valdept) {  
                             iddept = i;  
                         }  
                     }  
                 }  
                 if (iddept != -1) {  
                     document.$formname.Number.options[0] =  new Option('All','0',false,false);  
                     for (var k=0; k<idcse_by_yr_num[idyr][iddept].length; k++) {  
                         document.$formname.Number.options[k+1] = new Option(idcse_by_yr_num[idyr][iddept][k],idcse_by_yr_num[idyr][iddept][k],false,false);  
                     }  
                 }   
                 else {  
                     document.$formname.Number.options[0] =  new Option('No courses','0',true,true);  
                 }  
             }  
             else {  
                 document.$formname.Number.options[0] = new Option("All","0",true,true);  
             }  
         }  
         else {  
             if (selDepartment > -1) {  
                 for (var k=0; k<idyears.length; k++) {  
                     if (idyears[k] == valyr) {  
                         idyr = k;  
                     }  
                 }  
                 if (idyr != -1) {  
                     for (var k=0; k<idsems[idyr].length; k++) {  
                         if (idsems[idyr][k] == valsem) {  
                             idsem = k;  
                         }  
                     }  
                 }  
                 if (idsem != -1) {  
                     for (var k=0; k<idcodes[idyr][idsem].length; k++) {  
                         if (idcodes[idyr][idsem][k] == valdept) {  
                             iddept = k;  
                         }  
                     }  
                 }  
                 if (iddept != -1) {  
                     document.$formname.Number.options[0] =  new Option('All','0',false,false);  
                     for (var i=0; i<idcourses[idyr][idsem][iddept].length; i++) {  
                         var display = idcourses[idyr][idsem][iddept][i];  
                         if (longtitles[3] == 1) {  
                             if (idcourseslongs[idyr][idsem][iddept][i] != "") {  
                                 display = idcourseslongs[idyr][idsem][iddept][i]  
                             }  
                         }  
                         document.$formname.Number.options[i+1] = new Option(display,idcourses[idyr][idsem][iddept][i],false,false)  
                     }  
                 }   
                 else {  
                     document.$formname.Number.options[0] =  new Option('No courses','0',true,true);  
                 }  
             }   
             else {  
                 document.$formname.Number.options[0] =  new Option('All','0',true,true);  
             }  
         }  
         document.$formname.Number.selectedIndex = 0  
     }  
 }  
 END  
     return $output;  
 }  
   
 sub autoenroll_info {  sub autoenroll_info {
     my ($coursehash,$now,$seclist,$xlist_items,$code,$owners,$cdom,$cnum) = @_;      my ($coursehash,$now,$seclist,$xlist_items,$code,$owners,$cdom,$cnum) = @_;
     my $autoenrolldates = &mt('Not enabled');      my $autoenrolldates = &mt('Not enabled');

Removed from v.1.50  
changed lines
  Added in v.1.51


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