Skip to content

Commit

Permalink
add job for attaching context to contents (#2918)
Browse files Browse the repository at this point in the history
  • Loading branch information
emmachughes authored Jan 17, 2025
1 parent 02ac244 commit 3bab59e
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 0 deletions.
24 changes: 24 additions & 0 deletions sourcecode/hub/app/Http/Controllers/Admin/ContextController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@

namespace App\Http\Controllers\Admin;

use App\Http\Requests\AttachContextToContentsRequest;
use App\Http\Requests\StoreContextRequest;
use App\Jobs\AttachContextToContents;
use App\Models\Context;
use Illuminate\Contracts\Bus\Dispatcher;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Response;

Expand All @@ -31,4 +34,25 @@ public function add(StoreContextRequest $request): RedirectResponse
return redirect()->route('admin.contexts.index')
->with('alert', trans('messages.context-added'));
}

public function attachToContents(): Response
{
$contexts = Context::all()
->mapWithKeys(fn(Context $context) => [$context->id => $context->name]);

return response()->view('admin.contexts.attach-to-contents', [
'available_contexts' => $contexts,
]);
}

public function performAttachToContents(
AttachContextToContentsRequest $request,
Dispatcher $dispatcher,
): RedirectResponse {
$dispatcher->dispatch(
new AttachContextToContents($request->getContext()),
);

return redirect()->route('admin.index');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace App\Http\Requests;

use App\Models\Context;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class AttachContextToContentsRequest extends FormRequest
{
/**
* @return array<mixed>
*/
public function rules(): array
{
return [
'context' => ['required', Rule::exists(Context::class, 'id')],
];
}

public function getContext(): Context
{
return Context::where('id', $this->validated('context'))->firstOrFail();
}
}
27 changes: 27 additions & 0 deletions sourcecode/hub/app/Jobs/AttachContextToContents.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace App\Jobs;

use App\Models\Content;
use App\Models\Context;
use Illuminate\Bus\Queueable;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\SerializesModels;

class AttachContextToContents
{
use Dispatchable;
use Queueable;
use SerializesModels;

public function __construct(private readonly Context $context) {}

public function handle(): void
{
Content::lazy()->each(function (Content $content) {
$content->contexts()->syncWithoutDetaching([$this->context]);
});
}
}
3 changes: 3 additions & 0 deletions sourcecode/hub/lang/en/messages.php
Original file line number Diff line number Diff line change
Expand Up @@ -238,4 +238,7 @@
'context-added' => 'The context was added.',
'theme-edlib' => 'Edlib light',
'theme-dark' => 'Edlib dark',
'attach-context-to-contents' => 'Attach context to contents',
'attach-context-to-contents-warning' => 'This adds a context to all contents',
'start-job' => 'Start job',
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<x-layout>
<x-slot:title>{{ trans('messages.attach-context-to-contents') }}</x-slot:title>

<p class="alert alert-danger">{{ trans('messages.attach-context-to-contents-warning') }}</p>

<x-form action="" method="POST">
<x-form.field
name="context"
type="select"
emptyOption
required
:label="trans('messages.context')"
:options="$available_contexts"
/>

<x-form.button class="btn btn-primary">{{ trans('messages.start-job') }}</x-form.button>
</x-form>
</x-layout>
6 changes: 6 additions & 0 deletions sourcecode/hub/resources/views/admin/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
</a>
</li>

<li>
<a href="{{ route('admin.attach-context-to-contents') }}">
{{ trans('messages.attach-context-to-contents') }}
</a>
</li>

<li>
<x-form action="{{ route('admin.rebuild-content-index') }}">
<button class="btn btn-link p-0">{{ trans('messages.rebuild-content-index') }}</button>
Expand Down
7 changes: 7 additions & 0 deletions sourcecode/hub/routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,13 @@
->uses([ContextController::class, 'add'])
->name('admin.contexts.add');

Route::get('/attach-context-to-contents')
->uses([ContextController::class, 'attachToContents'])
->name('admin.attach-context-to-contents');

Route::post('/attach-context-to-contents')
->uses([ContextController::class, 'performAttachToContents']);

Route::prefix('/lti-platforms')->group(function () {
Route::get('')
->uses([LtiPlatformController::class, 'index'])
Expand Down

0 comments on commit 3bab59e

Please sign in to comment.