[LON-CAPA-cvs] cvs: loncom /interface lonrequestcourse.pm
raeburn
raeburn at source.lon-capa.org
Fri Dec 27 09:34:52 EST 2013
raeburn Fri Dec 27 14:34:52 2013 EDT
Modified files:
/loncom/interface lonrequestcourse.pm
Log:
- Simplified course request form in case where only request type available
is "textbook".
- Single page: title, clone choice, student access dates.
- Code used to process course requests moved out of &print_request_outcome to separate
routine: &process_request to facilitate reuse
- Code used to suggest submission of request for author role moved to separate routine:
&print_author_prompt to facilitate reuse.
-------------- next part --------------
Index: loncom/interface/lonrequestcourse.pm
diff -u loncom/interface/lonrequestcourse.pm:1.71 loncom/interface/lonrequestcourse.pm:1.72
--- loncom/interface/lonrequestcourse.pm:1.71 Wed Dec 25 20:43:46 2013
+++ loncom/interface/lonrequestcourse.pm Fri Dec 27 14:34:52 2013
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Request a course
#
-# $Id: lonrequestcourse.pm,v 1.71 2013/12/25 20:43:46 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.72 2013/12/27 14:34:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -134,12 +134,42 @@
my $action = $env{'form.action'};
my $state = $env{'form.state'};
my (%states,%stored);
- my ($jscript,$uname,$udom,$result,$warning,$showcredits,$instcredits);
+ my ($jscript,$uname,$udom,$result,$warning,$showcredits,$instcredits,%can_request,
+ %request_domains, at incdoms);
my %domdefs = &Apache::lonnet::get_domain_defaults($dom);
if ($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'} || $domdefs{'textbookcredits'}) {
$showcredits = 1;
}
+ my $canreq =
+ &Apache::lonnet::check_can_request($dom,\%can_request,\%request_domains);
+
+ foreach my $item (keys(%request_domains)) {
+ if (ref($request_domains{$item}) eq 'ARRAY') {
+ foreach my $possdom (@{$request_domains{$item}}) {
+ unless(grep(/^\Q$possdom\E$/, at incdoms)) {
+ push(@incdoms,$possdom);
+ }
+ }
+ }
+ }
+
+ if ($canreq) {
+ if ((scalar(keys(%can_request)) == 1) && ($can_request{'textbook'})) {
+ my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom);
+ if ($action eq 'log') {
+ &Apache::lonhtmlcommon::add_breadcrumb({text=>'Course Request'});
+ my $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests');
+ &print_request_logs($r,$dom,undef,undef,$crumb);
+ } elsif ($action eq 'process') {
+ &process_textbook_request($r,$dom,$action,\%domdefs,\%domconfig);
+ } else {
+ &print_textbook_form($r,$dom,\@incdoms,\%domdefs,$domconfig{'requestcourses'});
+ }
+ return OK;
+ }
+ }
+
$states{'display'} = ['details'];
$states{'view'} = ['pick_request','details','cancel','removal'];
$states{'log'} = ['display'];
@@ -299,14 +329,11 @@
my $loaditems = &onload_action($action,$state);
- my (%can_request,%request_domains);
- my $canreq =
- &Apache::lonnet::check_can_request($dom,\%can_request,\%request_domains);
if ($action eq 'new') {
if ($canreq) {
if ($state eq 'crstype') {
&print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,
- $crumb,\%request_domains);
+ $crumb,\@incdoms);
} else {
&request_administration($r,$action,$state,$page,\%states,$dom,
$jscript,$loaditems,$crumb,$newinstcode,
@@ -321,7 +348,7 @@
}
} elsif ($action eq 'view') {
if ($state eq 'crstype') {
- &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,$crumb,\%request_domains);
+ &print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,$crumb,\@incdoms);
} else {
&request_administration($r,$action,$state,$page,\%states,$dom,$jscript,
$loaditems,$crumb,'','','','',$showcredits);
@@ -340,7 +367,7 @@
}
} elsif ($action eq 'log') {
if ($state eq 'crstype') {
- &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\%request_domains);
+ &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\@incdoms);
} else {
$jscript .= <<ENDJS;
@@ -358,7 +385,7 @@
&print_request_logs($r,$dom,$jscript,$loaditems,$crumb);
}
} else {
- &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\%request_domains);
+ &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\@incdoms);
}
return OK;
}
@@ -683,7 +710,7 @@
}
sub print_main_menu {
- my ($r,$can_request,$states,$dom,$jscript,$loaditems,$crumb,$request_domains) = @_;
+ my ($r,$can_request,$states,$dom,$jscript,$loaditems,$crumb,$incdoms) = @_;
my ($types,$typename) = &Apache::loncommon::course_types();
my $onchange = 'this.form.submit()';
my $nextstate_setter = "\n";
@@ -797,31 +824,19 @@
$domaintitle = &mt('Course/Community Domain');
}
}
- my @incdoms;
- if (ref($request_domains) eq 'HASH') {
- foreach my $item (keys(%{$request_domains})) {
- if (ref($request_domains->{$item}) eq 'ARRAY') {
- foreach my $possdom (@{$request_domains->{$item}}) {
- unless(grep(/^\Q$possdom\E$/, at incdoms)) {
- push(@incdoms,$possdom);
- }
- }
- }
- }
- }
$r->print(&header($pagetitle,$js.$jscript,$loaditems).$crumb.
'<p>'.$pageinfo.'</p>'.
'<div>'.
&Apache::lonhtmlcommon::start_pick_box().
&Apache::lonhtmlcommon::row_title($domaintitle).
'<form name="domforcourse" method="post" action="/adm/requestcourse">'.
- &Apache::loncommon::select_dom_form($dom,'showdom','',1,$onchange,\@incdoms));
+ &Apache::loncommon::select_dom_form($dom,'showdom','',1,$onchange,$incdoms));
if (!$onchange) {
$r->print(' <input type="submit" name="godom" value="'.
&mt('Change').'" />');
}
unless ((ref($can_request) eq 'HASH') && (keys(%{$can_request}) > 0)) {
- $r->print(&Apache::lonhtmlcommon::row_closure(1)."\n".
+ $r->print('</form>'.&Apache::lonhtmlcommon::row_closure(1)."\n".
&Apache::lonhtmlcommon::end_pick_box().'</div>'."\n".
&Apache::loncommon::end_page());
return;
@@ -1488,25 +1503,8 @@
'<a href="/adm/requestcourse">'.&mt('Make another request').'</a></p>');
}
if (&Apache::loncoursequeueadmin::author_prompt()) {
- $r->print('<h3>'.&mt('Access to authoring space').'</h3>'.
- '<p>'.
- &mt('Although assessment items can be created directly inside a course, such items only use part of the assessment capabilities of LON-CAPA.').
- '<br />'.
- &mt('By contrast, items created in authoring space, then imported into a course, can use all of the features of the assessment engine.').'</p>'.
- '<p>'.&mt('Request authoring space access now?').
- '<span class="LC_nobreak"> '.
- '<label><input type="radio" name="requestauthor" value="1" />'.&mt('Yes').'</label>'.
- (' 'x2).
- '<label><input type="radio" name="requestauthor" value="0" checked="checked"/>'.&mt('No').'</label>'.
- '</span></p>'.
- '<input type="submit" name="newauthor" value="'.&mt('Submit authoring request').'" />'.
- '<input type="hidden" name="state" value="reqauthor" />'.
- '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'.
- '<input type="hidden" name="cnum" value="'.$env{'form.cnum'}.'" />'.
- '<input type="hidden" name="showdom" value="'.$env{'form.showdom'}.'" />'.
- '<input type="hidden" name="crstype" value="'.$env{'form.crstype'}.'" />'.
- '<input type="hidden" name="disposition" value="'.$storeresult.'" />'.
- '<br />');
+ &print_author_prompt($r,$env{'form.action'},$env{'form.cnum'},$env{'form.showdom'},
+ $env{'form.crstype'},$storeresult);
} elsif ($storeresult eq 'created') {
$r->print('<p><a href="/adm/requestcourse">'.&mt('Make another request').'</a></p>');
}
@@ -1591,6 +1589,29 @@
return;
}
+sub print_author_prompt {
+ my ($r,$action,$cnum,$showdom,$crstype,$storeresult) = @_;
+ $r->print('<h3>'.&mt('Access to authoring space').'</h3>'.
+ '<p>'.
+ &mt('Although assessment items can be created directly inside a course, such items only use part of the assessment capabilities of LON-CAPA.').
+ '<br />'.
+ &mt('By contrast, items created in authoring space, then imported into a course, can use all of the features of the assessment engine.').'</p>'.
+ '<p>'.&mt('Request authoring space access now?').
+ '<span class="LC_nobreak"> '.
+ '<label><input type="radio" name="requestauthor" value="1" />'.&mt('Yes').'</label>'.
+ (' 'x2).
+ '<label><input type="radio" name="requestauthor" value="0" checked="checked"/>'.&mt('No').'</label>'.
+ '</span></p>'.
+ '<input type="submit" name="newauthor" value="'.&mt('Submit authoring request').'" />'.
+ '<input type="hidden" name="state" value="reqauthor" />'.
+ '<input type="hidden" name="action" value="'.$action.'" />'.
+ '<input type="hidden" name="cnum" value="'.$cnum.'" />'.
+ '<input type="hidden" name="showdom" value="'.$showdom.'" />'.
+ '<input type="hidden" name="crstype" value="'.$crstype.'" />'.
+ '<input type="hidden" name="disposition" value="'.$storeresult.'" />'.
+ '<br />');
+}
+
sub get_usertype {
my ($persondom,$personname,$curr_rules,$got_rules) = @_;
my ($rules,$ruleorder) =
@@ -3486,11 +3507,18 @@
accessend => $accessend,
personnel => \%personnel,
};
- my (@inststatuses,$storeresult,$creationresult);
+ my ($result,$output) = &process_request($dom,$cnum,$crstype,$now,$details,$instcode,
+ $req_notifylist,\@instsections,\%domconfig);
+ return ($result,$output);
+}
+
+sub process_request {
+ my ($dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,$domconfig) = @_;
+ my (@inststatuses,$storeresult,$creationresult,$output);
my $val =
&Apache::loncoursequeueadmin::get_processtype('course',$env{'user.name'},
$env{'user.domain'},$env{'user.adv'},
- $dom,$crstype,\@inststatuses,\%domconfig);
+ $dom,$crstype,\@inststatuses,$domconfig);
if ($val eq '') {
if ($crstype eq 'official') {
$output = &mt('You are not permitted to request creation of official courses.');
@@ -3525,8 +3553,10 @@
$inststatuslist = join(',', at inststatuses);
}
my $instseclist;
- if (@instsections > 0) {
- $instseclist = join(',', at instsections);
+ if (ref($instsections) eq 'ARRAY') {
+ if (@{$instsections} > 0) {
+ $instseclist = join(',',@{$instsections});
+ }
}
$validationchk =
&Apache::lonnet::auto_courserequest_validation($dom,
@@ -4079,5 +4109,497 @@
return;
}
+sub print_textbook_form {
+ my ($r,$dom,$incdoms,$domdefs,$settings) = @_;
+ my ($bookshash,%ordered);
+ my $crstype = 'textbook';
+#
+# Retrieve list of textbook courses cloneable by user
+#
+ my $numbook;
+ if (ref($settings) eq 'HASH') {
+ $bookshash = $settings->{'textbooks'};
+ if (ref($bookshash) eq 'HASH') {
+ foreach my $item (keys(%{$bookshash})) {
+ my ($clonedom,$clonecrs) = split(/_/,$item);
+ if (ref($bookshash->{$item}) eq 'HASH') {
+ my ($clonedom,$clonecrs) = split(/_/,$item);
+ if (&Apache::loncoursequeueadmin::can_clone_course($env{'user.name'},
+ $env{'user.domain'},$clonecrs,$clonedom,$crstype)) {
+
+ my $num = $bookshash->{$item}{'order'};
+ $ordered{$num} = $item;
+ $numbook ++;
+ }
+ }
+ }
+ }
+ }
+
+#
+# Check if domain has multiple library servers
+#
+ my ($home_server_pick,$numlib) =
+ &Apache::loncommon::home_server_form_item($dom,'chome',
+ 'default','hide');
+ if ($numlib > 1) {
+ $home_server_pick = &mt('Home Server for Course').': '.$home_server_pick.'<br />';
+ }
+
+#
+# Retrieve information about courses owned by user, or in which user has an active or future
+# Course Coordinator role
+#
+ my $numcurrent;
+ my %cloneable = &Apache::lonnet::courseiddump($dom,'.',1,'.',$env{'user.name'}.':'.$env{'user.domain'},
+ undef,undef,undef,'Course');
+ my %ccroles = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',
+ ['active','future'],['cc']);
+ foreach my $role (keys(%ccroles)) {
+ my ($cnum,$cdom,$rest) = split(/:/,$role,3);
+ unless (exists($cloneable{$cdom.'_'.$cnum})) {
+ my %courseinfo = &Apache::lonnet::coursedescription($cdom.'_'.$cnum,{'one_time' => 1});
+ $cloneable{$cdom.'_'.$cnum} = \%courseinfo;
+ }
+ }
+
+ my $numcurrent = scalar(keys(%cloneable));
+
+ my $jscript = &textbook_request_javascript($numbook,$numcurrent);
+ my %loaditems;
+ $loaditems{'onload'} = 'javascript:uncheckAllRadio();';
+ $r->print(&header('Course Request',$jscript,\%loaditems));
+
+ &Apache::lonhtmlcommon::add_breadcrumb({text=>'Course Request'});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests'));
+
+#
+# Show domain selector form, if required.
+#
+ if (@{$incdoms} > 1) {
+ my $onchange = 'this.form.submit()';
+ $r->print('<form name="domforcourse" method="post" action="/adm/requestcourse">'.
+ '<div><fieldset><legend>'.&mt('Domain').'</legend>'.
+ &Apache::loncommon::select_dom_form($dom,'showdom','',1,$onchange,$incdoms).
+ '</fieldset></form>');
+ }
+
+#
+# Course request form
+#
+
+#
+# Course Title
+#
+ $r->print('<form name="requestcourse" method="post" action="/adm/requestcourse" onsubmit="return validTextbookReq();">'.
+ '<div>'.
+ '<fieldset>'.
+ '<legend>'.&mt('Course Information').'</legend>'.
+ '<span class="LC_nobreak">'.&mt('Title').': '.
+ '<input type="text" size="60" name="cdescr" value="" /></span><br />'.
+ $home_server_pick.'<br /></fieldset>'.
+ '</div>');
+
+#
+# Content source selection, if more than one available
+#
+ if (keys(%cloneable) || keys(%ordered)) {
+ $r->print('<div>'.
+ '<fieldset><legend>'.&mt('Course Content').'</legend>');
+ if (keys(%ordered)) {
+ $r->print('<span class="LC_nobreak"><label>'.
+ '<input type="radio" name="cloning" value="textbook" onclick="javascript:cloneChoice();" />'.
+ &mt('Load textbook content').'</span>'.(' 'x2).' ');
+ }
+ if (keys(%cloneable)) {
+ $r->print('<span class="LC_nobreak"><label>'.
+ '<input type="radio" name="cloning" value="existing" onclick="javascript:cloneChoice();" />'.
+ &mt('Copy one of your courses').'</label></span>'.(' 'x2).' ');
+ }
+ $r->print('<span class="LC_nobreak"><label>'.
+ '<input type="radio" name="cloning" value="none" checked="checked" onclick="javascript:cloneChoice();" />'.
+ &mt('Empty course shell').'</label></span>');
+ } else {
+ $r->print('<input type="hidden" name="cloning" value="none" />');
+ }
+
+#
+# Table of cloneable textbook courses
+#
+ if (keys(%ordered)) {
+ $r->print('<div id="showtextbook" style="display:none">'.
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row().
+ '<th>'.&mt('Title').'</th>'.
+ '<th>'.&mt('Author(s)').'</th>'.
+ '<th>'.&mt('Subject').'</th>'.
+ '<th>'.&mt('Book').'</th>'.
+ &Apache::loncommon::end_data_table_header_row());
+ my @items = sort { $a <=> $b } keys(%ordered);
+ foreach my $num (@items) {
+ my $item = $ordered{$num};
+ my $cleantitle=&HTML::Entities::encode($bookshash->{$item}->{'title'},'<>&"');
+ $cleantitle=~s/'/\\'/g;
+ $cleantitle =~ s/^\s+//;
+ $r->print(&Apache::loncommon::start_data_table_row().
+ '<td><label><input type="radio" name="book" value="'.$item.'" />'.
+ $cleantitle.'</label></td>'.
+ '<td>'.$bookshash->{$item}->{'author'}.'</td>'.
+ '<td>'.$bookshash->{$item}->{'subject'}.'</td>'.
+ '<td><img border="0" src="'.$bookshash->{$item}->{'image'}.
+ '" alt="'.$cleantitle.'" /></td>'.
+ &Apache::loncommon::end_data_table_row());
+ }
+ $r->print(&Apache::loncommon::end_data_table().
+ '</div>');
+ }
+
+#
+# Table of user's current courses (owner and/or course coordinator)
+#
+ if (keys(%cloneable)) {
+ my %lt = &clone_text();
+ $r->print('<div id="showexisting" style="display:none">'.
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row().
+ '<th>'.&mt('Title').'</th>'.
+ '<th>'.&mt('Owner/co-owner(s)').'</th>'.
+ &Apache::loncommon::end_data_table_header_row());
+ my %allownernames;
+ my %sortbytitle;
+ foreach my $cid (sort(keys(%cloneable))) {
+ if (ref($cloneable{$cid}) eq 'HASH') {
+ my $cdesc = $cloneable{$cid}{'description'};
+ $cdesc =~ s/`/'/g;
+ if ($cdesc ne '') {
+ push(@{$sortbytitle{$cdesc}},$cid);
+ }
+ }
+ }
+ foreach my $title (sort(keys(%sortbytitle))) {
+ if (ref($sortbytitle{$title}) eq 'ARRAY') {
+ foreach my $cid (sort(@{$sortbytitle{$title}})) {
+ my $cleantitle=&HTML::Entities::encode($title,'<>&"');
+ $cleantitle=~s/'/\\'/g;
+ $cleantitle =~ s/^\s+//;
+ my ($namestr, at owners,%ownernames);
+ my $singleowner = $cloneable{$cid}{'internal.courseowner'};
+ push(@owners,$singleowner);
+ if ($cloneable{$cid}{'co-owners'} ne '') {
+ foreach my $item (split(/,/,$cloneable{$cid}{'internal.co-owners'})) {
+ push(@owners,$item);
+ }
+ }
+ foreach my $owner (@owners) {
+ my ($ownername,$ownerdom);
+ if ($owner =~ /:/) {
+ ($ownername,$ownerdom) = split(/:/,$owner);
+ } else {
+ $ownername = $owner;
+ if ($owner ne '') {
+ $ownerdom = $dom;
+ }
+ }
+ if ($ownername ne '' && $ownerdom ne '') {
+ if (exists($allownernames{$ownername.':'.$ownerdom})) {
+ $ownernames{$ownername.':'.$ownerdom} = $allownernames{$ownername.':'.$ownerdom};
+ } else {
+ my %namehash=&Apache::loncommon::getnames($ownername,$ownerdom);
+ $ownernames{$ownername.':'.$ownerdom} = \%namehash;
+ $allownernames{$ownername.':'.$ownerdom} = $ownernames{$ownername.':'.$ownerdom};
+ }
+ }
+ }
+ my @lastnames;
+ foreach my $owner (keys(%ownernames)) {
+ if (ref($ownernames{$owner}) eq 'HASH') {
+ push(@lastnames,$ownernames{$owner}{'lastname'});
+ }
+ }
+ if (@lastnames) {
+ $namestr = join(', ',sort(@lastnames));
+ }
+ $r->print(&Apache::loncommon::start_data_table_row().
+ '<td><label><input type="radio" name="owned" value="'.$cid.'" />'.
+ ' '.$cleantitle.'</label></td>'.
+ '<td>'.$namestr.'</td>'.
+ &Apache::loncommon::end_data_table_row());
+ }
+ }
+ }
+ $r->print(&Apache::loncommon::end_data_table().
+ '<p><input type="radio" name="datemode" value="delete" /> '.$lt{'ncd'}.
+ '</label><br /><label>'.
+ '<input type="radio" name="datemode" value="preserve" /> '.$lt{'prd'}.
+ '</label><br /><label>'.
+ '<input type="radio" name="datemode" value="shift" checked="checked" /> '.
+ $lt{'shd'}.'</label>'.
+ '<input type="text" size="5" name="dateshift" value="365" />'.
+ '</div>');
+ }
+#
+# End of content selector
+#
+ if (keys(%cloneable) || keys(%ordered)) {
+ $r->print('</fieldset></div>');
+ }
+
+ my %accesstitles = (
+ 'start' => 'Default start access',
+ 'end' => 'Default end access',
+ );
+ my %help_item = (
+ start => 'Course_Request_Access_Start',
+ end => 'Course_Request_Access_End',
+ );
+ my $starttime = time;
+ my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
+ my $startform = &Apache::lonhtmlcommon::date_setter('requestcourse','accessstart',
+ $starttime,'','','',1,'','','',1);
+ my $endform = &Apache::lonhtmlcommon::date_setter('requestcourse','accessend',
+ $endtime,'','','',1,'','','',1);
+#
+# Set default start and end dates for student access
+#
+ $r->print('<div>'.
+ '<fieldset><legend>'.&mt('Student Access Dates').'</legend>'.
+ &Apache::loncommon::help_open_topic($help_item{'start'}).
+ ' '.&mt($accesstitles{'start'}).$startform.'<br />'.
+ &Apache::loncommon::help_open_topic($help_item{'end'}).
+ ' '.&mt($accesstitles{'end'}).$endform.'<br /></div>');
+
+#
+# Submit button
+#
+ $r->print('<input type="hidden" name="action" value="process" />'.
+ '<input type="submit" value="'.&mt('Create course').'" />');
+
+#
+# End request form
+#
+ $r->print('</form>'.
+ &Apache::loncommon::end_page());
+ return;
+}
+
+sub process_textbook_request {
+ my ($r,$dom,$action,$domdefs,$domconfig) = @_;
+ my ($uniquecode,$req_notifylist);
+ my $crstype = 'textbook';
+ if (ref($domconfig) eq 'HASH') {
+ if (ref($domconfig->{'requestcourses'}) eq 'HASH') {
+ if (ref($domconfig->{'requestcourses'}{'notify'}) eq 'HASH') {
+ $req_notifylist = $domconfig->{'requestcourses'}{'notify'}{'approval'};
+ }
+ if (ref($domconfig->{'requestcourses'}{'uniquecode'}) eq 'HASH') {
+ $uniquecode = $domconfig->{'requestcourses'}{'uniquecode'}{$crstype};
+ }
+ }
+ }
+ my $crstype = 'textbook';
+ my $now = time;
+ my $reqtype = $env{'form.cloning'};
+ my (@inststatuses,$storeresult,$creationresult);
+ my $cnum = &Apache::lonnet::generate_coursenum($dom,'Course');
+ my ($clonefrom,$clonedom,$clonecrs);
+ if ($reqtype eq 'textbook') {
+ $clonefrom = $env{'form.book'};
+ } elsif ($reqtype eq 'existing') {
+ $clonefrom = $env{'form.owned'};
+ }
+ my ($accessstart,$accessend) = &dates_from_form('accessstart','accessend');
+ if ($clonefrom) {
+ ($clonedom,$clonecrs) = split(/_/,$clonefrom);
+ 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);
+ unless ($canclone) {
+ undef($clonecrs);
+ undef($clonedom);
+ }
+ } else {
+ undef($clonecrs);
+ undef($clonedom);
+ }
+ }
+ $r->print(&header('Course Creation'));
+
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ { href => '/adm/requestcourse',
+ text => "Create Course",
+ }
+ );
+ &Apache::lonhtmlcommon::add_breadcrumb({text=>'Request Processed'});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests'));
+
+ my $details = {
+ owner => $env{'user.name'},
+ domain => $env{'user.domain'},
+ cdom => $dom,
+ cnum => $cnum,
+ coursehome => $env{'form.chome'},
+ cdescr => $env{'form.cdescr'},
+ crstype => $crstype,
+ uniquecode => $uniquecode,
+ clonedom => $clonedom,
+ clonecrs => $clonecrs,
+ accessstart => $accessstart,
+ accessend => $accessend,
+ personnel => {},
+ };
+ if ($reqtype eq 'existing') {
+ $details->{datemode} = $env{'form.datemode'};
+ $details->{dateshift} = $env{'form.dateshift'};
+ }
+ my ($result,$output) = &process_request($dom,$cnum,$crstype,$now,$details,'',$req_notifylist,[],$domconfig);
+ $r->print($output);
+ if (&Apache::loncoursequeueadmin::author_prompt()) {
+ &print_author_prompt($r,$action,$cnum,$dom,$crstype,$result);
+ } elsif ($result eq 'created') {
+ $r->print('<p><a href="/adm/requestcourse">'.&mt('Create another course').'</a></p>');
+ }
+ $r->print(&Apache::loncommon::end_page());
+}
+
+sub textbook_request_javascript {
+ my ($numbook,$numcurrent) = @_;
+ my %lt = &Apache::lonlocal::texthash(
+ choose => 'Please select a content option.',
+ textbook => 'Please select a textbook, or choose a different option.',
+ existing => 'Please select one of your existing courses to copy, or choose a different option.',
+ title => 'Please enter a course title.',
+ );
+ return if (!$numbook && !$numcurrent);
+ return <<"ENDSCRIPT";
+function cloneChoice() {
+ if (document.requestcourse.cloning) {
+ var radioLength = document.requestcourse.cloning.length;
+ if (radioLength == undefined) {
+ var val = document.requestcourse.cloning.value;
+ if ((val == 'textbook') || (val == 'existing')) {
+ var elem = document.getElementById('show'+val);
+ if (document.requestcourse.cloning.checked) {
+ elem.style.display = 'block';
+ } else {
+ uncheckRadio(val);
+ elem.style.display = 'none';
+ }
+ }
+ } else {
+ for (var i=0; i<radioLength; i++) {
+ var val = document.requestcourse.cloning[i].value;
+ if ((val == 'textbook') || (val == 'existing')) {
+ var elem = document.getElementById('show'+val);
+ if (document.requestcourse.cloning[i].checked) {
+ elem.style.display = 'block';
+ } else {
+ if (val == 'textbook') {
+ uncheckRadio('book');
+ }
+ if (val == 'existing') {
+ uncheckRadio('owned');
+ }
+ elem.style.display = 'none';
+ }
+ }
+ }
+ }
+ }
+ return;
+}
+
+function uncheckRadio(radioGroupName) {
+ var group = document.getElementsByName(radioGroupName);
+ var radioLength = group.length;
+ if (radioLength == undefined) {
+ group.checked = false;
+ } else {
+ for (var i=0; i<radioLength; i++) {
+ group[i].checked = false;
+ }
+ }
+ return;
+}
+
+function uncheckAllRadio() {
+ uncheckRadio('cloning');
+ var numbook = $numbook;
+ var numcurrent = $numcurrent;
+ if (numbook > 0) {
+ uncheckRadio('textbook');
+ }
+ if (numcurrent > 0) {
+ uncheckRadio('existing');
+ }
+ return;
+}
+
+function validTextbookReq() {
+ if (document.requestcourse.cloning) {
+ var cloneChoice = 0;
+ var radioLength = document.requestcourse.cloning.length;
+ if (radioLength == undefined) {
+ if (document.requestcourse.cloning.checked == false) {
+ alert("$lt{'choose'}");
+ return false;
+ } else {
+ cloneChoice = document.requestcourse.cloning.value;
+ }
+ } else {
+ for (var i=0; i<radioLength; i++) {
+ if (document.requestcourse.cloning[i].checked) {
+ cloneChoice = document.requestcourse.cloning[i].value;
+ break;
+ }
+ }
+ if (cloneChoice == 0) {
+ alert("$lt{'choose'}");
+ return false;
+ }
+ }
+ var group;
+ if ((cloneChoice == 'textbook') || (cloneChoice == 'existing')) {
+ var group;
+ if (cloneChoice == 'textbook') {
+ group = document.getElementsByName('book');
+ } else {
+ group = document.getElementsByName('owned');
+ }
+ var groupLength = group.length;
+ var chosen = 0;
+ if (groupLength == undefined) {
+ if (group.checked) {
+ chosen = 1;
+ }
+ } else {
+ for (var j=0; j<groupLength; j++) {
+ if (group[j].checked) {
+ chosen = 1;
+ break;
+ }
+ }
+ }
+ if (chosen == 0) {
+ if (cloneChoice == 'textbook') {
+ alert("$lt{'textbook'}");
+ } else {
+ alert("$lt{'existing'}");
+ }
+ return false;
+ }
+ }
+ }
+ if (document.requestcourse.cdescr.value == '') {
+ alert("$lt{'title'}");
+ return false;
+ }
+ return true;
+}
+
+ENDSCRIPT
+
+}
+
1;
More information about the LON-CAPA-cvs
mailing list