diff --git a/html/ajax_dash.php b/html/ajax_dash.php
index 3b4c56e46..ec88e68ec 100644
--- a/html/ajax_dash.php
+++ b/html/ajax_dash.php
@@ -30,20 +30,30 @@ $type = mres($_POST['type']);
if ($type == 'placeholder') {
$output = 'Please add a Widget to get started';
$status = 'ok';
+ $title = 'Placeholder';
}
elseif (is_file('includes/common/'.$type.'.inc.php')) {
- $results_limit = 10;
- $no_form = true;
+ $results_limit = 10;
+ $no_form = true;
+ $title = ucfirst($type);
+ $unique_id = str_replace(array("-","."),"_",uniqid($type,true));
+ $widget_id = mres($_POST['id']);
+ $widget_settings = json_decode(dbFetchCell('select settings from users_widgets where user_widget_id = ?',array($widget_id)),true);
+ $widget_dimensions = $_POST['dimensions'];
+ if( !empty($_POST['settings']) ) {
+ define('show_settings',true);
+ }
include 'includes/common/'.$type.'.inc.php';
$output = implode('', $common_output);
$status = 'ok';
-
+ $title = $widget_settings['title'] ?: $title;
}
$response = array(
'status' => $status,
'html' => $output,
+ 'title' => $title,
);
echo _json_encode($response);
diff --git a/html/includes/common/generic-graph.inc.php b/html/includes/common/generic-graph.inc.php
new file mode 100644
index 000000000..3ac02ab69
--- /dev/null
+++ b/html/includes/common/generic-graph.inc.php
@@ -0,0 +1,122 @@
+
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see . */
+
+/**
+ * Generic Graph Widget
+ * @author Daniel Preussker
+ * @copyright 2015 Daniel Preussker, QuxLabs UG
+ * @license GPL
+ * @package LibreNMS
+ * @subpackage Widgets
+ */
+
+if( defined('show_settings') || empty($widget_settings) ) {
+ $common_output[] = '
+
+
+
+';
+}
+else {
+ $widget_settings['device_id'] = dbFetchCell('select device_id from devices where hostname = ?',array($widget_settings['graph_device']));
+ $widget_settings['title'] = $widget_settings['graph_device']." / ".$widget_settings['graph_type'];
+ $common_output[] = generate_minigraph_image(
+ array('device_id'=>(int) $widget_settings['device_id']),
+ $config['time']['day'],
+ $config['time']['now'],
+ $widget_settings['graph_type'],
+ $widget_settings['graph_legend'] == 1 ? 'yes' : 'no',
+ $widget_dimensions['x'],
+ $widget_dimensions['y'],
+ '&',
+ 'minigraph-image',
+ 1
+ );
+}
+
diff --git a/html/includes/forms/update-dashboard-config.inc.php b/html/includes/forms/update-dashboard-config.inc.php
index c2760adb5..de278fd91 100644
--- a/html/includes/forms/update-dashboard-config.inc.php
+++ b/html/includes/forms/update-dashboard-config.inc.php
@@ -20,22 +20,14 @@ elseif ($sub_type == 'remove-all') {
}
}
elseif ($sub_type == 'add' && is_numeric($widget_id)) {
- $dupe_check = dbFetchCEll('SELECT `user_widget_id` FROM `users_widgets` WHERE `user_id`=? AND `widget_id`=?',array($_SESSION['user_id'],$widget_id));
-
- if (is_numeric($dupe_check)) {
- $message = 'This widget has already been added';
- }
- else {
-
- $widget = dbFetchRow('SELECT * FROM `widgets` WHERE `widget_id`=?', array($widget_id));
- if (is_array($widget)) {
- list($x,$y) = explode(',',$widget['base_dimensions']);
- $item_id = dbInsert(array('user_id'=>$_SESSION['user_id'],'widget_id'=>$widget_id, 'col'=>1,'row'=>1,'refresh'=>60,'title'=>$widget['widget_title'],'size_x'=>$x,'size_y'=>$y),'users_widgets');
- if (is_numeric($item_id)) {
- $extra = array('widget_id'=>$item_id,'title'=>$widget['widget_title'],'widget'=>$widget['widget'],'size_x'=>$x,'size_y'=>$y);
- $status = 'ok';
- $message = '';
- }
+ $widget = dbFetchRow('SELECT * FROM `widgets` WHERE `widget_id`=?', array($widget_id));
+ if (is_array($widget)) {
+ list($x,$y) = explode(',',$widget['base_dimensions']);
+ $item_id = dbInsert(array('user_id'=>$_SESSION['user_id'],'widget_id'=>$widget_id, 'col'=>1,'row'=>1,'refresh'=>60,'title'=>$widget['widget_title'],'size_x'=>$x,'size_y'=>$y),'users_widgets');
+ if (is_numeric($item_id)) {
+ $extra = array('user_widget_id'=>$item_id,'widget_id'=>$item_id,'title'=>$widget['widget_title'],'widget'=>$widget['widget'],'refresh'=>60,'size_x'=>$x,'size_y'=>$y);
+ $status = 'ok';
+ $message = '';
}
}
}
diff --git a/html/includes/forms/widget-settings.inc.php b/html/includes/forms/widget-settings.inc.php
new file mode 100644
index 000000000..1926d3491
--- /dev/null
+++ b/html/includes/forms/widget-settings.inc.php
@@ -0,0 +1,51 @@
+
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see . */
+
+/**
+ * Store per-widget settings
+ * @author Daniel Preussker
+ * @copyright 2015 Daniel Preussker, QuxLabs UG
+ * @license GPL
+ * @package LibreNMS
+ * @subpackage Widgets
+ */
+
+$status = 'error';
+$message = 'unknown error';
+$widget_id = (int) $_REQUEST['id'];
+
+if ($widget_id < 1) {
+ $status = 'error';
+ $message = 'ERROR: malformed widget ID.';
+}
+else {
+ $widget_settings = $_REQUEST['settings'];
+ if (!is_array($widget_settings)) {
+ $widget_settings = array();
+ }
+ if (dbUpdate(array('settings'=>json_encode($widget_settings)),'users_widgets','user_widget_id=?',array($widget_id))) {
+ $status = 'ok';
+ $message = 'Updated';
+ }
+ else {
+ $status = 'error';
+ $message = 'ERROR: Could not update';
+ }
+}
+
+die(json_encode(array(
+ 'status' => $status,
+ 'message' => $message
+)));
diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php
index 7b7ea62ca..b4ab63c70 100644
--- a/html/includes/functions.inc.php
+++ b/html/includes/functions.inc.php
@@ -181,8 +181,8 @@ function get_percentage_colours($percentage) {
}//end get_percentage_colours()
-function generate_minigraph_image($device, $start, $end, $type, $legend='no', $width=275, $height=100, $sep='&', $class='minigraph-image') {
- return '
';
+function generate_minigraph_image($device, $start, $end, $type, $legend='no', $width=275, $height=100, $sep='&', $class='minigraph-image',$absolute_size=0) {
+ return '
';
}//end generate_minigraph_image()
diff --git a/html/includes/graphs/common.inc.php b/html/includes/graphs/common.inc.php
index 9dbc97b80..ba77fb3f6 100644
--- a/html/includes/graphs/common.inc.php
+++ b/html/includes/graphs/common.inc.php
@@ -103,3 +103,7 @@ else {
}
$rrd_options .= ' --font-render-mode normal';
+
+if (isset($_GET['absolute']) && $_GET['absolute'] == "1") {
+ $rrd_options .= ' --full-size-mode';
+}
diff --git a/html/pages/front/tiles.php b/html/pages/front/tiles.php
index ddaf61af4..e679f5079 100644
--- a/html/pages/front/tiles.php
+++ b/html/pages/front/tiles.php
@@ -18,7 +18,7 @@
$no_refresh = true;
-foreach (dbFetchRows('SELECT * FROM `users_widgets` LEFT JOIN `widgets` ON `widgets`.`widget_id`=`users_widgets`.`widget_id` WHERE `user_id`=?',array($_SESSION['user_id'])) as $items) {
+foreach (dbFetchRows('SELECT user_widget_id,users_widgets.widget_id,title,widget,col,row,size_x,size_y,refresh FROM `users_widgets` LEFT JOIN `widgets` ON `widgets`.`widget_id`=`users_widgets`.`widget_id` WHERE `user_id`=?',array($_SESSION['user_id'])) as $items) {
$data[] = $items;
}
@@ -96,38 +96,32 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg
widget_margins: [5, 5],
avoid_overlapped_widgets: true,
draggable: {
- handle: 'header',
+ handle: 'header, span',
stop: function(e, ui, $widget) {
updatePos(gridster);
},
},
resize: {
enabled: true,
- stop: function(e, ui, $widget) {
+ stop: function(e, ui, widget) {
updatePos(gridster);
+ widget_reload(widget.attr('id'),widget.data('type'));
}
},
- serialize_params: function($w, wgd) {
- return {
- id: $($w).attr('id'),
- col: wgd.col,
- row: wgd.row,
- size_x: wgd.size_x,
- size_y: wgd.size_y
+ serialize_params: function(w, wgd) {
+ return {
+ id: $(w).attr('id'),
+ col: wgd.col,
+ row: wgd.row,
+ size_x: wgd.size_x,
+ size_y: wgd.size_y
};
}
}).data('gridster');
gridster.remove_all_widgets();
$.each(serialization, function() {
- gridster.add_widget(
- ''+
- '\
diff --git a/includes/common.php b/includes/common.php
index 1fc1e648c..bcef46da0 100644
--- a/includes/common.php
+++ b/includes/common.php
@@ -693,9 +693,7 @@ function get_graph_subtypes($type) {
// find the MIB subtypes
foreach ($config['graph_types'] as $type => $unused1) {
- print_r($type);
foreach ($config['graph_types'][$type] as $subtype => $unused2) {
- print_r($subtype);
if (is_mib_graph($type, $subtype)) {
$types[] = $subtype;
}
diff --git a/sql-schema/068.sql b/sql-schema/068.sql
new file mode 100644
index 000000000..d0bbda576
--- /dev/null
+++ b/sql-schema/068.sql
@@ -0,0 +1,2 @@
+alter table users_widgets add column `settings` text not null;
+insert into widgets values(null,'Graph','generic-graph','6,2');