/plugins/advanced-custom-fields/core/fields/select.php
https://bitbucket.org/iwtechru/rivoinvest.com · PHP · 357 lines · 211 code · 61 blank · 85 comment · 20 complexity · beae51f98162f9d8f1ccc8f9c5080e6f MD5 · raw file
- <?php
- class acf_field_select extends acf_field
- {
- /*
- * __construct
- *
- * Set name / label needed for actions / filters
- *
- * @since 3.6
- * @date 23/01/13
- */
-
- function __construct()
- {
- // vars
- $this->name = 'select';
- $this->label = __("Select",'acf');
- $this->category = __("Choice",'acf');
- $this->defaults = array(
- 'multiple' => 0,
- 'allow_null' => 0,
- 'choices' => array(),
- 'default_value' => ''
- );
-
-
- // do not delete!
- parent::__construct();
-
-
- // extra
- //add_filter('acf/update_field/type=select', array($this, 'update_field'), 5, 2);
- add_filter('acf/update_field/type=checkbox', array($this, 'update_field'), 5, 2);
- add_filter('acf/update_field/type=radio', array($this, 'update_field'), 5, 2);
- }
-
- /*
- * create_field()
- *
- * Create the HTML interface for your field
- *
- * @param $field - an array holding all the field's data
- *
- * @type action
- * @since 3.6
- * @date 23/01/13
- */
-
- function create_field( $field )
- {
- // vars
- $optgroup = false;
-
-
- // determin if choices are grouped (2 levels of array)
- if( is_array($field['choices']) )
- {
- foreach( $field['choices'] as $k => $v )
- {
- if( is_array($v) )
- {
- $optgroup = true;
- }
- }
- }
-
-
- // value must be array
- if( !is_array($field['value']) )
- {
- // perhaps this is a default value with new lines in it?
- if( strpos($field['value'], "\n") !== false )
- {
- // found multiple lines, explode it
- $field['value'] = explode("\n", $field['value']);
- }
- else
- {
- $field['value'] = array( $field['value'] );
- }
- }
-
-
- // trim value
- $field['value'] = array_map('trim', $field['value']);
-
-
- // multiple select
- $multiple = '';
- if( $field['multiple'] )
- {
- // create a hidden field to allow for no selections
- echo '<input type="hidden" name="' . $field['name'] . '" />';
-
- $multiple = ' multiple="multiple" size="5" ';
- $field['name'] .= '[]';
- }
-
-
- // html
- echo '<select id="' . $field['id'] . '" class="' . $field['class'] . '" name="' . $field['name'] . '" ' . $multiple . ' >';
-
-
- // null
- if( $field['allow_null'] )
- {
- echo '<option value="null"> - Select - </option>';
- }
-
- // loop through values and add them as options
- if( is_array($field['choices']) )
- {
- foreach( $field['choices'] as $key => $value )
- {
- if( $optgroup )
- {
- // this select is grouped with optgroup
- if($key != '') echo '<optgroup label="'.$key.'">';
-
- if( is_array($value) )
- {
- foreach($value as $id => $label)
- {
- $selected = in_array($id, $field['value']) ? 'selected="selected"' : '';
-
- echo '<option value="'.$id.'" '.$selected.'>'.$label.'</option>';
- }
- }
-
- if($key != '') echo '</optgroup>';
- }
- else
- {
- $selected = in_array($key, $field['value']) ? 'selected="selected"' : '';
- echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
- }
- }
- }
- echo '</select>';
- }
-
-
- /*
- * create_options()
- *
- * Create extra options for your field. This is rendered when editing a field.
- * The value of $field['name'] can be used (like bellow) to save extra data to the $field
- *
- * @type action
- * @since 3.6
- * @date 23/01/13
- *
- * @param $field - an array holding all the field's data
- */
-
- function create_options( $field )
- {
- $key = $field['name'];
- // implode choices so they work in a textarea
- if( is_array($field['choices']) )
- {
- foreach( $field['choices'] as $k => $v )
- {
- $field['choices'][ $k ] = $k . ' : ' . $v;
- }
- $field['choices'] = implode("\n", $field['choices']);
- }
- ?>
- <tr class="field_option field_option_<?php echo $this->name; ?>">
- <td class="label">
- <label for=""><?php _e("Choices",'acf'); ?></label>
- <p><?php _e("Enter each choice on a new line.",'acf'); ?></p>
- <p><?php _e("For more control, you may specify both a value and label like this:",'acf'); ?></p>
- <p><?php _e("red : Red",'acf'); ?><br /><?php _e("blue : Blue",'acf'); ?></p>
- </td>
- <td>
- <?php
-
- do_action('acf/create_field', array(
- 'type' => 'textarea',
- 'class' => 'textarea field_option-choices',
- 'name' => 'fields['.$key.'][choices]',
- 'value' => $field['choices'],
- ));
-
- ?>
- </td>
- </tr>
- <tr class="field_option field_option_<?php echo $this->name; ?>">
- <td class="label">
- <label><?php _e("Default Value",'acf'); ?></label>
- <p class="description"><?php _e("Enter each default value on a new line",'acf'); ?></p>
- </td>
- <td>
- <?php
-
- do_action('acf/create_field', array(
- 'type' => 'textarea',
- 'name' => 'fields['.$key.'][default_value]',
- 'value' => $field['default_value'],
- ));
-
- ?>
- </td>
- </tr>
- <tr class="field_option field_option_<?php echo $this->name; ?>">
- <td class="label">
- <label><?php _e("Allow Null?",'acf'); ?></label>
- </td>
- <td>
- <?php
- do_action('acf/create_field', array(
- 'type' => 'radio',
- 'name' => 'fields['.$key.'][allow_null]',
- 'value' => $field['allow_null'],
- 'choices' => array(
- 1 => __("Yes",'acf'),
- 0 => __("No",'acf'),
- ),
- 'layout' => 'horizontal',
- ));
- ?>
- </td>
- </tr>
- <tr class="field_option field_option_<?php echo $this->name; ?>">
- <td class="label">
- <label><?php _e("Select multiple values?",'acf'); ?></label>
- </td>
- <td>
- <?php
- do_action('acf/create_field', array(
- 'type' => 'radio',
- 'name' => 'fields['.$key.'][multiple]',
- 'value' => $field['multiple'],
- 'choices' => array(
- 1 => __("Yes",'acf'),
- 0 => __("No",'acf'),
- ),
- 'layout' => 'horizontal',
- ));
- ?>
- </td>
- </tr>
- <?php
-
- }
-
-
- /*
- * format_value_for_api()
- *
- * This filter is appied to the $value after it is loaded from the db and before it is passed back to the api functions such as the_field
- *
- * @type filter
- * @since 3.6
- * @date 23/01/13
- *
- * @param $value - the value which was loaded from the database
- * @param $post_id - the $post_id from which the value was loaded
- * @param $field - the field array holding all the field options
- *
- * @return $value - the modified value
- */
-
- function format_value_for_api( $value, $post_id, $field )
- {
- if( $value == 'null' )
- {
- $value = false;
- }
-
-
- return $value;
- }
-
-
- /*
- * update_field()
- *
- * This filter is appied to the $field before it is saved to the database
- *
- * @type filter
- * @since 3.6
- * @date 23/01/13
- *
- * @param $field - the field array holding all the field options
- * @param $post_id - the field group ID (post_type = acf)
- *
- * @return $field - the modified field
- */
- function update_field( $field, $post_id )
- {
-
- // check if is array. Normal back end edit posts a textarea, but a user might use update_field from the front end
- if( is_array( $field['choices'] ))
- {
- return $field;
- }
-
- // vars
- $new_choices = array();
-
-
- // explode choices from each line
- if( $field['choices'] )
- {
- // stripslashes ("")
- $field['choices'] = stripslashes_deep($field['choices']);
-
- if(strpos($field['choices'], "\n") !== false)
- {
- // found multiple lines, explode it
- $field['choices'] = explode("\n", $field['choices']);
- }
- else
- {
- // no multiple lines!
- $field['choices'] = array($field['choices']);
- }
-
-
- // key => value
- foreach($field['choices'] as $choice)
- {
- if(strpos($choice, ' : ') !== false)
- {
- $choice = explode(' : ', $choice);
- $new_choices[trim($choice[0])] = trim($choice[1]);
- }
- else
- {
- $new_choices[trim($choice)] = trim($choice);
- }
- }
- }
-
-
- // update choices
- $field['choices'] = $new_choices;
-
-
- return $field;
- }
-
- }
- new acf_field_select();
- ?>