version 1.2, 2003/03/26 04:57:04
|
version 1.41, 2006/03/16 21:54:40
|
Line 33 use Apache::Constants qw(:common);
|
Line 33 use Apache::Constants qw(:common);
|
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::loncoursedata; |
use Apache::loncoursedata; |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::lonlocal; |
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
$r->content_type('text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
# ------------------------------------------------------------ Print the screen |
# ------------------------------------------------------------ Print the screen |
$r->print(<<ENDDOCUMENT); |
|
<html> |
|
<head> |
|
<title>The LearningOnline Network with CAPA</title> |
|
</head> |
|
ENDDOCUMENT |
|
|
|
|
|
|
# Get parameters from query string |
&Apache::loncommon::get_unprocessed_cgi |
&Apache::loncommon::get_unprocessed_cgi |
($ENV{'QUERY_STRING'},['domainfilter','descriptfilter', |
($ENV{'QUERY_STRING'},['domainfilter','descriptfilter', |
'sincefilter','form','cnumelement','cdomelement']); |
'sincefilter','form','cnumelement', |
my $domainfilter=$ENV{'form.domainfilter'}; |
'cdomelement','cnameelement','roleelement', |
|
'pickedcourse','instcodefilter', |
|
'ownerfilter','coursefilter','multiple']); |
|
# domain filter and selection |
|
my $domainfilter=$env{'form.domainfilter'}; |
$domainfilter=~s/\W//g; |
$domainfilter=~s/\W//g; |
unless ($domainfilter) { $domainfilter='.'; } |
unless ($domainfilter) { $domainfilter=''; } |
my $descriptfilter=$ENV{'form.descriptfilter'}; |
my $domainselectform=&Apache::loncommon::select_dom_form($domainfilter, |
$descriptfilter=~s/\W//g; |
'domainfilter',1); |
unless ($descriptfilter) { $descriptfilter='.'; } |
# description filter |
my $sincefilter=$ENV{'form.sincefilter'}; |
my $descriptfilter=$env{'form.descriptfilter'}; |
$sincefilter=~s/\D//g; |
unless ($descriptfilter) { $descriptfilter=''; } |
unless ($sincefilter) { $sincefilter=0; } |
my $listdescript=&HTML::Entities::encode($descriptfilter,'<>&"'); |
|
# institutional code filter |
$r->print(&Apache::loncommon::bodytag("Selecting a Course")); |
my $instcodefilter=$env{'form.instcodefilter'}; |
|
unless ($instcodefilter) { $instcodefilter=''; } |
|
my $listinstcode=&HTML::Entities::encode($instcodefilter,'<>&"'); |
|
# course owner filter |
|
my $ownerfilter=$env{'form.ownerfilter'}; |
|
unless ($ownerfilter) { $ownerfilter=''; } |
|
my $listowner=&HTML::Entities::encode($ownerfilter,'<>&"'); |
|
# course ID filter for DCs only |
|
my ($courseidtag,$coursefilter); |
|
if ($env{'user.adv'} && $domainfilter && exists($env{'user.role.dc./'. |
|
$domainfilter.'/'})) { |
|
$coursefilter=$env{'form.coursefilter'}; |
|
unless ($coursefilter) { $coursefilter=''; } |
|
my $listcourseid=&HTML::Entities::encode($coursefilter,'<>&"'); |
|
$courseidtag = &mt('LON-CAPA course ID'); |
|
$courseidtag .= qq|: <input type="text" name="coursefilter" size="25" value="$listcourseid" /> |
|
<br /> |
|
|; |
|
} |
|
# last course activity filter and selection |
|
my $sincefilter=$env{'form.sincefilter'}; |
|
$sincefilter=~s/[^\d-]//g; |
|
unless ($sincefilter) { $sincefilter=-1; } |
|
my $sincefilterform=&Apache::loncommon::select_form($sincefilter, |
|
'sincefilter',('-1'=>'', |
|
'86400' => 'today', |
|
'604800' => 'last week', |
|
'2592000' => 'last month', |
|
'7776000' => 'last three months', |
|
'15552000' => 'last six months', |
|
'31104000' => 'last year', |
|
'select_form_order' => |
|
['-1','86400','604800','2592000','7776000', |
|
'15552000','31104000'])); |
|
# if called from loncreateuser, report sections, then close |
|
my ($loaditem,$seclist); |
|
my $num_sections = 0; |
|
if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) { |
|
$loaditem = 'onLoad="setSections()"'; |
|
my ($cdom,$cnum) = split/_/,$env{'form.pickedcourse'}; |
|
my %sections_count = (); |
|
$num_sections = &Apache::loncommon::get_sections($cdom,$cnum,\%sections_count); |
|
my @sections = (); |
|
if ($num_sections > 0) { |
|
@sections = (sort {$a <=> $b} keys(%sections_count)); |
|
$seclist = join('","',@sections); |
|
} |
|
} |
|
my $jscript; |
|
my $title = 'Selecting a course'; |
|
# Setup for multiple course selections, if flag for multiples set. |
|
my $multiple = $env{'form.multiple'}; |
|
my $multelement; |
|
if ($multiple) { |
|
$title = 'Selecting course(s)'; |
|
$jscript = &Apache::loncommon::check_uncheck_jscript(); |
|
$multelement = '<input type="hidden" name="multiple" value="'.$multiple.'" />'; |
|
} |
|
$r->print(&Apache::loncommon::start_page($title,undef, |
|
{'add_entries' => $loaditem, |
|
'no_nav_bar' => 1, })); |
|
my %lt=&Apache::lonlocal::texthash( |
|
'cac' => 'Course Activity', |
|
'cde' => 'Course Description', |
|
'cdo' => 'Course Domain', |
|
'cin' => 'Course Institutional Code', |
|
'cow' => "Course Owner's Username"); |
|
my ($name_code,$name_input); |
|
if (defined($env{'form.cnameelement'}) && $env{'form.cnameelement'} ne '') { |
|
$name_code = "opener.document.$env{'form.form'}.$env{'form.cnameelement'}.value=cdesc;"; |
|
$name_input ='<input type="hidden" name="cnameelement" value="'. |
|
$env{'form.cnameelement'}.'" />'; |
|
} |
|
my $submitopener = ''; |
|
my $autosubmit = ''; |
|
my $roleelement = ''; |
|
my $lastaction = 'self.close()'; |
|
if ($env{'form.form'} eq 'cu') { |
|
$lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n". |
|
'document.courselist.submit();'; |
|
} |
|
my $roledom = $env{'form.roleelement'}; |
|
if ($roledom) { |
|
$roleelement = '<input type="hidden" name="roleelement" value="'.$roledom.'" />'; |
|
$submitopener = &Apache::lonroles::processpick(); |
|
$autosubmit = 'process_pick("'.$roledom.'")'; |
|
} |
$r->print(<<ENDSCRIPT); |
$r->print(<<ENDSCRIPT); |
<script> |
<script> |
function gochoose(cname,cdom) { |
function gochoose(cname,cdom,cdesc,multiple,caller) { |
opener.document.$ENV{'form.form'}.$ENV{'form.cnumelement'}.value=cname; |
var openerForm = "$env{'form.form'}"; |
var slct=opener.document.$ENV{'form.form'}.$ENV{'form.cdomelement'}; |
courseCount = 0; |
var i; |
var courses = ''; |
for (i=0;i<slct.length;i++) { |
if (multiple) { |
if (slct[i]==cdom) { slct.selectedIndex=i; } |
if (typeof(document.courselist.course_id.length) == 'undefined') { |
|
// only 1 course checkbox was created |
|
if (document.courselist.course_id.checked) { |
|
courses = courses + document.courselist.course_id.value + "&&"; |
|
courseCount ++; |
|
} |
|
} else { |
|
for (var j=0; j<document.courselist.course_id.length; j++) { |
|
if (document.courselist.course_id[j].checked) { |
|
courses = courses + document.courselist.course_id[j].value + "&&"; |
|
courseCount ++; |
|
} |
|
} |
|
} |
|
opener.document.$env{'form.form'}.coursetotal.value = courseCount; |
|
if (typeof(opener.document.$env{'form.form'}.coursepick.length) == |
|
'undefined') { |
|
if (opener.document.$env{'form.form'}.coursepick.value == 'specific') { |
|
opener.document.$env{'form.form'}.coursepick.checked = true; |
|
} else { |
|
opener.document.$env{'form.form'}.coursepick.checked = false; |
|
} |
|
} else { |
|
for (var j=0; j<opener.document.$env{'form.form'}.coursepick.length; j++) { |
|
if (opener.document.$env{'form.form'}.coursepick[j].value == 'specific') { |
|
opener.document.$env{'form.form'}.coursepick[j].checked = true; |
|
} else { |
|
opener.document.$env{'form.form'}.coursepick[j].checked = false; |
|
} |
|
} |
|
} |
|
if (courseCount > 0) { |
|
courses = courses.substr(0,courses.length-2); |
|
opener.document.$env{'form.form'}.courselist.value = courses; |
|
} |
|
} else { |
|
$name_code |
|
opener.document.$env{'form.form'}.$env{'form.cnumelement'}.value=cname; |
|
var slct=opener.document.$env{'form.form'}.$env{'form.cdomelement'}; |
|
if (slct.options == undefined) { |
|
opener.document.$env{'form.form'}.$env{'form.cdomelement'}.value=cdom; |
|
} |
|
else { |
|
var i; |
|
for (i=0;i<slct.length;i++) { |
|
if (slct.options[i].value==cdom) { slct.selectedIndex=i; } |
|
} |
|
} |
} |
} |
self.close(); |
$autosubmit |
|
$lastaction |
} |
} |
|
|
|
function setSections() { |
|
var numSections = $num_sections |
|
var sectionsArray = new Array("$seclist") |
|
opener.document.$env{"form.form"}.currsec.length = 0 |
|
if (numSections == 0) { |
|
opener.document.$env{"form.form"}.currsec.multiple=false |
|
opener.document.$env{"form.form"}.currsec.size=1; |
|
opener.document.$env{"form.form"}.currsec.options[0] = new Option('No existing sections','',false,false) |
|
} else { |
|
if (numSections == 1) { |
|
opener.document.$env{"form.form"}.currsec.multiple=false; |
|
opener.document.$env{"form.form"}.currsec.size=1; |
|
opener.document.$env{"form.form"}.currsec.options[0] = new Option('Select','',true,true); |
|
opener.document.$env{"form.form"}.currsec.options[1] = new Option('No section','',false,false) |
|
opener.document.$env{"form.form"}.currsec.options[2] = new Option(sectionsArray[0],sectionsArray[0],false,false); |
|
} else { |
|
for (var i=0; i<numSections; i++) { |
|
opener.document.$env{"form.form"}.currsec.options[i] = new Option(sectionsArray[i],sectionsArray[i],false,false) |
|
} |
|
opener.document.$env{"form.form"}.currsec.multiple=true |
|
if (numSections < 3) { |
|
opener.document.$env{"form.form"}.currsec.size=numSections; |
|
} else { |
|
opener.document.$env{"form.form"}.currsec.size=3; |
|
} |
|
opener.document.$env{"form.form"}.currsec.options[0].selected = false |
|
} |
|
} |
|
self.close() |
|
} |
|
|
|
$jscript |
</script> |
</script> |
|
$submitopener |
|
<form method="post" name="filterpicker"> |
|
<input type="hidden" name="cnumelement" value="$env{'form.cnumelement'}" /> |
|
<input type="hidden" name="cdomelement" value="$env{'form.cdomelement'}" /> |
|
$name_input |
|
<input type="hidden" name="form" value="$env{'form.form'}" /> |
|
$roleelement |
|
$multelement |
|
$lt{'cac'}: $sincefilterform |
|
<br /> |
|
$lt{'cdo'}: $domainselectform |
|
<br /> |
|
$lt{'cin'}: |
|
<input type="text" name="instcodefilter" size="10" value="$listinstcode" /> |
|
<br /> |
|
$lt{'cow'}: |
|
<input type="text" name="ownerfilter" size="10" value="$listowner" /> |
|
<br /> |
|
$courseidtag |
|
$lt{'cde'}: |
|
<input type="text" name="descriptfilter" size="40" value="$listdescript" /> |
|
<p><input type="submit" name="gosearch" value="Search" /></p> |
|
</form> |
|
<hr /> |
ENDSCRIPT |
ENDSCRIPT |
$r->rflush(); |
|
# ---------------------------------------------------------------- Get the data |
# ---------------------------------------------------------------- Get the data |
my %courses= |
if ($env{'form.gosearch'}) { |
&Apache::lonnet::courseiddump($domainfilter,$descriptfilter,$sincefilter); |
$r->print(&mt('Searching').' ...<br /> <br />'); |
foreach (keys %courses) { |
$r->rflush(); |
$r->print($_.': '.$courses{$_}.'<br />'); |
unless ($descriptfilter) { $descriptfilter='.'; } |
|
unless ($instcodefilter) { $instcodefilter='.'; } |
|
unless ($ownerfilter) { $ownerfilter='.'; } |
|
unless ($coursefilter) { $coursefilter='.'; } |
|
my $timefilter=($sincefilter==-1?1:time-$sincefilter); |
|
my %courses= |
|
&Apache::lonnet::courseiddump |
|
($domainfilter,$descriptfilter,$timefilter,$instcodefilter,$ownerfilter,$coursefilter); |
|
$r->print('<form name="courselist">'); |
|
my %by_descrip; |
|
my $numcourses = keys(%courses); |
|
foreach my $course (keys(%courses)) { |
|
my $descr; |
|
if ($courses{$course} =~ m/^([^:]*):/i) { |
|
$descr = &Apache::lonnet::unescape($1); |
|
} else { |
|
$descr = &Apache::lonnet::unescape($courses{$course}); |
|
} |
|
my $description = $descr; |
|
push (@{$by_descrip{$description}}, $course); |
|
} |
|
if ($numcourses > 1 && $multiple) { |
|
$r->print('<input type="button" value="check all" |
|
onclick="javascript:checkAll(document.courselist.course_id)" /> <input type="button" value="uncheck all" |
|
onclick="javascript:uncheckAll(document.courselist.course_id)" /> |
|
<br /><br />'); |
|
} |
|
foreach my $description (sort |
|
{ lc($a) cmp lc($b) } (keys(%by_descrip))) { |
|
foreach my $course (@{$by_descrip{$description}}) { |
|
my $cleandesc=&HTML::Entities::encode($description,'<>&"'); |
|
$cleandesc=~s/'/\\'/g; |
|
my ($cdom,$cnum)=split(/\_/,$course); |
|
my ($descr,$instcode,$owner) = split/:/,$courses{$course}; |
|
$r->print(&course_chooser($multiple,$cdom,$cnum,$cleandesc)); |
|
$r->print($description.'('. |
|
($Apache::lonnet::domaindescription{$cdom}? |
|
$Apache::lonnet::domaindescription{$cdom}:$cdom).")"); |
|
unless ($instcode eq '') { |
|
$r->print(" - ".&Apache::lonnet::unescape($instcode)); |
|
} |
|
unless ($owner eq '') { |
|
$r->print(", owner - ".&Apache::lonnet::unescape($owner)); |
|
} |
|
if ($multiple) { $r->print("</label>\n"); } |
|
$r->print("<br />\n"); |
|
} |
|
} |
|
if (!%courses) { |
|
$r->print(&mt('None found')); |
|
} elsif ($multiple) { |
|
$r->print('<input type="button" value="Submit" onClick="gochoose('."'','','',1)".'" />'); |
|
} |
|
$r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'."\n". |
|
'<input type="hidden" name="pickedcourse" value="" />'."\n". |
|
'<input type="hidden" name="cnumelement" value="'.$env{'form.cnumelement'}.'" />'."\n". |
|
'<input type="hidden" name="cdomelement" value="'.$env{'form.cdomelement'}.'" />'."\n"); |
|
if ((exists($env{'form.roleelement'})) && ($env{'form.form'} eq 'rolechoice')) { |
|
$r->print('<input type="hidden" name="roleelement" value="'.$env{'form.roleelement'}.'" />'."\n"); |
|
} |
|
$r->print("</form>\n"); |
} |
} |
$r->print('</body></html>'); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
|
} |
|
|
|
sub course_chooser { |
|
my ($multiple,$cdom,$cnum,$cleandesc) = @_; |
|
my $output; |
|
if ($multiple) { |
|
$output = '<label><input type="checkbox" name="course_id" value="'.$cdom.'_'.$cnum.'" />'."\n"; |
|
} else { |
|
$output = '<input type="button" value="Select" onClick="gochoose('. |
|
"'".$cnum."','".$cdom."','".$cleandesc."')".'" />'."\n"; |
|
} |
|
return $output; |
} |
} |
|
|
1; |
1; |