Skip to content

Releases: xenroth/xen-levelup

v1.5.9 - Beta Release

Choose a tag to compare

@xenroth xenroth released this 23 Jun 03:40

[1.5.9] - 2026-06-23

Fixed

  • Wallet: transfer error handling β€” Server now returns explicit error code values for common transfer failures (invalid_details, self_transfer, recipient_not_found) and logs WP_Error details when transfers fail (debug-only). The client displays the error code alongside the message and logs network/server responses for faster diagnosis.

Changed

  • Improved client-side logging for xen_transfer_currency failures and added defensive UI messaging.

v1.5.6 - Beta Release

Choose a tag to compare

@xenroth xenroth released this 23 Jun 03:15

[1.5.6] - 2026-06-23

Fixed

  • Wallet tabs & Send β€” Transfers and History tabs are now reliably clickable; wallet panels and tab buttons were raised above transient overlays and pointer-events issues fixed. The Send flow's suggestion dropdown is always appended to body (preventing clipping) and outside-click handling was improved to avoid accidental closures.
  • Edit Profile β€” The Edit Profile toggle and save flow are restored by ensuring the edit controls receive pointer events above overlays.
  • Notifications positioning β€” Notification panel now positions adjacent to the bell and follows it during scroll/resize so it appears where expected instead of sticking in a stale viewport location.

Changed

  • Bumped plugin version to 1.5.6.

v1.5.5 - Beta Release

Choose a tag to compare

@xenroth xenroth released this 23 Jun 02:53

[1.5.5] - 2026-06-23

Added

  • Admin: Persistent Rank Sync Notice β€” The Settings page now displays the time, scope, and count of the last rank synchronization run and who initiated it. The Rank Sync maintenance actions still appear as buttons for one-off runs.

Changed

  • Bumped plugin version to 1.5.5.

v1.5.3 - Beta Release

Choose a tag to compare

@xenroth xenroth released this 23 Jun 01:56

[1.5.3] - 2026-06-23

Fixed

  • Notifications placement β€” Notification panel now appears adjacent to the notification bell rather than pinned to the viewport corner; positioning is computed from the bell element and keeps a high z-index to ensure visibility.
  • Wallet autocomplete β€” Recipient suggestions are appended to body and positioned under the input to avoid being blocked by overlays; selecting a recipient reliably populates the hidden recipient id and restores the Send Coins flow.
  • Rank sync fallback β€” Users with zero rebirths now receive a rank title derived from their current level (legacy behavior). Rebirth-based ranks still take precedence once rebirth_count > 0.

Changed

  • Bumped plugin version to 1.5.3 for this follow-up release.

v1.5.2 - Beta Release

Choose a tag to compare

@xenroth xenroth released this 23 Jun 01:49

[1.5.2] - 2026-06-23

Fixed

  • Wallet: buttons not clickable / suggestions blocked β€” Wallet send form controls and suggestion list could be made non-interactive when other page overlays or elements were present. The wallet send form and suggestions now ensure pointer-events are enabled and their z-index is raised so inputs and the Send Coins button are reliably clickable.
  • Notifications: panel overlapped by other elements β€” The dashboard notification panel now uses fixed positioning and a much higher z-index so it overlaps other page content and displays all updates in full when opened.

Changed

  • Bumped plugin version to 1.5.2 for this release.

