# Features — userModule

Evidence date: 2026-09-29. Revision: `master` `a8971a4` (2019-06-24).

The source feature list is the four phases in `README.md`. Status below is from that file, the PHP screens, `clientsideUserFormValidation.js`, and git history.

## Current features

| Feature | Status | Where |
|---|---|---|
| Login form (email, password, submit, cancel) | Current | `login.php` |
| Link from login to registration | Current | `login.php` |
| Registration create form | Current | `registrationForm.php` |
| Home create form | Current. Same insert as registration | `userForm.php` |
| Link from home and edit to each other | Current | Nav on `userForm.php` and `editUser.php` |
| Link from registration back to login | Current as a nav item, not as a post-success redirect | `registrationForm.php` |
| Date-created display (today) | Current. The create server path ignores the input and writes `date("Y-m-d")` | Create pages. Edit sends the field |
| First name, last name, ID number, date of birth, email, gender, user type, notes | Current | All three data forms |
| Password and confirm password | Current on create only | `userForm.php`, `registrationForm.php`, `validation()` |
| MD5 of the escaped password | Current | Create insert and login compare |
| Active / Inactive checkboxes | Current. Stored value follows the inactive box. See business rules | All three data forms |
| User type dropdown | Current. Hardcoded three options | Same forms. Not loaded from a table |
| Client-side `validation()` | Current on the create forms | `clientsideUserFormValidation.js` |
| Duplicate ID check before insert | Current when the table is non-empty | Both create scripts |
| Prepared insert of 11 columns | Current | Both create scripts |
| One-row table of the values just posted | Current | Create pages. Not a full user list |
| Full user list | Current | `editUser.php` |
| Click a list row to fill the edit form | Current. Does not fill user type | Inline script in `editUser.php` |
| Update by ID number | Current. Does not change `txtPassword`. GET | `editUser.php` |
| Delete by ID number | Current. GET. No confirm dialog | `editUser.php` |
| mysqli connection for `localhost` and `lamp` | Current | `dbconnection.php` |
| Bootstrap 4.3.1 page layout | Current via CDN | All four screens |
| Footer "© 2019 Copyright. Banele" | Current | All four screens |
| Xdebug launch configs on port 9000 | Current in git. Not used at runtime | `.vscode/launch.json` |

## Documented and not built

| Feature | README | Code |
|---|---|---|
| POST only the ID number to PHP under `api/` | Phase 1 step 4 | No `api/` directory in history. Create posts the whole form to the same file |
| Table of user types, add a type, archive a type, link it to the user | Phase 3 | No type table and no archive action |
| Username separate from the other fields | Phase 4 step 1 | Login uses `txtEmail` |
| Authentication that later pages enforce | Phase 4 step 3 | Login does not start a session. Home and edit do not check a login |

## Present in the tree, not a product feature

| Item | Evidence |
|---|---|
| Smart Admin 2.0 demo (`template/`, 415 tracked files) | Added in `c3de433`. Title in `template/index.html` is "Dashboard | Smart Admin 2.0". No PHP file references `template/` |
| `formValidation.php` | Echoes undefined `$msg` and "PHP file executed". No `include` of this file |
| `print_rr` | Defined in `projectFunction.php`, included from `dbconnection.php`, never called |
| Commented insert using `usr_*` column names | `userForm.php` only. Not executed |
| "Dormant" checkbox | Commit `3949b979` (2019-06-18). Not in the files at HEAD |

## Planned

The only written plan is `README.md`. Phase 3 is still only that list. No issue, branch, or comment describes work after 2019-06-24.

Commented-out alerts and the old column names are inactive code, not a backlog.

## Recently changed

At HEAD, "recent" is June 2019. The last three days of commits:

| Date | Commit | Change |
|---|---|---|
| 2019-06-23 | `0f46e0e` | ID-number duplicate check on create |
| 2019-06-23 | `45ea743` | MD5 on login and create. Commit subject also mentions a post-register link to login |
| 2019-06-23 | `61c96df`, `5afc2dc` | Update and delete statements on `editUser.php` |
| 2019-06-24 | `a8971a4` | Small edits to the edit, registration, and home forms. Subject restates create, read, update, delete, login, and MD5 |

## Removed or renamed

| Item | What happened |
|---|---|
| `usersForm.html` | Static form. Renamed to `usersForm.php` and then `userForm.php` in `3be3585` (2019-06-16) |
| Dropdown that did not submit a value | Early `usersForm.html` used anchor items. Later replaced by a `<select>` |
| Dormant status | Added 2019-06-18, not present at HEAD |
| Success alert on database connect | Present, then commented out in `dbconnection.php` |

## Not in git, seen on the scan host

The onboarding inventory listed `sonar-project.properties` and `sonarqube_scan.bat` at the repository root. `git log --all` has no history for either name. They are not current features of `master`.
