# Features — media.accreditations.sarugby.online

Evidence date: 2026-10-09. Source: `master` at `773e00f` (2020-01-10).

Status values used here:

- **Current** — present on `master` and reachable on the PIN session path, or always-on infrastructure.
- **Present, not wired** — code and views exist, but the PIN login does not establish the identity or the method the screen needs.
- **Planned** — named in navigation or comments without an implementation.
- **Removed / not in Git** — named by the onboarding brief or an older config and absent from `773e00f`.

No feature flags, changelog, or issue tracker were found in the source repository.

## Current

### PIN login for a fixed event

`LoginController::indexAction` compares the posted password to a shared PIN and stores event id `63` in session namespace `EVENT`.

- View: `application/modules/default/views/scripts/login/index.phtml`
- Controller: `application/modules/default/controllers/LoginController.php`

The login page title still says "SA Rugby - Load-in and Load-out". The form heading says PIN.

### Media accreditation collection dashboard

Home page "Accreditations By Company" lists organisations for the session event, with totals and a collected count, and expands to people.

- Controller: `IndexController::indexAction`, `getapplicantsAction`
- Query: `Model_AccreditationList::getApplications` reading `Accreditation_Collections`
- Views: `application/modules/default/views/scripts/index/index.phtml`, `getapplicants.phtml`
- Layout header: "HSBC Cape Town Sevens - Media" in `application/layouts/default.phtml`

### Search

Search box on the dashboard filters the same query by name, reference, organisation, ID number, role, or barcode.

- `index/index.phtml` function `SubmitSearch_Data`
- `AccreditationList::getApplications`

### Mark an accreditation collected

Collect is shown only when `ServiceStatus` is `7`. The button posts status `8`. The row is updated on `Accreditation_Applicants_Services` (`Status`, `LastUpdate`, `Collected`).

- `getapplicants.phtml` function `collectionAction`
- `IndexController::collectAction`

### Logout

Navbar item clears `Zend_Auth` and the session.

- `application/layouts/default.phtml`
- `LoginController::logoutAction`

### Supplier FAQ page

`/permits/questions` renders supplier vehicle-permit FAQ copy after the PIN session exists. It does not use company identity.

- `PermitsController::questionsAction`, `Questions()`
- `application/modules/default/views/scripts/permits/questions.phtml`

### Deployment description

CodeDeploy to `/mnt/data/www/html/sarugby.online/media.accreditations.sarugby.online/` and Bitbucket Pipelines steps for branches `qa` and `prod`.

- `appspec.yml`, `bitbucket-pipelines.yml`, `codedeploy_deploy.py`, `scripts/`

Those branches are not on the remote. See project-plan history.

## Present, not wired to the PIN session

These came across in the 2019-12-18 import. They are not the collection dashboard.

| Feature | Where | Why it does not complete on this host |
|---|---|---|
| Company login | `LoginController::LoginNow`, `getAuthAdapter` (`CompaniesLogin`) | Not called from the PIN form |
| Forgot / reset password | `LoginController::forgotAction`, `resetAction`; views `login/forgot.phtml`, `login/reset.phtml` | Implemented, but the PIN page does not link to them. Reset stores `md5` passwords and emails the new password |
| Company self-registration | `RegisterController` | Writes `CompanyEvents` for event `44`, not `63`. No PIN required |
| Email confirmation | `RegisterController::validateemailAction` | Depends on the registration email |
| Company profile | `CompanyController::profileAction`, `uploadAction` | Requires `Zend_Auth` identity, which the PIN does not set. Redirects to `/login/` |
| Staff list, add, edit | `UsersController` | Same `Zend_Auth` gate. Types include Driver and Technician |
| Company picture by id | `LoginController::companypicAction`, `uploadremotecompanyAction` | No auth check. Writes under `public/archives/companies/` |
| Request / save / duplicate / cancel permit | `PermitsController` create, add, save, duplicate, cancel, profile | `createAction` calls missing `Model_AccreditationList::getEvent`. Other actions read `identity` that `init` never sets. New permits would use status `2`; cancel would use status `5` |
| Footprint email relay | `PermitsController::postEmailToFp` | Call site commented out |
| Permit test email | `PermitsController::emailtestAction` | Sends to a hardcoded personal mailbox |
| Events list | `application/modules/default/controllers/EventsController.php` | Class is named `Companies_EventsController`, so Zend will not route `/events`. It also calls `getEvents`, which is not on `Model_AccreditationList`, and redirects to `/companies/login/` |
| Organisation profile | `OrganisationController::profileAction` | Empty action. Class name matches the controller |
| Org module-style controller | `OrgController.php` | Class is named `Company_OrgController`, so `/org` is not routed. Actions are empty |
| Authon registration stubs | `AuthonController` | `indexAction` and `newcompanyAction` are empty |
| Cancel-permit modal on the home page | `index/index.phtml` | Calls `cancelPermitNow`, which is not defined in that script |
| Sidebar "Company Profile", "Employees", "Events" | `application/modules/default/views/scripts/menu/main_menu.phtml` | Links are `#` or `/organisation/profile`. The default layout that the plugin selects does not include this partial |
| ID-number test action | `IndexController::testAction` | Prints a `Company_Members` row for a hardcoded ID number and exits. Not linked from the UI |
| Unused domain models | `application/models/` fixtures, squads, tournaments, news, nutrition, allergens, match commentary, GIR profile | No controller in this repository calls them |
| Dompdf | `public/dompdf` | Not referenced by the collection controllers |
| Alternate layout | `application/layouts/layout.phtml` | Title "Footprint - SA Rugby Tournament Management Portal". Layout picker forces layout `default` |

## Planned

No roadmap file exists.

The sidebar lists Current Events, Upcoming Events, and Completed Events with `href="#"`. Provenance: **Inferred** placeholder navigation from the imported theme, not a committed plan.

`application.ini` names layouts `admin`, `union`, `referee`, `gir`, and `accreditations`. The files are absent. Provenance: **Inferred** leftover configuration from the parent application.

## Recently changed

On 2020-01-10 (`de25dba` through `773e00f`), relative to the 2019-12-18 import:

- Database host set to `db.footprintapp.net` (previously `qadb.footprintapp.net`).
- CodeDeploy and Bitbucket Pipeline files added.
- Root `.htaccess` HTTPS and www redirect commented out.
- Login heading grammar corrected ("your PIN Number").

No product behaviour in the collection table changed in those commits.

## Deprecated / removed

Nothing in Git history deletes a feature after the initial commit. The initial tree is the feature set.

Not in `master` at `773e00f`, although the onboarding brief listed them at the scan-host root:

- `sonar-project.properties`
- `sonarqube_scan.bat`

Provenance: **Unknown**. They were not in the four commits.

A maintenance holding page in `public/index.php` is commented out (typos preserved in source: "curretly", "difficilties"). It is not active.
