feat: Add Store link to admin header and notification activity log
- Add Store link to admin header (visible when customer SPA is enabled) - Add storeUrl and customerSpaEnabled to WNW_CONFIG in Assets.php and StandaloneAdmin.php - Update window.d.ts with new WNW_CONFIG properties - Create ActivityLog.tsx component with search, filters, and pagination - Add /notifications/logs API endpoint to NotificationsController - Update Notifications.tsx to link to activity log page - Add ActivityLog route to App.tsx
This commit is contained in:
@@ -217,6 +217,15 @@ class NotificationsController {
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
|
||||
// GET /woonoow/v1/notifications/logs
|
||||
register_rest_route($this->namespace, '/' . $this->rest_base . '/logs', [
|
||||
[
|
||||
'methods' => 'GET',
|
||||
'callback' => [$this, 'get_logs'],
|
||||
'permission_callback' => [$this, 'check_permission'],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -872,4 +881,54 @@ class NotificationsController {
|
||||
),
|
||||
], 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get notification activity logs
|
||||
*
|
||||
* @param WP_REST_Request $request Request object
|
||||
* @return WP_REST_Response
|
||||
*/
|
||||
public function get_logs(WP_REST_Request $request) {
|
||||
$page = (int) $request->get_param('page') ?: 1;
|
||||
$per_page = (int) $request->get_param('per_page') ?: 20;
|
||||
$channel = $request->get_param('channel');
|
||||
$status = $request->get_param('status');
|
||||
$search = $request->get_param('search');
|
||||
|
||||
// Get logs from option (in a real app, use a custom table)
|
||||
$all_logs = get_option('woonoow_notification_logs', []);
|
||||
|
||||
// Apply filters
|
||||
if ($channel && $channel !== 'all') {
|
||||
$all_logs = array_filter($all_logs, fn($log) => $log['channel'] === $channel);
|
||||
}
|
||||
|
||||
if ($status && $status !== 'all') {
|
||||
$all_logs = array_filter($all_logs, fn($log) => $log['status'] === $status);
|
||||
}
|
||||
|
||||
if ($search) {
|
||||
$search_lower = strtolower($search);
|
||||
$all_logs = array_filter($all_logs, function($log) use ($search_lower) {
|
||||
return strpos(strtolower($log['recipient'] ?? ''), $search_lower) !== false ||
|
||||
strpos(strtolower($log['subject'] ?? ''), $search_lower) !== false;
|
||||
});
|
||||
}
|
||||
|
||||
// Sort by date descending
|
||||
usort($all_logs, function($a, $b) {
|
||||
return strtotime($b['created_at'] ?? '') - strtotime($a['created_at'] ?? '');
|
||||
});
|
||||
|
||||
$total = count($all_logs);
|
||||
$offset = ($page - 1) * $per_page;
|
||||
$logs = array_slice(array_values($all_logs), $offset, $per_page);
|
||||
|
||||
return new WP_REST_Response([
|
||||
'logs' => $logs,
|
||||
'total' => $total,
|
||||
'page' => $page,
|
||||
'per_page' => $per_page,
|
||||
], 200);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user