glastree_on_gitea
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\MailingList;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MailingListController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$this->authorizeRead('mailing');
|
||||
$mailingLists = MailingList::with(['user', 'contatti'])
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
return view('mailing-liste.index', compact('mailingLists'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->authorizeWrite('mailing');
|
||||
return view('mailing-liste.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->authorizeWrite('mailing');
|
||||
$data = $request->validate([
|
||||
'nome' => 'required|string|max:255',
|
||||
'descrizione' => 'nullable|string',
|
||||
'attiva' => 'boolean',
|
||||
'contatti_json' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$data['user_id'] = auth()->id();
|
||||
$data['attiva'] = $data['attiva'] ?? true;
|
||||
|
||||
$lista = MailingList::create([
|
||||
'nome' => $data['nome'],
|
||||
'descrizione' => $data['descrizione'] ?? null,
|
||||
'attiva' => $data['attiva'],
|
||||
'user_id' => $data['user_id'],
|
||||
]);
|
||||
|
||||
if (!empty($data['contatti_json'])) {
|
||||
$contatti = json_decode($data['contatti_json'], true);
|
||||
if (is_array($contatti)) {
|
||||
foreach ($contatti as $contatto) {
|
||||
if (!empty($contatto['individuo_id']) && !empty($contatto['email'])) {
|
||||
$lista->contatti()->create([
|
||||
'individuo_id' => $contatto['individuo_id'],
|
||||
'opt_in' => true,
|
||||
'opt_in_data' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->route('mailing-liste.index')->with('success', 'Lista creata con ' . $lista->contatti()->count() . ' contatti.');
|
||||
}
|
||||
|
||||
public function show($mailing_liste)
|
||||
{
|
||||
$this->authorizeRead('mailing');
|
||||
$mailingList = MailingList::with(['contatti.individuo.contatti'])->findOrFail($mailing_liste);
|
||||
return view('mailing-liste.show', compact('mailingList'));
|
||||
}
|
||||
|
||||
public function edit($mailingList)
|
||||
{
|
||||
$this->authorizeWrite('mailing');
|
||||
$mailingList = MailingList::with('contatti.individuo.contatti')->findOrFail($mailingList);
|
||||
return view('mailing-liste.edit', compact('mailingList'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $mailingList)
|
||||
{
|
||||
$this->authorizeWrite('mailing');
|
||||
$mailingList = MailingList::findOrFail($mailingList);
|
||||
|
||||
$data = $request->validate([
|
||||
'nome' => 'required|string|max:255',
|
||||
'descrizione' => 'nullable|string',
|
||||
'attiva' => 'boolean',
|
||||
'contatti_json' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$data['attiva'] = $data['attiva'] ?? false;
|
||||
|
||||
$mailingList->update([
|
||||
'nome' => $data['nome'],
|
||||
'descrizione' => $data['descrizione'] ?? null,
|
||||
'attiva' => $data['attiva'],
|
||||
]);
|
||||
|
||||
if (!empty($data['contatti_json'])) {
|
||||
$newContatti = json_decode($data['contatti_json'], true);
|
||||
if (is_array($newContatti)) {
|
||||
$existingIds = $mailingList->contatti()->pluck('individuo_id')->toArray();
|
||||
$newIds = array_column($newContatti, 'individuo_id');
|
||||
|
||||
$toRemove = array_diff($existingIds, $newIds);
|
||||
if (!empty($toRemove)) {
|
||||
$mailingList->contatti()->whereIn('individuo_id', $toRemove)->delete();
|
||||
}
|
||||
|
||||
$toAdd = array_diff($newIds, $existingIds);
|
||||
foreach ($newContatti as $contatto) {
|
||||
if (in_array($contatto['individuo_id'], $toAdd) && !empty($contatto['email'])) {
|
||||
$mailingList->contatti()->create([
|
||||
'individuo_id' => $contatto['individuo_id'],
|
||||
'opt_in' => true,
|
||||
'opt_in_data' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->route('mailing-liste.show', $mailingList->id)->with('success', 'Lista aggiornata.');
|
||||
}
|
||||
|
||||
public function destroy($mailingList)
|
||||
{
|
||||
$this->authorizeDelete('mailing');
|
||||
$mailingList = MailingList::findOrFail($mailingList);
|
||||
$mailingList->delete();
|
||||
return redirect()->route('mailing-liste.index')->with('success', 'Lista eliminata.');
|
||||
}
|
||||
|
||||
public function massElimina(Request $request)
|
||||
{
|
||||
$this->authorizeDelete('mailing');
|
||||
|
||||
$ids = $request->input('ids', []);
|
||||
if (!is_array($ids) || empty($ids)) {
|
||||
return redirect()->route('mailing-liste.index')->with('error', 'Nessuna mailing list selezionata.');
|
||||
}
|
||||
|
||||
$liste = MailingList::whereIn('id', $ids)->get();
|
||||
|
||||
foreach ($liste as $lista) {
|
||||
$lista->contatti()->delete();
|
||||
$lista->delete();
|
||||
}
|
||||
|
||||
return redirect()->route('mailing-liste.index')->with('success', count($liste) . ' mailing list eliminate con successo.');
|
||||
}
|
||||
|
||||
public function createFromIndividui(Request $request)
|
||||
{
|
||||
$this->authorizeWrite('mailing');
|
||||
$data = $request->validate([
|
||||
'nome' => 'required|string|max:255',
|
||||
'descrizione' => 'nullable|string',
|
||||
'contatti' => 'required|array',
|
||||
'contatti.*.individuo_id' => 'required|exists:individui,id',
|
||||
'contatti.*.email' => 'required|email',
|
||||
]);
|
||||
|
||||
$lista = MailingList::create([
|
||||
'nome' => $data['nome'],
|
||||
'descrizione' => $data['descrizione'] ?? null,
|
||||
'attiva' => true,
|
||||
'user_id' => auth()->id(),
|
||||
]);
|
||||
|
||||
foreach ($data['contatti'] as $contatto) {
|
||||
$lista->contatti()->create([
|
||||
'individuo_id' => $contatto['individuo_id'],
|
||||
'opt_in' => true,
|
||||
'opt_in_data' => now(),
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json(['success' => true, 'lista_id' => $lista->id]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user