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'); |