Skip to content

Populating Time Field #18

@dennisheiden

Description

@dennisheiden

Hi,

I had some trouble to populate a time field which needs 3 default values for HH, MM and AM/PM.

I had to extend the populate_element(...) function with an entry for field_type = time:

public static function populate_element( $field, $field_type, $value )
	{

		$value = maybe_unserialize($value);
		
		switch ( $field_type )
		{
			case 'time':
				if(!empty($value)){
					$string = $value;
					$pm_am = '';
					if(strpos('am',$string) !== false){
						$pm_am = 'am';
						$string = replace('am','',$string);
					}
					if(strpos('pm',$string) !== false){
						$pm_am = 'pm';
						$string = replace('pm','',$string);
					}
					$time	= explode(':',$string);
					if(!is_array($time)) break;
					$inputs = array(
						$field['inputs'][0],
						$field['inputs'][1],
						$field['inputs'][2]
					);
					$inputs[0]['defaultValue'] = $time[0];
					$inputs[1]['defaultValue'] = $time[1];
					$inputs[2]['defaultValue'] = $pm_am;
				}
				$field['inputs'] = $inputs;
				break;
			case 'post_category':

				$field['allowsPrepopulate'] = true;
				$field['inputName'] = $field_type;

				self::$settings['cat_value'] = $value;
				add_filter( 'gform_field_value_' . $field['inputName'], array(__CLASS__, 'return_category_field_value'), 10, 2 );
				#add_filter( 'gform_field_value_' . $field['inputName'], function($value) use($value) { return $value; } );
				break;

			case 'populateTaxonomy':

				$field['allowsPrepopulate'] = true;
				$field['inputName'] = $field['populateTaxonomy'];

				self::$settings['tax_value'][$field['inputName']] = $value;
				add_filter( 'gform_field_value_' . $field['inputName'], array(__CLASS__, 'return_taxonomy_field_value') , 10, 2 );

				$value = (! is_array($value) ) ? array($value) : $value;

				if ( version_compare(GFCommon::$version, '1.9') >= 0 )
				{
					if ( isset($field->choices) )
					{
						foreach ( $field->choices as &$choice ) {
							$choice['isSelected'] = ( in_array($choice['value'], $value) ) ? true : '';
						}
					}
				}
				else
				{
					if ( isset($field['choices']) )
					{
						foreach ( $field['choices'] as &$choice ) {
							$choice['isSelected'] = ( in_array($choice['value'], $value) ) ? true : '';
						}
					}
				}

				#add_filter( 'gform_field_value_' . $field['inputName'], function($value) use($value) { return $value; } );
				break;

			case 'list':

				if ( is_array($value) )
				{
					$new_value = array();
					foreach ( $value as $row )
					{
						$row_array = explode('|', $row);
						$new_value = array_merge($new_value, $row_array);
					}
					$field['allowsPrepopulate'] = true;
					$field['inputName'] = $field['postCustomFieldName'];

					$value = $new_value;
					add_filter( 'gform_field_value_' . $field['inputName'], function($value) use($value) { return $value; } );
				}
				break;

			#case 'select':
			case 'multiselect':
			case 'checkbox':
			#case 'radio':

				$value = (! is_array($value) ) ? array($value) : $value;

				if ( version_compare(GFCommon::$version, '1.9') >= 0 )
				{
					if ( isset($field->choices) )
					{
						foreach ( $field->choices as &$choice ) {
							$choice['isSelected'] = ( in_array($choice['value'], $value) ) ? true : '';
						}
					}
				}
				else
				{
					if ( isset($field['choices']) )
					{
						foreach ( $field['choices'] as &$choice ) {
							$choice['isSelected'] = ( in_array($choice['value'], $value) ) ? true : '';
						}
					}
				}

				break;

			default:

				if ( is_array($value) )
				{
					$value = implode(', ', $value);
				}

				$field['defaultValue'] = $value;
				break;
		}
	
			
		return $field;
	}

Not an elegant solution and without the use for filters, but it works for the moment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions