Fix account selection did not contain primary group members

Was visible in infolog list account filter headers
This commit is contained in:
Nathan Gray 2014-02-18 22:08:15 +00:00
parent 8456cd0c9d
commit aca00c49f7

View File

@ -173,7 +173,7 @@ class etemplate_widget_menupopup extends etemplate_widget
} }
// += to keep further options set by app code // += to keep further options set by app code
self::$request->sel_options[$form_name] += self::typeOptions($this->attrs['type'], self::$request->sel_options[$form_name] += self::typeOptions($this,
// typeOptions thinks # of rows is the first thing in options // typeOptions thinks # of rows is the first thing in options
($this->attrs['rows'] && strpos($this->attrs['options'], $this->attrs['rows']) !== 0 ? $this->attrs['rows'].','.$this->attrs['options'] : $this->attrs['options']), ($this->attrs['rows'] && strpos($this->attrs['options'], $this->attrs['rows']) !== 0 ? $this->attrs['rows'].','.$this->attrs['options'] : $this->attrs['options']),
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name)); $no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name));
@ -340,7 +340,7 @@ class etemplate_widget_menupopup extends etemplate_widget
/** /**
* Fetch options for certain select-box types * Fetch options for certain select-box types
* *
* @param string $widget_type * @param string|etemplate_widget_menupopup $widget_type Type of widget, or actual widget to get attributes since $legacy_options are legacy
* @param string $legacy_options options string of widget * @param string $legacy_options options string of widget
* @param boolean $no_lang=false initial value of no_lang attribute (some types set it to true) * @param boolean $no_lang=false initial value of no_lang attribute (some types set it to true)
* @param boolean $readonly=false for readonly we dont need to fetch all options, only the one for value * @param boolean $readonly=false for readonly we dont need to fetch all options, only the one for value
@ -349,6 +349,11 @@ class etemplate_widget_menupopup extends etemplate_widget
*/ */
public static function typeOptions($widget_type, $legacy_options, &$no_lang=false, $readonly=false, &$value=null) public static function typeOptions($widget_type, $legacy_options, &$no_lang=false, $readonly=false, &$value=null)
{ {
if($widget_type && is_object($widget_type))
{
$widget = $widget_type;
$widget_type = $widget->attrs['type'];
// Legacy / static support
// Have to do this explicitly, since legacy options is not defined on class level // Have to do this explicitly, since legacy options is not defined on class level
$legacy_options = explode(',',$legacy_options); $legacy_options = explode(',',$legacy_options);
foreach($legacy_options as &$field) foreach($legacy_options as &$field)
@ -356,7 +361,7 @@ class etemplate_widget_menupopup extends etemplate_widget
$field = self::expand_name($field, 0, 0,'','',self::$cont); $field = self::expand_name($field, 0, 0,'','',self::$cont);
} }
list($rows,$type,$type2,$type3,$type4,$type5,$type6) = $legacy_options; list($rows,$type,$type2,$type3,$type4,$type5,$type6) = $legacy_options;
}
$no_lang = false; $no_lang = false;
$options = array(); $options = array();
switch ($widget_type) switch ($widget_type)
@ -464,8 +469,14 @@ class etemplate_widget_menupopup extends etemplate_widget
case 'select-account': // options: #rows,{accounts(default)|both|groups|owngroups},{0(=lid)|1(default=name)|2(=lid+name),expand-multiselect-rows,not-to-show-accounts,...)} case 'select-account': // options: #rows,{accounts(default)|both|groups|owngroups},{0(=lid)|1(default=name)|2(=lid+name),expand-multiselect-rows,not-to-show-accounts,...)}
// Get preference for selection display // Get preference for selection display
$select_pref = $GLOBALS['egw_info']['user']['preferences']['common']['account_selection'];
// Get important attributes in a non-legacy way
if($widget != null && $widget->attrs['account_type'])
{
$type = $widget->attrs['account_type'];
}
$select_pref = $GLOBALS['egw_info']['user']['preferences']['common']['account_selection'];
// in case of readonly, we read/create only the needed entries, as reading accounts is expensive // in case of readonly, we read/create only the needed entries, as reading accounts is expensive
if (!is_array($value) && strpos($value,',') !== false) $value = explode(',',$value); if (!is_array($value) && strpos($value,',') !== false) $value = explode(',',$value);
if ($readonly || $select_pref == 'popup') if ($readonly || $select_pref == 'popup')
@ -484,20 +495,33 @@ class etemplate_widget_menupopup extends etemplate_widget
$owngroups = true; $owngroups = true;
foreach($GLOBALS['egw']->accounts->membership() as $group) $mygroups[] = $group['account_id']; foreach($GLOBALS['egw']->accounts->membership() as $group) $mygroups[] = $group['account_id'];
} }
elseif (in_array($type, array('accounts', 'both')) && $select_pref == 'primary_group') elseif (in_array($type, array('', 'accounts', 'both')) && $select_pref == 'primary_group')
{ {
$owngroups = true; $owngroups = true;
$mygroups[] = $GLOBALS['egw_info']['user']['primary_group']; $mygroups[] = $GLOBALS['egw_info']['user']['account_primary_group'];
} }
// Popup is the only preference option that doesn't need more select options // Popup is the only preference option that doesn't need more select options
if($select_pref == 'popup') break; if($select_pref == 'popup') break;
$no_lang = True; $no_lang = True;
if(!$mygroups)
{
$accs = $GLOBALS['egw']->accounts->search(array( $accs = $GLOBALS['egw']->accounts->search(array(
'type' => empty($type) ? 'accounts' : $type, // default is accounts 'type' => empty($type) ? 'accounts' : $type, // default is accounts
'order' => 'account_fullname', // order according to pref of how to display accounts 'order' => 'account_fullname', // order according to pref of how to display accounts
)); ));
}
else
{
foreach($mygroups as $group)
{
$accs = $GLOBALS['egw']->accounts->search(array(
'type' => $group,
'order' => 'account_fullname', // order according to pref of how to display accounts
));
}
}
foreach($accs as $acc) foreach($accs as $acc)
{ {
if ($acc['account_type'] == 'u') if ($acc['account_type'] == 'u')