Fixed

  • Plugin update loop (Bug #1): Plugin header Version tag was 1.4.2 while the internal constant was 1.5.0. WordPress compared the header version against the GitHub release tag and perpetually offered an update. Both are now aligned at 1.5.1.
  • Wallet user search broken for special-character names (Bug #2): xen_search_users applied esc_attr() to the search term before passing it to get_users(). This HTML-escaped characters like ' β†’ ' and & β†’ &, causing names like "O'Brien" or "Tom & Jerry" to return zero results. The redundant esc_attr() is removed; the term was already safely sanitized by sanitize_text_field().
  • Activity stream defaulted to friends-only mode (Bug #3): The [gamified_feed] shortcode defaulted mode="friends", so users with no friends saw an empty feed. Default changed to mode="global" so all activity is visible to everyone by default.
  • Activity stream "Load More" always fetched friends feed (Bug #3): The Load More AJAX call hardcoded mode: 'friends' regardless of what mode the shortcode used. The #xen-feed container now carries a data-mode attribute and the JS reads it dynamically ($feed.data('mode') || 'global').
  • Rankings showed stale level data (Bug #4): get_leaderboard() fetched r.level from the cached rankings table (set at the last recalculate run). This now uses p.level from the live user_profiles table so the displayed level always reflects the player's current rank.
  • Rankings only refreshed when empty (Bug #4): On-demand recalculation was skipped if any cached entries existed, meaning data could be hours stale. A 15-minute transient (xen_rankings_fresh) now acts as a staleness gate β€” rankings refresh at most once per 15 minutes on page view, in addition to the scheduled cron job.

v1.5.1 - Patch Release

Choose a tag to compare

@xenroth xenroth released this 03 Jun 22:42

[1.5.1] - 2026-06-05

Fixed

  • Plugin update loop (Bug #1): Plugin header Version tag was 1.4.2 while the internal constant was 1.5.0. WordPress compared the header version against the GitHub release tag and perpetually offered an update. Both are now aligned at 1.5.1.
  • Wallet user search broken for special-character names (Bug #2): xen_search_users applied esc_attr() to the search term before passing it to get_users(). This HTML-escaped characters like ' β†’ ' and & β†’ &, causing names like "O'Brien" or "Tom & Jerry" to return zero results. The redundant esc_attr() is removed; the term was already safely sanitized by sanitize_text_field().
  • Activity stream defaulted to friends-only mode (Bug #3): The [gamified_feed] shortcode defaulted mode="friends", so users with no friends saw an empty feed. Default changed to mode="global" so all activity is visible to everyone by default.
  • Activity stream "Load More" always fetched friends feed (Bug #3): The Load More AJAX call hardcoded mode: 'friends' regardless of what mode the shortcode used. The #xen-feed container now carries a data-mode attribute and the JS reads it dynamically ($feed.data('mode') || 'global').
  • Rankings showed stale level data (Bug #4): get_leaderboard() fetched r.level from the cached rankings table (set at the last recalculate run). This now uses p.level from the live user_profiles table so the displayed level always reflects the player's current rank.
  • Rankings only refreshed when empty (Bug #4): On-demand recalculation was skipped if any cached entries existed, meaning data could be hours stale. A 15-minute transient (xen_rankings_fresh) now acts as a staleness gate β€” rankings refresh at most once per 15 minutes on page view, in addition to the scheduled cron job.

v1.5.0 - Patch Release

Choose a tag to compare

@xenroth xenroth released this 03 Jun 15:24

[1.5.0] - 2026-06-04

What's New

  • Rebirth System: When a user reaches Level 100 and earns more XP they are reborn β€” level resets to 1, rebirth count increments, and their rank tier is promoted automatically.
  • Custom Rank Definitions: Admins can now create, edit, delete and toggle rank tiers from a new Ranks admin page. Each rank has a title, emoji icon, color, rebirths-required threshold, description and sort order.
  • Rank seeding: Plugin activation seeds 9 default ranks from Unranked β†’ Shadow Monarch keyed to rebirth count.

Fixed

  • Avatar upload broken: xen-social.js had an early-return guard (if (!$('#xen-feed').length) return) that prevented the avatar upload handler from registering on pages without the feed. The guard now only wraps feed-specific code; avatar upload runs on every page.
  • Activity stream time_diff missing: enrich_feed() now populates time_diff for every item, so "Load More" items show proper timestamps.
  • Activity stream currentUser missing: xenData now exposes currentUser (id, name, avatar) so feed cards render the correct author after posting.
  • xen_post_activity returning only ID: After posting, the response now includes the full enriched item object (res.data.item), which is used directly by buildFeedItem().

Changed

  • Default rank_title for new users is now 'Unranked' (was 'E-Rank').
  • Rank tier is now driven solely by rebirth_count (not level). sync_rank_title() updated accordingly.
  • Admin β†’ Edit User now has a Rebirth Count field; saving recalculates rank from rebirth count.
  • xen_rebirth action fires with 3 args: $user_id, $rebirth_count, $new_rank.

v1.4.2 - Patch Release

Choose a tag to compare

@xenroth xenroth released this 03 Jun 15:03

[1.4.2] - 2026-06-03

What's New

  • πŸ” Wallet: Live User Search β€” The "Send Coins" recipient field now has a live search input. Type a player's display name, username, or numeric ID and matching hunters appear instantly in a suggestion dropdown β€” no more scrolling through a long select list.
  • πŸ“› Wallet: Display Names in History β€” Transfer and transaction history now shows actual player names ("Sent to Xenroth") instead of raw user ID numbers.
  • πŸ”” Notification Bell: Fully Functional β€” The πŸ”” bell on the dashboard is now a clickable button that opens a notification panel. Shows recent notifications with unread highlights, single-notification mark-read on click, and a "Mark all read" button. Count badge hides when all are read.
  • πŸ… Rankings: Period Tabs Now Work β€” The All-Time / Weekly / Monthly tabs on the [gamified_rankings] page now actually switch the leaderboard data (the ?period= URL parameter is now read correctly by the shortcode). Rankings are also auto-calculated on first page load if the table is empty (no need to wait for cron).
  • πŸ–ΌοΈ Admin Shop: Image Upload β€” Admins can now click "Upload / Select Image" to open the WordPress Media Library and pick or upload a PNG image for each shop item. Includes size recommendations per item type: Frame (420Γ—420), Border (420Γ—420), Name Color (100Γ—32), Title (200Γ—48), Theme (320Γ—200), Badge (80Γ—80). Image preview shows live in the form.

Added

  • xen_search_users AJAX action β€” searches users by display name, username, or numeric ID; returns up to 10 matches for the wallet autocomplete.
  • Notification dropdown panel in dashboard view with full open/close, lazy-load, mark-read, mark-all-read.
  • WP Media Library integration on Admin β†’ Shop page (wp_enqueue_media() scoped to shop hook).

Changed

  • public/views/wallet.php β€” Replaced <select> recipient dropdown with text search input + hidden ID field + suggestion dropdown.
  • public/js/xen-profile-wallet.js β€” Added live search with 300ms debounce, suggestion click to select, outside-click close.
  • includes/class-xen-currency.php β€” transfer() now resolves display names via get_userdata() for transaction log descriptions instead of storing raw #ID.
  • public/views/dashboard.php β€” Notification bell changed from static <div> to accessible <button> with ARIA attributes; panel HTML added.
  • public/js/xen-dashboard.js β€” Bell click handler, notification panel toggle, lazy-load notifications, single/all mark-read.
  • public/css/xen-components.css β€” Added .xen-notif-* (bell, panel, items) and .xen-user-search-wrap / .xen-sug-* (wallet autocomplete) styles.
  • includes/class-xen-shortcodes.php β€” render_rankings() now reads $_GET['period'] to support tab navigation; triggers recalculate_all() when rankings table is empty.
  • admin/views/shop.php β€” "Image URL" field replaced with upload button + URL input + live preview + size hints per item type.
  • admin/js/admin.js β€” Added WP media frame handler for .xen-media-upload-btn; live URL preview on manual input.
  • admin/class-xen-admin.php β€” enqueue_assets() calls wp_enqueue_media() on the shop admin page.

v1.4.1 - Patch Release

Choose a tag to compare

@xenroth xenroth released this 03 Jun 14:44

[1.4.1] - 2026-06-04

What's New

  • πŸ› Daily Check-In Fix β€” Check-in now uses WordPress timezone (current_time() / wp_date()) instead of PHP server time, preventing incorrect "already checked in" errors on sites where the WP timezone differs from the server's PHP timezone.
  • πŸ“Έ Profile Photo Upload β€” Players can now upload a custom profile photo directly from the Edit Profile panel on the public profile page. Photos are stored via wp_handle_upload and override Gravatar site-wide via the get_avatar_url filter.
  • βš”οΈ Tasks β†’ Side Quests β€” Every pending task now has a "βš”οΈ Convert to Quest" button. Clicking it creates a Side Quest (Special type, Medium difficulty, 150 XP / 30 coins) from the task and marks the original task complete.
  • πŸ“’ Social Activity Feed β€” New [gamified_feed] shortcode renders a live activity feed. Posts are created automatically when players check in, complete tasks/quests, or finish onboarding. Players can like, comment, and follow friends.
  • πŸ‘₯ Friends System β€” Send, accept friend requests, and filter the activity feed to show only friends' activity.
  • πŸ”” System-wide Activity Stream β€” Game events (check-in, task complete, quest complete, onboarding complete) automatically post to the global activity feed so the whole community sees achievements.
  • πŸšͺ Disable WP Dashboard for Non-Admins β€” New toggle in Settings blocks non-administrator users from accessing /wp-admin, redirecting them to the front-end dashboard instead.
  • 🏁 Auto-Onboarding on Registration β€” User profiles are now created immediately on user_register, ensuring every new user is captured for onboarding on their first login.
  • πŸ₯‡ Gold Full Credit Line β€” The entire "Developed by Richard C. Cupal, LPT (Xenroth) β€” Xenroth Digital Innovations" credit is now displayed in gold on the Admin Dashboard.

Added

  • includes/class-xen-social.php β€” Full social module: activity feed posts, reactions (likes), comments, friends (send/accept requests), event hooks.
  • public/views/feed.php β€” Activity feed view template: post box, feed items, like/comment, friend requests panel.
  • public/js/xen-social.js β€” Social JavaScript: post, like, comment, load more, add friend, accept friend.
  • New DB tables (via dbDelta, XEN_LEVELUP_DB_VERSION bumped to 1.4.1): xen_activity_feed, xen_activity_reactions, xen_activity_comments, xen_friends.
  • [gamified_feed] shortcode with mode (friends/global) and limit attributes.
  • AJAX actions: xen_upload_avatar, xen_convert_task_to_quest, xen_post_activity, xen_get_feed, xen_like_activity, xen_add_comment, xen_get_comments, xen_send_friend_request, xen_accept_friend_request.
  • Admin Setting: "Disable WP Dashboard for Non-Admins" checkbox.
  • Admin Setting: "Activity Feed Page" page selector.
  • Xen_LevelUp::maybe_block_wp_admin() β€” admin_init hook for WP dashboard blocking.
  • Xen_LevelUp::custom_avatar_url() β€” get_avatar_url filter for custom uploaded photos.
  • user_register hook β†’ Xen_User::create_profile() for immediate profile creation on signup.
  • do_action('xen_onboarding_complete', $user_id) fired at end of Xen_Onboarding::complete().

Changed

  • includes/class-xen-daily-checkin.php β€” All date('Y-m-d') calls replaced with current_time('Y-m-d') / wp_date() for WP-timezone consistency.
  • admin/views/dashboard.php β€” Full credit line wrapped in <span class="xen-credit-full"> (gold).
  • admin/css/admin.css β€” Added .xen-credit-full { color: #FFD700; font-weight: 600; }.
  • admin/views/settings.php β€” Added "Disable WP Dashboard" toggle and "Activity Feed Page" selector.
  • admin/class-xen-admin.php β€” save_settings() persists xen_disable_wp_dashboard and xen_levelup_feed_page.
  • public/views/profile.php β€” Profile photo upload input added to Edit Profile panel.
  • public/views/tasks.php β€” "βš”οΈ Convert to Quest" button added per pending task.
  • includes/class-xen-levelup.php β€” Registers Xen_Social, enqueues xen-social.js, adds hooks for all social events.
  • includes/class-xen-shortcodes.php β€” Added gamified_feed β†’ render_feed().
  • includes/class-xen-installer.php β€” Added 4 new social tables (19–22).

v1.4.0 - Patch Release

Choose a tag to compare

@xenroth xenroth released this 03 Jun 14:02

[1.4.0] - 2026-06-03

What's New

  • πŸ› οΈ Admin: Edit Hunter Stats β€” Admins can now manually edit any user's Level, XP, and Coin balance directly from the Users admin page via a dedicated "Edit Stats" form. Includes bonus XP and bonus Coins fields for quick rewards. Rank title syncs automatically on save.
  • πŸ“° What's New moved to Admin β€” The "What's New" release card is now displayed exclusively on the Admin Dashboard (not on the player-facing dashboard). Dismissible per-version by the admin.
  • ✏️ Admin Users Table β€” Added an "Edit Stats" action button per user row in the Hunters admin table.

Added

  • admin/views/user-edit.php β€” new admin form for editing a user's Level, XP, Coins, and awarding bonus amounts.
  • Xen_Admin::handle_save_user_stats() β€” admin_post_xen_admin_save_user_stats handler; validates nonce, clamps level 1–100, syncs rank title via Xen_User::rank_title_for_level().
  • Xen_Admin::ajax_dismiss_whats_new() β€” wp_ajax_xen_admin_dismiss_whats_new; stores dismissed version in WP option xen_admin_whats_new_dismissed.
  • Admin CSS: .xen-author-xenroth (gold), .xen-whats-new-admin-card, .xen-user-edit-* styles.
  • Admin JS: dismiss handler for #xen-admin-dismiss-whats-new.

Changed

  • admin/views/dashboard.php β€” "What's New" card added at top; "Xenroth" name highlighted in gold; removed duplicate stat-card and leaderboard blocks that appeared after the closing wrap div.
  • public/views/dashboard.php β€” "What's New" card and its PHP variables removed (card now admin-only).
  • admin/views/users.php β€” added "Actions" column with "Edit Stats" link per row; colspan updated from 8 β†’ 9.
  • admin/class-xen-admin.php β€” page_users() now routes to user-edit.php when ?action=edit&uid=X is present.