version 1.1181, 2014/03/13 14:46:46
|
version 1.1182, 2014/03/17 02:45:25
|
Line 69 use Apache::lontexconvert();
|
Line 69 use Apache::lontexconvert();
|
use Apache::lonclonecourse(); |
use Apache::lonclonecourse(); |
use Apache::lonuserutils(); |
use Apache::lonuserutils(); |
use Apache::lonuserstate(); |
use Apache::lonuserstate(); |
|
use Apache::courseclassifier(); |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
use DateTime::TimeZone; |
use DateTime::TimeZone; |
use DateTime::Locale::Catalog; |
use DateTime::Locale::Catalog; |
Line 14701 sub clean_symb {
|
Line 14702 sub clean_symb {
|
=item * &build_filters() |
=item * &build_filters() |
|
|
Create markup for a table used to set filters to use when selecting |
Create markup for a table used to set filters to use when selecting |
courses in a domain. Used by lonpickcourse.pm and lonmodifycourse.pm |
courses in a domain. Used by lonpickcourse.pm, lonmodifycourse.pm |
|
and quotacheck.pl |
|
|
|
|
Inputs: |
Inputs: |
|
|
Line 14720 action - form action
|
Line 14723 action - form action
|
|
|
numfiltersref - ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number) |
numfiltersref - ref to scalar (count of number of elements in institutional codes -- e.g., 4 for year, semester, department, and number) |
|
|
caller - caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm |
caller - caller context (e.g., set to 'modifycourse' when routine is called from lonmodifycourse.pm) |
|
|
cloneruname - username of owner of new course who wants to clone |
cloneruname - username of owner of new course who wants to clone |
|
|
Line 14750 clonetext - hidden form elements contain
|
Line 14753 clonetext - hidden form elements contain
|
|
|
clonewarning - warning message about missing information for intended course owner when DC creates a course |
clonewarning - warning message about missing information for intended course owner when DC creates a course |
|
|
|
|
Returns: $output - HTML for display of search criteria, and hidden form elements. |
Returns: $output - HTML for display of search criteria, and hidden form elements. |
|
|
|
|
Side Effects: None |
Side Effects: None |
|
|
=cut |
=cut |
Line 14764 sub build_filters {
|
Line 14769 sub build_filters {
|
$codetitlesref,$codedom,$formname,$fixeddom,$prevphase, |
$codetitlesref,$codedom,$formname,$fixeddom,$prevphase, |
$cnameelement,$cnumelement,$cdomelement,$setroles, |
$cnameelement,$cnumelement,$cdomelement,$setroles, |
$clonetext,$clonewarning) = @_; |
$clonetext,$clonewarning) = @_; |
my ($list,$fixeddom,$jscript); |
my ($list,$jscript); |
my $onchange = 'javascript:updateFilters(this)'; |
my $onchange = 'javascript:updateFilters(this)'; |
my ($domainselectform,$sincefilterform,$createdfilterform, |
my ($domainselectform,$sincefilterform,$createdfilterform, |
$ownerdomselectform,$persondomselectform,$instcodeform, |
$ownerdomselectform,$persondomselectform,$instcodeform, |
Line 14876 sub build_filters {
|
Line 14881 sub build_filters {
|
my $officialjs; |
my $officialjs; |
if ($crstype eq 'Course') { |
if ($crstype eq 'Course') { |
if (exists($filter->{'instcodefilter'})) { |
if (exists($filter->{'instcodefilter'})) { |
if (($fixeddom) || ($formname eq 'requestcrs') |
# if (($fixeddom) || ($formname eq 'requestcrs') || |
|| ($formname eq 'modifycourse')) { |
# ($formname eq 'modifycourse') || ($formname eq 'filterpicker')) { |
|
if ($codedom) { |
$officialjs = 1; |
$officialjs = 1; |
($instcodeform,$jscript,$$numtitlesref) = |
($instcodeform,$jscript,$$numtitlesref) = |
&Apache::courseclassifier::instcode_selectors($codedom,'filterpicker', |
&Apache::courseclassifier::instcode_selectors($codedom,'filterpicker', |
$officialjs,$codetitlesref); |
$officialjs,$codetitlesref); |
if ($jscript) { |
if ($jscript) { |
$jscript = '<script type="text/javascript" language="Javascript">'. |
$jscript = '<script type="text/javascript">'."\n". |
$jscript.'</script>'."\n"; |
'// <![CDATA['."\n". |
|
$jscript."\n". |
|
'// ]]>'."\n". |
|
'</script>'."\n"; |
} |
} |
} |
} |
if ($instcodeform eq '') { |
if ($instcodeform eq '') { |
Line 14908 sub build_filters {
|
Line 14917 sub build_filters {
|
$output .= '<input type="hidden" name="phase" value="courselist" />'."\n". |
$output .= '<input type="hidden" name="phase" value="courselist" />'."\n". |
'<input type="hidden" name="prevphase" value="'. |
'<input type="hidden" name="prevphase" value="'. |
$prevphase.'" />'."\n"; |
$prevphase.'" />'."\n"; |
} else { |
} elsif ($formname ne 'quotacheck') { |
my $name_input; |
my $name_input; |
if ($cnameelement ne '') { |
if ($cnameelement ne '') { |
$name_input = '<input type="hidden" name="cnameelement" value="'. |
$name_input = '<input type="hidden" name="cnameelement" value="'. |
$cnameelement.'" />'; |
$cnameelement.'" />'; |
} |
} |
$output .= qq| |
$output .= qq| |
<input type="hidden" name="cnumelement" value="$cnumelement.'" /> |
<input type="hidden" name="cnumelement" value="$cnumelement" /> |
<input type="hidden" name="cdomelement" value="$cdomelement.'" /> |
<input type="hidden" name="cdomelement" value="$cdomelement" /> |
$name_input |
$name_input |
$roleelement |
$roleelement |
$multelement |
$multelement |
Line 15002 $typeelement
|
Line 15011 $typeelement
|
|
|
=item * &timebased_select_form() |
=item * &timebased_select_form() |
|
|
Create markup for an option response item used to select a time-based |
Create markup for a dropdown list used to select a time-based |
filter e.g., Course Activity, Course Created, when searching for courses |
filter e.g., Course Activity, Course Created, when searching for courses |
or communities |
or communities |
|
|
Line 15073 ENDJS
|
Line 15082 ENDJS
|
|
|
=pod |
=pod |
|
|
|
=item * &search_courses() |
|
|
|
Process selected filters form course search form and pass to lonnet::courseiddump |
|
to retrieve a hash for which keys are courseIDs which match the selected filters. |
|
|
|
Inputs: |
|
|
|
dom - domain being searched |
|
|
|
type - course type ('Course' or 'Community' or '.' if any). |
|
|
|
filter - anonymous hash of criteria and their values |
|
|
|
numtitles - for institutional codes - number of categories |
|
|
|
cloneruname - optional username of new course owner |
|
|
|
clonerudom - optional domain of new course owner |
|
|
|
domcloner - Optional "domcloner" flag; has value=1 if user has ccc priv in domain being filtered by, |
|
(used when DC is using course creation form) |
|
|
|
codetitles - reference to array of titles of components in institutional codes (official courses). |
|
|
|
|
|
Returns: %courses - hash of courses satisfying search criteria, keys = course IDs, values are corresponding colon-separated escaped description, institutional code, owner and type. |
|
|
|
|
|
Side Effects: None |
|
|
|
=cut |
|
|
|
|
|
sub search_courses { |
|
my ($dom,$type,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) = @_; |
|
my (%courses,%showcourses,$cloner); |
|
if (($filter->{'ownerfilter'} ne '') || |
|
($filter->{'ownerdomfilter'} ne '')) { |
|
$filter->{'combownerfilter'} = $filter->{'ownerfilter'}.':'. |
|
$filter->{'ownerdomfilter'}; |
|
} |
|
foreach my $item ('descriptfilter','coursefilter','combownerfilter') { |
|
if (!$filter->{$item}) { |
|
$filter->{$item}='.'; |
|
} |
|
} |
|
my $now = time; |
|
my $timefilter = |
|
($filter->{'sincefilter'}==-1?1:$now-$filter->{'sincefilter'}); |
|
my ($createdbefore,$createdafter); |
|
if (($filter->{'createdfilter'} ne '') && ($filter->{'createdfilter'} !=-1)) { |
|
$createdbefore = $now; |
|
$createdafter = $now-$filter->{'createdfilter'}; |
|
} |
|
my ($instcodefilter,$regexpok); |
|
if ($numtitles) { |
|
if ($env{'form.official'} eq 'on') { |
|
$instcodefilter = |
|
&Apache::courseclassifier::instcode_search_str($dom,$numtitles,$codetitles); |
|
$regexpok = 1; |
|
} elsif ($env{'form.official'} eq 'off') { |
|
$instcodefilter = &Apache::courseclassifier::instcode_search_str($dom,$numtitles,$codetitles); |
|
unless ($instcodefilter eq '') { |
|
$regexpok = -1; |
|
} |
|
} |
|
} else { |
|
$instcodefilter = $filter->{'instcodefilter'}; |
|
} |
|
if ($instcodefilter eq '') { $instcodefilter = '.'; } |
|
if ($type eq '') { $type = '.'; } |
|
|
|
if (($clonerudom ne '') && ($cloneruname ne '')) { |
|
$cloner = $cloneruname.':'.$clonerudom; |
|
} |
|
%courses = &Apache::lonnet::courseiddump($dom, |
|
$filter->{'descriptfilter'}, |
|
$timefilter, |
|
$instcodefilter, |
|
$filter->{'combownerfilter'}, |
|
$filter->{'coursefilter'}, |
|
undef,undef,$type,$regexpok,undef,undef, |
|
undef,undef,$cloner,$env{'form.cc_clone'}, |
|
$filter->{'cloneableonly'}, |
|
$createdbefore,$createdafter,undef, |
|
$domcloner); |
|
if (($filter->{'personfilter'} ne '') && ($filter->{'persondomfilter'} ne '')) { |
|
my $ccrole; |
|
if ($type eq 'Community') { |
|
$ccrole = 'co'; |
|
} else { |
|
$ccrole = 'cc'; |
|
} |
|
my %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'}, |
|
$filter->{'persondomfilter'}, |
|
'userroles',undef, |
|
[$ccrole,'in','ad','ep','ta','cr'], |
|
$dom); |
|
foreach my $role (keys(%rolehash)) { |
|
my ($cnum,$cdom,$courserole) = split(':',$role); |
|
my $cid = $cdom.'_'.$cnum; |
|
if (exists($courses{$cid})) { |
|
if (ref($courses{$cid}) eq 'HASH') { |
|
if (ref($courses{$cid}{roles}) eq 'ARRAY') { |
|
if (!grep(/^\Q$courserole\E$/,@{$courses{$cid}{roles}})) { |
|
push (@{$courses{$cid}{roles}},$courserole); |
|
} |
|
} else { |
|
$courses{$cid}{roles} = [$courserole]; |
|
} |
|
$showcourses{$cid} = $courses{$cid}; |
|
} |
|
} |
|
} |
|
%courses = %showcourses; |
|
} |
|
return %courses; |
|
} |
|
|
|
|
|
=pod |
|
|
=back |
=back |
|
|
=cut |
=cut |