Faculty Recruiting System

The Faculty Recruiting System is a web application and database used by applicants to CS Faculty positions and the SACA committee (chaired by a faculty member, term switching over on July 1 of each year.). Development in CS has been done by Daniel Allen. Its most common intended uses are:

  • to allow candidates to submit their application package and nominate references to submit supporting documents
  • to allow references to submit supporting documents for candidates
  • to signal to the applications contact in CS when an applicant has registered; and applied for a job.
  • to allow the applications contact and the SACA chair to review applicants and mark them short-listed.
  • to allow the SACA committee members to review short-listed applicants.
  • and to allow the Director of the School to review interviewed candidates and produce summary statistics.

Table of Contents

User Documentation

The Faculty Recruiting System is available at https://www.cs.uwaterloo.ca/faculty-recruiting/.

See "Attachments" below for user documentation.

See FacultyRecruitingSystemVideoUpload for instructions on importing recruiting videos.

Sysadmin Documentation


The Faculty Recruiting System is available at https://www.cs.uwaterloo.ca/faculty-recruiting/

Regular faculty members also can access the system at https://www.cs.uwaterloo.ca/faculty-recruiting-discuss/ - see the below section on "cs-info".

The running code is housed on www152.cs, the CS web server, and accesses database.cs as mySQL user app_ofas The code is based on "OFAS", the Online Faculty Application System, developed by Vu Huynh in Management Sciences. See below for more notes about the code.

Sysadmin Tasks

The following syadmin tasks should happen each year at the time of the switchover of SACA chair (July 1).

  • Changing cs-recruiting email contact
  • Year-end moving files

Changing cs-recruiting email contact

cs-recruiting@uwaterloo.ca receives email, also forwarded from cs-recruiting@cs.uwaterloo.ca. This email includes:

  • any questions from applicants,
  • contact form on https://cs.uwaterloo.ca/contact-us if the inquirer chooses the text-box "I am contacting the School of CS about Faculty employment opportunities",
  • automated emails sent from the recruiting application when someone submits an application or uploads a reference letter.

This email address must be updated within Connect as soon as the SACA chair changes. It is done by logging into connect as cs-recru (password in safe), then updating Inbox Rules. An email should be sent to cs-recruiting and the chair's regular email. A sample can be found in ST#96413.

