forked from extern/egroupware
* Tracker: fix slow rendering of edit popup for hugh number of tracker-user
doublicate check was iterating through all options for each option, causing it to take eg. 25s for 7000 options
This commit is contained in:
parent
c7d6dd66d4
commit
cfccc90025
@ -332,27 +332,21 @@ class etemplate_widget_menupopup extends etemplate_widget
|
|||||||
{
|
{
|
||||||
$backup_options = $options;
|
$backup_options = $options;
|
||||||
|
|
||||||
|
$values = array();
|
||||||
foreach($options as $value => &$label)
|
foreach($options as $value => &$label)
|
||||||
{
|
{
|
||||||
// Of course once we re-index the options, we can't detect duplicates
|
// Of course once we re-index the options, we can't detect duplicates
|
||||||
// so check here, as we re-index
|
// so check here, as we re-index
|
||||||
// Duplicates might happen if app programmer isn't paying attention and
|
// Duplicates might happen if app programmer isn't paying attention and
|
||||||
// either uses the same ID in the template, or adds the options twice
|
// either uses the same ID in the template, or adds the options twice
|
||||||
if(!is_array($label) || is_array($label) && !array_key_exists('value',$label))
|
$check_value = (string)(is_array($label) && array_key_exists('value', $label) ? $label['value'] : $value);
|
||||||
|
if (isset($values[$check_value]))
|
||||||
{
|
{
|
||||||
$check_value = (string)(is_array($label) && array_key_exists('value', $label) ? $label['value'] : $value);
|
unset($options[$value]);
|
||||||
if((string)$value === $check_value)
|
continue;
|
||||||
{
|
|
||||||
foreach($options as $key => $existing)
|
|
||||||
{
|
|
||||||
if(is_array($existing) && isset($existing['value']) && (string)$existing['value'] === $check_value && $key != $value)
|
|
||||||
{
|
|
||||||
unset($options[$value]);
|
|
||||||
continue 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
$values[$check_value] = $label;
|
||||||
|
|
||||||
if (is_null($use_array_of_objects) && is_numeric($value) && (!is_array($label) || !isset($label['value'])))
|
if (is_null($use_array_of_objects) && is_numeric($value) && (!is_array($label) || !isset($label['value'])))
|
||||||
{
|
{
|
||||||
$options = $backup_options;
|
$options = $backup_options;
|
||||||
|
Loading…
Reference in New Issue
Block a user