# Features — FootprintApp.net

Evidence date: 2026-10-14. Revision: `master` `629b199a`.

Status words: **Current** means present and reachable in that tree. **Completed** means a commit subject describes a finished change that is in `master`. **Planned** means described as future and not implemented. Nothing in git is explicitly marked planned. **Deprecated / retained** means still in the tree with the menu or caller commented, or kept as an old copy.

`origin/prod` after 2022-12-13 is not listed as current. See `project-plan.md`.

## Current features

### Identity and shell

| Feature | Status | Evidence |
|---|---|---|
| Email/password login returning JSON | Current | `default/LoginController::loginuserAction` |
| Terms check endpoint | Current | `checktermsAction` |
| Logout | Current | `logoutAction` |
| Password reset by emailed link | Current | `resetpasswordAction`, `resetAction` |
| Season profile as session identity | Current | `LoginNow`, `Model_DbTable_Profile::getForSeason` |
| Role-JSON navigation | Current | `views/scripts/menu/default.phtml` |
| Per-module layouts | Current | `PG_Controller_Plugin_LayoutPicker` sets the layout to the module name |
| Host-specific shell for `admin.magus.events` | Current | Menu and profile link skipped for that `SERVER_NAME` |
| Dashboard ethnicity counts, fixtures, officials, transfers, registrations | Current | `IndexController::indexAction` |
| Clubs dashboard and "new" dashboard | Current | `UnionType` > 3 and `UnionType` == 11 |
| Online user count for `UnionType` < 3 | Current | Menu partial markup. How the count is filled is a script in the layout; the poll action was not isolated. |

### People and organisations

| Feature | Status | Evidence |
|---|---|---|
| List, add, and view organisations | Current | Menu; `OrganisationsController` |
| List users, add user, transfers | Current | Menu; `MembersController` |
| Member profile | Current | `/members/profile/id/{id}` |
| User types, including a squad flag and a Player type name | Current | `Model_UserType` |
| Access-control list that hides `Private` rows unless `UnionType` is 1 | Current | `Model_AccessControl::getAll` |
| Duplicate-user administration | Current | Menu `/users/` labelled "Manage Duplicates"; `UsersController` |
| Bonafide uploads | Current | Menu `/members/bonafideuploads` |
| Generated password emailed in plaintext, stored as md5 | Current | `MembersController` |

### Competition

| Feature | Status | Evidence |
|---|---|---|
| Manage tournaments | Current | `/tournament/`, `TournamentController` |
| List fixtures | Current | `/fixture/`, `FixtureController` |
| List and create squads | Current | `/squad/`, `/squad/create`, `SquadController` |
| BokSmart column on squad spreadsheets | Current | `union/SquadsController` writes header `BokSmart` |
| Match official positions on fixtures | Current | `Model_MatchOfficialPositions`; dashboard |
| Leagues, cities, stadiums ("Add Vanue") | Current | System Settings menu |
| Society league structure and national panels | Current | `/referees/societyleagues/`, `/referees/societypanels/` |
| Live scoring by fixture id | Current | `live/ScoreController::scoringAction` |
| Live timer and calendar | Current | `live/TimerController`, `live/CalendarController` |
| Referee and public calendar modules | Current | `referee`, `pub` |
| Add tournament popup for user id 1 | Current | Menu |

### Accreditation and events

| Feature | Status | Evidence |
|---|---|---|
| Accreditation list and add | Current | Menu; `default/AccreditationController` |
| Permit HTML and PDF | Current | `PdfController::getpermitAction`, `AccreditationController::getpermitpdfAction` |
| Accreditation application, checkout, collections | Current | `accreditations` module |
| Scanner APIs (applicants, Android file variants, VAP, images, scan log) | Current | `api/AccreditationController` |
| MyPass-style registration, health certificate, symptom check, events, styling, terms | Current | `api/MypassController` |
| Ampath result push and related reads | Current | `api/AmpathController` |
| Hospitality import changes in December 2022 | Current on master | Commit `2d377106` |
| CR80 terms spelling fix | Current on master | Commit `a2c37f16` |
| Printers module | Current | `printers/IndexController`. What it prints is **Unknown**. |

### Other staff tools

| Feature | Status | Evidence |
|---|---|---|
| Assessments (mine, list, add) | Current | Menu; `AssessmentController` |
| Scout list and player list | Current | Menu; `ScoutController` |
| Blue card cases | Current | Menu `/bluecard/`; `BluecardController` |
| News articles | Current | Menu; `CmsController` |
| Food sessions, nutrition, allergens, venues | Current | Menu; `FoodController` |
| E-filing forms, templates, projects, categories, classifications, grants | Current for four user ids | Menu; `Ef*` controllers |
| InSight / Superset pages | Current for four user ids | `EftournamentsController` superset actions |
| Team Zone (`union` module) | Current for listed user ids, and as a redirect for many union users | Menu; `IndexController::init` |
| SMS to tournament lists, a profile, team managers | Current | `SmsController` |
| Email send | Current | `EmailController::sendAction`; `EmailLayout` |
| Participation report generation action | Current | `CronController::participationgenerateAction` |
| Blue-card consent cleanup action | Current | `CronController::bluecardconsentscleanupAction` |
| Terms, privacy, cookies pages | Current | Matching controllers |

