This commit is contained in:
coderkun 2015-04-27 16:42:05 +02:00
commit 046a724272
4209 changed files with 1186656 additions and 0 deletions

View file

@ -0,0 +1,50 @@
{% extends 'admin.twig' %}
{% import '@CorePluginsAdmin/macros.twig' as pluginsMacro %}
{% block content %}
<div class="pluginslistActionBar">
<h2 piwik-enriched-headline
feature-name="{{ 'CorePluginsAdmin_Marketplace'|translate }}"
>{{ 'CorePluginsAdmin_TeaserExtendPiwikByPlugin'|translate }}</h2>
<div class="infoBox">
{{ 'CorePluginsAdmin_BeCarefulUsingPlugins'|translate }}
</div>
{% include "@CorePluginsAdmin/browsePluginsActions.twig" %}
</div>
{% if not isSuperUser %}
<div class="pluginslistNonSuperUserHint">
{{ 'CorePluginsAdmin_NotAllowedToBrowseMarketplacePlugins'|translate }}
</div>
{% endif %}
<div class="pluginslist">
{% if plugins|length %}
{% for plugin in plugins %}
<div class="plugin">
<div class="content" data-pluginName="{{ plugin.name }}">
{% include "@CorePluginsAdmin/pluginOverview.twig" %}
</div>
<div class="footer" data-pluginName="{{ plugin.name }}">
{% if plugin.featured %}
{{ pluginsMacro.featuredIcon('right') }}
{% endif %}
{% include "@CorePluginsAdmin/pluginMetadata.twig" %}
</div>
</div>
{% endfor %}
{% else %}
{{ 'CorePluginsAdmin_NoPluginsFound'|translate }}
{% endif %}
</div>
{% endblock %}

View file

@ -0,0 +1,12 @@
<div class="sort">
<a href="{{ linkTo({'sort': 'popular', 'query': ''}) }}" {% if 'popular' == sort %}class="active"{% endif %}>{{ 'CorePluginsAdmin_SortByPopular'|translate }}</a>
|
<a href="{{ linkTo({'sort': 'newest', 'query': ''}) }}" {% if 'newest' == sort %}class="active"{% endif %}>{{ 'CorePluginsAdmin_SortByNewest'|translate }}</a>
|
<a href="{{ linkTo({'sort': 'alpha', 'query': ''}) }}" {% if 'alpha' == sort %}class="active"{% endif %}>{{ 'CorePluginsAdmin_SortByAlpha'|translate }}</a>
|
<form action="{{ linkTo({'sort': ''}) }}" method="POST">
<input value="{{ query }}" placeholder="{{ 'General_Search'|translate }}" type="text" name="query"/>
<button type="submit">{{ 'General_Search'|translate }}</button>
</form>
</div>

View file

@ -0,0 +1,45 @@
{% extends 'admin.twig' %}
{% block content %}
<div class="pluginslistActionBar">
<h2 piwik-enriched-headline
feature-name="{{ 'CorePluginsAdmin_Marketplace'|translate }}"
>{{ 'CorePluginsAdmin_TeaserExtendPiwikByTheme'|translate }}</h2>
<div class="infoBox">
{{ 'CorePluginsAdmin_BeCarefulUsingThemes'|translate }}
</div>
{% include "@CorePluginsAdmin/browsePluginsActions.twig" %}
</div>
{% if not isSuperUser %}
<div class="pluginslistNonSuperUserHint">
{{ 'CorePluginsAdmin_NotAllowedToBrowseMarketplaceThemes'|translate }}
</div>
{% endif %}
<div class="pluginslist themes">
{% if plugins|length %}
{% for plugin in plugins %}
<div class="plugin">
<div class="content" data-pluginName="{{ plugin.name }}">
{% include "@CorePluginsAdmin/themeOverview.twig" %}
</div>
<div class="footer" data-pluginName="{{ plugin.name }}">
{% include "@CorePluginsAdmin/pluginMetadata.twig" %}
</div>
</div>
{% endfor %}
{% else %}
{{ 'CorePluginsAdmin_NoThemesFound'|translate }}
{% endif %}
</div>
{% endblock %}

View file

