version 1.94, 2010/03/16 05:11:40
|
version 1.105, 2013/02/05 17:02:40
|
Line 133 sub handler {
|
Line 133 sub handler {
|
$onlyown) { |
$onlyown) { |
$r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction)); |
$r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction)); |
} |
} |
$r->print('<script type="text/javascript" language="Javascript">'.$jscript. |
$r->print(&Apache::lonhtmlcommon::scripttag($jscript)); |
'</script>'); |
|
$r->print($submitopener); |
$r->print($submitopener); |
|
|
# ------------------------------------------ Display of filters to limit search |
# ------------------------------------------ Display of filters to limit search |
my $filter = {}; |
my $filter = {}; |
my $action = '/adm/pickcourse'; |
my $action = '/adm/pickcourse'; |
my ($numtitles,$showroles,$nohost); |
my ($numtitles,$showroles,$nohost,@codetitles); |
if (!$onlyown) { |
if (!$onlyown) { |
my $filterlist = ['domainfilter']; |
my $filterlist = ['domainfilter']; |
# created filter for DCs only |
# created filter for DCs only |
if ($env{'user.adv'} && $env{'form.domainfilter'} && |
if ($env{'user.adv'} && $env{'form.domainfilter'} && |
exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'})) { |
exists($env{'user.role.dc./'.$env{'form.domainfilter'}.'/'}) |
|
&& $env{'form.form'} ne 'portform') { |
my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'form.domainfilter'}); |
my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'form.domainfilter'}); |
if ($loncaparev ne 'unknown_cmd') { |
if ($loncaparev ne 'unknown_cmd') { |
push(@{$filterlist},'createdfilter'); |
push(@{$filterlist},'createdfilter'); |
Line 176 sub handler {
|
Line 176 sub handler {
|
|
|
$r->print(&build_filters($filterlist,$type,$roleelement,$multelement, |
$r->print(&build_filters($filterlist,$type,$roleelement,$multelement, |
$filter,$action,\$numtitles,undef,$cloneruname, |
$filter,$action,\$numtitles,undef,$cloneruname, |
$clonerudom,$typeelement)); |
$clonerudom,$typeelement,\@codetitles)); |
} |
} |
|
|
# ---------------------------------------------------------------- Get the data |
# ---------------------------------------------------------------- Get the data |
if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) || |
if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) || |
$onlyown) { |
$onlyown) { |
|
my $domcloner; |
|
if ($env{'form.form'} eq 'ccrs') { |
|
if (($env{'request.role.domain'} eq $env{'form.domainfilter'}) && |
|
(&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) { |
|
$domcloner = 1; |
|
} |
|
} |
my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles, |
my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles, |
$cloneruname,$clonerudom); |
$cloneruname,$clonerudom,$domcloner,\@codetitles); |
if ($nohost) { |
if ($nohost) { |
$r->print ('<span class="LC_warning">'. |
$r->print ('<span class="LC_warning">'. |
&mt('User does not exist - username: [_1], domain: [_2].', |
&mt('User does not exist - username: [_1], domain: [_2].', |
Line 356 sub display_matched_courses {
|
Line 363 sub display_matched_courses {
|
} |
} |
|
|
if ($numcourses > 1 && $multiple) { |
if ($numcourses > 1 && $multiple) { |
$r->print('<input type="button" value="check all" |
$r->print('<input type="button" value="'.&mt('check all').'" |
onclick="javascript:checkAll(document.courselist.course_id)" /> |
onclick="javascript:checkAll(document.courselist.course_id)" /> |
<input type="button" value="uncheck all" |
<input type="button" value="'.&mt('uncheck all').'" |
onclick="javascript:uncheckAll(document.courselist.course_id)" /> |
onclick="javascript:uncheckAll(document.courselist.course_id)" /> |
<br /><br />'); |
<br /><br />'); |
} |
} |
Line 404 sub display_matched_courses {
|
Line 411 sub display_matched_courses {
|
$instcode = $courses{$course}{'inst_code'}; |
$instcode = $courses{$course}{'inst_code'}; |
$ttype = $courses{$course}{'type'}; |
$ttype = $courses{$course}{'type'}; |
if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) { |
if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) { |
if ($cc_cloneable{$courses{$course}{'cnum'}.':'.$courses{$course}{'domain'}}) { |
if ($env{'form.form'} eq 'ccrs') { |
$canclone = 1; |
if (($env{'request.role.domain'} eq $cdom) && |
|
(&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) { |
|
$canclone = 1; |
|
} |
|
} |
|
unless ($canclone) { |
|
if ($cc_cloneable{$cnum.':'.$cdom}) { |
|
$canclone = 1; |
|
} |
} |
} |
unless ($canclone) { |
unless ($canclone) { |
my $cloners = $courses{$course}{'cloners'}; |
my $cloners = $courses{$course}{'cloners'}; |
Line 414 sub display_matched_courses {
|
Line 429 sub display_matched_courses {
|
if (grep(/^\*$/,@cloneable)) { |
if (grep(/^\*$/,@cloneable)) { |
$canclone = 1; |
$canclone = 1; |
} |
} |
if (grep(/^\*:\Q$env{'form.clonerudom'}\E$/,@cloneable)) { |
if (grep(/^\*:\Q$clonerudom\E$/,@cloneable)) { |
$canclone = 1; |
$canclone = 1; |
} |
} |
if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) { |
if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) { |
Line 423 sub display_matched_courses {
|
Line 438 sub display_matched_courses {
|
} |
} |
} |
} |
} |
} |
push(@owners,&unescape($courses{$course}{'owner'})); |
push(@owners,$courses{$course}{'owner'}); |
if (ref($courses{$course}{'co-owners'}) eq 'ARRAY') { |
if ($courses{$course}{'co-owners'} ne '') { |
foreach my $item (@{$courses{$course}{'co-owners'}}) { |
foreach my $item (split(/,/,$courses{$course}{'co-owners'})) { |
push(@owners,&unescape($item)); |
push(@owners,$item); |
} |
} |
} |
} |
} else { |
} else { |
Line 478 sub display_matched_courses {
|
Line 493 sub display_matched_courses {
|
} |
} |
|
|
if (!%courses) { |
if (!%courses) { |
$r->print(&mt('None found')); |
$r->print('<p class="LC_info">'.&mt('None found').'</p>'); |
} elsif ($multiple) { |
} elsif ($multiple) { |
$r->print('<input type="button" value="Submit" onClick="gochoose('."'','','')".'" />'); |
$r->print('<input type="button" value="'.&mt('Submit').'" onClick="gochoose('."'','','')".'" />'); |
} |
} |
$r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'. |
$r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'. |
"\n".'<input type="hidden" name="pickedcourse" value="" />'."\n". |
"\n".'<input type="hidden" name="pickedcourse" value="" />'."\n". |
Line 527 sub multiples_tag {
|
Line 542 sub multiples_tag {
|
|
|
sub build_filters { |
sub build_filters { |
my ($filterlist,$type,$roleelement,$multelement,$filter,$action, |
my ($filterlist,$type,$roleelement,$multelement,$filter,$action, |
$numtitlesref,$caller,$cloneruname,$clonerudom,$typeelement) = @_; |
$numtitlesref,$caller,$cloneruname,$clonerudom,$typeelement,$codetitlesref) = @_; |
my ($list,$formname,$fixeddom,$codedom,$jscript); |
my ($list,$formname,$fixeddom,$codedom,$jscript); |
$codedom = $env{'request.role.domain'}; |
$codedom = $env{'request.role.domain'}; |
if (defined($env{'form.form'})) { |
if (defined($env{'form.form'})) { |
Line 535 sub build_filters {
|
Line 550 sub build_filters {
|
} else { |
} else { |
$formname = $caller; |
$formname = $caller; |
} |
} |
my $onchange; |
my $onchange = 'javascript:updateFilters(this)'; |
unless ($env{'form.interface'} eq 'textual') { |
|
$onchange = 'javascript:updateFilters(this)'; |
|
} |
|
my ($domainselectform,$sincefilterform,$createdfilterform, |
my ($domainselectform,$sincefilterform,$createdfilterform, |
$ownerdomselectform,$persondomselectform,$instcodeform, |
$ownerdomselectform,$persondomselectform,$instcodeform, |
$typeselectform,$instcodetitle); |
$typeselectform,$instcodetitle); |
Line 632 sub build_filters {
|
Line 644 sub build_filters {
|
} else { |
} else { |
$typeselectform = '<select name="type" size="1"'; |
$typeselectform = '<select name="type" size="1"'; |
if ($onchange) { |
if ($onchange) { |
$typeselectform .= 'onchange="'.$onchange.'"'; |
$typeselectform .= ' onchange="'.$onchange.'"'; |
} |
} |
$typeselectform .= '>'."\n"; |
$typeselectform .= '>'."\n"; |
foreach my $posstype ('Course','Community') { |
foreach my $posstype ('Course','Community') { |
Line 664 sub build_filters {
|
Line 676 sub build_filters {
|
|| ($formname eq 'modifycourse')) { |
|| ($formname eq 'modifycourse')) { |
$officialjs = 1; |
$officialjs = 1; |
($instcodeform,$jscript,$$numtitlesref) = |
($instcodeform,$jscript,$$numtitlesref) = |
&instcode_selectors($codedom,'filterpicker',$officialjs); |
&instcode_selectors($codedom,'filterpicker',$officialjs,$codetitlesref); |
if ($jscript) { |
if ($jscript) { |
$jscript = '<script type="text/javascript" language="Javascript">'. |
$jscript = '<script type="text/javascript" language="Javascript">'. |
$jscript.'</script>'."\n"; |
$jscript.'</script>'."\n"; |
Line 787 $typeelement
|
Line 799 $typeelement
|
$output .= '<input type="hidden" name="cc_clone" value="'.$coord_cloneable.'" />'; |
$output .= '<input type="hidden" name="cc_clone" value="'.$coord_cloneable.'" />'; |
} |
} |
} |
} |
$output .= '<input type="hidden" name="updater" value="">'."\n". |
$output .= '<input type="hidden" name="updater" value="" />'."\n". |
'<input type="submit" name="gosearch" value="'. |
'<input type="submit" name="gosearch" value="'. |
&mt('Search').'" /></p>'."\n".'</form>'."\n".'<hr />'."\n"; |
&mt('Search').'" /></p>'."\n".'</form>'."\n".'<hr />'."\n"; |
return $jscript.$warning.$output; |
return $jscript.$warning.$output; |
Line 802 sub timebased_select_form {
|
Line 814 sub timebased_select_form {
|
return &Apache::loncommon::select_form( |
return &Apache::loncommon::select_form( |
$filter->{$item}, |
$filter->{$item}, |
$item, |
$item, |
( '-1' => '', |
{ '-1' => '', |
'86400' => &mt('today'), |
'86400' => &mt('today'), |
'604800' => &mt('last week'), |
'604800' => &mt('last week'), |
'2592000' => &mt('last month'), |
'2592000' => &mt('last month'), |
Line 811 sub timebased_select_form {
|
Line 823 sub timebased_select_form {
|
'31104000' => &mt('last year'), |
'31104000' => &mt('last year'), |
'select_form_order' => |
'select_form_order' => |
['-1','86400','604800','2592000','7776000', |
['-1','86400','604800','2592000','7776000', |
'15552000','31104000'])); |
'15552000','31104000']}); |
} |
} |
} |
} |
|
|
sub get_coordinator_cloneable { |
sub get_coordinator_cloneable { |
my ($cloneruname,$clonerudom,$type) = @_; |
my ($cloneruname,$clonerudom,$type) = @_; |
if (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') { |
if (($cloneruname!~/\w/) || ($clonerudom!~/\w/)) { |
|
my $warning = '<div class="LC_warning">'.&mt('Intended course owner not specified'). |
|
'</div>'; |
|
return ('',$warning); |
|
} elsif (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') { |
my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist'). |
my $warning = '<div class="LC_error">'.&mt('Intended course owner does not exist'). |
'</div>'; |
'</div>'; |
return ('',$warning); |
return ('',$warning); |
Line 840 sub get_coordinator_cloneable {
|
Line 856 sub get_coordinator_cloneable {
|
} |
} |
|
|
sub instcode_selectors { |
sub instcode_selectors { |
my ($codedom,$formname,$officialjs) = @_; |
my ($codedom,$formname,$officialjs,$codetitles) = @_; |
my ($output,@codetitles,%cat_titles,%cat_order,%cat_items); |
my ($output,%cat_titles,%cat_order,%cat_items); |
my ($jscript,$totcodes,$numtitles,$lasttitle) = |
my ($jscript,$totcodes,$numtitles,$lasttitle) = |
&Apache::courseclassifier::instcode_selectors_data($codedom,$formname, |
&Apache::courseclassifier::instcode_selectors_data($codedom,$formname, |
\%cat_items,\@codetitles,\%cat_titles,\%cat_order,$officialjs); |
\%cat_items,$codetitles,\%cat_titles,\%cat_order,$officialjs); |
if ($numtitles > 0) { |
if ($numtitles > 0) { |
my $official = ' checked="checked" '; |
my $official = ' checked="checked" '; |
my $unofficial = ''; |
my $unofficial = ''; |
Line 858 sub instcode_selectors {
|
Line 874 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 />'. |
&Apache::courseclassifier::build_instcode_selectors($numtitles, |
&Apache::courseclassifier::build_instcode_selectors($numtitles, |
$lasttitle,\%cat_items,\@codetitles,\%cat_titles,\%cat_order)."\n". |
$lasttitle,\%cat_items,$codetitles,\%cat_titles,\%cat_order)."\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 867 sub instcode_selectors {
|
Line 883 sub instcode_selectors {
|
} |
} |
|
|
sub search_courses { |
sub search_courses { |
my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom) = @_; |
my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) = @_; |
my (%courses,%showcourses,$cloner,$ccrole); |
my (%courses,%showcourses,$cloner,$ccrole); |
if ($type eq 'Community') { |
if ($type eq 'Community') { |
$ccrole = 'co'; |
$ccrole = 'co'; |
Line 899 sub search_courses {
|
Line 915 sub search_courses {
|
if ($numtitles) { |
if ($numtitles) { |
if ($env{'form.official'} eq 'on') { |
if ($env{'form.official'} eq 'on') { |
$instcodefilter = |
$instcodefilter = |
&Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles); |
&Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles,$codetitles); |
$regexpok = 1; |
$regexpok = 1; |
} elsif ($env{'form.official'} eq 'off') { |
} elsif ($env{'form.official'} eq 'off') { |
$instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles); |
$instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$numtitles,$codetitles); |
unless ($instcodefilter eq '') { |
unless ($instcodefilter eq '') { |
$regexpok = -1; |
$regexpok = -1; |
} |
} |
Line 926 sub search_courses {
|
Line 942 sub search_courses {
|
undef,undef,$type,$regexpok,undef,undef, |
undef,undef,$type,$regexpok,undef,undef, |
undef,undef,$cloner,$env{'form.cc_clone'}, |
undef,undef,$cloner,$env{'form.cc_clone'}, |
$filter->{'cloneableonly'}, |
$filter->{'cloneableonly'}, |
$createdbefore,$createdafter); |
$createdbefore,$createdafter,undef, |
|
$domcloner); |
if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) { |
if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) { |
my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'}, |
my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'}, |
$filter->{'persondomfilter'}, |
$filter->{'persondomfilter'}, |
Line 994 sub gochoose_javascript {
|
Line 1011 sub gochoose_javascript {
|
}, |
}, |
); |
); |
my $output .= qq| |
my $output .= qq| |
<script type="text/javascript"> |
|
function gochoose(cname,cdom,cdesc) { |
function gochoose(cname,cdom,cdesc) { |
var openerForm = "$env{'form.form'}"; |
var openerForm = "$env{'form.form'}"; |
courseCount = 0; |
courseCount = 0; |
Line 1043 ENDSCRIPT
|
Line 1059 ENDSCRIPT
|
} else { |
} else { |
my ($name_code,$type_code); |
my ($name_code,$type_code); |
if ($env{'form.cnameelement'} ne '') { |
if ($env{'form.cnameelement'} ne '') { |
$name_code = 'opener.document.'.$env{'form.form'}.'.'. |
$name_code = <<ENDNAMECODE; |
$env{'form.cnameelement'}.'.value=cdesc;'; |
var showcdesc = cdesc; |
|
if (cdesc.length > 25) { |
|
showcdesc = cdesc.substr(0,25)+' ...'; |
|
} |
|
opener.document.$env{'form.form'}.$env{'form.cnameelement'}.value=showcdesc; |
|
ENDNAMECODE |
} |
} |
if ($env{'form.typeelement'} ne '') { |
if ($env{'form.typeelement'} ne '') { |
$type_code = 'opener.document.'.$env{'form.form'}.'.'. |
$type_code = 'opener.document.'.$env{'form.form'}.'.'. |
Line 1075 ENDSCRIPT
|
Line 1096 ENDSCRIPT
|
$autosubmit |
$autosubmit |
$lastaction |
$lastaction |
} |
} |
</script> |
|
|; |
|; |
return $output; |
return &Apache::lonhtmlcommon::scripttag($output); |
} |
} |
|
|
1; |
1; |
Line 1195 Side Effects: None
|
Line 1215 Side Effects: None
|
|
|
=item * |
=item * |
X<build_filters()> |
X<build_filters()> |
B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref,$caller,$cloneruname,$clonerudom,$typeelem)>: |
B<build_filters($filterlist,$type,$roleelement,$multelement,$filter,$action,$numfiltersref,$caller,$cloneruname,$clonerudom,$typeelem,$codetitlesref>: |
|
|
|
|
Input: 11 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values; form action; ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number); caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm), username and domain of new course owner who wants to clone, $tyepelem |
Input: 12 - anonymous array of search criteria; course type; $roleelement ; $multelement ; anonymous hash of criteria and their values; form action; ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number); caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm); username and domain of new course owner who wants to clone, $typeelem; reference to array of titles of components in institutional codes (official courses). |
|
|
Output: 1 - $output - HTML for display of search criteria, and hidden form elements. |
Output: 1 - $output - HTML for display of search criteria, and hidden form elements. |
|
|
Line 1206 Side Effects: None
|
Line 1226 Side Effects: None
|
|
|
=item * |
=item * |
X<search_courses()> |
X<search_courses()> |
B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom)>: |
B<search_courses($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom, |
|
$domcloner,$codetitles)>: |
|
|
|
|
Input: 7 - request object, course type, search scope: only courses in which user has active role (1), or any course (0); anonymous hash of criteria and their values; for institutional codes - number of categories; optional username of new course owner, optional domain of new course owner). Last two needed when search is for courses to clone from course request form, or course creation form (DC). |
Input: 9 - request object, course type, search scope: only courses in which user has active role (1), or any course (0); anonymous hash of criteria and their values; for institutional codes - number of categories; optional username of new course owner, optional domain of new course owner). Seventh and eighth needed when search is for courses to clone from course request form, or course creation form (DC). Optional "domcloner" flag (has value=1 if user has ccc priv in |
|
domain being filtered by (used when DC is using course creation form). Ninth is reference to array of titles of components in institutional codes (official courses). |
|
|
Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type. |
Output: 1 - %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type. |
|
|
Line 1269 javascript functions used when user sele
|
Line 1291 javascript functions used when user sele
|
|
|
=item |
=item |
|
|
(g) Scantron Operator uploading a scantron file to a course - course number is written to visible form element in opener window. Child window closes. |
(g) Bubblesheet Scanning Operator uploading a bubblesheet file to a course - course number is written to visible form element in opener window. Child window closes. |
|
|
=item |
=item |
|
|