Notifications
parent
0c58c8dbaa
commit
8bf81bcea2
|
@ -4,6 +4,7 @@ use WoWPress\Database\CreateCacheTable;
|
||||||
use WoWPress\Database\CreateCharacterTable;
|
use WoWPress\Database\CreateCharacterTable;
|
||||||
use WoWPress\Database\CreateComplaintTable;
|
use WoWPress\Database\CreateComplaintTable;
|
||||||
use WoWPress\Database\CreateLogTable;
|
use WoWPress\Database\CreateLogTable;
|
||||||
|
use WoWPress\Database\CreateNotificationTable;
|
||||||
use WoWPress\Database\CreateRaidTable;
|
use WoWPress\Database\CreateRaidTable;
|
||||||
use WoWPress\Database\CreateSignupTable;
|
use WoWPress\Database\CreateSignupTable;
|
||||||
use WoWPress\Database\CreateSKSTable;
|
use WoWPress\Database\CreateSKSTable;
|
||||||
|
@ -161,7 +162,7 @@ if (!function_exists('wowpress_database')) :
|
||||||
CreateSKSTable::sql(),
|
CreateSKSTable::sql(),
|
||||||
CreateLogTable::sql(),
|
CreateLogTable::sql(),
|
||||||
CreateComplaintTable::sql(),
|
CreateComplaintTable::sql(),
|
||||||
|
CreateNotificationTable::sql(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,12 +480,13 @@ function wowpress_add_category_meta($taxonomy)
|
||||||
|
|
||||||
/** Avatar Filters */
|
/** Avatar Filters */
|
||||||
add_filter('get_avatar_url', '\WoWPress\Models\User::getAvatar', 10, 3);
|
add_filter('get_avatar_url', '\WoWPress\Models\User::getAvatar', 10, 3);
|
||||||
add_filter('asgarosforum_filter_username', '\WoWPress\Models\User::getUsername', 10, 2);
|
add_filter('asgarosforum_filter_username', '\WoWPress\Models\User::getUsername', 10, 2);
|
||||||
|
|
||||||
/** Login redirect */
|
/** Login redirect */
|
||||||
add_filter('login_redirect', fn() => "/");
|
add_filter('login_redirect', fn () => "/");
|
||||||
|
|
||||||
function sanitize($word){
|
function sanitize($word)
|
||||||
$char = new Character();
|
{
|
||||||
return $char->sanitize($word);
|
$char = new Character();
|
||||||
}
|
return $char->sanitize($word);
|
||||||
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ $complaints = Complaint::getAll();
|
||||||
<div class="bg-black bg-opacity-60 backdrop-blur-md shadow p-auto text-center flex flex-col gap-2">
|
<div class="bg-black bg-opacity-60 backdrop-blur-md shadow p-auto text-center flex flex-col gap-2">
|
||||||
<h2 class="text-3xl font-bold">Willkommen in unserem Kummerkasten</h2>
|
<h2 class="text-3xl font-bold">Willkommen in unserem Kummerkasten</h2>
|
||||||
<p>
|
<p>
|
||||||
Du hast etwas auf dem Herzen, möchtest deinem Ärger Luft machen oder uns einfach nur so etwas mitteilen?<br>
|
Du hast etwas auf dem Herzen oder uns einfach nur so etwas mitteilen?<br>
|
||||||
Dann ist hier der richtige Ort dafür!
|
Dann ist hier der richtige Ort dafür!
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
|
@ -35,7 +35,6 @@ $complaints = Complaint::getAll();
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Wenn du "unerkannt" bleiben möchtest kannst du das Formular auch "anonym" absenden. Allerdings kann man in der Datenbank trotzdem sehen wer das Formular abgeschickt hat, um Missbrauch zu vermeiden.<br>
|
Wenn du "unerkannt" bleiben möchtest kannst du das Formular auch "anonym" absenden. Allerdings kann man in der Datenbank trotzdem sehen wer das Formular abgeschickt hat, um Missbrauch zu vermeiden.<br>
|
||||||
Hier musst du darauf vertrauen, dass der Webseiten-Gott nicht so gemein ist und in der Datenbank auf die Suche geht. Normalsterbliche Offis können allerdings nicht sehen wer das Formular abgeschickt hat.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<?php if (!$can_edit || true) : ?>
|
<?php if (!$can_edit || true) : ?>
|
||||||
|
@ -47,7 +46,7 @@ $complaints = Complaint::getAll();
|
||||||
<h3 class="text-2xl font-bold text-center">Neue Einsendung</h3>
|
<h3 class="text-2xl font-bold text-center">Neue Einsendung</h3>
|
||||||
<textarea form="addComplaint" name="complaint" id="complaint" class="bg-black bg-opacity-60 backdrop-blur-md text-white border-white focus:ring-alliance focus:border-alliance" rows="5"></textarea>
|
<textarea form="addComplaint" name="complaint" id="complaint" class="bg-black bg-opacity-60 backdrop-blur-md text-white border-white focus:ring-alliance focus:border-alliance" rows="5"></textarea>
|
||||||
<div class="flex flex-row gap-2">
|
<div class="flex flex-row gap-2">
|
||||||
<button form="addComplaint" type="submit" name="show" value="1" class="btn btn-outline btn-alliance flex-grow bg-black bg-opacity-60 backdrop-blur-md">Absenden <?= Icon::get('o-paper-airplane') ?></button>
|
<button form="addComplaint" type="submit" name="show" value="1" class="btn btn-outline btn-alliance flex-grow bg-black bg-opacity-60 backdrop-blur-md">Mit Charnamen senden <?= Icon::get('o-paper-airplane') ?></button>
|
||||||
<button form="addComplaint" type="submit" name="hide" value="1" class="btn btn-outline btn-alliance flex-grow bg-black bg-opacity-60 backdrop-blur-md">Anonym senden <?= Icon::get('o-paper-airplane') ?></button>
|
<button form="addComplaint" type="submit" name="hide" value="1" class="btn btn-outline btn-alliance flex-grow bg-black bg-opacity-60 backdrop-blur-md">Anonym senden <?= Icon::get('o-paper-airplane') ?></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -65,8 +64,8 @@ $complaints = Complaint::getAll();
|
||||||
<input type="hidden" name="complaint_id" value="<?= $complaint->ID ?>">
|
<input type="hidden" name="complaint_id" value="<?= $complaint->ID ?>">
|
||||||
<?php wp_nonce_field('trashComplaint', 'trashComplaint_nonce'); ?>
|
<?php wp_nonce_field('trashComplaint', 'trashComplaint_nonce'); ?>
|
||||||
</form>
|
</form>
|
||||||
<div class="shadow p-auto flex flex-col gap-2 <?= $complaint->deleted_at ? "border border-dashed border-white bg-green-800 bg-opacity-60 backdrop-blur-md" : "bg-black bg-opacity-60 backdrop-blur-md" ?>">
|
<div class="shadow p-auto flex flex-col gap-2 <?= strtotime($complaint->deleted_at."") > 0 ? "border border-dashed border-white bg-green-800 bg-opacity-60 backdrop-blur-md" : "bg-black bg-opacity-60 backdrop-blur-md" ?>">
|
||||||
<?php if ($complaint->deleted_at) : ?>
|
<?php if (strtotime($complaint->deleted_at."") > 0) : ?>
|
||||||
<div class="text-end">Eintrag gelöscht</div>
|
<div class="text-end">Eintrag gelöscht</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<div class="flex flex-col gap-2">
|
<div class="flex flex-col gap-2">
|
||||||
|
@ -97,7 +96,7 @@ $complaints = Complaint::getAll();
|
||||||
<div class="border border-white p-2 text-white w-full">
|
<div class="border border-white p-2 text-white w-full">
|
||||||
<?= $complaint->complaint ?>
|
<?= $complaint->complaint ?>
|
||||||
</div>
|
</div>
|
||||||
<?php if (!$complaint->deleted_at) : ?>
|
<?php if (!(strtotime($complaint->deleted_at."") > 0)) : ?>
|
||||||
<button type="submit" form="trashComplaint<?= $complaint->ID ?>" class="btn btn-outline btn-red">
|
<button type="submit" form="trashComplaint<?= $complaint->ID ?>" class="btn btn-outline btn-red">
|
||||||
<?= Icon::get('o-trash') ?>
|
<?= Icon::get('o-trash') ?>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Redirect;
|
||||||
use WoWPress\Models\Character;
|
use WoWPress\Models\Character;
|
||||||
use WoWPress\Models\Complaint;
|
use WoWPress\Models\Complaint;
|
||||||
use WoWPress\Models\Log;
|
use WoWPress\Models\Log;
|
||||||
|
use WoWPress\Models\Notification;
|
||||||
use WoWPress\Models\Raid;
|
use WoWPress\Models\Raid;
|
||||||
use WoWPress\Models\Signup;
|
use WoWPress\Models\Signup;
|
||||||
use WoWPress\Models\SKS;
|
use WoWPress\Models\SKS;
|
||||||
|
@ -255,6 +256,7 @@ switch ($_POST['action']) {
|
||||||
if ($c) {
|
if ($c) {
|
||||||
$c->user_comment = $_POST['user_comment'];
|
$c->user_comment = $_POST['user_comment'];
|
||||||
$c->save();
|
$c->save();
|
||||||
|
Notification::addNotification($c->user_id, "Neuer Kommentar im Kummerkasten!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,6 +319,18 @@ switch ($_POST['action']) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'notificationSeen':
|
||||||
|
if (is_user_logged_in()) {
|
||||||
|
if (isset($_POST['notificationSeen_nonce']) && wp_verify_nonce($_POST['notificationSeen_nonce'], 'notificationSeen')) {
|
||||||
|
if (isset($_POST['notification_id'])) {
|
||||||
|
$note = Notification::find($_POST['notification_id']);
|
||||||
|
if(!empty($note->ID && $note->user_id == get_current_user_id())){
|
||||||
|
$note->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
header('Location: ' . $_SERVER['HTTP_REFERER']);
|
header('Location: ' . $_SERVER['HTTP_REFERER']);
|
||||||
|
|
|
@ -10,6 +10,13 @@
|
||||||
|
|
||||||
use WoWPress\Frontend\Icon;
|
use WoWPress\Frontend\Icon;
|
||||||
use WoWPress\Frontend\NavWalker;
|
use WoWPress\Frontend\NavWalker;
|
||||||
|
use WoWPress\Models\Notification;
|
||||||
|
|
||||||
|
if (is_user_logged_in()) {
|
||||||
|
$notifications = Notification::getAll();
|
||||||
|
} else {
|
||||||
|
$notifications = [];
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
@ -45,7 +52,7 @@ use WoWPress\Frontend\NavWalker;
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div x-data="{ open: false }" class="flex flex-col max-w-screen-xl px-4 py-2 mx-auto xl:items-center xl:justify-center xl:flex-row xl:px-8">
|
<div x-data="{ open: false, notification: false }" class="flex flex-col max-w-screen-xl px-4 py-2 mx-auto xl:items-center xl:justify-center xl:flex-row xl:px-8">
|
||||||
<div class="py-2 xl:hidden flex flex-row items-center justify-center gap-2" style="--btn-color : white">
|
<div class="py-2 xl:hidden flex flex-row items-center justify-center gap-2" style="--btn-color : white">
|
||||||
<button class="btn btn-outline flex-grow" @click="open = !open">
|
<button class="btn btn-outline flex-grow" @click="open = !open">
|
||||||
Menü
|
Menü
|
||||||
|
@ -61,9 +68,35 @@ use WoWPress\Frontend\NavWalker;
|
||||||
<a class="btn btn-outline btn-red" href="/wp-login.php">Login</a>
|
<a class="btn btn-outline btn-red" href="/wp-login.php">Login</a>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<a class="btn btn-outline btn-alliance" href="/wp-admin/profile.php">Profil</a>
|
<a class="btn btn-outline btn-alliance" href="/wp-admin/profile.php">Profil</a>
|
||||||
|
<?php if (!empty($notifications->first())) : ?>
|
||||||
|
<a href="#" class="btn btn-outline btn-alliance" @click="notification = !notification">
|
||||||
|
|
||||||
|
<span class="relative flex h-3 w-3">
|
||||||
|
<span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-alliance opacity-75"></span>
|
||||||
|
<span class="relative inline-flex rounded-full h-3 w-3 bg-alliance"></span>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<?php endif; ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
<?php if (!empty($notifications->first())) : ?>
|
||||||
|
<div x-show="notification">
|
||||||
|
<div class="p-2 flex flex-col mt-1 gap-2 shadow" style="background-color:var(--color-deepblue)">
|
||||||
|
<?php foreach ($notifications as $notification) : ?>
|
||||||
|
<div class="p-2 border flex flex-row gap-1 justify-between">
|
||||||
|
<form class="hidden" method="POST" action="/request" id="deleteNotification<?= $notification->ID ?>">
|
||||||
|
<input type="hidden" name="action" value="notificationSeen">
|
||||||
|
<input type="hidden" name="notification_id" value="<?= $notification->ID ?>">
|
||||||
|
<?php wp_nonce_field('notificationSeen', 'notificationSeen_nonce'); ?>
|
||||||
|
</form>
|
||||||
|
<div><?= $notification->note ?></div>
|
||||||
|
<button type="submit" class="cursor-pointer" form="deleteNotification<?= $notification->ID ?>"><?= Icon::get('o-x-circle') ?> </button>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<? endif; ?>
|
||||||
<nav id="site-navigation" :class="{'flex': open, 'hidden': !open}" class="flex-col flex-grow pb-4 md:pb-0 hidden xl:flex xl:justify-center xl:flex-row gap-2">
|
<nav id="site-navigation" :class="{'flex': open, 'hidden': !open}" class="flex-col flex-grow pb-4 md:pb-0 hidden xl:flex xl:justify-center xl:flex-row gap-2">
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
@ -81,15 +114,45 @@ use WoWPress\Frontend\NavWalker;
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<div class="hidden xl:flex">
|
<div class="hidden xl:flex">
|
||||||
<?php if (!is_user_logged_in()) : ?>
|
<?php if (!is_user_logged_in()) : ?>
|
||||||
<a class="btn btn-outline btn-red" href="/wp-login.php">Login</a>
|
<a class="btn btn-outline btn-red" href="/wp-login.php">Login</a>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<a class="btn btn-outline btn-alliance" href="/wp-admin/profile.php">Profil</a>
|
<a class="btn btn-outline btn-alliance" href="/wp-admin/profile.php">Profil</a>
|
||||||
|
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
<?php if (is_user_logged_in() && !empty($notifications->first())) : ?>
|
||||||
|
<div x-data="{notification:false}">
|
||||||
|
<div class="hidden xl:flex">
|
||||||
|
<a href="#" class="btn btn-outline btn-alliance" @click="notification = !notification">
|
||||||
|
Benachrichtigungen
|
||||||
|
<span class="relative flex h-3 w-3">
|
||||||
|
<span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-alliance opacity-75"></span>
|
||||||
|
<span class="relative inline-flex rounded-full h-3 w-3 bg-alliance"></span>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<?php if (!empty($notifications->first())) : ?>
|
||||||
|
<div x-show="notification">
|
||||||
|
<div class="p-2 flex flex-col mt-1 absolute gap-2 shadow" style="background-color:var(--color-deepblue)">
|
||||||
|
<?php foreach ($notifications as $notification) : ?>
|
||||||
|
<div class="p-2 border flex flex-row gap-1 justify-between">
|
||||||
|
<form class="hidden" action="/request" method="POST" id="deleteNotification<?= $notification->ID ?>">
|
||||||
|
<input type="hidden" name="action" value="notificationSeen">
|
||||||
|
<input type="hidden" name="notification_id" value="<?= $notification->ID ?>">
|
||||||
|
<?php wp_nonce_field('notificationSeen', 'notificationSeen_nonce'); ?>
|
||||||
|
</form>
|
||||||
|
<div><?= $notification->note ?></div>
|
||||||
|
<button type="submit" class="cursor-pointer" form="deleteNotification<?= $notification->ID ?>"><?= Icon::get('o-x-circle') ?> </button>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<? endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
</nav><!-- #site-navigation -->
|
</nav><!-- #site-navigation -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace WoWPress\Database;
|
||||||
|
|
||||||
|
class CreateNotificationTable extends CreateTable
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public static $table_name = "notifications";
|
||||||
|
public static $fields = [
|
||||||
|
'user_id' => 'mediumint',
|
||||||
|
'note' => 'text NOT NULL',
|
||||||
|
'created_at' => 'timestamp NOT NULL',
|
||||||
|
'updated_at' => 'timestamp NOT NULL',
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
|
@ -41,7 +41,7 @@ class Complaint extends Model{
|
||||||
}
|
}
|
||||||
|
|
||||||
public function canEdit(){
|
public function canEdit(){
|
||||||
return current_user_can('wowpress_edit_complaints') && (get_current_user_id() != $this->user_id);
|
return current_user_can('wowpress_edit_complaints');# && (get_current_user_id() != $this->user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace WoWPress\Models;
|
||||||
|
|
||||||
|
use Wenprise\Eloquent\Model;
|
||||||
|
|
||||||
|
class Notification extends Model{
|
||||||
|
|
||||||
|
protected $table = "wowpress_notifications";
|
||||||
|
public $timestamps = true;
|
||||||
|
protected $primaryKey = 'ID';
|
||||||
|
protected $guarded = ['ID'];
|
||||||
|
|
||||||
|
|
||||||
|
public static function addNotification($user_id,$note_text){
|
||||||
|
$note = new Notification();
|
||||||
|
$note->user_id = $user_id;
|
||||||
|
$note->note = $note_text;
|
||||||
|
$note->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getAll(){
|
||||||
|
return Notification::where('user_id',get_current_user_id())->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
Loading…
Reference in New Issue