# Features — logintuto

Evidence date: 2026-10-10.

Source: `git@bitbucket.org:overdrive/logintuto.git`, `master` at `f679256` (2020-04-02).

No features document existed in the source repository or in Silicon Ark. Status labels follow the code at that revision. "Completed" means the path is wired and produces a response. It does not mean the screen copy matches the server.

## Current features

| Feature | Status | Where | Notes |
|---|---|---|---|
| Login form | Current | `index.php`, `php/login.php` | Ajax. Echo `1` opens `dashboard.php`. Echo other than `1` shows an incorrect-credentials alert and clears the fields |
| Session redirect | Current | `index.php` | `$_SESSION['username']` sends the browser to `dashboard.php` |
| Sign up | Current | `signUpForm.php`, `php/signUp.php`, `js/validation.js` | Client checks, then insert into `user` when email and username are both new |
| Password strength meter | Current | `js/validation.js` `passwordCheck` | Runs on keyup for `#pass1` on sign-up, reset, and profile. It only changes a label. It does not block submit |
| Password class check | Current | `passwordValidation` | Digit, lower case, upper case, and one character from `` ~!@#$%^&*-_+=?>< ``. Used before sign-up, reset, and profile password Ajax |
| Email shape check | Current | `emailValidation` | Used on sign-up, recover, and profile details. TLD in the pattern is 2 or 3 letters |
| Logout | Current | `dashboard.php` link, `php/logout.php`, also `welcome.php` | Destroys the session when `username` is set and redirects to `index.php` |
| Dashboard sidebar | Current | `dashboard.php`, `css/dashboard.css` | Profile and Logout navigate. Home, Settings, Users, Help, Notifications are `href="#"` |
| Profile details | Current | `profileform.php`, `php/profile.php` `updatetUser` | Updates `username` and `email`. Writes `loguser` |
| Profile password | Current | `profileform.php`, `php/profile.php` | Updates `password` when the old value matches. The alert text is reversed relative to echo `1` / `0` |
| Forgot password | Current | `recover.php`, `php/email.php` | Writes a 20-minute token and sends HTML mail through PHPMailer. The success test is `indexOf('success')` |
| Reset password page | Current | `newPassword.php`, `php/reset_pass.php` | Query string supplies email and token. Server clears the token and stores the new password. The page's `indexOf(1)` test does not follow echo `1` |
| Login attempt log | Current | `php/login.php` `Insertdata('tblloginuser', ...)` | Results: `Login successful`, `Login failed : Incorrect password`, `Login failed : User not found` |
| Profile change log | Current | `SaveLog` in `php/functions.php` | Inserts `loguser` with JSON old and new username, email, and password |
| User group list | Current | `usergroup.php` | `SELECT * FROM tblusergroup`. Not linked from the dashboard |
| Add user group | Current | `usergroup.php`, `php/usergroups.php` | Inserts `strName` |
| Rename user group | Current | `updateUser` in `usergroup.php`, `php/usergroups.php` | Updates `strName` by `GroupID`. The response starts with the SQL text, so the success alert does not run |
| Last-login stamp | Current | `updateDate('last_loggedin', ...)` from `php/login.php` | Sets the column to `NOW()` |
| Created and modified stamps | Current | `updateDate('date_created' / 'last_modified', ...)` | Sign-up, profile, and reset |

## Completed, as far as the last commit

The tip commit subject is "all forms and dashboard" (2020-04-02). At that commit the login, sign-up, recover, reset, dashboard, profile, and user-group files are all present. Earlier commits added the same areas in pieces (see project plan). Nothing in git marks a feature as released.

## In development or unfinished in the source

These are still in the tree as comments or stubs. Provenance: **Documented** by the comment, **Implemented** only to the extent noted.

