This page contains pseudocode and source code for the two types of wrapper: "individual page" and "collection of pages". There is enough information here to help you create your own wrappers. Simply copy an existing template and modify it to your needs.
build_staff_page
wrapperBEGIN Read command line arguments (uid, year, template filename, filename for external version of page, filename for local version of page) If command line arguments incorrect, print a usage message and finish Open connection to database (CAS) Get details on the member of staff specified at the command line If there are no details of that person that print an error message and finish Go through every line of the specified template and deal with $exec{} Get remaining details of that person from CAS (research groups, tutee list, classes supervised, lectures given, responsibilities taken) Insert staff member details into template Localise the file and clean (remove #external..#endexternal). Store as new array Externalise the file and clean (remove #local..#endlocal). Store as new array Save localised and externalised copies of the filled in template. Close connection to database (CAS) END
build_staff_page
wrapper#!./ingperl # Note the use of relative pathame for ingperl. The current version/installation # is broken and doesn't like absolute pathnames require "/home/cur/atp/cc18-www/lib/CAS_functions.pl"; require "/home/cur/atp/cc18-www/lib/template_functions.pl"; $uid = $ARGV[0]; $year = $ARGV[1]; $template_file = $ARGV[2]; $external_file = $ARGV[3]; $internal_file = $ARGV[4]; if (!$uid || !$year || !$template_file || !$external_file || !$internal_file) { die("Usage: build_staff_page uid year template_file external_file internal_file\n\n"); } &CAS_open_connection; # Check to see if this there a person matching the given uid %data = &CAS_get_staff_info($uid); # Got all the data we need! # Check if we have a match first if ($data{uid}) { open(FILE, "$template_file") || die ("Can't find template file $template_file\n\n"); @file_contents = <FILE>; # Run exec first, so that $exec{} doesn't get lost in replacement @file_contents = &run_exec(@file_contents); $data{groups} = &CAS_get_staff_research_groups($uid); $data{tutees} = &CAS_get_tutees($uid); $data{supervisions} = &CAS_get_supervisions($uid, $year); $data{lectureships} = &CAS_get_lectureships($uid, $year); $data{responsibilities} = &CAS_get_responsibilities($uid, $year); # We've got all the data we need. Now do the replacment # Remember that %data is global @file_contents = &replace(@file_contents); #Localise the file and clean (remove #external..#endexternal) @localised_file_contents = &localise(@file_contents); @localised_file_contents = &clean(@localised_file_contents); @localised_file_contents = &replace_local_path(1, @localised_file_contents); #Externalise the file and clean (remove #local..#endlocal) @externalised_file_contents = &externalise(@file_contents); @externalised_file_contents = &clean(@externalised_file_contents); @externalised_file_contents = &replace_local_path(0, @externalised_file_contents); # Finished; now save to file # Start with external file &write_file($external_file, @externalised_file_contents); # Now save internal (localised) file &write_file($internal_file, @localised_file_contents); } else { print "No match found on \"$ARGV[0]\""; } &CAS_close_connection; exit;
build_staff_page
wrapperBEGIN Read command line arguments (year, department) If command line arguments incorrect, print a usage message and finish Open connection to database (CAS) Get list of staff member logins Close connection to database (CAS) Print list of staff member logins Print start time index For every login in the list: - Print login - Check to see if use has a ~/.staff.template - Call build_staff_page wrapper with arguments: login, year, name of template (either default, or ~/.staff.template), filename for external version of page, filename for local version of page Print finish time index END
build_all_staff_pages
wrapper#!./ingperl # Note the use of relative pathame for ingperl. The current version/installation # is broken and doesn't like absolute pathnames require "/home/cur/atp/cc18-www/lib/CAS_functions.pl"; $year = $ARGV[0]; $department = $ARGV[1]; # Check ARGV[2] to make sure department has been entered between quotes if (!$year || !$department || $ARGV[2]) { die("Usage: build_all_staff_pages year \"department_name\"\n\n"); } &CAS_open_connection; @staff = &CAS_get_staff_logins("$department"); &CAS_close_connection; print "Got ", $#staff+1, " staff members for \"$department\": \n"; print "@staff\n\n"; print "Start time index: ", `date`, "\n\n"; foreach $login (@staff) { print "\nBuilding $login from staff template..."; # First check for user-tailored template if (-e "/home/cur/$login/.staff.template") { # User has their own template. Use that print "Tailoring...\n"; system("build_staff_page $login $year /home/cur/$login/.staff.template \ ../httpd/docs/people/staff/$login.html \ ../httpd/docs/local-only/people/staff/$login.html"); } else { # Use default template print "Using default template...\n"; system("build_staff_page $login $year ../templates/staff.template \ ../httpd/docs/people/staff/$login.html ../httpd/docs/local-only/people/staff/$login.html"); } } print "\nDone.\n\n"; print "Finish time index: ", `date`, "\n\n";