### API surface (current actions)

Module `api`, Zend routes `/api/{controller}/{action}`:

- `accreditation`: scan profile, events, applicant updates (including Android), VAP and VAP updates, images, services, pictures, scan log
- `ampath`: push results, get results, screening, symptom check, login, post accreditation, organisation, event, events per user
- `documents`: upload document
- `fixtures`: upload commentary, show file, get details (timer fields added in `d55b45d6`), lists, match report, scores, logs
- `getdata`: tournaments and logos (two `tournamentsAction` methods exist in one class)
- `login`: login, fixtures, squads, match report, scores, logs
- `mobileupdates`: get teams
- `mypass`: results, details, screening, symptom check, password, profile, accreditation, registration, organisation, styling, terms, events
- `players`: profile, photo
- `teams`: profile
- `tournaments`: tournaments, squads, logs, news, profile, teams
- `tourn`: squad, career, commentary, leagues, list, profile, match report, logs, top scorers, fixtures, logos

Backup copies sit beside some of these files (`*.bak.stop`, `*.110719`) and are not separate routes.

## Completed changes visible in history

These are in `master`. The list is the recent subjects, not a full 1578-commit history.

| When | Change | Provenance |
|---|---|---|
| 2019-05-13 | Member list Excel gained a column between Gender and Age | **Documented** in `changelog.txt` |
| 2019-05-17 | Squad checklist export uses the checklist document type and the last upload for the current year | **Documented** in `changelog.txt` |
| 2022-12-01 | Extra timer information on `api/fixtures/getdetails` | Commit `d55b45d6` |
| 2022-12-05 | CR80 terms and conditions spelling | Commit `a2c37f16` |
| 2022-12-06 | FP3 squads use a default position and "unassigned" when none is set | Commit `cbe06447` |
| 2022-12-07 | Access rights shown on other users' profiles | Commit `df32796a` |
| 2022-12-11 | Applicant and calendar "last updated" dates on `api/accreditation/getapplicantsandroid` | Commit `836ac5c1` |
| 2022-12-11 | Hospitality import includes a service; hospitality service status set to 7; service stored on the application; removed from the normal import | Commit `2d377106` |

## In development

Not on `master`. Remote branch names show work that was named but not merged here, including `accreditation-02-16-2023-cr80`, `efiling-09-01-2023`, `fp3-officials-19-01-2023`, `fp4_club_squad_fixes`, `organisations-13-12-2022`, and numerous `feature/FN-*` and `bugfix/FN-*` branches. Some of those names also appear in `origin/prod` history after this revision. Their code is **not** current for this document.

**Planned:** none stated in the repository.

## Deprecated, commented, or retained

| Item | Evidence | Reading |
|---|---|---|
| GIR menu item "Get Into Rugby" | Commented in `menu/default.phtml` | Menu hidden. Module `gir` still has fixtures, squads, members, tournaments. **Retained.** |
| Distance learning menu | Commented block pointing at `/learning/` | `LearningController` remains. **Retained.** |
| Jotform menu | Commented | `EfjotformController` remains. **Retained.** |
| Referee assessors menu item | Commented, and only inside `UnionType` < 3 | **Retained** as a comment. |
| `union_old` module | Full controller set parallel to `union` | **Retained** copy. No menu link was found. |
| `Copy of SquadsController.php`, `*.bak`, `TournamentController.existing.php`, `TournamentController.changed.php` | Sibling files | **Retained** files. Zend routes the unsuffixed class only. |
| Commented `_initDb` in `Bootstrap.php` | Older database `evolveci_sarugry` | Not executed. |
| Commented HTTPS redirects | Root `.htaccess` | Not executed. |
| `index.html` at repository root | Body is `Start TID: 295inserted tournament: 295` | Not the application home. The rewrite sends site traffic to `public/`. |
| `phpinfo.php` at repository root | Present in git | A commented rewrite exception mentions it. Whether it is reachable is **Unknown**. |
| `changelog.txt` after May 2019 | No further entries | Not a current change log. `footprint_changelog.txt` is empty. |

## Removed

No removal log exists. Features cannot be marked removed from absence in the menu alone, because the controllers are still in the tree.

## Source map

| Area | Path |
|---|---|
| Front controller | `public/index.php` |
| Config | `application/configs/application.ini` |
| Menu | `application/modules/default/views/scripts/menu/default.phtml` |
| Models | `application/models/` |
| APIs | `application/modules/api/controllers/` |
| Deploy | `bitbucket-pipelines.yml`, `appspec.yml`, `codedeploy_deploy.py`, `scripts/` |
