[LON-CAPA-cvs] cvs: loncom /interface coursecatalog.pm courseclassifier.pm
raeburn
raeburn@source.lon-capa.org
Fri, 01 May 2009 01:30:08 -0000
This is a MIME encoded message
--raeburn1241141408
Content-Type: text/plain
raeburn Fri May 1 01:30:08 2009 EDT
Modified files:
/loncom/interface courseclassifier.pm coursecatalog.pm
Log:
Code reuse.
- Following routines: &recurse_options(), &build_javascript(),
&javascript_select_filler()
moved from coursecatalog.pm to courseclassifier.pm for re-use.
- New routines: &instcode_selectors_data(), &build_instcode_selectors
added to courseclassifier.pm to include code previously in
coursecatalog::instcode_course_selector() --
- New routine: &instcode_search_str() added to courseclassifier.pm to include
code previously in coursecatalog::search_official_courselist().
--raeburn1241141408
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20090501013008.txt"
Index: loncom/interface/courseclassifier.pm
diff -u loncom/interface/courseclassifier.pm:1.5 loncom/interface/courseclassifier.pm:1.6
--- loncom/interface/courseclassifier.pm:1.5 Fri Mar 21 18:00:18 2008
+++ loncom/interface/courseclassifier.pm Fri May 1 01:30:08 2009
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utilities for classifying courses based on institutional code
#
-# $Id: courseclassifier.pm,v 1.5 2008/03/21 18:00:18 raeburn Exp $
+# $Id: courseclassifier.pm,v 1.6 2009/05/01 01:30:08 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -30,6 +30,7 @@
use strict;
use lib '/home/httpd/lib/perl/';
use Apache::lonnet;
+use Apache::lonlocal;
use LONCAPA;
sub retrieve_instcodes {
@@ -431,6 +432,7 @@
sub courseset_js_start {
my ($formname,$longtitles_str,$allidlist) = @_;
my $output = <<END;
+
function courseSet(caller) {
var longtitles = new Array ("$longtitles_str");
var idyr = document.$formname.Year.selectedIndex
@@ -442,5 +444,367 @@
return $output;
}
+sub instcode_selectors_data {
+ my ($codedom,$formname,$cat_items,$codetitles,$cat_titles,$cat_order) = @_;
+ my ($jscript,%coursecodes,%codes,%idlist,%idnums,%idlist_titles,
+ %by_year,%by_sem,%by_dept);
+ my ($numtitles,$lasttitle);
+ my $caller = 'global';
+ my $totcodes = &retrieve_instcodes(\%coursecodes,$codedom);
+ if ($totcodes > 0) {
+ if (&Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,
+ \%codes,$codetitles,$cat_titles,$cat_order) eq 'ok') {
+ &build_code_selections(\%codes,$codetitles,$cat_titles,$cat_order,
+ \%idlist,\%idnums,\%idlist_titles);
+ my ($scripttext,$longtitles) =
+ &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 .= '}';
+ }
+ }
+ }
+ }
+ return ($jscript,$totcodes,$numtitles,$lasttitle);
+}
+
+sub build_instcode_selectors {
+ my ($numtitles,$lasttitle,$cat_items,$codetitles,$cat_titles,$cat_order) = @_;
+ my $output;
+ if ($numtitles > 0) {
+ $output .= '<table><tr>';
+ for (my $k=0; $k<$lasttitle-1; $k++) {
+ my (@items,@unsorted);
+ if (ref($cat_items->{$codetitles->[$k]}) eq 'ARRAY') {
+ @unsorted = @{$cat_items->{$codetitles->[$k]}};
+ }
+ &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;
+ }
+ $output .= '<td align="center">'.$codetitles->[$k].'<br />'."\n".
+ '<select name="'.$codetitles->[$k].'" onChange="courseSet()"'.
+ '>'."\n".'<option value="0" />All'."\n";
+ for (my $i=0; $i<@items; $i++) {
+ if ($longitems[$i] eq '') {
+ $longitems[$i] = $items[$i];
+ }
+ $output .= ' <option value="'.$items[$i].'">'.$longitems[$i].'</option>';
+ }
+ $output .= '</select></td>';
+ }
+ $output .= '<td align="center">'.$codetitles->[$lasttitle-1].'<br />'."\n".
+ '<select name="'.$codetitles->[$lasttitle-1].'">'."\n".
+ '<option value="0">'.&mt('All')."\n".
+ '</option>'."\n".'</select>'."\n".
+ '</td></tr></table>'."\n";
+ if ($numtitles > 4) {
+ $output .= '<br /><br />'.$codetitles->[$numtitles-1].'<br />'."\n".
+ '<input type="text" name="'.$codetitles->[$numtitles-1].
+ '" /><br />'."\n";
+ }
+ $output .= '<br />';
+ }
+ return $output;
+}
+
+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;
+ &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;
+ &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;
+ &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;
+ &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 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 instcode_search_str {
+ my ($domain,$numtitles) = @_;
+ my $instcode;
+ 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 = '.+';
+ }
+ }
+ return $instcode;
+}
+
1;
Index: loncom/interface/coursecatalog.pm
diff -u loncom/interface/coursecatalog.pm:1.50 loncom/interface/coursecatalog.pm:1.51
--- loncom/interface/coursecatalog.pm:1.50 Wed Mar 18 20:58:02 2009
+++ loncom/interface/coursecatalog.pm Fri May 1 01:30:08 2009
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler for displaying the course catalog interface
#
-# $Id: coursecatalog.pm,v 1.50 2009/03/18 20:58:02 raeburn Exp $
+# $Id: coursecatalog.pm,v 1.51 2009/05/01 01:30:08 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -226,7 +226,6 @@
END
}
-
sub instcode_course_selector {
my ($r,$codedom,$formname,$domdesc,$catlinks,$catjs) = @_;
my %coursecodes = ();
@@ -234,79 +233,17 @@
my @codetitles = ();
my %cat_titles = ();
my %cat_order = ();
- my %idlist = ();
- my %idnums = ();
- my %idlist_titles = ();
- my %by_year;
- my %by_sem;
- my %by_dept;
my %cat_items;
my $caller = 'global';
my $format_reply;
- my $totcodes = 0;
- my $jscript = '';
- my ($numtitles,$lasttitle);
my %add_entries = (topmargin => "0",
marginheight => "0",);
- my $js;
- $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom);
- if ($totcodes > 0) {
- $format_reply = &Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order);
- 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".
+ my ($jscript,$totcodes,$numtitles,$lasttitle) =
+ &Apache::courseclassifier::instcode_selectors_data($codedom,$formname,
+ \%cat_items,\@codetitles,\%cat_titles,\%cat_order);
+ my $js = '<script type"text/javascript">'."\n$jscript\n$catjs\n".
'</script>';
+ if ($totcodes) {
if (($env{'form.state'} eq 'listing') && ($numtitles > 0)) {
$add_entries{'onLoad'} = 'setElements()';
}
@@ -318,43 +255,9 @@
'<input type="hidden" name="currcat_0" value="instcode::0" />'.
&additional_filters($codedom));
if ($numtitles > 0) {
- $r->print('<b>'.&mt('Choose which course(s) to list.').'</b><br />');
- $r->print('<table><tr>');
- for (my $k=0; $k<$lasttitle-1; $k++) {
- 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('<b>'.&mt('Choose which course(s) to list.').'</b><br />'.
+ &Apache::courseclassifier::build_instcode_selectors($numtitles,
+ $lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order));
}
$r->print('<input type="hidden" name="coursenum" value="" />'."\n".
'<input type="hidden" name="sortby" value="" />'."\n".
@@ -615,113 +518,9 @@
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 {
my ($domain,$numtitles) = @_;
- my $instcode;
- 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 $instcode = &Apache::courseclassifier::instcode_search_str($domain,$numtitles);
my $showhidden;
if (&user_is_dc($domain)) {
$showhidden = $env{'form.showhidden'};
@@ -1219,145 +1018,6 @@
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 {
my ($coursehash,$now,$seclist,$xlist_items,$code,$owners,$cdom,$cnum) = @_;
my $autoenrolldates = &mt('Not enabled');
--raeburn1241141408--