Add onAdminDashboard event. Move maintenance and Statistics widgets on their own partial, add to Twig::plugins_hooked_dashboard_widgets on onAdminDashboard

This commit is contained in:
Flavio Copes
2016-01-10 17:39:54 +01:00
parent 53bbbf9fc2
commit 2c9630b7af
4 changed files with 114 additions and 100 deletions

View File

@@ -71,10 +71,12 @@ class AdminPlugin extends Plugin
return [
'onPluginsInitialized' => [['setup', 100000], ['onPluginsInitialized', 1000]],
'onShutdown' => ['onShutdown', 1000],
'onFormProcessed' => ['onFormProcessed', 0]
'onFormProcessed' => ['onFormProcessed', 0],
'onAdminDashboard' => ['onAdminDashboard', 0],
];
}
return [];
}
@@ -423,6 +425,10 @@ class AdminPlugin extends Plugin
switch ($this->template) {
case 'dashboard':
$twig->twig_vars['popularity'] = $this->popularity;
// Gather Plugin-hooked dashboard items
$this->grav->fireEvent('onAdminDashboard');
break;
case 'pages':
$page = $this->admin->page(true);
@@ -622,4 +628,10 @@ class AdminPlugin extends Plugin
return false;
}
public function onAdminDashboard()
{
$this->grav['twig']->plugins_hooked_dashboard_widgets[] = ['template' => 'dashboard-maintenance'];
$this->grav['twig']->plugins_hooked_dashboard_widgets[] = ['template' => 'dashboard-statistics'];
}
}

View File

@@ -27,106 +27,11 @@
{% block messages %}{% endblock %}
{% block content_top %}
{% set gpm = admin.gpm() %}
{% set updatable = gpm.getUpdatablePlugins() %}
{% set backup = admin.lastBackup() %}
<div id="admin-dashboard">
{% if authorize(['admin.maintenance', 'admin.super']) %}
<div id="updates" class="dashboard-item dashboard-left">
<div class="tertiary-accent default-box-shadow">
<h1>{{ "PLUGIN_ADMIN.MAINTENANCE"|tu }}</h1>
<div class="admin-update-charts">
<div class="updates-chart">
<div class="chart-wrapper">
<div class="ct-chart"></div>
<span class="numeric hidden"><span>-</span><em>{{ "PLUGIN_ADMIN.UPDATED"|tu|lower }}</em></span>
</div>
<p class="js__updates-available-description">&nbsp;</p>
</div>
<div class="backups-chart">
<div class="chart-wrapper">
<div class="ct-chart"></div>
<script>
var data = {
series: [{{ backup.chart_fill }}, {{ backup.chart_empty }}]
};
var options = {
donut: true,
donutWidth: 10,
startAngle: 0,
total: 100,
showLabel: false,
height: 150,
chartPadding: !isFirefox ? 5 : 10
};
Chartist.Pie('.backups-chart .ct-chart', data, options);
</script>
<span class="numeric">{{ backup.days }}<em>{{ "PLUGIN_ADMIN.DAYS"|tu|lower }}</em></span>
</div>
<p>{{ "PLUGIN_ADMIN.LAST_BACKUP"|tu }}</p>
</div>
</div>
<div class="flush-bottom button-bar">
<button data-maintenance-update="{{ uri.addNonce(base_url_relative ~ '/update.json/task' ~ config.system.param_sep ~ 'update', 'admin-form', 'admin-nonce') }}" class="button"><i class="fa fa-cloud-download"></i> {{ "PLUGIN_ADMIN.UPDATE"|tu }}</button>
<button data-ajax="{{ uri.addNonce(base_url_relative ~ '/backup.json/task' ~ config.system.param_sep ~ 'backup', 'admin-form', 'admin-nonce') }}" class="button"><i class="fa fa-database"></i> {{ "PLUGIN_ADMIN.BACKUP"|tu }}</button>
</div>
</div>
</div>
{% endif %}
{% if authorize(['admin.statistics', 'admin.super']) %}
<div id="popularity" class="dashboard-item dashboard-right">
<div class="secondary-accent default-box-shadow">
<h1>{{ "PLUGIN_ADMIN.STATISTICS"|tu }}</h1>
<div class="ct-chart"></div>
<script>
var data = {
labels: {{ popularity.getDailyChartData['labels'] }},
series: [
{{ popularity.getDailyChartData['data'] }}
]
};
var options = {
height: 164,
chartPadding: !isFirefox ? 5 : 25,
axisX: {
showGrid: false,
labelOffset: {
x: 0,
y: 5
}
},
axisY: {
offset: 15,
showLabel: true,
showGrid: true,
labelOffset: {
x: 5,
y: 5
},
scaleMinSpace: 20
}
};
Chartist.Bar('#popularity .ct-chart', data, options);
</script>
<div class="flush-bottom button-bar stats-bar">
<span class="stat">
<b>{{ popularity.getDailyTotal }}</b>
<i>{{ "PLUGIN_ADMIN.TODAY"|tu }}</i>
</span>
<span class="stat">
<b>{{ popularity.getWeeklyTotal }}</b>
<i>{{ "PLUGIN_ADMIN.WEEK"|tu }}</i>
</span>
<span class="stat">
<b>{{ popularity.getMonthlyTotal }}</b>
<i>{{ "PLUGIN_ADMIN.MONTH"|tu }}</i>
</span>
</div>
</div>
</div>
{% if grav.twig.plugins_hooked_dashboard_widgets %}
{% for widget in grav.twig.plugins_hooked_dashboard_widgets %}
{% include 'partials/' ~ widget.template ~ '.html.twig' %}
{% endfor %}
{% endif %}
</div>
{% endblock %}

