--- loncom/interface/lonpickcourse.pm 2014/03/13 14:46:46 1.111 +++ loncom/interface/lonpickcourse.pm 2017/01/28 03:48:44 1.126 @@ -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.126 2017/01/28 03:48:44 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,26 +36,46 @@ use Apache::loncoursedata; use Apache::lonnet; use Apache::lonlocal; use Apache::longroup; -use Apache::courseclassifier; use LONCAPA qw(:DEFAULT :match); +use JSON::DWIW; sub handler { my $r = shift; + if ($env{'form.context'} eq 'adhoc') { + &Apache::loncommon::content_type($r,'application/json'); + $r->send_http_header; + my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($env{'form.cid'},1); + if ((ref($possroles) eq 'ARRAY') && (ref($description) eq 'HASH')) { + my $response = []; + if (@{$possroles}) { + foreach my $role (@{$possroles}) { + push(@{$response}, + { name => $role, + desc => $description->{$role}, + }); + } + } + $r->print(JSON::DWIW->to_json({roles => $response})); + } + return OK; + } &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; - + # ------------------------------------------------------------ Print the screen # Get parameters from query string &Apache::loncommon::get_unprocessed_cgi ($ENV{'QUERY_STRING'},['domainfilter','form','cnumelement', 'cdomelement','cnameelement','roleelement', - 'multiple','type','setroles','fixeddom','cloner']); + 'multiple','type','setroles','fixeddom','cloner', + 'crscode','crsdom']); my ($type,$title,$jscript,$multelement,$multiple,$roleelement,$typeelement, - $lastaction,$autosubmit,$submitopener,$cloneruname,$clonerudom); + $lastaction,$autosubmit,$submitopener,$cloneruname,$clonerudom,$crscode, + $crsdom,$rolechooser); - # Get course type - Course or Community. + # Get course type - Course, Community or Placement. $type = $env{'form.type'}; if (!defined($env{'form.type'})) { $type = 'Course'; @@ -69,12 +89,31 @@ sub handler { $title = 'Selecting '.$type.'(s)'; } - # if called when a DC is selecting a course - my $roledom = $env{'form.roleelement'}; + # if called when a DC, DH or DA is selecting a course + my ($roledom,$rolename) = split(/:/,$env{'form.roleelement'}); if ($roledom) { - $roleelement = ''; + $roleelement = ''; $submitopener = &processpick(); - $autosubmit = 'process_pick("'.$roledom.'")'; + $autosubmit = 'process_pick("'.$roledom.'","'.$rolename.'")'; + if (($rolename eq 'dh') || ($rolename eq 'da')) { + my %lt = &Apache::lonlocal::texthash( + title => 'Ad hoc role selection', + preamble => 'Please choose an ad hoc role in the course.', + cancel => 'Click "OK" to enter the course, or "Cancel" to choose a different course.', + ); + + $rolechooser = <<"END"; +
+

$lt{'preamble'}

+
+
+
+ +
+

$lt{'cancel'}

+
+END + } } if ($env{'form.typeelement'} ne '') { $typeelement = ''; @@ -83,12 +122,16 @@ sub handler { # if called when a DC is creating a course for another user. if ($env{'form.form'} eq 'ccrs') { ($cloneruname,$clonerudom) = ($env{'form.cloner'} =~ /^($match_username):($match_domain)$/); + $crscode = $env{'form.crscode'}; + $crsdom = $env{'request.role.domain'}; } # if called when requesting a course if ($env{'form.form'} eq 'requestcrs') { $cloneruname = $env{'user.name'}; $clonerudom = $env{'user.domain'}; + $crscode = $env{'form.crscode'}; + $crsdom = $env{'form.crsdom'}; } my $onlyown = 0; @@ -106,9 +149,22 @@ sub handler { if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) && ($env{'form.pickedcourse'})) { - $loaditem{'onload'} .= 'setDefaultCredits();setRoles();setSections();'; + if ($type ne 'Community') { + my %coursedescription = + &Apache::lonnet::coursedescription($env{'form.pickedcourse'}, + {'one_time' => '1'}); + my $cdom = $coursedescription{'domain'}; + my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); + if (($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'} || $domdefs{'textbookcredits'})) { + $loaditem{'onload'} .= 'setDefaultCredits();'; + } + } + $loaditem{'onload'} .= 'setRoles();setSections();'; + } + if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) && (!$onlyown)) { + $loaditem{'onload'} .= 'hideSearching(); '; } - 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, })); @@ -132,7 +188,8 @@ sub handler { # print javascript functions for choosing a course if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) || $onlyown) { - $r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction)); + $r->print(&gochoose_javascript($type,$multiple,$autosubmit,$lastaction, + $rolename,$rolechooser)); } $r->print(&Apache::lonhtmlcommon::scripttag($jscript)); $r->print($submitopener); @@ -141,7 +198,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'} && @@ -208,6 +265,12 @@ sub handler { if ($coord_cloneable) { $clonetext .= ''; } + if ($crscode ne '') { + $clonetext .= ''; + } + if ($crsdom ne '') { + $clonetext .= ''; + } } $r->print(&Apache::loncommon::build_filters($filterlist,$type,$roleelement,$multelement, $filter,$action,\$numtitles,undef,$cloneruname, @@ -228,8 +291,22 @@ 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'}, + $crsdom,$crscode); + } 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].', @@ -237,29 +314,13 @@ sub handler { ''.$filter->{'persondomfilter'}.'').''); } else { &display_matched_courses($r,$type,$multiple,$action,$showroles,$cloneruname, - $clonerudom,%courses); + $clonerudom,$crsdom,$crscode,%courses); } } $r->print(&Apache::loncommon::end_page()); return OK; } -sub js_changer { - return < -// - - -ENDJS -} - sub processpick { my $openerform = 'rolechoice'; if ($env{'form.form'} eq 'studentform') { @@ -267,7 +328,7 @@ sub processpick { } my $process_pick = <<"ENDONE";