htmlentities() Cover Everything (4)

editUsers code (JavaScript)

Also, made Admin editUsers and editTerm pages like the staff versions again.

*/editUsers now support viewing multiple userTypes at once (thanks to the binary exclusivity of userTypes added before)
htmlentities() Cover Everything (5)

Action 'fetchUser'
professor/*.php
editTerm hack: Skip error when no assigned professor

Please for the love of god finish this page!
"Cancel" instead of "Withdraw" for cancelling non-approved apps
Rename Action 'fetchPositions' => 'findPositions'

find* will be Actions that get paginated lists of objects
fetch* will be Actions that get single objects or unfilterable lists (fetchBuildings)
htmlentities() Cover Everything (6)

Payroll

Also, make every id int on PHP-side, not just in toArray() output, so
that === can be used more freely.
htmlentities() Cover Everything (7)

Internal changes to JavaScript:
- doPaginatedAction() API now matches doAction()
- doPaginatedAction() now has a 3rd argument to specify "default" pg
  settings: pg.length defaults to 15, but small items (like findEvents)
  should be pg.length = 25, and large items (like section panels) should
  be pg.length = 5
- $.encode() was added and implemented through all of JavaScript (except fetchSections):
  $.encode() == htmlentities() for jQuery
Changelog
Syntax error
Fix IPv4 addresses being stored as if first 4 bytes of IPv6
Fixes to viewEvents.php

- Show user with email
- Use formal DATETIME format (THIS IS A HACK)
- Fix EventType referencing object
- Fix appearance (no more ...s)
- Upgrade script now changes column
spaces=4
Patch staff/editUsers -> admin/editUsers