# Features — knowmore_php84 (Knowmore)

Evidence date: 2026-10-11. Source: `git@bitbucket.org:overdrive/knowmore_php84.git`, `master` at `2e5a13d0` (2020-10-19), plus unmerged `origin/successionservive` (`449bf1a9`, 2026-07-23) and `origin/feature/manual-adhoc-invoice` (`e6c45b3d`, 2026-07-23).

There is no features document in the source repository. Status labels:

- **Current** — present on `master` and referenced by an entry point or a class other code uses.
- **Completed** — called out by a commit or comment as finished work, and still in the tree.
- **In development** — commits exist on a remote branch and are not merged to `master`.
- **Planned** — described as future work. None was found as a written backlog.
- **Deprecated / removed** — comments or filenames say it should not be used, or a newer path replaced it, while the file may still be present.
- **Uncertain** — the file exists; production use was not established.

## Current — public site

| Feature | Where | Notes |
|---|---|---|
| WordPress front | `index.php`, `wp-blog-header.php` | WordPress 5.2.3 |
| Knowmore theme | `wp-content/themes/knowmore/` | Version 1.0, author Ekkra IT Solutions. Also contains `twentynineteen` |
| Primary menu | `header.php` `wp_nav_menu` location `primary` | Items live in the database |
| Latest blog posts page | `page-latestblogposts.php` | Learner home iframes `latestblogposts/?limit=2` |
| HTTPS redirect and front controller | `.htaccess` | Also denies `wp-config.php` and `.user.ini` |
| Wordfence WAF prepend | `.user.ini`, `wordfence-waf.php` | Absolute path under `/usr/www/users/knowmvpnxm/` |
| Robots and sitemap | `robots.txt`, `sitemap.xml` | Present |
| Search-engine verification file | `google82a264ecb0e0454e.html` | Filename only. Contents not treated as a product feature |

Plugins present under `wp-content/plugins/`: advanced-custom-fields, advanced-iframe, advanced-iframe-custom, bad-behavior, cms-tree-page-view, contact-form-7, disable-xml-rpc, fetch_wp_contents, gotmls, iframe, list-category-posts, post-types-order, really-simple-captcha, social-networks-auto-poster-facebook-twitter-g, taxography, visit_count, wordfence, wordfence-assistant, wordpress-seo, wp-modal-login, wp-page-tree, wp-pagenavi, wp-plugin-afac_1.4b, wp-slimstat.

## Current — registration and login

| Feature | Where |
|---|---|
| Learner login and inactive-account message | `login.php` |
| Registration-purchase redirect into OMW purchase | `login.php` `Action=Redirect` → `training/purchase.omw.php` |
| Phase 3 registration | `register.ph3.php`, `register.changes.php` |
| Course, workshop, WI, and tools registration | `register.courses.php`, `register.workshops.php`, `register.wi.php`, `register.tools.php` |
| RSVP and special-code registration | `register.rsvp.php`, `register.special.php` |
| Invite and risk registration entry points | `register.invite.php`, `register.risk.php` |
| Older typography registration | `register.typo.php`, `register.php` |
| Learner forgot password | `forgot.password.php`, `forgot.password.wp.php` |
| Session bridge | `second.wp.php` (training sends anonymous users here) |
| reCAPTCHA | `modules/recaptchalib.php`, used by register scripts |
| Salted password check | `webadmin/_nemo.password.cls.php` |

## Current — learner portal (`training/`)

| Feature | Where |
|---|---|
| Home, last login, hidden WPS and user-category blocks | `training/index.php` |
| Courses and modules | `home.courses.php`, `course.php`, `module.php` |
| WI modules and AVP pages | `module.wi.php`, `home.wi.php`, `avp.wp.*.php`, `avp.my.info.php`, `avp.my.team.php` |
| Workshops | `home.workshops.php`, `workshop.php` |
| Assignment upload with a three-file counter | `module.php` case `Submit` |
| My assignments (comment: past two years) | `my.assignments.php` |
| CPD points page, including IWP package rows | `my.cpd.points.php` |
| Forums | `forum.php`, `general.forum.php` |
| Profile | `profile.php`, `learner.profile.php`, `profilepictures/` |
| Purchases and transactions | `purchase*.php`, `transactions.php` |
| In-portal survey | `survey.php` |
| Business-tools handoff | `home.tools.php`, `login.business_tools.php` |
| Messages | `message.php` |

