--- loncom/interface/loncreatecourse.pm 2003/09/08 21:55:46 1.36 +++ loncom/interface/loncreatecourse.pm 2007/01/10 21:37:50 1.100 @@ -1,7 +1,7 @@ # The LearningOnline Network # Create a course # -# $Id: loncreatecourse.pm,v 1.36 2003/09/08 21:55:46 www Exp $ +# $Id: loncreatecourse.pm,v 1.100 2007/01/10 21:37:50 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,205 +25,30 @@ # # http://www.lon-capa.org/ # -# (My Desk -# -# (Internal Server Error Handler -# -# (Login Screen -# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, -# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) -# -# 3/1/1 Gerd Kortemeyer) -# -# 3/1 Gerd Kortemeyer) -# -# 2/14,2/16,2/17,7/6 Gerd Kortemeyer -# +### + package Apache::loncreatecourse; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::loncommon; -use Apache::lonratedt; use Apache::londocs; - -# -------------------------------------------- Return path to profile directory - -sub propath { - my ($udom,$uname)=@_; - $udom=~s/\W//g; - $uname=~s/\W//g; - my $subdir=$uname.'__'; - $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; - my $proname="$Apache::lonnet::perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; - return $proname; -} - -# ================================================ Get course directory listing - -sub crsdirlist { - my ($courseid,$which)=@_; - unless ($which) { $which=''; } - my %crsdata=&Apache::lonnet::coursedescription($courseid); - my @listing=&Apache::lonnet::dirlist - ($which,$crsdata{'domain'},$crsdata{'num'}, - &propath($crsdata{'domain'},$crsdata{'num'})); - my @output=(); - foreach (@listing) { - unless ($_=~/^\./) { - push (@output,(split(/\&/,$_))[0]); - } - } - return @output; -} - -# ============================================================= Read a userfile - -sub readfile { - my ($courseid,$which)=@_; - my %crsdata=&Apache::lonnet::coursedescription($courseid); - return &Apache::lonnet::getfile('/uploaded/'.$crsdata{'domain'}.'/'. - $crsdata{'num'}.'/'.$which); -} - -# ============================================================ Write a userfile - -sub writefile { - (my $courseid, my $which,$ENV{'form.output'})=@_; - my %crsdata=&Apache::lonnet::coursedescription($courseid); - return &Apache::lonnet::finishuserfileupload( - $crsdata{'num'},$crsdata{'domain'}, - $crsdata{'home'}, - 'output',$which); -} - -# ===================================================================== Rewrite - -sub rewritefile { - my ($contents,%rewritehash)=@_; - foreach (keys %rewritehash) { - my $pattern=$_; - $pattern=~s/(\W)/\\$1/gs; - my $new=$rewritehash{$_}; - $contents=~s/$pattern/$new/gs; - } - return $contents; -} - -# ============================================================= Copy a userfile - -sub copyfile { - my ($origcrsid,$newcrsid,$which)=@_; - unless ($which=~/\.sequence$/) { - return &writefile($newcrsid,$which, - &readfile($origcrsid,$which)); - } else { - my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); - my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid); - return &writefile($newcrsid,$which, - &rewritefile( - &readfile($origcrsid,$which), - ( - '/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/' - => '/uploaded/'. $newcrsdata{'domain'}.'/'. $newcrsdata{'num'}.'/' - ))); - } -} - -# =============================================================== Copy a dbfile - -sub copydb { - my ($origcrsid,$newcrsid,$which)=@_; - $which=~s/\.db$//; - my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); - my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid); - my %data=&Apache::lonnet::dump - ($which,$origcrsdata{'domain'},$origcrsdata{'num'}); - return &Apache::lonnet::put - ($which,\%data,$newcrsdata{'domain'},$newcrsdata{'num'}); -} - -# ========================================================== Copy resourcesdata - -sub copyresourcedb { - my ($origcrsid,$newcrsid)=@_; - my %origcrsdata=&Apache::lonnet::coursedescription($origcrsid); - my %newcrsdata= &Apache::lonnet::coursedescription($newcrsid); - my %data=&Apache::lonnet::dump - ('resourcedata',$origcrsdata{'domain'},$origcrsdata{'num'}); - $origcrsid=~s/^\///; - $origcrsid=~s/\//\_/; - $newcrsid=~s/^\///; - $newcrsid=~s/\//\_/; - my %newdata=(); - undef %newdata; - my $startdate=$data{$origcrsid.'.0.opendate'}; - my $today=time; - my $delta=0; - if ($startdate) { - my $oneday=60*60*24; - $delta=$today-$startdate; - $delta=int($delta/$oneday)*$oneday; - } -# ugly retro fix for broken version of types - foreach (keys %data) { - if ($_=~/\wtype$/) { - my $newkey=$_; - $newkey=~s/type$/\.type/; - $data{$newkey}=$data{$_}; - delete $data{$_}; - } - } -# adjust dates - foreach (keys %data) { - my $thiskey=$_; - $thiskey=~s/^$origcrsid/$newcrsid/; - $newdata{$thiskey}=$data{$_}; - if ($data{$_.'.type'}=~/^date/) { - $newdata{$thiskey}=$newdata{$thiskey}+$delta; - } - } - return &Apache::lonnet::put - ('resourcedata',\%newdata,$newcrsdata{'domain'},$newcrsdata{'num'}); -} - -# ========================================================== Copy all userfiles - -sub copyuserfiles { - my ($origcrsid,$newcrsid)=@_; - foreach (&crsdirlist($origcrsid,'userfiles')) { - ©file($origcrsid,$newcrsid,$_); - } -} -# ========================================================== Copy all userfiles - -sub copydbfiles { - my ($origcrsid,$newcrsid)=@_; - foreach (&crsdirlist($origcrsid)) { - if ($_=~/\.db$/) { - unless - ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) { - ©db($origcrsid,$newcrsid,$_); - } - } - } -} - -# ======================================================= Copy all course files - -sub copycoursefiles { - my ($origcrsid,$newcrsid)=@_; - ©userfiles($origcrsid,$newcrsid); - ©dbfiles($origcrsid,$newcrsid); - ©resourcedb($origcrsid,$newcrsid); -} +use Apache::lonlocal; +use Apache::londropadd; +use Apache::lonclonecourse; +use LONCAPA::batchcreatecourse; +use LONCAPA; # ===================================================== Phase one: fill-in form sub print_course_creation_page { my $r=shift; - my $defdom=$ENV{'request.role.domain'}; + my $crstype = 'Group'; + if ($env{'form.phase'} eq 'courseone') { + $crstype = 'Course'; + } + my $defdom=$env{'request.role.domain'}; my %host_servers = &Apache::loncommon::get_library_servers($defdom); my $course_home = '\n"; my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain'); - my $bodytag=&Apache::loncommon::bodytag('Create a New Course'); - my $helplink=&Apache::loncommon::help_open_topic('Create_Course','Help on Creating Courses'); my $cloneform=&Apache::loncommon::select_dom_form - ($ENV{'request.role.domain'},'clonedomain'). + ($env{'request.role.domain'},'clonedomain'). &Apache::loncommon::selectcourse_link - ('ccrs','clonecourse','clonedomain'); - my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript(); - $r->print(< - $coursebrowserjs - -The LearningOnline Network with CAPA - -$bodytag -$helplink +END + + my %titles = &Apache::lonlocal::texthash( + courseone => 'Create a New Course', + groupone => 'Create a New Group', + ); + my $start_page = + &Apache::loncommon::start_page($titles{$env{'form.phase'}},$js); + my $end_page = + &Apache::loncommon::end_page(); + my $crumbs = + &Apache::lonhtmlcommon::breadcrumbs($crstype.' Information', + 'Create_Course',undef, + 'Create_Courses'); + $r->print($start_page.$crumbs); + if ($crstype eq 'Course') { + $r->print(< -

