# Features — matchcentre.footprintapp.net

Evidence date: 2026-10-09. Source: `master` at `3bd3534`, with `origin/prod` (`160e70b`) called out where it differs.

Provenance: **Documented**, **Implemented**, **Inferred**, **Planned**, **Unknown**.

No feature list existed in the source repository. Status below is evidence from code and git, not a release record.

## Current (present on master)

### Public match centre

| Feature | What it does | Source |
|---|---|---|
| Tournament home | Tabs for Featured, International, National, Provincial, each with Current, Upcoming, Completed | `application/modules/default/controllers/IndexController.php`, `views/scripts/index/index.phtml` |
| Tournament profile | Log, matches, teams, stats | `TournamentsController::profileAction`, `views/scripts/tournaments/profile.phtml` |
| Match page | Fixture, officials, line-up, recent results, upcoming fixtures. Hidden fixtures redirect home | `TournamentsController::matchAction` |
| Commentary | Event list and score for one fixture, no site layout | `TournamentsController::commentaryAction` |
| Match report PDF | DOMPDF stream of remote HTML | `TournamentsController::getmatchreportAction` |
| Team page | Squad, player bio fields, season counting stats | `TournamentsController::teamAction` |
| Latest results and upcoming strip | Up to eight closed games and up to eight upcoming games on the home page | `IndexController::lasttestresults`, `upcomingfixtures`; `Model_Fixture::GameResults`, `fixturesUpcoming` |
| SA Rugby chrome | Banner `FP-MatchCentre-Banner01.jpg`, title "SA Rugby - Official Home of the Springboks", Google Analytics `UA-125030318-1` | `application/layouts/default.phtml` |

### Cache and feed

| Feature | What it does | Source |
|---|---|---|
| Archive JSON and JPEG writer | Home and `/ajax/getdata` write tournament, log, and squad files under `public/archives` | `IndexController`, `AjaxController` |
| Incremental refresh | `/ajax/getdata` selects rows with `Updated` after `public/archives/lastupdate.txt` | `AjaxController::getdataAction` |

### Accounts

| Feature | What it does | Source |
|---|---|---|
| Login | Email and password against `co_credetials` when `FPLogin = 1`, MD5 password, profile stored in the session | `application/modules/default/controllers/LoginController.php` |
| Password-reset email | Sent when the stored password is empty, or when a profile email has no credential row | `LoginController::sendResetLink` |
| Reset and logout | Reset action reads the key. Logout clears auth and the session | `resetAction`, `logoutAction` |

### Blue Card

| Feature | What it does | Source |
|---|---|---|
| Consent form | Incident cause, union, applicant role, player details | `application/modules/bluecard/controllers/IndexController.php` `indexAction` |
| Submission email and save | Mail with concussion attachments, insert into `BlueCard_Consents` | `submitAction` |

### Food menu

| Feature | What it does | Source |
|---|---|---|
| Venue list | Venues for id 284 | `application/modules/menu/controllers/IndexController.php` |
| Dates, menus, item, nutrition | Session dates, items, nutrition, allergen list | `Menu_SessionController` |

### Other code present on master

These trees exist and were not confirmed as live Match Centre features.

| Feature | Evidence | Status |
|---|---|---|
| Company registration, profile, permits, users, organisation | `application/modules/companiesold` | **Implemented** code. Use **Unknown** |
| Online company/org forms | `application/modules/companyonl` | **Implemented** code. Use **Unknown** |
| Accreditation PDF queue and AppWizard POST | `CronController::queingAction`, `senddata_to_Api` | **Implemented** code. Required model files are absent from `application/models`. Operational status **Unknown** |
| News page | `NewsController` assigns tournaments, news, and two JSON files via undefined constant `UPDATES_PATH` | **Implemented** code. Reliability **Unknown** |
| Nested `website/` application | 15,545 tracked paths | **Implemented** files. Serving role **Unknown** |

