# Features — dev.knowmore (Knowmore)

Evidence date: 2026-10-17. Source: `git@bitbucket.org:overdrive/dev.knowmore.git`, `master` at `43f9c23` (2021-02-10).

Status words used here:

- **Current** — present on `master` at `43f9c23` and wired from a page or class that this snapshot can see.
- **Library only** — a class file is in git. The page that constructs it is not.
- **Stub / debug** — the file stops, prints, or points at sample data before the described behaviour.
- **Leftover** — still in the tree, named or configured for an older product, and not the path the 2021 bootstrap uses.
- **Not in git** — required by an include or link, and no file exists at that path.

There is one commit and one branch. Dated `*.php` copies inside folders are older snapshots stored as files, not git history. Deployment of `master` is **Unknown / Requires Confirmation**.

## Current — learner portal

| Feature | Location | Notes |
|---|---|---|
| Session gate | `training/_nemo.basic.cls.php` | Redirects to `second.wp.php` when `LEARNER` is missing. Bootstrap files under `webadmin/` are **not in git**. |
| Header, menu, footer | same | Menu: Overview, Courses, Workshops, Business Tools, Publications, My CPD Points. Footer year 2018. Logout condition is `\|\| TRUE`. |
| Overview | `training/index.php` | Last login, hidden category/WPS, BAT red/amber/green for questionnaire 4, latest-articles iframe. |
| Courses home and purchase | `training/home.courses.php`, `training/purchase.courses.php`, `training/course.php` | Purchase comment keeps a course visible for one week after start. |
| Workshops | `training/home.workshops.php`, `training/workshop.php`, `training/purchase.workshops.php` | |
| Business-tools handoff | `training/home.tools.php`, `training/login.business_tools.php` | Practice required. Copies the advisor password into the session and a cookie. |
| Publications | `training/home.wi.php`, `training/__home.wi.php`, `training/module.wi.php` | Iframe `hidden/wealth-intelligence/`. Label changed from Wealth Intelligence in 2019. |
| Modules, forums, surveys | `training/module.php`, `training/forum.php`, `training/general.forum.php`, `training/survey.php` | Right-hand forum helpers live on `NemoBasic`. |
| Assignments | `training/assignments.php`, `training/my.assignments.php` | Hard-coded 2021 CPD catalogue plus database-driven lists. |
| CPD points and PDF | `training/my.cpd.points.php` | ID number prompt, previous-year PDF, disclaimer, cycle dates in comments. |
| Article assessments | `training/article.assessments.php` | Linked from the CPD catalogue as publications. |
| Profile | `training/profile.php`, `training/learner.profile.php` | Profile image path from system settings. |
| Transactions | `training/transactions.php` | |
| Messages | `training/message.php` | |
| AVP wealth pages | `training/avp.*.php` | Each page is an iframe of a `hidden/avp-*` CMS path. Content is **not in git**. |

Layouts used by these pages are in `layouts/` (`layout.learner.*`, `layout.AVP.*`, `layout.login.incl.php`, `layout.survey.incl.php`).

## Current — business tools

| Feature | Location | Notes |
|---|---|---|
| Tools shell | `tools/header.php`, `tools/menu.php`, `tools/sidebar.php`, `tools/session.php` | Logo URL is the QA WordPress theme. Industry popup include. |
| Advisor login | `tools/login.php` | MD5 compare. Writes `sysLogin`, including the posted password. |
| Forgot password | `tools/forgotpassword.php`, `tools/forgot.password.typo.php` | Page title is still "Celestis". Uses `tools/webadmin/include/system.inc.php`. |
| Logout | `tools/logout.php` | |
| Business Assessment Tool | `tools/bat.engine.php`, `tools/bat.class.php`, `tools/bat_2020.class.php`, `tools/bat.chart.php` | Version flag `BATVERSION = 1` in the engine. 2020 class and `dwfBatResults_2020` are separate. |
| TCF / PoPI / RDR / succession gap | `tools/gap.TCF.*`, `tools/gap.PoPI.*`, `tools/gap.RDR.*`, `tools/gap.SCP.*` | Finish path can grant CPD. |
| Client survey (CAT) | `tools/cat.engine.php`, `tools/cat.class.php`, `tools/cat.pdf.php`, `tools/cat.export.php` | PDF report. Daily cron sends reminders. |
| Literacy (LIT) | `tools/lit.engine.php`, `tools/lit.class.php` | Intro, save, finish. |
| Practice, income, expenses, staff | `tools/practice.setup.php`, `tools/ie.*.php` | `tools/ie.class.php` is an empty file. |
| Registration | `tools/register.php`, `tools/bpw.registration.php`, `tools/bpw.registration2.php`, `tools/unj.registration.php`, `tools/unj.registration2.php`, `tools/reg.sapoty.php`, `tools/reg.activate.php`, `tools/request_activation_code.php` | BPW, UNJ, and SAPOTY are separate registration scripts. The business meaning of the abbreviations is **Unknown**. |
| IWP invite | `tools/iwp.invite.accept.php`, `tools/iwp.invite.decline.php` | Includes `webadmin/_nemo.email.cls.php`, which is **not in git**. |
| Purchase and renewal | `tools/purchase.php`, `tools/purchase.renewal.php`, `tools/renewal.decline.php` | Dated backups `purchase20200703.php` and `purchasebackup.php` sit beside the current file. |
| PayGate return | `tools/payGateResults.php` | Checksum secret in source is `test`. |
| Netcash return | `tools/purchase.netcash.php` | Dies on a debug print. **Stub / debug**. |
| Invoices and licence PDF | `tools/invoicePDF.php`, `tools/generateinvoice.php` | `generateinvoice.php` is an empty file. |
| Profile and contact | `tools/profile.php`, `tools/user.php`, `tools/contactus.php` | |
| Captcha | `tools/captha.php` | Filename is spelled `captha`. |
| Email read receipt | `tools/email.read.receipt.php`, `tools/email.read.online.php` | |
| Unsubscribe | `tools/unsubscribe.php` | |
| Consulting-hours import | `tools/cron.daily.php` | Reads `ConsultingHours.csv`. Marketing hours stored as zero. |
| Mail queue | `tools/cron.hourly.php` | Job types CSS, CSS Reminder, Renewal, Invoice, Seminar. |
| Weekly expiry list | `tools/cron.weekly.php` | Window `+8 weeks`. |

