# Features — saruefiling

Evidence date: 2026-10-04. Source: `master` at `9b734e0` (2019-07-03).

Status words mean:

- **Current** — reachable from the signed-in shell or from a menu that the layout renders.
- **Present, menu-gated** — controller and views exist; the default menu shows them only when the role JSON contains the matching key.
- **Present, not in the default menu** — controller exists. No item in `menu/default.phtml` points at it. Login is required where `init` checks identity.
- **Legacy copy** — a duplicate file beside the file the router uses.
- **Static dump** — files that are not wired to the front controller.

No feature in this repository is marked planned. No issue, TODO file, or roadmap describes future work. Nothing on `master` has changed since 2019-07-03, so there is no "recently changed" feature inside the product code after the bulk import.

`development` at `8f94d2d` (2019-07-04, "update Footprintfile") was not used as the behaviour source. See the project plan.

## Current features

### F-01 — SARU E-Filing shell

Current.

Signed-in layout titled `SARU:: Efiling`, with profile, logout, and calendar in the header, and a left navigation partial. The logo alt text is `footprintapp.net`. Dashboard content depends on `UnionType`.

Evidence: `application/layouts/default.phtml`, `application/views/scripts/menu/default.phtml`, `IndexController`.

### F-02 — Email login, logout, and password reset

Current.

`/login` requires `EFLogin` = 1. Success goes to `/` or `/first`. Logout clears the session. Failed login can email a reset link via `mail.sarugby.co.za`. A hardcoded password bypass exists in `LoginController` and is recorded under business rules, not as a product feature.

Evidence: `application/controllers/LoginController.php`.

### F-03 — First-login profile

Current.

`/first` collects a player profile when `JobType` is 2, otherwise a personnel profile, then sets `Status` to 1.

Evidence: `FirstController`.

### F-04 — E-filing forms

Current, menu-gated on `forms`.

Year-filtered list, form fill, save, submit, document upload, Excel download, president/CEO approval, and reopen-to-draft for `UnionType` less than 3.

Evidence: `EpgController`, `application/views/scripts/epg/`.

### F-05 — Form template builder

Current, menu-gated.

`/builder` for `UnionType` 1 or user ids 582 or 1, when `forms.Actions.financial` is set. Menu label is `Form Tamplates`.

Evidence: `BuilderController`, `menu/default.phtml`.

### F-06 — Personnel

Current, menu-gated on `members`.

List and add from the menu. Profile, edit, password, transfer, activate, deactivate, role assignment, ID check, and image upload exist as further actions.

Evidence: `MembersController`.

### F-07 — Organisations

Current, menu-gated on `organisations`.

List and create from the menu. Edit, delete, and autocomplete exist as further actions.

Evidence: `OrganisationsController`.

### F-08 — Plan and budget

Current, menu-gated on `grants`.

Projects (`/plan`) and, for `UnionType` less than 3, manage projects, grant categories, and grant classifications.

Evidence: `PlanController`, `CategoriesController`, `ClassificationsController`, `menu/default.phtml`.

### F-09 — Dashboard ethnicity and squad counts

Current, as part of the home action.

Counts from `squad` and ethnicity slices from `gir_profile`. There is no GIR controller and no `views/scripts/gir` directory.

Evidence: `IndexController::indexAction`, `application/models/GirProfile.php`.

### F-10 — Settings

Current for `UnionType` less than 3.

Access control, sent emails, and email templates.

Evidence: `AccesscontrolController`, `EmailController`, `menu/settings.phtml`.

### F-11 — Calendar

Current from the header, not from the left menu.

`/events/` lists, adds, edits, and deletes events. `CalendarController::indexAction` also exists.

Evidence: `layouts/default.phtml`, `EventsController`, `CalendarController`.

## Present, not in the default menu

| Feature | Controller | What the actions cover |
|---|---|---|
| Grants requests | `GrantsController` | List, request, approve (`Status` 3), reject (`Status` 4), reactivate (`Status` 1), PDF, download |
| Squads | `SquadController` | Add, edit, planner, members, squad sheet, ranking |
| Fixtures and match reports | `FixtureController` | Fixtures, teamsheet, commentary, citing, officials |
| Tournaments | `TournamentController`, `TournamentsController` | Tournament CRUD, squads, documents, stats |
| Schools | `SchoolsController` | Index, add, edit |
| Scouting | `ScoutController` | Players, squads, fixtures, ranking, PDF, Excel |
| Assessments | `AssessmentController` | Create, score, viewers, download, Excel |
| Performance questionnaires | `PerformanceController` | Categories, questions, answers, scores |
| Learning courses | `LearningController` | Courses, modules, admin |
| Financial forms | `FinancialsController` | National and union reports, headers, sections |
| Messaging | `MessagingController` | Index only |
| PDF and Excel helpers | `PdfController`, `DownloadController` | Players, squads, assessments, forms |
| Users admin | `UsersController` | Add, edit, password, delete, online users |
| Scout HTTP API | `AppController` | Login, send, scout payload, image |
| Maintenance page | `MaintenanceController` | Index. The splash in `public/index.php` is commented out |
| Personal utility | `AndreController` | Index and Excel. Purpose is not documented in the file |
| Database helper | `DbController` | `home` and `homes` |
| Mail test | `TestController` | `mail` action. This is not an automated test suite |

Provenance: **Implemented**.

## Legacy copies

| File | Note |
|---|---|
| `FixtureController_1.php` | Declares `class FixtureController`, same as `FixtureController.php`. The router loads `FixtureController.php` |
| `FirstController_old.php` | Declares `class FirstController` beside `FirstController.php` |
| `application/configs/Copy of application.ini` | Duplicate of the INI |
| `application/layouts/Copy of default.phtml` | Duplicate layout, same title |
| `Footprint_files/` | Second tree of application, library, and public files. The live front controller does not set `APPLICATION_PATH` there |
| `application/old/` | Older model copies, including `TestUsers.php` |

Provenance: **Implemented** as files on disk. They are not a second running application unless a server document root points at them. That deployment choice is **Unknown**.

## Static and vendor material

| Path | What it is |
|---|---|
| `new/` | Static HTML layout samples (navbar, boxed layouts). Not referenced by `public/index.php` |
| `library/Zend` | Zend Framework 1.11.10 |
| `library/PG` | Project plugins, including mail layout |
| `public/dompdf` | PDF library, with its own `composer.json` |
| `public/Classes` | PHPExcel |
| `public/charts` | Highcharts assets, including a Java export server whose deepest paths are too long for a default Windows checkout |
| `public/font-awesome-4.4.0` | Icons |
| `index_repo.html` | Single heading `blank repo master` |

## Removed or deprecated

No removal commit exists after the bulk import. Commented menu items (create form, create project) are still in `menu/default.phtml` with the link text commented out. Provenance: **Implemented** as hidden labels, not as a recorded deprecation.

`sonar-project.properties` and `sonarqube_scan.bat` were named in the onboarding task's directory listing and are not in this commit. They are not a removed feature of the product; they are absent from git.

## Completed versus in development

The repository does not label features as complete or in development. Every feature above is code that was imported on 2019-07-03 and not edited on `master` afterwards.
