Diff for /loncom/interface/loncreatecourse.pm between versions 1.12 and 1.34

version 1.12, 2002/08/31 00:43:12 version 1.34, 2003/09/03 21:31:59
Line 45  use strict; Line 45  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  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);
   }
   
   # ============================================================= Copy a userfile
   
   sub copyfile {
       my ($origcrsid,$newcrsid,$which)=@_;
       return &writefile($newcrsid,$which,&readfile($origcrsid,$which));
   }
   
   # =============================================================== 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 all userfiles
   
   sub copyuserfiles {
       my ($origcrsid,$newcrsid)=@_;
       foreach (&crsdirlist($origcrsid,'userfiles')) {
    &copyfile($origcrsid,$newcrsid,$_);
       }
   }
   # ========================================================== Copy all userfiles
   
   sub copydbfiles {
       my ($origcrsid,$newcrsid)=@_;
       foreach (&crsdirlist($origcrsid)) {
    if ($_=~/\.db$/) {
       unless 
                ($_=~/^(nohist\_|discussiontimes|classlist|versionupdate|resourcedata)/) {
    &copydb($origcrsid,$newcrsid,$_);
        }
    }
       }
   }
   
   # ======================================================= Copy all course files
   
   sub copycoursefiles {
       my ($origcrsid,$newcrsid)=@_;
       &copyuserfiles($origcrsid,$newcrsid);
       &copydbfiles($origcrsid,$newcrsid);
   }
   
 # ===================================================== Phase one: fill-in form  # ===================================================== Phase one: fill-in form
   
 sub print_course_creation_page {  sub print_course_creation_page {
Line 53  sub print_course_creation_page { Line 156  sub print_course_creation_page {
     my %host_servers = &Apache::loncommon::get_library_servers($defdom);      my %host_servers = &Apache::loncommon::get_library_servers($defdom);
     my $course_home = '<select name="course_home" size="1">'."\n";      my $course_home = '<select name="course_home" size="1">'."\n";
     foreach my $server (sort(keys(%host_servers))) {      foreach my $server (sort(keys(%host_servers))) {
         $course_home .=           $course_home .= qq{<option value="$server"};
           qq{<option value="$server">$server $host_servers{$server}</option>};          if ($server eq $Apache::lonnet::perlvar{'lonHostID'}) {
               $course_home .= " selected ";
           }
           $course_home .= qq{>$server $host_servers{$server}</option>};
     }      }
     $course_home .= "\n</select>\n";      $course_home .= "\n</select>\n";
     my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain');      my $domform = &Apache::loncommon::select_dom_form($defdom,'ccdomain');
     my $bodytag=&Apache::loncommon::bodytag('Create a New Course');      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').
        &Apache::loncommon::selectcourse_link
        ('ccrs','clonecourse','clonedomain');
       my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript();
     $r->print(<<ENDDOCUMENT);      $r->print(<<ENDDOCUMENT);
 <html>  <html>
 <script language="JavaScript" type="text/javascript">  <script language="JavaScript" type="text/javascript">
Line 81  function openbrowser(formname,elementnam Line 192  function openbrowser(formname,elementnam
     editbrowser.focus();      editbrowser.focus();
 }  }
 </script>  </script>
   $coursebrowserjs
 <head>  <head>
 <title>The LearningOnline Network with CAPA</title>  <title>The LearningOnline Network with CAPA</title>
 </head>  </head>
 $bodytag  $bodytag
   $helplink
 <form action="/adm/createcourse" method="post" name="ccrs">  <form action="/adm/createcourse" method="post" name="ccrs">
 <h2>Course Information</h2>  <h2>Course Information</h2>
 <p>  <p>
 <b>Course Title:</b>  <b>Course Title:</b>
 <input type="text" size="50" name="title">  <input type="text" size="50" name="title">
 </p><p>  </p><p>
 <b>Map:</b>  
 <input type="text" size="50" name="topmap">  
 <a href="javascript:openbrowser('ccrs','topmap')">Browse</a>  
 </p><p>  
 <b>Do NOT generate as standard course</b>   
 (only check if you know what you are doing):  
 <input type="checkbox" name="nonstandard">  
 </p><p>  
 <b>Course Home Server:</b>$course_home  <b>Course Home Server:</b>$course_home
 </p><p>  </p><p>
 <b>Course ID/Number (optional)</b>  <b>Course ID/Number (optional)</b>
 <input type="text" size="30" name="crsid">  <input type="text" size="30" name="crsid">
   </p>
   <h2>Course Content</h2>
   <table border="2">
   <tr><th>Completely new course</th><th>Clone an existing course</th></tr>
   <tr><td>
   <p>
   <b>Map:</b>
   <input type="text" size="50" name="topmap">
   <a href="javascript:openbrowser('ccrs','topmap')">Select Map</a>
 </p><p>  </p><p>
   <b>Do NOT generate as standard course</b><br /> 
   (only check if you know what you are doing):
   <input type="checkbox" name="nonstandard">
   </p>
   <p>
   <b>First Resource</b><br />(standard courses only):
   <input type="radio" name="firstres" value="blank">Blank
   &nbsp;
   <input type="radio" name="firstres" value="syl" checked>Syllabus
   &nbsp;
   <input type="radio" name="firstres" value="nav">Navigate
   </p>
   </td><td>
   Course ID: <input input type="text" size="25" name="clonecourse" value="" />
   <br />
   Domain: 
   $cloneform<br />&nbsp;<br />
   Additional settings, if specified below, will override cloned settings.
   </td></tr>
   </table>
   <h2>Assessment Parameters</h2>
   <p>
 <b>Open all assessments: </b>  <b>Open all assessments: </b>
 <input type="checkbox" name="openall" checked>  <input type="checkbox" name="openall" checked>
 </p><p>  </p>
   <h2>Messaging</h2>
   <p>
 <b>Set course policy feedback to Course Coordinator: </b>  <b>Set course policy feedback to Course Coordinator: </b>
 <input type="checkbox" name="setpolicy" checked>  <input type="checkbox" name="setpolicy" checked>
 </p><p>  </p><p>
 <b>Set content feedback to Course Coordinator: </b>  <b>Set content feedback to Course Coordinator: </b>
 <input type="checkbox" name="setcontent" checked>  <input type="checkbox" name="setcontent" checked>
 </p>  </p>
   <h2>Communication</h2>
   <p>
   <b>Disable student resource discussion: </b>
   <input type="checkbox" name="disresdis" /> <br />
   <b>Disable student use of chatrooms: </b>
   <input type="checkbox" name="disablechat" />
   </p>
   <h2>Access Control</h2>
   <p>
   <b>Students need access key to enter course: </b>
   <input type="checkbox" name="setkeys" />
   </p>
 <h2>Course Coordinator</h2>  <h2>Course Coordinator</h2>
 <p>  <p>
 <b>Username:</b> <input type="text" size="15" name="ccuname" />  <b>Username:</b> <input type="text" size="15" name="ccuname" />
Line 170  ENDENHEAD Line 319  ENDENHEAD
 #  #
 # Open course  # Open course
 #  #
       my %cenv=();
     my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'},      my $courseid=&Apache::lonnet::createcourse($ENV{'request.role.domain'},
                                                $cdescr,$curl,                                                 $cdescr,$curl,
                                                $ENV{'form.course_home'},                                                 $ENV{'form.course_home'},
                                                $ENV{'form.nonstandard'});                                                 $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.'<br>');      $r->print('New LON-CAPA Course ID: '.$courseid.'<br>');
 #  #
 # Check if created correctly  # Check if created correctly
Line 183  ENDENHEAD Line 337  ENDENHEAD
     my $crsuhome=&Apache::lonnet::homeserver($crsunum,$crsudom);      my $crsuhome=&Apache::lonnet::homeserver($crsunum,$crsudom);
     $r->print('Created on: '.$crsuhome.'<br>');      $r->print('Created on: '.$crsuhome.'<br>');
 #  #
 # Set environment  # 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(
       '<br /><font color="red">Attempting to clone non-existing course '.$cloneid.'</font>');
    } else {
       $r->print(
       '<br /><font color="green">Cloning course from '.$clonehome.'</font>');
   # Copy all files
       &copycoursefiles($cloneid,$courseid);
   # Restore title
       $cenv{'description'}=$cdescr;
    }
       }
   #
   # Set environment (will override cloned, if existing)
 #  #
     my %cenv=();  
     my $envflag=0;  
     if ($ENV{'form.crsid'}) {      if ($ENV{'form.crsid'}) {
  $envflag=1;  
         $cenv{'courseid'}=$ENV{'form.crsid'};          $cenv{'courseid'}=$ENV{'form.crsid'};
     }      }
     if (($ccdomain) && ($ccuname)) {      if (($ccdomain) && ($ccuname)) {
        if ($ENV{'form.setpolicy'}) {         if ($ENV{'form.setpolicy'}) {
    $envflag=1;  
            $cenv{'policy.email'}=$ccuname.':'.$ccdomain;             $cenv{'policy.email'}=$ccuname.':'.$ccdomain;
        }         }
        if ($ENV{'form.setcontent'}) {         if ($ENV{'form.setcontent'}) {
            $envflag=1;  
            $cenv{'question.email'}=$ccuname.':'.$ccdomain;             $cenv{'question.email'}=$ccuname.':'.$ccdomain;
        }         }
     }      }
     if ($envflag) {      if ($ENV{'form.setkeys'}) {
        $r->print('Setting environment: '.                          $cenv{'keyaccess'}='yes';
       }
       if ($ENV{'form.disresdis'}) {
           $cenv{'pch.roles.denied'}='st';
       }
       if ($ENV{'form.disablechat'}) {
           $cenv{'plc.roles.denied'}='st';
       }
   
       # 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('<br />Setting environment: '.                 
           &Apache::lonnet::put('environment',\%cenv,$crsudom,$crsunum).'<br>');            &Apache::lonnet::put('environment',\%cenv,$crsudom,$crsunum).'<br>');
    }  
 #  #
 # Open all assignments  # Open all assignments
 #  #
     if ($ENV{'form.openall'}) {      if ($ENV{'form.openall'}) {
        my $storeunder=$crsudom.'_'.$crsunum.'.0.opendate';         my $storeunder=$crsudom.'_'.$crsunum.'.0.opendate';
        my %storecontent = ($storeunder        => time,         my %storecontent = ($storeunder         => time,
                            $storeunder.'type' => 'date_start');                             $storeunder.'.type' => 'date_start');
                 
        $r->print('Opening all assignments: '.&Apache::lonnet::cput         $r->print('Opening all assignments: '.&Apache::lonnet::cput
                  ('resourcedata',\%storecontent,$crsudom,$crsunum).'<br>');                   ('resourcedata',\%storecontent,$crsudom,$crsunum).'<br>');
    }     }
   #
   # 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';
           }
           $Apache::lonratedt::resources[1]=$title.':'.$url.':false:start:res';
           ($errtext,$fatal)=
              &Apache::londocs::storemap($crsunum,$crsudom,'default.sequence');
           $r->print(($fatal?$errtext:'write ok').'<br>');
     }
 #  #
 # Make current user course adminstrator  # Make current user course adminstrator
 #  #
Line 234  ENDENHEAD Line 442  ENDENHEAD
                $ccuname.' at '.$ccdomain.': '.                 $ccuname.' at '.$ccdomain.': '.
     &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,'cc').'<p>');      &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,'cc').'<p>');
    }     }
     $r->print('Roles will be active at next login.</body></html>');      if ($ENV{'form.setkeys'}) {
    $r->print(
    '<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">Manage Access Keys</a></p>');
       }
       $r->print('<p>Roles will be active at next login.</p></body></html>');
 }  }
   
 # ===================================================================== Handler  # ===================================================================== Handler

Removed from v.1.12  
changed lines
  Added in v.1.34


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>