# Project plan — knowmorescan (Knowmore)

Evidence date: 2026-10-10.

Source repository: `git@bitbucket.org:overdrive/knowmorescan.git`.

Inspected revision: `master` at `71190cf` (2022-06-02, "Merge branch 'backend-tweaks'"). `origin/HEAD` points at `master`. `origin/backend-tweaks` exists and is the branch merged by that commit.

This plan describes what the repository contains. It does not decide what the product should become. There is no prior Silicon Ark folder for this project.

## Product

**Knowmore** is an online learning and business-tools platform for people who work in financial-planning businesses. The public About page says it provides financial planners, support staff, and business owners with learning content for the financial profession, and that some content is exclusive to partner businesses.

Provenance: **Documented** in the static page `about.html` (Open Graph description and visible headings). The same page says CPD points earned on the platform can be tracked after login and submitted as proof of CPD earned through Old Mutual Wealth.

The privacy policy names the owner of KnowMore as **Old Mutual Wealth (Proprietary) Limited**, registration number 2011/134187/07. Provenance: **Documented** in `privacy-policy.html`.

The footer on the exported pages credits **Silicon Overdrive** (`https://www.overdrive.co.za/`) and a copyright line "Knowmore © 2020". Provenance: **Documented** in `about.html`.

The terms page states that products and services provided to financial planners and support staff in South Africa include business-management services, online training courses, access to workshops and seminars, and publications and newsletters relevant to the financial services industry, subject to availability. Provenance: **Documented** in `terms-and-conditions.html`.

Older PHP still speaks as **Celestis**. `contact.us.php` invites the reader to "Let Celestis put you on track" and lists Skype `CelestisBB`. `content.php` embeds `http://www.celestis.co.za/`. Daily-cron comments and a sample client-survey email also name Celestis. Provenance: **Implemented**. Whether Celestis is a former brand, a related company, or unused copy is **Unknown / Requires Confirmation**.

## Branch reality

History on `master` is short and recent relative to the age of the PHP:

| Commit | Date | Author | Subject |
|---|---|---|---|
| `1a40ac7` | 2022-01-26 | Rachel Mogano | Initial commit |
| `963c012` | 2022-01-26 | AzureAD\RachelMogano | Initial Commit |
| `ddd825b` | 2022-01-27 | AzureAD\RachelMogano | CMS commit |
| `6747c50` | 2022-01-27 | AzureAD\RachelMogano | DB Updates |
| `615aef8` | 2022-01-27 | AzureAD\RachelMogano | Updated App redirect url |
| `18f783c` … `720e48c` | 2022-02-07 … 2022-02-17 | joshgatdew | CMS pagination, validation, password policy, user deletion, footer clipping |
| `8540ce0` … `f9e83ce` | 2022-05-24 … 2022-05-30 | liamkleyn_od | CMS backend changes and review tweaks |
| `6f066ea` | 2022-06-02 | AzureAD\RachelMogano | database table updates |
| `71190cf` | 2022-06-02 | AzureAD\RachelMogano | Merge `backend-tweaks` |

File comments inside `webadmin`, `training`, and `tools` go back to 2010 (for example BAT notes dated 2010-06-15). The Git history that is in this clone starts in January 2022. Earlier history was not found in this repository. Provenance: **Unknown** whether a previous remote held the older history.

No unmerged product branch was found. `origin/backend-tweaks` is the branch named in the merge commit.

## Objectives (inferred from the site and the code, not from a written plan)

No project plan or product README exists in the repository. `cms/README.md` is the stock CodeIgniter 4 readme. The following objectives are **Inferred** from public copy and from the modules that are implemented:

- Publish a marketing site for Knowmore / Old Mutual Wealth learning.
- Let learners register, sign in, and take online courses, workshops, and assignments, and download CPD evidence.
- Give partner practices online business tools: Business Assessment, Client Satisfaction Survey, gap analysis, and a valuation service described on the marketing pages.
- Operate an internal `webadmin` for learners, courses, modules, practices, workshops, licences, invoices, email, and CPD.
- Send scheduled course, workshop, survey, and certificate emails from cron scripts.
- Give CMS administrators a separate CodeIgniter app to manage publication articles and CMS users.

## Scope in this repository

In scope of the tree at `71190cf`:

- Static marketing HTML exported from WordPress (GeneratePress, Elementor, Yoast, Contact Form 7 assets). Each exported page ends with a comment that it was exported by "Export WP Page to Static HTML".
- The learner area under `training/`.
- The Nemo `webadmin` under `webadmin/`.
- Business-tool engines under `tools/` (BAT, CAT / client survey, gap analysis, related PDF and payment helpers).
- A CodeIgniter 4 app under `cms/` for article and user administration.
- SQL increments under `db_updates/` for the CMS tables only.
- File-integrity / permission cron code under `fim_2.0/`.
- Root Composer dependencies: `vlucas/phpdotenv` and `aws/aws-sdk-php`.

Out of scope of this repository, based on what is absent:

- The WordPress installation that produced the HTML. Web paths such as `/wp-admin/admin-ajax.php` and `/wp-json/` are referenced from the static export. The WordPress tree is not here.
- A full database schema. Only five CMS `CREATE TABLE` scripts are in `db_updates/`. The Nemo tables (`tblLearner`, `sysUser`, `sysMenuLevel1`, `tblPractice`, and the BAT / survey tables) are used by PHP and are not created in this repo.
- Infrastructure-as-code, Docker, or a CI pipeline definition. `sonar-scanner.properties` sets `sonar.projectKey= knowmore` (leading space included in the file). No pipeline YAML was found.
- Application tests for the Nemo code. `cms/phpunit.xml.dist` is the framework file. No `cms/tests` directory was found.

