aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/admin/mailqueue.php
diff options
context:
space:
mode:
authorMichaela Brückner <brueckner@data-quest.de>2025-01-20 15:09:23 +0100
committerMichaela Brückner <brueckner@data-quest.de>2025-01-20 15:09:23 +0100
commit83817638210b9cdb200dda87feabafea51339cb3 (patch)
tree708cb4d583def303a44d63f00b27a3d4727de6cd /app/controllers/admin/mailqueue.php
parent8760271247efabba2f785d060c4ca77624115a8c (diff)
initial commit, re #5157
Diffstat (limited to 'app/controllers/admin/mailqueue.php')
-rw-r--r--app/controllers/admin/mailqueue.php177
1 files changed, 177 insertions, 0 deletions
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 @@
+<?php
+
+/**
+ *
+ */
+class Admin_MailqueueController extends AuthenticatedController
+{
+ public function before_filter(&$action, &$args)
+ {
+ parent::before_filter($action, $args);
+
+ if (!$GLOBALS['perm']->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);
+ }
+
+}