View File

@@ -0,0 +1,44 @@
{% set backup = admin.lastBackup() %}
{% if authorize(['admin.maintenance', 'admin.super']) %}
<div id="updates" class="dashboard-item dashboard-left">
<div class="tertiary-accent default-box-shadow">
<h1>{{ "PLUGIN_ADMIN.MAINTENANCE"|tu }}</h1>
<div class="admin-update-charts">
<div class="updates-chart">
<div class="chart-wrapper">
<div class="ct-chart"></div>
<span class="numeric hidden"><span>-</span><em>{{ "PLUGIN_ADMIN.UPDATED"|tu|lower }}</em></span>
</div>
<p class="js__updates-available-description">&nbsp;</p>
</div>
<div class="backups-chart">
<div class="chart-wrapper">
<div class="ct-chart"></div>
<script>
var data = {
series: [{{ backup.chart_fill }}, {{ backup.chart_empty }}]
};
var options = {
donut: true,
donutWidth: 10,
startAngle: 0,
total: 100,
showLabel: false,
height: 150,
chartPadding: !isFirefox ? 5 : 10
};
Chartist.Pie('.backups-chart .ct-chart', data, options);
</script>
<span class="numeric">{{ backup.days }}<em>{{ "PLUGIN_ADMIN.DAYS"|tu|lower }}</em></span>
</div>
<p>{{ "PLUGIN_ADMIN.LAST_BACKUP"|tu }}</p>
</div>
</div>
<div class="flush-bottom button-bar">
<button data-maintenance-update="{{ uri.addNonce(base_url_relative ~ '/update.json/task' ~ config.system.param_sep ~ 'update', 'admin-form', 'admin-nonce') }}" class="button" style="display: none"><i class="fa fa-cloud-download"></i> {{ "PLUGIN_ADMIN.UPDATE"|tu }}</button>
<button data-ajax="{{ uri.addNonce(base_url_relative ~ '/backup.json/task' ~ config.system.param_sep ~ 'backup', 'admin-form', 'admin-nonce') }}" class="button"><i class="fa fa-database"></i> {{ "PLUGIN_ADMIN.BACKUP"|tu }}</button>
</div>
</div>
</div>
{% endif %}

View File

@@ -0,0 +1,53 @@
{% if authorize(['admin.statistics', 'admin.super']) %}
<div id="popularity" class="dashboard-item dashboard-right">
<div class="secondary-accent default-box-shadow">
<h1>{{ "PLUGIN_ADMIN.STATISTICS"|tu }}</h1>
<div class="ct-chart"></div>
<script>
var data = {
labels: {{ popularity.getDailyChartData['labels'] }},
series: [
{{ popularity.getDailyChartData['data'] }}
]
};
var options = {
height: 164,
chartPadding: !isFirefox ? 5 : 25,
axisX: {
showGrid: false,
labelOffset: {
x: 0,
y: 5
}
},
axisY: {
offset: 15,
showLabel: true,
showGrid: true,
labelOffset: {
x: 5,
y: 5
},
scaleMinSpace: 20
}
};
Chartist.Bar('#popularity .ct-chart', data, options);
</script>
<div class="flush-bottom button-bar stats-bar">
<span class="stat">
<b>{{ popularity.getDailyTotal }}</b>
<i>{{ "PLUGIN_ADMIN.TODAY"|tu }}</i>
</span>
<span class="stat">
<b>{{ popularity.getWeeklyTotal }}</b>
<i>{{ "PLUGIN_ADMIN.WEEK"|tu }}</i>
</span>
<span class="stat">
<b>{{ popularity.getMonthlyTotal }}</b>
<i>{{ "PLUGIN_ADMIN.MONTH"|tu }}</i>
</span>
</div>
</div>
</div>
{% endif %}