--- loncom/interface/lonpickcourse.pm 2014/03/13 14:46:46 1.111 +++ loncom/interface/lonpickcourse.pm 2014/03/17 02:45:25 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network # Pick a course # -# $Id: lonpickcourse.pm,v 1.111 2014/03/13 14:46:46 raeburn Exp $ +# $Id: lonpickcourse.pm,v 1.112 2014/03/17 02:45:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,7 +36,6 @@ use Apache::loncoursedata; use Apache::lonnet; use Apache::lonlocal; use Apache::longroup; -use Apache::courseclassifier; use LONCAPA qw(:DEFAULT :match); sub handler { @@ -108,7 +107,7 @@ sub handler { ($env{'form.pickedcourse'})) { $loaditem{'onload'} .= 'setDefaultCredits();setRoles();setSections();'; } - my $js = &js_changer(); + my $js = &Apache::loncommon::js_changer(); $r->print(&Apache::loncommon::start_page($title,$js, {'add_entries' => \%loaditem, 'no_nav_bar' => 1, })); @@ -141,7 +140,7 @@ sub handler { my $filter = {}; my $action = '/adm/pickcourse'; my ($numtitles,$showroles,$nohost,@codetitles); - if (!$onlyown) { + unless ($onlyown) { my $filterlist = ['domainfilter','sincefilter']; # created filter for DCs only if ($env{'user.adv'} && $env{'form.domainfilter'} && @@ -228,8 +227,21 @@ sub handler { $domcloner = 1; } } - my %courses = &search_courses($r,$type,$onlyown,$filter,$numtitles, - $cloneruname,$clonerudom,$domcloner,\@codetitles); + my %courses; + if (!$onlyown) { + $r->print('
'.&mt('Searching ...').'
'); + $r->rflush(); + my $srchdom = $filter->{'domainfilter'}; + %courses = &Apache::loncommon::search_courses($srchdom,$type,$filter,$numtitles, + $cloneruname,$clonerudom,$domcloner, + \@codetitles,$env{'form.cc_clone'}); + } else { + $r->print('
'); + my %coursehash = &Apache::loncommon::findallcourses(); + foreach my $cid (sort(keys(%coursehash))) { + $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'}; + } + } if ($nohost) { $r->print (''. &mt('User does not exist - username: [_1], domain: [_2].', @@ -244,22 +256,6 @@ sub handler { return OK; } -sub js_changer { - return < -// - - -ENDJS -} - sub processpick { my $openerform = 'rolechoice'; if ($env{'form.form'} eq 'studentform') { @@ -624,102 +620,6 @@ sub get_coordinator_cloneable { } } -sub search_courses { - my ($r,$type,$onlyown,$filter,$numtitles,$cloneruname,$clonerudom,$domcloner,$codetitles) = @_; - my (%courses,%showcourses,$cloner,$ccrole); - if ($type eq 'Community') { - $ccrole = 'co'; - } else { - $ccrole = 'cc'; - } - if (!$onlyown) { - $r->print('
'.&mt('Searching ...').'
'); - $r->rflush(); - 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($filter->{'domainfilter'},$numtitles,$codetitles); - $regexpok = 1; - } elsif ($env{'form.official'} eq 'off') { - $instcodefilter = &Apache::courseclassifier::instcode_search_str($filter->{'domainfilter'},$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($filter->{'domainfilter'}, - $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 %rolehash = &Apache::lonnet::get_my_roles($filter->{'personfilter'}, - $filter->{'persondomfilter'}, - 'userroles',undef, - [$ccrole,'in','ad','ep','ta','cr'], - $filter->{'domainfilter'}); - 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; - } - } else { - $r->print('
'); - my %coursehash = &Apache::loncommon::findallcourses(); - foreach my $cid (sort(keys(%coursehash))) { - $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'}; - } - } - return %courses; -} - sub course_chooser { my ($multiple,$cdom,$cnum,$cleandesc,$canclone) = @_; my $output; @@ -955,19 +855,6 @@ Output: 2 - $jscript - javascript for ch Side Effects: None -=item * -X -B: - - -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. - -Side Effects: None - =item * X