From 5c9c4b7e2dd4041d5db9bb157d97d76d73ec3d90 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Fri, 16 Sep 2022 10:46:29 +0200 Subject: [PATCH] store configs as json in database and merge them --- application/controllers/dashboard/Config.php | 63 ++++-------- .../libraries/dashboard/DashboardLib.php | 97 +++++++++++++++++++ .../models/dashboard/Dashboard_model.php | 25 +++++ 3 files changed, 143 insertions(+), 42 deletions(-) create mode 100644 application/libraries/dashboard/DashboardLib.php create mode 100644 application/models/dashboard/Dashboard_model.php diff --git a/application/controllers/dashboard/Config.php b/application/controllers/dashboard/Config.php index 30c066467..5c6ad8040 100644 --- a/application/controllers/dashboard/Config.php +++ b/application/controllers/dashboard/Config.php @@ -11,61 +11,40 @@ class Config extends Auth_Controller { parent::__construct( array( - 'index' => 'basis/mitarbeiter:r', - 'dummy' => 'basis/mitarbeiter:r', + 'index' => 'basis/mitarbeiter:r', + 'dummy' => 'basis/mitarbeiter:r', + 'genWidgetId' => 'basis/mitarbeiter:r' ) ); - $this->load->model('dashboard/Dashboard_Preset_model', 'DashboardPresetModel'); - $this->load->model('dashboard/Dashboard_Override_model', 'DashboardOverrideModel'); + $this->load->library('dashboard/DashboardLib', null, 'DashboardLib'); } public function index() { - $res_presets = $this->DashboardPresetModel->getPresets(1, 'ma0080'); - $defaultconfig = array(); + $dashboard_kurzbz = $this->input->get('db'); + $uid = $this->input->get('uid'); - if( isSuccess($res_presets) && hasData($res_presets) ) - { - $presets = getData($res_presets); - foreach ($presets as $presetobj) - { - if( null !== ($preset = json_decode($presetobj->preset, true)) ) - { - $defaultconfig = array_replace_recursive($defaultconfig, - $preset); - } - } + $dashboard = $this->DashboardLib->getDashboardByKurzbz($dashboard_kurzbz); + if(!$dashboard) { + $this->outputJsonError(array( + 'error' => 'Dashboard ' . $dashboard_kurzbz . ' not found.' + )); } - $res_userconfig = $this->DashboardOverrideModel->getOverride(1, 'ma0080'); - $mergedconfig = array(); - if( isSuccess($res_userconfig) && hasData($res_userconfig) ) - { - $data = getData($res_userconfig); - if( null !== ($userconfig = json_decode($data[0]->override, true)) ) - { - $mergedconfig = array_replace_recursive($defaultconfig, $userconfig); - } - } -/* - header('Content-Type: text/plain'); - print_r($defaultconfig); - print_r($userconfig); - print_r($mergedconfig); - die(); -*/ -/* - $ret = array( - 'defaultconfig' => $defaultconfig, - 'userconfig' => $userconfig, - 'mergedconfig' => $mergedconfig - ); - $this->outputJsonSuccess($ret); - */ + $mergedconfig = $this->DashboardLib->getMergedConfig($dashboard->dashboard_id, $uid); $this->outputJsonSuccess($mergedconfig); } + public function genWidgetId() + { + $dashboard_kurzbz = $this->input->get('db'); + $widgetid = $this->DashboardLib->generateWidgetId($dashboard_kurzbz); + $this->outputJsonSuccess(array( + 'widgetid' => $widgetid['widgetid'] + )); + } + public function dummy() { $defaultconfig = array( diff --git a/application/libraries/dashboard/DashboardLib.php b/application/libraries/dashboard/DashboardLib.php new file mode 100644 index 000000000..a5a39a3c6 --- /dev/null +++ b/application/libraries/dashboard/DashboardLib.php @@ -0,0 +1,97 @@ +_ci =& get_instance(); + + $this->_ci->load->model('dashboard/Dashboard_model', 'DashboardModel'); + $this->_ci->load->model('dashboard/Dashboard_Preset_model', 'DashboardPresetModel'); + $this->_ci->load->model('dashboard/Dashboard_Override_model', 'DashboardOverrideModel'); + } + + public function generateWidgetId($dashboard_kurzbz='') + { + $dashboard_kurzbz = (!empty($dashboard_kurzbz)) ? $dashboard_kurzbz + : self::DEFAULT_DASHBOARD_KURZBZ; + $widgetid_input = time() . '_' . $dashboard_kurzbz . '_' + . bin2hex(random_bytes(self::WIDGET_ID_RANDOM_BYTES)); + $widgetid = md5($widgetid_input); + return array( + 'widgetid' => $widgetid, + 'widgetid_input' => $widgetid_input + ); + } + + public function getDashboardByKurzbz($dashboard_kurzbz) + { + $dashboard = null; + $result = $this->_ci->DashboardModel->getDashboardByKurzbz($dashboard_kurzbz); + if( isSuccess($result) && ($dashboards = getData($result)) ) + { + $dashboard = $dashboards[0]; + } + return $dashboard; + } + + public function getMergedConfig($dashboard_id, $uid) + { + $defaultconfig = $this->getDefaultConfig($dashboard_id, $uid); + $userconfig = $this->getUserConfig($dashboard_id, $uid); + + $mergedconfig = array_replace_recursive($defaultconfig, $userconfig); + + return $mergedconfig; + } + + public function getDefaultConfig($dashboard_id, $uid) + { + $res_presets = $this->_ci->DashboardPresetModel->getPresets($dashboard_id, $uid); + $defaultconfig = array(); + + if( isSuccess($res_presets) && hasData($res_presets) ) + { + $presets = getData($res_presets); + foreach ($presets as $presetobj) + { + if( null !== ($preset = json_decode($presetobj->preset, true)) ) + { + $defaultconfig = array_replace_recursive($defaultconfig, + $preset); + } + } + } + + return $defaultconfig; + } + + public function getUserConfig($dashboard_id, $uid) + { + $res_userconfig = $this->_ci->DashboardOverrideModel->getOverride($dashboard_id, $uid); + $userconfig = array(); + + if( isSuccess($res_userconfig) && hasData($res_userconfig) ) + { + $data = getData($res_userconfig); + if( null !== ($decodedconfig = json_decode($data[0]->override, true)) ) + { + $userconfig = $decodedconfig; + } + } + + return $userconfig; + } + +} diff --git a/application/models/dashboard/Dashboard_model.php b/application/models/dashboard/Dashboard_model.php new file mode 100644 index 000000000..88946ed83 --- /dev/null +++ b/application/models/dashboard/Dashboard_model.php @@ -0,0 +1,25 @@ +dbTable = 'dashboard.tbl_dashboard'; + $this->pk = 'dashboard_id'; + } + + + /** + * Get Dashboard by kurzbz. + * @param string dashboard_kurzbz + * @return array + */ + public function getDashboardByKurzbz($dashboard_kurzbz) + { + return $this->loadWhere(array('dashboard_kurzbz' => $dashboard_kurzbz)); + } +}