# Features — contacts (FTI Consulting Intranet Contacts v2.2)

Evidence date: 2026-10-18.

Source: `git@bitbucket.org:overdrive/contacts.git`, `master` at `c1b9e91` (2020-12-11).

There is no features list in the source repository. Status below is from the pages that the menus actually open, unless a row says the file is unlinked.

Legend: **Current** means the page is reachable from the frames and performs the behaviour. **Unused in navigation** means the file is in the tree and no other page links to it. **Removed from the live page** means the current page has the behaviour commented out while an older copy may still contain it.

## Current features

### Sign-in and shell

| Feature | Location | Behaviour |
|---|---|---|
| Login form | `index.asp`, `md5.js`, `md5.asp` | Username and password. Client MD5 plus seed. Cookie `ckyUserID`. Redirect to `home.asp` |
| FTI branding on login | `title.htm`, `images/FTI_Logo_Color_300.jpg` | Title "FTI Consulting Intranet - Contacts - v2.2" |
| Top menu | `topmenu.asp` | Home, Search, Admin for types 47 and 33. Logout shows the username from `tblUser` |
| Logout | `logout.asp` | Clears `ckyUserID` and links back to login |
| Frameset shell | `home.asp`, `search.asp`, `admin.asp` | 50px top frame, 200px left frame, scrollable body |

### Directory

| Feature | Location | Behaviour |
|---|---|---|
| Category menu | `leftmenu.asp` | All `tblCategory` rows, alphabetical, target `innerBody` |
| Publication list by initial | `contactlist.asp` | A–Z and All. Empty states for no publications and no contacts |
| Expand publication | `contactlist.asp` `handleGroup` | Toggles contact rows for that publication. Selection is kept in `arrID` |
| Contact card, Journalist tab | `contactdetail.asp` `lngTab=1` | Identity, phones, emails, beats, lists, notes, PA, Twitter Handle, date updated |
| Contact card, Publication tab | `contactdetail.asp` `lngTab=2` | Show fields and publication fields, including category, language, place, circulation, reach |
| Printer-friendly card | `contactdetail.asp` `lngTab=0` | Single table. Switchboard and fax come from `tblContact` |
| Mailto links | `contactdetail.asp` | Email, alternate email, and newsdesk email |

### Search and mail

| Feature | Location | Behaviour |
|---|---|---|
| Query list | `rpt_custom.asp` | All users' queries. Three sort orders. Private rows in red |
| Create and edit query | `rpt_custom_1.asp` | Name, private flag, field picker from `tblFields` |
| Criteria and sort | `editCriteria.asp` | Per-field order, ASC/DESC/none, criteria text |
| Run query | `runQuery.asp` | Result grid, select all, stamps `strDateLastRun` |
| Print selected rows | `printer_friendly.asp` | Posted from `runQuery.asp` |
| Email selected rows | `contact_email.asp` | FCKeditor body, Cc, Bcc, disclaimer, per-contact send, sender copy |
| Attachments | `fAttach.asp`, `fAttach.cls.asp`, `aspSmartUpload.dll` | Add and remove files under `tmp_upload`, prefixed with the user id |
| Viewer edit lock on private queries | `rpt_custom.asp` `setPermission` | Disables Edit and Delete in the browser for type 33 when the query is private and owned by someone else |

### Administration

| Feature | Location | Behaviour |
|---|---|---|
| Admin landing | `admin_lookup.asp` | Instruction to pick a left-menu item |
| A–Z filter bar | `letters.js`, written into the `lettersMenu` frame | A–Z and All. Not rendered by `admin_letters.asp` |
| Beat | `admin_beat.asp` | Description CRUD. Delete blocked when `tblContactBeat` rows exist |
| Category | `admin_category.asp` | Description CRUD. Delete blocked when publications use it |
| City | `admin_city.asp` | Description CRUD. Delete blocked when publications use it |
| Country | `admin_country.asp` | Description CRUD. Delete blocked when publications use it |
| Designation | `admin_designation.asp` | Description CRUD. Delete blocked when contacts use it |
| Distribution list | `admin_distributionlist.asp` | Description CRUD. Delete blocked when junction rows exist |
| Language | `admin_language.asp` | Description CRUD. Delete blocked when publications use it |
| Suburb | `admin_suburb.asp` | Description CRUD. Delete checks publications. Alert text says Contacts |
| Title | `admin_title.asp` | Description CRUD. Delete blocked when contacts use it |
| Publication | `admin_publication.asp` | Full publication form, related-contact list, delete blocked when contacts exist |
| Show/Section | `admin_show.asp` | Name, appearing, deadline, host, details, reach. Delete blocked when contacts exist |
| Contact | `admin_contact.asp` | Full contact form. Delete also removes beat and distribution-list links |
| Contact beats | `admin_contact_beat.asp` | Add and remove beats for one contact. Duplicate beat rejected |
| Contact distribution lists | `admin_contact_distributionlist.asp` | Add and remove lists for one contact. Duplicate rejected |
| Users | `admin_user.asp` | Admin only. Username, password, type, email, signature |
| My Details | `admin_user_lite.asp` | Viewer only. Signature |
| System settings | `admin_system.asp` | Admin only. Email disclaimer |
| Tools | `admin_tools.asp` | Admin only. Conditional "Update database 2011/09/12" button |

### Shared behaviour on the admin lists

