Align the 20 marketing/decoration widgets with Zibll field defs in
widget-produck.php / widget-more.php, focusing on the field-level
drift surfaced by the 1:1 audit:
- TagCloudWidget (widget_ui_tag_cloud): orderby → name/count/term_id
(was count default), add order ASC/DESC, expand color palette to
all 13 Zibll c-* keys (rand/c-hui/c-blue/-2/cyan/yellow/-2/green/
-2/purple/-2/red/-2), number cap 100, default 20.
- WidgetBookmarkLinks (widget_ui_links_lists_2): add alignment
(''/center/right) to form+update+render wrapper.
- FriendLinksWidget: expose orderby/order selects in form (already
whitelisted) for bookmarks mode.
- ButtonsWidget (zib_widget_ui_buttons): whitelist pc_padding/
m_padding/pc_width/m_width (were render-only), widen pc_gap/
m_gap cap to 60 to match Zibll.
- RecentCommentsWidget (widget_ui_new_comment): count cap 50
(was 20), whitelist outer_keywords.
- WidgetVideoPlayer (zib_widget_ui_dplayer): scale_height cap 200
(was 100), whitelist muted + aspect_ratio.
Remaining 14 widgets (PricingPlans/Reviews/Faq/Stats/Highlights/
FeatureIntro/TiltCases/IconCards/IconCoverCards/CoverCards/
ComboInfo/PartnersScroll/TextTitle/Iframe) already match Zibll
field semantics (JSON/native group + obs_animation/palette/
pc_row·m_row/go_link); no drift to fix.
Acceptance: php -l clean on all changed files; audit exit 0;
all 21 widget files <=360 lines. Phase 5 done-when marked.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Align the 5 user/author/slider widgets with Zibll CSF widget
definitions in widget-user.php / widget-slider.php and
options-module.php (add_slider / slide / zib_palette):
- WidgetUserCard (widget_ui_user): add Zibll button palettes
(button_1_class/button_2_class via new palette_opts()/
sanitize_palette() replicating CFS_Module::zib_palette c/b/jb)
and button_2 type (home/center) → profile/center URL.
- WidgetAuthorCard (widget_ui_avatar): add show_button +
button_1/button_2 (class/text/type) rendered only when the
logged-in viewer is the author (zibll parity); expand orderby
to modified/like/favorite.
- WidgetUserRanking (zib_widget_ui_user_ranking): rename field
to Zibll `orderby` (default checkin_all_day) with the exact
4 dims (checkin_all_day/checkin_continuous_day/points→credits
/followed-user-count→followers) + `number` (was count); keep
rank_by/count aliases for legacy instances; reword desc
options to match Zibll labels.
- WidgetSlider (zib_widget_ui_slider): add direction/speed/
spacebetween/scale_height+scale/autoplay to form+update+render,
pass through to aksrt_render_slider (effect/loop/button/
pagination/pc·m_height/interval already present); widen
interval min to 0, height default to 400 (zibll pc_height).
- aksrt_user_card_query_posts: support like/favorite orderby
(meta _aksrt_like_count / _aksrt_favorite_count) so the
author/user-card more-posts strip honors the expanded orderby.
Acceptance: php -l clean on all changed files; audit exit 0;
all widget files <=383 lines. Phase 4 done-when marked.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fix modal scroll ownership and certification modal styling, store evidence as Media Library attachments, reconcile missed provider callbacks, validate currencies, and complete digital fulfillment only after durable entitlement delivery.
Capture real client IPs behind CDN, improve provider fallbacks and
negative cache, fix admin credential dependsOn for polling mode, and
map country labels to ISO codes for moderation GeoIP blocks.
Order progress was stuck on "订单创建" because timeline only read sparse
timestamp columns and status transitions didn't always stamp them.
Drive timeline from current status + related records, backfill lifecycle
timestamps on update_status, and replace window.confirm cancel with a
关闭订单 → 确认取消 button step in the detail modal.
Wire admin payment_order_prefix into order number generation (with 32-char
cap for gateways), make 查看 open a full order-detail modal with
status-aware footer actions, keep type badge top-left only, and right-align
unpaid list actions with countdown on the left.
WeChat/Alipay/Epay reject reusing the same merchant order number when
params change. Allocate attempt-suffixed out_trade_no on resume pay,
map callbacks back to the local order, and best-effort close prior trades.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add AKSRT\Payment\OrderCenterRest so /shop/frontend/orders/{n}/pay|cancel
always register on rest_api_init; widen order_number route charset; make
order-center.js use credentials, encodeURIComponent, and clearer 404 errors.
Register UC panel tab=orders with full order list/actions UI; route
aksrt_get_orders_page_url and /orders template to profile?tab=orders;
enqueue order assets when the UC orders tab is active.
Unify front-end order center across shop, content, VIP, recharge,
points, and plate-follow with type filters, stats, and type-aware
cards; keep shop-only fulfillment actions; ensure 权益与消费 entry URL.
Opening 余额功能 alone now enables cash-wallet pay (unless 余额支付 is explicitly off). Drop points-as-balance fallback, stop fake method injection, expose real wallet in cashiers, and honor auto_to_balance on recharge fulfill.
header_newposts_types is multi-select but PHP schema used type=select,
so validate() rejected arrays with 422. Use checkbox and allow
select+multiple arrays in SchemaProvider.
Scope multi-type newadd wrapper rules so they cannot collapse single CTA links; re-enqueue nav.css after header-menu-buttons for final zibll alignment.