diff --git a/home/index.php b/home/index.php index d54c04fc0f..5dff06278c 100755 --- a/home/index.php +++ b/home/index.php @@ -92,22 +92,6 @@ $GLOBALS['tpl']->pfp('out','notify_window'); } - /* This initializes the users portal_order preference if it does not exist. */ - if(!is_array($GLOBALS['egw_info']['user']['preferences']['portal_order']) && $GLOBALS['egw_info']['apps']) - { - $GLOBALS['egw']->preferences->delete('portal_order'); - @reset($GLOBALS['egw_info']['apps']); - $order = 0; - while (list(,$p) = each($GLOBALS['egw_info']['apps'])) - { - if($GLOBALS['egw_info']['user']['apps'][$p['name']]) - { - $GLOBALS['egw']->preferences->add('portal_order',$order++,$p['id']); - } - } - $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->save_repository(); - } - if(is_array($GLOBALS['egw_info']['user']['preferences']['portal_order'])) { $app_check = Array(); @@ -134,7 +118,10 @@ // Now add the rest of the user's apps, to make sure we pick up any additions to the home display foreach($GLOBALS['egw_info']['user']['apps'] as $app) { - $sorted_apps[] = $app['name']; + if(!in_array($app['name'], $sorted_apps)) + { + $sorted_apps[] = $app['name']; + } } //$GLOBALS['egw']->hooks->process('home',$sorted_apps); @@ -208,6 +195,7 @@ $lastd = 0; $numcols = 2; $curcol = 1; + $searchlist = array(); foreach($sorted_apps as $appname) { if((int)$done[$appname] == 1 || empty($appname)) @@ -230,45 +218,53 @@ //echo "$appname: $thisd
"; if($thisd>0) { - if((($curcol++>$numcols) || ($thisd+$lastd==3)) && $tropen==1) - { - $GLOBALS['tpl']->pfp('out','end_row'); - $tropen = 0; - //$curcol = 1; - } - if(!$tropen) - { - $GLOBALS['tpl']->pfp('out','begin_row'); - $tropen=1; - } - $var['tdwidth'] = ($thisd==2)?'50':'100'; - $var['colspan'] = ($thisd==2)?'1':'2'; - - ob_start(); - $var['content'] = $GLOBALS['egw']->hooks->single('home',$appname); - if (!$var['content'] || $var['content'] == 1) // content has been echoed and not returned - { - $var['content'] = ob_get_contents(); - ob_end_clean(); - } - $GLOBALS['tpl']->set_var($var); - - $GLOBALS['tpl']->pfp('out','cell'); - - if(($thisd!=2 || ($thisd==2&&$lastd==2)) && $tropen) - { - $GLOBALS['tpl']->pfp('out','end_row'); - $tropen = 0; - $lastd = 0; - $curcol = 1; - } - else - { - $lastd = $thisd; - } + $searchlist[$appname] = $thisd; $neworder[] = $appname; + $done[$appname] = 1; + } + } + foreach($neworder as $index => $appname) + { + $thisd = $searchlist[$appname]; + //echo "$appname: $thisd
"; + if((($curcol++>$numcols) || ($thisd==1)) && $tropen==1) + { + $GLOBALS['tpl']->pfp('out','end_row'); + $tropen = 0; + //$curcol = 1; + } + if(!$tropen) + { + $GLOBALS['tpl']->pfp('out','begin_row'); + $tropen=1; + } + + $small = ($thisd>1) && (count($neworder) > $index + 1) && ($searchlist[$neworder[$index + 1]] > 1); + $var['tdwidth'] = $small ? '50' : '100'; + $var['colspan'] = $small ? '1' : '2'; + + ob_start(); + $var['content'] = $GLOBALS['egw']->hooks->single('home',$appname); + if (!$var['content'] || $var['content'] == 1) // content has been echoed and not returned + { + $var['content'] = ob_get_contents(); + ob_end_clean(); + } + $GLOBALS['tpl']->set_var($var); + + $GLOBALS['tpl']->pfp('out','cell'); + + if(($thisd<=1 || ($thisd>1&&$lastd>1)) && $tropen && $var['content']) + { + $GLOBALS['tpl']->pfp('out','end_row'); + $tropen = 0; + $lastd = 0; + $curcol = 1; + } + else + { + $lastd = $thisd; } - $done[$appname] = 1; } $GLOBALS['tpl']->pfp('out','end_table'); diff --git a/phpgwapi/inc/class.preferences.inc.php b/phpgwapi/inc/class.preferences.inc.php index 6e1ddfe6d2..c3864979ef 100644 --- a/phpgwapi/inc/class.preferences.inc.php +++ b/phpgwapi/inc/class.preferences.inc.php @@ -482,7 +482,7 @@ class preferences } break; - case user: + case 'user': default: $this->user[$app_name][$var] = $value; if (!isset($this->forced[$app_name][$var]) || $this->forced[$app_name][$var] === '') @@ -520,38 +520,39 @@ class preferences } $pref = &$this->$type; - if (($all = (is_string($var) && $var == ''))) + //if (($all = (is_string($var) && $var == ''))) // old condition replaced, as all ($all) means that var is not a string and does not have content + if (($all = empty($var))) // to check if $var is regarded as empty (false, 0, '', null, array() should do the trick { - unset($pref[$app_name]); + $pref[$app_name] = null; unset($this->data[$app_name]); } else { - unset($pref[$app_name][$var]); + $pref[$app_name][$var] = null; unset($this->data[$app_name][$var]); } // set the effectiv pref again if needed // foreach ($set_via[$type] as $set_from) { + $arr = &$this->$set_from; if ($all) { - if (isset($this->$set_from[$app_name])) + if (isset($arr[$app_name])) { - $this->data[$app_name] = $this->$set_from[$app_name]; + $this->data[$app_name] = $arr[$app_name]; break; } } else { - $arr = $this->$set_from; if($var && @isset($arr[$app_name][$var]) && $arr[$app_name][$var] !== '') { - $this->data[$app_name][$var] = $this->$set_from[$app_name][$var]; + $this->data[$app_name][$var] = $arr[$app_name][$var]; break; } - unset($arr); } + unset($arr); } reset ($this->data); return $this->data; diff --git a/set_box.php b/set_box.php index 455f97fc90..573e84bd7d 100755 --- a/set_box.php +++ b/set_box.php @@ -25,7 +25,8 @@ function move_boxes($curr_position,$new_order,$offset,$value_to_check,$max_num) { - //echo "MOVE: $curr_position,$new_order,$offset,$value_to_check,$max_num
"; + //error_log(__METHOD__."MOVE: $curr_position,$new_order,$offset,$value_to_check,$max_num
"); + $move_app_id = (int)$GLOBALS['egw_info']['user']['preferences']['portal_order'][$curr_position]; if(isset($GLOBALS['egw_info']['user']['preferences']['portal_order'][$new_order])) { if($new_order == $max_num) @@ -38,24 +39,21 @@ { @krsort($GLOBALS['egw_info']['user']['preferences']['portal_order']); } - while(list($seq_order,$appid) = each($GLOBALS['egw_info']['user']['preferences']['portal_order'])) + foreach($GLOBALS['egw_info']['user']['preferences']['portal_order'] as $seq_order => $appid) { if($seq_order != $value_to_check) { $prev_seq = $seq_order + $offset; - $GLOBALS['egw']->preferences->delete('portal_order',$prev_seq); $GLOBALS['egw']->preferences->add('portal_order',$prev_seq,$appid); } } } else { - $GLOBALS['egw']->preferences->delete('portal_order',$curr_position); $GLOBALS['egw']->preferences->add('portal_order',$curr_position,(int)$GLOBALS['egw_info']['user']['preferences']['portal_order'][$new_order]); } } - $GLOBALS['egw']->preferences->delete('portal_order',$new_order); - $GLOBALS['egw']->preferences->add('portal_order',$new_order,(int)$_GET['app']); + $GLOBALS['egw']->preferences->add('portal_order',$new_order,$move_app_id); $GLOBALS['egw']->preferences->save_repository(); } @@ -93,8 +91,11 @@ move_boxes($curr_position,$new_order,$offset,$max_count,0); break; case 'close': - $GLOBALS['egw']->preferences->add($GLOBALS['egw']->applications->id2name($_GET['app']), 'homepage_display', 0); - $GLOBALS['egw']->preferences->save_repository(); + $portal_varnames = array('mainscreen_showevents', 'homeShowEvents','homeShowLatest','mainscreen_showmail','mainscreen_showbirthdays','mainscreen_show_new_updated','homepage_display'); + $appname = $GLOBALS['egw']->applications->id2name($_GET['app']); + foreach($portal_varnames as $varname) + $GLOBALS['egw']->preferences->add($appname, $varname, 0); + $GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->save_repository(); break; case 'edit': case 'question':