--- loncom/interface/lonrequestcourse.pm 2009/12/15 13:36:16 1.41.2.1
+++ loncom/interface/lonrequestcourse.pm 2010/11/08 21:16:24 1.41.2.7
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Request a course
#
-# $Id: lonrequestcourse.pm,v 1.41.2.1 2009/12/15 13:36:16 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.41.2.7 2010/11/08 21:16:24 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -285,6 +285,9 @@ sub handler {
$jscript = &mainmenu_javascript();
} else {
$jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored);
+ if ($state eq 'courseinfo') {
+ $jscript .= &cloning_javascript();
+ }
}
}
@@ -292,7 +295,7 @@ sub handler {
$jscript .= "\n".&Apache::loncommon::userbrowser_javascript();
}
- my $loaditems = &onload_action($action,$state);
+ my $loaditems = &onload_action($action,$state,$dom);
my (%can_request,%request_domains);
my $canreq =
@@ -364,6 +367,22 @@ function setAction(courseForm) {
END
}
+sub cloning_javascript {
+ return <<"END";
+function setCloneDisplay(courseForm) {
+ if (courseForm.cloning.length > 1) {
+ for (var i=0; i {
cdescr => 'text',
+ cloning => 'radio',
clonecrs => 'text',
clonedom => 'selectbox',
datemode => 'radio',
@@ -518,8 +538,13 @@ sub form_elements {
if ($dom eq 'gcitest') {
%{$elements{'new'}{'courseinfo'}} = (
cdescr => 'text',
- concepttest => 'radio',
+ concepttest => 'radio',
);
+ if (&show_cloneable()) {
+ $elements{'new'}{'courseinfo'}{'clonecrs'} = 'selectbox';
+ $elements{'new'}{'courseinfo'}{'clonedom'} = 'hidden';
+ $elements{'new'}{'courseinfo'}{'cloneroster'} = 'checkbox';
+ }
}
my $numlib = keys(%servers);
if ($numlib > 1) {
@@ -625,7 +650,15 @@ sub onload_action {
if ($state eq 'crstype') {
$loaditems{'onload'} = 'javascript:setAction(document.mainmenu_action);javascript:setType(document.mainmenu_coursetype)';
} else {
- $loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs)';
+ $loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs);';
+ }
+ if ($state eq 'courseinfo') {
+ if (&show_cloneable()) {
+ $loaditems{'onload'} .= 'javascript:setCloneDisplay(document.requestcrs);';
+ }
+ }
+ if (($state eq 'process') && ($env{'form.concepttest'} eq 'editmyown')) {
+ $loaditems{'onload'} = 'javascript:setInitialVisibility()';
}
}
return \%loaditems;
@@ -752,8 +785,9 @@ END
''.&mt('Creation of a course "container" and setting of access dates').''.
''.&mt('Assembly of a valid test from Concept Inventory questions').''.
''.&mt('Enrollment of students').''.
- '
'.&mt('When assembling a test you may either:').
- '
'.&mt('(a) have a valid test built automatically by the WebCenter, or').'
'.&mt('(b) select the questions to include by combining questions chosen from eleven bins with four mandatory questions.').'
'.&mt('The most efficient way to enroll students is to upload a text file containing usernames and passwords.').'
'.&mt("Students' full e-mail addresses should be used as their usernames to ensure uniqueness.").'
'.
+ '
'.&mt('When assembling a test you may:').
+ '
'.&mt('(a) have a valid test built automatically by the WebCenter, or').'
'.&mt('(b) select the questions to include by combining questions chosen from eleven bins with four mandatory questions, or').
+ '
'.&mt('(c) copy one of your existing tests (including optional copying of the student roster)').'
'.&mt('The most efficient way to enroll students is to upload a text file containing usernames and passwords.').'
'.&mt("Students' full e-mail addresses should be used as their usernames to ensure uniqueness.").'
'.
'
'.&mt('The next step is to chose which questions are to be included in the Concept Test.').'';
+ $r->print($output);
+ &Apache::londocsgci::editor($r,'requestcrs',$dom,$cnum);
+ $output = '';
+ }
+ } else {
+ $output .= '
'.$role_result.'';
+ }
$creationresult = 'created';
} else {
$output = '
';
@@ -3117,7 +3330,14 @@ sub update_requestors_roles {
@roles = ($ccrole);
}
foreach my $role (@roles) {
- my $start = $now;
+ my $refresh=$env{'user.refresh.time'};
+ if ($refresh eq '') {
+ $refresh = $env{'user.login.time'};
+ }
+ if ($refresh eq '') {
+ $refresh = $now;
+ }
+ my $start = $refresh-1;
my $end = '0';
if ($role eq 'st') {
if ($details->{'accessstart'} ne '') {
@@ -3218,6 +3438,43 @@ sub update_requestors_roles {
return $output;
}
+sub acquire_cc_role {
+ my ($cdom,$cnum,$trolecode,$csec) = @_;
+ my %coursegroups = &Apache::lonnet::get_active_groups(
+ $env{'user.domain'},$env{'user.name'},$cdom, $cnum);
+ my $cgrps = join(':',keys(%coursegroups));
+ if ($env{'environment.recentroles'}) {
+ my %frozen_roles =
+ &Apache::lonhtmlcommon::get_recent_frozen('roles',$env{'environment.recentrolesn'});
+ &Apache::lonhtmlcommon::store_recent('roles',$trolecode,' ',
+ $frozen_roles{$trolecode});
+ }
+
+ &Apache::lonnet::appenv({"request.course.id" => '',
+ "request.course.fn" => '',
+ "request.course.uri" => '',
+ "request.course.sec" => '',
+ "request.role" => 'cm',
+ "request.role.adv" => $env{'user.adv'},
+ "request.role.domain" => $env{'user.domain'}});
+
+ &Apache::lonnet::log($env{'user.domain'},
+ $env{'user.name'},
+ $env{'user.home'},
+ "Role ".$trolecode);
+
+ &Apache::lonnet::appenv(
+ {'request.role' => $trolecode,
+ 'request.role.domain' => $cdom,
+ 'request.course.sec' => $csec,
+ 'request.course.groups' => $cgrps});
+ my ($furl,$ferr) = &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ my $tadv;
+ if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
+ &Apache::lonnet::appenv({'request.role.adv'=>$tadv});
+ return;
+}
+
sub store_crsparms {
my ($cdom,$cnum,$now,$accessstart,$accessend) = @_;
my $topsymb = '___0___uploaded/'.$cdom.'/'.$cnum.'/default.sequence';
@@ -3235,7 +3492,7 @@ sub store_crsparms {
type => 'date_end',
},
problemstatus => {
- value => 'no_feedback_ever',
+ value => 'no',
type => 'string_problemstatus',
},
maxtries => {
@@ -3261,6 +3518,16 @@ sub store_crsparms {
return %parmresult;
}
+sub roster_upload_form {
+ my ($r,$output) = @_;
+ $r->print(''.&mt('If you have a text file available containing student e-mail addresses and initial passwords, you may upload it now.').'
'.
+ &mt('You may also enroll students at a later date by visiting the [_1]"Menu"[_2] page and choosing: [_1]"Manage Enrollment"[_2].','','').'
'.
+ '');
+}
+
sub notification_information {
my ($disposition,$req_notifylist,$cnum,$now) = @_;
my %emails = &Apache::loncommon::getemails();
@@ -3588,5 +3855,16 @@ sub generate_date_items {
return;
}
+sub show_cloneable {
+ my $showclone;
+ if (&Apache::loncommon::needs_gci_custom()) {
+ my %courses = &Apache::loncommon::existing_gcitest_courses('cc');
+ my $numcourses = scalar(keys(%courses));
+ return $numcourses;
+ } else {
+ return 1;
+ }
+}
+
1;