@ -0,0 +1,70 @@
{% extends 'admin.twig' %}
{% import '@CorePluginsAdmin/macros.twig' as plugins %}
{% block content %}
<div class="extendPlatform">
<div class="ui-confirm" id="installPluginByUpload">
<h2>{{ 'CorePluginsAdmin_TeaserExtendPiwikByUpload'|translate }}</h2>
<p class="description"> {{ 'CorePluginsAdmin_AllowedUploadFormats'|translate }} </p>
<form enctype="multipart/form-data"
method="post"
id="uploadPluginForm"
action="{{ linkTo({'action':'uploadPlugin', 'nonce': installNonce}) }}">
<input type="file" name="pluginZip">
<br />
<input class="startUpload" type="submit" value="{{ 'CorePluginsAdmin_UploadZipFile'|translate }}">
</form>
</div>
<div class="introduction">
<h2 piwik-enriched-headline
feature-name="{{ 'CorePluginsAdmin_Marketplace'|translate }}"
>{{ 'CorePluginsAdmin_TeaserExtendPiwik'|translate }}</h2>
<p>{{ 'CorePluginsAdmin_DownloadAndInstallPluginsFromMarketplace'|translate("<a href='?module=Proxy&action=redirect&url=http://plugins.piwik.org/' target='_blank'>", "</a>")|raw }}</p>
{% set marketplaceSellPluginSubject = 'CorePluginsAdmin_MarketplaceSellPluginSubject'|translate %}
<em>{{ 'CorePluginsAdmin_GetEarlyAccessForPaidPlugins'|translate("<a href='mailto:hello@piwik.org?subject=" ~ marketplaceSellPluginSubject ~ "'>", "</a>")|raw }}</em>
</div>
<div>
<div class="byPlugins">
<h3 class="header">{{ 'CorePluginsAdmin_GetNewFunctionality'|translate }}</h3>
<span class="callToAction">{{ 'CorePluginsAdmin_ByInstallingNewPluginFromMarketplace'|translate("<a href=" ~ linkTo({'action':'browsePlugins', 'sort': ''}) ~ ">", "</a>")|raw }}</span>
<p>
<a href="{{ linkTo({'action':'browsePlugins', 'sort': ''}) }}"><img class="teaserImage" title="{{ 'CorePluginsAdmin_InstallNewPlugins'|translate }}" alt="{{ 'CorePluginsAdmin_InstallNewPlugins'|translate }}" src="plugins/CorePluginsAdmin/images/plugins.png"/></a>
</p>
<span class="callToAction">
{{ 'CorePluginsAdmin_ByWritingOwnPlugin'|translate('<a href="http://developer.piwik.org/guides/getting-started-part-1" target="_blank">', '</a>')|raw }}
{% if isSuperUser %}
<br/>{{ 'CorePluginsAdmin_OrByUploadingAPlugin'|translate('<a href="#" class="uploadPlugin">', '</a>')|raw }}
{% endif %}
</span>
</div>
<div class="byThemes">
<h3 class="header">{{ 'CorePluginsAdmin_EnjoyAnotherLookAndFeelOfThemes'|translate }}</h3>
<span class="callToAction">{{ 'CorePluginsAdmin_ByInstallingNewThemeFromMarketplace'|translate("<a href=" ~ linkTo({'action':'browseThemes', 'sort': ''}) ~ ">", "</a>")|raw }}</span>
<p>
<a href="{{ linkTo({'action':'browseThemes', 'sort': ''}) }}"><img class="teaserImage" alt="{{ 'CorePluginsAdmin_InstallNewThemes'|translate }}" title="{{ 'CorePluginsAdmin_InstallNewThemes'|translate }}" src="plugins/CorePluginsAdmin/images/themes.png"/></a>
</p>
<span class="callToAction">
{{ 'CorePluginsAdmin_ByDesigningOwnTheme'|translate('<a href="http://developer.piwik.org/guides/theming" target="_blank">', '</a>')|raw }}
{% if isSuperUser %}
<br />{{ 'CorePluginsAdmin_OrByUploadingATheme'|translate('<a href="#" class="uploadPlugin">', '</a>')|raw }}
{% endif %}
</span>
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,41 @@
{% extends 'admin.twig' %}
{% block content %}
<div style="max-width:980px;">
<h2>{{ 'CorePluginsAdmin_InstallingPlugin'|translate(plugin.name) }}</h2>
<div>
{% if plugin.isTheme %}
<p>{{ 'CorePluginsAdmin_StepDownloadingThemeFromMarketplace'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepUnzippingTheme'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepThemeSuccessfullyInstalled'|translate(plugin.name, plugin.latestVersion) }}</p>
<p><strong><a href="{{ linkTo({'action': 'activate', 'pluginName': plugin.name, 'nonce': nonce}) }}">{{ 'CorePluginsAdmin_ActionActivateTheme'|translate }}</a></strong>
|
<a href="{{ linkTo({'action': 'browseThemes'}) }}">{{ 'CorePluginsAdmin_BackToExtendPiwik'|translate }}</a></p>
{% else %}
<p>{{ 'CorePluginsAdmin_StepDownloadingPluginFromMarketplace'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepUnzippingPlugin'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepPluginSuccessfullyInstalled'|translate(plugin.name, plugin.latestVersion) }}</p>
<p><strong><a href="{{ linkTo({'action': 'activate', 'pluginName': plugin.name, 'nonce': nonce}) }}">{{ 'CorePluginsAdmin_ActionActivatePlugin'|translate }}</a></strong>
|
<a href="{{ linkTo({'action': 'browsePlugins'}) }}">{{ 'CorePluginsAdmin_BackToExtendPiwik'|translate }}</a></p>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,256 @@
{% macro tablePluginUpdates(pluginsHavingUpdate, nonce, isTheme) %}
<div class='entityContainer'>
<table class="dataTable entityTable">
<thead>
<tr>
<th>{% if isTheme %}{{ 'CorePluginsAdmin_Theme'|translate }}{% else %}{{ 'General_Plugin'|translate }}{% endif %}</th>
<th class="num">{{ 'CorePluginsAdmin_Version'|translate }}</th>
<th>{{ 'General_Description'|translate }}</th>
<th class="status">{{ 'CorePluginsAdmin_Status'|translate }}</th>
<th class="action-links">{{ 'General_Action'|translate }}</th>
</tr>
</thead>
<tbody id="plugins">
{% for name,plugin in pluginsHavingUpdate %}
<tr {% if plugin.isActivated %}class="active-plugin"{% else %}class="inactive-plugin"{% endif %}>
<td class="name">
<a href="javascript:void(0);" data-pluginName="{{ plugin.name|e('html_attr') }}">
{{ plugin.name }}
</a>
</td>
<td class="vers">
{% if plugin.repositoryChangelogUrl %}
<a href="javascript:void(0);" title="{{ 'CorePluginsAdmin_Changelog'|translate }}" data-activePluginTab="changelog" data-pluginName="{{ plugin.name|e('html_attr') }}">{{ plugin.currentVersion }} => {{ plugin.latestVersion }}</a>
{% else %}
{{ plugin.currentVersion }} => {{ plugin.latestVersion }}
{% endif %}
</td>
<td class="desc">
{{ plugin.description }}
{{ _self.missingRequirementsPleaseUpdateNotice(plugin) }}
</td>
<td class="status">
{% if plugin.isActivated %}
{{ 'CorePluginsAdmin_Active'|translate }}
{% else %}
{{ 'CorePluginsAdmin_Inactive'|translate }}
{% endif %}
</td>
<td class="togl action-links">
{% if 0 == plugin.missingRequirements|length %}
<a href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': nonce}) }}">Update</a>
{% else %}
-
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endmacro %}
{% macro pluginDeveloper(owner) %}
{% if 'piwik' == owner %}<img title="Piwik" alt="Piwik" style="padding-bottom:2px;height:11px;" src="plugins/Zeitgeist/images/logo-marketplace.png"/>{% else %}{{ owner }}{% endif %}
{% endmacro %}
{% macro featuredIcon(align='') %}
<img class="featuredIcon"
title="{{ 'CorePluginsAdmin_FeaturedPlugin'|translate }}"
src="plugins/CorePluginsAdmin/images/rating_important.png"
align="{{ align }}" />
{% endmacro %}
{% macro pluginsFilter(isTheme, isMarketplaceEnabled) %}
<p class="pluginsFilter entityContainer">
<span class="origin">
<strong>{{ 'CorePluginsAdmin_Origin'|translate }}</strong>
<a data-filter-origin="all" href="#" class="active">{{ 'General_All'|translate }}<span class="counter"></span></a> |
<a data-filter-origin="core" href="#">{{ 'CorePluginsAdmin_OriginCore'|translate }}<span class="counter"></span></a> |
<a data-filter-origin="noncore" href="#">{{ 'CorePluginsAdmin_OriginThirdParty'|translate }}<span class="counter"></span></a>
</span>
<span class="status">
<strong>{{ 'CorePluginsAdmin_Status'|translate }}</strong>
<a data-filter-status="all" href="#" class="active">{{ 'General_All'|translate }}<span class="counter"></span></a> |
<a data-filter-status="active" href="#">{{ 'CorePluginsAdmin_Active'|translate }}<span class="counter"></span></a> |
<a data-filter-status="inactive" href="#">{{ 'CorePluginsAdmin_Inactive'|translate }}<span class="counter"></span></a>
</span>
{% if isMarketplaceEnabled %}
<span class="getNewPlugins">
{% if isTheme %}
<a href="{{ linkTo({'action':'browseThemes', 'sort': ''}) }}">{{ 'CorePluginsAdmin_InstallNewThemes'|translate }}</a>
{% else %}
<a href="{{ linkTo({'action':'browsePlugins', 'sort': ''}) }}">{{ 'CorePluginsAdmin_InstallNewPlugins'|translate }}</a>
{% endif %}
</span>
{% endif %}
</p>
{% endmacro %}
{% macro missingRequirementsPleaseUpdateNotice(plugin) %}
{% if plugin.missingRequirements and 0 < plugin.missingRequirements|length %}
{% for req in plugin.missingRequirements -%}
<p class="missingRequirementsNotice">
{% set requirement = req.requirement|capitalize %}
{% if 'Php' == requirement %}
{% set requirement = 'PHP' %}
{% endif %}
{{ 'CorePluginsAdmin_MissingRequirementsNotice'|translate(requirement, req.actualVersion, req.requiredVersion) }}
</p>
{%- endfor %}
{% endif %}
{% endmacro %}
{% macro missingRequirementsInfo(pluginName, metadata, missingRequirements, marketplacePluginNames) %}
{% set causedBy = '' %}
{% for dependency in missingRequirements %}
{% set causedBy = causedBy ~ dependency.requirement|capitalize ~ ' ' ~ dependency.causedBy %}
{% if not loop.last %}
{% set causedBy = causedBy ~ ', ' %}
{% endif %}
{% endfor %}
{{ 'CorePluginsAdmin_PluginRequirement'|translate(pluginName, causedBy) }}
{% if metadata is defined
and metadata.support is defined
and metadata.support.email
and pluginName not in marketplacePluginNames %}
{{ 'CorePluginsAdmin_EmailToEnquireUpdatedVersion'|translate('<a href="mailto:' ~ metadata.support.email|e('html_attr') ~'">' ~ metadata.support.email ~ '</a>', pluginName)|raw }}
{% endif %}
{% endmacro %}
{% macro tablePlugins(pluginsInfo, pluginNamesHavingSettings, activateNonce, deactivateNonce, uninstallNonce, isTheme, marketplacePluginNames, displayAdminLinks) %}
<div id="confirmUninstallPlugin" class="ui-confirm">
<h2 id="uninstallPluginConfirm">{{ 'CorePluginsAdmin_UninstallConfirm'|translate }}</h2>
<input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
<div class='entityContainer'>
<table class="dataTable entityTable">
<thead>
<tr>
<th>{% if isTheme %}{{ 'CorePluginsAdmin_Theme'|translate }}{% else %}{{ 'General_Plugin'|translate }}{% endif %}</th>
<th>{{ 'General_Description'|translate }}</th>
<th class="status">{{ 'CorePluginsAdmin_Status'|translate }}</th>
{% if (displayAdminLinks) %}
<th class="action-links">{{ 'General_Action'|translate }}</th>
{% endif %}
</tr>
</thead>
<tbody id="plugins">
{% for name,plugin in pluginsInfo %}
{% set isZeitgeist = isTheme and name == 'Zeitgeist' %}
{% if (plugin.alwaysActivated is defined and not plugin.alwaysActivated) or isTheme %}
<tr {% if plugin.activated %}class="active-plugin"{% else %}class="inactive-plugin"{% endif %} data-filter-status="{% if plugin.activated %}active{% else %}inactive{% endif %}" data-filter-origin="{% if plugin.isCorePlugin %}core{% else %}noncore{% endif %}">
<td class="name" style="white-space:nowrap;">
<a name="{{ name|e('html_attr') }}"></a>
{% if not plugin.isCorePlugin and name in marketplacePluginNames -%}
<a href="javascript:void(0);"
data-pluginName="{{ name|e('html_attr') }}"
>{{ name }}</a>
{%- else %}
{{ name }}
{% endif %}
<span class="plugin-version" {% if plugin.isCorePlugin %}title="{{ 'CorePluginsAdmin_CorePluginTooltip'|translate }}"{% endif %}>({% if plugin.isCorePlugin %}{{ 'CorePluginsAdmin_OriginCore'|translate }}{% else %}v{{ plugin.info.version }}{% endif %})</span>
{% if name in pluginNamesHavingSettings %}
<br /><br />
<a href="{{ linkTo({'module':'CoreAdminHome', 'action': 'pluginSettings'}) }}#{{ name|e('html_attr') }}" class="settingsLink">{{ 'General_Settings'|translate }}</a>
{% endif %}
</td>
<td class="desc">
<div class="plugin-desc-missingrequirements">
{% if plugin.missingRequirements is defined and plugin.missingRequirements %}
{{ _self.missingRequirementsInfo(name, plugin.info, plugin.missingRequirements, marketplacePluginNames) }}
<br />
{% endif %}
</div>
<div class="plugin-desc-text">
{{ plugin.info.description|raw|nl2br }}
{% if plugin.info.homepage|default is not empty and plugin.info.homepage not in [
'http://piwik.org', 'http://www.piwik.org', 'http://piwik.org/', 'http://www.piwik.org/'
] %}
<span class="plugin-homepage">
<a href="{{ plugin.info.homepage }}">({{ 'CorePluginsAdmin_PluginHomepage'|translate|replace({' ': '&nbsp;'})|raw }})</a>
</span>
{% endif %}
</div>
{% if plugin.info.license is defined %}
<div class="plugin-license">
{% if plugin.info.license_homepage is defined %}<a title="{{ 'CorePluginsAdmin_LicenseHomepage'|translate }}" target="_blank" href="{{ plugin.info.license_homepage }}">{% endif %}{{ plugin.info.license }}{% if plugin.info.license_homepage is defined %}</a>{% endif %}
</div>
{% endif %}
{% if plugin.info.authors is defined %}
<div class="plugin-author">
<cite>By
{% if plugin.info.authors is defined -%}
{% spaceless %}
{% for author in plugin.info.authors if author.name %}
{% if author.homepage is defined %}
<a title="{{ 'CorePluginsAdmin_AuthorHomepage'|translate }}" href="{{ author.homepage }}" target="_blank">{{ author.name }}</a>
{% else %}
{{ author.name }}
{% endif %}
{% if loop.index < plugin.info.authors|length %}
,
{% endif %}
{% endfor %}
{% endspaceless %}
{%- endif %}.</cite>
</div>
{% endif %}
</td>
<td class="status" {% if isZeitgeist %}style="border-left-width:0px;"{% endif %}>
{% if not isZeitgeist -%}
{% if plugin.activated %}
{{ 'CorePluginsAdmin_Active'|translate }}
{% else %}
{{ 'CorePluginsAdmin_Inactive'|translate }}
{% if plugin.uninstallable and displayAdminLinks %} <br/> - <a data-pluginName="{{ name|escape('html_attr') }}" class="uninstall" href='index.php?module=CorePluginsAdmin&action=uninstall&pluginName={{ name }}&nonce={{ uninstallNonce }}'>{{ 'CorePluginsAdmin_ActionUninstall'|translate }}</a>{% endif %}
{% endif %}
{%- endif %}
</td>
{% if displayAdminLinks %}
<td class="togl action-links" {% if isZeitgeist %}style="border-left-width:0px;"{% endif %}>
{% if not isZeitgeist -%}
{% if plugin.invalid is defined or plugin.alwaysActivated %}
-
{% else %}
{% if plugin.activated %}
<a href='index.php?module=CorePluginsAdmin&action=deactivate&pluginName={{ name }}&nonce={{ deactivateNonce }}'>{{ 'CorePluginsAdmin_Deactivate'|translate }}</a>
{% elseif plugin.missingRequirements %}
-
{% else %}
<a href='index.php?module=CorePluginsAdmin&action=activate&pluginName={{ name }}&nonce={{ activateNonce }}'>{{ 'CorePluginsAdmin_Activate'|translate }}</a>
{% endif %}
{% endif %}
{%- endif %}
</td>
{% endif %}
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
{% endmacro %}

