# Features — smsa2020

Evidence date: 2026-10-03.

Source: `git@bitbucket.org:overdrive/smsa2020.git`, `master` at `6c61e14` (2020-02-10).

Status labels: **Current** (a request path in this repository runs it), **Partial** (code or view exists, the path is incomplete or unused by the public form), **Not present**.

No feature is marked removed. History does not show a deleted admin module. Models that nothing in this tree calls are recorded as partial leftovers. Whether they were copied from `superhero2020` is **Inferred** from merge commit `d00f80a`.

## Identity

| Feature | Status | Evidence |
|---|---|---|
| Repository name smsa2020 | Current as the Git name | Remote `git@bitbucket.org:overdrive/smsa2020.git` |
| Visitor title "Vodacom Super Hero Sunday (2020) - Accreditation Portal" | Current | `application/layouts/default.phtml` |
| Terms naming Vodacom Super Hero Sunday 2020 and the 2010 sports events Act | Current copy | `index/index.phtml` |
| Mail from-name and subject for that event | Current | `ApplicationController::sendMail` |
| Footer "© magus.events" | Current | `default.phtml` |
| SMSA as a product name on a page | Not present | Only the commit message "Changed for SMSA" and the repository name |
| Hardcoded event code `5E37C335A16AA` | Current | `IndexController::indexAction`, `ApplicationController::loginAction`, commit `6c61e14` |
| Previous code `5DEB6F11DDA93` | Not present at HEAD | Replaced in `6c61e14` |

## Public application

| Feature | Status | Evidence |
|---|---|---|
| Home wizard for one event | Current | `IndexController::indexAction`, `index/index.phtml` |
| Steps: Personal, Organisation, Photo, Finish | Current | `index/index.phtml` headings |
| Extra Apply step when linked rows exist | Current | `LinkedAccreditations` with `DateTo >= today` |
| jQuery Steps wizard, form hidden until it starts | Current | `style="display: none"` on `#Mainform`, `/assets/css/plugins/steps/jquery.steps.css` |
| Category and role dropdowns | Current | `getAccreditationCategoryPublic`, `getAccreditationRoleLive` |
| Roles filtered to the selected category in the browser | Current | `ChangeSelectCat` compares `ACID` |
| Media producer fields | Current | `#MediaOnly`, `Producer_Fullname`, `Producer_Email` |
| Openfield / Roth Media invitation radios | Not present | HTML comment in `index/index.phtml` |
| Photo crop and upload | Current | Cropper assets, `data[User_pic]` |
| Placeholder JPEG when the posted picture is empty | Current | `applyAction` |
| File size alert at 2097152 bytes, text says 1.5mb | Current | `ImageHasChanged` |
| Terms checkbox and modal from `TermsAndConditions` | Current | `index/index.phtml` |
| Optional event-note checkbox | Current | Shown when `AccreditationNote` is non-empty |
| SA Rugby supplier note | Current | Shown when role `reg` is 1; link `http://supplier.sarugby.online` |
| Duplicate email warning | Current in the browser | `GET /index/checkemail` |
| Server-side duplicate rejection | Not present | `insertData` inserts the posted row |
| Reference number (6 hex chars) | Current | `random_id(3)` |
| Thank-you modal with the reference, then reload after 5 seconds | Current | `index/index.phtml` ajax `complete` |
| Confirmation email when `EmailNotes` is set | Current | `EmailApplicant` |
| Submit while signed in | Not present on the apply route | `isloggedIN` redirects to the profile |
| Closed page on GET after `CloseDate` | Current | `application/closed.phtml` |
| Refuse insert after `CloseDate` | Not present | `applyAction` still inserts on POST |

## Account

| Feature | Status | Evidence |
|---|---|---|
| Sign-in with email and reference | Current | `login.phtml`, `loginnowAction`, `UserLogin` |
| Password authentication | Not present | Reference is matched as plain text |
| Session `user_session` with `Code` and `AAID` | Current | `loginnowAction` |
| Sign-out | Current | `logoutAction` |
| Profile with status, messages, services, zones | Current | `profileAction`, `profile.phtml` |
| Edit profile while New, Pending, or In Review | Current in the view | `status_locked` |
| Server refusal of edits when locked | Not present | `updateAction` writes the posted fields |
| Photo read from footprintapp.net | Current | `remoteFileExists` |
| Photo write to footprintapp.net | Current | `sendImage` |
| Local `SavePhoto` using `AC_PATH` | Partial | Defined on `ApplicationController`. `AC_PATH` is not defined in the tree. The apply path comments the call out. `IndexController` calls `$this->SavePhoto` and does not define that method. The public form does not post to `IndexController` |
| Attendance yes / no links | Current | `profile.phtml`, `attendanceAction` |
| Decline sets Status 2 | Current | `attendanceAction` when `att` is 2 |