`tools/zcron.*.php` are copies of the cron files with the same sizes. They look like duplicates kept under a `z` prefix. **Inferred** unused if the scheduler calls `cron.*.php`. That is not proven.

## Current — tools admin

Controllers live in `tools/webadmin/`. Each page constructs a matching class under `tools/webadmin/include/` unless noted.

| Area | Controllers |
|---|---|
| Entry | `index.php` (calls `checkAdminLogin()`), `login.php`, `header.php` |
| People and places | `user.php`, `practice.php`, `contact.php`, `client.php`, `consultant.php`, `country.php`, `province.php`, `title.php` |
| Industry taxonomy | `industry.php`, `ind.category.php`, `ind.sub.category.php`, `ind.practice.type.php` |
| Questionnaires | `questionnaire.php`, `questionnaire.industry.php`, `question.php`, `question.v3.php`, `question.order.php`, `question.help.php`, `question.preview.php`, `question.spawn.php`, `question.benchmark.php`, `optioncomment.php` |
| Assessment structure | `cluster.php`, `pillar.php`, `valuedriver.php`, `tcf.php` |
| Gap admin | `TCF.Gap.Analysis.*.php`, `PoPI.Gap.Analysis.*.php`, `RDR.Gap.Analysis.*.php` |
| Literacy admin | `lit.cluster.php`, `lit.overall.php`, `lit.question.php` |
| Commerce | `licence.php`, `licence.status.php`, `invoice.php`, `product.package.php` |
| Other | `content.php`, `event.php`, `ticket.php`, `reports.php`, `result.php`, `settings.php`, `email.php`, `message.php`, `bch.appointment.php`, `bch.imported.php`, `bat.reports.php`, `bat2.reports.php`, `batoru.php`, `cat.survey.php`, `cat.question.php` |
| Security screens | `xsecurity.group.php`, `xemailtemplate.php` | The `x` prefix matches other retired files. **Unknown** whether the menu still links them. |

`z_blank_controller.php` is a template (`new Class($ID)`). `zemail.php` resends mail.

Staff login depends on `webadmin/_nemo.password.cls.php` (**not in git**).

## Library only — academy admin

`webadmin/` has no `*.php` page at its root. These classes are the academy back office. Dated copies (`course.cls.20190808.php`, `learner.cls.20190808.php`, `usage.stats.rpt.20190920.php`, `invoicePDF.cls.20161031.php`, and others) are **leftover** files next to the undated class.

