[system] / trunk / webwork / system / scripts / course_webwork_setup.pl Repository:
ViewVC logotype

View of /trunk/webwork/system/scripts/course_webwork_setup.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 575 - (download) (as text) (annotate)
Tue Oct 8 20:35:31 2002 UTC (10 years, 8 months ago) by apizer
File size: 39440 byte(s)
minor changes

    1 #!/usr/local/bin/webwork-perl
    2 use strict;
    3 
    4 
    5 ################################################################################
    6 ##
    7 ## File: course_webwork_setup.pl   (for WeBWorK course installation)
    8 ##
    9 ##   this file changes the permissions to the correct ones in each of the
   10 ##    subdirectories and the main course directory.  It also creates the
   11 ##    webworkCourse.ph file.
   12 ##   It prompts the user to enter the correct cgiURL and htmlURL
   13 ##    The default values for these variables and for the variables pointing
   14 ##    to the main directory can be set in the file defaults.cws.
   15 ##
   16 ###############################################################################
   17 
   18 sub getAns {
   19   my $ans = <STDIN>;
   20   $ans =~ s/^\s*//;
   21   $ans = substr($ans, 0, 1);
   22   return lc($ans);
   23 }
   24 
   25 ################# Prompt to run this script #########################
   26 print qq{
   27 This script is used to setup a WeBWorK course.
   28 
   29 A "demo" or "working" version of the course can be setup.
   30 
   31 This script will create initialization files, directories,
   32 and set groups and default permissions. It will make backups
   33 of files that are changed.  For a "working" version it will
   34 not make any changes without prompting. \n
   35 
   36 This script must be run from the base course directory, for
   37 example from /www/webwork-root/webwork/courses/mth140a
   38 
   39 You will need the following information:\n
   40 1) The course URL (e.g. http://webwork.math.rochester.edu/mth140a/)
   41 2) The cgi WeBWorK URL.  It is listed in the Global.pm file as \$cgiWebworkURL.
   42    Global.pm is a file in the .../webwork/system/lib directory.
   43 3) The symbolic link (e.g. mth140a) pointing to the course (we call this the CLASS_ID).
   44    It appears in the courses subdirectory of the main WeBWorK system directory.
   45 4) The group (e.g. MTH140A) containing the webserver, your loginID, and the loginID's
   46    of anyone else who will creating and editing WeBWorK problems for your course.
   47    YOU DO NOT NEED THIS WHEN SETTING UP A "DEMO" VERSION.
   48 
   49 Hit [Enter] to continue...
   50 };
   51 my $garbage;
   52 $garbage = <STDIN>;
   53 
   54 print qq{
   55 Items 3) and 4) should be set up by your system administrator before running this script.
   56 
   57 In our example the classID and the group name are different, but they can be the same.
   58 
   59 See the html document .../docs/techdescription/usingwebwork.html for detailed
   60 explainations.  The examples here are taken from those directions.  docs is a
   61 subdirectory of the main WeBWorK system directory.
   62 
   63 Do you wish to continue\? (y or n)
   64 };
   65 
   66 exit(0) if &getAns ne 'y';
   67 
   68 
   69 ################## Find out if setting up a demo or working course ##########################
   70 my $course_setup_mode = 'working';
   71 my $file_creation_mode = 'working';
   72 
   73 print qq{
   74 
   75 
   76 You can set up a "working" or a "demo" version of a course.  A "demo" version
   77 should only be used as a sample course, never for an actual course.  In a "demo"
   78 version all the system type files specific to the course (e.g. webworkCourse.ph)
   79 are world readable and many files are world writable.
   80 Other than that, "working" or  "demo" versions function the same.
   81 
   82 Do you wish to setup a "working" or a "demo" version? (w or d)
   83 };
   84 
   85 if (&getAns eq 'd') {
   86   $course_setup_mode = 'demo';
   87   $file_creation_mode = 'demo';
   88 }
   89 
   90 print qq{
   91 
   92 Setting up a $course_setup_mode version.
   93 
   94 };
   95 
   96 ################## read + process defaults file  ######################
   97 
   98 my ($htmlurldefault,$cgiurldefault,$courselinkdefault);
   99 open(DEFAULTS, "defaults.cws");
  100 while(<DEFAULTS>)
  101   {
  102   chomp($_);
  103   $_ =~ s/^ //g;
  104   if($_ =~ /^#/  ||  $_ eq "")  ## comment line or blank line
  105   {}
  106   else
  107   {
  108   $_ =~ /^\s*(\w+)\s*=\s*([-,\s\/\w\.:]*)/;  ## does this include everything that can be in a filename or a URL???
  109   if ($1 eq "htmlURL")
  110     {$htmlurldefault = $2;}
  111   if ($1 eq "cgiURL")
  112     {$cgiurldefault = $2;}
  113   if ($1 eq "courseLink")
  114     {$courselinkdefault = $2;}
  115   }
  116   }
  117 
  118 close(DEFAULTS);
  119 # done with defaults
  120 
  121 
  122 
  123 ################### Create directories if they don't exist. ###################
  124 my $ans;
  125 if ($course_setup_mode eq 'demo') {$ans = 'y';}
  126 else {
  127 print "\nDefault directory and file permissions are set assuming\n";
  128 print "the webserver is in the group.\n\n";
  129 print "Do you want to create missing directories (if any)\? (y or n)\n";
  130 $ans = &getAns;
  131 }
  132 if ($ans eq 'y')
  133   {
  134   print "\n";
  135   unless(-e 'scoring')
  136     {
  137     mkdir('scoring', 0770);
  138     chmod(0770, 'scoring') || die "Can't do chmod on scoring directory";
  139     print 'directory scoring'.", 0770 created.\n";
  140     }
  141   unless(-e 'scoring/scoring.log')
  142     {
  143     open(TEMPCREATEFILE, ">scoring/scoring.log") || die "Can't open scoring/scoring.log";
  144     close(TEMPCREATEFILE);
  145     chmod(0660,"scoring/scoring.log") || die "Can't do chmod(0660, scoring/scoring.log)";
  146     print 'file scoring/scoring.log'.", 0660 created.\n";
  147     }
  148   unless(-e 'DATA')
  149     {
  150     mkdir('DATA', 0770);
  151     chmod(0770, 'DATA') || die "Can't do chmod on DATA directory";
  152     print 'directory DATA'.", 0770 created.\n";
  153     }
  154   unless(-e 'DATA/.auth')
  155     {
  156     mkdir('DATA/.auth', 0770);
  157     chmod(0770, 'DATA/.auth') || die "Can't do chmod on DATA/.auth directory";
  158     print 'directory DATA/.auth'.", 0770 created.\n";
  159     }
  160   unless(-e 'html')
  161     {
  162     mkdir('html', 0770);
  163     chmod(0770, 'html') || die "Can't do chmod on html directory";
  164     print 'directory html'.", 0770 created.\n";
  165   }
  166   unless(-e 'html/images')
  167     {
  168     mkdir('html/images', 0770);
  169     chmod(0770, 'html/images') || die "Can't do chmod on html/images/ directory";
  170     print 'directory html/images'.", 0770 created.\n";
  171     }
  172   unless(-e 'html/tmp')
  173     {
  174     mkdir('html/tmp', 0770);
  175     chmod(0770, 'html/tmp') || die "Can't do chmod on html/tmp/ directory";
  176     print 'directory html/tmp'.", 0770 created.\n";
  177     }
  178   unless(-e 'html/tmp/l2h')
  179     {
  180     mkdir('html/tmp/l2h', 0770);
  181     chmod(0770, 'html/tmp/l2h') || die "Can't do chmod on html/tmp/l2h directory";
  182     print 'directory html/tmp/l2h'.", 0770 created.\n";
  183     }
  184   unless(-e 'html/tmp/eps')
  185     {
  186     mkdir('html/tmp/eps', 0770);
  187     chmod(0770, 'html/tmp/eps') || die "Can't do chmod on html/tmp/eps directory";
  188     print 'directory html/tmp/eps'.", 0770 created.\n";
  189     }
  190   unless(-e 'html/tmp/images')
  191     {
  192     mkdir('html/tmp/images', 0770);
  193     chmod(0770, 'html/tmp/images') || die "Can't do chmod on html/tmp/images directory";
  194     print 'directory html/tmp/images'.", 0770 created.\n";
  195   }
  196   unless(-e 'html/tmp/gif')
  197     {
  198     mkdir('html/tmp/gif', 0770);
  199     chmod(0770, 'html/tmp/gif') || die "Can't do chmod on html/tmp/gif directory";
  200     print 'directory html/tmp/gif'.", 0770 created.\n";
  201   }
  202   unless(-e 'html/tmp/html')
  203     {
  204     mkdir('html/tmp/html', 0770);
  205     chmod(0770, 'html/tmp/html') || die "Can't do chmod on html/tmp/html directory";
  206     print 'directory html/tmp/html'.", 0770 created.\n";
  207     }
  208   unless(-e 'templates')
  209     {
  210     mkdir('templates', 0770);
  211     chmod(0770, 'templates') || die "Can't do chmod on templates directory";
  212     print 'directory templates'.", 0770 created.\n";
  213   }
  214   unless(-e 'templates/email')
  215     {
  216     mkdir('templates/email', 0770);
  217     chmod(0770, 'templates/email') || die "Can't do chmod on templates/email directory";
  218     print 'directory templates/email'.", 0770 created.\n";
  219     }
  220   unless(-e 'templates/macros')
  221     {
  222     mkdir('templates/macros', 0750);
  223     chmod(0750, 'templates/macros') || die "Can't do chmod on templates/macros directory";
  224     print 'directory templates/macros'.", 0750 created.\n";
  225     }
  226   unless(-e 'logs')
  227     {
  228     mkdir('logs', 0770);
  229     chmod(0770, 'logs') || die "Can't do chmod on logs directory";
  230     print 'logs'.", 0770 created.\n";
  231     }
  232    unless(-e 'logs/login.log')
  233      {
  234      open(TEMPCREATEFILE, ">logs/login.log") || die "Can't open logs/login.log";
  235      close(TEMPCREATEFILE);
  236      chmod(0660,"logs/login.log") || die "Can't do chmod(0660, logs/login.log)";
  237      print 'file logs/login.log'.", 0660 created.\n";
  238      }
  239   }
  240 
  241 
  242 
  243 ##################### get base directory   ###############################
  244 
  245 use Cwd;   ## module for getting current wording directory
  246 
  247 my $current_dir = cwd();
  248 $current_dir .= '/' unless $current_dir =~ m|/$|;
  249 $current_dir =~ m|([^/]+/)$|;
  250 my $courseDirectory = $1;
  251 
  252 ####################### Prompt for htmlURL ###############################
  253 print "\n\n";
  254 
  255 print <<MSG1,"--------->";
  256 
  257 ------------> ENTER course URL <-------------
  258 
  259 This html-URL should be a link in the webserver's htdocs tree which points
  260 to the html subdirectory of the course you are creating. See documentation
  261 for help.
  262 
  263 (e.g. $htmlurldefault)
  264 
  265 default = $htmlurldefault
  266 MSG1
  267 
  268 my $HTML_URL=<STDIN>;
  269 chomp($HTML_URL);
  270 if ($HTML_URL eq '')
  271   {
  272   $HTML_URL = $htmlurldefault;
  273 }
  274 
  275 $HTML_URL = check_URL('html-URL',$HTML_URL);
  276 
  277 $HTML_URL .= "/" unless $HTML_URL =~ m"/$" ;
  278 print qq(\nhtmlURL set to: "$HTML_URL"\n);
  279 
  280 #################### Prompt for cgiURL ###################################
  281 print "\n\n\n\n";
  282 
  283 print <<MSG2,"--------->";
  284 
  285 ------------> ENTER cgi WeBWorK URL <-------------
  286 
  287 This cgi-URL should be point to the url of the main WeBWorK
  288 cgi subdirectory.  It is listed in the Global.pm file of the
  289 main WeBWorK system as \$cgiWebworkURL . If you use a relative
  290 path name (e.g. "/cgi-bin/system/"), don't forget the first "/".
  291 
  292 (e.g. $cgiurldefault)
  293 
  294 default = $cgiurldefault
  295 MSG2
  296 
  297 my $CGI_URL=<STDIN>;
  298 chomp($CGI_URL);
  299 if ($CGI_URL eq '')
  300   {
  301   $CGI_URL = $cgiurldefault;
  302 }
  303 
  304 $CGI_URL = check_URL('cgi-URL',$CGI_URL);
  305 
  306 $CGI_URL .= "/" unless $CGI_URL =~ m"/$" ;
  307 print qq(\ncgiURL set to: "$CGI_URL"\n);
  308 
  309 ################## Prompt for courseLink  ###############################
  310 print "\n\n\n\n";
  311 
  312 print <<MSG3,"--------->";
  313 
  314 ------------> ENTER course link (i.e. classID) name <-------------
  315 
  316 This symbolic link (i.e. the classID) points to the course directory. It
  317 appears in the courses subdirectory of the main WeBWorK system. (If
  318 instead of a link, you have put the actual course directory under
  319 .../system/courses/, enter the course directory name.)
  320 
  321 (e.g. mth140a)
  322 
  323 default = $courselinkdefault
  324 MSG3
  325 my $CLASS_ID=<STDIN>;
  326 chomp($CLASS_ID);
  327 if ($CLASS_ID eq "")
  328   {
  329   $CLASS_ID = $courselinkdefault;
  330   }
  331 print qq(\ncourse link (i.e. the classID) set to: "$CLASS_ID"\n);
  332 
  333 
  334 ################## Prompt for group  ###############################
  335 
  336 my ($name, $passwd, $gid, $members, @info,$groupName);
  337 
  338 if ($course_setup_mode eq 'demo')  {
  339   @info = getpwuid($<);
  340   $gid =$info[3];
  341   $groupName = (getgrgid($gid))[0];
  342 }
  343 
  344 else {
  345   print "\n\n\n\n";
  346 
  347 print <<MSG4,"--------->";
  348 
  349 ------------> ENTER group name <-------------
  350 
  351 
  352 This group should have been set up by your systen administrator
  353 and must contain at least your userID and (for a "working" version)
  354 the userID of the webserver.  All files and directories created will
  355 have this as their group.
  356 
  357 Enter the group name:
  358 MSG4
  359   $groupName = <STDIN>;
  360   chomp($groupName);
  361 
  362   unless ((defined($groupName)) and ($groupName =~ /\w+/)){
  363     my @info = getpwuid($<);
  364     $gid =$info[3];
  365     $groupName = (getgrgid($gid))[0];
  366   }
  367 
  368 print qq(\ngroup will be set to: "$groupName"\n);
  369 ($name, $passwd, $gid, $members) = getgrnam ($groupName);
  370 
  371 # check that the group name is valid
  372 # should probably check that the webserver is also a member of this group XXXXXXX
  373 
  374     $members = " ".$members." ";  ## put a spaces arround string
  375     my $username = getpwuid($<);
  376     if($members =~ /\s+$username\s+/)
  377       {
  378       print "\n\nGood.  $username is a member of the group $groupName.\n\n";
  379       }
  380     else
  381       {
  382       print "\n\nSorry.  $username is NOT a member of the group $groupName.\n";
  383       print "The group for all directories and files will not be changed.\n";
  384       print "Ask your system administrator to set up the group. Then you can\n";
  385       print "change the group by hand (see instructions) or run this script again.\n\n";
  386       die;
  387       }
  388 }
  389 
  390 ##################    BEGIN  new webworkCourse.ph #########################
  391 
  392 open(COURSETMP, ">webworkCourse.ph.tmp");
  393 print COURSETMP <<"ENDCOURSETMP";
  394 
  395 # file webworkCourse.ph
  396 # contains variables specific to a course
  397 
  398 #  The variables defined in Global.pm set defaults and
  399 #  parameters for the whole WeBWorK system.  These defaults can
  400 #  be over ridden for this individual course by redefining
  401 #  the variables in this webworkCourse.ph file.
  402 #  For example the default feedback address set in Global.pm as:
  403 #  \$feedbackAddress = 'webwork\@math.rochester.edu';
  404 #  can (and should) be over ridden by entering
  405 #  \$Global::feedbackAddress  = 'apizer\@math.rochester.edu,gage\@math.rochester.edu';
  406 #  below where of course you should substitute your own email address
  407 #  for that of Pizer and Gage (and uncomment the line).
  408 
  409 #  \$Global::feedbackAddress  = 'apizer\@math.rochester.edu,gage\@math.rochester.edu';
  410 
  411 #  In addition, the smtp mail server (defined in Global.pm) requires a valid single
  412 #  email address.  Normally this is set to the address of the course administrator.
  413 #  Undeliverable email from the Send Mail page will be returned to the smtpSender address.
  414 #  Uncomment the line below and enter a valid email address (if you leave it commented
  415 #  out the webmaster's email address from Global.pm will be used).
  416 
  417 #  \$Global::smtpSender  = 'apizer\@math.rochester.edu';
  418 
  419 
  420 #  You should customize the following three items for your course.
  421 
  422 #  If you want to write essay type problems or questionnaires where the results are
  423 #  emailed back, you have to authorize the email addresses here by uncommenting and
  424 #  editing the next line.
  425 
  426 #  \$PG_environment{'ALLOW_MAIL_TO'} = ['apizer\@math.rochester.edu','gage\@math.rochester.edu'];
  427 
  428 
  429 #  On the Professor page, one can view statistical data on problem sets for
  430 #  the whole course and section by section or by recitation.  You may want to
  431 #  exclude certain sections or recitations (e.g. those containing practice users,
  432 #  TA's, or professors) from the overall statistics.  Statistics for excluded
  433 #  sections are reported separately.  List the names of all sections and
  434 #  recitations to be excluded in a coma separated list, e.g.
  435 #  \@excluse_these_sections_from_overall_statistics = ('', 'T.A.', 'Prof section');
  436 #  \@excluse_these_recitations_from_overall_statistics = ('');
  437 #  If this list is empty or commented out, no sections will be excluded.
  438 
  439 \@excluse_these_sections_from_overall_statistics = ('');
  440 \@excluse_these_recitations_from_overall_statistics = ('');
  441 
  442 
  443 #  If the following line is uncommented, when the user(s) listed view
  444 #  a problem or download a set, the file names of the source files will be
  445 #  listed.  Replace 'leeza', etc. by appropiate login names.  It is very
  446 #  useful for professors to be able to see these file names.
  447 
  448 #\$PG_environment{'PRINT_FILE_NAMES_FOR'} = ['leeza','apizer','gage'];
  449 
  450 
  451 #  Finally, when sending bulk email to students from the sendmail page, the following
  452 #  default values are used for the From and Reply-To fields.  Normally these fields
  453 #  are filled in and these default values are not used. More importanly, the
  454 #  defaultReply value is also used in the Reply-To field on feedback email which students
  455 #  can send to the feedbackAddress by hitting the feedback button. The format is the same
  456 #  as for the feedbackAddress above.
  457 
  458 \$Global::defaultFrom = \$Global::feedbackAddress;
  459 \$Global::defaultReply = \$Global::feedbackAddress;
  460 
  461 ######################################################################################
  462 ######################################################################################
  463 
  464 #  NORMALLY, THERE SHOULD BE NO NEED FOR CHANGES BELOW THIS LINE.  RUN THE SCRIPT
  465 #  course_webwork_setup.pl AND EVERYTHING SHOULD BE SETUP CORRECTLY. IF YOU DO
  466 #  EDIT THIS FILE BY HAND, WORK CAREFULLY.  REMEMBER THAT ALL DIRECTORY NAMES MUST
  467 #  END IN A TRALING DIRECTORY DELIMITER.
  468 
  469 
  470 
  471 #  To make it easier to edit and change these directories we define
  472 #  the classDirectory.  This variable is not used outside this file
  473 #  and while it is common for all of these directories to reside inside
  474 #  one directory, it is not necessary.
  475 
  476 \$classDirectory = "\${mainDirectory}courses/$courseDirectory";
  477 
  478 #  The database directory contains data describing the students in the course
  479 #  and their scores on homework.  The cgi scripts run by the webserver must
  480 #  be able to access the contents of this directory.
  481 
  482 \$databaseDirectory = "\${classDirectory}DATA/";
  483 
  484 #  The templates directory contains the class list, the problem set definition
  485 #  files and the problem templates.
  486 
  487 \$templateDirectory = "\${classDirectory}templates/";
  488 
  489 #  The email directory contains (templates of) emails which can be sent to everyone
  490 #  on the classlist.
  491 
  492 \$emailDirectory = "\${templateDirectory}email/";
  493 
  494 #  The macros directory contains macros for the problems files and the
  495 #  problem templates. These are usually macro files which are particular to the course.
  496 #  Macro files are searched for first in the \$macroDirectory and then
  497 #  in the system's courseScript directory.  If it is commented out, the macro files are
  498 #  only searched for in the system's courseScript directory.
  499 
  500 \$macroDirectory = "\${templateDirectory}macros/";
  501 
  502 #  The scoring directory contains files used by the scoring programs. These
  503 #  files contain scoring information for the whole class and are used for
  504 #  calculating semester grades, etc.
  505 
  506 \$scoringDirectory = "\${classDirectory}scoring/";
  507 
  508 #  The html directory contains the first page for the course (index.html),
  509 #  course documentation, and also subdirectories (e.g. tmp/)
  510 #  (e.g. tmp/) containing latex2html problems, gifs, etc.  The webserver has
  511 #  direct access to the html directory and the courseURL points to this
  512 #  directory.
  513 
  514 \$htmlDirectory = "\${classDirectory}html/";
  515 
  516 #  The logs directory contains log fies, e.g. login.log, backup psvn
  517 #  logs and logs of datamunger activity.
  518 
  519 \$logsDirectory = "\${classDirectory}logs/";
  520 
  521 #  This is the temp directory used by downloadPS, etc. It is used for temporary storage of
  522 #  html files, images, etc. that have to accessible to the webserver.  This directory
  523 #  contains the subdirectories l2h, gif, eps, png, and html (not the \${classDirectory}html
  524 #  directory). All these subdirectories and their files will be recreated if deleted
  525 #  (althought recreating l2h files is time consuming).  The location of this directory
  526 #  may be changed to a fast disk which is not backed up.
  527 
  528 \$courseTempDirectory = "\${classDirectory}html/tmp/";
  529 
  530 #  This is the URL of the course html directory.  It points to the \$htmlDirectory
  531 #  above and it should have been set up correctly by the course_webwork_setup.pl
  532 #  script.  See the documentatiom (run the script or read
  533 #  .../docs/techdescription/settingupcourse.html).  Note that the URL depends on
  534 #  links in you webserver's htdocs directory and must end in a trailing directory
  535 #  delimiter (/ for unix).
  536 
  537 \$htmlURL = "$HTML_URL";
  538 
  539 #  This is the URL of the course tmp directory.  It points to the \$courseTempDirectory
  540 #  above and it should have been set up correctly by the course_webwork_setup.pl
  541 #  script.  See the documentatiom (run the script or read
  542 #  .../docs/techdescription/settingupcourse.html).  Note that the URL depends on
  543 #  links in you webserver's htdocs directory and must end in a trailing directory
  544 #  delimiter (/ for unix).
  545 
  546 \$courseTempURL = "\${htmlURL}tmp/";
  547 
  548 #  This is the classID, i.e the symbolic link (or directory) that points to the base
  549 #  course directory. It appears in the courses subdirectory of the main WeBWorK system.
  550 
  551 \$classID = "$CLASS_ID";
  552 
  553 #  This is the name of the default classlist file which resides in the
  554 #  templateDirectory.  This default name is used to  edit the classlist file over
  555 #  the web.
  556 
  557 \$classlistFilename  = "\${classID}.lst";
  558 
  559 # This is the name of the group and the numerical gid. (some) Files created by
  560 # the WeBWorK system will have their group set to "\$groupID". Normally this
  561 # group will contain the webserver, your loginID, and the loginID's of anyone
  562 # else who will creating and editing WeBWorK problems for your course. If you
  563 # are editing this file by hand and know the \$groupID but not the \$numericalGroupID,
  564 # ask your systems administrator or run course_webwork_setup.pl and look at the
  565 # webworkCourse.ph it produces.  You may also be able to get this information by
  566 # looking at the group file usually:  /etc/group
  567 # Finally, if you have set up a "demo" version, the "\$numericalGroupID" will be
  568 # set to -1 which means maintain the current (default) group.
  569 ENDCOURSETMP
  570 
  571 if ($file_creation_mode eq 'demo')
  572 {
  573 print COURSETMP <<"ENDCOURSETMP";
  574 
  575 \$groupID = "$groupName";
  576 \$numericalGroupID = -1;
  577 
  578 ## this sets the header file over riding the Global setting
  579 
  580 \$Global::SET_HEADER = "paperSetHeader.pg";
  581 
  582 ENDCOURSETMP
  583 }
  584 
  585 else
  586 {
  587 print COURSETMP <<"ENDCOURSETMP";
  588 
  589 \$groupID = "$groupName";
  590 \$numericalGroupID = $gid;
  591 
  592 ## this sets the header file over riding the Global setting
  593 \$Global::SET_HEADER = "paperSetHeader.pg";
  594 
  595 ## If uncommented, this sets the default mode for displayed problems
  596 ## over riding the Global setting.
  597 #\$htmlModeDefault = 'HTML_dpng'; # The default mode for displayed problems
  598                  # (either 'HTML', 'HTML_dpng', 'Latex2HTML', or 'HTML_tth')
  599 
  600 # This sets the default for grading multipart problems.  The choices at present are
  601 # std_problem_grader or avg_problem_grader. The std_problem_grader gives credit for
  602 # a mutipart problem only if all parts are answers correctly. The avg_problem_grader
  603 # gives partial credit for a mutipart problems.
  604 
  605 \$PG_environment{PROBLEM_GRADER_TO_USE} = 'avg_problem_grader';
  606 #\$PG_environment{PROBLEM_GRADER_TO_USE} = 'std_problem_grader';
  607 
  608 
  609 # This allows or dissallows Destroy and Rebuild. Set to 0 or 1. If set to 1 a
  610 # professor can destroy and rebuild problems sets in one operation. This is very
  611 # convenient and powerful, but also very dangerous.  Usually  this is not allowed
  612 # in courses students are using.  It is often set to 1 in a private course being
  613 # used only for developing problem sets.
  614 
  615 \$allowDestroyRebuildProbSets = 0;
  616 
  617 ENDCOURSETMP
  618 }
  619 
  620 
  621 if ($file_creation_mode eq 'demo')
  622 {
  623 print COURSETMP <<"ENDCOURSETMP";
  624 
  625 ## File and Directory permissions
  626 
  627 ## These permissions over ride the permissions set in
  628 ## Global.pm
  629 
  630 ## e.g. S1-1521.sco in (base course directory)/DATA
  631 \$sco_files_permission = 0666;
  632 
  633 ## tie permissions (used in tie commands)
  634 ## The database, password, and permissions files
  635 ## always take their permissions from the Global
  636 ## vaiables below.  The important keys file
  637 ## takes its permission from \$restricted_tie_permission.
  638 \$restricted_tie_permission = 0666;
  639 \$standard_tie_permission = 0666;
  640 
  641 ## webwork-database in (base course directory)/DATA
  642 \$webwork_database_permission = 0666;
  643 
  644 ## password in (base course directory)/DATA/.auth
  645 \$password_permission = 0666;
  646 
  647 ## permissions in (base course directory)/DATA/.auth
  648 \$permissions_permission = 0666;
  649 
  650 ## e.g. s1ful.csv in (base course directory)/scoring
  651 \$scoring_files_permission = 0666;
  652 
  653 ## e.g. s1bak1.csv in (base course directory)/scoring
  654 \$scoring_bak_files_permission = 0666;
  655 
  656 ## e.g. 8587l2h.log  in (base course directory)/html/tmp/l2h
  657 \$l2h_logs_permission = 0666;
  658 
  659 ## e.g set1/ in (base course directory)/html/tmp/l2h
  660 \$l2h_set_directory_permission = 0777;
  661 
  662 ## e.g. 1-1082/ in (base course directory)/html/tmp/l2h/set1
  663 \$l2h_prob_directory_permission  = 0777;
  664 
  665 ## e.g. 1082output.html in (base course directory)/html/tmp/l2h/set1/1-1082
  666 \$l2h_data_permission = 0777;
  667 
  668 ENDCOURSETMP
  669 }
  670 
  671 print COURSETMP <<"ENDCOURSETMP";
  672 
  673 
  674 ## This (if uncommented) overrides the setting in Global.pm. Use 'db_tie.pl' for
  675 ## the Berkeley DB database, 'db3_tie.pl' for version 3 of Berkeley DB and
  676 ## 'gdbm_tie.pl' for the GDBM database. For a "new" database type, you will
  677 ## have to write a 'newdb_tie.pl' file. These reside in the scripts directory.
  678 ## We recommend you do not change this unless you really know what you are doing.
  679 
  680 #\$Global::DBtie_file = 'gdbm_tie.pl';
  681 
  682 
  683 ## This tells WeBWorK where to find the file that connects it to a physical database.
  684 
  685 require "\${Global::scriptDirectory}\$Global::DBtie_file";
  686 
  687 ## These are the file names for the various databases associated with this course.
  688 ## These names override the generic names given in Global.pm
  689 
  690 \$CL_Database       = "\${classID}_classlist_DB";
  691 \$passwordFilename    = "\${classID}_password_DB";
  692 \$permissionsFilename   = "\${classID}_permissions_DB";
  693 \$database          = "\${classID}_webwork_DB";
  694 
  695 # The following line is required by perl
  696 1;
  697 
  698 ENDCOURSETMP
  699 close(COURSETMP);
  700 
  701 #############      END new webworkCourse.ph #########################
  702 
  703 ###################### BEGIN new index.html  #########################
  704 
  705 open(INDEXTMP, ">index.html.tmp");
  706 print INDEXTMP <<"ENDINDEXTMP";
  707 <HTML>
  708 <HEAD>
  709 <TITLE>Welcome to WeBWorK</TITLE>
  710 </HEAD>
  711 
  712 <BODY BGCOLOR="#FFFFFF">
  713 
  714 <P ALIGN=CENTER>
  715    <IMG SRC="/webwork_system_html/images/webwork.gif" ALIGN=CENTER BORDER=1 ALT="WeBWorK Logo">
  716 </P>
  717 
  718 <BLOCKQUOTE>
  719    <H1>WeBWorK Generic Course Login Page for $CLASS_ID</H1>
  720    <HR>
  721 
  722    <H2>Log in as &quot;practice&quot; user</H2>
  723 
  724    You may test out WeBWorK by logging in as a
  725    &quot;practice&quot; user.  To begin, choose the <B>login</B> button below;
  726    Use <B><KBD>practice1</KBD></B> as your login name and password.
  727 
  728    <FORM ACTION= "${CGI_URL}login.pl" METHOD="POST">
  729     <INPUT TYPE="HIDDEN" NAME="course" VALUE="$CLASS_ID">
  730     <B><INPUT TYPE=SUBMIT VALUE="Login"></B>
  731    </FORM>
  732 
  733 <P>
  734 <STRONG>For more information on WeBWorK: </STRONG>
  735 <A HREF="http://webwork.math.rochester.edu/docs/docs">Webwork docs</A>.
  736 
  737 <HR>
  738 
  739 
  740 <FORM ACTION="${CGI_URL}feedback.pl" METHOD="POST">
  741 <INPUT TYPE="image" SRC="/webwork_system_html/images/ww_feedback.gif" BORDER=1 ALT="[Feedback]"  VALUE="Feedback">
  742 
  743 Last updated: <STRONG>22 August 2000</STRONG><BR>
  744 <TT>${HTML_URL}index.html</TT>
  745 
  746 </BLOCKQUOTE>
  747 
  748 </BODY></HTML>
  749 
  750 ENDINDEXTMP
  751 close(INDEXTMP);
  752 #############      END new index.html #########################
  753 
  754 #################### prompt for creating webworkCourse.ph #################
  755 print "\n\n";
  756 if (-e 'webworkCourse.ph')
  757   {
  758   if ($course_setup_mode eq 'demo') {$ans = 'y';}
  759   else {
  760   print "An old webworkCourse.ph exists.  Do you want to create a new\n";
  761   print "webworkCourse.ph and save the old file as webworkCourse.ph.bak1?\n";
  762   print "If you answer y, and webworkCourse.ph.bak1 already exits, it\n";
  763   print "will be saved as webworkCourse.ph.bak2. Only two backups are kept. (y or n)\n";
  764   $ans=&getAns;
  765   }
  766 
  767   if ($ans eq 'y')
  768     {
  769     rename('webworkCourse.ph.bak1',  'webworkCourse.ph.bak2');
  770     rename('webworkCourse.ph',  'webworkCourse.ph.bak1');
  771     rename('webworkCourse.ph.tmp', 'webworkCourse.ph') || die "Can't rename webworkCourse.ph.tmp";
  772     chmod 0664, 'webworkCourse.ph';
  773     }
  774   else
  775     {
  776     print "\nThe old webworkCourse.ph has not been changed.  You can look\n";
  777     print "at webworkCourse.ph.tmp to see what the new version would have been.\n";
  778     }
  779   }
  780 else
  781   {
  782   if ($course_setup_mode eq 'demo') {$ans = 'y';}
  783   else {
  784   print "Do you want to create a webworkCourse.ph file (we recommmend that\n";
  785   print "you do as it is required for WeBWorK to function)? (y or n)\n";
  786   $ans=&getAns;
  787   }
  788   if ($ans eq 'y')
  789     {
  790     rename('webworkCourse.ph.tmp', 'webworkCourse.ph') || die "Can't rename webworkCourse.ph.tmp.
  791        Fix the problem and run the setup script again. Stopped ";
  792     chmod 0644, 'webworkCourse.ph';
  793     }
  794   else
  795     {
  796     print "\nA webworkCourse.ph file has not been created.  You will need to\n";
  797     print "create such a file.  You can look at webworkCourse.ph.tmp to see\n";
  798     print "what the file would have looked like.\n";
  799     }
  800   }
  801 
  802 #################### prompt for creating index.html #################
  803 
  804 print "\n\n";
  805 if (-e 'html/index.html')
  806   {
  807   if ($course_setup_mode eq 'demo') {$ans = 'y';}
  808   else {
  809     print "An old index.html exists.  Do you want to create a new\n";
  810     print "index.html and save the old file as index.html.bak1\?\n";
  811     print "If you answer y, and index.html.bak1 already exits, it\n";
  812     print "will be saved as index.html.bak2. Only two backups are kept. (y or n)\n";
  813     $ans= &getAns;
  814   }
  815 
  816   if ($ans eq 'y')
  817     {
  818     rename('html/index.html.bak1',  'html/index.html.bak2');
  819     rename('html/index.html',  'html/index.html.bak1');
  820     rename('index.html.tmp', 'html/index.html') || die "Can't rename index.html.tmp. Fix the problem and run the setup script again. Stopped ";
  821     chmod 0664, 'html/index.html';
  822     }
  823   else
  824     {
  825     print "\nThe old index.html has not been changed.  You can look\n";
  826     print "at index.html.tmp to see what the new version would have been.\n";
  827     }
  828   }
  829 else
  830   {
  831   if ($course_setup_mode eq 'demo') {$ans = 'y';}
  832   else {
  833     print "Do you want to create an index.html file (we recommmend that\n";
  834     print "you do as it is required for WeBWorK to function)? (y or n)\n";
  835 
  836   $ans= &getAns;
  837   }
  838   if ($ans eq 'y')
  839     {
  840     rename('index.html.tmp', 'html/index.html') || die "Can't rename index.html.tmp. Fix the problem and run the setup script again. Stopped ";
  841     chmod 0664, 'html/index.html';
  842     }
  843   else
  844     {
  845     print "\nA index.html file has not been created.  You will need to\n";
  846     print "create such a file.  You can look at index.html.tmp to see\n";
  847     print "what the file would have looked like.\n";
  848     }
  849   }
  850 
  851 
  852 ################### Prompt to change the group ##########################
  853 if ($course_setup_mode eq 'demo') {$ans = 'y';}
  854 else {
  855 print qq{
  856 Do you want to set the group for all directories and files\?
  857 It is highly recommended that you do so.  Note that the default
  858 permissions for "working" version assumes the webserver is in
  859 the group. (y or n)
  860 };
  861 
  862 
  863 $ans= &getAns;
  864 }
  865   {               ## bare block to make breaking out easy
  866   if ($ans eq 'y')
  867     {
  868 
  869 
  870     chown(-1, $gid, '.');
  871     chown(-1, $gid,  <*>);
  872     chown(-1, $gid,  <logs/*>);
  873     chown(-1, $gid,  <DATA/*>);
  874     chown(-1, $gid,  <DATA/.auth>);
  875     chown(-1, $gid,  <DATA/.auth/*>);
  876     chown(-1, $gid,  <html/*>);
  877     chown(-1, $gid, <html/tmp/*>);
  878     chown(-1, $gid, <html/tmp/l2h/*>);
  879     chown(-1, $gid, <html/tmp/l2h/*/*>);
  880     chown(-1, $gid, <html/tmp/l2h/*/*/*>);
  881     chown(-1, $gid,  <scoring/*>);
  882     chown(-1, $gid,  <templates/*>);
  883     chown(-1, $gid,  <templates/*/*>);
  884     chown(-1, $gid,  <templates/*/*/*>);
  885     print qq(\n The group has been set to "$groupName"\n\n);
  886     }
  887   }   ##end of bare block
  888 
  889 
  890 ######################### Prompt file permission changes ######################
  891 if ($course_setup_mode eq 'demo') {$ans = 'y';}
  892 else {
  893 print "\n\n\n\n";
  894 print qq(
  895 Do you want to set default "$course_setup_mode" permissions for
  896 all directories and files\? It is highly recommended that you do so.
  897 The default permissions for a "working" version assume the webserver
  898 is in the group.
  899 Set permissions\?  (y or n)
  900 );
  901   $ans= &getAns;
  902 
  903 }
  904 if ($ans eq 'y')
  905 {if ($course_setup_mode eq "demo")
  906   {      ####demo  mode
  907   chmod(0755, '.') || die "Can't set permissions correctly for  base directory. Fix the problem and run the setup script again. Stopped ";
  908   chmod(0755, <*.pl>); ## perl files
  909   chmod(0644, <*.ph>); ## ph files
  910   chmod(0777, 'scoring') || die "Can't set permissions correctly for  scoring directory. Fix the problem and run the setup script again. Stopped ";
  911   chmod(0666, <scoring/*>) ;        # files in scoring - 600, there may be no files
  912   chmod(0777, 'logs') || die "Can't set permissions correctly for  logs directory. Fix the problem and run the setup script again. Stopped ";
  913   chmod(0666, <logs/*>) ;        # files in logs - 660, there may be no files
  914   chmod(0777, 'DATA') || die "Can't set permissions correctly for  DATA directory. Fix the problem and run the setup script again. Stopped ";
  915   chmod(0666, <DATA/*>) ;        # files in DATA - 660, there may be no files
  916   chmod(0777, 'DATA/.auth') || die "Can't set permissions correctly for  DATA/.auth directory. Fix the problem and run the setup script again. Stopped ";
  917   chmod(0666, <DATA/.auth/*>) ;        # files in DATA/.auth - 660, there may be no files
  918   chmod(0775, 'html')  || die "Can't set permissions correctly for  html directory. Fix the problem and run the setup script again. Stopped ";         # html subdir - 750
  919   chmod(0664, <html/*>)  ;
  920   chmod(0777, 'html/images') || die "Can't set permissions correctly for  html/images/ directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/ subdir - 775
  921   chmod(0777, 'html/tmp') || die "Can't set permissions correctly for  html/tmp/ directory. Fix the problem and run the setup script again. Stopped ";     # html/tmp/ subdir - 775
  922   chmod(0777, 'html/tmp/l2h') || die "Can't set permissions correctly for  html/tmp/l2h directory. Fix the problem and run the setup script again. Stopped ";   # html/tmp/l2h/ subdir - 775
  923   chmod(0777, <html/tmp/l2h/*>);   # html/tmp/l2h/ subdir - 775
  924   chmod(0777, <html/tmp/l2h/*/*>) ;    # html/tmp/l2h/ subdir - 775
  925   chmod(0777, <html/tmp/l2h/*/*/*>) ;    # html/tmp/l2h/ subdir - 775
  926   chmod(0777, 'html/tmp/eps') || die "Can't set permissions correctly for  html/tmp/eps directory. Fix the problem and run the setup script again. Stopped ";   # html/tmp/l2h/ subdir - 775
  927   chmod(0777, 'html/tmp/images') || die "Can't set permissions correctly for  html/tmp/images directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  928   chmod(0777, 'html/tmp/gif') || die "Can't set permissions correctly for  html/tmp/gif directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  929   chmod(0777, 'html/tmp/html') || die "Can't set permissions correctly for  html/tmp/html directory. Fix the problem and run the setup script again. Stopped ";   # html/tmp/l2h/ subdir - 775
  930 # chmod(0755, 'courseScripts') || die "Can't set permissions correctly for  courseScripts directory. Fix the problem and run the setup script again. Stopped ";    # courseScripts subdir - 750
  931 # chmod(0755, <courseScripts/*>)   ;
  932   chmod(0777, 'templates') || die "Can't set permissions correctly for templates directory. Fix the problem and run the setup script again. Stopped ";   # templates subdir - 750
  933   chmod(0777, <templates/*>) ;  # files and directories in templates - 777, there may be no files
  934   chmod(0777, <templates/*/*>) ;  # files and directories in templates - 777, there may be no files
  935   chmod(0777, <templates/*/*/*>) ;  # files and directories in templates - 777, there may be no files
  936   chmod(0755, 'templates/macros') || die "Can't set permissions correctly for  templates/macros directory. Fix the problem and run the setup script again. Stopped ";   # templates/macros subdir - 750
  937   chmod(0755, <templates/macros/*>) ;  # files in templates/macros - 640, there may be no files
  938   print "\n Permissions set to default values.\n";
  939   }
  940 else      #####working mode
  941   {
  942   chmod(0750, '.') || die "Can't set permissions correctly for base directory. Fix the problem and run the setup script again. Stopped ";
  943   chmod(0750, <*.pl>); ## perl files
  944   chmod(0640, <*.ph>); ## ph files
  945   chmod(0770, 'scoring') || die "Can't set permissions correctly for  scoring directory. Fix the problem and run the setup script again. Stopped ";
  946   chmod(0660, <scoring/*>) ;        # files in scoring - 600, there may be no files
  947   chmod(0770, 'logs') || die "Can't set permissions correctly for  logs directory. Fix the problem and run the setup script again. Stopped ";
  948   chmod(0660, <logs/*>) ;        # files in logs - 660, there may be no files
  949   chmod(0770, 'DATA') || die "Can't set permissions correctly for  DATA directory. Fix the problem and run the setup script again. Stopped ";
  950   chmod(0660, <DATA/*>) ;        # files in DATA - 660, there may be no files
  951   chmod(0770, 'DATA/.auth') || die "Can't set permissions correctly for  DATA/.auth directory. Fix the problem and run the setup script again. Stopped ";
  952   chmod(0660, <DATA/.auth/*>) ;        # files in DATA/.auth - 660, there may be no files
  953   chmod(0770, 'html')  || die "Can't set permissions correctly for  html directory. Fix the problem and run the setup script again. Stopped ";        # html subdir - 750
  954   chmod(0660, <html/*>)  ;
  955   chmod(0770, 'html/images') || die "Can't set permissions correctly for  html/images/ directory. Fix the problem and run the setup script again. Stopped ";     # html/tmp/ subdir - 775
  956   chmod(0770, 'html/tmp') || die "Can't set permissions correctly for  html/tmp/ directory. Fix the problem and run the setup script again. Stopped ";     # html/tmp/ subdir - 775
  957   chmod(0770, 'html/tmp/l2h') || die "Can't set permissions correctly for  html/tmp/l2h directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  958   chmod(0770, <html/tmp/l2h/*>);   # html/tmp/l2h/ subdir - 775
  959   chmod(0770, <html/tmp/l2h/*/*>) ;    # html/tmp/l2h/ subdir - 775
  960   chmod(0770, <html/tmp/l2h/*/*/*>) ;    # html/tmp/l2h/ subdir - 775
  961   chmod(0770, 'html/tmp/eps') || die "Can't set permissions correctly for  html/tmp/eps directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  962   chmod(0770, 'html/tmp/images') || die "Can't set permissions correctly for  html/tmp/images directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  963   chmod(0770, 'html/tmp/gif') || die "Can't set permissions correctly for  html/tmp/gif directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  964   chmod(0770, 'html/tmp/html') || die "Can't set permissions correctly for  html/tmp/html directory. Fix the problem and run the setup script again. Stopped ";    # html/tmp/l2h/ subdir - 775
  965 # chmod(0750, 'courseScripts') || die "Can't set permissions correctly for  courseScripts directory. Fix the problem and run the setup script again. Stopped ";    # courseScripts subdir - 750
  966 # chmod(0750, <courseScripts/*>)   ;
  967   chmod(0770, 'templates') || die "Can't set permissions correctly for  templates directory. Fix the problem and run the setup script again. Stopped ";  # templates subdir - 750
  968   chmod(0770, <templates/*>) ;  # files and directories in templates - 770, there may be no files
  969   chmod(0770, <templates/*/*>) ;  # files and directories in templates - 770, there may be no files
  970   chmod(0770, <templates/*/*/*>) ;  # files and directories in templates - 770, there may be no files
  971   chmod(0750, 'templates/macros') || die "Can't set permissions correctly for  templates/macros directory. Fix the problem and run the setup script again. Stopped ";    # templates/macros subdir - 750
  972   chmod(0750, <templates/macros/*>) ;  # files in templates/macros - 640, there may be no files
  973   print "\n Permissions set to default values.\n";
  974   }
  975 }
  976 
  977 if (-e 'DATA/.auth/keys') {
  978   unlink 'DATA/.auth/keys' || warn "Can't remove the DATA/.auth/keys file. You do not have to run the setup script again, but you should remove this file by hand/n";
  979 }
  980 
  981 print qq{
  982 The WeBWorK Course setup script has finished.
  983 
  984 
  985 In order to complete the setup, please continue reading the instructions about:
  986 
  987   1) using chmod g+s to set the group setid properly.
  988   2) running import_classlist-database.pl in order to set up the classlist, password and permissions databases.
  989   3) running setProfPermissions.pl in order to give someone (probably yourself) professor privileges.
  990   4) building problem sets (initially just go to the professor's page and click on 'Enter Build
  991   Problem set Page).
  992 };
  993 
  994 
  995 
  996 
  997 sub check_URL {
  998   my ($name_URL,$var_URL) = @_;
  999   my $response = 'y';
 1000   while ($response eq 'y') {
 1001     if (($var_URL =~ m|^/|) or ($var_URL =~ m|^http://|)) {
 1002       $response = 'n';
 1003     }
 1004     else {
 1005       print qq{\nThe $name_URL you entered, $var_URL , does not begin with either \n
 1006 a slash (/) or with http://  .  This is almost certainly an error. \n
 1007 Do you want to enter the $name_URL again? (y or n)};
 1008       $response =&getAns;
 1009       if ($response ne 'n') {
 1010         print "\n Enter the $name_URL:\n";
 1011         $var_URL=<STDIN>;
 1012         chomp($var_URL);
 1013         $response = 'y';
 1014       }
 1015       else  {
 1016         $response = 'n';
 1017       }
 1018     }
 1019   }
 1020   $var_URL;
 1021 }

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9