## Completed

Git does not label releases. The following are finished only in the sense that they are in history and still in the tree:

- Initial import, 2022-07-05 (`502c4db` and `80a080d`).
- CodeDeploy appspec and ini updates, 2022-10-19.
- Styling change that is the `master` tip, 2023-01-13 (`3bd3534`).

No changelog or ticket in the repo marks a feature done.

## In development

No branch name, TODO, or issue in the repository describes work in progress.

`origin/dev-19-10-2022` was merged to `qa` and `prod` on 2023-02-08. It is not ahead of `prod`. It is ahead of `master`. Treat it as a historical integration branch, not an open development line. **Inferred** from `git log`.

## Changed recently (relative to master)

On `origin/prod` and `origin/qa`, not on `master` (`git diff master origin/prod` limited to application code: four files):

| Change | Where |
|---|---|
| Home year is no longer forced to 2019. Debug `print_r` of the year is commented out | `IndexController::indexAction` |
| Tournament query uses an end-date window instead of `StartDate >= {year}-01-01` only | same action |
| A tournament is placed in the selected year by `EndDate`, not `StartDate` | same action |
| `Model_Tournament::getAll` splits `where` and `order`, and contains a commented SQL echo | `application/models/Tournament.php` |
| Default layout styling (30-line diff) | `application/layouts/default.phtml` |
| `application.ini` differs by two lines | file is tracked; contents are not quoted because they include credentials |

Commit messages on that range: "Fix header banner image", "Change styling. changes for query select tournaments to check start and end dates", "Updated query to get tournaments started last year and still active", ini updates, then merges into `qa` and `prod`.

## Planned

None found. No roadmap file, no unmerged feature branch with unique commits beyond `prod`, and no product issue inside the git repo.

## Deprecated or removed

| Item | Evidence | Status |
|---|---|---|
| Maintenance splash in `public/index.php` | The HTML and `exit` are commented out | **Implemented** as disabled code |
| `fixturesCompleted` | Query body is commented out; method returns nothing | **Implemented** as a stub |
| News tab on the tournament profile | Nav link commented out in `profile.phtml` | **Implemented** as hidden UI. `newsAction` is an empty method |
| Blue Card `isPost` guard | Commented out, so `submitAction` does not require POST | **Implemented** |
| `companiesold` name | Module directory is literally `companiesold`. **Inferred** as an older copy. Not confirmed by a comment | **Inferred** |
| Duplicate files | `Copy of AjaxController.php`, `Copy of Fixture.php`, `Copy of companies.phtml`, and similar "Copy of" views are still in the tree | **Implemented** leftovers. They are not a second supported feature |

## Test and debug actions still routed

Zend's default routing exposes these as URLs. They are not a test suite.

| Action | Behaviour |
|---|---|
| `/index/test`, `/index/indextest`, `/index/indexdump` | Dump or alternate home builders, some `exit` after `print_r` |
| `/tournaments/testupdate` | Hardcodes tournament id 209 and prints a log file |
| `/tournaments/profiletest`, `/tournaments/matchtest`, `/tournaments/resulttest` views | Parallel test actions and views |
| `/ajax/test` | Prints fixture rows and exits |
| `/cron/testarea`, `/cron/autorun` | `autorun` only disables the layout. `testarea` prints tournaments |
| `/bluecard/test` | Sends the concussion email to a hardcoded recipient |

**Inferred:** these were developer probes left on the public router. Whether production blocks them is **Unknown / Requires Confirmation**.

## Not features

- `test/` at the repo root (favicon, `test.php`, FastCGI and SSI samples). It does not call the Match Centre.
- Vendored `library/Zend` (framework) and the Sportsline/WooCommerce/Contact Form 7 assets under `public/wp-content`. They style the page. A WordPress or WooCommerce application was not found.
- `sonar-project.properties` and `sonarqube_scan.bat`. Scan tooling only.
