Implement dashboards hooks

This commit is contained in:
Alexandre Delaunay 2020-07-06 15:01:59 +02:00 committed by Cédric Anne
parent 3fa4e67698
commit 0b61ae3bdd
2 changed files with 115 additions and 0 deletions

View File

@ -500,4 +500,116 @@ class PluginExampleExample extends CommonDBTM {
return parent::generateLinkContents($link, $item);
}
static function dashboardTypes() {
return [
'example' => [
'label' => __("Plugin Example", 'example'),
'function' => "PluginExampleExample::cardWidget",
'image' => "https://via.placeholder.com/100x86?text=example",
],
'example_static' => [
'label' => __("Plugin Example (static)", 'example'),
'function' => "PluginExampleExample::cardWidgetWithoutProvider",
'image' => "https://via.placeholder.com/100x86?text=example+static",
],
];
}
static function dashboardCards() {
return [
'plugin_example_card' => [
'widgettype' => ["example"],
'label' => __("Plugin Example card"),
'provider' => "PluginExampleExample::cardDataProvider",
],
'plugin_example_card_without_provider' => [
'widgettype' => ["example_static"],
'label' => __("Plugin Example card without provider"),
],
'plugin_example_card_with_core_widget' => [
'widgettype' => ["bigNumber"],
'label' => __("Plugin Example card with core provider"),
'provider' => "PluginExampleExample::cardBigNumberProvider",
],
];
}
static function cardWidget(array $params = []) {
$default = [
'data' => [],
'title' => '',
// this property is "pretty" mandatory,
// as it contains the colors selected when adding widget on the grid send
// without it, your card will be transparent
'color' => '',
];
$p = array_merge($default, $params);
// you need to encapsulate your html in div.card to benefit core style
$html = "<div class='card' style='background-color: {$p["color"]};'>";
$html.= "<h2>{$p['title']}</h2>";
$html.= "<ul>";
foreach ($p['data'] as $line) {
$html.= "<li>$line</li>";
}
$html.= "</ul>";
$html.= "</div>";
return $html;
}
static function cardDataProvider(array $params = []) {
$default_params = [
'label' => null,
'icon' => "fas fa-smile-wink",
];
$params = array_merge($default_params, $params);
return [
'title' => $params['label'],
'icon' => $params['icon'],
'data' => [
'test1',
'test2',
'test3',
]
];
}
static function cardWidgetWithoutProvider(array $params = []) {
$default = [
// this property is "pretty" mandatory,
// as it contains the colors selected when adding widget on the grid send
// without it, your card will be transparent
'color' => '',
];
$p = array_merge($default, $params);
// you need to encapsulate your html in div.card to benefit core style
$html = "<div class='card' style='background-color: {$p["color"]};'>
static html (+optional javascript) as card is not matched with a data provider
<img src='https://www.linux.org/images/logo.png'>
</div>";
return $html;
}
static function cardBigNumberProvider(array $params = []) {
$default_params = [
'label' => null,
'icon' => null,
];
$params = array_merge($default_params, $params);
return [
'number' => rand(),
'url' => "https://www.linux.org/",
'label' => "plugin example - some text",
'icon' => "fab fa-linux", // font awesome icon
];
}
}

View File

@ -219,6 +219,9 @@ function plugin_init_example() {
$PLUGIN_HOOKS[Hooks::FILTER_ACTORS]['example'] = "plugin_example_filter_actors";
// add new cards to dashboard grid
$PLUGIN_HOOKS['dashboard_types']['example'] = ['PluginExampleExample', 'dashboardTypes'];
$PLUGIN_HOOKS['dashboard_cards']['example'] = ['PluginExampleExample', 'dashboardCards'];
}