aggiunta calendario
This commit is contained in:
@@ -39,4 +39,35 @@ class ActivityLogController extends Controller
|
||||
|
||||
return view('admin.activity-logs.index', compact('logs', 'users', 'modules'));
|
||||
}
|
||||
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
$query = ActivityLog::query();
|
||||
|
||||
if ($request->filled('user_id')) {
|
||||
$query->where('user_id', $request->user_id);
|
||||
}
|
||||
|
||||
if ($request->filled('module')) {
|
||||
$query->where('module', $request->module);
|
||||
}
|
||||
|
||||
if ($request->filled('action')) {
|
||||
$query->where('action', $request->action);
|
||||
}
|
||||
|
||||
if ($request->filled('from')) {
|
||||
$query->whereDate('created_at', '>=', $request->from);
|
||||
}
|
||||
|
||||
if ($request->filled('to')) {
|
||||
$query->whereDate('created_at', '<=', $request->to);
|
||||
}
|
||||
|
||||
$count = $query->count();
|
||||
$query->delete();
|
||||
|
||||
return redirect()->route('admin.activity-logs.index')
|
||||
->with('success', "Eliminati {$count} log.");
|
||||
}
|
||||
}
|
||||
@@ -257,6 +257,18 @@ class EmailSettingsController extends Controller
|
||||
return back()->with('success', 'Mittente eliminato.');
|
||||
}
|
||||
|
||||
public function destroy(): RedirectResponse
|
||||
{
|
||||
$this->authorizeDelete('settings');
|
||||
|
||||
$settings = EmailSetting::first();
|
||||
if ($settings) {
|
||||
$settings->delete();
|
||||
}
|
||||
|
||||
return redirect('/impostazioni/email')->with('success', 'Configurazione email eliminata. Tutti i dati sono stati rimossi.');
|
||||
}
|
||||
|
||||
public function senderTestSmtp(Request $request, int $id)
|
||||
{
|
||||
$this->authorizeWrite('settings');
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\CalendarioConnessione;
|
||||
use App\Services\CalDavService;
|
||||
use App\Services\GoogleCalendarSyncService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CalendarioConnessioneController extends Controller
|
||||
{
|
||||
public function store(Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorizeWrite('settings');
|
||||
|
||||
$data = $request->validate([
|
||||
'nome' => 'required|string|max:255',
|
||||
'tipo' => 'required|in:google_calendar,caldav',
|
||||
'sync_direction' => 'nullable|in:import,export,bidirectional',
|
||||
'sync_interval_minutes' => 'nullable|integer|min:5|max:1440',
|
||||
'is_active' => 'boolean',
|
||||
'config' => 'nullable|array',
|
||||
]);
|
||||
|
||||
$maxOrdine = CalendarioConnessione::max('ordine') ?? 0;
|
||||
|
||||
$connessione = new CalendarioConnessione();
|
||||
$connessione->nome = $data['nome'];
|
||||
$connessione->tipo = $data['tipo'];
|
||||
$connessione->sync_direction = $data['sync_direction'] ?? 'bidirectional';
|
||||
$connessione->sync_interval_minutes = $data['sync_interval_minutes'] ?? 60;
|
||||
$connessione->is_active = $request->boolean('is_active', true);
|
||||
$connessione->stato = 'disconnesso';
|
||||
$connessione->ordine = $maxOrdine + 1;
|
||||
$connessione->encryptAndSetConfig($data['config'] ?? []);
|
||||
$connessione->save();
|
||||
|
||||
return redirect('/impostazioni#calendario')->with('success', 'Connessione calendario "' . $connessione->nome . '" creata.');
|
||||
}
|
||||
|
||||
public function update(Request $request, int $id): RedirectResponse
|
||||
{
|
||||
$this->authorizeWrite('settings');
|
||||
|
||||
$connessione = CalendarioConnessione::findOrFail($id);
|
||||
|
||||
$data = $request->validate([
|
||||
'nome' => 'required|string|max:255',
|
||||
'tipo' => 'required|in:google_calendar,caldav',
|
||||
'sync_direction' => 'nullable|in:import,export,bidirectional',
|
||||
'sync_interval_minutes' => 'nullable|integer|min:5|max:1440',
|
||||
'is_active' => 'boolean',
|
||||
'config' => 'nullable|array',
|
||||
]);
|
||||
|
||||
$connessione->nome = $data['nome'];
|
||||
$connessione->tipo = $data['tipo'];
|
||||
$connessione->sync_direction = $data['sync_direction'] ?? 'bidirectional';
|
||||
$connessione->sync_interval_minutes = $data['sync_interval_minutes'] ?? 60;
|
||||
$connessione->is_active = $request->boolean('is_active', true);
|
||||
|
||||
if (!empty($data['config'])) {
|
||||
$connessione->encryptAndSetConfig($data['config']);
|
||||
}
|
||||
|
||||
$connessione->save();
|
||||
|
||||
return redirect('/impostazioni#calendario')->with('success', 'Connessione calendario "' . $connessione->nome . '" aggiornata.');
|
||||
}
|
||||
|
||||
public function destroy(int $id): JsonResponse
|
||||
{
|
||||
$this->authorizeDelete('settings');
|
||||
$connessione = CalendarioConnessione::findOrFail($id);
|
||||
$connessione->delete();
|
||||
|
||||
return response()->json(['success' => true, 'message' => 'Connessione calendario eliminata.']);
|
||||
}
|
||||
|
||||
public function test(int $id): JsonResponse
|
||||
{
|
||||
$this->authorizeWrite('settings');
|
||||
$connessione = CalendarioConnessione::findOrFail($id);
|
||||
|
||||
$result = match ($connessione->tipo) {
|
||||
'caldav' => app(CalDavService::class)->testConnection($connessione),
|
||||
'google_calendar' => app(GoogleCalendarSyncService::class)->testConnection($connessione),
|
||||
default => ['success' => false, 'message' => 'Tipo sconosciuto'],
|
||||
};
|
||||
|
||||
if ($result['success']) {
|
||||
$connessione->update(['stato' => 'connesso', 'last_error_at' => null, 'last_error_message' => null]);
|
||||
} else {
|
||||
$connessione->update(['stato' => 'errore', 'last_error_at' => now(), 'last_error_message' => $result['message'] ?? 'Errore sconosciuto']);
|
||||
}
|
||||
|
||||
return response()->json($result);
|
||||
}
|
||||
|
||||
public function sync(int $id): RedirectResponse
|
||||
{
|
||||
$this->authorizeWrite('settings');
|
||||
$connessione = CalendarioConnessione::findOrFail($id);
|
||||
|
||||
$result = match ($connessione->tipo) {
|
||||
'caldav' => app(CalDavService::class)->syncEvents($connessione),
|
||||
'google_calendar' => app(GoogleCalendarSyncService::class)->syncEvents($connessione),
|
||||
default => ['success' => false, 'imported' => 0, 'exported' => 0, 'errors' => ['Tipo sconosciuto']],
|
||||
};
|
||||
|
||||
$connessione->update(['last_sync_at' => now()]);
|
||||
|
||||
if ($result['success']) {
|
||||
$msg = 'Sincronizzazione completata: ' . $result['imported'] . ' importati, ' . $result['exported'] . ' esportati.';
|
||||
$connessione->update(['stato' => 'connesso']);
|
||||
return redirect('/impostazioni#calendario')->with('success', $msg);
|
||||
}
|
||||
|
||||
$errorMsg = implode('; ', $result['errors']);
|
||||
$connessione->update(['stato' => 'errore', 'last_error_at' => now(), 'last_error_message' => $errorMsg]);
|
||||
|
||||
return redirect('/impostazioni#calendario')->with('error', 'Errore sync: ' . $errorMsg);
|
||||
}
|
||||
|
||||
public function reorder(Request $request): JsonResponse
|
||||
{
|
||||
$this->authorizeWrite('settings');
|
||||
$order = $request->input('order', []);
|
||||
foreach ($order as $index => $id) {
|
||||
CalendarioConnessione::where('id', $id)->update(['ordine' => $index]);
|
||||
}
|
||||
return response()->json(['success' => true]);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\AppSetting;
|
||||
use App\Models\CalendarioConnessione;
|
||||
use App\Models\Documento;
|
||||
use App\Models\EmailSetting;
|
||||
use App\Models\Ruolo;
|
||||
@@ -30,8 +31,9 @@ class ImpostazioniController extends Controller
|
||||
$senderAccounts = SenderAccount::orderBy('email_address')->get();
|
||||
$repositories = StorageRepository::orderBy('ordine')->get();
|
||||
$googleDriveNewToken = session('google_drive_new_token');
|
||||
$calendarioConnessioni = CalendarioConnessione::orderBy('ordine')->get();
|
||||
|
||||
return view('impostazioni.index', compact('tipologie', 'tipologieEventi', 'ruoli', 'appSettings', 'emailSettings', 'senderAccounts', 'repositories', 'googleDriveNewToken'));
|
||||
return view('impostazioni.index', compact('tipologie', 'tipologieEventi', 'ruoli', 'appSettings', 'emailSettings', 'senderAccounts', 'repositories', 'googleDriveNewToken', 'calendarioConnessioni'));
|
||||
}
|
||||
|
||||
public function saveAppSettings(Request $request)
|
||||
|
||||
Reference in New Issue
Block a user