From f80b10bfa0f09e45edb708442a3eb18caee7c7e2 Mon Sep 17 00:00:00 2001 From: Daniel Preussker Date: Fri, 11 Sep 2015 19:20:10 +0100 Subject: [PATCH] Added Dashboard sharing. --- html/includes/forms/edit-dashboard.inc.php | 4 +- html/includes/forms/widget-settings.inc.php | 14 ++-- html/pages/front/tiles.php | 78 ++++++++++++++------- sql-schema/069.sql | 2 +- 4 files changed, 65 insertions(+), 33 deletions(-) diff --git a/html/includes/forms/edit-dashboard.inc.php b/html/includes/forms/edit-dashboard.inc.php index 7e87af0a1c..fe9d9c527d 100644 --- a/html/includes/forms/edit-dashboard.inc.php +++ b/html/includes/forms/edit-dashboard.inc.php @@ -24,8 +24,8 @@ $status = 'error'; $message = 'unknown error'; -if (isset($_REQUEST['dashboard_id']) && isset($_REQUEST['dashboard_name'])) { - if(dbUpdate(array('dashboard_name'=>$_REQUEST['dashboard_name']),'dashboards','user_id = ? && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id']))) { +if (isset($_REQUEST['dashboard_id']) && isset($_REQUEST['dashboard_name']) && isset($_REQUEST['access'])) { + if(dbUpdate(array('dashboard_name'=>$_REQUEST['dashboard_name'],'access'=>$_REQUEST['access']),'dashboards','(user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id']))) { $status = 'ok'; $message = 'Updated dashboard'; } diff --git a/html/includes/forms/widget-settings.inc.php b/html/includes/forms/widget-settings.inc.php index 1926d34913..fabe6c4aab 100644 --- a/html/includes/forms/widget-settings.inc.php +++ b/html/includes/forms/widget-settings.inc.php @@ -35,13 +35,19 @@ else { 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'; + if (dbFetchCell('select 1 from users_widgets inner join dashboards on users_widgets.dashboard_id = dashboards.dashboard_id where user_widget_id = ? && (users_widgets.user_id = ? || dashboards.access = 2)',array($widget_id,$_SESSION['user_id'])) == 1) { + 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'; + } } else { $status = 'error'; - $message = 'ERROR: Could not update'; + $message = 'ERROR: You have no write-access to this dashboard'; } } diff --git a/html/pages/front/tiles.php b/html/pages/front/tiles.php index 670a6bb583..a6d3083ce5 100644 --- a/html/pages/front/tiles.php +++ b/html/pages/front/tiles.php @@ -23,13 +23,21 @@ if (dbFetchCell('SELECT dashboard_id FROM dashboards WHERE user_id=?',array($_SE dbUpdate(array('dashboard_id'=>$vars['dashboard']),'users_widgets','user_id = ? && dashboard_id = ?',array($_SESSION['user_id'],0)); } } +if (!empty($vars['dashboard'])) { + $orig = $vars['dashboard']; + $vars['dashboard'] = dbFetchRow('select * from dashboards where user_id = ? && dashboard_id = ? order by dashboard_id limit 1',array($_SESSION['user_id'],$vars['dashboard'])); + if (empty($vars['dashboard'])) { + $vars['dashboard'] = dbFetchRow('select dashboards.*,users.username from dashboards inner join users on dashboards.user_id = users.user_id where dashboards.dashboard_id = ? && dashboards.access > 0',array($orig)); + } +} if (empty($vars['dashboard'])) { - $vars['dashboard'] = dbFetchRow('select dashboard_id,dashboard_name from dashboards where user_id = ? order by dashboard_id limit 1',array($_SESSION['user_id'])); -} else { - $vars['dashboard'] = dbFetchRow('select dashboard_id,dashboard_name from dashboards where user_id = ? && dashboard_id = ? order by dashboard_id limit 1',array($_SESSION['user_id'],$vars['dashboard'])); + $vars['dashboard'] = dbFetchRow('select * from dashboards where user_id = ? order by dashboard_id limit 1',array($_SESSION['user_id'])); + if (isset($orig)) { + $msg_box[] = array('type' => 'error', 'message' => 'Dashboard #'.$orig.' does not exist! Loaded '.$vars['dashboard']['dashboard_name'].' instead.','title' => 'Requested Dashboard Not Found!'); + } } $data = array(); -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`=? AND `dashboard_id`=?',array($_SESSION['user_id'],$vars['dashboard']['dashboard_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 `dashboard_id`=?',array($vars['dashboard']['dashboard_id'])) as $items) { $data[] = $items; } if (empty($data)) { @@ -37,7 +45,7 @@ if (empty($data)) { } $data = serialize(json_encode($data)); $dash_config = unserialize(stripslashes($data)); -$dashboards = dbFetchRows("SELECT * FROM `dashboards` WHERE `user_id` = ?",array($_SESSION['user_id'])); +$dashboards = dbFetchRows("SELECT * FROM `dashboards` WHERE `user_id` = ? && `dashboard_id` != ?",array($_SESSION['user_id'],$vars['dashboard']['dashboard_id'])); ?>
@@ -45,7 +53,7 @@ $dashboards = dbFetchRows("SELECT * FROM `dashboards` WHERE `user_id` = ?",arra
-
@@ -71,7 +92,6 @@ if (sizeof($dashboards) > 1) {
-
@@ -93,17 +113,24 @@ if (sizeof($dashboards) > 1) {
-
-
-
+
+
+
-
+
Dashboard Name - + +
@@ -111,24 +138,23 @@ if (sizeof($dashboards) > 1) {
-
+
+
+
-
- + '. $widgets['widget_title'] .' '; + echo ' '. $widgets['widget_title'] .' '; } ?> -
-
@@ -296,9 +322,9 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg function dashboard_collapse(target) { if (target !== undefined) { $('.dash-collapse:not('+target+')').each(function() { - $(this).fadeOut(150); + $(this).fadeOut(0); }); - $(target).fadeToggle(150); + $(target).fadeToggle(300); } else { $('.dash-collapse').fadeOut(0); } @@ -327,7 +353,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: 'edit-dashboard', dashboard_name: data['dashboard_name'], dashboard_id: }, + data: {type: 'edit-dashboard', dashboard_name: data['dashboard_name'], dashboard_id: , access: data['access']}, dataType: "json", success: function (data) { if( data.status == "ok" ) { diff --git a/sql-schema/069.sql b/sql-schema/069.sql index 739c558dd5..a629aae3d4 100644 --- a/sql-schema/069.sql +++ b/sql-schema/069.sql @@ -1,2 +1,2 @@ -CREATE TABLE `dashboards` ( `dashboard_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT '0', `dashboard_name` varchar(255) NOT NULL, PRIMARY KEY (`dashboard_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `dashboards` ( `dashboard_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT 0, `dashboard_name` varchar(255) NOT NULL, `access` int(1) NOT NULL DEFAULT 0, PRIMARY KEY (`dashboard_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `users_widgets` ADD COLUMN `dashboard_id` int(11) NOT NULL;