function showCustomField($field, $selected = array(), $editable = true, $department_id = 0) { if (empty($field) || empty($field->type)) { return false; } $return = array(); $return[0] = JText::_($field->label); if ($field->required) { $return[0] .= ' <span class="rst_required">(*)</span>'; } $return[1] = ''; $return[2] = $field->description; switch ($field->type) { // freetext, textbox, textarea, select, multipleselect, checkbox, radio, calendar, calendartime case 'freetext': $field->values = RSTicketsProHelper::isCode($field->values); $return[1] = $field->values; break; case 'textbox': if (isset($selected[$field->name])) { $field->values = $selected[$field->name]; } else { $field->values = RSTicketsProHelper::isCode($field->values); } $name = 'rst_custom_fields[' . $field->name . ']'; if (!empty($department_id)) { $name = 'rst_custom_fields[department_' . $department_id . '][' . $field->name . ']'; } $return[1] = '<input type="text" class="rst_textbox" name="' . $name . '" value="' . RSTicketsProHelper::htmlEscape($field->values) . '" ' . $field->additional . ' />'; if (!$editable) { $return[1] = RSTicketsProHelper::htmlEscape($field->values); } break; case 'textarea': if (isset($selected[$field->name])) { $field->values = $selected[$field->name]; } else { $field->values = RSTicketsProHelper::isCode($field->values); } $name = 'rst_custom_fields[' . $field->name . ']'; if (!empty($department_id)) { $name = 'rst_custom_fields[department_' . $department_id . '][' . $field->name . ']'; } $return[1] = '<textarea class="rst_textarea" name="' . $name . '" ' . $field->additional . '>' . RSTicketsProHelper::htmlEscape($field->values) . '</textarea>'; if (!$editable) { $return[1] = nl2br(RSTicketsProHelper::htmlEscape($field->values)); } break; case 'select': case 'multipleselect': $field->values = RSTicketsProHelper::isCode($field->values); $field->values = str_replace("\r\n", "\n", $field->values); $field->values = explode("\n", $field->values); $multiple = $field->type == 'multipleselect' ? 'multiple="multiple"' : ''; $name = 'rst_custom_fields[' . $field->name . '][]'; if (!empty($department_id)) { $name = 'rst_custom_fields[department_' . $department_id . '][' . $field->name . '][]'; } $return[1] = '<select ' . $multiple . ' class="rst_select" name="' . $name . '" ' . $field->additional . '>'; foreach ($field->values as $value) { $tmp = explode('|', $value, 2); if (count($tmp) == 2) { $value = $tmp[0]; $text = $tmp[1]; } else { $value = $tmp[0]; $text = $tmp[0]; } $found_checked = false; if (preg_match('/\\[c\\]/', $value) || preg_match('/\\[c\\]/', $text)) { $value = str_replace('[c]', '', $value); $text = str_replace('[c]', '', $text); $found_checked = true; } $checked = ''; if (isset($selected[$field->name]) && in_array($value, $selected[$field->name])) { $checked = 'selected="selected"'; } elseif (!isset($selected[$field->name]) && $found_checked) { $checked = 'selected="selected"'; } $return[1] .= '<option ' . $checked . ' value="' . RSTicketsProHelper::htmlEscape($value) . '">' . RSTicketsProHelper::htmlEscape($value) . '</option>'; } $return[1] .= '</select>'; if (!$editable) { $return[1] = ''; if (isset($selected[$field->name])) { if (is_array($selected[$field->name])) { $return[1] = nl2br(RSTicketsProHelper::htmlEscape(implode("\n", $selected[$field->name]))); } else { $return[1] = RSTicketsProHelper::htmlEscape($selected[$field->name]); } } } break; case 'checkbox': $field->values = RSTicketsProHelper::isCode($field->values); $field->values = str_replace("\r\n", "\n", $field->values); $field->values = explode("\n", $field->values); foreach ($field->values as $i => $value) { $tmp = explode('|', $value, 2); if (count($tmp) == 2) { $value = $tmp[0]; $text = $tmp[1]; } else { $value = $tmp[0]; $text = $tmp[0]; } $found_checked = false; if (preg_match('/\\[c\\]/', $value) || preg_match('/\\[c\\]/', $text)) { $value = str_replace('[c]', '', $value); $text = str_replace('[c]', '', $text); $found_checked = true; } $checked = ''; if (isset($selected[$field->name]) && in_array($value, $selected[$field->name])) { $checked = 'checked="checked"'; } elseif (!isset($selected[$field->name]) && $found_checked) { $checked = 'selected="selected"'; } $name = 'rst_custom_fields[' . $field->name . '][]'; if (!empty($department_id)) { $name = 'rst_custom_fields[department_' . $department_id . '][' . $field->name . '][]'; } $return[1] .= '<input ' . $checked . ' type="checkbox" name="' . $name . '" value="' . RSTicketsProHelper::htmlEscape($value) . '" id="rst_custom_field_' . $field->id . '_' . $i . '" ' . $field->additional . ' /> <label for="rst_custom_field_' . $field->id . '_' . $i . '">' . $text . '</label>'; } if (!$editable) { $return[1] = ''; if (isset($selected[$field->name])) { if (is_array($selected[$field->name])) { $return[1] = nl2br(RSTicketsProHelper::htmlEscape(implode("\n", $selected[$field->name]))); } else { $return[1] = RSTicketsProHelper::htmlEscape($selected[$field->name]); } } } break; case 'radio': $field->values = RSTicketsProHelper::isCode($field->values); $field->values = str_replace("\r\n", "\n", $field->values); $field->values = explode("\n", $field->values); foreach ($field->values as $i => $value) { $tmp = explode('|', $value, 2); if (count($tmp) == 2) { $value = $tmp[0]; $text = $tmp[1]; } else { $value = $tmp[0]; $text = $tmp[0]; } $found_checked = false; if (preg_match('/\\[c\\]/', $value) || preg_match('/\\[c\\]/', $text)) { $value = str_replace('[c]', '', $value); $text = str_replace('[c]', '', $text); $found_checked = true; } $checked = ''; if (isset($selected[$field->name]) && $selected[$field->name] == $value) { $checked = 'checked="checked"'; } elseif (!isset($selected[$field->name]) && $found_checked) { $checked = 'checked="checked"'; } $name = 'rst_custom_fields[' . $field->name . ']'; if (!empty($department_id)) { $name = 'rst_custom_fields[department_' . $department_id . '][' . $field->name . ']'; } $return[1] .= '<input ' . $checked . ' type="radio" name="' . $name . '" value="' . RSTicketsProHelper::htmlEscape($value) . '" id="rst_custom_field_' . $field->id . '_' . $i . '" ' . $field->additional . ' /> <label for="rst_custom_field_' . $field->id . '_' . $i . '">' . $text . '</label>'; } if (!$editable) { $return[1] = RSTicketsProHelper::htmlEscape(@$selected[$field->name]); } break; case 'calendar': case 'calendartime': if (isset($selected[$field->name])) { $field->values = $selected[$field->name]; } else { $field->values = RSTicketsProHelper::isCode($field->values); } $name = 'rst_custom_fields[' . $field->name . ']'; if (!empty($department_id)) { $name = 'rst_custom_fields[department_' . $department_id . '][' . $field->name . ']'; } $format = $field->type == 'calendartime' ? RSTicketsProHelper::getConfig('date_format') : RSTicketsProHelper::getConfig('date_format_notime'); $format = RSTicketsProHelper::getCalendarFormat($format); $show_time = $field->type == 'calendartime'; if (!$editable) { $return[1] = RSTicketsProHelper::htmlEscape($field->values); } else { $return[1] = JHTML::_('rsticketsprocalendar.calendar', $show_time, $field->values, $name, 'rst_custom_field_' . $field->id, $format, $field->additional); } break; } return $return; }