Course Information

+

$lt{'cinf'}

+

+ +

+ +

+ +

+

$lt{'iinf'}

-Course Title: - +$lt{'stat'} +

+ +
+($lt{'toin'})

-Course Home Server:$course_home + +
+($lt{'csli'})

-Course ID/Number (optional) - + +
+($lt{'cscs'})

-

Course Content

+

$lt{'crco'}

- +
Completely new courseClone an existing course
$lt{'cncr'}$lt{'cecr'}

-Map: - -Select Map + +$lt{'smap'}

-Do NOT generate as standard course
-(only check if you know what you are doing): - -

-

-First Resource
(standard courses only): -Blank + +
+($lt{'ocik'}): + +

+$lt{'fres'}
($lt{'stco'}): +   -Syllabus +   -Navigate +

-Course ID: + +
+
-Domain: -$cloneform
 
-Additional settings, if specified below, will override cloned settings. + 
+$lt{'asov'}.
-

Assessment Parameters

+

$lt{'assp'}

+

+ +

+

$lt{'mssg'}

+

+ +
+ +

+

$lt{'cmmn'}

+

+ +
+ +

+

$lt{'acco'}

+

+ +
+ +

+

$lt{'rshm'}

+

+ +

+

+

$lt{'aens'}

+$lt{'aesc'} +