View file

@ -0,0 +1,204 @@
{% import '@CorePluginsAdmin/macros.twig' as pluginsMacro %}
{% block content %}
<div class="pluginDetails">
{% if errorMessage %}
{{ errorMessage }}
{% elseif plugin %}
{% set latestVersion = plugin.versions[plugin.versions|length - 1] %}
<div class="header">
<div class="intro" style="width:75%;float:left;">
<h2>{{ plugin.name }}</h2>
<p class="description">
{% if plugin.featured %}
{{ pluginsMacro.featuredIcon('left') }}
{% endif %}
{{ plugin.description }}
</p>
</div>
<div class="width:25%;float:left;">
{% if isSuperUser %}
{% if plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
<a class="install update"
href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
{% elseif plugin.isInstalled %}
{% elseif 0 < plugin.missingRequirements|length %}
{% else %}
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
class="install">{{ 'CorePluginsAdmin_ActionInstall'|translate }}</a>
{% endif %}
{% endif %}
</div>
</div>
<div class="content">
<div style="width:75%;float:left;">
<div id="pluginDetailsTabs">
<ul>
<li><a href="#tabs-description">{{ 'General_Description'|translate }}</a></li>
{% if latestVersion.readmeHtml.faq %}
<li><a href="#tabs-faq">{{ 'General_Faq'|translate }}</a></li>
{% endif %}
<li><a href="#tabs-changelog">{{ 'CorePluginsAdmin_Changelog'|translate }}</a></li>
{% if plugin.screenshots|length %}
<li><a href="#tabs-screenshots">{{ 'CorePluginsAdmin_Screenshots'|translate }}</a></li>
{% endif %}
{% if latestVersion.readmeHtml.support %}
<li><a href="#tabs-support">{{ 'CorePluginsAdmin_Support'|translate }}</a></li>
{% endif %}
</ul>
<div id="tabs-description">
{{ pluginsMacro.missingRequirementsPleaseUpdateNotice(plugin) }}
{{ latestVersion.readmeHtml.description|raw }}
</div>
{% if latestVersion.readmeHtml.faq %}
<div id="tabs-faq">
{{ latestVersion.readmeHtml.faq|raw }}
</div>
{% endif %}
<div id="tabs-changelog">
{{ pluginsMacro.missingRequirementsPleaseUpdateNotice(plugin) }}
{% if plugin.canBeUpdated %}
<p class="updateAvailableNotice">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}
{% if plugin.repositoryChangelogUrl %}<a target="_blank" href="{{ plugin.repositoryChangelogUrl }}">{{ 'CorePluginsAdmin_ViewRepositoryChangelog'|translate }}</a>{% endif %}
</p>
{% endif %}
{% if latestVersion.readmeHtml.changelog %}
{{ latestVersion.readmeHtml.changelog|raw }}
{% endif %}
<h3>{{ 'CorePluginsAdmin_History'|translate }}</h3>
<ul>
{% for version in plugin.versions|reverse %}
<li>
{% set versionName %}
<strong>
{% if version.repositoryChangelogUrl %}
<a target="_blank" title="{{ 'CorePluginsAdmin_Changelog'|translate }}" href="{{ version.repositoryChangelogUrl }}">{{ version.name }}</a>
{% else %}
{{ version.name }}
{% endif %}
</strong>
{% endset %}
{{ 'CorePluginsAdmin_PluginVersionInfo'|translate(versionName, version.release)|raw }}
</li>
{% endfor %}
</ul>
</div>
{% if plugin.screenshots|length %}
<div id="tabs-screenshots">
<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 latestVersion.readmeHtml.support %}
<div id="tabs-support">
{{ latestVersion.readmeHtml.support|raw }}
</div>
{% endif %}
</div>
</div>
<div class="metadata" style="width:25%;float:left;">
<p><br /></p>
<dl>
<dt>{{ 'CorePluginsAdmin_Version'|translate }}</dt>
<dd>{{ plugin.latestVersion }}</dd>
<dt>{{ 'CorePluginsAdmin_PluginKeywords'|translate }}</dt>
<dd>{{ plugin.keywords|join(', ') }}</dd>
<dt>{{ 'CorePluginsAdmin_LastUpdated'|translate }}</dt>
<dd>{{ plugin.lastUpdated }}</dd>
<dt>{{ 'General_Downloads'|translate }}</dt>
<dd title="{{ 'CorePluginsAdmin_NumDownloadsLatestVersion'|translate(latestVersion.numDownloads|number_format) }}">{{ plugin.numDownloads }}</dd>
<dt>{{ 'CorePluginsAdmin_Developer'|translate }}</dt>
<dd>{{ pluginsMacro.pluginDeveloper(plugin.owner) }}</dd>
<dt>{{ 'CorePluginsAdmin_Authors'|translate }}</dt>
<dd>{% for author in plugin.authors if author.name %}
{% spaceless %}
{% if author.homepage %}
<a target="_blank" 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>
<dt>{{ 'CorePluginsAdmin_Websites'|translate }}</dt>
<dd>
{% if plugin.homepage %}
<a target="_blank" href="{{ plugin.homepage }}">{{ 'CorePluginsAdmin_PluginWebsite'|translate }}</a>,
{% endif %}
<a target="_blank" href="{{ plugin.repositoryUrl }}">GitHub</a></dd>
{% if plugin.activity %}
<dt>{{ 'CorePluginsAdmin_Activity'|translate }}</dt>
<dd>
{{ plugin.activity.numCommits }} commits
{% if plugin.activity.numContributors > 1 %}
{{ 'CorePluginsAdmin_ByXDevelopers'|translate(plugin.activity.numContributors) }}
{% endif %}
{% if plugin.activity.lastCommitDate %}
{{ 'CorePluginsAdmin_LastCommitTime'|translate(plugin.activity.lastCommitDate) }}
{% endif %}</dd>
{% endif %}
</dl>
<br />
</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({active: 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>
{% endif %}
</div>
{% endblock %}

View file

@ -0,0 +1,9 @@
{% import '@CorePluginsAdmin/macros.twig' as plugins %}
<hr class="metadataSeparator"/>
<ul class="metadata">
<li class="odd">{{ 'CorePluginsAdmin_Version'|translate }}: <strong>{{ plugin.latestVersion }}</strong></li>
<li class="even">{{ 'CorePluginsAdmin_Updated'|translate }}: <strong>{{ plugin.lastUpdated }}</strong></li>
<li class="odd">{{ 'General_Downloads'|translate }}: <strong>{{ plugin.numDownloads }}</strong></li>
<li class="even">{{ 'CorePluginsAdmin_Developer'|translate }}: <strong>{{ plugins.pluginDeveloper(plugin.owner) }}</strong></li>
</ul>

View file

@ -0,0 +1,30 @@
{% import '@CorePluginsAdmin/macros.twig' as plugins %}
{% if isSuperUser %}
{% if plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
<a class="update"
href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
{% elseif plugin.isInstalled %}
<span class="install">{{ 'General_Installed'|translate }}</span>
{% elseif 0 < plugin.missingRequirements|length %}
{% else %}
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
class="install">{{ 'CorePluginsAdmin_ActionInstall'|translate }}</a>
{% endif %}
{% endif %}
<h3 class="header" title="{{ 'General_MoreDetails'|translate }}">
<a href="javascript:void(0);" class="more">{{ plugin.name }}</a>
</h3>
<p class="description">{{ plugin.description }}
<br />
<a href="javascript:void(0);" title="{{ 'General_MoreDetails'|translate }}" class="more">&gt;&gt; {{ 'General_MoreLowerCase'|translate }}</a>
</p>
{% if plugin.canBeUpdated %}
<p class="updateAvailableNotice" data-activePluginTab="changelog">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p>
{% endif %}
{{ plugins.missingRequirementsPleaseUpdateNotice(plugin) }}

View file

@ -0,0 +1,31 @@
{% extends 'admin.twig' %}
{% import '@CorePluginsAdmin/macros.twig' as plugins %}
{% block content %}
<div style="max-width:980px;">
{% if pluginsHavingUpdate|length %}
<h2>{{ pluginsHavingUpdate|length }} Update(s) available</h2>
<p>{{ 'CorePluginsAdmin_InfoPluginUpdateIsRecommended'|translate }}</p>
{{ plugins.tablePluginUpdates(pluginsHavingUpdate, updateNonce, activateNonce, 0) }}
{% endif %}
<h2 piwik-enriched-headline>{{ 'CorePluginsAdmin_PluginsManagement'|translate }}</h2>
<p>{{ 'CorePluginsAdmin_MainDescription'|translate }}
{% if not isPluginsAdminEnabled %}
<br/>{{ 'CorePluginsAdmin_DoMoreContactPiwikAdmins'|translate }}
{% endif %}
</p>
{{ plugins.pluginsFilter(false, isMarketplaceEnabled) }}
{{ plugins.tablePlugins(pluginsInfo, pluginNamesHavingSettings, activateNonce, deactivateNonce, uninstallNonce, false, marketplacePluginNames, isPluginsAdminEnabled) }}
</div>
{% endblock %}

View file

@ -0,0 +1,114 @@
<html>
<head>
<style type="text/css">
html, body {
background-color: white;
}
td {
border: 1px solid #ccc;
border-collapse: collapse;
padding: 5px;
}
table {
border-collapse: collapse;
border: 0px;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<h1>A fatal error occurred</h1>
<div style="width: 640px">
{% if not isAnonymousUser %}
<p>
The following error just broke Piwik{% if showVersion %} (v{{ piwikVersion }}){% endif %}:
<pre>{{ lastError.message }}</pre>
in
<pre>{{ lastError.file }} line {{ lastError.line }}</pre>
</p>
{% endif %}
{% if isSuperUser %}
<p>
If this error continues to happen, there is a good chance to fix this issue by disabling one or more of
the Third-Party plugins. You can enable them again in the
<a target="_blank" href="index.php?module=CorePluginsAdmin&action=plugins">Plugins</a> or <a target="_blank" href="index.php?module=CorePluginsAdmin&action=themes">Themes</a> page under
settings at any time.
{% if pluginCausesIssue %}
Based on the error message, the issue is probably caused by the plugin <strong>{{ pluginCausesIssue }}</strong>.
{% endif %}
</p>
<table>
{% for pluginName, plugin in plugins if plugin.uninstallable and plugin.activated %}
<tr {% if loop.index is divisibleby(2) %}style="background-color: #eeeeee"{% endif %}>
<td style="min-width:200px;">
{{ pluginName }}
</td>
<td>
<a href="index.php?module=CorePluginsAdmin&action=deactivate&pluginName={{ pluginName }}&nonce={{ deactivateNonce }}"
target="_blank">deactivate</a>
</td>
</tr>
{% endfor %}
</table>
{% set uninstalledPluginsFound = false %}
{% for pluginName, plugin in plugins if plugin.uninstallable and not plugin.activated %}
{% set uninstalledPluginsFound = true %}
{% endfor %}
{% if uninstalledPluginsFound %}
<p>
If this error still occurs after disabling all plugins, you might want to consider uninstalling some
plugins. Keep in mind: The plugin will be completely removed from your platform.
</p>
<table>
{% for pluginName, plugin in plugins if plugin.uninstallable and not plugin.activated %}
<tr {% if loop.index is divisibleby(2) %}style="background-color: #eeeeee"{% endif %}>
<td style="min-width:200px;">
{{ pluginName }}
</td>
<td>
<a href="index.php?module=CorePluginsAdmin&action=uninstall&pluginName={{ pluginName }}&nonce={{ uninstallNonce }}"
target="_blank" onclick="return confirm('{{ 'CorePluginsAdmin_UninstallConfirm'|translate(pluginName)|e('js') }}')">uninstall</a>
</td>
</tr>
{% endfor %}
</table>
{% endif %}
<p>
<br />
We appreciate if you send the
<a href="mailto:hello@piwik.org?subject={{ 'Fatal error in Piwik ' ~ piwikVersion|e('url') }}&body={{ lastError.message|e('url') }}%20in%20{{ lastError.file|e('url') }}%20{{ lastError.line|e('url') }}%20using%20PHP%20{{ constant('PHP_VERSION') }}">error report</a>
to the Piwik team.
</p>
{% elseif isAnonymousUser %}
<p>Please contact the system administrator.</p>
{% else %}
<p>
If this error continues to happen you may want to send an
<a href="mailto:{{ emailSuperUser }}?subject={{ 'Fatal error in Piwik ' ~ piwikVersion|e('url') }}&body={{ lastError.message|e('url') }}%20in%20{{ lastError.file|e('url') }}%20{{ lastError.line|e('url') }}%20using%20PHP%20{{ constant('PHP_VERSION') }}">error report</a>
to your system administrator.
</p>
{% endif %}
</div>
</body>
</html>

View file

@ -0,0 +1,30 @@
{% import '@CorePluginsAdmin/macros.twig' as plugins %}
{% if isSuperUser %}
{% if plugin.canBeUpdated and 0 == plugin.missingRequirements|length %}
<a href="{{ linkTo({'action':'updatePlugin', 'pluginName': plugin.name, 'nonce': updateNonce}) }}"
class="update"
>{{ 'CoreUpdater_UpdateTitle'|translate }}</a>
{% elseif plugin.isInstalled %}
<span class="install">{{ 'General_Installed'|translate }}</span>
{% elseif 0 < plugin.missingRequirements|length %}
{% else %}
<a href="{{ linkTo({'action': 'installPlugin', 'pluginName': plugin.name, 'nonce': installNonce}) }}"
class="install">{{ 'CorePluginsAdmin_ActionInstall'|translate }}</a>
{% endif %}
{% endif %}
<h3 class="header" title="{{ 'General_MoreDetails'|translate }}">
<a href="javascript:void(0);" class="more">{{ plugin.name }}</a>
</h3>
<p class="description">{% if plugin.featured %}{{ plugins.featuredIcon('right') }}{% endif %}{{ plugin.description }}</p>
{% if plugin.canBeUpdated %}
<p class="updateAvailableNotice">{{ 'CorePluginsAdmin_PluginUpdateAvailable'|translate(plugin.currentVersion, plugin.latestVersion) }}</p>
{% endif %}
{{ plugins.missingRequirementsPleaseUpdateNotice(plugin) }}
<a href="javascript:void(0);" class="more"><img title="{{ 'General_MoreDetails'|translate }}"
class="preview" src="{{ plugin.screenshots|first }}?w=250&h=250"/></a>

View file

@ -0,0 +1,33 @@
{% extends 'admin.twig' %}
{% import '@CorePluginsAdmin/macros.twig' as plugins %}
{% block content %}
<div style="max-width:980px;">
{% if pluginsHavingUpdate|length %}
<h2>{{ 'CorePluginsAdmin_NumUpdatesAvailable'|translate(pluginsHavingUpdate|length) }}</h2>
<p>{{ 'CorePluginsAdmin_InfoThemeUpdateIsRecommended'|translate }}</p>
{{ plugins.tablePluginUpdates(pluginsHavingUpdate, updateNonce, true) }}
{% endif %}
<h2 piwik-enriched-headline>{{ 'CorePluginsAdmin_ThemesManagement'|translate }}</h2>
<p>{{ 'CorePluginsAdmin_ThemesDescription'|translate }}
{% if otherUsersCount > 0 %}
<br/> {{ 'CorePluginsAdmin_InfoThemeIsUsedByOtherUsersAsWell'|translate(otherUsersCount, themeEnabled) }}
{% endif %}
{% if not isPluginsAdminEnabled %}
<br/>{{ 'CorePluginsAdmin_DoMoreContactPiwikAdmins'|translate }}
{% endif %}
</p>
{{ plugins.pluginsFilter(true, isMarketplaceEnabled) }}
{{ plugins.tablePlugins(pluginsInfo, pluginNamesHavingSettings, activateNonce, deactivateNonce, uninstallNonce, true, marketplacePluginNames, isPluginsAdminEnabled ) }}
</div>
{% endblock %}

View file

@ -0,0 +1,41 @@
{% extends 'admin.twig' %}
{% block content %}
<div style="max-width:980px;">
<h2>{{ 'CorePluginsAdmin_UpdatingPlugin'|translate(plugin.name) }}</h2>
<div>
{% if plugin.isTheme %}
<p>{{ 'CorePluginsAdmin_StepDownloadingThemeFromMarketplace'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepUnzippingTheme'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepReplaceExistingTheme'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepThemeSuccessfullyUpdated'|translate(plugin.name, plugin.latestVersion) }}</p>
{% else %}
<p>{{ 'CorePluginsAdmin_StepDownloadingPluginFromMarketplace'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepUnzippingPlugin'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepReplaceExistingPlugin'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepPluginSuccessfullyUpdated'|translate(plugin.name, plugin.latestVersion) }}</p>
{% endif %}
<p><a href="{{ linkTo({'action': 'plugins'}) }}">{{ 'General_Plugins'|translate }}</a>
|
<a href="{{ linkTo({'action': 'themes'}) }}">{{ 'CorePluginsAdmin_Themes'|translate }}</a>
|
<a href="{{ linkTo({'action': 'extend'}) }}">{{ 'CorePluginsAdmin_Marketplace'|translate }}</a></p>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,44 @@
{% extends 'admin.twig' %}
{% block content %}
<div style="max-width:980px;">
<div>
<h2>{{ 'CorePluginsAdmin_InstallingPlugin'|translate(plugin.name) }}</h2>
{% if plugin.isTheme %}
<p>{{ 'CorePluginsAdmin_StepUnzippingTheme'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepThemeSuccessfullyInstalled'|translate(plugin.name, plugin.version) }}</p>
<p>
{% if not plugin.isActivated %}
<strong><a href="{{ linkTo({'action': 'activate', 'pluginName': plugin.name, 'nonce': nonce}) }}">{{ 'CorePluginsAdmin_ActionActivateTheme'|translate }}</a></strong>
|
{% endif %}
<a href="{{ linkTo({'action': 'extend'}) }}">{{ 'CorePluginsAdmin_BackToExtendPiwik'|translate }}</a>
</p>
{% else %}
<p>{{ 'CorePluginsAdmin_StepUnzippingPlugin'|translate }}</p>
<p>{{ 'CorePluginsAdmin_StepPluginSuccessfullyInstalled'|translate(plugin.name, plugin.version) }}</p>
<p>
{% if not plugin.isActivated %}
<strong><a href="{{ linkTo({'action': 'activate', 'pluginName': plugin.name, 'nonce': nonce}) }}">{{ 'CorePluginsAdmin_ActionActivatePlugin'|translate }}</a></strong>
|
{% endif %}
<a href="{{ linkTo({'action': 'extend'}) }}">{{ 'CorePluginsAdmin_BackToExtendPiwik'|translate }}</a>
</p>
{% endif %}
</div>
</div>
{% endblock %}