Skip to content
Merged

Dev #3514

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
45 changes: 45 additions & 0 deletions app/CsrCampaignPage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CsrCampaignPage extends Model
{
protected $table = 'csr_campaign_page';

protected $fillable = [
'use_dynamic_content',
'hero_text',
'primary_cta_text',
'primary_cta_link',
'secondary_cta_text',
'secondary_cta_link',
'about_title',
'about_description',
'resources_title',
];

protected $casts = [
'use_dynamic_content' => 'boolean',
];

public function resources()
{
return $this->hasMany(CsrCampaignResource::class, 'page_id')->orderBy('position');
}

public static function config(): self
{
$page = self::first();
if ($page) {
return $page;
}

return self::create([
'use_dynamic_content' => false,
'primary_cta_link' => 'https://codeweek.eu/blog/futurereadycsr-campaign-launch',
'secondary_cta_link' => 'https://codeweek.eu/blog/futurereadycsr-resources',
]);
}
}
27 changes: 27 additions & 0 deletions app/CsrCampaignResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CsrCampaignResource extends Model
{
protected $table = 'csr_campaign_resources';

protected $fillable = [
'page_id',
'title',
'description',
'button_text',
'button_link',
'image',
'image_mobile',
'position',
'active',
];

protected $casts = [
'position' => 'integer',
'active' => 'boolean',
];
}
36 changes: 36 additions & 0 deletions app/DancePage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class DancePage extends Model
{
protected $table = 'dance_page';

protected $fillable = [
'use_dynamic_content',
'hero_title',
'hero_subtitle',
'content_intro_title',
'content_intro_subtitle',
'get_involved_title',
'get_involved_subtitle',
];

protected $casts = [
'use_dynamic_content' => 'boolean',
];

public static function config(): self
{
$page = self::first();
if ($page) {
return $page;
}

return self::create([
'use_dynamic_content' => false,
]);
}
}
5 changes: 4 additions & 1 deletion app/Http/Controllers/OnlineCoursesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

namespace App\Http\Controllers;

use App\OnlineCoursesPage;
use App\OnlineCourse;
use Illuminate\Support\Facades\Schema;
use Illuminate\View\View;

class OnlineCoursesController extends Controller
Expand All @@ -14,7 +16,8 @@ class OnlineCoursesController extends Controller
public function index(): View
{
$onlineCourses = OnlineCourse::active()->ordered()->get();
$page = Schema::hasTable('online_courses_page') ? OnlineCoursesPage::config() : null;

return view('online-courses', compact('onlineCourses'));
return view('online-courses', compact('onlineCourses', 'page'));
}
}
69 changes: 69 additions & 0 deletions app/Nova/CsrCampaignPage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace App\Nova;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\HasMany;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Trix;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Panel;

class CsrCampaignPage extends Resource
{
public static $group = 'Content';
public static $model = \App\CsrCampaignPage::class;
public static $title = 'id';

public static function label()
{
return 'Future Ready CSR';
}

public static function singularLabel()
{
return 'Future Ready CSR Page';
}

public static function uriKey(): string
{
return 'csr-campaign-page';
}

public static function indexQuery(NovaRequest $request, $query)
{
return $query->where('id', 1);
}

public static function authorizedToCreate(Request $request): bool
{
return false;
}

public function fields(Request $request): array
{
return [
ID::make()->onlyOnForms(),
Panel::make('General', [
Boolean::make('Use dynamic content for this page', 'use_dynamic_content'),
])->collapsable()->collapsedByDefault(),
Panel::make('Hero', [
Trix::make('Hero text', 'hero_text')->nullable(),
Text::make('Primary CTA text', 'primary_cta_text')->nullable(),
Text::make('Primary CTA link', 'primary_cta_link')->nullable(),
Text::make('Secondary CTA text', 'secondary_cta_text')->nullable(),
Text::make('Secondary CTA link', 'secondary_cta_link')->nullable(),
])->collapsable()->collapsedByDefault(),
Panel::make('About section', [
Text::make('Title', 'about_title')->nullable(),
Trix::make('Description', 'about_description')->nullable(),
])->collapsable()->collapsedByDefault(),
Panel::make('Resources section', [
Text::make('Section title', 'resources_title')->nullable(),
HasMany::make('Resources', 'resources', CsrCampaignResource::class),
])->collapsable()->collapsedByDefault(),
];
}
}
38 changes: 38 additions & 0 deletions app/Nova/CsrCampaignResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace App\Nova;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Http\Requests\NovaRequest;