Layouts used by the learner area live in `layouts/` (`layout.learner.*`, `layout.AVP.*`, `layout.module.incl.php`, `layout.survey.incl.php`, `layout.typo.incl.php`).

Side modules in `modules/`: login, password-change check, user-type check, learner ads, available modules, latest forum, students, AVP side menu, Google Maps, reCAPTCHA library.

## Current — business tools (`tools/`)

| Feature | Where |
|---|---|
| Advisor shell and industry save | `tools/index.php`, `sidebar.php` |
| BAT and BAT 2020 | `bat*.php`, `bat_2020.*` |
| BAT charts and statistical report assets | `bat.chart.php`, `barcharts.php`, commits through 2020-06 |
| Client satisfaction survey (CAT) | `cat.class.php`, `cat.engine.php`, `cat.pdf.php`, `cat.export.php`, `cat.unregister.php` |
| TCF, RDR, PoPI, and succession-planning gap analyses | `gap.TCF.*`, `gap.RDR.*`, `gap.PoPI.*`, `gap.SCP.*` |
| Income and expense / practice setup | `ie.class.php`, `ie.*.sav.php`, `practice.setup.php` |
| LIT and BCH engines | `lit.*`, `bch.*` |
| BPW and UNJ registration | `bpw.registration*.php`, `unj.registration*.php` |
| Invoices and encrypted PDF helpers | `generateinvoice.php`, `invoicePDF.php`, `pdfencryption.cls.php` |
| PayGate result callback | `payGateResults.php` |
| Netcash purchase | `purchase.netcash.php`, `unj.netcash.php` |
| Product PDF and Excel | `product_pdf.php`, `product_excel.php`, `product.php` |
| Excel report stack | `tools/Excel/`, commits 2020-03-30 through 2020-04-02 |
| Tool crons | `cron.daily.php`, `cron.hourly.php`, `cron.weekly.php` |
| Unsubscribe and forgot password | `unsubscribe.php`, `forgotpassword.php` |

## Current — web admin (`webadmin/`)

| Feature | Where |
|---|---|
| Admin login, logout, password reset | `login.php`, `resetPassword.php` |
| Security-group menu | `_nemo.menu.cls.php` |
| Home: today's bookings and two-day usage log | `index.php` |
| Learners, courses, modules, workshops | `learner.php`, `course.php`, `module.php`, `workshop.php` and matching `includes/*.cls.php` |
| Module parts: assignment, forum, note, practical, question, video | `mod.*.php` |
| Practices, licences, invoices, vouchers | `practice.php`, `licence.php`, `invoice.php`, `voucher.php` |
| Users, types, categories, security groups | `user.php`, `user.type.php`, `user.category.php`, `security.group.php` |
| CPD, email, templates | `cpd.points.php`, `email.php`, `email.template.php` |
| Articles, adverts, clients, contacts | `articles.php`, `advert.php`, `client.php`, `contact.php` |
| Geography and venues | `country.php`, `region.php`, `venue.php` |
| Products, RSVP, SLA quote and service | `product.php`, `rsvp.php`, `sla.quote.php`, `sla.service.php` |
| Wealth intelligence admin | `wealth.intelligence.php` |
| Settings and usage log page | `settings.php`, `usage.log.php` |
| Daily, hourly, and FIM crons | `cron.daily.php`, `cron.hourly.php`, `cron.fim.php` |
| Detail screens | `_nemo.details.cls.php` |
| Second database class | `_nemo.database2.cls.php` (PHP 7.2 update, commit `da77d1f3`) |

## Current — platform

| Feature | Where |
|---|---|
| Host-keyed MySQL and sessions | `webadmin/system.php` |
| NemoFIM permission reset | `fim_2.0/`, `_nemo.fim.cls.php`, `cron.fim.php` |
| HTML-to-PDF | `htmltopdf/` |
| FTP deploy of `master` | `bitbucket-pipelines.yml` |

## Completed (still on master)

