# Features — knowmore_current (Knowmore)

Evidence date: 2026-10-11. Source: `git@bitbucket.org:overdrive/knowmore_current.git`, `master` at `98e19240` (2025-04-04).

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`. None.
- **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.

`origin/uriel_sso_changes` has no commits that `master` lacks.

## Current — public site

| Feature | Where | Notes |
|---|---|---|
| Static home and section pages | `index.html`, `about.html`, `business-tools.html`, `courses.html`, `publications.html`, `workshops.html`, `cpd-points.html` | Exported WordPress/Elementor HTML. Canonical host `www.knowmore.co.za` |
| Audience pages | `financial-planners-advisers-and-para-planners.html`, `executive-assistants-and-support-staff.html`, `business-owners.html` | TCF course and executive-assistant course copy |
| Tool marketing | `business-assesment-tool.html`, `client-satisfaction-survey-tool.html`, `gap-analysis.html`, `valuation-service.html` | Filename spelling is "assesment" |
| Legal | `privacy-policy.html`, `terms-and-conditions.html`, `copyright.html`, `disclaimer.html` | Owner and operator named in the first two |
| Contact page | `contact-us.html` | Address only in the Open Graph description |
| Login shell | `login.html` | Posts to `login.php`. SSO link points at `oauth/init_oauth.php`, which is absent |
| Register shell | `register.html` | No form action found |
| HTTPS redirect | `.htaccess` | HTTP to HTTPS 301. HTML-extension rewrite is commented out |
| Robots and sitemap | `robots.txt`, `sitemap.xml` | Present |
| Search-engine verification file | `google82a264ecb0e0454e.html` | Filename only. Not treated as a product feature |
| Wordfence prepend | `.user.ini` | Points outside the repository |

## Current — registration and login

| Feature | Where |
|---|---|
| Shared login attempt | `login.php` |
| Webadmin session | `login.php` when `NemoPassword` matches an active `sysUser` |
| Learner session fields | `login.php` learner branch. The branch reads `$row2` / `$row`, not the `$rowLearners` query. See PRD W2 |
| Old Mutual SSO button | `login.html` |
| OAuth start (PKCE) | `init_oauth.php`, `bootstrap.php` |
| OAuth callbacks that display the token or identity body | `authorize.php`, `process_auth_code.php` |
| Azure AD sample classes | `phpazure/inc/auth.php`, `oauth.php`, `graph.php`, `mysql.php`, `_config.inc` |
| Password hashing, history, reset interval | `webadmin/_nemo.password.cls.php` |
| Forgot-password entry points | `forgot-pw.php`, `forgot.password.php`, `forgot.password.wp.php` |
| Phase and specialised registration scripts | `register.ph3.php`, `register.changes.php`, `register.courses.php`, `register.invite.php`, `register.risk.php`, `register.rsvp.php`, `register.special.php`, `register.tools.php`, `register.typo.php`, `register.wi.php` |
| RSVP opt-out | `rsvp.optout.php` |

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

| Feature | Where |
|---|---|
| Learner home, last login, hidden WPS and category blocks, BAT 2020 pillar tally | `training/index.php` |
| Courses | `home.courses.php`, `course.php`, `purchase.courses.php` |
| Workshops | `home.workshops.php`, `workshop.php`, `purchase.workshops.php` |
| Publications / WI modules | `home.wi.php`, `module.wi.php`, `__home.wi.php` |
| Assignments | `assignments.php`, `my.assignments.php` |
| Forums | `forum.php`, `general.forum.php` |
| CPD points and PDF | `my.cpd.points.php` |
| Profile | `profile.php`, `learner.profile.php` |
| Invoices and transactions | `my.invoices.php`, `transactions.php` |
| Purchases including OMW | `purchase.php`, `purchase.omw.php` |
| Survey | `survey.php`, `_nemo.survey.cls.php` |
| Article assessments | `article.assessments.php` |
| AVP worksheets | `avp.wp.*.php`, `avp.my.team.php`, `avp.my.info.php`, `avp.media.php` |
| Business-tools hand-off | `login.business_tools.php`, `home.tools.php` |

`98e19240` (2025-04-04) changed `training/_nemo.survey.cls.php`, `assignments.php`, `course.php`, `home.courses.php`, `module.php`, and added `training/Market_Conduct_Emal_Banner.png`.

## Current — webadmin

| Feature | Where |
|---|---|
| Shell and host/database bootstrap | `webadmin/index.php`, `webadmin/system.php` |
| Security-group menu | `webadmin/_nemo.menu.cls.php` |
| Security groups | `security.group.php` |
| Learners, users, user types and categories | `learner.php`, `user.php`, `user.type.php`, `user.category.php` |
| Courses, course types, modules and module parts | `course.php`, `course.type.php`, `module.php`, `mod.*.php` |
| Workshops, venues, regions, countries | `workshop.php`, `venue.php`, `region.php`, `country.php` |
| Practices, clients, licences, invoices, vouchers, products | `practice.php`, `client.php`, `my.clients.php`, `licence.php`, `invoice.php`, `voucher.php`, `product.php` |
| Email templates and manual send | `email.template.php`, `email.php`, `manual_email_sending.php`, `setup.email.php` |
| CPD administration | `cpd.points.php` |
| Articles, adverts | `articles.php`, `advert.php`, `ads.image.php` |
| Reports, usage log, notes, messages | `report.php`, `usage.log.php`, `note.php`, `message.php` |
| SLA | `sla.quote.php`, `sla.service.php` |
| Content distribution | `content.distribution.php` |
| AWS URL and upload helpers | `aws.functions.inc.php` |
| Hand-off to tools or academy admin | `gotoBusinessTools.php`, `gotoBusinessToolsBAT2.php`, `gotoAcademyWebadmin.php` |
| Password reset screen | `resetPassword.php` |
| Daily and hourly mail jobs | `cron.daily.php`, `cron.hourly.php`, `cron.hourly1.php` … `cron.hourly8.php` |
| FIM mail | `cron.fim.php`, `email.fim.php` |

The same commit `98e19240` changed `webadmin/course.php`, `webadmin/includes/course.cls.php`, `webadmin/includes/learner.cls.php`, and `webadmin/system.php`.

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

| Feature | Where |
|---|---|
| Advisor home and industry save | `tools/index.php` |
| BAT and BAT 2020 | `bat.engine.php`, `bat.engine2.php`, `bat.engine3.pwm.php`, `bat.class.php`, `bat.chart.php`, `bat_2020.engine.php`, `bat_2020.class.php` |
| Client satisfaction survey and opt-out | `css.survey.php`, root `css.survey.php`, root `cat.unregister.php` |
| Gap analyses | `gap.TCF.*`, `gap.RDR.*`, `gap.PoPI.*`, `gap.SCP.*` |
| Income and expense capture | `ie.engine.php` and `ie.*.sav.php` |
| Invoices and PDF / Excel | `invoicePDF.php`, `dtPDF.php`, `product_pdf.php`, `product_excel.php` |
| Licence purchase and renewal | `purchase.php`, `purchase.renewal.php`, `renewal.decline.php` |
| PayGate result | `payGateResults.php` |
| Practice and staff setup | `practice.setup.php`, `ie.practice.setup.sav.php`, `ie.staff.setup.sav.php` |
| Daily renewal and CAT reminder jobs | `tools/cron.daily.php` |
| Weekly and hourly jobs | `tools/cron.weekly.php`, `tools/cron.hourly.php` |

## Current — other

| Feature | Where | Notes |
|---|---|---|
| File integrity cron | `fim_2.0/fim.cron.php` | Action `FIM: PULL MASTER DATA` is one branch |
| HTML-to-PDF engine | `htmltopdf/`, `tools/htmltopdf/` | Includes Perl helpers |
| Flowplayer assets | `flowplayer/` | No PHP |
| Learner content drop | `training7.4/dcontent`, `training7.4/profilepictures`, `training7.4/webadmin7.4` | No PHP. One PDF path exceeds the default Windows path limit |
| FTP deploy of `master` | `bitbucket-pipelines.yml` | `git ftp push` |
| Sonar project key | `sonar-project.properties` | `knowmore_sso`. The scan step is not in the `master` pipeline |

## Completed

These are finished changes that remain on `master`. They are not a separate product version.

| Change | Evidence |
|---|---|
| PHP 8 and PHP 8.2 edits across tools, training, webadmin, and FIM | Commit subjects 2022-12-06 through 2024-02-20 |
| WordPress core removed from the tree | Commits 2024-09-02 through 2024-09-05 (`wordpress removal`, `wp-content removal`, `wp-includes removal`, `wp-admin removal`) |
| OAuth2 debug output removed | `762908ba` 2024-09-18 |
| AWS S3 helper changes | `a9a458cc` 2024-09-18 |
| Pipeline and Sonar property file added | `bfebece0`, `13557072`, `182ee9f8` on 2024-10-02 |
| Training and webadmin course/learner update | `98e19240` 2025-04-04 |

## In development

None. `origin/uriel_sso_changes` is behind `master`.

## Planned

No backlog, TODO document, or issue list was found in the repository. Pipeline comments do not describe future product work. The commented CPD cycle calculator and the commented `git ftp init` line are disabled code, not a written plan.

## Deprecated / removed

| Item | Evidence |
|---|---|
| WordPress core, themes, and plugins as runnable code | Removed in September 2024. Static export and `.htaccess` "END WordPress" remain |
| `register.php` save path | Comment "THIS CLASS IS NOT IN USE ANYMORE" and an unconditional `die` before submit |
| Learner deactivation four weeks after the last course | Comment in `webadmin/cron.daily.php`: deactivated after the tools merger, 2013-10-01 |
| Automatic CPD cycle (1 June–31 May) | The block in `training/my.cpd.points.php` is commented. Hardcoded dates are what runs |
| Netcash completion steps | `tools/purchase.netcash.php` dies before the steps in its comments |
| HTML extension rewrite under `/knowmore_current/` | Commented in `.htaccess` |
| Older `www.knowmore.co.za` database block and the QA block for `www.qa-celestis.co.za` | Commented in `webadmin/system.php`. A later active block uses the same host key |

## Uncertain

| Item | Why |
|---|---|
| Azure AD login versus Ping-named OAuth | Both exist. The public button matches neither path exactly |
| `training7.4/` content | Present and large. No PHP refers to the folder name in the files read for this document. `.gitignore` ignores `training/dcontent/*` and does not ignore `training7.4/dcontent` |
| `tools/webadmin/` | Nested older admin. Not compared file by file with `webadmin/` |
| PayGate | `payGateResults.php` exists. The live merchant flow was not executed |
| `comms/log-in/` and `portal.php` | Redirect targets of `login.php`. Not in the tree |
| `latestblogposts/` iframe | Learner home still requests it. WordPress, which used to serve it, was removed |
| Valuation service | Marketing page exists. No `valuation` PHP entry point was found under `tools/` |
| SonarQube on `master` | Step YAML exists and is unused |
| Production deploy | Pipeline is defined. The FTP host and whether this commit is what the site serves were not checked |
