diff --git a/include/class.forms.php b/include/class.forms.php index 9ef27efb5e8385b313159ef4505edd625ffa14b0..db227a922e162abd06931d2aff6c0b6971fcc600 100644 --- a/include/class.forms.php +++ b/include/class.forms.php @@ -1794,6 +1794,8 @@ class ChoiceField extends FormField { $deleted = array_diff($B, $A); $added = array_map(array($this, 'display'), $added); $deleted = array_map(array($this, 'display'), $deleted); + $added = array_filter($added); + $deleted = array_filter($deleted); if ($added && $deleted) { $desc = sprintf( @@ -2734,23 +2736,52 @@ class DepartmentField extends ChoiceField { } function to_php($value, $id=false) { - if (is_array($id)) { - reset($id); - $id = key($id); + if ($id) { + if (is_array($id)) { + reset($id); + $id = key($id); + } + return $id; + } else { + return $value; } - return $id; } function to_database($dept) { - return ($dept instanceof Dept) - ? array($dept->getName(), $dept->getId()) - : $dept; + if ($dept instanceof Dept) + return array($dept->getName(), $dept->getId()); + + if (!is_array($dept)) { + $choices = $this->getChoices(); + if (isset($choices[$dept])) + $dept = array($choices[$dept], $dept); + } + if (!$dept) + $dept = array(); + + return $dept; } function toString($value) { + if (!is_array($value)) + $value = $this->getChoice($value); + if (is_array($value)) + return implode(', ', $value); return (string) $value; } + function getChoice($value) { + $choices = $this->getChoices(); + $selection = array(); + if ($value && is_array($value)) { + $selection = $value; + } elseif (isset($choices[$value])) { + $selection[] = $choices[$value]; + } + + return $selection; + } + function searchable($value) { return null; }