| Feature | Evidence |
|---|---|
| PHP 5.6 compatibility pass | Comments dated 2015-07-23 in `system.php`, `cat.class.php`, `cron.daily.php` |
| PHP 7.2 `NemoDatabase2` | Commits `da77d1f3`, `37fadcd2` (2020-03-09) |
| Password policy and reset interval | `_nemo.password.cls.php` (2016-09-21 onward) |
| Phase 3 registration and learner session fields | `register.ph3.php`, `login.php` |
| BAT 2020 results, pie charts, filters, Excel, PDF covers | Commits 2020-03-09 through 2020-06-10 |
| FSCA wording instead of FSB on report covers | Comment 2019-04-03 in BAT and gap classes |
| Assignment re-upload counter | `313c4dd2` and `training/module.php` |
| Usage log without password column | `webadmin/index.php` comments 2017-11-03 and 2018-07-27 |
| Column default string `NULL` cleared on details forms | `2e5a13d0` |

## In development (not merged)

On `origin/successionservive` and included in `origin/feature/manual-adhoc-invoice`:

| Feature | Evidence |
|---|---|
| Succession service and service-type admin | `webadmin/successionservice.php`, `successionservice.type.php`, `includes/successionservice.cls.php`, `includes/successionservicetype.cls.php` |
| Succession tables and voucher column | `webadmin/CREATE TABLE tblSuccessionService*.sql`, `ALTER_tblVoucher_refSuccessionServiceTypeID.sql` |
| PHP 8-style quoting and declared properties | Example diff of `training/_nemo.basic.cls.php` (commit `159c9585`) |
| html2fpdf PHP updates | Commit `78d4c002` |
| Learner header link "My Profile" | Same basic-class diff |
| Removed duplicate hourly cron scripts | Deletes of `cron.hourly1.php` through `cron.hourly8.php` and several `.bak` crons |
| Added admin classes | `includes/resources.cls.php`, `includes/workbook.cls.php`, `includes/iwp.declined.list.cls.php`, `webadmin/setup.email.php` |

On `feature/manual-adhoc-invoice` only:

| Feature | Evidence |
|---|---|
| Removal of generated PDFs under `PDF/` | Commit `e6c45b3d` "remove system generated PDF's" |

No commit on that branch, beyond the name of the branch, describes a manual ad hoc invoice feature. Ad hoc email templates already exist on `master` (`case "AdHoc"` in `cron.hourly.php`).

## Deprecated / removed / leftover

| Item | Evidence |
|---|---|
| BAT 1 versus BAT 2 database switch | Comment 2016-05-06: "depreciated". Old `bat.engine.php` files remain |
| WPS block and user-category block on learner home | Comment 2017-03-08: permanently hidden. Query still runs |
| MD5 password compare on normal login | Commented beside `NemoPassword` in `login.php`. Still used by `Action=Redirect` |
| `tools/system.inc.LIVE.php`, `system.inc.DEV.php`, `xsystem.inc*.php` | Present. The only include found for `system.inc.DEV.php` is commented out in `cat.header.php` |
| `zcron.*` and `cron.hourly1.php`–`cron.hourly8.php` | On `master`. The numbered hourly files are deleted on the 2026 branches |
| Backup copies | `cat.class.php.bak`, `user.php.bak`, `index.php.bak`, `my.cpd.points.php.bak`, `*.php.old` |
| Nested `tools/webadmin/` | Older screens. Several includes of `system.inc.php` are commented |
| Sample video (Big Buck Bunny) inside module video markup | `training/module.php` |

## Uncertain

| Item | Why |
|---|---|
| Hardcoded practice `643` on the learner home BAT query | Left in `training/index.php` with no comment that it is a demo |
| `phpinfo.php`, `tools/phpinfo.php`, `tools/info.php`, `test.php` | Files exist. No product requirement |
| Theme files `old_header.php`, `single_26_11_2014.php`, `7jan2015style.css` | Historical copies inside the theme |
| `feature/manual-adhoc-invoice` as a product feature | Branch name only |
| Whether WordPress plugin features (SEO, Contact Form 7, Slimstat, social poster) are configured | Code is vendored. Settings are in the database |

## Planned

No roadmap, ticket list, or TODO document was found in the repository. The unmerged 2026 branches are the only later work visible in Git.
