update Piwik to version 2.16 (fixes #91)
This commit is contained in:
parent
296343bf3b
commit
d885a4baa9
5833 changed files with 418860 additions and 226988 deletions
|
|
@ -9,37 +9,37 @@
|
|||
{%- set rowMetadata=reportRowsMetadata[rowId].columns -%}
|
||||
|
||||
{%- if displaySiteName -%}{{ rowMetrics.label|raw }}: {% endif -%}
|
||||
|
||||
|
||||
{# visits #}
|
||||
{{- rowMetrics.nb_visits }} {{ 'General_ColumnNbVisits'|translate }}
|
||||
{%- if rowMetrics.visits_evolution != 0 %} ({{ rowMetrics.visits_evolution }}%){%- endif -%}
|
||||
|
||||
{{- rowMetrics.nb_visits|number }} {{ 'General_ColumnNbVisits'|translate }}
|
||||
{%- if rowMetrics.visits_evolution != 0 %} ({{ rowMetrics.visits_evolution|percentEvolution }}){%- endif -%}
|
||||
|
||||
{%- if rowMetrics.nb_visits != 0 -%}
|
||||
{#- actions -#}
|
||||
, {{ rowMetrics.nb_actions }} {{ 'General_ColumnNbActions'|translate }}
|
||||
{%- if rowMetrics.actions_evolution != 0 %} ({{ rowMetrics.actions_evolution }}%){%- endif -%}
|
||||
, {{ rowMetrics.nb_actions|number }} {{ 'General_ColumnNbActions'|translate }}
|
||||
{%- if rowMetrics.actions_evolution != 0 %} ({{ rowMetrics.actions_evolution|percentEvolution }}){%- endif -%}
|
||||
|
||||
{%- if isGoalPluginEnabled -%}
|
||||
|
||||
{# goal metrics #}
|
||||
{%- if rowMetrics.nb_conversions != 0 -%}
|
||||
, {{ 'General_ColumnRevenue'|translate }}: {{ rowMetrics.revenue|raw }}
|
||||
{%- if rowMetrics.revenue_evolution != 0 %} ({{ rowMetrics.revenue_evolution }}%){%- endif -%}
|
||||
{%- if rowMetrics.revenue_evolution != 0 %} ({{ rowMetrics.revenue_evolution|percentEvolution }}){%- endif -%}
|
||||
|
||||
, {{ rowMetrics.nb_conversions }} {{ 'Goals_GoalConversions'|translate }}
|
||||
{%- if rowMetrics.nb_conversions_evolution != 0 %} ({{ rowMetrics.nb_conversions_evolution }}%){%- endif -%}
|
||||
, {{ rowMetrics.nb_conversions|number }} {{ 'Goals_GoalConversions'|translate }}
|
||||
{%- if rowMetrics.nb_conversions_evolution != 0 %} ({{ rowMetrics.nb_conversions_evolution|percentEvolution }}){%- endif -%}
|
||||
{%- endif -%}
|
||||
|
||||
{# eCommerce metrics #}
|
||||
{%- if siteHasECommerce[rowMetadata.idsite] -%}
|
||||
|
||||
, {{ 'General_ProductRevenue'|translate }}: {{ rowMetrics.ecommerce_revenue|raw }}
|
||||
{%- if rowMetrics.ecommerce_revenue_evolution != 0 %} ({{ rowMetrics.ecommerce_revenue_evolution }}%){%- endif -%}
|
||||
{%- if rowMetrics.ecommerce_revenue_evolution != 0 %} ({{ rowMetrics.ecommerce_revenue_evolution|percentEvolution }}){%- endif -%}
|
||||
|
||||
, {{ rowMetrics.orders }} {{ 'General_EcommerceOrders'|translate }}
|
||||
{%- if rowMetrics.orders_evolution != 0 %} ({{ rowMetrics.orders_evolution }}%){%- endif -%}
|
||||
, {{ rowMetrics.orders|number }} {{ 'General_EcommerceOrders'|translate }}
|
||||
{%- if rowMetrics.orders_evolution != 0 %} ({{ rowMetrics.orders_evolution|percentEvolution }}){%- endif -%}
|
||||
{%- endif -%}
|
||||
|
||||
|
||||
{%- endif -%}
|
||||
|
||||
{%- endif -%}
|
||||
|
|
|
|||
|
|
@ -1,43 +1,50 @@
|
|||
{% extends 'admin.twig' %}
|
||||
|
||||
{% import '@MobileMessaging/macros.twig' as macro %}
|
||||
|
||||
{% set title %}{{ 'MobileMessaging_SettingsMenu'|translate }}{% endset %}
|
||||
|
||||
{% block content %}
|
||||
{% if accountManagedByCurrentUser %}
|
||||
<h2 piwik-enriched-headline
|
||||
feature-name="{{ 'MobileMessaging_SettingsMenu'|translate }}"
|
||||
>{{ 'MobileMessaging_Settings_SMSAPIAccount'|translate }}</h2>
|
||||
{% if credentialSupplied %}
|
||||
{{ 'MobileMessaging_Settings_CredentialProvided'|translate(provider) }}
|
||||
{{ creditLeft }}
|
||||
<br/>
|
||||
{{ 'MobileMessaging_Settings_UpdateOrDeleteAccount'|translate("<a id='displayAccountForm'>","</a>","<a id='deleteAccount'>","</a>")|raw }}
|
||||
{% else %}
|
||||
{{ 'MobileMessaging_Settings_PleaseSignUp'|translate }}
|
||||
{% endif %}
|
||||
<div id='accountForm' {% if credentialSupplied %}style='display: none;'{% endif %}>
|
||||
<br/>
|
||||
{{ 'MobileMessaging_Settings_SMSProvider'|translate }}
|
||||
<select id='smsProviders'>
|
||||
{% for smsProvider, description in smsProviders %}
|
||||
<option value='{{ smsProvider }}'>
|
||||
{{ smsProvider }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{{ 'MobileMessaging_Settings_APIKey'|translate }}
|
||||
<input size='25' id='apiKey'/>
|
||||
{% if isSuperUser %}
|
||||
<h2>{{ title }}</h2>
|
||||
|
||||
<input type='submit' value='{{ 'General_Save'|translate }}' id='apiAccountSubmit' class='submit'/>
|
||||
<div class="form-group">
|
||||
<label>{{ 'MobileMessaging_Settings_LetUsersManageAPICredential'|translate }}</label>
|
||||
|
||||
{% for smsProvider, description in smsProviders %}
|
||||
<div class='providerDescription' id='{{ smsProvider }}'>
|
||||
{{ description|raw }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
<label class="radio">
|
||||
<input type='radio' value='false' id="delegatedManagement" name='delegatedManagement'
|
||||
{% if not delegatedManagement %} checked='checked'{% endif %}/>
|
||||
{{ 'General_No'|translate }}
|
||||
|
||||
<span class='form-description'>{{ 'General_Default'|translate }}.
|
||||
{{ 'MobileMessaging_Settings_LetUsersManageAPICredential_No_Help'|translate }}</span>
|
||||
</label>
|
||||
|
||||
<label class="radio">
|
||||
<input type='radio' value='true' id="delegatedManagement" name='delegatedManagement'
|
||||
{% if delegatedManagement %} checked='checked'{% endif %}/>
|
||||
{{ 'General_Yes'|translate }}
|
||||
|
||||
<span class='form-description'>{{ 'MobileMessaging_Settings_LetUsersManageAPICredential_Yes_Help'|translate }}</span>
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if accountManagedByCurrentUser and delegatedManagement %}
|
||||
|
||||
<h2 piwik-enriched-headline
|
||||
>{{ 'MobileMessaging_Settings_SMSProvider'|translate }}</h2>
|
||||
To manage your SMS provider go to your <a href="{{ linkTo({'action':'userSettings'}) }}">personal mobile messaging settings</a>.
|
||||
|
||||
{% elseif accountManagedByCurrentUser %}
|
||||
|
||||
<h2 piwik-enriched-headline
|
||||
>{{ 'MobileMessaging_Settings_SMSProvider'|translate }}</h2>
|
||||
|
||||
{{ macro.manageSmsApi(credentialSupplied, creditLeft, smsProviders, provider) }}
|
||||
{% endif %}
|
||||
|
||||
{% import 'ajaxMacros.twig' as ajax %}
|
||||
|
||||
<div style="margin-top:10px">
|
||||
|
|
@ -45,149 +52,7 @@
|
|||
</div>
|
||||
|
||||
<h2>{{ 'MobileMessaging_PhoneNumbers'|translate }}</h2>
|
||||
{% if not credentialSupplied %}
|
||||
{% if accountManagedByCurrentUser %}
|
||||
{{ 'MobileMessaging_Settings_CredentialNotProvided'|translate }}
|
||||
{% else %}
|
||||
{{ 'MobileMessaging_Settings_CredentialNotProvidedByAdmin'|translate }}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ 'MobileMessaging_Settings_PhoneNumbers_Help'|translate }}
|
||||
<br/>
|
||||
<br/>
|
||||
<table style="width:900px;" class="adminTable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:480px;">
|
||||
<strong>{{ 'MobileMessaging_Settings_PhoneNumbers_Add'|translate }}</strong>
|
||||
<br/><br/>
|
||||
|
||||
<span id="suspiciousPhoneNumber" style="display:none;">
|
||||
{{ 'MobileMessaging_Settings_SuspiciousPhoneNumber'|translate('54184032') }}
|
||||
<br/><br/>
|
||||
</span>
|
||||
|
||||
+ <input id="countryCallingCode" size="4" maxlength="4"/>
|
||||
<input id="newPhoneNumber"/>
|
||||
<input type="submit" value='{{ 'General_Add'|translate }}'
|
||||
id="addPhoneNumberSubmit"/>
|
||||
<br/>
|
||||
|
||||
<span style=' font-size: 11px;'><span
|
||||
class="form-description">{{ 'MobileMessaging_Settings_CountryCode'|translate }}</span>
|
||||
<span class="form-description"
|
||||
style="margin-left:50px;">{{ 'MobileMessaging_Settings_PhoneNumber'|translate }}</span></span>
|
||||
<br/><br/>
|
||||
|
||||
{{ 'MobileMessaging_Settings_PhoneNumbers_CountryCode_Help'|translate }}
|
||||
|
||||
<select id="countries">
|
||||
{# this is a trick to avoid selecting the first country when no default could be found #}
|
||||
<option value=""> </option>
|
||||
{% for countryCode, country in countries %}
|
||||
<option value='{{ country.countryCallingCode }}'
|
||||
{% if defaultCountry==countryCode %} selected="selected" {% endif %}
|
||||
>
|
||||
{{ country.countryName }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
</td>
|
||||
<td style="width:220px;">
|
||||
{% import 'macros.twig' as piwik %}
|
||||
{{ piwik.inlineHelp(strHelpAddPhone) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
|
||||
{% if phoneNumbers|length > 0 %}
|
||||
<br/>
|
||||
<br/>
|
||||
<strong>{{ 'MobileMessaging_Settings_ManagePhoneNumbers'|translate }}</strong>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endif %}
|
||||
|
||||
{{ ajax.errorDiv('invalidVerificationCodeAjaxError') }}
|
||||
|
||||
<div id='phoneNumberActivated' style="display:none;">
|
||||
{{ 'MobileMessaging_Settings_PhoneActivated'|translate }}
|
||||
</div>
|
||||
|
||||
<div id='invalidActivationCode' style="display:none;">
|
||||
{{ 'MobileMessaging_Settings_InvalidActivationCode'|translate }}
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
{% for phoneNumber, validated in phoneNumbers %}
|
||||
<li>
|
||||
<span class='phoneNumber'>{{ phoneNumber }}</span>
|
||||
{% if not validated %}
|
||||
<input class='verificationCode'/>
|
||||
<input
|
||||
type='submit'
|
||||
value='{{ 'MobileMessaging_Settings_ValidatePhoneNumber'|translate }}'
|
||||
class='validatePhoneNumberSubmit'
|
||||
/>
|
||||
{% endif %}
|
||||
<input
|
||||
type='submit'
|
||||
value='{{ 'General_Remove'|translate }}'
|
||||
class='removePhoneNumberSubmit'
|
||||
/>
|
||||
{% if not validated %}
|
||||
<br/>
|
||||
<span class='form-description'>{{ 'MobileMessaging_Settings_VerificationCodeJustSent'|translate }}</span>
|
||||
{% endif %}
|
||||
<br/>
|
||||
<br/>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if isSuperUser %}
|
||||
<h2>{{ 'MobileMessaging_Settings_SuperAdmin'|translate }}</h2>
|
||||
<table class='adminTable' style='width:650px;'>
|
||||
<tr>
|
||||
<td style="width:400px;">{{ 'MobileMessaging_Settings_LetUsersManageAPICredential'|translate }}</td>
|
||||
<td style="width:250px;">
|
||||
<fieldset>
|
||||
<label>
|
||||
<input
|
||||
type='radio'
|
||||
value='false'
|
||||
name='delegatedManagement' {% if not delegatedManagement %} checked='checked'{% endif %} />
|
||||
{{ 'General_No'|translate }}
|
||||
<br/>
|
||||
<span class='form-description'>
|
||||
({{ 'General_Default'|translate }}
|
||||
) {{ 'MobileMessaging_Settings_LetUsersManageAPICredential_No_Help'|translate }}
|
||||
</span>
|
||||
</label>
|
||||
<br/>
|
||||
<br/>
|
||||
<label>
|
||||
<input
|
||||
type='radio'
|
||||
value='true'
|
||||
name='delegatedManagement' {% if delegatedManagement %} checked='checked'{% endif %} />
|
||||
{{ 'General_Yes'|translate }}
|
||||
<br/>
|
||||
<span class='form-description'>{{ 'MobileMessaging_Settings_LetUsersManageAPICredential_Yes_Help'|translate }}</span>
|
||||
</label>
|
||||
|
||||
</fieldset>
|
||||
</tr>
|
||||
</table>
|
||||
{% endif %}
|
||||
To manage your phone numbers go to your <a href="{{ linkTo({'action':'userSettings'}) }}">personal mobile messaging settings</a>.
|
||||
|
||||
{{ ajax.loadingDiv('ajaxLoadingMobileMessagingSettings') }}
|
||||
|
||||
|
|
|
|||
33
www/analytics/plugins/MobileMessaging/templates/macros.twig
Normal file
33
www/analytics/plugins/MobileMessaging/templates/macros.twig
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{% macro manageSmsApi(credentialSupplied, creditLeft, smsProviders, provider) %}
|
||||
{% if credentialSupplied %}
|
||||
{{ 'MobileMessaging_Settings_CredentialProvided'|translate(provider) }}
|
||||
{{ creditLeft }}
|
||||
<br/>
|
||||
{{ 'MobileMessaging_Settings_UpdateOrDeleteAccount'|translate("<a id='displayAccountForm'>","</a>","<a id='deleteAccount'>","</a>")|raw }}
|
||||
{% else %}
|
||||
{{ 'MobileMessaging_Settings_PleaseSignUp'|translate }}
|
||||
{% endif %}
|
||||
<div id='accountForm' {% if credentialSupplied %}style='display: none;'{% endif %}>
|
||||
<br/>
|
||||
{{ 'MobileMessaging_Settings_SMSProvider'|translate }}
|
||||
<select id='smsProviders'>
|
||||
{% for smsProvider, description in smsProviders %}
|
||||
<option value='{{ smsProvider }}'>
|
||||
{{ smsProvider }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
{{ 'MobileMessaging_Settings_APIKey'|translate }}
|
||||
<input size='25' id='apiKey'/>
|
||||
|
||||
<input type='submit' value='{{ 'General_Save'|translate }}' id='apiAccountSubmit' class='submit'/>
|
||||
|
||||
{% for smsProvider, description in smsProviders %}
|
||||
<div class='providerDescription' id='{{ smsProvider }}'>
|
||||
{{ description|raw }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
|
@ -6,15 +6,16 @@
|
|||
<td>
|
||||
<div class="entityInlineHelp">
|
||||
{% if phoneNumbers|length == 0 %}
|
||||
{{ 'MobileMessaging_MobileReport_NoPhoneNumbers'|translate }}
|
||||
<div><span class="icon-info"></span> {{ 'MobileMessaging_MobileReport_NoPhoneNumbers'|translate }}
|
||||
{% else %}
|
||||
<ul class="clearfix">
|
||||
{% for phoneNumber in phoneNumbers %}
|
||||
<label><input name='phoneNumbers' type='checkbox' id='{{ phoneNumber }}'/>{{ phoneNumber }}</label>
|
||||
<br/>
|
||||
<li class="clear"><label><input name='phoneNumbers' type='checkbox' id='{{ phoneNumber }}'/>{{ phoneNumber }}</label></li>
|
||||
{% endfor %}
|
||||
{{ 'MobileMessaging_MobileReport_AdditionalPhoneNumbers'|translate }}
|
||||
</ul>
|
||||
<div><span class="icon-info"></span> {{ 'MobileMessaging_MobileReport_AdditionalPhoneNumbers'|translate }}
|
||||
{% endif %}
|
||||
<a href='{{ linkTo({'module':"MobileMessaging", 'action': 'index', 'updated':null}) }}'>{{ 'MobileMessaging_MobileReport_MobileMessagingSettingsLink'|translate }}</a>
|
||||
<a href="{{ linkTo({'module':"MobileMessaging", 'action': 'index', 'updated':null}) }}">{{ 'MobileMessaging_MobileReport_MobileMessagingSettingsLink'|translate }}</a></div>
|
||||
</div>
|
||||
<script>
|
||||
$(function () {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,129 @@
|
|||
{% extends 'user.twig' %}
|
||||
|
||||
{% set title %}{{ 'MobileMessaging_Settings_SMSProvider'|translate }}{% endset %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% import 'ajaxMacros.twig' as ajax %}
|
||||
|
||||
<div style="margin-top:10px">
|
||||
{{ ajax.errorDiv('ajaxErrorMobileMessagingSettings') }}
|
||||
</div>
|
||||
|
||||
{% import '@MobileMessaging/macros.twig' as macro %}
|
||||
|
||||
{% if accountManagedByCurrentUser and delegatedManagement %}
|
||||
<h2 piwik-enriched-headline>{{ title }}</h2>
|
||||
|
||||
{{ macro.manageSmsApi(credentialSupplied, creditLeft, smsProviders, provider) }}
|
||||
{% endif %}
|
||||
|
||||
<h2>{{ 'MobileMessaging_PhoneNumbers'|translate }}</h2>
|
||||
{% if not credentialSupplied %}
|
||||
{% if accountManagedByCurrentUser and delegatedManagement %}
|
||||
{{ 'MobileMessaging_Settings_CredentialNotProvided'|translate }}
|
||||
{% elseif accountManagedByCurrentUser %}
|
||||
Before you can create and manage phone numbers, please setup an SMS provider in <a href="{{ linkTo({'action': 'index'}) }}">admin mobile messaging settings</a>.
|
||||
{% else %}
|
||||
{{ 'MobileMessaging_Settings_CredentialNotProvidedByAdmin'|translate }}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ 'MobileMessaging_Settings_PhoneNumbers_Help'|translate }}
|
||||
<span class="form-group">
|
||||
<div class="form-help">
|
||||
{{ strHelpAddPhone }}
|
||||
</div>
|
||||
<span>
|
||||
<p><strong>{{ 'MobileMessaging_Settings_PhoneNumbers_Add'|translate }}</strong></p>
|
||||
</span>
|
||||
<span id="suspiciousPhoneNumber" style="display:none;">
|
||||
{{ 'MobileMessaging_Settings_SuspiciousPhoneNumber'|translate('54184032') }}
|
||||
<br/><br/>
|
||||
</span>
|
||||
|
||||
</span>
|
||||
|
||||
+ <input id="countryCallingCode" size="4" maxlength="4"/>
|
||||
<input id="newPhoneNumber"/>
|
||||
<input type="submit" value='{{ 'General_Add'|translate }}'
|
||||
id="addPhoneNumberSubmit"/>
|
||||
<br/>
|
||||
|
||||
<span style=' font-size: 11px;'><span
|
||||
class="form-description">{{ 'MobileMessaging_Settings_CountryCode'|translate }}</span>
|
||||
<span class="form-description"
|
||||
style="margin-left:50px;">{{ 'MobileMessaging_Settings_PhoneNumber'|translate }}</span></span>
|
||||
|
||||
<br/><br/>
|
||||
|
||||
{{ 'MobileMessaging_Settings_PhoneNumbers_CountryCode_Help'|translate }}
|
||||
|
||||
<select id="countries">
|
||||
{# this is a trick to avoid selecting the first country when no default could be found #}
|
||||
<option value=""> </option>
|
||||
{% for countryCode, country in countries %}
|
||||
<option value='{{ country.countryCallingCode }}'
|
||||
{% if defaultCountry==countryCode %} selected="selected" {% endif %}
|
||||
>
|
||||
{{ country.countryName }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
|
||||
{% if phoneNumbers|length > 0 %}
|
||||
<br/>
|
||||
<br/>
|
||||
<strong>{{ 'MobileMessaging_Settings_ManagePhoneNumbers'|translate }}</strong>
|
||||
<br/>
|
||||
<br/>
|
||||
{% endif %}
|
||||
|
||||
{{ ajax.errorDiv('invalidVerificationCodeAjaxError') }}
|
||||
|
||||
<div id='phoneNumberActivated' style="display:none;">
|
||||
{{ 'MobileMessaging_Settings_PhoneActivated'|translate }}
|
||||
</div>
|
||||
|
||||
<div id='invalidActivationCode' style="display:none;">
|
||||
{{ 'MobileMessaging_Settings_InvalidActivationCode'|translate }}
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
{% for phoneNumber, validated in phoneNumbers %}
|
||||
<li>
|
||||
<span class='phoneNumber'>{{ phoneNumber }}</span>
|
||||
{% if not validated %}
|
||||
<input class='verificationCode'/>
|
||||
<input
|
||||
type='submit'
|
||||
value='{{ 'MobileMessaging_Settings_ValidatePhoneNumber'|translate }}'
|
||||
class='validatePhoneNumberSubmit'
|
||||
/>
|
||||
{% endif %}
|
||||
<input
|
||||
type='submit'
|
||||
value='{{ 'General_Remove'|translate }}'
|
||||
class='removePhoneNumberSubmit'
|
||||
/>
|
||||
{% if not validated %}
|
||||
<br/>
|
||||
<span class='form-description'>{{ 'MobileMessaging_Settings_VerificationCodeJustSent'|translate }}</span>
|
||||
{% endif %}
|
||||
<br/>
|
||||
<br/>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{{ ajax.loadingDiv('ajaxLoadingMobileMessagingSettings') }}
|
||||
|
||||
<div class='ui-confirm' id='confirmDeleteAccount'>
|
||||
<h2>{{ 'MobileMessaging_Settings_DeleteAccountConfirm'|translate }}</h2>
|
||||
<input role='yes' type='button' value='{{ 'General_Yes'|translate }}'/>
|
||||
<input role='no' type='button' value='{{ 'General_No'|translate }}'/>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
Loading…
Add table
Add a link
Reference in a new issue