/** * Update the widgets * * @param \SpoonFormElement[] $widgetPresets The widgets presets. * @return array */ private function updateWidgets($widgetPresets) { // empty dashboard sequence $this->dashboardSequence = array(); // get users $users = BackendGroupsModel::getUsers($this->id); // loop through users and create objects foreach ($users as $user) { $userObjects[] = new BackendUser($user['id']); } // any users present? if (!empty($userObjects)) { // loop through user objects and get all sequences foreach ($userObjects as $user) { $userSequences[$user->getUserId()] = $user->getSetting('dashboard_sequence'); } } // loop through all widgets foreach ($this->widgetInstances as $widget) { if (!BackendModel::isModuleInstalled($widget['module'])) { continue; } // create instance $instance = new $widget['className']($this->getKernel()); // execute instance $instance->execute(); // create module array if no existence if (!isset($this->dashboardSequence[$widget['module']])) { $this->dashboardSequence[$widget['module']] = array(); } // create dashboard sequence $this->dashboardSequence[$widget['module']] += array($widget['widget'] => array('column' => $instance->getColumn(), 'position' => (int) $instance->getPosition(), 'hidden' => false, 'present' => false)); // loop through selected widgets foreach ($widgetPresets as $preset) { // if selected if ($preset->getChecked()) { // get the preset module name $presetModule = str_replace('widgets_', '', str_replace($widget['widget'], '', $preset->getName())); // if the preset module name matches the widget module name if ($presetModule == $widget['module']) { // remove widgets_[modulename] prefix $selected = str_replace('widgets_' . $widget['module'], '', $preset->getName()); // if right widget set visible if ($selected == $widget['widget']) { $this->dashboardSequence[$widget['module']][$widget['widget']]['present'] = true; } } } } } // build group $userGroup['name'] = $this->frm->getField('name')->getValue(); $userGroup['id'] = $this->id; // build setting $setting['group_id'] = $this->id; $setting['name'] = 'dashboard_sequence'; $setting['value'] = serialize($this->dashboardSequence); // update group BackendGroupsModel::update($userGroup, $setting); // loop through all widgets foreach ($this->widgetInstances as $widget) { // loop through users foreach ($users as $user) { // unset visible if already present if (isset($userSequences[$user['id']][$widget['module']][$widget['widget']])) { $userSequences[$user['id']][$widget['module']][$widget['widget']]['present'] = false; } // get groups for user $groups = BackendGroupsModel::getGroupsByUser($user['id']); // loop through groups foreach ($groups as $group) { // get group sequence $groupSequence = BackendGroupsModel::getSetting($group['id'], 'dashboard_sequence'); // loop through selected widgets foreach ($widgetPresets as $preset) { // if selected if ($preset->getChecked()) { // convert camelcasing to underscore notation $selected = str_replace('widgets_', '', $preset->getName()); // if selected is the right widget if ($selected == $widget['widget']) { // set widgets visible $this->dashboardSequence[$widget['module']][$widget['widget']]['present'] = true; // usersequence has widget? if (isset($userSequences[$user['id']][$widget['module']][$widget['widget']])) { // set visible $userSequences[$user['id']][$widget['module']][$widget['widget']]['present'] = true; } else { // assign module if not yet present if (!isset($userSequences[$user['id']][$widget['module']])) { $userSequences[$user['id']][$widget['module']] = array(); } // add widget $userSequences[$user['id']][$widget['module']] += array($widget['widget'] => array('column' => $instance->getColumn(), 'position' => (int) $instance->getPosition(), 'hidden' => false, 'present' => true)); } } } // widget in visible in other group? if ($groupSequence[$widget['module']][$widget['widget']]['present']) { // set visible $userSequences[$user['id']][$widget['module']][$widget['widget']]['present'] = true; } } } } } // any users present? if (!empty($userObjects)) { // loop through users and update sequence foreach ($userObjects as $user) { $user->setSetting('dashboard_sequence', $userSequences[$user->getUserId()]); } } return $userGroup; }
/** * Update the widgets * * @param \SpoonFormElement[] $widgetPresets The widgets presets. * * @return array */ private function updateWidgets($widgetPresets) { // empty dashboard sequence $this->hiddenOnDashboard = array(); // loop through all widgets foreach ($this->widgetInstances as $widget) { if (!BackendModel::isModuleInstalled($widget['module'])) { continue; } foreach ($widgetPresets as $preset) { if ($preset->getAttribute('id') !== 'widgets' . $widget['module'] . $widget['widget']) { continue; } if (!$preset->getChecked()) { if (!isset($this->hiddenOnDashboard[$widget['module']])) { $this->hiddenOnDashboard[$widget['module']] = array(); } $this->hiddenOnDashboard[$widget['module']][] = $widget['widget']; } } } // build group $userGroup['name'] = $this->frm->getField('name')->getValue(); $userGroup['id'] = $this->id; // build setting $setting['group_id'] = $this->id; $setting['name'] = 'hidden_on_dashboard'; $setting['value'] = serialize($this->hiddenOnDashboard); // update group BackendGroupsModel::update($userGroup, $setting); return $userGroup; }