Upload via GUI (39 Dateien)

This commit is contained in:
2026-08-14 07:59:43 +00:00
parent 05a2e1c7b6
commit 90f388f49c
31 changed files with 16919 additions and 5554 deletions
+232
View File
@@ -0,0 +1,232 @@
<?php
/**
* WP Multi Modul: Pinnwand
*
* Automatisch aus wp-multi.php ausgelagert. Wird über den Loader in
* wp-multi.php eingebunden (nur wenn das WP Multi Toolkit aktiv ist).
*/
if (!defined('ABSPATH')) { exit; }
/*
* Admin - Pinnwand
*/
// Funktion zum Erstellen der Datenbanktabelle für Nachrichten
function wp_multi_create_message_board_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'message_board'; // Tabelle für Nachrichten
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
message text NOT NULL,
user_id bigint(20) NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(WP_MULTI_FILE, 'wp_multi_create_message_board_table');
// Funktion zum Anzeigen der Nachrichten im Adminbereich
function wp_multi_add_message_board() {
if (!current_user_can('administrator')) {
return;
}
global $wpdb;
$table_name = $wpdb->prefix . 'message_board';
$created = false;
// Nachricht erstellen (VOR der Ausgabe, damit sie sofort erscheint)
if (isset($_POST['submit_message']) && !empty($_POST['new_message'])) {
if (!isset($_POST['wp_multi_pinwand_nonce_field']) || !wp_verify_nonce(wp_unslash($_POST['wp_multi_pinwand_nonce_field']), 'wp_multi_pinwand_create_message')) {
wp_die(__('Ungültige oder abgelaufene Anfrage.', 'wp-multi'));
}
$wpdb->insert(
$table_name,
array(
'message' => sanitize_textarea_field(wp_unslash($_POST['new_message'])),
'user_id' => get_current_user_id(),
)
);
$created = true;
}
$messages = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC");
wpmt_admin_page_open(
__('Pinwand', 'wp-multi'),
__('Interne Nachrichten für das Admin-Team', 'wp-multi')
);
if ($created) {
wpmt_admin_notice('success', __('Nachricht wurde erfolgreich erstellt.', 'wp-multi'));
}
wpmt_admin_card_open(__('Neue Nachricht erstellen', 'wp-multi'));
?>
<form method="post">
<?php wp_nonce_field('wp_multi_pinwand_create_message', 'wp_multi_pinwand_nonce_field'); ?>
<textarea name="new_message" rows="4" required style="width:100%;"></textarea>
<p><input type="submit" name="submit_message" value="<?php esc_attr_e('Nachricht erstellen', 'wp-multi'); ?>" class="wpm-btn wpm-btn--primary"></p>
</form>
<?php
wpmt_admin_card_close();
wpmt_admin_card_open(__('Nachrichten', 'wp-multi'));
if ($messages) {
echo '<div class="wpm-modules">';
foreach ($messages as $message) {
$user_info = get_userdata($message->user_id);
$author = $user_info ? $user_info->user_login : __('Unbekannt', 'wp-multi');
printf(
'<div class="wpm-module" style="cursor:pointer;" onclick="openMessagePopup(%d)"><span class="dashicons dashicons-admin-comments"></span><span><span class="wpm-module__title">%s</span><p class="wpm-module__desc">%s</p><p class="wpm-module__desc">%s</p></span></div>',
(int) $message->id,
esc_html($author),
esc_html(date('d-m-Y H:i', strtotime($message->created_at))),
esc_html(wp_trim_words($message->message, 20))
);
}
echo '</div>';
} else {
wpmt_admin_notice('info', __('Keine Nachrichten vorhanden.', 'wp-multi'));
}
wpmt_admin_card_close();
wpmt_admin_page_close();
?>
<div id="messagePopup" style="display:none; position:fixed; top:20%; left:50%; transform:translateX(-50%); background:#fff; padding:24px; border-radius:12px; box-shadow:0 4px 30px rgba(0,0,0,.2); z-index:99999; max-width:600px; width:90%;">
<div id="messageContent"></div>
<div style="display:flex; gap:10px; margin-top:20px;">
<button onclick="closeMessagePopup()" class="wpm-btn wpm-btn--primary"><?php esc_html_e('Schließen', 'wp-multi'); ?></button>
<button id="deleteMessageBtn" class="wpm-btn wpm-btn--danger" onclick="deleteMessage()"><?php esc_html_e('Löschen', 'wp-multi'); ?></button>
</div>
</div>
<script>
var wpMultiPinwandNonce = '<?php echo esc_js(wp_create_nonce('wp_multi_pinwand_nonce')); ?>';
function openMessagePopup(messageId) {
var data = { 'action': 'wp_multi_get_message', 'message_id': messageId, 'nonce': wpMultiPinwandNonce };
jQuery.post(ajaxurl, data, function(response) {
var messageData = JSON.parse(response);
document.getElementById('messageContent').innerHTML = '<h3>' + messageData.created_at + ' (' + messageData.user + ')</h3><p>' + messageData.message + '</p>';
document.getElementById('messagePopup').style.display = 'block';
document.getElementById('deleteMessageBtn').setAttribute('data-message-id', messageId);
});
}
function closeMessagePopup() {
document.getElementById('messagePopup').style.display = 'none';
}
function deleteMessage() {
var messageId = document.getElementById('deleteMessageBtn').getAttribute('data-message-id');
var data = { 'action': 'wp_multi_delete_message', 'message_id': messageId, 'nonce': wpMultiPinwandNonce };
jQuery.post(ajaxurl, data, function(response) {
if (response == 'success') { closeMessagePopup(); location.reload(); }
});
}
</script>
<?php
}
// Der Pinwand-Menüpunkt wird zentral in wp_multi_register_admin_menus() registriert.
// Funktion zum Abrufen der vollständigen Nachricht
function wp_multi_get_message() {
check_ajax_referer('wp_multi_pinwand_nonce', 'nonce');
if (!current_user_can('administrator')) {
wp_die();
}
if (isset($_POST['message_id'])) {
global $wpdb;
$table_name = $wpdb->prefix . 'message_board';
$message_id = intval($_POST['message_id']);
$message = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $message_id));
if ($message) {
// Datum im gewünschten Format (DD-MM-JJJJ HH:MM:SS)
$formatted_date = date('d-m-Y H:i:s', strtotime($message->created_at));
echo json_encode([
'created_at' => $formatted_date,
'message' => nl2br(esc_textarea($message->message)),
'user' => get_userdata($message->user_id)->user_login
]);
}
}
wp_die();
}
add_action('wp_ajax_wp_multi_get_message', 'wp_multi_get_message');
// Funktion zum Löschen einer Nachricht
function wp_multi_delete_message() {
check_ajax_referer('wp_multi_pinwand_nonce', 'nonce');
if (!current_user_can('administrator')) {
wp_die();
}
if (isset($_POST['message_id'])) {
global $wpdb;
$table_name = $wpdb->prefix . 'message_board';
$message_id = intval($_POST['message_id']);
$wpdb->delete($table_name, array('id' => $message_id), array('%d'));
echo 'success';
}
wp_die();
}
add_action('wp_ajax_wp_multi_delete_message', 'wp_multi_delete_message');
// Funktion zum Deaktivieren der Pinwand bei der Deinstallation
function wp_multi_delete_message_board_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'message_board';
$wpdb->query("DROP TABLE IF EXISTS $table_name");
}
register_deactivation_hook(WP_MULTI_FILE, 'wp_multi_delete_message_board_table');
// Funktion, um das Dashboard-Widget zu registrieren
function wp_multi_dashboard_widget() {
wp_add_dashboard_widget(
'wp_multi_pinwand_widget', // Widget-ID
'Pinwand Übersicht', // Widget-Titel
'wp_multi_dashboard_widget_content' // Callback-Funktion
);
}
add_action('wp_dashboard_setup', 'wp_multi_dashboard_widget');
// Callback-Funktion, die den Inhalt des Widgets erstellt
function wp_multi_dashboard_widget_content() {
global $wpdb;
$table_name = $wpdb->prefix . 'message_board';
$messages = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC LIMIT 5"); // Zeige die neuesten 5 Nachrichten an
if ($messages) {
echo '<ul>';
foreach ($messages as $message) {
$user_info = get_userdata($message->user_id);
echo '<li>';
echo '<strong>' . esc_html($user_info->user_login) . ' (' . date('d-m-Y H:i:s', strtotime($message->created_at)) . ')</strong>: ';
echo wp_trim_words($message->message, 10) . '...'; // Zeigt nur eine Vorschau der Nachricht
echo '</li>';
}
echo '</ul>';
} else {
echo '<p>Keine neuen Nachrichten.</p>';
}
}