Files
shopify-ai-backup/chat/templates/Community Suggestions/admin/class-admin.php

255 lines
13 KiB
PHP

<?php
class PC_Community_Suggestions_Admin {
public function __construct() {
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
add_action('admin_post_pc_delete_suggestion', array($this, 'handle_suggestion_deletion'));
}
public function add_admin_menu() {
add_menu_page(
__('Community Suggestions', 'pc-community-suggestions-7d3f'),
__('Suggestions', 'pc-community-suggestions-7d3f'),
'manage_options',
'pc_community_suggestions',
array($this, 'render_admin_page'),
'dashicons-lightbulb',
30
);
add_submenu_page(
'pc_community_suggestions',
__('All Suggestions', 'pc-community-suggestions-7d3f'),
__('All Suggestions', 'pc-community-suggestions-7d3f'),
'manage_options',
'pc_community_suggestions',
array($this, 'render_admin_page')
);
add_submenu_page(
'pc_community_suggestions',
__('Settings', 'pc-community-suggestions-7d3f'),
__('Settings', 'pc-community-suggestions-7d3f'),
'manage_options',
'pc_community_suggestions_settings',
array($this, 'render_settings_page')
);
}
public function register_settings() {
register_setting('pc_community_suggestions_settings', 'pc_community_suggestions_default_sort');
add_settings_section(
'pc_community_suggestions_general',
__('General Settings', 'pc-community-suggestions-7d3f'),
array($this, 'render_settings_section'),
'pc_community_suggestions_settings'
);
add_settings_field(
'pc_community_suggestions_default_sort',
__('Default Sort Order', 'pc-community-suggestions-7d3f'),
array($this, 'render_sort_field'),
'pc_community_suggestions_settings',
'pc_community_suggestions_general'
);
}
public function render_settings_section() {
echo '<p>' . __('Configure how community suggestions work on your site.', 'pc-community-suggestions-7d3f') . '</p>';
}
public function render_sort_field() {
$default_sort = get_option('pc_community_suggestions_default_sort', 'popular');
?>
<select name="pc_community_suggestions_default_sort">
<option value="popular" <?php selected($default_sort, 'popular'); ?>><?php esc_html_e('Most Upvoted', 'pc-community-suggestions-7d3f'); ?></option>
<option value="newest" <?php selected($default_sort, 'newest'); ?>><?php esc_html_e('Newest', 'pc-community-suggestions-7d3f'); ?></option>
</select>
<p class="description">
<?php esc_html_e('Default sorting method for the suggestions page.', 'pc-community-suggestions-7d3f'); ?>
</p>
<?php
}
public function render_admin_page() {
$current_tab = $_GET['tab'] ?? 'all';
$sort = isset($_GET['sort']) && in_array($_GET['sort'], ['popular', 'newest']) ? $_GET['sort'] : 'newest';
?>
<div class="wrap">
<h1><?php esc_html_e('Community Suggestions', 'pc-community-suggestions-7d3f'); ?></h1>
<div class="pc-admin-controls">
<div class="pc-sort-dropdown">
<label for="pc-admin-sort"><?php esc_html_e('Sort by:', 'pc-community-suggestions-7d3f'); ?></label>
<select id="pc-admin-sort" onchange="window.location.href='?page=pc_community_suggestions&sort=' + this.value">
<option value="newest" <?php selected($sort, 'newest'); ?>><?php esc_html_e('Newest', 'pc-community-suggestions-7d3f'); ?></option>
<option value="popular" <?php selected($sort, 'popular'); ?>><?php esc_html_e('Most Upvoted', 'pc-community-suggestions-7d3f'); ?></option>
</select>
</div>
</div>
<div class="pc-admin-content">
<?php $this->render_suggestions_table($sort); ?>
</div>
</div>
<?php
}
public function render_settings_page() {
?>
<div class="wrap">
<h1><?php esc_html_e('Community Suggestions Settings', 'pc-community-suggestions-7d3f'); ?></h1>
<form method="post" action="options.php">
<?php
settings_fields('pc_community_suggestions_settings');
do_settings_sections('pc_community_suggestions_settings');
submit_button();
?>
</form>
<div class="pc-settings-stats">
<h2><?php esc_html_e('Statistics', 'pc-community-suggestions-7d3f'); ?></h2>
<div class="pc-stats-grid">
<div class="pc-stat-card">
<h3><?php echo esc_html(PC_Community_Suggestions_Database::get_suggestion_count()); ?></h3>
<p><?php esc_html_e('Total Suggestions', 'pc-community-suggestions-7d3f'); ?></p>
</div>
</div>
</div>
</div>
<?php
}
private function render_suggestions_table($sort = 'newest') {
global $wpdb;
$table_name = $wpdb->prefix . 'pc_community_suggestions';
$order_by = $sort === 'newest' ? 'created_at DESC' : 'upvotes DESC, created_at DESC';
$suggestions = $wpdb->get_results(
"SELECT s.*, u.user_login, u.display_name
FROM $table_name s
LEFT JOIN {$wpdb->users} u ON s.user_id = u.ID
ORDER BY $order_by"
);
?>
<table class="wp-list-table widefat fixed striped">
<thead>
<tr>
<th><?php esc_html_e('Title', 'pc-community-suggestions-7d3f'); ?></th>
<th><?php esc_html_e('Author', 'pc-community-suggestions-7d3f'); ?></th>
<th><?php esc_html_e('Upvotes', 'pc-community-suggestions-7d3f'); ?></th>
<th><?php esc_html_e('Date', 'pc-community-suggestions-7d3f'); ?></th>
<th><?php esc_html_e('Actions', 'pc-community-suggestions-7d3f'); ?></th>
</tr>
</thead>
<tbody>
<?php if (empty($suggestions)) : ?>
<tr>
<td colspan="5"><?php esc_html_e('No suggestions found.', 'pc-community-suggestions-7d3f'); ?></td>
</tr>
<?php else : ?>
<?php foreach ($suggestions as $suggestion) : ?>
<tr>
<td>
<strong><?php echo esc_html($suggestion->title); ?></strong>
<div class="row-actions">
<span class="view">
<a href="#" onclick="pcPreviewSuggestion(<?php echo esc_attr($suggestion->id); ?>)">
<?php esc_html_e('View Details', 'pc-community-suggestions-7d3f'); ?>
</a> |
</span>
<span class="comment">
<a href="#" onclick="pcAddComment(<?php echo esc_attr($suggestion->id); ?>)">
<?php esc_html_e('Add Comment', 'pc-community-suggestions-7d3f'); ?>
</a>
</span>
</div>
</td>
<td><?php echo esc_html($suggestion->display_name ?: $suggestion->user_login); ?></td>
<td><?php echo esc_html($suggestion->upvotes); ?></td>
<td><?php echo date_i18n(get_option('date_format'), strtotime($suggestion->created_at)); ?></td>
<td>
<a href="<?php echo wp_nonce_url(admin_url('admin-post.php?action=pc_delete_suggestion&id=' . $suggestion->id), 'pc_delete_suggestion_' . $suggestion->id); ?>"
class="button button-small button-link-delete"
onclick="return confirm('<?php esc_attr_e('Are you sure you want to delete this suggestion?', 'pc-community-suggestions-7d3f'); ?>')">
<?php esc_html_e('Delete', 'pc-community-suggestions-7d3f'); ?>
</a>
</td>
</tr>
<tr id="pc-comments-<?php echo esc_attr($suggestion->id); ?>" class="pc-comments-row" style="display: none;">
<td colspan="5" class="pc-comments-cell">
<div class="pc-comments-container">
<h4><?php esc_html_e('Admin Comments', 'pc-community-suggestions-7d3f'); ?></h4>
<div class="pc-comments-list" id="pc-comments-list-<?php echo esc_attr($suggestion->id); ?>">
<?php
$comments = PC_Community_Suggestions_Database::get_comments($suggestion->id);
if (empty($comments)) {
echo '<p class="pc-no-comments">' . esc_html__('No comments yet.', 'pc-community-suggestions-7d3f') . '</p>';
} else {
foreach ($comments as $comment) {
echo '<div class="pc-comment-item" data-comment-id="' . esc_attr($comment->id) . '">';
echo '<div class="pc-comment-header">';
echo '<strong>' . esc_html($comment->display_name ?: $comment->user_login) . '</strong>';
echo '<span class="pc-comment-date">' . esc_html(date_i18n(get_option('date_format'), strtotime($comment->created_at))) . '</span>';
echo '</div>';
echo '<div class="pc-comment-content">' . wp_kses_post(wpautop($comment->comment)) . '</div>';
echo '<div class="pc-comment-actions">';
echo '<button class="button button-small button-link-delete" onclick="pcDeleteComment(' . esc_attr($comment->id) . ')">' . esc_html__('Delete', 'pc-community-suggestions-7d3f') . '</button>';
echo '</div>';
echo '</div>';
}
}
?>
</div>
<div class="pc-add-comment">
<h5><?php esc_html_e('Add Comment', 'pc-community-suggestions-7d3f'); ?></h5>
<textarea id="pc-comment-<?php echo esc_attr($suggestion->id); ?>" rows="3" placeholder="<?php esc_attr_e('Enter your comment...', 'pc-community-suggestions-7d3f'); ?>"></textarea>
<button type="button" class="button button-small" onclick="pcSubmitComment(<?php echo esc_attr($suggestion->id); ?>)">
<?php esc_html_e('Add Comment', 'pc-community-suggestions-7d3f'); ?>
</button>
</div>
</div>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
<?php
}
public function handle_suggestion_deletion() {
if (!current_user_can('manage_options')) {
wp_die(__('You do not have permission to perform this action.', 'pc-community-suggestions-7d3f'));
}
$suggestion_id = intval($_GET['id'] ?? 0);
check_admin_referer('pc_delete_suggestion_' . $suggestion_id);
if ($suggestion_id > 0) {
PC_Community_Suggestions_Database::delete_suggestion($suggestion_id);
wp_redirect(admin_url('admin.php?page=pc_community_suggestions&deleted=1'));
exit;
}
wp_redirect(admin_url('admin.php?page=pc_community_suggestions&error=1'));
exit;
}
}