| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\Dashboard; |
|
|
| use Piwik\Common; |
| use Piwik\Db; |
| use Piwik\DbHelper; |
| use Piwik\Widget\WidgetsList; |
|
|
| class Model |
| { |
| private static $rawPrefix = 'user_dashboard'; |
| private $table; |
|
|
| public function __construct() |
| { |
| $this->table = Common::prefixTable(self::$rawPrefix); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function getLayoutForUser($login, $idDashboard) |
| { |
| $query = sprintf( |
| 'SELECT layout FROM `%s` WHERE login = ? AND iddashboard = ?', |
| $this->table |
| ); |
| $bind = array($login, $idDashboard); |
| $layouts = Db::fetchAll($query, $bind); |
|
|
| return $layouts; |
| } |
|
|
| public function getAllDashboardsForUser($login) |
| { |
| $dashboards = Db::fetchAll('SELECT iddashboard, name, layout FROM ' . $this->table . |
| ' WHERE login = ? ORDER BY iddashboard', array($login)); |
|
|
| return $dashboards; |
| } |
|
|
| public function deleteAllLayoutsForUser($userLogin) |
| { |
| Db::query('DELETE FROM ' . $this->table . ' WHERE login = ?', array($userLogin)); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function updateDashboardName($login, $idDashboard, $name) |
| { |
| $bind = array($name, $login, $idDashboard); |
| $query = sprintf('UPDATE `%s` SET name = ? WHERE login = ? AND iddashboard = ?', $this->table); |
| Db::query($query, $bind); |
| } |
|
|
| |
| |
| |
| public function deleteDashboardForUser($idDashboard, $login) |
| { |
| $query = sprintf('DELETE FROM `%s` WHERE iddashboard = ? AND login = ?', $this->table); |
| Db::query($query, array($idDashboard, $login)); |
| } |
|
|
| |
| |
| |
| |
| public function createNewDashboardForUser($login, $name, $layout) |
| { |
| $nextId = $this->getNextIdDashboard($login); |
|
|
| $query = sprintf('INSERT INTO `%s` (login, iddashboard, name, layout) VALUES (?, ?, ?, ?)', $this->table); |
| $bind = array($login, $nextId, $name, $layout); |
| Db::query($query, $bind); |
|
|
| return $nextId; |
| } |
|
|
| |
| |
| |
| public function createOrUpdateDashboard($login, $idDashboard, $layout) |
| { |
| $bind = array($login, $idDashboard, $layout, $layout); |
| $query = sprintf( |
| 'INSERT INTO `%s` (login, iddashboard, layout) VALUES (?,?,?) ON DUPLICATE KEY UPDATE layout=?', |
| $this->table |
| ); |
| Db::query($query, $bind); |
| } |
|
|
| private function getNextIdDashboard($login) |
| { |
| $nextIdQuery = sprintf('SELECT MAX(iddashboard)+1 FROM `%s` WHERE login = ?', $this->table); |
| $nextId = Db::fetchOne($nextIdQuery, array($login)); |
|
|
| if (empty($nextId)) { |
| $nextId = 1; |
| } |
|
|
| return $nextId; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function updateLayoutForUser($login, $idDashboard, $layout) |
| { |
| $bind = array($login, $idDashboard, $layout, $layout); |
| $query = sprintf( |
| 'INSERT INTO `%s` (login, iddashboard, layout) VALUES (?,?,?) ON DUPLICATE KEY UPDATE layout=?', |
| $this->table |
| ); |
| Db::query($query, $bind); |
| } |
|
|
| public static function install() |
| { |
| $dashboard = "login VARCHAR( 100 ) NOT NULL , |
| iddashboard INT NOT NULL , |
| name VARCHAR( 100 ) NULL DEFAULT NULL , |
| layout TEXT NOT NULL, |
| PRIMARY KEY ( login , iddashboard )"; |
|
|
| DbHelper::createTable(self::$rawPrefix, $dashboard); |
| } |
|
|
| public static function uninstall() |
| { |
| Db::dropTables(Common::prefixTable(self::$rawPrefix)); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public static function replaceDashboardWidgets($dashboardLayout, $oldWidgets, $newWidgets) |
| { |
| if (empty($dashboardLayout) || !isset($dashboardLayout->columns)) { |
| return $dashboardLayout; |
| } |
|
|
| $newColumns = array(); |
|
|
| foreach ($dashboardLayout->columns as $id => $column) { |
| $newColumn = array(); |
|
|
| foreach ($column as $widget) { |
| foreach ($oldWidgets as $pos => $oldWidgetData) { |
| $oldWidgetId = WidgetsList::getWidgetUniqueId($oldWidgetData['module'], $oldWidgetData['action'], $oldWidgetData['params']); |
|
|
| if (empty($newWidgets[$pos])) { |
| continue 2; |
| } |
|
|
| $newWidget = $newWidgets[$pos]; |
|
|
| if ($widget->uniqueId == $oldWidgetId) { |
| if (!empty($newWidget['uniqueId'])) { |
| $newWidgetId = $newWidget['uniqueId']; |
| } else { |
| $newWidgetId = WidgetsList::getWidgetUniqueId($newWidget['module'], $newWidget['action'], $newWidget['params']); |
| } |
|
|
| |
| if (self::layoutContainsWidget($dashboardLayout, $newWidgetId)) { |
| continue 2; |
| } |
|
|
| $widget->uniqueId = $newWidgetId; |
| $widget->parameters->module = $newWidget['module']; |
| $widget->parameters->action = $newWidget['action']; |
| foreach ($newWidget['params'] as $key => $value) { |
| $widget->parameters->{$key} = $value; |
| } |
| } |
| } |
|
|
|
|
| $newColumn[] = $widget; |
| } |
|
|
| $newColumns[] = $newColumn; |
| } |
|
|
| $dashboardLayout->columns = $newColumns; |
|
|
| return $dashboardLayout; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected static function layoutContainsWidget($dashboardLayout, $widgetId) |
| { |
| if (!isset($dashboardLayout->columns)) { |
| return false; |
| } |
|
|
| foreach ($dashboardLayout->columns as $id => $column) { |
| foreach ($column as $widget) { |
| if ($widget->uniqueId == $widgetId) { |
| return true; |
| } |
| } |
| } |
|
|
| return false; |
| } |
| } |
|
|