Initial Commit
This commit is contained in:
194
app/Controllers/NotificationGroupController.php
Normal file
194
app/Controllers/NotificationGroupController.php
Normal file
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use Core\Controller;
|
||||
use App\Models\NotificationGroup;
|
||||
use App\Models\NotificationChannel;
|
||||
|
||||
class NotificationGroupController extends Controller
|
||||
{
|
||||
private NotificationGroup $groupModel;
|
||||
private NotificationChannel $channelModel;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->groupModel = new NotificationGroup();
|
||||
$this->channelModel = new NotificationChannel();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$groups = $this->groupModel->getAllWithChannelCount();
|
||||
|
||||
$this->view('groups/index', [
|
||||
'groups' => $groups,
|
||||
'title' => 'Notification Groups'
|
||||
]);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->view('groups/create', [
|
||||
'title' => 'Create Notification Group'
|
||||
]);
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
$this->redirect('/groups/create');
|
||||
return;
|
||||
}
|
||||
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$description = trim($_POST['description'] ?? '');
|
||||
|
||||
if (empty($name)) {
|
||||
$_SESSION['error'] = 'Group name is required';
|
||||
$this->redirect('/groups/create');
|
||||
return;
|
||||
}
|
||||
|
||||
$id = $this->groupModel->create([
|
||||
'name' => $name,
|
||||
'description' => $description
|
||||
]);
|
||||
|
||||
$_SESSION['success'] = "Group '$name' created successfully";
|
||||
$this->redirect("/groups/edit?id=$id");
|
||||
}
|
||||
|
||||
public function edit()
|
||||
{
|
||||
$id = $_GET['id'] ?? 0;
|
||||
$group = $this->groupModel->getWithDetails($id);
|
||||
|
||||
if (!$group) {
|
||||
$_SESSION['error'] = 'Group not found';
|
||||
$this->redirect('/groups');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->view('groups/edit', [
|
||||
'group' => $group,
|
||||
'title' => 'Edit Group: ' . $group['name']
|
||||
]);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
$this->redirect('/groups');
|
||||
return;
|
||||
}
|
||||
|
||||
$id = (int)$_POST['id'];
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$description = trim($_POST['description'] ?? '');
|
||||
|
||||
if (empty($name)) {
|
||||
$_SESSION['error'] = 'Group name is required';
|
||||
$this->redirect("/groups/edit?id=$id");
|
||||
return;
|
||||
}
|
||||
|
||||
$this->groupModel->update($id, [
|
||||
'name' => $name,
|
||||
'description' => $description
|
||||
]);
|
||||
|
||||
$_SESSION['success'] = 'Group updated successfully';
|
||||
$this->redirect("/groups/edit?id=$id");
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$id = $_GET['id'] ?? 0;
|
||||
$group = $this->groupModel->find($id);
|
||||
|
||||
if (!$group) {
|
||||
$_SESSION['error'] = 'Group not found';
|
||||
$this->redirect('/groups');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->groupModel->deleteWithRelations($id);
|
||||
$_SESSION['success'] = 'Group deleted successfully';
|
||||
$this->redirect('/groups');
|
||||
}
|
||||
|
||||
public function addChannel()
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
$this->redirect('/groups');
|
||||
return;
|
||||
}
|
||||
|
||||
$groupId = (int)$_POST['group_id'];
|
||||
$channelType = $_POST['channel_type'] ?? '';
|
||||
|
||||
$config = $this->buildChannelConfig($channelType, $_POST);
|
||||
|
||||
if (!$config) {
|
||||
$_SESSION['error'] = 'Invalid channel configuration';
|
||||
$this->redirect("/groups/edit?id=$groupId");
|
||||
return;
|
||||
}
|
||||
|
||||
$this->channelModel->createChannel($groupId, $channelType, $config);
|
||||
|
||||
$_SESSION['success'] = 'Channel added successfully';
|
||||
$this->redirect("/groups/edit?id=$groupId");
|
||||
}
|
||||
|
||||
public function deleteChannel()
|
||||
{
|
||||
$id = $_GET['id'] ?? 0;
|
||||
$groupId = $_GET['group_id'] ?? 0;
|
||||
|
||||
$this->channelModel->delete($id);
|
||||
|
||||
$_SESSION['success'] = 'Channel deleted successfully';
|
||||
$this->redirect("/groups/edit?id=$groupId");
|
||||
}
|
||||
|
||||
public function toggleChannel()
|
||||
{
|
||||
$id = $_GET['id'] ?? 0;
|
||||
$groupId = $_GET['group_id'] ?? 0;
|
||||
|
||||
$this->channelModel->toggleActive($id);
|
||||
|
||||
$_SESSION['success'] = 'Channel status updated';
|
||||
$this->redirect("/groups/edit?id=$groupId");
|
||||
}
|
||||
|
||||
private function buildChannelConfig(string $type, array $data): ?array
|
||||
{
|
||||
switch ($type) {
|
||||
case 'email':
|
||||
if (empty($data['email'])) return null;
|
||||
return ['email' => $data['email']];
|
||||
|
||||
case 'telegram':
|
||||
if (empty($data['bot_token']) || empty($data['chat_id'])) return null;
|
||||
return [
|
||||
'bot_token' => $data['bot_token'],
|
||||
'chat_id' => $data['chat_id']
|
||||
];
|
||||
|
||||
case 'discord':
|
||||
if (empty($data['webhook_url'])) return null;
|
||||
return ['webhook_url' => $data['webhook_url']];
|
||||
|
||||
case 'slack':
|
||||
if (empty($data['webhook_url'])) return null;
|
||||
return ['webhook_url' => $data['webhook_url']];
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user