## System shape

```text
Browser
  ├─ Static HTML (index, about, courses, tools, publications, legal)
  │     login.html  → second.wp.php → training/*
  │     register.html iframe → register.ph3.php
  ├─ training/          learner home, courses, workshops, CPD, purchases
  ├─ tools/             BAT, CAT/CSS, gap analysis, practice tools
  ├─ webadmin/          Nemo admin, menus from sysMenu*, cron.*.php
  ├─ cms/public         CodeIgniter 4 admin (articles, users)
  └─ MySQL              shared by Nemo; CMS tables added in db_updates
        fim_2.0/        filesystem permission / integrity cron
```

`_system.php` selects MySQL credentials from environment variables and from `$_SERVER[SERVER_NAME]`, rewrites bare `knowmore.co.za` and `qa-celestis.co.za` to the `www` host, and falls back to `www.knowmore.co.za` when `SERVER_NAME` is missing (the comment says this is for cron). Provenance: **Implemented**.

## Major components

| Component | Path | Role |
|---|---|---|
| Marketing site | `*.html` at the repository root | Static export of knowmore.co.za |
| Learner login and registration | `login.php`, `second.wp.php`, `register.ph3.php`, `login.html`, `register.html` | Email/password against `tblLearner` |
| Learner portal | `training/` | Courses, modules, workshops, CPD, forums, purchases, Wealth Intelligence pages |
| Business tools | `tools/` | Assessment, survey, gap analysis, charts, invoices, payments helpers |
| Nemo webadmin | `webadmin/` | Security-group menu, CRUD screens, email, cron |
| CMS | `cms/` | CI4 admin for articles and CMS users |
| FIM | `fim_2.0/` | Walks a directory tree and enforces file modes |
| Schema increments | `db_updates/update.1.sql` … `update.5.sql` | CMS category, article, tag, subcategory, user tables |

## Milestones visible in Git and comments

These are historical markers, not an approved roadmap.

1. **2010–2019 (comments only).** BAT, CAT, gap tools, password framework, AML and IBC learner processing, SagePay and Netcash purchase forms. Not represented as commits in this clone.
2. **2020.** Public pages in the HTML export are dated around June–November 2020 (Yoast `datePublished` / `article:modified_time` on `index.html`). Copyright line says 2020.
3. **2021.** CMS article categories in `db_updates/update.1.sql` are inserted with dates in August 2021. Comments in `_system.php` record SonarQube-driven changes (log injection, SQL injection, environment variables) in 2021.
4. **2022-01-26.** Repository initial commit, then CMS commit and DB updates.
5. **2022-02.** CMS validation, password policy aligned with webadmin, pagination and search, protection against deleting the current CMS user, authorship reassignment.
6. **2022-05 to 2022-06-02.** CMS backend tweaks and a database-table update, then merge to `master`. No later commit is in this clone.

## Implementation plan status

There is no written implementation plan in the repository. Current status as of the inspected revision:

- The marketing site, learner portal, tools, and webadmin are present as a large PHP application and are the bulk of the tree.
- The CMS admin (login, articles, users, security-group routes) was the work added in the 2022 commits.
- The CMS dashboard route is commented out in `cms/app/Config/Routes.php`, and the Dashboard item in `cms/app/Views/templates/sidenav.php` is inside an HTML comment. The logo still links to `admin/dashboard`.
- No public CMS route was found that renders `cmsarticles` onto `publications.html`. The publications page in the export is static HTML.

Whether `71190cf` is what is deployed to `https://www.knowmore.co.za/` is **Unknown / Requires Confirmation**. The static HTML still contains absolute links to that host, and also schema.org identifiers for `qa-omw-newbuild.co.za.www8.jnb1.host-h.net`.

## Known dependencies

- PHP. CMS `composer.json` requires `^7.3 || ^8.0` plus `ext-curl`, `ext-intl`, `ext-json`, `ext-mbstring`. Nemo comments record a PHP 5.6 pass (2015) and a PHP 7 pass (2018). The PHP version actually used in production is **Unknown / Requires Confirmation**.
- MySQL / MariaDB via `mysqli` in `_system.php`. CMS config is MySQLi in `cms/app/Config/Database.php`, with empty username, password, and database in the checked-in file.
- Composer packages at the repository root: `vlucas/phpdotenv` ^5.3, `aws/aws-sdk-php` ^3.204. No `Aws\` client construction was found under `cms/app`, `webadmin`, `training`, or `tools`. What the SDK is used for is **Unknown / Requires Confirmation**.
- SagePay Pay Now (`https://paynow.sagepay.co.za/site/paynow.aspx`) on course and workshop purchase pages.
- Netcash (`https://gateway.netcash.co.za/vvonline/ccnetcash.asp`) on `training/purchase.php` and `training/purchase.omw.php`.
- reCAPTCHA library file `modules/recaptchalib.php`. The include in `register.ph3.php` is commented out.
- Wordfence: `.user.ini` prepends `/usr/www/users/qacelmtbmy/wordfence-waf.php`. `.htaccess` denies `.user.ini`.
- SMTP / `mail()` through `webadmin/_nemo.email.cls.php`. Server identity is **Unknown / Requires Confirmation**.

## Current project status

Last commit 2022-06-02. No open work is described in the repository. Treat the product as a maintained legacy system whose last recorded change in this remote is the CMS merge, unless a human confirms a newer deployment that is not in Git.
