Added "auto_mailer" to mail profile so user can select which profiles are appropriate for auto mails to cliens through activities
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -26,7 +26,7 @@ public function index(): Response
|
|||||||
->orderBy('priority')
|
->orderBy('priority')
|
||||||
->orderBy('id')
|
->orderBy('id')
|
||||||
->get([
|
->get([
|
||||||
'id', 'name', 'active', 'host', 'port', 'username', 'from_name', 'encryption', 'from_address', 'priority', 'signature', 'last_success_at', 'last_error_at', 'last_error_message', 'test_status', 'test_checked_at',
|
'id', 'name', 'active', 'auto_mailer', 'host', 'port', 'username', 'from_name', 'encryption', 'from_address', 'priority', 'signature', 'last_success_at', 'last_error_at', 'last_error_message', 'test_status', 'test_checked_at',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return Inertia::render('Admin/MailProfiles/Index', [
|
return Inertia::render('Admin/MailProfiles/Index', [
|
||||||
@@ -76,6 +76,15 @@ public function toggle(Request $request, MailProfile $mailProfile)
|
|||||||
return back()->with('success', 'Status updated');
|
return back()->with('success', 'Status updated');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function toggleAutoMailer(Request $request, MailProfile $mailProfile)
|
||||||
|
{
|
||||||
|
$this->authorize('update', $mailProfile);
|
||||||
|
$mailProfile->auto_mailer = ! $mailProfile->auto_mailer;
|
||||||
|
$mailProfile->save();
|
||||||
|
|
||||||
|
return back()->with('success', 'Auto-mailer updated');
|
||||||
|
}
|
||||||
|
|
||||||
public function test(Request $request, MailProfile $mailProfile)
|
public function test(Request $request, MailProfile $mailProfile)
|
||||||
{
|
{
|
||||||
$this->authorize('test', $mailProfile);
|
$this->authorize('test', $mailProfile);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public function rules(): array
|
|||||||
'max_daily_quota' => ['nullable', 'integer', 'min:0'],
|
'max_daily_quota' => ['nullable', 'integer', 'min:0'],
|
||||||
'signature' => ['nullable', 'array'],
|
'signature' => ['nullable', 'array'],
|
||||||
'signature.*' => ['nullable', 'string', 'max:1000'],
|
'signature.*' => ['nullable', 'string', 'max:1000'],
|
||||||
|
'auto_mailer' => ['nullable', 'boolean'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public function rules(): array
|
|||||||
'active' => ['nullable', 'boolean'],
|
'active' => ['nullable', 'boolean'],
|
||||||
'signature' => ['nullable', 'array'],
|
'signature' => ['nullable', 'array'],
|
||||||
'signature.*' => ['nullable', 'string', 'max:1000'],
|
'signature.*' => ['nullable', 'string', 'max:1000'],
|
||||||
|
'auto_mailer' => ['nullable', 'boolean'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,13 +10,14 @@ class MailProfile extends Model
|
|||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name', 'active', 'host', 'port', 'encryption', 'username', 'from_address', 'from_name',
|
'name', 'active', 'auto_mailer', 'host', 'port', 'encryption', 'username', 'from_address', 'from_name',
|
||||||
'reply_to_address', 'reply_to_name', 'priority', 'signature', 'max_daily_quota', 'emails_sent_today',
|
'reply_to_address', 'reply_to_name', 'priority', 'signature', 'max_daily_quota', 'emails_sent_today',
|
||||||
'last_success_at', 'last_error_at', 'last_error_message', 'failover_to_id', 'test_status', 'test_checked_at',
|
'last_success_at', 'last_error_at', 'last_error_message', 'failover_to_id', 'test_status', 'test_checked_at',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'active' => 'boolean',
|
'active' => 'boolean',
|
||||||
|
'auto_mailer' => 'boolean',
|
||||||
'signature' => 'array',
|
'signature' => 'array',
|
||||||
'last_success_at' => 'datetime',
|
'last_success_at' => 'datetime',
|
||||||
'last_error_at' => 'datetime',
|
'last_error_at' => 'datetime',
|
||||||
|
|||||||
@@ -100,6 +100,12 @@ public function maybeQueue(Activity $activity, bool $sendFlag = true, array $opt
|
|||||||
$mailProfile = isset($options['mail_profile_id'])
|
$mailProfile = isset($options['mail_profile_id'])
|
||||||
? MailProfile::query()->find($options['mail_profile_id'])
|
? MailProfile::query()->find($options['mail_profile_id'])
|
||||||
: null;
|
: null;
|
||||||
|
$mailProfile ??= MailProfile::query()
|
||||||
|
->where('active', true)
|
||||||
|
->where('auto_mailer', true)
|
||||||
|
->orderBy('priority')
|
||||||
|
->orderBy('id')
|
||||||
|
->first();
|
||||||
$mailProfile ??= MailProfile::query()
|
$mailProfile ??= MailProfile::query()
|
||||||
->where('active', true)
|
->where('active', true)
|
||||||
->orderBy('priority')
|
->orderBy('priority')
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('mail_profiles', function (Blueprint $table): void {
|
||||||
|
$table->boolean('auto_mailer')->default(false)->after('active');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('mail_profiles', function (Blueprint $table): void {
|
||||||
|
$table->dropColumn('auto_mailer');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -99,6 +99,7 @@ const form = useForm({
|
|||||||
from_address: "",
|
from_address: "",
|
||||||
from_name: "",
|
from_name: "",
|
||||||
priority: 10,
|
priority: 10,
|
||||||
|
auto_mailer: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
function openCreate() {
|
function openCreate() {
|
||||||
@@ -120,6 +121,7 @@ function openEdit(p) {
|
|||||||
form.from_address = p.from_address || "";
|
form.from_address = p.from_address || "";
|
||||||
form.from_name = p.from_name || "";
|
form.from_name = p.from_name || "";
|
||||||
form.priority = p.priority ?? 10;
|
form.priority = p.priority ?? 10;
|
||||||
|
form.auto_mailer = p.auto_mailer ?? false;
|
||||||
editTarget.value = p;
|
editTarget.value = p;
|
||||||
signatureItems.value = signatureFromObject(p.signature);
|
signatureItems.value = signatureFromObject(p.signature);
|
||||||
editOpen.value = true;
|
editOpen.value = true;
|
||||||
@@ -159,6 +161,7 @@ function submitEdit() {
|
|||||||
from_address: form.from_address,
|
from_address: form.from_address,
|
||||||
from_name: form.from_name || null,
|
from_name: form.from_name || null,
|
||||||
priority: form.priority,
|
priority: form.priority,
|
||||||
|
auto_mailer: form.auto_mailer,
|
||||||
signature: signatureToObject(),
|
signature: signatureToObject(),
|
||||||
};
|
};
|
||||||
if (form.password && form.password.trim() !== "") {
|
if (form.password && form.password.trim() !== "") {
|
||||||
@@ -181,6 +184,12 @@ function toggleActive(p) {
|
|||||||
.then(() => window.location.reload());
|
.then(() => window.location.reload());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleAutoMailer(p) {
|
||||||
|
window.axios
|
||||||
|
.post(route("admin.mail-profiles.toggle-auto-mailer", p.id))
|
||||||
|
.then(() => window.location.reload());
|
||||||
|
}
|
||||||
|
|
||||||
function testConnection(p) {
|
function testConnection(p) {
|
||||||
window.axios
|
window.axios
|
||||||
.post(route("admin.mail-profiles.test", p.id))
|
.post(route("admin.mail-profiles.test", p.id))
|
||||||
@@ -238,6 +247,7 @@ const statusClass = (p) => {
|
|||||||
<TableHead class="text-center">Port</TableHead>
|
<TableHead class="text-center">Port</TableHead>
|
||||||
<TableHead class="text-center">Enc</TableHead>
|
<TableHead class="text-center">Enc</TableHead>
|
||||||
<TableHead class="text-center">Aktivno</TableHead>
|
<TableHead class="text-center">Aktivno</TableHead>
|
||||||
|
<TableHead class="text-center">Auto-mailer</TableHead>
|
||||||
<TableHead class="text-center">Status</TableHead>
|
<TableHead class="text-center">Status</TableHead>
|
||||||
<TableHead>Zadnji uspeh</TableHead>
|
<TableHead>Zadnji uspeh</TableHead>
|
||||||
<TableHead>Napaka</TableHead>
|
<TableHead>Napaka</TableHead>
|
||||||
@@ -261,6 +271,12 @@ const statusClass = (p) => {
|
|||||||
@update:model-value="() => toggleActive(p)"
|
@update:model-value="() => toggleActive(p)"
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
|
<TableCell class="text-center">
|
||||||
|
<Switch
|
||||||
|
:default-value="p.auto_mailer"
|
||||||
|
@update:model-value="() => toggleAutoMailer(p)"
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
<TableCell class="text-center">
|
<TableCell class="text-center">
|
||||||
<Badge
|
<Badge
|
||||||
v-if="p.test_status === 'success'"
|
v-if="p.test_status === 'success'"
|
||||||
@@ -382,6 +398,14 @@ const statusClass = (p) => {
|
|||||||
<Label for="create-priority">Prioriteta</Label>
|
<Label for="create-priority">Prioriteta</Label>
|
||||||
<Input id="create-priority" v-model.number="form.priority" type="number" />
|
<Input id="create-priority" v-model.number="form.priority" type="number" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<Switch
|
||||||
|
id="create-auto-mailer"
|
||||||
|
:model-value="form.auto_mailer"
|
||||||
|
@update:model-value="(val) => (form.auto_mailer = val)"
|
||||||
|
/>
|
||||||
|
<Label for="create-auto-mailer">Auto-mailer</Label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
@@ -487,6 +511,14 @@ const statusClass = (p) => {
|
|||||||
<Label for="edit-priority">Prioriteta</Label>
|
<Label for="edit-priority">Prioriteta</Label>
|
||||||
<Input id="edit-priority" v-model.number="form.priority" type="number" />
|
<Input id="edit-priority" v-model.number="form.priority" type="number" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<Switch
|
||||||
|
id="edit-auto-mailer"
|
||||||
|
:model-value="form.auto_mailer"
|
||||||
|
@update:model-value="(val) => (form.auto_mailer = val)"
|
||||||
|
/>
|
||||||
|
<Label for="edit-auto-mailer">Auto-mailer</Label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
|
|||||||
@@ -114,6 +114,7 @@
|
|||||||
Route::post('mail-profiles', [\App\Http\Controllers\Admin\MailProfileController::class, 'store'])->name('mail-profiles.store');
|
Route::post('mail-profiles', [\App\Http\Controllers\Admin\MailProfileController::class, 'store'])->name('mail-profiles.store');
|
||||||
Route::put('mail-profiles/{mailProfile}', [\App\Http\Controllers\Admin\MailProfileController::class, 'update'])->name('mail-profiles.update');
|
Route::put('mail-profiles/{mailProfile}', [\App\Http\Controllers\Admin\MailProfileController::class, 'update'])->name('mail-profiles.update');
|
||||||
Route::post('mail-profiles/{mailProfile}/toggle', [\App\Http\Controllers\Admin\MailProfileController::class, 'toggle'])->name('mail-profiles.toggle');
|
Route::post('mail-profiles/{mailProfile}/toggle', [\App\Http\Controllers\Admin\MailProfileController::class, 'toggle'])->name('mail-profiles.toggle');
|
||||||
|
Route::post('mail-profiles/{mailProfile}/toggle-auto-mailer', [\App\Http\Controllers\Admin\MailProfileController::class, 'toggleAutoMailer'])->name('mail-profiles.toggle-auto-mailer');
|
||||||
Route::post('mail-profiles/{mailProfile}/test', [\App\Http\Controllers\Admin\MailProfileController::class, 'test'])->name('mail-profiles.test');
|
Route::post('mail-profiles/{mailProfile}/test', [\App\Http\Controllers\Admin\MailProfileController::class, 'test'])->name('mail-profiles.test');
|
||||||
Route::post('mail-profiles/{mailProfile}/send-test', [\App\Http\Controllers\Admin\MailProfileController::class, 'sendTest'])->name('mail-profiles.send-test');
|
Route::post('mail-profiles/{mailProfile}/send-test', [\App\Http\Controllers\Admin\MailProfileController::class, 'sendTest'])->name('mail-profiles.send-test');
|
||||||
Route::delete('mail-profiles/{mailProfile}', [\App\Http\Controllers\Admin\MailProfileController::class, 'destroy'])->name('mail-profiles.destroy');
|
Route::delete('mail-profiles/{mailProfile}', [\App\Http\Controllers\Admin\MailProfileController::class, 'destroy'])->name('mail-profiles.destroy');
|
||||||
|
|||||||
Reference in New Issue
Block a user