+

+$lt{'aadd'} + + +

+$lt{'audr'} + + +

+$lt{'dacu'} +$enroll_table +

+$lt{'dacc'} +$access_table +

+$lt{'psam'}.
+$lt{'pcda'}. +

+$krbform +
+$intform +
+$locform +

+$lt{'nech'}
+$lt{'nccl'}
+ + +
+$lt{'ndcl'}
+ + +

+$lt{'irsp'} + + +

-Open all assessments: - +

$lt{'cgrs'}

+$lt{'cgrq'} +Mb

-

Messaging

+
+

$lt{'cc'}

-Set course policy feedback to Course Coordinator: - +

-Set content feedback to Course Coordinator: - +

-

Communication

-Disable student resource discussion: -
-Disable student use of chatrooms: - + + +

-

Access Control

+ +ENDDOCUMENT + } elsif ($crstype eq 'Group') { + $r->print(< +

$lt{'ginf'}

-Students need access key to enter course: - + +

+ +

+

-

Course Coordinator

+

$lt{'grco'}

+ + + +
$lt{'cngr'}$lt{'cegr'}

-Username: + +$lt{'smap'}

-Domain: $domform + +
+($lt{'ocik'}): +

-Immediately expire own role as Course Coordinator: - +$lt{'fres'}
($lt{'stgo'}): + +  + +  + +

+
+ +
+ +

+$lt{'asov'}. +
+

+

+

$lt{'mssg'}

+

+ +
+ +

+

$lt{'cmmn'}

+

+ +
+ +

+

$lt{'acco'}

+

+ +
+ +

+

$lt{'rshm'}

+

+ +

+

+

$lt{'grts'}

+$lt{'grtq'} +Mb +

+
+

$lt{'gc'}

+

+

- - + +

+

+ + +

- - ENDDOCUMENT + } + $r->print($end_page); } # ====================================================== Phase two: make course sub create_course { my $r=shift; - my $topurl='/res/'.&Apache::lonnet::declutter($ENV{'form.topmap'}); - my $ccuname=$ENV{'form.ccuname'}; - my $ccdomain=$ENV{'form.ccdomain'}; - $ccuname=~s/\W//g; - $ccdomain=~s/\W//g; - my $cdescr=$ENV{'form.title'}; - my $curl=$ENV{'form.topmap'}; - my $bodytag=&Apache::loncommon::bodytag('Create a New Course'); - $r->print(< - -The LearningOnline Network with CAPA - -$bodytag -ENDENHEAD + my $ccuname =&LONCAPA::clean_username($env{'form.ccuname'}); + my $ccdomain=&LONCAPA::clean_domain($env{'form.ccdomain'}); + my $crstype = 'Group'; + my ($enrollstart,$enrollend,$startaccess,$endaccess); + + if ($env{'form.phase'} eq 'coursetwo') { + $crstype='Course'; + $enrollstart=&Apache::lonhtmlcommon::get_date_from_form('startenroll'); + $enrollend=&Apache::lonhtmlcommon::get_date_from_form('endenroll'); + + } + $startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess'); + $endaccess = &Apache::lonhtmlcommon::get_date_from_form('endaccess'); + + my $autharg; + my $authtype; + + if ($env{'form.login'} eq 'krb') { + $authtype = 'krb'; + $authtype .=$env{'form.krbver'}; + $autharg = $env{'form.krbarg'}; + } elsif ($env{'form.login'} eq 'int') { + $authtype ='internal'; + if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { + $autharg = $env{'form.intarg'}; + } + } elsif ($env{'form.login'} eq 'loc') { + $authtype = 'localauth'; + if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { + $autharg = $env{'form.locarg'}; + } + } + my $logmsg; + my $start_page=&Apache::loncommon::start_page('Create a New '.$crstype); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses'); + + $r->print($start_page.$crumbs); + + my $args = { + crstype => $crstype, + ccuname => $ccuname, + ccdomain => $ccdomain, + cdescr => $env{'form.title'}, + curl => $env{'form.topmap'}, + course_domain => $env{'request.role.domain'}, + course_home => $env{'form.course_home'}, + nonstandard => $env{'form.nonstandard'}, + crscode => $env{'form.crscode'}, + crsquota => $env{'form.crsquota'}, + clonecourse => $env{'form.clonecourse'}, + clonedomain => $env{'form.clonedomain'}, + crsid => $env{'form.crsid'}, + curruser => $env{'user.name'}.':'.$env{'user.domain'}, + crssections => $env{'form.crssections'}, + crsxlist => $env{'form.crsxlist'}, + autoadds => $env{'form.autoadds'}, + autodrops => $env{'form.autodrops'}, + notify_owner => $env{'form.notify_owner'}, + notify_dc => $env{'form.notify_dc'}, + no_end_date => $env{'form.no_end_date'}, + showphotos => $env{'form.showphotos'}, + authtype => $authtype, + autharg => $autharg, + enrollstart => $enrollstart, + enrollend => $enrollend, + startaccess => $startaccess, + endaccess => $endaccess, + setpolicy => $env{'form.setpolicy'}, + setcontent => $env{'form.setcontent'}, + reshome => $env{'form.reshome'}, + setkeys => $env{'form.setkeys'}, + keyauth => $env{'form.keyauth'}, + disresdis => $env{'form.disresdis'}, + disablechat => $env{'form.disablechat'}, + openall => $env{'form.openall'}, + firstres => $env{'form.firstres'} + }; + # # Verify data # # Check the veracity of the course coordinator if (&Apache::lonnet::homeserver($ccuname,$ccdomain) eq 'no_host') { - $r->print('No such user '.$ccuname.' at '.$ccdomain.''); + $r->print('
'); + $r->print(&mt('No such user').' '.$ccuname.' '.&mt('at').' '.$ccdomain.'.
'); + $r->print(&mt("Please click Back on your browser and select another user, or ")); + $r->print(' + + + + +
'.&Apache::loncommon::end_page()); return; } # Check the proposed home server for the course my %host_servers = &Apache::loncommon::get_library_servers - ($ENV{'request.role.domain'}); - if (! exists($host_servers{$ENV{'form.course_home'}})) { - $r->print('Invalid home server for course: '. - $ENV{'form.course_home'}.''); + ($env{'request.role.domain'}); + if (! exists($host_servers{$env{'form.course_home'}})) { + $r->print(&mt('Invalid home server for course').': '. + $env{'form.course_home'}.&Apache::loncommon::end_page()); return; } + my ($courseid,$crsudom,$crsunum); + $r->print(&Apache::loncommon::construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum,$env{'user.domain'},$env{'user.name'})); + # -# Open course -# - my %cenv=(); - my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'}, - $cdescr,$curl, - $ENV{'form.course_home'}, - $ENV{'form.nonstandard'}); - - # Note: The testing routines depend on this being output; see - # Utils::Course. This needs to at least be output as a comment - # if anyone ever decides to not show this, and Utils::Course::new - # will need to be suitably modified. - $r->print('New LON-CAPA Course ID: '.$courseid.'
'); -# -# Check if created correctly -# - my ($crsudom,$crsunum)=($courseid=~/^\/(\w+)\/(\w+)$/); - my $crsuhome=&Apache::lonnet::homeserver($crsunum,$crsudom); - $r->print('Created on: '.$crsuhome.'
'); -# -# Are we cloning? -# - my $cloneid=''; - if (($ENV{'form.clonecourse'}) && ($ENV{'form.clonedomain'})) { - $cloneid='/'.$ENV{'form.clonedomain'}.'/'.$ENV{'form.clonecourse'}; - my ($clonecrsudom,$clonecrsunum)=($cloneid=~/^\/(\w+)\/(\w+)$/); - my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); - if ($clonehome eq 'no_host') { - $r->print( - '
Attempting to clone non-existing course '.$cloneid.''); - } else { - $r->print( - '
Cloning course from '.$clonehome.''); -# Copy all files - ©coursefiles($cloneid,$courseid); -# Restore title - $cenv{'description'}=$cdescr; - $cenv{'clonedfrom'}=$cloneid; - } - } -# -# Set environment (will override cloned, if existing) +# Make the requested user a course coordinator or group coordinator # - if ($ENV{'form.crsid'}) { - $cenv{'courseid'}=$ENV{'form.crsid'}; - } if (($ccdomain) && ($ccuname)) { - if ($ENV{'form.setpolicy'}) { - $cenv{'policy.email'}=$ccuname.':'.$ccdomain; - } - if ($ENV{'form.setcontent'}) { - $cenv{'question.email'}=$ccuname.':'.$ccdomain; - } - } - if ($ENV{'form.setkeys'}) { - $cenv{'keyaccess'}='yes'; - } - if ($ENV{'form.disresdis'}) { - $cenv{'pch.roles.denied'}='st'; - } - if ($ENV{'form.disablechat'}) { - $cenv{'plc.roles.denied'}='st'; + $r->print(&mt('Assigning role of [_1] Coordinator to [_2] at [_3]:', + $crstype,$ccuname,$ccdomain). + &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid, + 'cc').'

