summaryrefslogtreecommitdiff
path: root/resources
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2021-01-22 16:31:35 +0000
committerGreg Roach <greg@subaqua.co.uk>2021-01-22 16:31:35 +0000
commitb47837c47d7b6e97a8ae8b39adde4ac935004240 (patch)
treec76a5d7674777d799811e4987d2cf2e3280f37be /resources
parent696f5b06e4781cc61274eb3969103cb3be76e8d3 (diff)
downloadwebtrees-b47837c47d7b6e97a8ae8b39adde4ac935004240.tar.gz
webtrees-b47837c47d7b6e97a8ae8b39adde4ac935004240.tar.bz2
webtrees-b47837c47d7b6e97a8ae8b39adde4ac935004240.zip
Fix: #3682 - add bootstrap markup to user message block
Diffstat (limited to 'resources')
-rw-r--r--resources/views/modules/user-messages/user-messages.phtml150
1 files changed, 150 insertions, 0 deletions
diff --git a/resources/views/modules/user-messages/user-messages.phtml b/resources/views/modules/user-messages/user-messages.phtml
new file mode 100644
index 0000000000..4f0e99a111
--- /dev/null
+++ b/resources/views/modules/user-messages/user-messages.phtml
@@ -0,0 +1,150 @@
+<?php
+
+use Fisharebest\Webtrees\Filter;
+use Fisharebest\Webtrees\Http\RequestHandlers\MessagePage;
+use Fisharebest\Webtrees\Http\RequestHandlers\MessageSelect;
+use Fisharebest\Webtrees\Http\RequestHandlers\UserPage;
+use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\Module\ModuleInterface;
+use Fisharebest\Webtrees\Services\UserService;
+use Fisharebest\Webtrees\Tree;
+use Fisharebest\Webtrees\User;
+use Illuminate\Support\Collection;
+
+/**
+ * @var int $block_id
+ * @var string $context
+ * @var ModuleInterface $module
+ * @var Tree $tree
+ * @var Collection<stdClass> $messages
+ * @var Collection<User> $users
+ * @var UserService $user_service
+ */
+
+?>
+
+<?php if ($users->isNotEmpty()): ?>
+ <form method="post" action="<?= e(route(MessageSelect::class, ['tree' => $tree->name()])) ?>">
+ <?= csrf_field() ?>
+ <input type="hidden" name="url" value="<?= e(route(UserPage::class, ['tree' => $tree->name()])) ?>">
+ <label for="to"><?= I18N::translate('Send a message') ?></label>
+
+ <div class="input-group">
+ <select class="form-control" id="to" name="to" required>
+ <option value=""><?= I18N::translate('&lt;select&gt;') ?></option>
+ <?php foreach ($users as $user): ?>
+ <option value="<?= e($user->userName()) ?>">
+ <?= e($user->realName()) ?> - <?= e($user->userName()) ?>
+ </option>
+ <?php endforeach ?>
+ </select>
+
+ <button type="submit" class="btn btn-primary"><?= I18N::translate('Send') ?></button>
+ </div>
+ <br><br>
+ </form>
+<?php endif ?>
+
+<form
+ method="post"
+ action="<?= e(route('module', ['action' => 'DeleteMessage', 'module' => $module->name(), 'context' => $context, 'tree' => $tree->name()])) ?>"
+ data-confirm="<?= I18N::translate('Are you sure you want to delete this message? It cannot be retrieved later.') ?>"
+ onsubmit="return confirm(this.dataset.confirm);"
+ id="messageform"
+ name="messageform"
+>
+ <?= csrf_field() ?>
+
+ <?php if ($messages->isNotEmpty()): ?>
+ <div class="table-responsive">
+ <table class="table table-sm w-100">
+ <tr>
+ <th class="list_label">
+ <?= I18N::translate('Delete') ?>
+ <br>
+ <a href="#"
+ onclick="$('#block-<?= $block_id ?> :checkbox').prop('checked', true); return false;">
+ <?= I18N::translate('All') ?>
+ </a>
+ </th>
+ <th class="list_label"><?= I18N::translate('Subject') ?></th>
+ <th class="list_label"><?= I18N::translate('Date sent') ?></th>
+ <th class="list_label"><?= I18N::translate('Email address') ?></th>
+ </tr>
+
+ <?php foreach ($messages as $message): ?>
+ <tr>
+ <td class="list_value_wrap center">
+ <input type="checkbox" name="message_id[]" value="<?= $message->message_id ?>" id="cb_message<?= $message->message_id ?>">
+ </td>
+
+ <td class="list_value_wrap">
+ <a href="#message<?= $message->message_id ?>" data-toggle="collapse" role="button"
+ aria-expanded="false" aria-controls="message<?= $message->message_id ?>">
+ <?= view('icons/expand') ?>
+ <?= view('icons/collapse') ?>
+ <b dir="auto"><?= e($message->subject) ?></b>
+ </a>
+ </td>
+
+ <td class="list_value_wrap">
+ <?= view('components/datetime', ['timestamp' => $message->created]) ?>
+ </td>
+
+ <td class="list_value_wrap">
+ <?php $user = $user_service->findByIdentifier($message->sender) ?>
+
+ <?php if ($user instanceof User): ?>
+ <span dir="auto"><?= e($user->realName()) ?></span> - <span
+ dir="auto"><?= $user->email() ?></span>
+ <?php else: ?>
+ <a href="mailto:<?= e($message->sender) ?>"><?= e($message->sender) ?></a>
+ <?php endif ?>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="list_value_wrap" colspan="4">
+ <div id="message<?= $message->message_id ?>" class="collapse">
+ <div dir="auto" style="white-space: pre-wrap;">
+ <?= Filter::expandUrls($message->body, $tree) ?>
+ </div>
+ <br>
+
+ <?php
+ /* I18N: When replying to an email, the subject becomes “RE: subject” */
+ if (!str_starts_with($message->subject, I18N::translate('RE: '))) {
+ $message->subject = I18N::translate('RE: ') . $message->subject;
+ }
+
+ // If this user still exists, show a reply link.
+ if ($user instanceof User) {
+ $reply_url = route(MessagePage::class, [
+ 'subject' => $message->subject,
+ 'to' => $user->userName(),
+ 'tree' => $tree->name(),
+ 'url' => route(UserPage::class, ['tree' => $tree->name()]),
+ ]);
+ ?>
+
+ <a class="btn btn-primary" href="<?= e($reply_url) ?>"
+ title="<?= I18N::translate('Reply') ?>">
+ <?= I18N::translate('Reply') ?>
+ </a>
+ <?php } ?>
+ <button type="button" class="btn btn-danger"
+ data-confirm="<?= I18N::translate('Are you sure you want to delete this message? It cannot be retrieved later.') ?>"
+ onclick="if (confirm(this.dataset.confirm)) {$('#messageform :checkbox').prop('checked', false); $('#cb_message<?= $message->message_id ?>').prop('checked', true); document.messageform.submit();}">
+ <?= I18N::translate('Delete') ?>
+ </button>
+ </div>
+ </td>
+ </tr>
+ <?php endforeach ?>
+ </table>
+ </div>
+ <p>
+ <button type="submit"><?= I18N::translate('Delete selected messages') ?></button>
+ </p>
+ <?php endif ?>
+</form>