You've already forked wc-licensed-product
Implement multi-domain licensing for v0.5.0
- Add multi-domain checkout support for WooCommerce Blocks - Fix domain field rendering using ExperimentalOrderMeta slot - Add DOM injection fallback for checkout field rendering - Update translations with new multi-domain strings (de_CH) - Update email templates for grouped license display - Refactor account page to group licenses by product/order Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,81 +1,130 @@
|
||||
{% if not has_licenses %}
|
||||
{% if not has_packages %}
|
||||
<p>{{ __('You have no licenses yet.') }}</p>
|
||||
{% else %}
|
||||
<div class="woocommerce-licenses">
|
||||
{% for item in licenses %}
|
||||
<div class="license-card">
|
||||
<div class="license-header">
|
||||
<h3>
|
||||
{% if item.product_url %}
|
||||
<a href="{{ esc_url(item.product_url) }}">{{ esc_html(item.product_name) }}</a>
|
||||
{% else %}
|
||||
{{ esc_html(item.product_name) }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
<span class="license-status license-status-{{ esc_attr(item.license.status) }}">
|
||||
{{ esc_html(item.license.status)|capitalize }}
|
||||
{% for package in packages %}
|
||||
<div class="license-package">
|
||||
<div class="package-header">
|
||||
<div class="package-title">
|
||||
<h3>
|
||||
{% if package.product_url %}
|
||||
<a href="{{ esc_url(package.product_url) }}">{{ esc_html(package.product_name) }}</a>
|
||||
{% else %}
|
||||
{{ esc_html(package.product_name) }}
|
||||
{% endif %}
|
||||
</h3>
|
||||
<span class="package-order">
|
||||
{{ __('Order') }}
|
||||
{% if package.order_url %}
|
||||
<a href="{{ esc_url(package.order_url) }}">#{{ esc_html(package.order_number) }}</a>
|
||||
{% else %}
|
||||
#{{ esc_html(package.order_number) }}
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<span class="package-license-count">
|
||||
{{ package.licenses|length }} {{ package.licenses|length == 1 ? __('License') : __('Licenses') }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="license-details">
|
||||
<div class="license-key-row">
|
||||
<label>{{ __('License Key:') }}</label>
|
||||
<code class="license-key" data-license-key="{{ esc_attr(item.license.licenseKey) }}">
|
||||
{{ esc_html(item.license.licenseKey) }}
|
||||
</code>
|
||||
<button type="button" class="copy-license-btn" data-license-key="{{ esc_attr(item.license.licenseKey) }}" title="{{ __('Copy to clipboard') }}">
|
||||
<span class="dashicons dashicons-clipboard"></span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="license-info-row">
|
||||
<span class="license-domain-display" data-license-id="{{ item.license.id }}">
|
||||
<strong>{{ __('Domain:') }}</strong>
|
||||
<span class="domain-value">{{ esc_html(item.license.domain) }}</span>
|
||||
{% if item.license.status == 'active' or item.license.status == 'inactive' %}
|
||||
<button type="button" class="wclp-transfer-btn"
|
||||
data-license-id="{{ item.license.id }}"
|
||||
data-current-domain="{{ esc_attr(item.license.domain) }}"
|
||||
title="{{ __('Transfer to new domain') }}">
|
||||
<span class="dashicons dashicons-randomize"></span>
|
||||
{{ __('Transfer') }}
|
||||
</button>
|
||||
{% endif %}
|
||||
</span>
|
||||
<span><strong>{{ __('Expires:') }}</strong>
|
||||
{% if item.license.expiresAt %}
|
||||
{{ item.license.expiresAt|date('Y-m-d') }}
|
||||
{% else %}
|
||||
{{ __('Never') }}
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<div class="package-licenses">
|
||||
{% for license in package.licenses %}
|
||||
<div class="license-entry license-entry-{{ esc_attr(license.status) }}">
|
||||
<div class="license-row-primary">
|
||||
<div class="license-key-group">
|
||||
<code class="license-key">{{ esc_html(license.license_key) }}</code>
|
||||
<span class="license-status license-status-{{ esc_attr(license.status) }}">
|
||||
{{ esc_html(license.status)|capitalize }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="license-actions">
|
||||
<button type="button" class="copy-license-btn" data-license-key="{{ esc_attr(license.license_key) }}" title="{{ __('Copy to clipboard') }}">
|
||||
<span class="dashicons dashicons-clipboard"></span>
|
||||
</button>
|
||||
{% if license.is_transferable %}
|
||||
<button type="button" class="wclp-transfer-btn"
|
||||
data-license-id="{{ license.id }}"
|
||||
data-current-domain="{{ esc_attr(license.domain) }}"
|
||||
title="{{ __('Transfer to new domain') }}">
|
||||
<span class="dashicons dashicons-randomize"></span>
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="license-row-secondary">
|
||||
<span class="license-meta-item license-domain">
|
||||
<span class="dashicons dashicons-admin-site-alt3"></span>
|
||||
{{ esc_html(license.domain) }}
|
||||
</span>
|
||||
<span class="license-meta-item license-expiry">
|
||||
<span class="dashicons dashicons-calendar-alt"></span>
|
||||
{% if license.expires_at %}
|
||||
{{ license.expires_at|date('Y-m-d') }}
|
||||
{% else %}
|
||||
<span class="lifetime">{{ __('Lifetime') }}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% if item.downloads is defined and item.downloads is not empty %}
|
||||
<div class="license-downloads">
|
||||
{% if package.downloads is defined and package.downloads is not empty %}
|
||||
<div class="package-downloads">
|
||||
<h4>{{ __('Available Downloads') }}</h4>
|
||||
<ul class="download-list">
|
||||
{% for download in item.downloads %}
|
||||
<li class="download-item">
|
||||
<div class="download-row-file">
|
||||
<a href="{{ esc_url(download.download_url) }}" class="download-link">
|
||||
<span class="dashicons dashicons-download"></span>
|
||||
{{ esc_html(download.filename ?: 'Version ' ~ download.version) }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="download-row-meta">
|
||||
<span class="download-date">{{ esc_html(download.released_at) }}</span>
|
||||
{% if download.file_hash %}
|
||||
<span class="download-hash" title="{{ esc_attr(download.file_hash) }}">
|
||||
<span class="dashicons dashicons-shield"></span>
|
||||
<code>{{ download.file_hash[:12] }}...</code>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{# Show only the latest version (first item) #}
|
||||
{% set latest = package.downloads|first %}
|
||||
<li class="download-item download-item-latest">
|
||||
<div class="download-row-file">
|
||||
<a href="{{ esc_url(latest.download_url) }}" class="download-link">
|
||||
<span class="dashicons dashicons-download"></span>
|
||||
{{ esc_html(latest.filename ?: 'Version ' ~ latest.version) }}
|
||||
</a>
|
||||
<span class="download-version-badge">{{ __('Latest') }}</span>
|
||||
</div>
|
||||
<div class="download-row-meta">
|
||||
<span class="download-date">{{ esc_html(latest.released_at) }}</span>
|
||||
{% if latest.file_hash %}
|
||||
<span class="download-hash" title="{{ esc_attr(latest.file_hash) }}">
|
||||
<span class="dashicons dashicons-shield"></span>
|
||||
<code>{{ latest.file_hash[:12] }}...</code>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
{# Show older versions in collapsible if more than one version exists #}
|
||||
{% if package.downloads|length > 1 %}
|
||||
<div class="older-versions-section">
|
||||
<button type="button" class="older-versions-toggle" aria-expanded="false">
|
||||
<span class="dashicons dashicons-arrow-down-alt2"></span>
|
||||
{{ __('Older versions') }} ({{ package.downloads|length - 1 }})
|
||||
</button>
|
||||
<ul class="download-list older-versions-list" style="display: none;">
|
||||
{% for download in package.downloads|slice(1) %}
|
||||
<li class="download-item">
|
||||
<div class="download-row-file">
|
||||
<a href="{{ esc_url(download.download_url) }}" class="download-link">
|
||||
<span class="dashicons dashicons-download"></span>
|
||||
{{ esc_html(download.filename ?: 'Version ' ~ download.version) }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="download-row-meta">
|
||||
<span class="download-date">{{ esc_html(download.released_at) }}</span>
|
||||
{% if download.file_hash %}
|
||||
<span class="download-hash" title="{{ esc_attr(download.file_hash) }}">
|
||||
<span class="dashicons dashicons-shield"></span>
|
||||
<code>{{ download.file_hash[:12] }}...</code>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user