From 96f51563a6fb7f66d7bd269ee6d8821e599f162a Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Fri, 1 May 2026 09:31:40 +0100 Subject: [PATCH 1/2] Embed roadmap PDF in training pages via placeholder and Nova URL field. Trix often strips iframes; use [[embed_roadmap_pdf]] in content plus optional roadmap_pdf_embed_url to render a responsive PDF iframe with new-tab fallback. Made-with: Cursor --- app/Nova/TrainingResource.php | 5 ++++ app/TrainingResource.php | 1 + ..._embed_url_to_training_resources_table.php | 28 +++++++++++++++++++ ...ResourceDiscoverDigitalProgrammeSeeder.php | 5 ++-- .../partials/roadmap-pdf-embed.blade.php | 18 ++++++++++++ resources/views/training/show.blade.php | 16 +++++++++-- 6 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2026_05_01_120000_add_roadmap_pdf_embed_url_to_training_resources_table.php create mode 100644 resources/views/training/partials/roadmap-pdf-embed.blade.php diff --git a/app/Nova/TrainingResource.php b/app/Nova/TrainingResource.php index 0cca7683c..93c404fe6 100644 --- a/app/Nova/TrainingResource.php +++ b/app/Nova/TrainingResource.php @@ -153,6 +153,11 @@ public function fields(Request $request): array ->nullable() ->help('Optional scroll offset in pixels for in-page anchor links (useful with sticky headers).'), + Text::make('Roadmap PDF embed URL', 'roadmap_pdf_embed_url') + ->nullable() + ->rules('nullable', 'url') + ->help('Optional HTTPS URL to a PDF shown inline in the Roadmap section. Put the literal text [[embed_roadmap_pdf]] in Content where the embed should appear (avoids Nova stripping iframes).'), + Text::make('Button text', 'button_text')->nullable(), Text::make('Button URL', 'button_url') diff --git a/app/TrainingResource.php b/app/TrainingResource.php index 58774377c..56a438517 100644 --- a/app/TrainingResource.php +++ b/app/TrainingResource.php @@ -34,6 +34,7 @@ class TrainingResource extends Model 'register_box_section', 'about_box_section', 'anchor_offset', + 'roadmap_pdf_embed_url', 'button_text', 'button_url', 'secondary_button_text', diff --git a/database/migrations/2026_05_01_120000_add_roadmap_pdf_embed_url_to_training_resources_table.php b/database/migrations/2026_05_01_120000_add_roadmap_pdf_embed_url_to_training_resources_table.php new file mode 100644 index 000000000..7980a155b --- /dev/null +++ b/database/migrations/2026_05_01_120000_add_roadmap_pdf_embed_url_to_training_resources_table.php @@ -0,0 +1,28 @@ +string('roadmap_pdf_embed_url')->nullable()->after('anchor_offset'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('training_resources', function (Blueprint $table) { + $table->dropColumn('roadmap_pdf_embed_url'); + }); + } +}; diff --git a/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php b/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php index 1f3e9fb13..c25ce4e78 100644 --- a/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php +++ b/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php @@ -38,10 +38,10 @@ public function run(): void
  • Plan evaluation and feedback to measure outcomes.
  • Use digital outreach and communication to build awareness and follow-up.
  • -
    +

    Roadmap

    Use this roadmap if you do not have time to read the full deliverable. The one-pagers mirror the toolkit flow and provide a practical checklist for implementation.

    - Discover Digital Programme roadmap diagram + [[embed_roadmap_pdf]]
    HTML, 'body_image' => null, @@ -91,6 +91,7 @@ public function run(): void HTML, 'anchor_offset' => 120, + 'roadmap_pdf_embed_url' => 'https://codeweek-resources.s3.eu-west-1.amazonaws.com/+discover-digital-toolkit/DDP_toolkit_roadmap.pdf', 'third_button_text' => 'Register an activity', 'third_button_url' => 'https://codeweek.eu/add?skip=1', 'meta_title' => 'Discover Digital Programme - Toolkit', diff --git a/resources/views/training/partials/roadmap-pdf-embed.blade.php b/resources/views/training/partials/roadmap-pdf-embed.blade.php new file mode 100644 index 000000000..219dd8d95 --- /dev/null +++ b/resources/views/training/partials/roadmap-pdf-embed.blade.php @@ -0,0 +1,18 @@ +@props([ + 'url', +]) +
    + +
    +

    + + {{ __('Open roadmap PDF in a new tab') }} + + — {{ __('if the preview does not load in your browser.') }} +

    diff --git a/resources/views/training/show.blade.php b/resources/views/training/show.blade.php index c10c5e7e9..51c0aac98 100644 --- a/resources/views/training/show.blade.php +++ b/resources/views/training/show.blade.php @@ -23,6 +23,18 @@ return \Illuminate\Support\Str::startsWith($url, ['http://', 'https://', '//']); }; + + $renderedContent = $trainingResource->content ?? ''; + $roadmapEmbedUrl = trim((string) ($trainingResource->roadmap_pdf_embed_url ?? '')); + if ($roadmapEmbedUrl !== '' && str_contains($renderedContent, '[[embed_roadmap_pdf]]')) { + $renderedContent = str_replace( + '[[embed_roadmap_pdf]]', + view('training.partials.roadmap-pdf-embed', ['url' => $roadmapEmbedUrl])->render(), + $renderedContent + ); + } elseif (str_contains($renderedContent, '[[embed_roadmap_pdf]]')) { + $renderedContent = str_replace('[[embed_roadmap_pdf]]', '', $renderedContent); + } @endphp @section('title', $pageTitle) @@ -87,9 +99,9 @@ class="mb-12 w-full h-full max-h-[630px] object-contain" /> @endif - @if(!empty($trainingResource->content)) + @if(!empty($renderedContent))
    - {!! $trainingResource->content !!} + {!! $renderedContent !!}
    @endif From 9b142cdc088cbcb948ddbf737330450340b4230d Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Fri, 1 May 2026 09:32:42 +0100 Subject: [PATCH 2/2] Use DDP S3 thumbnail for training resource card image. Made-with: Cursor --- .../seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php b/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php index c25ce4e78..ba3063414 100644 --- a/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php +++ b/database/seeders/TrainingResourceDiscoverDigitalProgrammeSeeder.php @@ -17,8 +17,7 @@ public function run(): void [ 'card_title' => 'Discover Digital Programme', 'card_author' => 'Code4Europe | Deliverable D4.2 | Public toolkit', - // Temporary thumbnail until final artwork is provided. - 'card_image' => '/images/banner_training.svg', + 'card_image' => 'https://codeweek-resources.s3.eu-west-1.amazonaws.com/+discover-digital-toolkit/DDP_thumbnail.png', 'page_title' => 'Discover Digital Programme', 'hero_author' => 'Code4Europe | Deliverable D4.2 | Public toolkit', 'hero_button_text' => 'Open the complete toolkit',