--- loncom/interface/lonpickcourse.pm 2014/03/13 14:46:46 1.111
+++ loncom/interface/lonpickcourse.pm 2017/01/02 19:44:06 1.123
@@ -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.123 2017/01/02 19:44:06 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'});
+ 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 or DH 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') {
+ 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();';
}
- my $js = &js_changer();
+ if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) && (!$onlyown)) {
+ $loaditem{'onload'} .= 'hideSearching(); ';
+ }
+ 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";