# Features — gsa

Evidence date: 2026-10-13.

Source: `git@bitbucket.org:overdrive/gsa.git`, `master` at `ebb9cca93051bcd23a569d2b0a243a8d465bb740` (2020-08-26).

There is no features document in the source tree. Status below means what the code contains, not a product roadmap. Menu visibility is stored in MySQL; a dump snapshot is in `db/gsa_20200811.sql`.

## Current features

| Feature | What it does | Source | Status |
|---|---|---|---|
| Login | Username, MD5 password, active flag, cookie | `login.php` | Current |
| Home | Heading "GSA" and the database menu | `index.php`, `include/menu.inc.php` | Current |
| Advertisers | Search, list, edit, delete. Positions, bad payer, VAT, account fields | `advertiser.php`, `include/advertiser.cls.php` | Current |
| Active / prospective filter | Derived from future non-cancelled contract items | `Advertiser::ShowList` | Current |
| Contacts | Name, title, phones, email, subscribe status, one default per company | `contact.php`, `include/contact.cls.php` | Current |
| Contact logs | Discussion, action, follow-up, type, status, contract, magazines | `contactlog.php`, `include/contactlog.cls.php` | Current |
| Contracts | Header, monthly items, duplicate, renew button, free flag, discount | `contract.php`, `include/contract.cls.php`, `include/contractitem.cls.php` | Current |
| Contract items | Position, size, colour, shape, edited amount, skip, cancel, update label | `ContractItem::Save` | Current |
| Payment interval | Spreads the contract amount onto every Nth item | `tblPaymentType.intInterval` in `ContractItem::Save` | Current |
| Search | Company search; opens the contact panel | `search.php`, `include/search.cls.php` | Current |
| Email page | Same search class as `search.php` | `email.php` | Current. Same controller pattern as search |
| Report console | Fifteen reports, view / export / PDF | `reports.php`, `include/reports/reports.cls.php` | Current |
| Commissions report | Gated by security item id 3 | `salespersonreport.php`, `include/reports/salespersonreport.cls.php` | Current |
| Renewal document | Form, save, delete | `renewaldoc.php`, `include/renewaldoc.cls.php` | Current |
| Renewal PDF | FPDF A4. No login check | `renewalpdf.php`, `include/renewalpdf.cls.php` | Current |
| Users | Name, MD5 password, active, None/View/Full, sales-person links | `user.php`, `include/user.cls.php` | Current |
| Sales people | Code, name, email, cell, fax, branch, active | `salesperson.php`, `include/salesperson.cls.php` | Current |
| Publications | Name, STAR flag, default flag | `magazine.php`, `include/magazine.cls.php` | Current |
| Lookup tables | Branch, colour, shape, size, position, title, statuses, payment type, update label, email template, contact-log type and status, subscribe status | Matching root PHP pages and `include/*.cls.php` | Current |
| Contract XML | Contacts and open contracts for a company, before login | `contract.php` when `arefCompanyID` is set | Current |
| STAR newsletter | Monthly booking email | `cron.daily.php` | Present, hard-stopped |
| Data import | Bulk insert of the core tables | `ximport.php`, `zimport.php` | Present. Login commented out |
| SQL dump | Full schema/data snapshot dated 2020-08-11 | `db/gsa_20200811.sql` | Present as artifact |

## Report features

Each row is a root script opened by the report console. Classes live in `include/reports/`.

| Script | Console label | Notes |
|---|---|---|
| `invoicelist.php` | Invoice List | `checkLogin` commented out on wrapper |
| `adlist.php` | Planning List | `checkLogin` commented out on wrapper |
| `canceled.php` | Cancelled List | `checkLogin` commented out on wrapper |
| `movelist.php` | Move List | `checkLogin` commented out on wrapper |
| `prospectlist.php` | Prospect List | `checkLogin` commented out on wrapper |
| `prospectlistbycontact.php` | Prospect List by Contact | `checkLogin` commented out on wrapper |
| `prospectexportlist.php` | Prospect Export List | `checkLogin` commented out on wrapper |
| `salespersonreport.php` | Commissions | Hidden unless security item 3 allows it |
| `expiry.php` | Sales Person Expiry Report | `checkLogin` commented out on wrapper |
| `contactreport.php` | Contact Report | `checkLogin` commented out on wrapper |
| `clientspendreport.php` | Client Spend Report | Comment dated 2017-02-15; Dompdf experiments commented |
| `incomelistreport.php` | Income List Report | Comment dated 2017-02-15; Dompdf experiments commented |
| `followupreport.php` | Followup Report | `checkLogin` commented out on wrapper |
| `summarisedtotals.php` | Summarised Totals | `checkLogin` commented out on wrapper |
| `advertchange.php` | Advert Updates | Console text: prints only for A, excludes SU, SD, NN, NB |

## Completed features

Nothing in git is marked released beyond the footer `v0.0A, 2008`. Dated or alternate class copies sit beside the live files and are not included by the root pages:

- `include/zzcontract.cls.php` (contains `PreviewMail` and `MailContacts`)
- `include/zcontract.cls.php`, `include/zrenewaldoc.cls.php`, `include/zrenewalpdf.cls.php`
- `include/renewaldoc2.cls.php`
- `contract.back.php`

Treat these as historical or alternate copies, not as a second running application.

Git tip `ebb9cca` (2020-08-26) adjusted email validation, Excel export, and contract history display across advertiser, contact, contract, and several report classes.

## Planned features

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

Commented code records work that was started and not left active:

- Browser-side MD5 of the login password (attribute present, `onclick` empty).
- Dompdf rendering paths in client spend and income list reports.
- `settings.php` still points at `include/general/settings.cls.php` and at `checkSecurity` / `NotSufficientSecurityLevel`, which are not in the tree.
- `ajax.php` references a path under `includes/` that does not match this tree layout.

## In development

None identifiable from branches or incomplete feature flags. Only `master` was inspected.

## Recently changed

| Change | Evidence |
|---|---|
| Email validation / Excel export / contract history display fixes | Commit `ebb9cca` (2020-08-26), files under `include/advertiser.cls.php`, `include/contact.cls.php`, `include/contract.cls.php`, and several `include/reports/*.cls.php` |

No later commits exist in this clone.

## Deprecated / removed / disabled

| Item | Evidence | Notes |
|---|---|---|
| STAR newsletter send | `cron.daily.php` `die("site inactive 20180108")` | Code after the die is unreachable |
| Report wrapper login checks | Many `*.php` report entry files | `checkLogin()` commented out; console still checks login |
| Renewal PDF login | `renewalpdf.php` | `checkLogin()` commented out |
| Import login | `ximport.php`, `zimport.php` | `checkLogin()` commented out |
| Settings admin | `settings.php` | Incomplete includes |
| CI / Sonar | — | Not present in this repository (contrast with Silicon Ark `thegsa` docs, which describe pipelines in that other repo) |

## Comparison note (not a feature of this repo)

Silicon Ark `thegsa/` documents a later repository with Composer Dompdf and Bitbucket Pipelines SonarQube. Those are **not** features of `overdrive/gsa` at `ebb9cca`. Whether they supersede this line requires human confirmation.
