diff --git a/application/controllers/dashboard/Config.php b/application/controllers/dashboard/Config.php index 5c6ad8040..0253942a4 100644 --- a/application/controllers/dashboard/Config.php +++ b/application/controllers/dashboard/Config.php @@ -11,9 +11,13 @@ class Config extends Auth_Controller { parent::__construct( array( - 'index' => 'basis/mitarbeiter:r', - 'dummy' => 'basis/mitarbeiter:r', - 'genWidgetId' => 'basis/mitarbeiter:r' + 'index' => 'dashboard/benutzer:r', + 'dummy' => 'dashboard/benutzer:r', + 'genWidgetId' => 'dashboard/benutzer:rw', + 'addWidgetToPreset' => 'dashboard/admin:rw', + 'removeWidgetFromPreset' => 'dashboard/admin:rw', + 'addWidgetToUserOverride' => 'dashboard/benutzer:rw', + 'removeWidgetFromUserOverride' => 'dashboard/benutzer:rw' ) ); @@ -27,7 +31,8 @@ class Config extends Auth_Controller $dashboard = $this->DashboardLib->getDashboardByKurzbz($dashboard_kurzbz); if(!$dashboard) { - $this->outputJsonError(array( + http_response_code(404); + $this->terminateWithJsonError(array( 'error' => 'Dashboard ' . $dashboard_kurzbz . ' not found.' )); } @@ -45,6 +50,128 @@ class Config extends Auth_Controller )); } + public function addWidgetToPreset() + { + $input = json_decode($this->input->raw_input_stream); + $dashboard_kurzbz = $input->db; + $funktion_kurzbz = $input->funktion_kurzbz; + + $preset = $this->DashboardLib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz); + + $preset_decoded = json_decode($preset->preset, true); + $widgetid = $this->DashboardLib->generateWidgetId($dashboard_kurzbz); + + $preset_decoded['widgets'][$widgetid['widgetid']] = $input->widget; + + $preset->preset = json_encode($preset_decoded); + + $result = $this->DashboardLib->insertOrUpdatePreset($preset); + if( isError($result) ) { + http_response_code(500); + $this->terminateWithJsonError('preset could not be saved'); + } + + $this->outputJsonSuccess(array('msg' => 'preset successfully stored.')); + } + + public function removeWidgetFromPreset() + { + $input = json_decode($this->input->raw_input_stream); + $dashboard_kurzbz = $input->db; + $funktion_kurzbz = $input->funktion_kurzbz; + $widgetid = $input->widgetid; + + $preset = $this->DashboardLib->getPreset($dashboard_kurzbz, $funktion_kurzbz); + if( $preset === null ) { + http_response_code(404); + $this->terminateWithJsonError('preset for dashboard ' + . $dashboard_kurzbz . ' and funktion ' . $funktion_kurzbz + . ' not found.'); + } + + $preset_decoded = json_decode($preset->preset, true); + + if( isset($preset_decoded['widgets'][$widgetid]) ) + { + unset($preset_decoded['widgets'][$widgetid]); + } + else + { + http_response_code(404); + $this->terminateWithJsonError('widgetid ' . $widgetid . ' not found'); + } + + $preset->preset = json_encode($preset_decoded); + $result = $this->DashboardLib->insertOrUpdatePreset($preset); + if( isError($result) ) + { + http_response_code(500); + $this->terminateWithJsonError('failed to remove widget'); + } + $this->outputJsonSuccess(array('msg' => 'preset successfully updated.')); + } + + public function addWidgetToUserOverride() + { + $input = json_decode($this->input->raw_input_stream); + $dashboard_kurzbz = $input->db; + $uid = $input->uid; + + $override = $this->DashboardLib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid); + + $override_decoded = json_decode($override->override, true); + $widgetid = isset($input->widgetid) ? array('widgetid' => $input->widgetid) + : $this->DashboardLib->generateWidgetId($dashboard_kurzbz); + + $override_decoded['widgets'][$widgetid['widgetid']] = $input->widget; + + $override->override = json_encode($override_decoded); + + $result = $this->DashboardLib->insertOrUpdateOverride($override); + if( isError($result) ) { + http_response_code(500); + $this->terminateWithJsonError('override could not be saved'); + } + + $this->outputJsonSuccess(array('msg' => 'override successfully stored.')); + } + + public function removeWidgetFromUserOverride() + { + $input = json_decode($this->input->raw_input_stream); + $dashboard_kurzbz = $input->db; + $uid = $input->uid; + $widgetid = $input->widgetid; + + $override = $this->DashboardLib->getOverride($dashboard_kurzbz, $uid); + if( empty($override) ) { + http_response_code(404); + $this->terminateWithJsonError('userconfig for dashboard ' + . $dashboard_kurzbz . ' not found.'); + } + + $override_decoded = json_decode($override->override, true); + + if( array_key_exists($widgetid, $override_decoded['widgets']) ) + { + unset($override_decoded['widgets'][$widgetid]); + } + else + { + http_response_code(404); + $this->terminateWithJsonError('widgetid ' . $widgetid . ' not found'); + } + + $override->override = json_encode($override_decoded); + $result = $this->DashboardLib->insertOrUpdateOverride($override, $uid); + if( isError($result) ) + { + http_response_code(500); + $this->terminateWithJsonError('failed to remove widget'); + } + $this->outputJsonSuccess(array('msg' => 'override successfully updated.')); + } + public function dummy() { $defaultconfig = array( diff --git a/application/libraries/dashboard/DashboardLib.php b/application/libraries/dashboard/DashboardLib.php index a5a39a3c6..f4edb6490 100644 --- a/application/libraries/dashboard/DashboardLib.php +++ b/application/libraries/dashboard/DashboardLib.php @@ -94,4 +94,95 @@ class DashboardLib return $userconfig; } + public function getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid) + { + $override = $this->getOverride($dashboard_kurzbz, $uid); + if( null !== $override ) { + return $override; + } + + $dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz); + + $emptyoverride = new stdClass(); + $emptyoverride->dashboard_id = $dashboard->dashboard_id; + $emptyoverride->uid = $uid; + $emptyoverride->override = '{"widgets": {}}'; + + return $emptyoverride; + } + + public function getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz) + { + $preset = $this->getPreset($dashboard_kurzbz, $funktion_kurzbz); + if( null !== $preset ) { + return $preset; + } + + $dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz); + + $emptypreset = new stdClass(); + $emptypreset->dashboard_id = $dashboard->dashboard_id; + $emptypreset->funktion_kurzbz = $funktion_kurzbz; + $emptypreset->preset = '{"widgets": {}}'; + + return $emptypreset; + } + + public function getPreset($dashboard_kurzbz, $funktion_kurzbz) + { + $dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz); + $preset = null; + + $result = $this->_ci->DashboardPresetModel + ->getPresetByDashboardAndFunktion($dashboard->dashboard_id, $funktion_kurzbz); + + if( isSuccess($result) && hasData($result) && ($presets = getData($result)) ) + { + $preset = $presets[0]; + } + + return $preset; + } + + public function getOverride($dashboard_kurzbz, $uid) + { + $dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz); + $override = null; + + $result = $this->_ci->DashboardOverrideModel + ->getOverride($dashboard->dashboard_id, $uid); + + if( isSuccess($result) && hasData($result) && ($overrides = getData($result)) ) + { + $override = $overrides[0]; + } + + return $override; + } + + public function insertOrUpdatePreset($preset) + { + if( isset($preset->preset_id) && $preset->preset_id > 0 ) + { + $result = $this->_ci->DashboardPresetModel->update($preset->preset_id, $preset); + } else + { + $result = $this->_ci->DashboardPresetModel->insert($preset); + } + + return $result; + } + + public function insertOrUpdateOverride($override) + { + if( isset($override->override_id) && $override->override_id > 0 ) + { + $result = $this->_ci->DashboardOverrideModel->update($override->override_id, $override); + } else + { + $result = $this->_ci->DashboardOverrideModel->insert($override); + } + + return $result; + } } diff --git a/application/models/dashboard/Dashboard_Preset_model.php b/application/models/dashboard/Dashboard_Preset_model.php index 444869fe6..c899195d4 100644 --- a/application/models/dashboard/Dashboard_Preset_model.php +++ b/application/models/dashboard/Dashboard_Preset_model.php @@ -12,7 +12,6 @@ class Dashboard_Preset_model extends DB_Model $this->pk = 'preset_id'; } - /** * Get Presets of given uid. * @param integer dashboard_id @@ -21,6 +20,48 @@ class Dashboard_Preset_model extends DB_Model */ public function getPresets($dashboard_id, $uid) { - return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz'=> null)); + // TODO: get Funktionen for uid and load all preset for all funktionen for uid + //return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz'=> null)); + $sql = <<execQuery($sql, array($dashboard_id, $uid)); + } + + /** + * Get Preset by Dashboard and Funktion + * @param integer dashboard_id + * @param string funktion_kurzbz + * @return array + */ + public function getPresetByDashboardAndFunktion($dashboard_id, $funktion_kurzbz) + { + return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz' => $funktion_kurzbz)); } }