/** * Returns HTML code for a column in filter mode. * * @param sfAdminColumn $column The column name * @param array $params (optional, default = array()) The parameters * * @return string HTML code */ public function getColumnFilterTag($column, $params = array()) { $user_params = $this->getParameterValue('list.fields.'.$column->getName().'.params'); $user_params = is_array($user_params) ? $user_params : sfToolkit::stringToArray($user_params); $params = $user_params ? array_merge($params, $user_params) : $params; if ($column->isComponent()) { return "get_component('".$this->getModuleName()."', '".$column->getName()."', array('type' => 'filter'))"; } else if ($column->isPartial()) { return "get_partial('".$column->getName()."', array('type' => 'filter', 'filters' => \$filters))"; } $type = $column->getCreoleType(); $default_value = "isset(\$filters['".$column->getName()."']) ? \$filters['".$column->getName()."'] : null"; $unquotedName = 'filters['.$column->getName().']'; $name = "'$unquotedName'"; if ($column->isForeignKey()) { $related_class = isset($params['related_class']) ? $params['related_class'] : $this->getRelatedClassName($column); $peer_method = isset($params['peer_method']) ? $params['peer_method'] : false; $text_method = isset($params['text_method']) ? $params['text_method'] : '__toString' ; $paramArray = array('include_blank' => true, 'related_class'=>$related_class, 'text_method'=>$text_method, 'control_name'=>$unquotedName); if ($peer_method) { $paramArray['peer_method'] = $peer_method; } $params = $this->getObjectTagParams($params, $paramArray); return "object_select_tag($default_value, null, $params)"; } else if ($type == CreoleTypes::DATE) { // rich=false not yet implemented $params = $this->getObjectTagParams($params, array('rich' => true, 'calendar_button_img' => sfConfig::get('sf_admin_web_dir').'/images/date.png')); return "input_date_range_tag($name, $default_value, $params)"; } else if ($type == CreoleTypes::TIMESTAMP) { // rich=false not yet implemented $params = $this->getObjectTagParams($params, array('rich' => true, 'withtime' => true, 'calendar_button_img' => sfConfig::get('sf_admin_web_dir').'/images/date.png')); return "input_date_range_tag($name, $default_value, $params)"; } else if ($type == CreoleTypes::BOOLEAN) { $defaultIncludeCustom = '__("yes or no")'; $option_params = $this->getObjectTagParams($params, array('include_custom' => $defaultIncludeCustom)); $params = $this->getObjectTagParams($params); // little hack $option_params = preg_replace("/'".preg_quote($defaultIncludeCustom)."'/", $defaultIncludeCustom, $option_params); $options = "options_for_select(array(1 => __('yes'), 0 => __('no')), $default_value, $option_params)"; return "select_tag($name, $options, $params)"; } else if ($type == CreoleTypes::CHAR || $type == CreoleTypes::VARCHAR || $type == CreoleTypes::TEXT || $type == CreoleTypes::LONGVARCHAR) { $max = $this->getParameterValue('defaults.filter.char_max', 15); $size = ($column->getSize() < $max ? $column->getSize() : $max); $params = $this->getObjectTagParams($params, array('size' => $size)); return "input_tag($name, $default_value, $params)"; } else if ($type == CreoleTypes::INTEGER || $type == CreoleTypes::TINYINT || $type == CreoleTypes::SMALLINT || $type == CreoleTypes::BIGINT) { $size = $this->getParameterValue('defaults.filter.int_size', 7); $params = $this->getObjectTagParams($params, array('size' => $size)); return "input_tag($name, $default_value, $params)"; } else if ($type == CreoleTypes::FLOAT || $type == CreoleTypes::DOUBLE || $type == CreoleTypes::DECIMAL || $type == CreoleTypes::NUMERIC || $type == CreoleTypes::REAL) { $size = $this->getParameterValue('defaults.filter.float_size', 7); $params = $this->getObjectTagParams($params, array('size' => $size)); return "input_tag($name, $default_value, $params)"; } else { $params = $this->getObjectTagParams($params, array('disabled' => true)); return "input_tag($name, $default_value, $params)"; } }