/**
* 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;
}