332 lines
20 KiB
Twig
332 lines
20 KiB
Twig
{% import '@Marketplace/macros.twig' as marketplaceMacro %}
|
|
|
|
{% block content %}
|
|
|
|
<div class="pluginDetails">
|
|
{% if errorMessage %}
|
|
{{ errorMessage }}
|
|
{% elseif plugin %}
|
|
|
|
{% set isBundle = plugin.isBundle is defined and plugin.isBundle %}
|
|
|
|
{% if plugin.versions is not empty and plugin.versions[plugin.versions|length - 1] %}
|
|
{% set latestVersion = plugin.versions[plugin.versions|length - 1] %}
|
|
{% else %}
|
|
{% set latestVersion = '' %}
|
|
{% endif %}
|
|
|
|
<div class="row">
|
|
<div class="col s12 m9">
|
|
<h2>{{ plugin.displayName }}</h2>
|
|
<p class="description">
|
|
{% if plugin.featured %}
|
|
{{ marketplaceMacro.featuredIcon('left') }}
|
|
{% endif %}
|
|
{{ plugin.description }}
|
|
</p>
|
|
<div class="contentDetails">
|
|
<div id="pluginDetailsTabs" class="row">
|
|
<div class="col s12">
|
|
<ul class="tabs">
|
|
<li class="tab col s3"><a href="#tabs-description">{{ 'General_Description'|translate }}</a></li>
|
|
|
|
{% if latestVersion.readmeHtml.faq %}
|
|
<li class="tab col s3"><a href="#tabs-faq">{{ 'General_Faq'|translate }}</a></li>
|
|
{% endif %}
|
|
|
|
{% if latestVersion.readmeHtml.documentation %}
|
|
<li class="tab col s3"><a href="#tabs-documentation">{{ 'General_Documentation'|translate }}</a></li>
|
|
{% endif %}
|
|
|
|
{% if plugin.screenshots|length %}
|
|
<li class="tab col s3"><a href="#tabs-screenshots">{{ 'Marketplace_Screenshots'|translate }}</a></li>
|
|
{% endif %}
|
|
|
|
{% if plugin.shop is defined and plugin.shop and plugin.shop.reviews and plugin.shop.reviews.embedUrl is defined and plugin.shop.reviews.embedUrl %}
|
|
<li class="tab col s3"><a href="#tabs-reviews">{{ 'Marketplace_Reviews'|translate }}</a></li>
|
|
{% endif %}
|
|
</ul>
|
|
</div>
|
|
|
|
<div id="tabs-description" class="tab-content col s12">
|
|
{% if isSuperUser and (plugin.isDownloadable or plugin.isInstalled) %}
|
|
{{ marketplaceMacro.missingRequirementsPleaseUpdateNotice(plugin) }}
|
|
|
|
{% if isMultiServerEnvironment %}
|
|
<div class="alert alert-warning">{{ 'Marketplace_MultiServerEnvironmentWarning'|translate }}</div>
|
|
{% elseif not isAutoUpdateEnabled %}
|
|
<div class="alert alert-warning">{{ 'Marketplace_AutoUpdateDisabledWarning'|translate("'[General]enable_auto_update=1'", "'config/config.ini.php'") }}</div>
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
{% if hasSomeAdminAccess and plugin.isMissingLicense is defined and plugin.isMissingLicense %}
|
|
<div class="alert alert-danger">{{ 'Marketplace_PluginLicenseMissingDescription'|translate }}</div>
|
|
{% elseif hasSomeAdminAccess and plugin.hasExceededLicense is defined and plugin.hasExceededLicense %}
|
|
<div class="alert alert-warning">{{ 'Marketplace_PluginLicenseExceededDescription'|translate }}</div>
|
|
{% endif %}
|
|
|
|
{{ latestVersion.readmeHtml.description|raw }}
|
|
</div>
|
|
|
|
{% if latestVersion.readmeHtml.faq %}
|
|
<div id="tabs-faq" class="tab-content col s12">
|
|
{{ latestVersion.readmeHtml.faq|raw }}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if latestVersion.readmeHtml.documentation %}
|
|
<div id="tabs-documentation" class="tab-content col s12">
|
|
{{ latestVersion.readmeHtml.documentation|raw }}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if plugin.screenshots|length %}
|
|
<div id="tabs-screenshots" class="tab-content col s12">
|
|
<div class="thumbnails">
|
|
{% for screenshot in plugin.screenshots %}
|
|
<div class="thumbnail">
|
|
<a href="{{ screenshot }}" target="_blank"><img src="{{ screenshot }}?w=400" width="400" alt=""></a>
|
|
<p>
|
|
{{ screenshot|split('/')|last|replace({'_': ' ', '.png': '', '.jpg': '', '.jpeg': ''}) }}
|
|
</p>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if plugin.shop is defined and plugin.shop and plugin.shop.reviews and plugin.shop.reviews.embedUrl is defined and plugin.shop.reviews.embedUrl %}
|
|
<div id="tabs-reviews" class="tab-content col s12">
|
|
<iframe class="reviewIframe"
|
|
style="{% if plugin.shop.reviews.height %}height:{{ plugin.shop.reviews.height }}px;{% endif %}"
|
|
id="{{ plugin.shop.reviews.embedUrl|md5 }}"
|
|
src="{{ plugin.shop.reviews.embedUrl|raw }}"></iframe>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col s12 m3">
|
|
<div class="metadata">
|
|
<div class="actionButton">
|
|
{% if not plugin.isDownloadable or not isSuperUser %}
|
|
{% if hasSomeAdminAccess and plugin.hasExceededLicense is defined and plugin.hasExceededLicense and plugin.consumer %}
|
|
{% if plugin.consumer.loginUrl is defined and plugin.consumer.loginUrl %}
|
|
<a class="install update"
|
|
target="_blank"
|
|
rel="noreferrer noopener"
|
|
href="{{ plugin.consumer.loginUrl|default('')|e('html_attr') }}"
|
|
>{{ 'Marketplace_UpgradeSubscription'|translate }}</a>
|
|
{% endif %}
|
|
|
|
{% elseif not plugin.isDownloadable and plugin.isPaid and plugin.shop is defined and plugin.shop %}
|
|
|
|
{% if plugin.shop.variations|length %}
|
|
|
|
<div class="input-field variationPicker">
|
|
<select title="{{ 'Marketplace_ShownPriceIsExclTax'|translate|e('html_attr') }} {{ 'Marketplace_CurrentNumPiwikUsers'|translate(numUsers)|e('html_attr') }}">
|
|
{% for variation in plugin.shop.variations %}
|
|
<option value="{{ variation.addToCartUrl }}"
|
|
title="{{ 'Marketplace_PriceExclTax'|translate(variation.price, variation.currency)|e('html_attr') }} {{ 'Marketplace_CurrentNumPiwikUsers'|translate(numUsers)|e('html_attr') }}"
|
|
{% if variation.recommended is defined and variation.recommended %}selected{% endif %}
|
|
>{{ variation.name }} - {{ variation.prettyPrice }} / {{ variation.period }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
|
|
<a class="install update addToCartLink" target="_blank"
|
|
title="{{ 'Marketplace_ClickToCompletePurchase'|translate|e('html_attr') }}"
|
|
rel="noreferrer noopener"
|
|
href="{{ plugin.shop.url|default('')|e('html_attr') }}"
|
|
>{{ 'Marketplace_AddToCart'|translate }}</a>
|
|
{% else %}
|
|
<a class="install update" target="_blank"
|
|
rel="noreferrer noopener"
|
|
href="{% if plugin.shop is defined and plugin.shop and plugin.shop.url %}{{ plugin.shop.url|e('html_attr') }}{% else %}{{ plugin.homepage|e('html_attr') }}{% endif %}"
|
|
>{{ 'General_MoreDetails'|translate }}</a>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% elseif isSuperUser %}
|
|
{% if not isAutoUpdatePossible %}
|
|
<a onclick="$(this).css('display', 'none')" href="{{ linkTo({'action': 'download', 'pluginName': plugin.name, 'nonce': (plugin.name|nonce)}) }}"
|
|
class="download">{{ 'General_Download'|translate }}</a>
|
|
{% elseif plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
|
|
<a class="install update"
|
|
href="{{ linkTo({'module': 'Marketplace', 'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
|
|
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
|
|
{% elseif plugin.isInstalled %}
|
|
<br />
|
|
<br />
|
|
<br />
|
|
<br />
|
|
{% elseif 0 < plugin.missingRequirements|length %}
|
|
<br />
|
|
<br />
|
|
<br />
|
|
<br />
|
|
{% else %}
|
|
<a href="{{ linkTo({'module': 'Marketplace', 'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
|
|
class="install">{{ 'Marketplace_ActionInstall'|translate }}</a>
|
|
{% endif %}
|
|
{% else %}
|
|
<br />
|
|
<br />
|
|
<br />
|
|
<br />
|
|
{% endif %}
|
|
</div>
|
|
|
|
{% if plugin.specialOffer is defined and plugin.specialOffer %}<p style="color: green;"><br />{{ plugin.specialOffer }}</p>{% endif %}
|
|
|
|
<p><br /></p>
|
|
<dl>
|
|
{% if not isBundle %}
|
|
<dt>{{ 'CorePluginsAdmin_Version'|translate }}</dt>
|
|
<dd>{{ plugin.latestVersion }}</dd>
|
|
{% endif %}
|
|
|
|
<dt>{{ 'Marketplace_PluginKeywords'|translate }}</dt>
|
|
<dd>{{ plugin.keywords|join(', ') }}</dd>
|
|
|
|
{% if plugin.lastUpdated and not isBundle %}
|
|
<dt>{{ 'Marketplace_LastUpdated'|translate }}</dt>
|
|
<dd>{{ plugin.lastUpdated }}</dd>
|
|
{% endif %}
|
|
{% if plugin.numDownloads %}
|
|
<dt>{{ 'General_Downloads'|translate }}</dt>
|
|
<dd title="{{ 'Marketplace_NumDownloadsLatestVersion'|translate(latestVersion.numDownloads|number_format) }}">{{ plugin.numDownloads }}</dd>
|
|
{% endif %}
|
|
|
|
{% if not isBundle %}
|
|
<dt>{{ 'Marketplace_Developer'|translate }}</dt>
|
|
<dd>{{ marketplaceMacro.pluginDeveloper(plugin.owner) }}</dd>
|
|
{% if latestVersion and latestVersion.license is defined and latestVersion.license and latestVersion.license.name is defined and latestVersion.license.name %}
|
|
<dt>{{ 'Marketplace_License'|translate }}</dt>
|
|
<dd>
|
|
{% if latestVersion.license.url is defined and latestVersion.license.url %}
|
|
<a rel="noreferrer noopener"
|
|
href="{{ latestVersion.license.url }}"
|
|
target="_blank">{{ latestVersion.license.name }}</a>
|
|
{% else %}
|
|
{{ latestVersion.license.name }}
|
|
{% endif %}
|
|
</dd>
|
|
{% endif %}
|
|
<dt>{{ 'Marketplace_Authors'|translate }}</dt>
|
|
<dd>{% for author in plugin.authors if author.name %}
|
|
|
|
{% spaceless %}
|
|
{% if author.homepage %}
|
|
<a target="_blank" rel="noreferrer noopener" href="{{ author.homepage }}">{{ author.name }}</a>
|
|
{% elseif author.email %}
|
|
<a href="mailto:{{ author.email|escape('url') }}">{{ author.name }}</a>
|
|
{% else %}
|
|
{{ author.name }}
|
|
{% endif %}
|
|
|
|
{% if loop.index < plugin.authors|length %}
|
|
,
|
|
{% endif %}
|
|
{% endspaceless %}
|
|
|
|
{% endfor %}
|
|
</dd>
|
|
{% endif %}
|
|
<dt>{{ 'CorePluginsAdmin_Websites'|translate }}</dt>
|
|
<dd>
|
|
{% if plugin.homepage %}
|
|
<a target="_blank" rel="noreferrer noopener" href="{{ plugin.homepage }}">{{ 'Marketplace_PluginWebsite'|translate }}</a>
|
|
{%- endif -%}
|
|
|
|
{%- if plugin.changelog is defined and plugin.changelog and plugin.changelog.url is defined and plugin.changelog.url -%}
|
|
{%- if plugin.homepage %}, {% endif %}
|
|
<a target="_blank" rel="noreferrer noopener" href="{{ plugin.changelog.url }}">{{ 'CorePluginsAdmin_Changelog'|translate }}</a>
|
|
{%- endif -%}
|
|
|
|
{%- if plugin.repositoryUrl %}, <a target="_blank" href="{{ plugin.repositoryUrl }}">GitHub</a>{% endif %}
|
|
</dd>
|
|
|
|
{% if plugin.activity and plugin.activity.numCommits %}
|
|
<dt>{{ 'CorePluginsAdmin_Activity'|translate }}</dt>
|
|
<dd>
|
|
{{ plugin.activity.numCommits }} commits
|
|
|
|
{% if plugin.activity.numContributors > 1 %}
|
|
{{ 'Marketplace_ByXDevelopers'|translate(plugin.activity.numContributors) }}
|
|
{% endif %}
|
|
{% if plugin.activity.lastCommitDate %}
|
|
{{ 'Marketplace_LastCommitTime'|translate(plugin.activity.lastCommitDate) }}
|
|
{% endif %}</dd>
|
|
{% endif %}
|
|
</dl>
|
|
|
|
{% if plugin.support is not empty %}
|
|
{% for entry in plugin.support %}
|
|
{% if entry.name and entry.value %}
|
|
<dt>{{ entry.name }}</dt>
|
|
<dd>{{ entry.value }}</dd>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
<br />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
|
|
var active = 0;
|
|
{% if activeTab %}
|
|
var $activeTab = $('#tabs-{{ activeTab|e('js') }}');
|
|
if ($activeTab) {
|
|
active = $activeTab.index() - 1;
|
|
}
|
|
{% endif %}
|
|
|
|
$('#pluginDetailsTabs .tabs').tabs();
|
|
$('#pluginDetailsTabs .tabs').tabs('select_tab', active >= 0 ? active : 0);
|
|
|
|
$('.pluginDetails a').each(function (index, a) {
|
|
var link = $(a).attr('href');
|
|
|
|
if (link && 0 === link.indexOf('http')) {
|
|
$(a).attr('target', '_blank');
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
{% if plugin.shop is defined and plugin.shop and plugin.shop.reviews and plugin.shop.reviews.embedUrl is defined and plugin.shop.reviews.embedUrl %}
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
var $iFrames = $('.pluginDetails iframe.reviewIframe');
|
|
for (var i = 0; i < $iFrames.length; i++) {
|
|
iFrameResize({checkOrigin: ['{{ plugin.shop.reviews.embedUrl|domainOnly }}']}, $iFrames[i]);
|
|
}
|
|
});
|
|
</script>
|
|
{% endif %}
|
|
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
var $variationPicker = $('.pluginDetails .variationPicker select');
|
|
if ($variationPicker.val()) {
|
|
$('.addToCartLink').attr('href', $variationPicker.val());
|
|
}
|
|
$variationPicker.on('change', function () {
|
|
$('.addToCartLink').attr('href', $variationPicker.val())
|
|
});
|
|
|
|
if ($variationPicker.length) {
|
|
$variationPicker.material_select();
|
|
}
|
|
});
|
|
</script>
|
|
{% endif %}
|
|
</div>
|
|
|
|
|
|
{% endblock %}
|