From e7c9e839fbc59df172c89a63da0fd5a3a8acf5b6 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Mon, 12 Oct 2026 10:21:25 +0100 Subject: [PATCH] download fixes --- views/downloads/index.blade.php | 13 ++ views/layouts/app.blade.php | 383 ++++++++++++++++++++++++++++++++ 2 files changed, 396 insertions(+) create mode 100644 views/downloads/index.blade.php create mode 100644 views/layouts/app.blade.php diff --git a/views/downloads/index.blade.php b/views/downloads/index.blade.php new file mode 100644 index 0000000..6c172c8 --- /dev/null +++ b/views/downloads/index.blade.php @@ -0,0 +1,13 @@ +@extends('layouts.app', ['title' => 'Download SonarDesk — Native SonarQube monitoring for macOS', 'description' => 'Download the latest signed SonarDesk release for macOS, review release notes and system requirements.']) +@section('fullbleed') +
{{ $settings['eyebrow'] }}

{{ $settings['title'] }}

{{ $settings['intro'] }}

@if($latest)
✓ Signed distribution✓ SHA-256 verified✓ Secure licence activation
@else
The next SonarDesk release is being prepared.Check back shortly or contact support.
@endif
SonarDesk
SonarDesk
Project healthAll systems monitored
NativeBuilt for macOS
+
Native macOSFast, focused desktop workflow
SonarQubeYour server remains the source of truth
SecurityTokens protected by macOS Keychain
UpdatesProfessional in-app release delivery
+@if($latest) +
Latest stable release

SonarDesk {{ $latest->version }}

Build {{ $latest->build_number }} · Released {{ $latest->published_at?->format('j F Y') }}

Download {{ $latest->version }}
{!! nl2br(e($latest->release_notes ?: 'This release contains the latest SonarDesk improvements and maintenance updates.')) !!}
SHA-256 checksum · Verify download{{ $latest->sha256 }}
+@endif +@if($products->isNotEmpty()) +
SOFTWARE LIBRARY

Available downloads

Installers and tools, ready to download.

@foreach($products as $product)
{{ $product->platform ?: 'Software' }}{{ $product->version ? 'Version '.$product->version : 'Latest' }}

{{ $product->name }}

{{ $product->description ?: 'Download the latest available package.' }}

@endforeach
+@endif +
Release archive

Previous versions

Published SonarDesk builds remain available here for customers who need a previous release.

@forelse($releases as $release)
SonarDesk {{ $release->version }}Build {{ $release->build_number }} · {{ ucfirst($release->channel) }} · {{ $release->published_at?->format('j M Y') }}
{{ $release->formatted_size }}Download
@empty

No published releases are available yet.

@endforelse
{{ $releases->links() }}
+
Support

Installation or activation help?

{{ $settings['support_text'] }}

Contact SonarDesk support
+@endsection diff --git a/views/layouts/app.blade.php b/views/layouts/app.blade.php new file mode 100644 index 0000000..6aea0e9 --- /dev/null +++ b/views/layouts/app.blade.php @@ -0,0 +1,383 @@ + + + + + + + + @php + $seoSiteName = \App\Models\SiteSetting::valueFor('seo_site_name', 'SonarDesk'); + $seoDefaultTitle = \App\Models\SiteSetting::valueFor('seo_default_title', 'SonarDesk — Native SonarQube Monitoring for macOS'); + $seoDefaultDescription = \App\Models\SiteSetting::valueFor('seo_default_description', 'Native SonarQube monitoring for macOS. Track projects, quality gates, bugs, vulnerabilities and code smells from one professional desktop app.'); + $pageTitle = $title ?? $seoDefaultTitle; + $pageDescription = $description ?? $seoDefaultDescription; + $pageKeywords = $keywords ?? \App\Models\SiteSetting::valueFor('seo_default_keywords'); + $canonicalBase = rtrim(\App\Models\SiteSetting::valueFor('seo_canonical_base_url', config('app.url')), '/'); + $canonicalUrl = $canonical ?? ($canonicalBase . request()->getPathInfo()); + $socialImage = $ogImage ?? \App\Models\SiteSetting::valueFor('seo_default_og_image', url('/icons/og-sonardesk.png')); + $ogTitle = $ogTitle ?? $pageTitle; + $ogDescription = $ogDescription ?? $pageDescription; + $robotsIndex = $robotsIndex ?? true; + $robotsFollow = $robotsFollow ?? true; + $productionIndexing = app()->environment('production') && \App\Models\SiteSetting::booleanFor('seo_robots_enabled', true); + $robots = $productionIndexing ? (($robotsIndex ? 'index' : 'noindex').','.($robotsFollow ? 'follow' : 'nofollow').',max-image-preview:large,max-snippet:-1,max-video-preview:-1') : 'noindex,nofollow'; + $twitterSite = \App\Models\SiteSetting::valueFor('seo_twitter_site'); + $googleVerification = \App\Models\SiteSetting::valueFor('seo_google_site_verification'); + $organizationName = \App\Models\SiteSetting::valueFor('seo_organization_name', $seoSiteName); + $organizationLogo = \App\Models\SiteSetting::valueFor('seo_organization_logo', url('/icons/sonardesk-icon-512.png')); + $schema = [ + '@context' => 'https://schema.org', '@type' => 'SoftwareApplication', 'name' => $seoSiteName, + 'applicationCategory' => 'DeveloperApplication', 'operatingSystem' => 'macOS', 'url' => route('home'), + 'description' => $seoDefaultDescription, 'publisher' => ['@type' => 'Organization', 'name' => $organizationName, 'logo' => ['@type' => 'ImageObject', 'url' => $organizationLogo]], + ]; + @endphp + + {{ $pageTitle }} + + @if($pageKeywords)@endif + + + @if($googleVerification)@endif + + + + + + + + + + + + + + + + + + + + + + + + + @if($twitterSite)@endif + + + + + + + @stack('head') + + + + +@hasSection('fullbleed') + @yield('fullbleed') +@else +
+ @if(session('status'))
{{ session('status') }}
@endif + @if($errors->any())
{{ $errors->first() }}
@endif + @yield('content') +
+@endif + + + + + + + + + + + +