--- a/b/user/plugins/add-page-by-form/add-page-by-form.php 2026-07-05 12:03:55.849015242 +0200 +++ b/user/plugins/add-page-by-form/add-page-by-form.php 2026-07-05 11:55:06.175609339 +0200 @@ -619,7 +619,19 @@ if ($overwrite_mode !== 'false') { if (file_exists($new_page_folder)) { if ($overwrite_mode === 'edit') { - $original_frontmatter = (array)$pages->get($new_page_folder)->header(); + // intotheeast patch (temporary, pending upstream fork): + // On Grav 2.0 header() returns a Grav\Common\Page\Header + // object whose data sits in a PROTECTED `items` property, + // so the original `(array)$header` yields mangled keys + // (\0*\0items) and every frontmatter lookup below misses — + // `array_merge($original_frontmatter['photos'], …)` then + // fatals under PHP 8. Use toArray() (clean keys) when the + // Header exposes it; fall back to the cast for a plain + // stdClass (classic pages). + $__header = $pages->get($new_page_folder)->header(); + $original_frontmatter = (is_object($__header) && method_exists($__header, 'toArray')) + ? $__header->toArray() + : (array)$__header; } else { Folder::delete($new_page_folder); } @@ -708,7 +720,13 @@ $file_fields_updated = array(); foreach ($file_fields as $file_field => $uploads) { - $file_fields_updated[$file_field] = array_merge($original_frontmatter[$file_field], $uploads); + // intotheeast patch: entries that render from folder-scanned + // media carry no matching frontmatter key, so fall back to [] + // rather than fatal array_merge() on a missing/null original. + $existing = (isset($original_frontmatter[$file_field]) && is_array($original_frontmatter[$file_field])) + ? $original_frontmatter[$file_field] + : array(); + $file_fields_updated[$file_field] = array_merge($existing, $uploads); // Get any (uploaded and then) deleted files foreach ($copy_files['deleted'] as $file_to_delete) {