class CsrCampaignResource extends Resource
{
public static $model = \App\CsrCampaignResource::class;
public static $title = 'title';
public static $displayInNavigation = false;

public function fields(Request $request): array
{
return [
ID::make()->sortable(),
Text::make('Title', 'title')->nullable(),
Textarea::make('Description', 'description')->nullable()->alwaysShow(),
Text::make('Button text', 'button_text')->nullable(),
Text::make('Button link', 'button_link')->nullable(),
Text::make('Desktop image', 'image')->nullable(),
Text::make('Mobile image', 'image_mobile')->nullable(),
Number::make('Position', 'position')->min(0)->nullable(),
Boolean::make('Active', 'active'),
];
}

public static function indexQuery(NovaRequest $request, $query)
{
return $query->orderBy('position')->orderBy('id');
}
}
65 changes: 65 additions & 0 deletions app/Nova/DancePage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace App\Nova;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Trix;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Panel;

class DancePage extends Resource
{
public static $group = 'Content';
public static $model = \App\DancePage::class;
public static $title = 'id';

public static function label()
{
return 'Dance Page';
}

public static function singularLabel()
{
return 'Dance Page';
}

public static function uriKey(): string
{
return 'dance-page';
}

public static function indexQuery(NovaRequest $request, $query)
{
return $query->where('id', 1);
}

public static function authorizedToCreate(Request $request): bool
{
return false;
}

public function fields(Request $request): array
{
return [
ID::make()->onlyOnForms(),
Panel::make('General', [
Boolean::make('Use dynamic content for this page', 'use_dynamic_content'),
])->collapsable()->collapsedByDefault(),
Panel::make('Hero', [
Text::make('Hero title', 'hero_title')->nullable(),
Trix::make('Hero subtitle', 'hero_subtitle')->nullable(),
])->collapsable()->collapsedByDefault(),
Panel::make('Content intro', [
Text::make('Title', 'content_intro_title')->nullable(),
Trix::make('Subtitle', 'content_intro_subtitle')->nullable(),
])->collapsable()->collapsedByDefault(),
Panel::make('Get involved section', [
Text::make('Title', 'get_involved_title')->nullable(),
Trix::make('Subtitle', 'get_involved_subtitle')->nullable(),
])->collapsable()->collapsedByDefault(),
];
}
}
65 changes: 65 additions & 0 deletions app/Nova/OnlineCoursesPage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace App\Nova;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Trix;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Panel;

class OnlineCoursesPage extends Resource
{
public static $group = 'Content';
public static $model = \App\OnlineCoursesPage::class;
public static $title = 'id';

public static function label()
{
return 'Online Courses Page';
}

public static function singularLabel()
{
return 'Online Courses Page';
}

public static function uriKey(): string
{
return 'online-courses-page';
}

public static function indexQuery(NovaRequest $request, $query)
{
return $query->where('id', 1);
}

public static function authorizedToCreate(Request $request): bool
{
return false;
}

public function fields(Request $request): array
{
return [
ID::make()->onlyOnForms(),
Panel::make('General', [
Boolean::make('Use dynamic content for this page', 'use_dynamic_content'),
])->collapsable()->collapsedByDefault(),
Panel::make('Hero', [
Text::make('Title', 'hero_title')->nullable(),
Trix::make('Text', 'hero_text')->nullable(),
Text::make('CTA text', 'hero_cta_text')->nullable(),
Text::make('CTA link', 'hero_cta_link')->nullable(),
])->collapsable()->collapsedByDefault(),
Panel::make('Intro section', [
Text::make('Title', 'intro_title')->nullable(),
Trix::make('Paragraph 1', 'intro_text_1')->nullable(),
Trix::make('Paragraph 2', 'intro_text_2')->nullable(),
Trix::make('Paragraph 3', 'intro_text_3')->nullable(),
])->collapsable()->collapsedByDefault(),
];
}
}
Loading
Loading