Releases: xenroth/xen-levelup
Releases Β· xenroth/xen-levelup
Release list
v1.5.9 - Beta Release
[1.5.9] - 2026-06-23
Fixed
- Wallet: transfer error handling β Server now returns explicit error
codevalues 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_currencyfailures and added defensive UI messaging.
v1.5.6 - Beta Release
[1.5.6] - 2026-06-23
Fixed
- Wallet tabs & Send β
TransfersandHistorytabs 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 tobody(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
[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
[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
bodyand positioned under the input to avoid being blocked by overlays; selecting a recipient reliably populates the hidden recipient id and restores theSend Coinsflow. - 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.3for this follow-up release.
v1.5.2 - Beta Release
[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 Coinsbutton 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.2for this release.
Fixed
- Plugin update loop (Bug #1): Plugin header
Versiontag was1.4.2while the internal constant was1.5.0. WordPress compared the header version against the GitHub release tag and perpetually offered an update. Both are now aligned at1.5.1. - Wallet user search broken for special-character names (Bug #2):
xen_search_usersappliedesc_attr()to the search term before passing it toget_users(). This HTML-escaped characters like'β'and&β&, causing names like "O'Brien" or "Tom & Jerry" to return zero results. The redundantesc_attr()is removed; the term was already safely sanitized bysanitize_text_field(). - Activity stream defaulted to friends-only mode (Bug #3): The
[gamified_feed]shortcode defaultedmode="friends", so users with no friends saw an empty feed. Default changed tomode="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-feedcontainer now carries adata-modeattribute and the JS reads it dynamically ($feed.data('mode') || 'global'). - Rankings showed stale level data (Bug #4):
get_leaderboard()fetchedr.levelfrom the cached rankings table (set at the last recalculate run). This now usesp.levelfrom the liveuser_profilestable 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
[1.5.1] - 2026-06-05
Fixed
- Plugin update loop (Bug #1): Plugin header
Versiontag was1.4.2while the internal constant was1.5.0. WordPress compared the header version against the GitHub release tag and perpetually offered an update. Both are now aligned at1.5.1. - Wallet user search broken for special-character names (Bug #2):
xen_search_usersappliedesc_attr()to the search term before passing it toget_users(). This HTML-escaped characters like'β'and&β&, causing names like "O'Brien" or "Tom & Jerry" to return zero results. The redundantesc_attr()is removed; the term was already safely sanitized bysanitize_text_field(). - Activity stream defaulted to friends-only mode (Bug #3): The
[gamified_feed]shortcode defaultedmode="friends", so users with no friends saw an empty feed. Default changed tomode="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-feedcontainer now carries adata-modeattribute and the JS reads it dynamically ($feed.data('mode') || 'global'). - Rankings showed stale level data (Bug #4):
get_leaderboard()fetchedr.levelfrom the cached rankings table (set at the last recalculate run). This now usesp.levelfrom the liveuser_profilestable 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
[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.jshad 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_diffmissing:enrich_feed()now populatestime_difffor every item, so "Load More" items show proper timestamps. - Activity stream
currentUsermissing:xenDatanow exposescurrentUser(id, name, avatar) so feed cards render the correct author after posting. xen_post_activityreturning only ID: After posting, the response now includes the full enriched item object (res.data.item), which is used directly bybuildFeedItem().
Changed
- Default
rank_titlefor 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_rebirthaction fires with 3 args:$user_id, $rebirth_count, $new_rank.
v1.4.2 - Patch Release
[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_usersAJAX 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 viaget_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; triggersrecalculate_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()callswp_enqueue_media()on the shop admin page.
v1.4.1 - Patch Release
[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_uploadand override Gravatar site-wide via theget_avatar_urlfilter. - βοΈ 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_VERSIONbumped to1.4.1):xen_activity_feed,xen_activity_reactions,xen_activity_comments,xen_friends. [gamified_feed]shortcode withmode(friends/global) andlimitattributes.- 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_inithook for WP dashboard blocking.Xen_LevelUp::custom_avatar_url()βget_avatar_urlfilter for custom uploaded photos.user_registerhook βXen_User::create_profile()for immediate profile creation on signup.do_action('xen_onboarding_complete', $user_id)fired at end ofXen_Onboarding::complete().
Changed
includes/class-xen-daily-checkin.phpβ Alldate('Y-m-d')calls replaced withcurrent_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()persistsxen_disable_wp_dashboardandxen_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β RegistersXen_Social, enqueuesxen-social.js, adds hooks for all social events.includes/class-xen-shortcodes.phpβ Addedgamified_feedβrender_feed().includes/class-xen-installer.phpβ Added 4 new social tables (19β22).
v1.4.0 - Patch Release
[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_statshandler; validates nonce, clamps level 1β100, syncs rank title viaXen_User::rank_title_for_level().Xen_Admin::ajax_dismiss_whats_new()βwp_ajax_xen_admin_dismiss_whats_new; stores dismissed version in WP optionxen_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 touser-edit.phpwhen?action=edit&uid=Xis present.