In case the displayed email address should be changed from cs-recruiting an application global ADMIN_ADDRESS variable controls the email contact address at the bottom of each page, and the address receiving administrative emails (new applicants, and new applications). This variable is set in $ROOT/waphplib/config.php . (See #PHP_Code below for definition of $ROOT)

A global AUTO_SENDER_ADDRESS variable controls what address is listed as the "from" of auto-sent emails. This variable is set in $ROOT/waphplib/config.php .

Year-end removing files

Rules for document retention require that applicant files older than one year must be deleted. As noted above, we do this on July 1 or thereabouts, for the previous recruiting cycle (eg., July 1 2015, we delete applicants older than July 1 2014). Currently this is done from the unix command-line and in mysql. A sample ST to address this is ST#85420.

In the following instructions $DATE is the YYYY-07-01 deletion date.

We delete all old applicant-uploaded files (in 'upload') and reference-uploaded references (in 'upload/private').
cs-recru% cd /software/odyssey-3_apache/data/vhosts/odyssey.uwaterloo.ca/faculty-recruiting/html/upload
cs-recru% touch .README   # don't delete the .README
cs-recru% ls -lt |less   # find the name ($FILE) of the first file older than $DATE
cs-recru% ls -lR |wc   # sanity check. 
cs-recru% find -not -newer $FILE |wc   # sanity-check: should be approximately half of the total files,
cs-recur% find -not -newer $FILE -delete
cs-recru% ls -l |wc   # sanity check: should be exactly the remainder of the previous count minus the deleted files. If wrong, revive them from the .snapshot directory.

  1. first, temporary local backup of app_saca and app_saca-discuss databases.
  2. second, delete rows older than $DATE:
use app_saca;
SELECT count(*), max(applyid), max(applicantid) FROM  `apply` where date_applied < '$DATE';
  1. make note of the oldest values to delete from $APPLY and $APPLICANT above
delete from review where applyid <= $APPLY;
delete from apply where applyid <=$APPLY;
delete from applicant_ads where applicantid <= $APPLICANT;
delete from applicant where applicantid <= $APPLICANT;

use `app_saca-discuss`;
delete from faculty_review where applyid <= $APPLY;

  1. finally: references are only recorded by year, so for simplicity, we'll delete the prior year's - eg., if we deleted 2015's above, delete ONLY $YEAR=2014 here. delete from ref_info where year=$YEAR;

Make a new item for next year, as a see-also from this year's deletion item. (Reminders: requester is current SACA chair; Upcoming Request, priority 9, start-date is next July 1.)

User Tasks that can also be done by the sysadmin manipulating the database

The following three tasks can be done by admin staff via the Chair View (See the Chair View Manual below). They can also be done via direct database manipulation if necessary.

  • Changing SACA committee membership
  • Adding regular faculty
  • Changing Chair role membership

Changing SACA Committee membership by direct database manipulation

Table person has values personid, privilege_id, nexus, firstname, lastname.

e.g., when new faculty arrive:

database.cs% mysql
use app_saca;
insert into person (nexus, firstname, lastname, privilege_id) values
  ('smwatt' , 'Stephen', 'Watt'  , 5),
  ('lila'   , 'Lila'   , 'Kari'  , 5),
  ('eschost', 'Eric'   , 'Schost', 5);

Adding new saca committee members is a matter of adding a new line with privilege_id 2.

Their authentication is handled by UWDir via ldap (not CAS, and not nexus authentication, even though the column is labeled "nexus" for historical reasons).

Removing a committee member is accomplished by emptying the privilege_id field from their record. Note that instead deleting the row is a BAD idea- their comments will disappear from any applications, and when a new record is created with the same personid, the old user's comments will re-appear associated with the new user.

Adding regular faculty by direct database manipulation

At the start of a hiring season, if there are any new faculty, we need to add them to the "CS Info Discussion System" (see below for a description) See above about adding new saca committee members- add a new line for the user and give them privilege_id 5.

Changing Chair role membership by direct database manipulation

See above about adding new saca committee members- instead, edit the user and give them privilege_id 1. The privilege is shared by the actual committee chair, Suzana, and Daniel.

Additionally, the chair's name must be changed within /html/chair/view/reject_emailtext.inc - change this very shortly after the new chair is announced, even though rejection letters won't be sent for some time.

"cs-info" Discussion System

Previously there was a faculty "cs-info" rlogin, which is how faculty members reviewed candidates asked to interview. This has been replaced with a separate view on the faculty-recruiting system, at: https://odyssey.uwaterloo.ca/faculty-recruiting-discuss . It is actually a symbolic link to the faculty-recruiting directory; the code checks which URL they came in from and shows the appropriate data. The -discuss code uses an additional separate database ( app_saca_discuss) containing only the faculty_review table. (A design decision was that different HR rules cover regular faculty comments and SACA comments; this database separation allows the school to use the different HR rules).

The -discuss user-interface removes ability to see reference letters, and only displays applicants who are set to status "Interview" by the Chair Tools.

In the app_saca database, person table is set to privilege_id '5' for everyone who has access to the -discuss system (see above under 'Adding regular faculty'). This includes all CS faculty, and a few faculty in Software Engineering.

Candidates who are going to be interviewed need to be set to status "Interview" in the Chair Tools; they will automatically be visible to faculty members via the -discuss interface.


Development code is stored in the campus git repository for CSCF, at https://git.uwaterloo.ca/cscf/ofas/.

Database Tables

See the file schema.sql in the root directory of the checkout for a schema with sample data. (It may also be browsed via the web, here: https://git.uwaterloo.ca/cscf/ofas/blob/master/schema.sql )

PHP Code

The production PHP code is located at www152.cs:/software/odyssey-3_apache/data/vhosts/odyssey.uwaterloo.ca/faculty-recruiting (referred to elsewhere in this document as $ROOT).

Global configurations are set in $ROOT/waphplib/config.php.

Many .php scripts call .inc template files.

The filestructure is:


Development code should be checked out on your dev workstation.

Testing code is checked out on the production web server, at /faculty-recruiting-testing . The -testing copy generally uses database.cs user drallen, but we switch to using production's user 'app_saca' when we are very close to releasing another version.

There are minor differences between production and the development code:

diff faculty-recruiting/.htaccess faculty-recruiting-dev/.htaccess
< RewriteBase /faculty-recruiting/
> RewriteBase /faculty-recruiting-dev/

Additionally, there are differences in the file faculty-recruiting{,-dev,-testing}/waphplib/config.php - which contain database and URL define() sections.

  • For development, it is important that you set ADMIN_ADDRESS and AUTO_SENDER_ADDRESS so they are not the default (prod) values!

Normal development process is to work in the dev- checkout path, checking in changes regularly, and when it's stable/complete, pushing the code back to the repository.

The parent ST item for < 2017 work is ST#72731 - with the following version sub-items. You can find all tickets via https://cs.uwaterloo.ca/cscf/research/sub/view.php?account=sc-faculty-recruiting

Version Description Release Date Main Work Item
2.1 Initial CS Version Aug. 2009 ST#68242
2.2 "cs-info" changes to allow all faculty to review candidates Nov. 2009 ST#69196
2.3 Workflow improvements Fall 2010 ST#70154
2.4 Workflow improvements Fall 2011 ST#74472
2.5 Workflow improvements incl. Uploads by Referees Fall 2012 ST#80445
2.6 AODA compliance, visual appearance, workflow improvements Fall 2013 ST#87612
2.7 Workflow improvements Fall 2014 ST#97002
2.7.1 Workflow improvements Spring 2015 ST#101147
2.7.2 Workflow improvements Fall 2015 /ST#102233
2.7.3 Workflow improvements Fall 2016 /ST#102880
2.7.4 Bug fixes Fall 2017 /ST#108236
2.7.5 Workflow improvements Fall 2018 /RT#677720
Topic attachments
I Attachment Action Size Date Who Comment
Unknown file formatdocx ApplicantViewFAQ.docx manage 21.8 K 2011-09-23 - 15:42 DanielAllen  
Unknown file formatdocx ApplicantViewManual-d.docx manage 362.4 K 2011-09-23 - 15:45 DanielAllen  
Unknown file formatdocx ApplicantViewManual.docx manage 367.3 K 2011-09-23 - 15:41 DanielAllen  
Unknown file formatdocx ChairViewFAQ.docx manage 19.3 K 2011-09-23 - 15:44 DanielAllen  
Unknown file formatdocx ChairViewManual.docx manage 1432.9 K 2016-10-31 - 17:30 DanielAllen Version for 2.7.3 (Spring 2016)
Unknown file formatdocx SACAViewFAQ.docx manage 20.4 K 2011-09-23 - 15:43 DanielAllen  
Unknown file formatdocx SACAViewManual.docx manage 621.5 K 2015-11-24 - 16:43 DanielAllen Version for 2.7.2 (November 2015)
Unknown file formatdocx SchoolViewFAQ.docx manage 19.5 K 2011-09-23 - 15:45 DanielAllen  
Unknown file formatdocx SchoolViewManual.docx manage 76.0 K 2011-09-23 - 15:44 DanielAllen  
Unknown file formatsql ofas_sandbox.sql manage 7.1 K 2013-04-25 - 14:23 DanielAllen sql tables dump for app_saca
Topic revision: r44 - 2019-02-26 - DanielAllen
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback