diff --git a/forms/CheckboxSetField.php b/forms/CheckboxSetField.php index efa3cee4a..a1531e362 100755 --- a/forms/CheckboxSetField.php +++ b/forms/CheckboxSetField.php @@ -4,6 +4,15 @@ * * ASSUMPTION -> IF you pass your source as an array, you pass values as an array too. * Likewise objects are handled the same. + * + * @todo Document the different source data that can be used + * with this form field - e.g ComponentSet, DataObjectSet, + * array. Is it also appropriate to accept so many different + * types of data when just using an array would be appropriate? + * + * @todo Make use of FormField->createTag() to generate the + * HTML tag(s) for this field. + * * @package forms * @subpackage fields-basic */ @@ -11,11 +20,12 @@ class CheckboxSetField extends OptionsetField { protected $disabled = false; - /** - * Object handles arrays and dosets being passed by reference. - * - * @todo Should use CheckboxField FieldHolder rather than constructing own markup. - */ + /** + * @todo Explain different source data that can be used with this field, + * e.g. SQLMap, DataObjectSet or an array. + * + * @todo Should use CheckboxField FieldHolder rather than constructing own markup. + */ function Field() { Requirements::css(SAPPHIRE_DIR . '/css/CheckboxSetField.css'); @@ -86,10 +96,10 @@ class CheckboxSetField extends OptionsetField { $checked = ''; if(isset($items)) { - in_array($key,$items) ? $checked = " checked=\"checked\"" : $checked = ""; + $checked = (in_array($key, $items)) ? ' checked="checked"' : ''; } - $this->disabled ? $disabled = " disabled=\"disabled\"" : $disabled = ""; + $disabled = ($this->disabled) ? $disabled = ' disabled="disabled"' : ''; $options .= "
  • name[$key]\" type=\"checkbox\" value=\"$key\"$checked $disabled class=\"checkbox\" />
  • \n"; } @@ -108,7 +118,7 @@ class CheckboxSetField extends OptionsetField { if(!$value && $obj && $obj instanceof DataObject && $obj->hasMethod($this->name)) { $funcName = $this->name; $selected = $obj->$funcName(); - $value = $selected->toDropdownMap('ID','ID'); + $value = $selected->toDropdownMap('ID', 'ID'); } parent::setValue($value, $obj); @@ -133,7 +143,7 @@ class CheckboxSetField extends OptionsetField { $record->$fieldname()->setByIDList($idList); } elseif($fieldname && $record) { if($this->value) { - $this->value = str_replace(",", "{comma}", $this->value); + $this->value = str_replace(',', '{comma}', $this->value); $record->$fieldname = implode(",", $this->value); } else { $record->$fieldname = ''; @@ -142,79 +152,93 @@ class CheckboxSetField extends OptionsetField { } /** - * Return the CheckboxSetField value, as an array of the selected item keys + * Return the CheckboxSetField value as an array + * selected item keys. + * + * @return string */ function dataValue() { - if($this->value&&is_array($this->value)){ - // Filter items to those who aren't 0 + if($this->value && is_array($this->value)) { $filtered = array(); - foreach($this->value as $item) if($item) $filtered[] = str_replace(",", "{comma}", $item); - return implode(",", $filtered); - } else { - return ''; + foreach($this->value as $item) { + if($item) { + $filtered[] = str_replace(",", "{comma}", $item); + } + } + + return implode(',', $filtered); } + + return ''; } function performDisabledTransformation() { $clone = clone $this; $clone->setDisabled(true); + return $clone; } /** - * Makes a pretty readonly field - */ - + * Transforms the source data for this CheckboxSetField + * into a comma separated list of values. + * + * @return ReadonlyField + */ function performReadonlyTransformation() { $values = ''; + $data = array(); $items = $this->value; - foreach($this->source as $source) { - if(is_object($source)) { - $sourceTitles[$source->ID] = $source->Title; + if($this->source) { + foreach($this->source as $source) { + if(is_object($source)) { + $sourceTitles[$source->ID] = $source->Title; + } } } - if($items){ + if($items) { // Items is a DO Set - if(is_a($items,'DataObjectSet')){ - - foreach($items as $item){ + if(is_a($items, 'DataObjectSet')) { + foreach($items as $item) { $data[] = $item->Title; } - if($data) { - $values = implode(", ",$data); - } - + if($data) $values = implode(', ', $data); + // Items is an array or single piece of string (including comma seperated string) - }else{ + } else { if(!is_array($items)) { - $items = split(" *, *", trim($items)); + $items = split(' *, *', trim($items)); } - foreach($items as $item){ + + foreach($items as $item) { if(is_array($item)) { $data[] = $item['Title']; - } else if(is_array($this->source) && !empty($this->source[$item])) { + } elseif(is_array($this->source) && !empty($this->source[$item])) { $data[] = $this->source[$item]; - } else if(is_a($this->source, "ComponentSet")){ - //added for editable checkboxset. + } elseif(is_a($this->source, 'ComponentSet')) { $data[] = $sourceTitles[$item]; - } else { $data[] = $item; } } - $values = implode(", ",$data); + + $values = implode(', ', $data); } } - $field = new ReadonlyField($this->name,$this->title ? $this->title : "",$values); + $title = ($this->title) ? $this->title : ''; + + $field = new ReadonlyField($this->name, $title, $values); $field->setForm($this->form); + return $field; } function ExtraOptions() { return FormField::ExtraOptions(); - } + } + } ?> \ No newline at end of file