| Item | Evidence | What runs |
|---|---|---|
| Generic update helper | `UpdateTable` in `php/functions.php`: "not implemented yet" | Builds an UPDATE string and does not execute it |
| Generic select helper | `SelectData`: "works but not implement yet" | Runs the SELECT, echoes the SQL, returns rows. Called only from `php/test.php` |
| `selectUser` | `php/functions.php` | Reads one row. Does not declare `global $conn` and does not return. No page calls it |
| `insertUser` | `php/functions.php` | Inserts username, email, password and echoes `data inserted` or the MySQL error. Sign-up uses `Insertdata` instead |
| Email helper comment | `functions.php` line comment "email function still need to be added" | Mail is `php/email.php`, not a function in this file |
| `updatetUser` comment | "this must be changed !!!" | The function still runs the UPDATE |
| Group permission flags | Commented blocks in `php/usergroups.php` and `usergroup.php` | Not posted. Columns named there: `blnRead`, `blnWrite`, `blnNoAccess` |
| Dashboard group hide | Commented block in `dashboard.php` | Would read `$usergroup` and assign `1` inside the `if` |

## Present but unused by navigation

| File | Status | Evidence |
|---|---|---|
| `welcome.php` | Unlinked | Prints the session username and a logout link. No other file references `welcome.php` |
| `dashboard2.php` | Unlinked | Second layout. Stylesheet `css/dashbaord.css` is not in the repository. Logout control is not a link to `php/logout.php` |
| `php/resetPassword.php` | Unlinked | Older recover form. Ajax URL `email.php` (same directory). `recover.php` is the form `index.php` links to |
| `php/test.php` | Unlinked | Echoes `hello` and calls `SelectData('user', "")` |
| `php/updateuser.php` | Unlinked | `var_dump($_POST['checkRead'])` |
| `images/avatar.png`, `images/planet.jpg` | Unused | No reference from PHP, JS, or the project CSS files |
| `css/dash.css`, `css/newpassword.css`, `css/recover.css`, `css/register.css`, `css/signup.css`, `css/style.css` | Unlinked | No page `<link>` points at them. `style.css`, `signup.css`, `recover.css`, and `newpassword.css` import Google fonts Vidaloka and Viga |
| `js/ajax.js`, `js/document.js` | Empty tracked files | No page references them |
| `css/bootstrap.min.css`, `js/bootstrap.min.js` | Unused by pages | Pages that load Bootstrap load `css/bootstrap.css` and `js/bootstrap.js` |

## Planned

No roadmap, issue list, or TODO file is in the repository. The only forward-looking text is the source comments in the table above. Treating those comments as a committed plan would be an inference. **Unknown / Requires Confirmation** whether anyone still intends to finish `UpdateTable`, the group flags, or the email-function comment.

## Recently changed

Relative to the previous commit `6cfb19d` (2020-03-27, "login usage, usergroup display"), the tip `f679256` (2020-04-02, "all forms and dashboard") is the last change in git. A file-level diff of that commit was not re-expanded here; the subject and the presence of the form and dashboard files are the evidence. Nothing is dated after 2020-04-02.

## Deprecated or removed

Git history on `master` was not rewritten in this inspection beyond reading the 16 commit subjects. No commit subject says a feature was removed. `3f05b3a` (2020-02-27) is titled "reset repo". What that reset deleted is **Unknown / Requires Confirmation** without a content diff of that commit.

`php/resetPassword.php` and `dashboard2.php` look like earlier screens that the later pages did not replace by deleting the files. Provenance: **Inferred** from the lack of links, not from a removal commit.

## Source map

```text
index.php              login screen and session bounce
signUpForm.php         registration screen
recover.php            request reset email
newPassword.php        consume token
dashboard.php          sidebar shell
dashboard2.php         unlinked alternate shell
profileform.php        profile screen (includes dashboard.php)
usergroup.php          group table (includes dashboard.php)
welcome.php            unlinked greeting
php/db.php             mysqli connection
php/functions.php      insert, update, log, unused helpers
php/login.php          authenticate and log the attempt
php/logout.php         destroy session
php/signUp.php         duplicate check and insert
php/email.php          token and PHPMailer
php/reset_pass.php     apply the new password
php/resetPassword.php  unlinked recover screen
php/profile.php        profile and password posts
php/usergroups.php     insert and rename groups
php/test.php           helper probe
php/updateuser.php     dumps checkRead
js/validation.js       email and password checks
```
