. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Database; use Fisharebest\Webtrees\Filter; use Fisharebest\Webtrees\Functions\FunctionsDate; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** * Class UserMessagesModule */ class UserMessagesModule extends AbstractModule implements ModuleBlockInterface { /** {@inheritdoc} */ public function getTitle(): string { /* I18N: Name of a module */ return I18N::translate('Messages'); } /** {@inheritdoc} */ public function getDescription(): string { /* I18N: Description of the “Messages” module */ return I18N::translate('Communicate directly with other users, using private messages.'); } /** * Delete one or messages belonging to a user. * * @param Request $request * @param Tree $tree * * @return Response */ public function postDeleteMessageAction(Request $request, Tree $tree): Response { $message_ids = (array) $request->get('message_id', []); $stmt = Database::prepare("DELETE FROM `##message` WHERE user_id = :user_id AND message_id = :message_id"); foreach ($message_ids as $message_id) { $stmt->execute([ 'message_id' => $message_id, 'user_id' => Auth::id(), ]); } if ($request->get('ctype') === 'user') { $url = route('user-page', ['ged' => $tree->getName()]); } else { $url = route('tree-page', ['ged' => $tree->getName()]); } return new RedirectResponse($url); } /** * Generate the HTML content of this block. * * @param Tree $tree * @param int $block_id * @param bool $template * @param string[] $cfg * * @return string */ public function getBlock(Tree $tree, int $block_id, bool $template = true, array $cfg = []): string { global $ctype; $messages = Database::prepare("SELECT message_id, sender, subject, body, UNIX_TIMESTAMP(created) AS created FROM `##message` WHERE user_id=? ORDER BY message_id DESC") ->execute([Auth::id()]) ->fetchAll(); $count = count($messages); $users = array_filter(User::all(), function (User $user): bool { return $user->getUserId() !== Auth::id() && $user->getPreference('verified_by_admin') && $user->getPreference('contactmethod') !== 'none'; }); $content = ''; if (!empty($users)) { $url = route('user-page', ['ged' => $tree->getName()]); $content .= '
'; } $content .= ''; if ($template) { return view('modules/block-template', [ 'block' => str_replace('_', '-', $this->getName()), 'id' => $block_id, 'config_url' => '', 'title' => I18N::plural('%s message', '%s messages', $count, I18N::number($count)), 'content' => $content, ]); } return $content; } /** {@inheritdoc} */ public function loadAjax(): bool { return false; } /** {@inheritdoc} */ public function isUserBlock(): bool { return true; } /** {@inheritdoc} */ public function isGedcomBlock(): bool { return false; } /** * Update the configuration for a block. * * @param Request $request * @param int $block_id * * @return void */ public function saveBlockConfiguration(Request $request, int $block_id) { } /** * An HTML form to edit block settings * * @param Tree $tree * @param int $block_id * * @return void */ public function editBlockConfiguration(Tree $tree, int $block_id) { } }