| Class file | Subject |
|---|---|
| `course.cls.php`, `course.type.cls.php`, `module.cls.php`, `workshop.cls.php`, `venue.cls.php` | Catalogue |
| `learner.cls.php`, `user.cls.php`, `user.type.cls.php`, `user.category.cls.php` | People |
| `assignment.cls.php`, `practical.cls.php`, `workbook.cls.php`, `question.cls.php` | Assessment inside a course |
| `forum.cls.php`, `gen.forum.cls.php`, `articles.cls.php`, `video.cls.php` | Discussion and media |
| `cpd.points.cls.php` | CPD |
| `licence.cls.php`, `invoice.cls.php`, `invoicePDF.cls.php`, `voucher.cls.php`, `product.cls.php` | Commerce |
| `sla.quote.cls.php`, `sla.service.cls.php` | Proposals. Documents under `webadmin/documents/SLA/` |
| `practice.cls.php`, `contact.cls.php`, `client.cls.php`, `my.clients.cls.php`, `region.cls.php`, `country.cls.php` | Practices |
| `rsvp.cls.php`, `iwp.declined.list.cls.php`, `xinvite.cls.php` | Events and invites. `xinvite` is prefixed like other retired files |
| `downloadable.content.cls.php`, `downloadable.contentV2.cls.php`, `DContent.Updater.cls.php` | Downloads. V2 sits beside V1 |
| `advert.cls.php`, `ads.image.cls.php` | Ads. Training comment says the ads table was deleted in phase 3 and the include is commented out |
| `usage.stats.rpt.php`, `ledger.rpt.php`, `invoice.rpt.php`, `bat.rpt.php` | Reports |
| `security.group.cls.php`, `settings.cls.php`, `email.cls.php`, `email.template.cls.php` | Admin support |
| `milestone.cls.php`, `note.cls.php` | Notes on a record |

## Current — shared platform

| Feature | Location | Notes |
|---|---|---|
| Host-based database map | `tools/webadmin/system.php` | Live, QA, dev, lamp, debian. See technical documentation. Passwords are committed and are not listed here. |
| Nemo database and mail | `tools/webadmin/_nemo.*.php`, `training/_nemo.*.php` | Training email and control classes are **not in git**. |
| PDF | `htmltopdf/`, `tools/htmltopdf/`, `tools/fpdi/`, `webadmin/fpdi/`, `tools/pdfencryption.cls.php` | Two copies of the HTML-to-PDF library. |
| Excel read | `tools/Excel/`, `webadmin/Excel/` | Used by imports. |
| Flowplayer | `flowplayer/flowplayer-3.2.6.min.js` | |
| jQuery and jQuery UI | `js/`, `training/js/`, `tools/js/` | 1.4.2 and 1.10.2 both included from `tools/header.php`. |
| SMS | `SendSMS()` in `tools/webadmin/system.functions.inc.php` | MyMobileAPI. |
| Google charts | same file | Pie charts for RAG results. |
| File integrity | `webadmin/_framework/_nemo.fim.cls.php` | KnowMore report. A second copy of the class is stored under `webadmin/js/` and `webadmin/images/`. |
| CPD import files | `webadmin/import/*.csv` | OMW extracts, 2016–2020. Personal data. **Current** in git. Whether they should be is **Unknown**. |

## Stub, debug, and leftover

| Item | Evidence | Status |
|---|---|---|
| `tools/purchase.netcash.php` | `print_rr('yes include'); die;` before the six purchase steps | **Stub / debug** |
| `tools/soap.php` | SOAP client with empty credentials and a test card, then prints the raw SOAP exchange | **Stub / debug** |
| `tools/phpinfo.php` | Calls `phpinfo()` | **Stub / debug** |
| `tools/generateinvoice.php`, `tools/ie.class.php` | Zero-byte files | **Stub** |
| `tools/adfs-idp-hosted.php`, `tools/Xadfs-idp-hosted.php` | SimpleSAMLphp example metadata (`example-userpass`) | **Leftover** example |
| `fim_2.0/fim.config.php` | Project name American Shutters, database `american_shutters` | **Leftover** or wrong config. **Requires confirmation** |
| `tools/system.inc.LIVE.php`, `tools/xsystem.inc.php`, `tools/webadmin/include/system.php` | Celestis hosts, cookie `ckyCelestisNew`, database names `celestis` and `celestis_tools` | **Leftover**. Active tools bootstrap is `tools/webadmin/system.php` |
| `tools/webadmin/_.htaccess`, `tools/_.htaccess` | TYPO3 example htaccess, not named `.htaccess` | **Leftover** sample. Apache will not apply the underscore name |
| `htmltopdf/ex.php`, `pdfwilltest.php`, `cron.test.php` | Library examples | **Leftover** |
| Commented security lockout call | `tools/webadmin/login.php`, `tools/login.php` | The function remains. The call sites found are comments |

## Not in git

- `webadmin/_system.php`
- `webadmin/_nemo.control.cls.php`
- `webadmin/_nemo.email.cls.php`
- `webadmin/_nemo.password.cls.php`
- `second.wp.php`, `login.wp.php`, `wp-login.php`, and the WordPress theme
- CMS bodies for `hidden/*` and `about/*`
- `sonar-project.properties` and `sonarqube_scan.bat` (listed by the task-creation scan only)
- Automated tests, Composer or npm manifests, CI config, Dockerfile

## Planned

No roadmap file exists. Comments describe behaviour that was later changed inside this same snapshot (separate BAT databases, ads module, Wealth Intelligence menu label, per-article CPD of 0.1667). Those are historical notes, not open plans.

**Unknown / Requires Confirmation:** anything intended to ship after 2021-02-10.
