Files
wordpress-theme-aksrt/templates/pages/page-download-file.php
T
kate522andClaude Opus 5 35bb96e82f refactor: rename the theme brand and every identifier from AKSRT to Jio
Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.

Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
  cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
  window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)

Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
  so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
  (dropped 3 stale entries, added the 17 missing ones)

Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
  get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
  when it is empty

Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.

Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-11-01 20:05:04 +08:00

209 lines
9.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Template Name: Jio - 单篇资源下载
* Template Post Type: page
*
* legacy pages/download.php equivalent.
* URL: {page}?post={post_id}
* Only for pay_type=download posts. Shows download buttons when allowed,
* or a no-permission state with a back link to the article.
*
* @package Jio
*/
defined('ABSPATH') || exit;
$post_id = isset($_GET['post']) ? absint($_GET['post']) : 0;
$post = $post_id > 0 ? get_post($post_id) : null;
if (!$post instanceof WP_Post || $post->post_status !== 'publish') {
get_header();
echo '<main class="container"><div class="content-wrap"><div class="content-layout">';
echo '<div class="alert jb-red em12" style="margin:2em;"><b>' . esc_html__('无效的下载请求', 'jio') . '</b></div>';
echo '</div></div></main>';
get_footer();
exit;
}
$pay_meta = function_exists('jio_get_pay_meta') ? jio_get_pay_meta($post) : ['pay_type' => 'no', 'downloads' => []];
$pay_type = (string) ($pay_meta['pay_type'] ?? 'no');
$is_download = $pay_type === 'download' || (function_exists('jio_is_downloadable_content') && jio_is_downloadable_content($post));
if (!$is_download) {
get_header();
echo '<main class="container"><div class="content-wrap"><div class="content-layout">';
echo '<div class="alert jb-red em12" style="margin:2em;"><b>' . esc_html__('该内容不是可下载资源', 'jio') . '</b></div>';
echo '<p><a class="but jb-yellow padding-lg" href="' . esc_url(get_permalink($post)) . '#posts-pay"><i class="fa fas fa-long-arrow-alt-left" aria-hidden="true"></i><span class="ml10">' . esc_html__('返回文章', 'jio') . '</span></a></p>';
echo '</div></div></main>';
get_footer();
exit;
}
$article_url = get_permalink($post) . '#posts-pay';
// 商品简介 / 更多详情 / 额外隐藏内容三个字段只在管理员填写时才有输出。
$pay_title = trim((string) ($pay_meta['pay_title'] ?? '')) !== '' ? (string) $pay_meta['pay_title'] : get_the_title($post);
$pay_doc = trim((string) ($pay_meta['pay_doc'] ?? ''));
$pay_details = trim((string) ($pay_meta['pay_details'] ?? ''));
$pay_extra_hide = trim((string) ($pay_meta['pay_extra_hide'] ?? ''));
$subtitle = '';
if (function_exists('get_the_subtitle')) {
// noop — Jio may not have legacy subtitle helper
}
$has_access = function_exists('jio_has_paid_access') ? jio_has_paid_access($post) : false;
$gate = function_exists('jio_can_download') ? jio_can_download($post) : true;
$can_dl = $gate === true;
$gate_code = is_wp_error($gate) ? $gate->get_error_code() : '';
$need_login = $gate_code === 'jio_need_login';
$need_purchase = $gate_code === 'jio_need_purchase';
$need_vip = $gate_code === 'jio_need_vip';
$priced = function_exists('jio_get_user_pay_price') ? jio_get_user_pay_price($post) : null;
$price = is_array($priced) ? (float) ($priced['amount'] ?? 0) : (float) ($pay_meta['price'] ?? 0);
$pay_modo = is_array($priced) ? ((($priced['modo'] ?? '0') === 'points') ? 'points' : '0') : ((($pay_meta['pay_modo'] ?? '0') === 'points') ? 'points' : '0');
$currency = class_exists('\Jio\Settings\Settings') ? \Jio\Settings\Settings::get_currency_name() : __('积分', 'jio');
$cash_symbol = '¥';
if (class_exists('\Jio\Settings\Settings')) {
$paid_display = \Jio\Settings\Settings::get_paid_content_settings();
$cash_symbol = (string) ($paid_display['display']['currency_symbol'] ?? '¥');
}
$price_text = $price <= 0
? __('免费', 'jio')
: ($pay_modo === 'points'
? (function_exists('jio_format_price') ? jio_format_price($price) : (string) $price) . ' ' . $currency
: $cash_symbol . (function_exists('jio_format_price') ? jio_format_price($price) : (string) $price));
$login_url = wp_login_url(add_query_arg('post', $post_id, get_permalink()));
$vip_url = function_exists('jio_get_user_center_url') ? jio_get_user_center_url() : home_url('/');
$paid_name = '';
if ($has_access || $can_dl) {
if ($price <= 0) {
$paid_name = __('免费资源', 'jio');
} else {
$paid_name = __('已获得下载权限', 'jio');
}
}
get_header();
?>
<style>
.jio-single-download .but-download > .but,
.jio-single-download .but-download > a,
.jio-single-download .but-download > button,
.jio-single-download .resource-download-box__btn {
min-width: 200px;
padding: .5em;
margin-top: 10px;
}
.jio-single-download .pay-extra-hide {
background: var(--muted-border-color, #f0f0f0);
display: block;
margin: 10px 0;
padding: 20px;
color: var(--muted-color, #888);
border-radius: 4px;
}
</style>
<main class="container jio-single-download">
<div class="content-wrap">
<div class="content-layout">
<article class="article page-article main-bg theme-box box-body radius8 main-shadow">
<div class="pay-box">
<div class="article-header theme-box">
<div class="article-title">
<a href="<?php echo esc_url($article_url); ?>"><?php echo esc_html($pay_title); ?></a>
</div>
<?php if ($paid_name !== '') : ?>
<b class="badg jb-red mr6" style="font-size:12px;padding:2px 10px;line-height:1.4;">
<i class="fa fas fa-check mr6" aria-hidden="true"></i><?php echo esc_html($paid_name); ?>
</b>
<?php endif; ?>
</div>
<?php if ($pay_doc !== '') : ?>
<div><?php echo wp_kses_post($pay_doc); ?></div>
<?php endif; ?>
<?php if ($pay_details !== '') : ?>
<div class="muted-2-color em09" style="margin:2em 0;"><?php echo wp_kses_post($pay_details); ?></div>
<?php endif; ?>
<?php if ($can_dl) : ?>
<div style="margin-bottom:2em;" class="pay-box">
<?php
// Reuse single download box UI for the allowed state.
global $post;
$GLOBALS['post'] = $post;
setup_postdata($post);
$GLOBALS['jio_on_download_file_page'] = true;
get_template_part('templates/parts/resource-download-box');
unset($GLOBALS['jio_on_download_file_page']);
wp_reset_postdata();
?>
</div>
<?php if ($pay_extra_hide !== '') : ?>
<div class="pay-extra-hide"><?php echo wp_kses_post($pay_extra_hide); ?></div>
<?php endif; ?>
<?php elseif ($need_login) : ?>
<div class="alert jb-yellow em12" style="margin:2em;">
<b><?php echo ($price <= 0) ? esc_html__('免费资源,请登录后下载', 'jio') : esc_html__('请先登录后再下载', 'jio'); ?></b>
</div>
<div class="pay-extra-hide">
<?php
printf(
/* translators: %s: login url */
wp_kses_post(__('Hi!请先 <a href="%s">登录</a> 后再下载。', 'jio')),
esc_url($login_url)
);
?>
</div>
<a style="margin-bottom:2em;" href="<?php echo esc_url($login_url); ?>" class="but jb-red padding-lg">
<i class="fa fas fa-sign-in-alt" aria-hidden="true"></i>
<span class="ml10"><?php esc_html_e('前往登录', 'jio'); ?></span>
</a>
<?php elseif ($need_vip) : ?>
<div class="alert jb-yellow em12" style="margin:2em;">
<b><?php echo esc_html(is_wp_error($gate) ? $gate->get_error_message() : __('该资源仅限会员购买/下载。', 'jio')); ?></b>
</div>
<a style="margin-bottom:1em;" href="<?php echo esc_url($vip_url); ?>" class="but jb-vip padding-lg">
<i class="fa fas fa-certificate" aria-hidden="true"></i>
<span class="ml10"><?php esc_html_e('开通会员', 'jio'); ?></span>
</a>
<a style="margin-bottom:2em;" href="<?php echo esc_url($article_url); ?>" class="but jb-yellow padding-lg">
<i class="fa fas fa-long-arrow-alt-left" aria-hidden="true"></i>
<span class="ml10"><?php esc_html_e('返回文章', 'jio'); ?></span>
</a>
<?php elseif ($need_purchase) : ?>
<div class="alert jb-red em12" style="margin:2em;">
<b><?php esc_html_e('请先购买后再下载', 'jio'); ?></b>
</div>
<button
type="button"
class="but <?php echo $pay_modo === 'points' ? 'jb-yellow' : 'jb-red'; ?> padding-lg cashier-link"
data-action="jio-need-purchase"
data-jio-pay-content="<?php echo esc_attr((string) $post_id); ?>"
data-post-id="<?php echo esc_attr((string) $post_id); ?>"
style="margin-bottom:1em;"
>
<i class="fa fas fa-shopping-cart" aria-hidden="true"></i>
<span class="ml10"><?php printf(esc_html__('立即购买(%s)', 'jio'), $price_text); ?></span>
</button>
<a style="margin-bottom:2em;" href="<?php echo esc_url($article_url); ?>" class="but jb-yellow padding-lg">
<i class="fa fas fa-long-arrow-alt-left" aria-hidden="true"></i>
<span class="ml10"><?php esc_html_e('返回文章', 'jio'); ?></span>
</a>
<?php else : ?>
<div class="alert jb-red em12" style="margin:2em;">
<b><?php echo esc_html(is_wp_error($gate) ? $gate->get_error_message() : __('暂无下载权限', 'jio')); ?></b>
</div>
<a style="margin-bottom:2em;" href="<?php echo esc_url($article_url); ?>" class="but jb-yellow padding-lg">
<i class="fa fas fa-long-arrow-alt-left" aria-hidden="true"></i>
<span class="ml10"><?php esc_html_e('返回文章', 'jio'); ?></span>
</a>
<?php endif; ?>
</div>
</article>
</div>
</div>
</main>
<?php
get_footer();