--- loncom/interface/lonrequestcourse.pm 2009/10/25 14:48:55 1.38 +++ 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.38 2009/10/25 14:48:55 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 # @@ -143,6 +143,10 @@ sub handler { $states{'log'} = ['filter','display']; $states{'new'} = ['courseinfo','enrollment','personnel','review','process']; + if ($dom eq 'gcitest') { + $states{'new'} = ['courseinfo','review','process']; + } + if (($action eq 'new') && ($env{'form.crstype'} eq 'official')) { unless ($env{'form.state'} eq 'crstype') { unshift(@{$states{'new'}},'codepick'); @@ -157,7 +161,7 @@ sub handler { my @invalidcrosslist; my %trail = ( - crstype => 'Course Request Action', + crstype => 'Request Action', codepick => 'Category', courseinfo => 'Description', enrollment => 'Access Dates', @@ -169,6 +173,10 @@ sub handler { cancel => 'Cancel Request', removal => 'Outcome', ); + if ($dom eq 'gcitest') { + $trail{'crstype'} = 'Building a Test'; + $trail{'courseinfo'} = 'Test Information'; + } if (($env{'form.crstype'} eq 'official') && (&Apache::lonnet::auto_run('',$dom))) { $trail{'enrollment'} = 'Enrollment'; @@ -192,16 +200,30 @@ sub handler { if (($udom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/)) { $result = &retrieve_settings($dom,$cnum,$udom,$uname); } else { - $warning = &mt('Invalid username or domain for course requestor'); + 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 { - $warning = &mt('No information was found for this course request.'); + 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 { - $warning = &mt('You do not have rights to view course request information.'); + 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.'); + } } } elsif ((defined($state)) && (defined($action))) { if (($action eq 'view') && ($state eq 'details')) { @@ -263,6 +285,9 @@ sub handler { $jscript = &mainmenu_javascript(); } else { $jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored); + if ($state eq 'courseinfo') { + $jscript .= &cloning_javascript(); + } } } @@ -270,15 +295,16 @@ sub handler { $jscript .= "\n".&Apache::loncommon::userbrowser_javascript(); } - my $loaditems = &onload_action($action,$state); + my $loaditems = &onload_action($action,$state,$dom); - my %can_request; - my $canreq = &Apache::lonnet::check_can_request($dom,\%can_request); + 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); + $crumb,\%request_domains); } else { &request_administration($r,$action,$state,$page,\%states,$dom, $jscript,$loaditems,$crumb,$newinstcode, @@ -286,14 +312,14 @@ sub handler { \@invalidcrosslist); } } else { - $r->print(&header('Course Requests').$crumb. + $r->print(&header('Course/Community Requests').$crumb. '
'.&mt('Request creation of a new course, or review your pending course requests.').'
'. + if ($dom eq 'gcitest') { + my $formname = 'requestcrs'; + my $nexttext = &mt('Continue'); + $r->print(&header($pagetitle,$js.$jscript,$loaditems).$crumb. + ''.&mt('Deployment of a Concept Test requires completion of the following three steps:').'
'.&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.").'
'.$pageinfo.'
'. ''.&mt('You may also add users later, once the course has been created, by using the "Manage course users" link, accessible from the "Main Menu".').'
'; + &Apache::lonhtmlcommon::end_pick_box().''.&mt('You may also add users later, once the community has been created, by using the "Manage community users" link, accessible from the "Main Menu".').'
'; + } else { + $output .= ''.&mt('You may also add users later, once the course has been created, by using the "Manage course users" link, accessible from the "Main Menu".').'
'; + } return $output; } @@ -1750,10 +1975,18 @@ sub print_request_status { ''."\n". ''."\n"; if (@sortedtimes > 0) { + my $desctitle; + if ($env{'form.crstype'} eq 'any') { + $desctitle = &mt('Course/Community Description') + } elsif ($env{'form.crstype'} eq 'community') { + $desctitle = &mt('Community Description') + } else { + $desctitle = &mt('Course Description'); + } $output .= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). ''.&mt('Your course request has been processed and the course has been created.').
- '
'.$role_result.'
'.&mt('Your community request has been processed and the community has been created.'); + } else { + $output = '
'.&mt('Your course request has been processed and the course has been created.');
+ }
+ if ($dom eq 'gcitest') {
+ my $caller = 'requestcrs';
+ &acquire_cc_role($dom,$cnum,'cc./'.$dom.'/'.$cnum);
+ my %parmresult =
+ &store_crsparms($dom,$cnum,$now,$accessstart,$accessend);
+ &Apache::londocsgci::setdefaults();
+ my %crsenvhash = (
+ suppress_tries => 'yes',
+ );
+ my $putresult = &Apache::lonnet::put('environment',\%crsenvhash,$dom,$cnum);
+ if ($env{'form.concepttest'} eq 'cloning') {
+ &Apache::lonuserstate::readmap($dom.'/'.$cnum);
+ if (($clonecrs) && ($clonedom eq 'gcitest')) {
+ my $cloneid = $clonedom.'/'.$clonecrs;
+ my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
+ my $oldcdesc = $clonedesc{'description'};
+ $output .= '
'.&mt('A concept test has been copied from your existing test: [_1].',''.$oldcdesc.'').'
'.$logging[-1].'
'; + } + } + $output .= ''.&mt('Your course request has been updated').'
'. - ¬ification_information($disposition,$req_notifylist,$cnum,$now); + if ($crstype eq 'community') { + $output .= ''.&mt('Your community request has been updated').'
'; + } else { + $output .= ''.&mt('Your course request has been updated').'
'; + } + $output .= ¬ification_information($disposition,$req_notifylist,$cnum,$now); } if ($validationerror ne '') { $output .= ''.&mt('An error occurred validating your request with institutional data sources: [_1].',$validationerror).''; @@ -2809,23 +3310,34 @@ sub update_requestors_roles { my $owner = $env{'user.name'}.':'.$env{'user.domain'}; if (ref($details) eq 'HASH') { if (ref($details->{'personnel'}) eq 'HASH') { + my $ccrole = 'cc'; + if ($crstype eq 'community') { + $ccrole = 'co'; + } unless (ref($details->{'personnel'}{$owner}) eq 'HASH') { $details->{'personnel'}{$owner} = { - 'roles' => ['cc'], - 'cc' => { 'usec' => [] }, + 'roles' => [$ccrole], + $ccrole => { 'usec' => [] }, }; } my @roles; if (ref($details->{'personnel'}{$owner}{'roles'}) eq 'ARRAY') { @roles = sort(@{$details->{'personnel'}{$owner}{'roles'}}); - unless (grep(/^cc$/,@roles)) { - push(@roles,'cc'); + unless (grep(/^\Q$ccrole\E$/,@roles)) { + push(@roles,$ccrole); } } else { - @roles = ('cc'); + @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 '') { @@ -2836,7 +3348,7 @@ sub update_requestors_roles { } } my @usecs; - if ($role ne 'cc') { + if ($role ne $ccrole) { if (ref($details->{'personnel'}{$owner}{$role}{'usec'}) eq 'ARRAY') { @usecs = @{$details->{'personnel'}{$owner}{$role}{'usec'}}; } @@ -2901,19 +3413,121 @@ sub update_requestors_roles { } if ($active) { if ($numactive == 1) { - $output = &mt('Use the following link to enter the course:'); + if ($crstype eq 'Community') { + $output = &mt('Use the following link to enter the community:'); + } else { + $output = &mt('Use the following link to enter the course:'); + } } else { - $output = &mt('Use the following links to your new roles to enter the course:'); + if ($crstype eq 'Community') { + $output = &mt('Use the following links to your new roles to enter the community:'); + } else { + $output = &mt('Use the following links to your new roles to enter the course:'); + } } $output .= ''.&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].','','').'