From 83817638210b9cdb200dda87feabafea51339cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michaela=20Br=C3=BCckner?= Date: Mon, 20 Jan 2025 15:09:23 +0100 Subject: initial commit, re #5157 --- app/controllers/admin/mailqueue.php | 177 +++++++++++++++++++++++++++++ app/views/admin/mailqueue/delete_entry.php | 12 ++ app/views/admin/mailqueue/delete_old.php | 12 ++ app/views/admin/mailqueue/index.php | 42 +++++++ app/views/admin/mailqueue/showoldqueue.php | 65 +++++++++++ lib/navigation/AdminNavigation.php | 10 +- 6 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 app/controllers/admin/mailqueue.php create mode 100644 app/views/admin/mailqueue/delete_entry.php create mode 100644 app/views/admin/mailqueue/delete_old.php create mode 100644 app/views/admin/mailqueue/index.php create mode 100644 app/views/admin/mailqueue/showoldqueue.php diff --git a/app/controllers/admin/mailqueue.php b/app/controllers/admin/mailqueue.php new file mode 100644 index 0000000..bffd31a --- /dev/null +++ b/app/controllers/admin/mailqueue.php @@ -0,0 +1,177 @@ +have_perm('root')) { + throw new AccessDeniedException(); + } + + } + + public function index_action() + { + Navigation::activateItem('/admin/mailqueue/index'); + + $export = new \ExportWidget(); + $export->addLink( + _('Aktuelle Mailqueue als CSV exportieren'), + $this->url_for('admin/mailqueue/export/new'), + Icon::create('export') + ); + \Sidebar::Get()->addWidget($export); + + $this->mailqueues = []; + $this->mailqueues = MailQueueEntry::findBySQL("chdate >= UNIX_TIMESTAMP() - 15768000 ORDER BY chdate DESC"); + + foreach ($this->mailqueues as $queue) + { + if ($queue->tries == 0) + { + $queue->tries .= ' (noch nicht gesendet)'; + } + elseif ($queue->tries >= 1 && $queue->tries <= 24) + { + $queue->tries .= ' Sendeversuch(e), noch nicht zugestellt'; + } + elseif ($queue->tries >= 25) + { + $queue->tries .= ' (Zustellung fehlgeschlagen)'; + } + } + + } + + public function showoldqueue_action() + { + Navigation::activateItem('/admin/mailqueue/oldqueue'); + $export = new \ExportWidget(); + $export->addLink( + _('Alte Mailqueue als CSV exportieren'), + $this->url_for('admin/mailqueue/export/old' ), + Icon::create('export') + ); + \Sidebar::Get()->addWidget($export); + + $actions = new ActionsWidget(); + $actions->addLink( + _('Alte Mailqueue-Einträge löschen'), + $this->url_for('admin/mailqueue/delete_old'), + Icon::create('trash') + + )->asDialog('size=auto'); + Sidebar::Get()->addWidget($actions); + + $this->old_mailqueues = []; + $this->old_mailqueues = MailQueueEntry::findBySQL("chdate < UNIX_TIMESTAMP() - 15768000 ORDER BY chdate DESC"); + foreach ($this->old_mailqueues as $queue) + { + if ($queue->tries == 0) + { + $queue->tries .= ' (noch nicht gesendet)'; + } + elseif ($queue->tries >= 1 && $queue->tries <= 24) + { + $queue->tries .= ' Sendeversuch(e), noch nicht zugestellt'; + } + elseif ($queue->tries >= 25) + { + $queue->tries .= ' (Zustellung fehlgeschlagen)'; + } + } + } + + public function delete_entry_action($queue_id, $oldornew) + { + PageLayout::setTitle('Eintrag löschen'); + $this->oldornew = $oldornew; + $this->queue_id = $queue_id; + $queue_entry = MailQueueEntry::find($queue_id); + + if (Request::isPost()) + { + CSRFProtection::verifyUnsafeRequest(); + $queue_entry->delete(); + + if ($oldornew == 'new') { + $this->relocate('admin/mailqueue/index'); + } else if ($oldornew == 'old') { + $this->relocate('admin/mailqueue/showoldqueue'); + } + PageLayout::postSuccess('Eintrag wurde gelöscht.'); + } + + } + + public function delete_old_action() + { + $this->old_mailqueues = MailQueueEntry::findBySQL("chdate < UNIX_TIMESTAMP() - 15768000"); + + if (Request::isPost()) + { + CSRFProtection::verifyUnsafeRequest(); + + foreach ($this->old_mailqueues as $mailqueue) { + $mailqueue->delete(); + } + $this->relocate('mailqueue/showqueue'); + PageLayout::postSuccess('Alle Mailqueue-Einträge, die mindestens ein Jahr alt sind, wurden gelöscht.'); + } + + } + + public function export_action($oldornew) + { + if ($oldornew == 'new') { + $this->mailqueues = MailQueueEntry::findBySQL("chdate >= UNIX_TIMESTAMP() - 15768000"); + $filename = FileManager::cleanFileName( + sprintf( + 'mailqueue-export-aktuell.csv', + \Context::getHeaderLine() + ) + ); + } else if ($oldornew == 'old') { + $this->mailqueues = MailQueueEntry::findBySQL("chdate < UNIX_TIMESTAMP() - 15768000"); + $filename = FileManager::cleanFileName( + sprintf( + 'mailqueue-export-alt.csv', + \Context::getHeaderLine() + ) + ); + } + + $captions = [ + _('Erstelldatum'), + _('Betreff'), + _('Message ID'), + _('Empfänger'), + _('Versuche'), + _('Letzter Sendeversuch') + ]; + + $data = []; + foreach ($this->mailqueues as $queue_entry) + { + $row['erstelldatum'] = date('d.m.Y H:i',$queue_entry->chdate); + $message = Message::find($queue_entry->message_id); + $row['betreff'] = $message->subject; + $row['message_id'] =$queue_entry->message_id; + + $user = User::find($queue_entry->user_id); + $row['empfaenger'] = $user->vorname . ' ' . $user->nachname; + + $row['versuche'] = $queue_entry->tries; + $row['lastsend'] = date('d.m.Y H:i',$queue_entry->last_try); + + $data[] = array_values($row); + } + $this->render_csv(array_merge([$captions], $data), $filename); + } + +} diff --git a/app/views/admin/mailqueue/delete_entry.php b/app/views/admin/mailqueue/delete_entry.php new file mode 100644 index 0000000..0e7122a --- /dev/null +++ b/app/views/admin/mailqueue/delete_entry.php @@ -0,0 +1,12 @@ +
" + class="default" method="post"> + + +
+ +
+
+ diff --git a/app/views/admin/mailqueue/delete_old.php b/app/views/admin/mailqueue/delete_old.php new file mode 100644 index 0000000..9783335 --- /dev/null +++ b/app/views/admin/mailqueue/delete_old.php @@ -0,0 +1,12 @@ +
" + class="default" method="post"> + + +
+ +
+
+ diff --git a/app/views/admin/mailqueue/index.php b/app/views/admin/mailqueue/index.php new file mode 100644 index 0000000..52652c0 --- /dev/null +++ b/app/views/admin/mailqueue/index.php @@ -0,0 +1,42 @@ +
+ + + + + + + + + + + + + + + + + mailqueues as $queue_entry) : ?> + mail) ?> + + + + + + + + + + + + +
chdate)) ?>subject) ?>message_id) ?>user_id) ?>vorname . ' ' . $user->nachname)?>tries) ?>last_try != 0) echo htmlReady(date('d.m.Y H:i', $queue_entry->last_try)) ?> + + addLink(PluginEngine::getURL('mailqueuevisualisation', array(), "mailqueue/delete_entry/" . $queue_entry->mail_queue_id . "/new"), + _('Eintrag löschen'), + Icon::create('trash'), + ['data-dialog' => 'size=auto']); ?> + render(); ?> +
+
+ + diff --git a/app/views/admin/mailqueue/showoldqueue.php b/app/views/admin/mailqueue/showoldqueue.php new file mode 100644 index 0000000..f11d923 --- /dev/null +++ b/app/views/admin/mailqueue/showoldqueue.php @@ -0,0 +1,65 @@ +
+ + + + + + + + + + + + + + + + + old_mailqueues as $queue_entry) : ?> + + + + + + + + + + + + + +
chdate)) ?>message_id) ?> + subject) ?> + message_id) ?>user_id) ?> + vorname . ' ' . $user->nachname)?> + tries) ?>last_try != 0) echo htmlReady(date('d.m.Y H:i', $queue_entry->last_try)) ?> + + addLink(PluginEngine::getURL('mailqueuevisualisation', array(), "mailqueue/delete_entry/" . $queue_entry->mail_queue_id . "/old"), + _('Eintrag löschen'), + Icon::create('trash'), + ['data-dialog' => 'size=auto']); ?> + render(); ?> +
+
+ + diff --git a/lib/navigation/AdminNavigation.php b/lib/navigation/AdminNavigation.php index fe31b72..7b5fd1a 100644 --- a/lib/navigation/AdminNavigation.php +++ b/lib/navigation/AdminNavigation.php @@ -183,7 +183,6 @@ class AdminNavigation extends Navigation // global config / user administration $navigation = new Navigation(_('System')); - if ($perm->have_perm('root')) { $navigation->addSubNavigation('plugins', new Navigation(_('Plugins'), 'dispatch.php/admin/plugin')); $navigation->addSubNavigation('roles', new Navigation(_('Rollen'), 'dispatch.php/admin/role')); @@ -209,6 +208,7 @@ class AdminNavigation extends Navigation $navigation->addSubNavigation('globalsearch', new Navigation(_('Globale Suche'), 'dispatch.php/globalsearch/settings')); $navigation->addSubNavigation('cache', new Navigation(_('Cache'), 'dispatch.php/admin/cache/settings')); + } if ($perm->have_perm(Config::get()->AUX_RULE_ADMIN_PERM ? Config::get()->AUX_RULE_ADMIN_PERM : 'admin')) { $navigation->addSubNavigation('specification', new Navigation(_('Zusatzangaben'), 'dispatch.php/admin/specification')); @@ -236,5 +236,13 @@ class AdminNavigation extends Navigation // admin plugins $navigation = new Navigation(_('Admin-Plugins')); $this->addSubNavigation('plugins', $navigation); + + if ($perm->have_perm('root')) { + $navigation = new Navigation(_('Mailqueue')); + $navigation->addSubNavigation('index', new Navigation(_('Aktuelle Mailqueue'), 'dispatch.php/admin/mailqueue')); + $navigation->addSubNavigation('oldqueue', new Navigation(_('Alte Mailqueue'), 'dispatch.php/admin/mailqueue/showoldqueue')); + $this->addSubNavigation('mailqueue', $navigation); + } + } } -- cgit v1.0