'); + } + if ($env{'form.setkeys'}) { + $r->print( + '

'.&mt('Manage Access Keys').'

'); + } +# Flush the course logs so reverse user roles immediately updated + &Apache::lonnet::flushcourselogs(); + $r->print('

'.&mt('Roles will be active at next login').'.

'. + '

'. + &mt('Create Another [_1]',$crstype).'

'. + &Apache::loncommon::end_page()); +} + +sub print_intro_page { + my $r = shift; + my $start_page = + &Apache::loncommon::start_page('Create a New Course or Group Space'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Options','Create_Course',undef,'Create_Courses'); + my $end_page = + &Apache::loncommon::end_page(); + my $helplink=&Apache::loncommon::help_open_topic('Create_Course_GroupSpace',&mt('Help on Creating Courses and Groups')); + + my @choices = ({ internal_name => 'courseone', + name => &mt('Create a single course'), + short_description => + &mt('Create a new course by completing an online form.'), + }, + { internal_name => 'groupone', + name => &mt('Create a single collaborative group space '), + short_description => + &mt('Create a new group space for non-course use by completing an online form .'), + }, + { internal_name => 'batchone', + name => &mt('Create courses/groups by uploading an attributes file'), + short_description => + &mt('Upload an attributes file containing specifications for one or more courses or groups in XML format'), + help => 'Batch_Creation', + }, + ); + my $options; + foreach my $choice (@choices) { + $options .='

'. + $choice->{'name'}.''; + if (exists($choice->{'help'})) { + $options .= &Apache::loncommon::help_open_topic($choice->{'help'}); + } + $options .= "

\n".' '.(' 'x8).$choice->{'short_description'}. + "\n"; } - # Record we've not yet viewed the Course Initialization Helper for this - # course - $cenv{'course.helper.not.run'} = 1; - # - # Use new Randomseed - # - $cenv{'rndseed'}=&Apache::lonnet::latest_rnd_algorithm_id();; - # - # By default, use standard grading - $cenv{'grading'} = 'standard'; + $r->print(<print('
Setting environment: '. - &Apache::lonnet::put('environment',\%cenv,$crsudom,$crsunum).'
'); -# -# Open all assignments -# - if ($ENV{'form.openall'}) { - my $storeunder=$crsudom.'_'.$crsunum.'.0.opendate'; - my %storecontent = ($storeunder => time, - $storeunder.'.type' => 'date_start'); - - $r->print('Opening all assignments: '.&Apache::lonnet::cput - ('resourcedata',\%storecontent,$crsudom,$crsunum).'
'); - } -# -# Set first page -# - unless (($ENV{'form.nonstandard'}) || ($ENV{'form.firstres'} eq 'blank')) { - $r->print('Setting first resource: '); - my ($errtext,$fatal)= - &Apache::londocs::mapread($crsunum,$crsudom,'default.sequence'); - $r->print(($fatal?$errtext:'read ok').' - '); - my $title; my $url; - if ($ENV{'form.firstres'} eq 'syl') { - $title='Syllabus'; - $url='/public/'.$crsudom.'/'.$crsunum.'/syllabus'; - } else { - $title='Navigate Contents'; - $url='/adm/navmaps'; +sub upload_batchfile { + my $r = shift; + my $start_page = + &Apache::loncommon::start_page('Create a New Course or Group Space'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Upload Course/Group Attributes File','Create_Course',undef,'Create_Courses'); + my $end_page = + &Apache::loncommon::end_page(); + $r->print($start_page.$crumbs); + $r->print('

'.&mt('Upload a courses or groups attributes file').'

'); + $r->print('
'. + ''. + '

'. + '
'); + $r->print($end_page); + return; +} + +sub process_batchfile { + my $r = shift; + my $start_page = + &Apache::loncommon::start_page('Create a New Course or Group Space'); + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses'); + my $end_page = + &Apache::loncommon::end_page(); + my $defdom=$env{'request.role.domain'}; + my $batchfilepath=&Apache::lonnet::userfileupload('coursecreatorxml',undef, + 'batchupload',undef,undef, + undef,undef,$defdom); + my ($batchdir,$filename) = ($batchfilepath =~ m-^(.+)/pending/([^/]+)$-); + my ($result,$logmsg); + if (-e "$batchfilepath") { + open(FILE,"<$batchfilepath"); + my @buffer = ; + close(FILE); + if ((defined($filename)) && (defined($batchdir))) { + my @requests = ($filename); + my %courseids = (); + ($result,$logmsg) = &LONCAPA::batchcreatecourse::create_courses( + \@requests,\%courseids,'web',$defdom, + $env{'user.name'},$env{'user.domain'}); + if ($result) { + if (!-e "$batchdir/processed") { + mkdir("$batchdir/processed", 0755); + open(FILE,">$batchdir/processed/$filename"); + print FILE @buffer; + close(FILE); + if (-e "$batchdir/processed/$filename") { + unlink("$batchdir/pending/$filename"); + } + } + } } - $Apache::lonratedt::resources[1]=$title.':'.$url.':false:start:res'; - ($errtext,$fatal)= - &Apache::londocs::storemap($crsunum,$crsudom,'default.sequence'); - $r->print(($fatal?$errtext:'write ok').'
'); - } -# -# Make current user course adminstrator -# - my $end=undef; - my $addition=''; - if ($ENV{'form.expireown'}) { $end=time+5; $addition='expired'; } - $r->print('Assigning '.$addition.' role of course coordinator to self: '. - &Apache::lonnet::assignrole( - $ENV{'user.domain'},$ENV{'user.name'},$courseid,'cc',$end).'
'); -# -# Make additional user course administrator -# - if (($ccdomain) && ($ccuname)) { - $r->print('Assigning role of course coordinator to '. - $ccuname.' at '.$ccdomain.': '. - &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,'cc').'

'); - } - if ($ENV{'form.setkeys'}) { - $r->print( - '

Manage Access Keys

'); } - $r->print('

Roles will be active at next login.

'); + $r->print($start_page.$crumbs.$result.$end_page); + } # ===================================================================== Handler @@ -526,27 +803,66 @@ sub handler { my $r = shift; if ($r->header_only) { - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK; } - if (&Apache::lonnet::allowed('ccc',$ENV{'request.role.domain'})) { - $r->content_type('text/html'); + if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) { + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - if ($ENV{'form.phase'} eq 'two') { + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['phase']); + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse", + text=>"Creation Options", + faq=>79,bug=>'Dom Coord Interface',}); + if (($env{'form.phase'} eq 'coursetwo') || + ($env{'form.phase'} eq 'grouptwo')) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", + text=>&mt('[_1] Creation Settings',), + faq=>9,bug=>'Dom Coord Interface',}); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.phase'}", + text=>"Creation Outcome", + faq=>9,bug=>'Dom Coord Interface',}); &create_course($r); - } else { + } elsif (($env{'form.phase'} eq 'courseone') || + ($env{'form.phase'} eq 'groupone')) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.phase'}", + text=>&mt('[_1] Creation Settings',), + faq=>9,bug=>'Dom Coord Interface',}); &print_course_creation_page($r); + } elsif ($env{'form.phase'} eq 'batchone') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.phase'}", + text=>"Upload Description File", + faq=>9,bug=>'Dom Coord Interface',}); + &upload_batchfile($r); + } elsif ($env{'form.phase'} eq 'batchtwo') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.prevphase'}", + text=>"Upload Description File", + faq=>9,bug=>'Dom Coord Interface',}); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/createcourse?phase=$env{'form.phase'}", + text=>"Creation Outcome", + faq=>9,bug=>'Dom Coord Interface',}); + &process_batchfile($r); + } else { + &print_intro_page($r); } } else { - $ENV{'user.error.msg'}= - "/adm/createcourse:ccc:0:0:Cannot create courses"; + $env{'user.error.msg'}= + "/adm/createcourse:ccc:0:0:Cannot create courses or groups"; return HTTP_NOT_ACCEPTABLE; } return OK; -} +} 1; __END__