move into sonardesk

This commit is contained in:
Mark Gregory
2026-10-12 16:06:40 +01:00
parent 7ed8c6ef58
commit 27af94d8ca
11 changed files with 48 additions and 94 deletions
@@ -1,15 +1,3 @@
@extends('licensing::customer.layout')
@section('title', 'SonarDesk · Purchase')
@section('content')
<section class="card">
<h1>SonarDesk</h1>
<p>Native SonarQube project monitoring for macOS.</p>
<p>Choose your licence on our secure checkout service. Your subscription and licence are processed by the existing SonarDesk licensing platform.</p>
@if($enabled)
<p><a href="{{ route('sonardesk.checkout') }}" style="display:inline-block;background:#163b70;color:#fff;padding:12px 20px;border-radius:8px;text-decoration:none">View plans &amp; buy</a></p>
@else
<p role="status">Online checkout is not yet enabled on this site. No payment will be taken here.</p>
@endif
<p><a href="{{ route('sonardesk.downloads') }}">Downloads &amp; release notes</a> · <a href="{{ route('account.sonardesk.index') }}">My licences</a></p>
</section>
@endsection
@extends('sonardesk.layout')
@section('title','SonarDesk — Purchase')
@section('content')<section class="sd-pagehead"><div class="sd-container"><span class="sd-eyebrow">SonarDesk licensing</span><h1>Get SonarDesk</h1><p>Choose your licence using the existing secure SonarDesk checkout service.</p></div></section><section class="sd-section"><div class="sd-container sd-detail"><div class="sd-card"><h2>Purchase a licence</h2><p>Your subscription, billing and licence are managed by the established SonarDesk service.</p>@if($enabled)<a class="sd-btn sd-btn-dark" href="{{ route('sonardesk.checkout') }}">View plans &amp; buy →</a>@else<p class="sd-note">Online checkout is not enabled on this site yet. No payment will be taken here.</p>@endif<div class="sd-card-actions"><a class="sd-textlink" href="{{ route('sonardesk.downloads') }}">Downloads &amp; release notes →</a><a class="sd-textlink" href="{{ route('account.sonardesk.index') }}">My licences →</a></div></div></div></section>@endsection
@@ -1,13 +1,7 @@
@extends('sonardesk.layout')
@section('title','Downloads & Release Notes')
@section('content')
<section class="sd-hero" style="padding-bottom:24px"><span class="sd-kicker">SonarDesk / Distribution</span><h1>Downloads <span style="color:var(--gold)">&amp; releases.</span></h1><p class="sd-lead">Installers and published release history, collected in one place. Review details before downloading.</p></section>
@if($latest)
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Latest stable release</span><h2>SonarDesk {{ $latest->version }}</h2><p>{{ \Illuminate\Support\Str::limit(trim(strip_tags($latest->release_notes ?? 'Native SonarQube monitoring for macOS.')), 210) }}</p></div><span class="sd-badge">Stable</span></div><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.releases.download',$latest) }}">Download SonarDesk →</a><a class="sd-button secondary" href="{{ route('sonardesk.releases.show',$latest) }}">Release notes &amp; requirements</a></div></section>
@endif
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Product library</span><h2>Available downloads</h2><p>Published products grouped together, with concise descriptions and direct access to details.</p></div></div>
@if($products->isNotEmpty())<div class="sd-list">@foreach($products as $product)<article class="sd-row"><div><span class="sd-badge">{{ $product->platform ?: 'Software' }}</span><h3 style="margin-top:10px">{{ $product->name }} <span class="sd-meta">{{ $product->version }}</span></h3><p>{{ \Illuminate\Support\Str::limit(trim(strip_tags($product->description ?? '')), 160) }}</p></div><div class="sd-row-actions"><a class="sd-button secondary" href="{{ route('sonardesk.products.show',$product) }}">Details</a><a class="sd-button" href="{{ route('sonardesk.products.download',$product) }}">Download ↓</a></div></article>@endforeach</div>
@else<div class="sd-empty">No additional products have been published yet.</div>@endif
</section>
<section class="sd-section"><div class="sd-section-head"><div><span class="sd-kicker">Version history</span><h2>Release notes</h2><p>Browse changes and download previous published builds.</p></div></div><div class="sd-list">@forelse($releases as $release)<article class="sd-row"><div><h3>SonarDesk {{ $release->version }} <span class="sd-badge">{{ ucfirst($release->channel) }}</span></h3><p>{{ \Illuminate\Support\Str::limit(trim(strip_tags($release->release_notes ?? 'Release notes available on the details page.')), 160) }}</p><span class="sd-meta">{{ $release->published_at?->format('j M Y') }}</span></div><div class="sd-row-actions"><a class="sd-button secondary" href="{{ route('sonardesk.releases.show',$release) }}">Full notes</a><a class="sd-button" href="{{ route('sonardesk.releases.download',$release) }}">Download ↓</a></div></article>@empty<div class="sd-empty">No releases have been published yet.</div>@endforelse</div><div style="margin-top:24px">{{ $releases->links() }}</div></section>
@endsection
@section('content')<section class="sd-pagehead"><div class="sd-container"><span class="sd-eyebrow">Software distribution</span><h1>Downloads &amp; release notes</h1><p>All published applications in one place. Download current installers, view product details and read complete release notes.</p></div></section><section class="sd-section"><div class="sd-container"><span class="sd-eyebrow">Current downloads</span><h2>Available software</h2><div class="sd-grid">
@if($latest)<article class="sd-card"><span class="sd-eyebrow">SonarDesk · macOS</span><h3>SonarDesk</h3><p class="sd-meta">Version {{ $latest->version }} @if($latest->published_at) · {{ $latest->published_at->format('j M Y') }} @endif</p><p>{{ \Illuminate\Support\Str::limit(trim(preg_replace('/\s+/', ' ', strip_tags(\Illuminate\Support\Str::markdown($latest->release_notes ?: 'Native SonarQube project monitoring for macOS.', ['html_input'=>'strip','allow_unsafe_links'=>false])))), 155) }}</p><div class="sd-card-actions"><a class="sd-btn sd-btn-dark" href="{{ route('sonardesk.latest') }}">Download ↓</a><a class="sd-textlink" href="{{ route('sonardesk.releases.show',$latest) }}">Details &amp; notes →</a></div></article>@endif
@foreach($products as $product)<article class="sd-card"><span class="sd-eyebrow">{{ $product->platform ?: 'Software' }}</span><h3>{{ $product->name }}</h3><p class="sd-meta">{{ $product->version ? 'Version '.$product->version : 'Current release' }}</p><p>{{ \Illuminate\Support\Str::limit(trim(preg_replace('/\s+/', ' ', strip_tags(\Illuminate\Support\Str::markdown($product->description ?: 'Published software download.', ['html_input'=>'strip','allow_unsafe_links'=>false])))), 155) }}</p><div class="sd-card-actions"><a class="sd-btn sd-btn-dark" href="{{ route('sonardesk.products.download',$product) }}">Download ↓</a><a class="sd-textlink" href="{{ route('sonardesk.products.show',$product) }}">Product details →</a></div></article>@endforeach
</div>@if(!$latest && $products->isEmpty())<p class="sd-note">No published installers are available yet. Downloads appear automatically when a product or release is published in the distribution administration.</p>@endif</div></section>
<section class="sd-section sd-section-alt"><div class="sd-container"><span class="sd-eyebrow">Release archive</span><h2>SonarDesk release history</h2><p class="sd-intro">Read a summary here or open the full release page for notes, requirements and the installer.</p><div class="sd-list">@forelse($releases as $release)<article class="sd-row"><div><strong>SonarDesk {{ $release->version }}</strong><p>Build {{ $release->build_number }} · {{ ucfirst($release->channel) }} @if($release->published_at) · {{ $release->published_at->format('j M Y') }} @endif</p><p>{{ \Illuminate\Support\Str::limit(trim(preg_replace('/\s+/', ' ', strip_tags(\Illuminate\Support\Str::markdown($release->release_notes ?: 'Release information available on the details page.', ['html_input'=>'strip','allow_unsafe_links'=>false])))), 160) }}</p></div><div class="sd-row-actions"><a href="{{ route('sonardesk.releases.show',$release) }}">Release details →</a><a href="{{ route('sonardesk.releases.download',$release) }}">Download ↓</a></div></article>@empty<p>No published releases yet.</p>@endforelse</div><div class="sd-pagination">{{ $releases->links() }}</div></div></section>@endsection
@@ -1,3 +1,3 @@
@extends('sonardesk.layout')
@section('title', $product->name)
@section('content')<section class="sd-hero" style="padding-bottom:24px"><a class="sd-meta" href="{{ route('sonardesk.downloads') }}">← All downloads</a><p class="sd-kicker">Product details</p><h1>{{ $product->name }}</h1><p class="sd-lead">{{ $product->platform }} · Version {{ $product->version }}</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.products.download',$product) }}">Download {{ $product->original_filename ?: 'file' }} ↓</a><a class="sd-button secondary" href="{{ route('sonardesk.downloads') }}">Other downloads</a></div></section><section class="sd-section"><div class="sd-grid two"><article class="sd-card"><h2>About this product</h2><div class="sd-text">{{ $product->description ?: 'No description provided.' }}</div></article><article class="sd-card"><h2>Download details</h2><p>Platform: {{ $product->platform ?: 'Not specified' }}</p><p>Version: {{ $product->version ?: 'Not specified' }}</p><p>File: {{ $product->original_filename ?: 'Download' }}</p>@if($product->file_size)<p>Size: {{ number_format($product->file_size / 1048576, 1) }} MB</p>@endif</article></div></section>@endsection
@section('title',$product->name.' — Download')
@section('content')<section class="sd-pagehead"><div class="sd-container"><a class="sd-back" href="{{ route('sonardesk.downloads') }}">← All downloads</a><p class="sd-eyebrow" style="margin-top:24px">{{ $product->platform ?: 'Software' }} · {{ $product->version ? 'Version '.$product->version : 'Current release' }}</p><h1>{{ $product->name }}</h1><p>Product information and installer download.</p><div class="sd-actions"><a class="sd-btn sd-btn-primary" href="{{ route('sonardesk.products.download',$product) }}">Download {{ $product->name }} ↓</a></div></div></section><section class="sd-section"><div class="sd-container sd-detail"><article class="sd-card"><h2>About {{ $product->name }}</h2><div class="sd-prose">{!! \Illuminate\Support\Str::markdown($product->description ?: 'Published software download.', ['html_input'=>'strip','allow_unsafe_links'=>false]) !!}</div><hr class="sd-divider"><h2>Download information</h2><p><strong>Platform:</strong> {{ $product->platform ?: 'See product documentation' }}</p>@if($product->version)<p><strong>Version:</strong> {{ $product->version }}</p>@endif @if($product->file_size)<p><strong>Size:</strong> {{ number_format($product->file_size / 1048576, 2) }} MB</p>@endif<a class="sd-btn sd-btn-dark" href="{{ route('sonardesk.products.download',$product) }}">Download installer ↓</a></article></div></section>@endsection
@@ -1,3 +1,3 @@
@extends('sonardesk.layout')
@section('title', 'SonarDesk '.$release->version.' Release Notes')
@section('content')<section class="sd-hero" style="padding-bottom:20px"><a class="sd-meta" href="{{ route('sonardesk.downloads') }}">← All downloads</a><p class="sd-kicker">{{ ucfirst($release->channel) }} release · {{ $release->published_at?->format('j M Y') }}</p><h1>SonarDesk <span style="color:var(--gold)">{{ $release->version }}</span></h1><p class="sd-lead">Build {{ $release->build_number ?: '—' }}</p><div class="sd-actions"><a class="sd-button" href="{{ route('sonardesk.releases.download',$release) }}">Download {{ $release->original_filename ?: 'SonarDesk' }} ↓</a><a class="sd-button secondary" href="{{ route('sonardesk.downloads') }}">Browse all releases</a></div></section><section class="sd-section"><div class="sd-grid two" style="grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr)"><article class="sd-card"><h2>Full release notes</h2><div class="sd-text">{{ $release->release_notes ?: 'No release notes provided.' }}</div></article><article class="sd-card"><h2>System requirements</h2><p>macOS {{ $release->minimum_macos ?: 'Version not specified' }}@if($release->minimum_macos) or later @endif</p><h3>File information</h3><p>{{ $release->original_filename ?: 'SonarDesk installer' }}</p>@if($release->file_size)<p>{{ number_format($release->file_size / 1048576, 1) }} MB</p>@endif @if($release->sha256)<p class="sd-meta">SHA-256</p><code style="font-size:12px;word-break:break-all">{{ $release->sha256 }}</code>@endif</article></div></section>@endsection
@section('title','SonarDesk '.$release->version.' — Release Notes')
@section('content')<section class="sd-pagehead"><div class="sd-container"><a class="sd-back" href="{{ route('sonardesk.downloads') }}">← All downloads</a><p class="sd-eyebrow" style="margin-top:24px">SonarDesk · {{ ucfirst($release->channel) }}</p><h1>SonarDesk {{ $release->version }}</h1><p>Build {{ $release->build_number }} @if($release->published_at) · Released {{ $release->published_at->format('j F Y') }} @endif</p><div class="sd-actions"><a class="sd-btn sd-btn-primary" href="{{ route('sonardesk.releases.download',$release) }}">Download SonarDesk ↓</a></div></div></section><section class="sd-section"><div class="sd-container sd-detail"><article class="sd-card"><h2>Release notes</h2><div class="sd-prose">{!! \Illuminate\Support\Str::markdown($release->release_notes ?: 'No release notes were provided for this version.', ['html_input'=>'strip','allow_unsafe_links'=>false]) !!}</div><hr class="sd-divider"><h2>System requirements</h2><p><strong>Platform:</strong> macOS</p><p><strong>Minimum version:</strong> {{ $release->minimum_macos ?: 'See application documentation' }}</p><hr class="sd-divider"><h2>Installation</h2><ol><li>Download the signed application installer.</li><li>Open the downloaded disk image and move SonarDesk into Applications.</li><li>Launch SonarDesk and configure your SonarQube connection.</li></ol>@if($release->file_size)<p class="sd-meta">Installer size: {{ number_format($release->file_size / 1048576, 2) }} MB</p>@endif @if($release->sha256)<details><summary>SHA-256 checksum</summary><p class="sd-checksum"><code>{{ $release->sha256 }}</code></p></details>@endif<div class="sd-actions"><a class="sd-btn sd-btn-dark" href="{{ route('sonardesk.releases.download',$release) }}">Download version {{ $release->version }} ↓</a></div></article></div></section>@endsection