--- loncom/interface/lonrequestcourse.pm 2024/07/03 22:34:22 1.95.2.8
+++ loncom/interface/lonrequestcourse.pm 2016/04/02 04:30:21 1.96
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Request a course
#
-# $Id: lonrequestcourse.pm,v 1.95.2.8 2024/07/03 22:34:22 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.96 2016/04/02 04:30:21 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -119,10 +119,6 @@ use Apache::loncoursequeueadmin;
use Apache::lonuserutils;
use LONCAPA qw(:DEFAULT :match);
-my $registered_flush;
-my $registered_instcats;
-my $modified_dom;
-
sub handler {
my ($r) = @_;
&Apache::loncommon::content_type($r,'text/html');
@@ -131,10 +127,6 @@ sub handler {
return OK;
}
- $registered_flush = 0;
- $registered_instcats = 0;
- $modified_dom = '';
-
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['action','showdom','cnum','state','crstype','queue','tabs']);
&Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -319,6 +311,8 @@ sub handler {
$jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored);
if ($state eq 'courseinfo') {
$jscript .= &cloning_javascript();
+ } elsif ($state eq 'process') {
+ $jscript .= &processing_javascript();
}
}
}
@@ -430,6 +424,17 @@ function setCloneDisplay(courseForm) {
END
}
+sub processing_javascript {
+ return <<"END";
+function hideProcessing() {
+ if (document.getElementById('processing')) {
+ document.getElementById('processing').style.display="none";
+ }
+}
+
+END
+}
+
sub get_breadcrumbs {
my ($dom,$action,$state,$states,$trail) = @_;
my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles,$description);
@@ -707,6 +712,9 @@ sub onload_action {
if ($state eq 'courseinfo') {
$loaditems{'onload'} .= 'javascript:setCloneDisplay(document.requestcrs);';
}
+ if ($state eq 'process') {
+ $loaditems{'onload'} .= 'javascript:hideProcessing();';
+ }
}
return \%loaditems;
}
@@ -752,6 +760,7 @@ function check_can_request(crschoice,act
var unofficial = '';
var community = '';
var textbook = '';
+ var placement = '';
END
if (ref($can_request) eq 'HASH') {
foreach my $item (keys(%{$can_request})) {
@@ -765,6 +774,7 @@ END
unofficial => 'You are not permitted to request creation of an unofficial course in this domain.',
community => 'You are not permitted to request creation of a community in this domain.',
textbook => 'You are not permitted to request creation of a textbook course in this domain',
+ placement => 'You are not permitted to request creation of a placement test in this domain',
all => 'You must choose a specific course type when making a new course request.',
allt => '"All types" is not allowed.',
);
@@ -794,9 +804,16 @@ END
return false;
}
} else {
- if (actionchoice == 'new') {
- alert('$js_lt{'all'}'+'\\n'+'$js_lt{'allt'}');
- return false;
+ if (crschoice == 'placement') {
+ if (placement != 1) {
+ alert("$js_lt{'placement'}");
+ return false;
+ }
+ } else {
+ if (actionchoice == 'new') {
+ alert('$js_lt{'all'}'+'\\n'+'$js_lt{'allt'}');
+ return false;
+ }
}
}
}
@@ -807,7 +824,7 @@ END
END
my ($pagetitle,$pageinfo,$domaintitle,$earlyout);
if (ref($can_request) eq 'HASH') {
- if (($can_request->{'official'}) || ($can_request->{'unofficial'}) || $can_request->{'textbook'}) {
+ if (($can_request->{'official'}) || ($can_request->{'unofficial'}) || ($can_request->{'textbook'}) || ($can_request->{'placement'})) {
if ($can_request->{'community'}) {
$pagetitle = 'Course/Community Requests';
$pageinfo = &mt('Request creation of a new course or community, or review your pending requests.');
@@ -984,6 +1001,8 @@ END
$title = &mt('Pending requests for unofficial courses');
} elsif ($env{'form.crstype'} eq 'textbook') {
$title = &mt('Pending requests for textbook courses');
+ } elsif ($env{'form.crstype'} eq 'textbook') {
+ $title = &mt('Pending requests for placement tests');
} else {
$title = &mt('Pending course/community requests');
}
@@ -2085,22 +2104,11 @@ sub print_personnel_menu {
official => 'Requestor is automatically assigned Course Coordinator role.',
);
$lt{'unofficial'} = $lt{'official'};
- $lt{'textbook'} = $lt{'textbook'};
+ $lt{'textbook'} = $lt{'official'};
+ $lt{'placement'} = $lt{'official'};
$output .= &Apache::lonhtmlcommon::row_headline().
'
'.&Apache::loncommon::help_open_topic('Course_Request_Personnel').' '.$lt{$crstype}.' '.&mt('Include other personnel?').'
';
}
- my $cansearch = 1;
- my @alldoms = &Apache::lonnet::all_domains();
- if (@alldoms == 1) {
- my %domsrch = &Apache::lonnet::get_dom('configuration',
- ['directorysrch'],$alldoms[0]);
- if (ref($domsrch{'directorysrch'}) eq 'HASH') {
- if ((!$domsrch{'directorysrch'}{'available'}) &&
- ($domsrch{'directorysrch'}{'lcavailable'} eq '0')) {
- $cansearch = 0;
- }
- }
- }
for (my $i=0; $i<$persontotal; $i++) {
my @linkargs = map { 'person_'.$i.'_'.$_ } (@items);
my $linkargstr = join("','",@linkargs);
@@ -2125,14 +2133,9 @@ sub print_personnel_menu {
}
$sectionselector .= $newtitle.
''."\n";
- my $usersrchlink;
- if ($cansearch) {
- my $usersrchlinktxt = &mt('Search for user');
- $usersrchlink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,
- $usersrchlinktxt);
- } else {
- $usersrchlink = ' ';
- }
+ my $usersrchlinktxt = &mt('Search for user');
+ my $usersrchlink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,
+ $usersrchlinktxt);
my $userchklinktxt = &mt('Check username');
my $userchklink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,
$userchklinktxt,'checkusername');
@@ -2379,7 +2382,7 @@ sub print_cancel_request {
&Apache::loncommon::start_data_table_row().
''.$history{details}{'cdescr'}.' | '.
&Apache::lonlocal::locallocaltime($timestamp).' | '.
- ''.&mt($showtype).' | '.
+ ''.$showtype.' | '.
&Apache::loncommon::end_data_table_row().
&Apache::loncommon::end_data_table().
'
';
@@ -2513,7 +2516,7 @@ sub print_request_logs {
if (ref($domconfig{'requestcourses'}) eq 'HASH') {
if (ref($domconfig{'requestcourses'}{'uniquecode'}) eq 'HASH') {
if ($curr{'crstype'} eq 'any') {
- my @types = qw(official unofficial community textbook);
+ my @types = qw(official unofficial community textbook placement);
foreach my $type (@types) {
if ($domconfig{'requestcourses'}{'uniquecode'}{$type}) {
$showuniquecode = 1;
@@ -2681,7 +2684,7 @@ sub reqstatus_names {
rejected => 'Request rejected',
cancelled => 'Request cancelled',
);
- if (($crstype eq 'official') || ($crstype eq 'unofficial') || ($crstype eq 'textbook')) {
+ if (($crstype eq 'official') || ($crstype eq 'unofficial') || ($crstype eq 'textbook') || ($crstype eq 'placement')) {
$statusnames{'created'} = &mt('Course created');
} elsif ($crstype eq 'community') {
$statusnames{'created'} = &mt('Community created');
@@ -2733,7 +2736,7 @@ sub requestlog_display_filter {
$typename = $typenames->{$crstype};
}
}
- $output .= '
'."\n";
+ $output .= '
'."\n";
}
$output .= '';
}
@@ -3085,6 +3088,7 @@ sub courseinfo_form {
&js_escape(\%js_lt);
$js_lt{'unofficial'} = $js_lt{'official'};
$js_lt{'textbook'} = $js_lt{'official'};
+ $js_lt{'placement'} = $js_lt{'official'};
my $js_validate = <<"ENDJS";
-ENDCLOSE
- my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble);
- &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Processing ...'));
+ $r->print('
'."\n".
+ &mt('Your request is being processed; this page will update when processing is complete.').
+ '
');
$r->rflush();
if (ref($details) eq 'HASH') {
if ($details->{'clonecrs'}) {
@@ -3828,8 +3810,6 @@ ENDCLOSE
'autocreate',$details,\$logmsg,\$newusermsg,\$addresult,
\$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,
\$code,\%customitems);
- &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished!'));
- &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
if (ref($postprocess) eq 'HASH') {
$customized = $postprocess->{'createdcustomized'};
}
@@ -3864,24 +3844,6 @@ ENDCLOSE
}
$output .= '';
$creationresult = 'created';
- # Flush the course logs so reverse user roles immediately updated
- unless ($registered_flush) {
- my $handlers = $r->get_handlers('PerlCleanupHandler');
- $r->set_handlers('PerlCleanupHandler' => [\&Apache::lonnet::flushcourselogs,@{$handlers}]);
- $registered_flush=1;
- }
- if ($instcode ne '') {
- &Apache::lonnet::devalidate_cache_new('instcats',$dom);
- # Update cache of self-cataloging courses on institution's server(s).
- if (&Apache::lonnet::shared_institution($dom)) {
- unless ($registered_instcats) {
- my $handlers = $r->get_handlers('PerlCleanupHandler');
- $r->set_handlers('PerlCleanupHandler' => [\&devalidate_remote_instcats,@{$handlers}]);
- $registered_instcats=1;
- $modified_dom = $dom;
- }
- }
- }
} else {
$output = '
';
if ($crstype eq 'community') {
@@ -3990,7 +3952,7 @@ ENDCLOSE
} elsif ($disposition eq 'pending') {
my $pendingform;
if ($crstype ne 'official') {
- $pendingform = &pending_validation_form($r,$dom,$cnum,$crstype,$now,$token,
+ $pendingform = &pending_validation_form($dom,$cnum,$crstype,$now,$token,
$lonhost,$env{'form.cdescr'});
}
if ($pendingform) {
@@ -4017,22 +3979,6 @@ ENDCLOSE
}
}
-sub devalidate_remote_instcats {
- if ($modified_dom ne '') {
- my %servers = &Apache::lonnet::internet_dom_servers($modified_dom);
- my %thismachine;
- map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
- if (keys(%servers)) {
- foreach my $server (keys(%servers)) {
- next if ($thismachine{$server});
- &Apache::lonnet::remote_devalidate_cache($server,['instcats:'.$modified_dom]);
- }
- }
- $modified_dom = '';
- }
- return;
-}
-
sub custom_formitems {
my ($preprocess,$customhash) = @_;
return unless ((ref($preprocess) eq 'HASH') && (ref($customhash) eq 'HASH'));
@@ -4308,7 +4254,7 @@ sub notification_information {
}
sub pending_validation_form {
- my ($r,$cdom,$cnum,$crstype,$now,$token,$lonhost,$cdesc) = @_;
+ my ($cdom,$cnum,$crstype,$now,$token,$lonhost,$cdesc) = @_;
my $output;
my %postvalues = (
'owner' => $env{'user.name'}.':'.$env{'user.domain'},
@@ -4341,12 +4287,9 @@ sub pending_validation_form {
$buttontext = &mt('Create course');
}
}
- my $hostname = &Apache::lonnet::hostname($lonhost);
my $protocol = $Apache::lonnet::protocol{$lonhost};
$protocol = 'http' if ($protocol ne 'https');
- my $alias = &Apache::lonnet::use_proxy_alias($r,$lonhost);
- $hostname = $alias if ($alias ne '');
- my $crscreator = $protocol.'://'.$hostname.'/cgi-bin/createpending.pl';
+ my $crscreator = $protocol.'://'.&Apache::lonnet::hostname($lonhost).'/cgi-bin/createpending.pl';
$output .= ''."\n".
''."\n".
''."\n".
@@ -4371,7 +4314,7 @@ sub check_autolimit {
if (($crstype eq 'community') &&
(exists($crsroles{$cnum.':'.$cdom.':co'}))) {
$count ++;
- } elsif ((($crstype eq 'official') || ($crstype eq 'unofficial') || ($crstype eq 'textbook')) &&
+ } elsif ((($crstype eq 'official') || ($crstype eq 'unofficial') || ($crstype eq 'textbook') || ($crstype eq 'placement')) &&
(exists($crsroles{$cnum.':'.$cdom.':cc'}))) {
$count ++;
}
@@ -4834,7 +4777,7 @@ sub print_textbook_form {
'
'.
- ''.
+ ''.
' ');
}
#
@@ -4849,7 +4792,7 @@ sub print_textbook_form {
'
'.
- ''.
+ ''.
'');
}
@@ -5034,7 +4977,11 @@ sub process_textbook_request {
undef($clonedom);
}
}
- $r->print(&header('Course Creation'));
+ my $js = &processing_javascript();
+ my $loaditems = {
+ onload => 'javascript:hideProcessing();',
+ };
+ $r->print(&header('Course Creation',$js,$loaditems));
if (ref($can_request) eq 'HASH') {
unless ((scalar(keys(%{$can_request})) == 1) && ($can_request->{'textbook'})) {
@@ -5083,9 +5030,6 @@ sub process_textbook_request {
} else {
$details->{dateshift} = '';
}
- } elsif (($reqtype eq 'textbook') || ($reqtype eq 'template')) {
- $details->{datemode} = 'delete';
- $details->{dateshift} = '';
}
if ($details->{dateshift} ne '') {
$details->{dateshift} =~ s/[^\d\.]+//g;