## Status labels

Current in `profile.phtml`: New Application, Pending (`Pending == 1`), In Review (`Status == 0` and `DateApply < LastUpdate`), Confirmed (`Status == 1`), Declined (`Status == 2`), Approved (`Status == 3`).

Setting Confirmed or Approved: **Not present** in this repository.

## Other actions in ApplicationController

| Action | Status | Notes |
|---|---|---|
| `indexAction` | Partial | Assigns every role from `getAll`. No `application/index` content was reviewed as a public entry. Route exists because the controller does |
| `partnersAction` | Partial | Empty method. No `partners.phtml` |
| `applymultipleAction` | Partial | Does not call `isloggedIN`. Linked query has no `DateTo` filter. Success renders `application/thankyou.phtml` instead of echoing the reference. No nav link found |
| `applytestAction` | Partial | Starts with `isloggedIN` like `applyAction`. View `applytest.phtml` exists. Not the form `action` on the home page |
| `testattendanceAction` | Partial | Same attendance writes as `attendanceAction`, with a catch that prints the exception |
| `barcodeAction` | Partial | `include "Barcode39.php"`. That file is not in the repository. The barcode text is the literal `FD5T67` |
| `testAction` | Partial | Calls `sendMail` for a hardcoded recipient and exits. Address not reproduced |
| `checkemailAction` | Current | Same JSON shape as `IndexController::checkemailAction`. The home page calls `/index/checkemail`, not this action |

## Data access with no caller in the controllers

These models are in `application/models/` and are not constructed by `IndexController` or `ApplicationController`:

- `Accreditation` (`Accreditation`)
- `AccreditationAdministrators`
- `AccreditationHistory`
- `AccreditationPermits`
- `AccreditationGates` (`EventGates`)
- `AccreditationLoadingZones`
- `AccreditationLoadingServices`
- `AccreditationQueing` (`AccriditationApplicationQueing`)
- `AccreditationServices`
- `AccreditationTypes`
- `AccreditationEventServices`
- `AccreditationApplicationRole`

Status: **Partial**. They can run if some other include constructs them. No such include was found in the module controllers.

## Shell and deploy

| Feature | Status | Evidence |
|---|---|---|
| Browser gate (IE and unknown agents blocked) | Current | `default.phtml` `get_user_browsers` |
| Theme colour override when `Theme == 2` | Current | Inline CSS in the layout |
| Apache rewrite to `public/` | Current | Root `.htaccess` |
| Zend rewrite to `index.php` | Current | `public/.htaccess` |
| CodeDeploy to `superhero2020.magus.events` | Current in `appspec.yml` | Destination path still uses the superhero host name |
| Pipeline on `qa` and `prod` | Current | `bitbucket-pipelines.yml` |
| Pipeline on `master` | Not present | No `master` key |
| SonarQube project file | Not present in Git | Named in the onboarding issue's directory listing, absent at `6c61e14` |
| Automated tests | Not present | No test directory, no PHPUnit config |
| README or changelog | Not present | No Markdown in the source tree |

## Planned, in development, recently changed

**Planned:** nothing in the repository describes future work.

**In development:** no branch newer than `6c61e14` was inspected as unmerged work. `qa` and `prod` exist. Their tips were not diffed against `master` for this document.

**Recently changed, relative to the 2020 history:** commit `6c61e14` changes only the two hardcoded codes. The Vodacom Super Hero Sunday title and the CodeDeploy permissions were already in the tree before that commit (diff `d00f80a..HEAD` includes layout title, terms sentence, `appspec.yml` permissions, and `scripts/remove_archives.sh`).

**Deprecated:** commented footprintapp.net mailbox settings in `sendMail`. Commented maintenance splash in `public/index.php`. Commented invitation radios. None of these run.
