--- loncom/interface/lonrequestcourse.pm 2014/05/09 15:02:31 1.81
+++ loncom/interface/lonrequestcourse.pm 2015/06/08 22:06:52 1.88
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Request a course
#
-# $Id: lonrequestcourse.pm,v 1.81 2014/05/09 15:02:31 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.88 2015/06/08 22:06:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -172,13 +172,29 @@ sub handler {
if ($can_request{'textbook'}) {
&process_textbook_request($r,$dom,$action,\%domdefs,\%domconfig,\%can_request);
} else {
- &textbook_request_disabled($r,$dom,\%can_request);
+ &textbook_request_disabled($r,$dom,$action,\%can_request);
+ }
+ } elsif ($action eq 'display') {
+ my ($uname,$udom,$result,$warning) = &domcoord_display($dom);
+ if ($warning ne '') {
+ my $args = { only_body => 1 };
+ $r->print(&header('Course/Community Requests','','' ,'',$args).
+ '
'.&mt('Course/Community Request Details').'
'.
+ ''.$warning.'
'.
+ &close_popup_form());
+ } else {
+ $states{'display'} = ['details'];
+ my $loaditems = &onload_action($action,$state);
+ my $page = 0;
+ &request_administration($r,$action,$state,$page,\%states,$dom,$jscript,
+ $loaditems,'','','','','',$showcredits,'','',
+ $uname,$udom);
}
} else {
if ($can_request{'textbook'}) {
&print_textbook_form($r,$dom,\@incdoms,\%domdefs,$domconfig{'requestcourses'},\%can_request);
} else {
- &textbook_request_disabled($r,$dom,\%can_request);
+ &textbook_request_disabled($r,$dom,$action,\%can_request);
}
}
return OK;
@@ -232,46 +248,7 @@ sub handler {
my ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description) =
&get_breadcrumbs($dom,$action,\$state,\%states,\%trail);
if ($action eq 'display') {
- if (($dom eq $env{'request.role.domain'}) && (&Apache::lonnet::allowed('ccc',$dom))) {
- if ($env{'form.cnum'} ne '') {
- my $cnum = $env{'form.cnum'};
- my $queue = $env{'form.queue'};
- my $reqkey = $cnum.'_'.$queue;
- my $namespace = 'courserequestqueue';
- my $domconfig = &Apache::lonnet::get_domainconfiguser($dom);
- my %queued =
- &Apache::lonnet::get($namespace,[$reqkey],$dom,$domconfig);
- if (ref($queued{$reqkey}) eq 'HASH') {
- $uname = $queued{$reqkey}{'ownername'};
- $udom = $queued{$reqkey}{'ownerdom'};
- if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) {
- $result = &retrieve_settings($dom,$cnum,$udom,$uname);
- } else {
- if ($env{'form.crstype'} eq 'community') {
- $warning = &mt('Invalid username or domain for community requestor');
- } else {
- $warning = &mt('Invalid username or domain for course requestor');
- }
- }
- } else {
- if ($env{'form.crstype'} eq 'community') {
- $warning = &mt('No information was found for this community request.');
- } else {
- $warning = &mt('No information was found for this course request.');
- }
- }
- } else {
- $warning = &mt('No course request ID provided.');
- }
- } else {
- if ($env{'form.crstype'} eq 'any') {
- $warning = &mt('You do not have rights to view course or community request information.');
- } elsif ($env{'form.crstype'} eq 'community') {
- $warning = &mt('You do not have rights to view community request information.');
- } else {
- $warning = &mt('You do not have rights to view course request information.');
- }
- }
+ ($uname,$udom,$result,$warning) = &domcoord_display($dom);
} elsif ((defined($state)) && (defined($action))) {
if (($action eq 'view') && ($state eq 'details')) {
if ((defined($env{'form.showdom'})) && (defined($env{'form.cnum'}))) {
@@ -334,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();
}
}
}
@@ -436,7 +415,7 @@ function setCloneDisplay(courseForm) {
for (var i=0; i{$action}}; $i++) {
- if ($$state eq $states->{$action}[$i]) {
- &Apache::lonhtmlcommon::add_breadcrumb(
- {text=>"$trail->{$$state}"});
- $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
- last;
- } else {
- if (($$state eq 'process') || ($$state eq 'removal') || ($$state eq 'reqauthor')) {
+ if (ref($states->{$action}) eq 'ARRAY') {
+ for (my $i=0; $i<@{$states->{$action}}; $i++) {
+ if ($$state eq $states->{$action}[$i]) {
&Apache::lonhtmlcommon::add_breadcrumb(
- { href => '/adm/requestcourse',
- text => "$trail->{$states->{$action}[$i]}",
- }
- );
+ {text=>"$trail->{$$state}"});
+ $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
+ last;
} else {
- &Apache::lonhtmlcommon::add_breadcrumb(
+ if (($$state eq 'process') || ($$state eq 'removal') || ($$state eq 'reqauthor')) {
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ { href => '/adm/requestcourse',
+ text => "$trail->{$states->{$action}[$i]}",
+ }
+ );
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb(
{ href => "javascript:backPage(document.requestcrs,'$states->{$action}[$i]')",
text => "$trail->{$states->{$action}[$i]}", }
- );
- }
- }
- }
+ );
+ }
+ }
+ }
+ }
} else {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>'Pick Action'});
@@ -720,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;
}
@@ -944,7 +939,8 @@ END
if ($action eq 'new') {
my $jsextra;
if (($state eq 'courseinfo') || ($state eq 'codepick')) {
- $jsextra = "\n".&Apache::loncommon::coursebrowser_javascript($dom);
+ $jsextra = "\n".&Apache::loncommon::coursebrowser_javascript($dom,'','','','','',
+ $newinstcode);
} elsif ($state eq 'enrollment') {
if (($env{'form.crstype'} eq 'official') &&
(&Apache::lonnet::auto_run('',$dom))) {
@@ -1129,6 +1125,52 @@ END
return;
}
+sub domcoord_display {
+ my ($dom) = @_;
+ my ($uname,$udom,$result,$warning);
+ if (($dom eq $env{'request.role.domain'}) && (&Apache::lonnet::allowed('ccc',$dom))) {
+ if ($env{'form.cnum'} ne '') {
+ my $cnum = $env{'form.cnum'};
+ my $queue = $env{'form.queue'};
+ my $reqkey = $cnum.'_'.$queue;
+ my $namespace = 'courserequestqueue';
+ my $domconfig = &Apache::lonnet::get_domainconfiguser($dom);
+ my %queued =
+ &Apache::lonnet::get($namespace,[$reqkey],$dom,$domconfig);
+ if (ref($queued{$reqkey}) eq 'HASH') {
+ $uname = $queued{$reqkey}{'ownername'};
+ $udom = $queued{$reqkey}{'ownerdom'};
+ if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) {
+ $result = &retrieve_settings($dom,$cnum,$udom,$uname);
+ } else {
+ if ($env{'form.crstype'} eq 'community') {
+ $warning = &mt('Invalid username or domain for community requestor');
+ } else {
+ $warning = &mt('Invalid username or domain for course requestor');
+ }
+ }
+ } else {
+ if ($env{'form.crstype'} eq 'community') {
+ $warning = &mt('No information was found for this community request.');
+ } else {
+ $warning = &mt('No information was found for this course request.');
+ }
+ }
+ } else {
+ $warning = &mt('No course request ID provided.');
+ }
+ } else {
+ if ($env{'form.crstype'} eq 'any') {
+ $warning = &mt('You do not have rights to view course or community request information.');
+ } elsif ($env{'form.crstype'} eq 'community') {
+ $warning = &mt('You do not have rights to view community request information.');
+ } else {
+ $warning = &mt('You do not have rights to view course request information.');
+ }
+ }
+ return ($uname,$udom,$result,$warning);
+}
+
sub enrollment_lcsec_js {
my %alerts = §ion_check_alerts();
my $secname = $alerts{'badsec'};
@@ -1527,7 +1569,7 @@ sub print_request_form {
\%cat_order,\@code_order);
}
my $lonhost = $r->dir_config('lonHostID');
- my ($storeresult,$result) = &print_request_outcome($lonhost,$dom,\@codetitles,
+ my ($storeresult,$result) = &print_request_outcome($r,$lonhost,$dom,\@codetitles,
\@code_order,$instcredits);
$r->print($result);
if (($storeresult eq 'ok') || ($storeresult eq 'created')) {
@@ -2747,6 +2789,7 @@ sub print_review {
my $enrollrow_title = &mt('Default Access Dates').'
'.
'('.&Apache::lonnet::plaintext('st',$category).')';
+ my $instcode;
if ($env{'form.crstype'} eq 'official') {
if ((ref($codetitles) eq 'ARRAY') && (ref($cat_titles) eq 'HASH')) {
foreach my $title (@{$codetitles}) {
@@ -2762,6 +2805,11 @@ sub print_review {
}
}
}
+ if (ref($code_order) eq 'ARRAY') {
+ foreach my $item (@{$code_order}) {
+ $instcode .= $env{'form.instcode_'.$item};
+ }
+ }
$inst_headers .= ''.&mt('Credits').' | ';
if ($instcredits) {
$inst_values .= ''.$instcredits.' | ';
@@ -2849,7 +2897,7 @@ sub print_review {
($env{'form.clonedom'} =~ /^$match_domain$/)) {
my $canclone = &Apache::loncoursequeueadmin::can_clone_course($uname,
$udom,$env{'form.clonecrs'},$env{'form.clonedom'},
- $env{'form.crstype'});
+ $env{'form.crstype'},$dom,$instcode);
if ($canclone) {
my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'},
$env{'form.clonecrs'},('description','internal.coursecode'));
@@ -3336,7 +3384,7 @@ sub display_navbuttons {
}
sub print_request_outcome {
- my ($lonhost,$dom,$codetitles,$code_order,$instcredits) = @_;
+ my ($r,$lonhost,$dom,$codetitles,$code_order,$instcredits) = @_;
my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend,
%sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,
$uniquecode);
@@ -3547,7 +3595,7 @@ sub print_request_outcome {
my $canclone =
&Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
$env{'user.domain'},$env{'form.clonecrs'},$env{'form.clonedom'},
- $crstype);
+ $crstype,$dom,$instcode);
if ($canclone) {
$clonecrs = $env{'form.clonecrs'};
$clonedom = $env{'form.clonedom'};
@@ -3581,13 +3629,13 @@ sub print_request_outcome {
accessend => $accessend,
personnel => \%personnel,
};
- my ($result,$output) = &process_request($lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,
+ my ($result,$output) = &process_request($r,$lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,
$req_notifylist,\@instsections,\%domconfig);
return ($result,$output);
}
sub process_request {
- my ($lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,
+ my ($r,$lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,
$domconfig) = @_;
my (@inststatuses,$storeresult,$creationresult,$output);
my $val =
@@ -3629,6 +3677,11 @@ sub process_request {
$dom,$crstype,$limit,\$message);
} elsif ($val eq 'validate') {
my ($inststatuslist,$validationchk,$validation,%custominfo);
+ if (ref($details) eq 'HASH') {
+ if ($details->{'clonecrs'}) {
+ $custominfo{'_LC_clonefrom'} = $details->{'clonedom'}.'_'.$details->{'clonecrs'};
+ }
+ }
if (@inststatuses > 0) {
$inststatuslist = join(',',@inststatuses);
}
@@ -3717,6 +3770,15 @@ sub process_request {
foreach my $role (@roles) {
$longroles{$role}=&Apache::lonnet::plaintext($role,$type);
}
+ $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'}) {
+ $customitems{'_LC_clonefrom'} = $details->{'clonedom'}.'_'.$details->{'clonecrs'};
+ }
+ }
my ($result,$postprocess) = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,
'autocreate',$details,\$logmsg,\$newusermsg,\$addresult,
\$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,
@@ -4407,7 +4469,7 @@ sub print_textbook_form {
my ($clonedom,$clonecrs) = split(/_/,$item);
if (ref($prefab{$type}{$item}) eq 'HASH') {
if (&Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
- $env{'user.domain'},$clonecrs,$clonedom,$crstype)) {
+ $env{'user.domain'},$clonecrs,$clonedom,$crstype,$dom)) {
my $num = $prefab{$type}{$item}{'order'};
$ordered{$type}{$num} = $item;
@@ -4507,7 +4569,7 @@ sub print_textbook_form {
if (ref($ordered{'templates'}) eq 'HASH') {
$r->print(''.(' 'x2).' ');
+ &mt('Load pre-existing template').''.(' 'x2).' ');
}
}
if (keys(%cloneable)) {
@@ -4543,7 +4605,8 @@ sub print_textbook_form {
}
$r->print(''.&mt('Subject').' | ');
if ($type eq 'textbooks') {
- $r->print(''.&mt('Book').' | ');
+ $r->print(''.&mt('Publisher').' | '.
+ ''.&mt('Book').' | ');
}
$r->print(&Apache::loncommon::end_data_table_header_row());
my @items = sort { $a <=> $b } keys(%{$ordered{$type}});
@@ -4560,7 +4623,8 @@ sub print_textbook_form {
}
$r->print(''.$prefab{$type}{$item}{'subject'}.' | ');
if ($type eq 'textbooks') {
- $r->print(' | ');
}
$r->print(&Apache::loncommon::end_data_table_row());
@@ -4747,7 +4811,7 @@ sub process_textbook_request {
if (&Apache::lonnet::homeserver($clonecrs,$clonedom) ne 'no_host') {
my $canclone =
&Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
- $env{'user.domain'},$clonecrs,$clonedom,$crstype);
+ $env{'user.domain'},$clonecrs,$clonedom,$crstype,$dom);
unless ($canclone) {
undef($clonecrs);
undef($clonedom);
@@ -4757,7 +4821,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'})) {
@@ -4796,7 +4864,8 @@ sub process_textbook_request {
$details->{dateshift} = $env{'form.dateshift'};
}
my $lonhost = $r->dir_config('lonHostID');
- my ($result,$output) = &process_request($lonhost,$dom,$cnum,$crstype,$now,$details,'',
+ $r->rflush();
+ my ($result,$output) = &process_request($r,$lonhost,$dom,$cnum,$crstype,$now,$details,'',
$req_notifylist,[],$domconfig);
$r->print($output);
if (&Apache::loncoursequeueadmin::author_prompt()) {
@@ -4881,9 +4950,9 @@ function uncheckAllRadio() {
if (numbook > 0) {
uncheckRadio('textbook');
}
- if (nutemplate > 0) {
+ if (numtemplate > 0) {
uncheckRadio('template');
- }m
+ }
if (numcurrent > 0) {
uncheckRadio('existing');
}
@@ -4964,6 +5033,33 @@ ENDSCRIPT
}
+sub textbook_request_disabled {
+ my ($r,$dom,$action,$can_request) = @_;
+ if (ref($can_request) eq 'HASH') {
+ if ($action eq 'process') {
+ unless ((scalar(keys(%{$can_request})) == 1)) {
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ { href => '/adm/requestcourse',
+ text => 'Pick action',
+ });
+ }
+ }
+ }
+ $r->print(&header('Course Request'));
+ &Apache::lonhtmlcommon::add_breadcrumb({text=>'Course Request'});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests').
+ ''.
+ '
'.&mt('You do not have privileges to request creation of textbook courses.').'
');
+ if (ref($can_request) eq 'HASH') {
+ if (scalar(keys(%{$can_request})) > 1) {
+ $r->print('
'.&mt('Go back').'');
+ }
+ }
+ $r->print('
'.
+ &Apache::loncommon::end_page());
+ return;
+}
+
sub startContentScreen {
my ($r,$mode)=@_;
$r->print("\n".'