Skip to content
Merged

pages #248

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion public/admin.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ A fast, reliable way to manage the records in your database with a simple table-
- [View on GitHub](https://github.com/dotkernel/admin)
- [Live demo](https://admin7.dotkernel.net/)

PHP 8.3, 8.4 or 8.5 . [Latest release](https://github.com/dotkernel/admin/releases/latest)

| | |
| --- | --- |
| Runtime | Mezzio + Laminas |
Expand Down Expand Up @@ -210,7 +212,7 @@ If the fixtures ran, sign in with user `admin` and password `dotadmin` - the sam
| Operating system | A \*nix based system is strongly recommended for production. |
| PHP | 8.3 or newer, mod_php or FCGI (FPM). `memory_limit` at least 128M; `upload_max_filesize` and `post_max_size` at least 100M depending on your data. |
| Web server | Apache 2.2+ with `mod_rewrite` and `.htaccess` support (`AllowOverride All`) - a default `.htaccess` ships in `public/`. On Nginx, translate it into server configuration. |
| Database | MariaDB 10.7, 10.11 LTS, 11.4 LTS and 11.8 LTS, or PostgreSQL 13 and above. **MySQL is not supported**, as it has no UUID support. |
| Database | MariaDB 11.4 LTS, 11.8 LTS and 12.3 LTS, or PostgreSQL 13 and above. **MySQL is not supported**, as it has no UUID support. |
| Required extensions | `mbstring`, the CLI SAPI for cron jobs, and Composer available on `$PATH`. |
| Recommended extensions | `opcache`; `pdo_mysql`, `pdo_pgsql` or `mysqli` to match your database; `dom` and `simplexml` for markup; `gd` and `exif` for images; `zlib`, `zip`, `bz2` for compression; `curl` when calling APIs; `sqlite3` for the test suite. |

Expand Down
10 changes: 6 additions & 4 deletions public/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ OAuth 2.0, RBAC authorization, HAL payloads, standardized error responses and an
- [View on GitHub](https://github.com/dotkernel/api)
- [Live demo](https://api.dotkernel.net/)

PHP 8.3, 8.4 or 8.5 . [Latest release](https://github.com/dotkernel/api/releases/latest)

| | |
| --- | --- |
| Runtime | Mezzio + Laminas |
Expand Down Expand Up @@ -130,11 +132,11 @@ You keep full control of the UUID version without depending on database extensio
### PostgreSQL support

PostgreSQL joins the supported databases.
Because native UUID is required, you need PostgreSQL or MariaDB 10.7 or later; MySQL is no longer supported, as it has no UUID data type.
Because native UUID is required, you need PostgreSQL 13+ or MariaDB 11.4 or later; MySQL is no longer supported, as it has no UUID data type.

### PHP 8.5

The API targets PHP 8.5, with Dotkernel Admin on 8.4.
The API and Admin target PHP 8.5.
Dependencies are kept current, and the ecosystem's own packages track the versions Laminas and Doctrine support.

### Table prefixes
Expand Down Expand Up @@ -176,7 +178,7 @@ The comparison below is drawn from the full side-by-side write-up on our blog.
| First release | 2012 | 2018 |
| Architecture | MVC, event driven | Middleware |
| OSS lifecycle | Archived | Active |
| PHP version | ≤ 8.2 | See the PHP version badge for `dotkernel/api` |
| PHP version | ≤ 8.2 | 8.3, 8.4 or 8.5 |
| Style | REST, RPC | REST |
| Change management | Versioning | Deprecations (API evolution) |
| Documentation | Swagger (automated) | OpenAPI 3.0 (Swagger) and Postman (manual) |
Expand Down Expand Up @@ -283,7 +285,7 @@ Updates arrive with bugfixes and improvements from the PHP community, and breaki

## Install it and call an endpoint

Create the project with Composer, point it at PostgreSQL or MariaDB 10.7+, run the migrations, and you have an authenticated REST API with a browsable OpenAPI specification.
Create the project with Composer, point it at PostgreSQL 13+ or MariaDB 11.4+, run the migrations, and you have an authenticated REST API with a browsable OpenAPI specification.

- [Installation guide](https://docs.dotkernel.org/api-documentation/)
- [Try the demo](https://api.dotkernel.net/)
Expand Down
2 changes: 1 addition & 1 deletion public/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ A request enters at the error boundary, passes through routing, negotiation, aut
| Container | PSR-11 |
| Logging | PSR-3 |

## Five phases, 19 stages
## Six phases, 19 stages

Error boundary (1 stage) -> Request preparation (4 stages) -> Routing (4 stages) -> Contract & headers (4 stages) -> Identity (2 stages) -> Dispatch & fallback (4 stages).

Expand Down
2 changes: 1 addition & 1 deletion public/frontend.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ Duplicating `local.test.php.dist` gives your tests an in-memory database.
| Required extensions | `curl`, `gettext`, `intl`, `json`, `mbstring`, the CLI SAPI for cron jobs, and Composer on `$PATH`. |
| Recommended extensions | `opcache`; `pdo_mysql` for MySQL or MariaDB; `dom` and `simplexml` for markup; `gd` and `exif` for images; `zlib`, `zip`, `bz2` for compression; `sqlite3` for the test suite. |

Note that Frontend still supports MySQL - unlike API and Admin v7, which require native UUID support and therefore PostgreSQL or MariaDB 10.7+.
Note that Frontend still supports MySQL - unlike API and Admin v7, which require native UUID support and therefore PostgreSQL 13+ or MariaDB 11.4+.

## Where Frontend sits

Expand Down
2 changes: 1 addition & 1 deletion public/queue.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ valkey-cli ping

### 4 . Clone and configure

Clone the queue branch, then copy each `.dist` configuration file into place - local, log, messenger and swoole - and fill them in.
Clone the queue repo, then copy each `.dist` configuration file into place - local, log, messenger and swoole - and fill them in.

```shell
git clone https://github.com/dotkernel/queue.git
Expand Down
1 change: 1 addition & 0 deletions src/App/templates/layout/default.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
<li><a class="dropdown-item" href="{{ url('page::dotboost') }}">Dotboost</a></li>
<li><a class="dropdown-item" href="{{ url('page::light') }}">Light</a></li>
<li><a class="dropdown-item" href="{{ url('page::frontend') }}">Frontend</a></li>
<li><a class="dropdown-item" href="{{ url('page::wsl2') }}">WSL2 Dev Stack</a></li>
</ul>
</li>
<li class="nav-item"><a class="nav-link" href="{{ url('page::architecture') }}">Architecture</a></li>
Expand Down
2 changes: 1 addition & 1 deletion src/Page/templates/page/admin.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@
</tr>
<tr>
<th scope="row">PHP</th>
<td>8.2 or newer, mod_php or FCGI (FPM). <code>memory_limit</code> at least 128M;
<td>8.3 or newer, mod_php or FCGI (FPM). <code>memory_limit</code> at least 128M;
<code>upload_max_filesize</code> and <code>post_max_size</code> at least 100M depending
on your data.</td>
</tr>
Expand Down
2 changes: 1 addition & 1 deletion src/Page/templates/page/api.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@
</div>
<div class="standard">
<h4>PHP 8.5</h4>
<p>The API and Admin target PHP 8.5. Dependencies are kept current, and the
<p>The API targets PHP 8.5, with Dotkernel Admin on 8.4. Dependencies are kept current, and the
Comment thread
bidi47 marked this conversation as resolved.
ecosystem's own packages track the versions Laminas and Doctrine support.</p>
</div>
<div class="standard">
Expand Down
2 changes: 1 addition & 1 deletion src/Page/templates/page/architecture.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@

<div class="hero-visual">
<div class="pipeline">
<div class="pipeline-label"><span>Five phases</span><span>19 stages</span></div>
<div class="pipeline-label"><span>Six phases</span><span>19 stages</span></div>
<div class="blocks-tower">
<div class="block" style="width:100%; background:var(--brand-red)"><span class="name">Error boundary</span><span class="tag">1 stage</span></div>
<div class="block" style="width:84%; background:var(--periwinkle)"><span class="name">Request preparation</span><span class="tag">4 stages</span></div>
Expand Down
4 changes: 2 additions & 2 deletions src/Page/templates/page/dotboost.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,8 @@
<tr><th scope="row">git rebase</th><td>ask</td><td>blocks</td></tr>
<tr><th scope="row">doctrine-migrations migrate / execute</th><td>ask</td><td>blocks</td></tr>
<tr><th scope="row">fixtures:execute, schema:drop, schema:update</th><td>ask, via bin/cli.php</td><td>blocks</td></tr>
<tr><th scope="row">composer development-enable / -disable</th><td>—</td><td>blocks</td></tr>
<tr><th scope="row">pip install, git checkout --, git filter-branch</th><td>—</td><td>blocks</td></tr>
<tr><th scope="row">composer development-enable / -disable</th><td>-</td><td>blocks</td></tr>
<tr><th scope="row">pip install, git checkout --, git filter-branch</th><td>-</td><td>blocks</td></tr>
</tbody>
</table>
</div>
Expand Down
65 changes: 36 additions & 29 deletions src/Page/templates/page/frontend.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
real, running features whose only job is to show you where your own code goes.
</p>
<div class="hero-ctas">
<a class="btn btn-primary" href="https://docs.dotkernel.org/frontend/" target="_blank" rel="noopener">
<a class="btn btn-primary" href="https://docs.dotkernel.org/frontend-documentation/" target="_blank" rel="noopener">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>
Read the docs
</a>
Expand Down Expand Up @@ -169,8 +169,8 @@
</div>
<div class="traits">
<div class="trait">
<img class="icon icon-lg" decoding="async" src="{{ asset('images/app/content/success-50.svg') }}" alt="User accounts, from register to unregister" loading="lazy">
<p>User accounts, from register to unregister</p>
<img class="icon icon-lg" decoding="async" src="{{ asset('images/app/content/success-50.svg') }}" alt="User accounts, from registration to account deletion" loading="lazy">
<p>User accounts, from registration to account deletion</p>
</div>

<div class="trait">
Expand Down Expand Up @@ -208,9 +208,10 @@
</div>
<p class="lede">The whole account lifecycle, already routed.</p>
<p class="desc">
Login, registration and account management, including avatar upload, password change and
unregistering. Password reset and account activation emails are part of the flow, which is why
the skeleton stores a name and an email address and nothing more.
Login, registration and account management, including activation, password reset, avatar upload,
profile details, password change and account deletion. Password reset and account activation
emails are part of the flow, which is why the only personal details on a user profile are a name
and an email address.
</p>
</div>

Expand Down Expand Up @@ -246,10 +247,11 @@
</div>
<p class="lede">A public form that does not become a spam relay.</p>
<p class="desc">
The contact form uses Google reCAPTCHA, with the site and secret keys read from local
configuration and the message recipients - <code>to</code> and any number of
<code>cc</code> addresses - configured alongside them. Whitelist <code>localhost</code> while
developing, and take it out again for production.
The contact form uses score-based Google reCAPTCHA, with the site key, secret key and score
threshold read from local configuration, and the message recipients - <code>to</code>,
<code>cc</code> and <code>bcc</code> addresses - configured alongside them. The contact page will
not render until the keys are set; whitelist <code>localhost</code> while developing, and take it
out again for production.
</p>
</div>

Expand Down Expand Up @@ -294,9 +296,9 @@
<div class="card-top">
<div><span class="kicker">Delivery . HTTP</span><h3>Headers &amp; CORS</h3></div>
</div>
<p class="lede">Response headers declared per route.</p>
<p class="lede">Response headers declared globally or per route.</p>
<p class="desc">
<code>dot-response-header</code> sets custom headers per route from
<code>dot-response-header</code> sets custom headers for all routes or for individual routes from
<code>response-header.global.php</code>, while <code>mezzio-cors</code> handles origins, headers
and cookies from <code>cors.global.php</code>.
</p>
Expand Down Expand Up @@ -329,9 +331,10 @@
second option, because deleting a user row is rarely what your foreign keys want.
</p>
<p class="lede">
The skeleton stores only what it needs to run those flows: first name, last name and the email
address used as the identity, for password reset and account activation. Anonymizing replaces
exactly those.
On the user profile, the skeleton stores only what it needs to run those flows: first name, last
name and the email address used as the identity, for password reset and account activation.
Anonymizing replaces exactly those; contact form messages and remember-me records are kept as they
are.
</p>
<div class="hero-ctas">
<a class="btn btn-ghost" href="https://docs.dotkernel.org/frontend-documentation/v5/reference/account-anonymization/" target="_blank" rel="noopener">Anonymization reference</a>
Expand All @@ -340,11 +343,12 @@
<div class="callout">
<h4>What anonymization changes</h4>
<ul>
<li>First and last name become <code>anonymous</code> plus the current UNIX timestamp - for example
<code>anonymous1725980747</code>.</li>
<li>First and last name become <code>anonymous</code> plus the current date and time in
<code>dmYHis</code> format - for example <code>anonymous23092026155300</code>.</li>
<li>The email becomes the same value plus whatever you set in <code>userAnonymizeAppend</code> -
<code>anonymous1725980747@example.com</code>.</li>
<li>The avatar image and its database record are deleted.</li>
<code>anonymous23092026155300@example.com</code>.</li>
<li>The account status is set to <code>deleted</code>; the row itself is kept.</li>
<li>On account deletion, the avatar image and its database record are deleted.</li>
</ul>
<p>
Point <code>userAnonymizeAppend</code> at a domain you control and it doubles as a catch-all
Expand Down Expand Up @@ -389,8 +393,9 @@
<div class="standard">
<h4>Module contents</h4>
<p><code>Controller</code>, <code>Entity</code>, <code>Repository</code> and
<code>Service</code> folders, plus <code>InputFilter</code>, <code>EventListener</code>,
<code>Helper</code>, <code>Command</code> or <code>Factory</code> as needed.</p>
<code>Service</code> folders, plus <code>Form</code>, <code>Fieldset</code>,
<code>InputFilter</code>, <code>EventListener</code>, <code>Factory</code>,
<code>Middleware</code> or <code>Enum</code> as needed.</p>
</div>
</div>
</div>
Expand Down Expand Up @@ -423,9 +428,11 @@
</div>
<div class="standard">
<h4>4 . Prepare the config files</h4>
<p>Copy the <code>.dist</code> files into place - <code>local.php</code>,
<code>development.local.php</code>, <code>mail.local.php</code>,
<code>debugbar.local.php</code> - then fill in the database, SMTP and reCAPTCHA details.</p>
<p><code>composer install</code> has already created <code>local.php</code> and
<code>mail.global.php</code>, and development mode created <code>development.local.php</code>;
fill in the database and reCAPTCHA details in <code>local.php</code>, and copy
<code>mail.global.php</code> to <code>mail.local.php</code> for the sender and SMTP details, so
credentials stay out of git.</p>
</div>
<div class="standard">
<h4>5 . Migrate and seed</h4>
Expand Down Expand Up @@ -474,7 +481,7 @@
</tr>
<tr>
<th scope="row">PHP</th>
<td>8.2 or newer, mod_php or FCGI (FPM). <code>memory_limit</code> at least 128M;
<td>8.2 or 8.3, mod_php or FCGI (FPM). <code>memory_limit</code> at least 128M;
<code>upload_max_filesize</code> and <code>post_max_size</code> at least 100M depending
on your data.</td>
</tr>
Expand All @@ -491,16 +498,16 @@
</tr>
<tr>
<th scope="row">Required extensions</th>
<td><code>mbstring</code>, the CLI SAPI for cron jobs, and Composer on
<td><code>curl</code>, <code>gettext</code>, <code>intl</code>, <code>json</code>,
<code>mbstring</code>, the CLI SAPI for cron jobs, and Composer on
<code>$PATH</code>.</td>
</tr>
<tr>
<th scope="row">Recommended extensions</th>
<td><code>opcache</code>; <code>pdo_mysql</code> or <code>mysqli</code>;
<td><code>opcache</code>; <code>pdo_mysql</code> for MySQL or MariaDB;
<code>dom</code> and <code>simplexml</code> for markup; <code>gd</code> and
<code>exif</code> for images; <code>zlib</code>, <code>zip</code>,
<code>bz2</code> for compression; <code>curl</code> when calling APIs;
<code>sqlite3</code> for the test suite.</td>
<code>bz2</code> for compression; <code>sqlite3</code> for the test suite.</td>
</tr>
</tbody>
</table>
Expand Down
Loading
Loading