| Feature | Location | Behaviour |
|---|---|---|
| Alternating row colours | `function.asp` `swapIt` | `#D3D7DF` and `#E2E4E8` |
| Quote handling on save | `function.asp` `fixquote` | Double quote becomes a single quote; single quotes are doubled |
| List total | Each admin list page | "List Total: N" |
| Confirm delete | Client script on each admin page | One item names the record; many items ask a generic confirm |
| Required-field alerts | Client `validateForm` | Blocks submit and lists missing labels |

## Completed features

Git history cannot separate completed work from the rest of the product. The single commit contains the whole tree. These items are completed inside that snapshot, based on comments that describe a finished change:

| Feature | Evidence | Status |
|---|---|---|
| Twitter Handle label | Comment dated 20130128 on `admin_contact.asp` and `contactdetail.asp`. The label is "Twitter Handle". The column is still `strCarReg` | **Current** label on the live pages |
| Last-user and last-edit columns | `admin_tools.asp` adds them if missing. `admin_contact.asp` and `admin_publication.asp` write them | **Current** |
| ODBC Driver 17 connection | Active line in `sql_connect.asp`. The `{sql server}` / `reddb02` line is commented | **Current** connection. Previous driver is **Removed from the live page** |

## Planned features

No TODO, roadmap, or ticket file describes future work.

These comments describe behaviour that was considered and is not active:

| Item | Evidence | Status |
|---|---|---|
| Admin shell restricted to type 47 | Commented `if` in `admin.asp` and a commented redirect on the lookup pages | **Removed from the live page**. Server-side `blnAdmin` still blocks Save and Delete |
| Contact switchboard and fax stored on the contact | Commented assignments in the `admin_contact.asp` update and insert | **Removed from the live page**. The Journalist tab reads those values from the publication. The printer layout still reads `tblContact.strSwitchboard` and `tblContact.strFax` |
| Block user delete when queries exist | `intQueryCount` increment is commented in `admin_user.asp`. The code deletes the queries and then the user | **Removed from the live page** |
| Save buttons disabled for some query edits | Commented `disabled` attributes in `rpt_custom_1.asp` and `editCriteria.asp` | **Removed from the live page** |
| Top menu without Admin for type 33 | Commented `case 33` in `topmenu.asp` | **Removed from the live page**. Type 33 now shares the Admin link with type 47 |

Nothing else is marked as planned.

## In development

No branch other than `master`. No uncommitted product work was inspected (the source checkout is a fresh clone of `c1b9e91`). There is no in-development feature in the repository.

## Recently changed

The git commit is dated 2020-12-11 and is the entire history, so "recent" cannot be taken from commit order. The newest dates written inside the files are:

| Date in the file | Change |
|---|---|
| 2013-01-28 | Car Reg label replaced with Twitter Handle on the live contact form and contact card |
| 2013-01 | `contacts.201301.zip` added to the tree (contents not unpacked) |
| 2011-09-12 | Database tool for `strLastUser` / `strLastEdit` |
| 2009-10-20 | Testing Bcc comment on the unlinked `contact_emailBCC.asp` |

## Deprecated or unused

| Item | Evidence | Status |
|---|---|---|
| `zadmin_publication.asp` | Older publication admin. No inbound link | **Unused in navigation** |
| `zcontactdetail.asp` | Older contact card. No inbound link | **Unused in navigation** |
| `zcontact_email.asp`, `zcontact_email.asp.old` | Older mail pages. No inbound link | **Unused in navigation** |
| `contact_emailBCC.asp` | Mail variant with an extra test Bcc. No inbound link. Live mail posts to `contact_email.asp` | **Unused in navigation** |
| `printer_friendly.backup.asp`, `printer_friendly2.asp` | Print variants. Runner posts to `printer_friendly.asp` | **Unused in navigation** |
| `admin_letters.asp` | PHP comments and an empty body. The letters UI is `letters.js` | **Unused** as a letter bar. It is still the initial `src` of the letters frame |
| `default.asp` | Writes `Hello` | **Unused in navigation** |
| `db_connect.asp` | Connection probe that prints a user id | **Unused in navigation** |
| `new.asp` | Local `bmsa` database probe | **Unused in navigation** |
| `email.asp`, `testemail.asp` | Mail probes | **Unused in navigation** |
| `images/FD-BEACHHEAD-logo.jpg`, `images/logo.jpg` | Image files. Login uses `FTI_Logo_Color_300.jpg` only | **Unused** by the ASP pages |
| Email signature on send | `contact_email.asp` reads `strSignature` into `mySignature` and never uses the variable | **Implemented** storage and edit. **Not used** when sending |
| Interests on the card | `memInterests` is saved from `admin_contact.asp` and selected in `contactdetail.asp`, then not rendered | **Implemented** storage. **Not shown** on the card |
| `btnNotesUpdate` | Handler in `admin_tools.asp`. No matching button is written | **Unused** handler |
| User-delete query warning | Alert exists. The counter that would trigger it is commented out | **Unused** alert |

## Feature map by role

| Capability | Admin (47) | Viewer (33) | Other type |
|---|---|---|---|
| Login and directory | Yes | Yes | Logged out by the top menu |
| Search, run, print, email | Yes | Yes | No shell |
| Create a query | Yes | Yes | No |
| Edit or delete someone else's private query in the browser | Buttons stay enabled | Buttons disabled | No |
| Delete a query on the server | Only if owner | Only if owner | No |
| Change lookup, publication, show, contact data | Yes | Forms can be opened; server ignores Save and Delete | No |
| Users, disclaimer, tools | Yes | My Details (signature) only | No |
