hueman/option-tree/includes/ot-functions-option-types.php
nikeo 9e205f07aa removed deprecated tags from style.css
fixed some text domains
updated translation files
2016-05-30 08:49:27 +02:00

472 lines
15 KiB
PHP

<?php if ( ! defined( 'OT_VERSION' ) ) exit( 'No direct script access allowed' );
/**
* Functions used to build each option type.
*
* @package OptionTree
* @author Derek Herman <derek@valendesigns.com>
* @copyright Copyright (c) 2013, Derek Herman
* @since 2.0
*/
/**
* Builds the HTML for each of the available option types by calling those
* function with call_user_func and passing the arguments to the second param.
*
* All fields are required!
*
* @param array $args The array of arguments are as follows:
* @param string $type Type of option.
* @param string $field_id The field ID.
* @param string $field_name The field Name.
* @param mixed $field_value The field value is a string or an array of values.
* @param string $field_desc The field description.
* @param string $field_std The standard value.
* @param string $field_class Extra CSS classes.
* @param array $field_choices The array of option choices.
* @param array $field_settings The array of settings for a list item.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_display_by_type' ) ) {
function ot_display_by_type( $args = array() ) {
/* allow filters to be executed on the array */
$args = apply_filters( 'ot_display_by_type', $args );
/* build the function name */
$function_name_by_type = str_replace( '-', '_', 'ot_type_' . $args['type'] );
/* call the function & pass in arguments array */
if ( function_exists( $function_name_by_type ) ) {
call_user_func( $function_name_by_type, $args );
} else {
echo '<p>' . 'Sorry, this function does not exist' . '</p>';
}
}
}
/**
* Radio Images option type.
*
* See @ot_display_by_type to see the full list of available arguments.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_type_radio_image' ) ) {
function ot_type_radio_image( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* format setting outer wrapper */
echo '<div class="format-setting type-radio-image ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . '">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/**
* load the default filterable images if nothing
* has been set in the choices array.
*/
if ( empty( $field_choices ) )
$field_choices = ot_radio_images( $field_id );
/* build radio image */
foreach ( (array) $field_choices as $key => $choice ) {
$src = str_replace( 'OT_URL', OT_URL, $choice['src'] );
$src = str_replace( 'OT_THEME_URL', OT_THEME_URL, $src );
/* make radio image source filterable */
$src = apply_filters( 'ot_type_radio_image_src', $src, $field_id );
/**
* Filter the image attributes.
*
* @since 2.5.3
*
* @param string $attributes The image attributes.
* @param string $field_id The field ID.
* @param array $choice The choice.
*/
$attributes = apply_filters( 'ot_type_radio_image_attributes', '', $field_id, $choice );
echo '<div class="option-tree-ui-radio-images">';
echo '<p style="display:none"><input type="radio" name="' . esc_attr( $field_name ) . '" id="' . esc_attr( $field_id ) . '-' . esc_attr( $key ) . '" value="' . esc_attr( $choice['value'] ) . '"' . checked( $field_value, $choice['value'], false ) . ' class="option-tree-ui-radio option-tree-ui-images" /><label for="' . esc_attr( $field_id ) . '-' . esc_attr( $key ) . '">' . esc_attr( $choice['label'] ) . '</label></p>';
echo '<img ' . $attributes . ' src="' . esc_url( $src ) . '" alt="' . esc_attr( $choice['label'] ) .'" title="' . esc_attr( $choice['label'] ) .'" class="option-tree-ui-radio-image ' . esc_attr( $field_class ) . ( $field_value == $choice['value'] ? ' option-tree-ui-radio-image-selected' : '' ) . '" />';
echo '</div>';
}
echo '</div>';
echo '</div>';
}
}
/**
* Select option type.
*
* See @ot_display_by_type to see the full list of available arguments.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_type_select' ) ) {
function ot_type_select( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* format setting outer wrapper */
echo '<div class="format-setting type-select ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . '">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* filter choices array */
$field_choices = apply_filters( 'ot_type_select_choices', $field_choices, $field_id );
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/* build select */
echo '<select name="' . esc_attr( $field_name ) . '" id="' . esc_attr( $field_id ) . '" class="option-tree-ui-select ' . esc_attr( $field_class ) . '">';
foreach ( (array) $field_choices as $choice ) {
if ( isset( $choice['value'] ) && isset( $choice['label'] ) ) {
echo '<option value="' . esc_attr( $choice['value'] ) . '"' . selected( $field_value, $choice['value'], false ) . '>' . esc_attr( $choice['label'] ) . '</option>';
}
}
echo '</select>';
echo '</div>';
echo '</div>';
}
}
/**
* Sidebar Select option type.
*
* This option type makes it possible for users to select a WordPress registered sidebar
* to use on a specific area. By using the two provided filters, 'ot_recognized_sidebars',
* and 'ot_recognized_sidebars_{$field_id}' we can be selective about which sidebars are
* available on a specific content area.
*
* For example, if we create a WordPress theme that provides the ability to change the
* Blog Sidebar and we don't want to have the footer sidebars available on this area,
* we can unset those sidebars either manually or by using a regular expression if we
* have a common name like footer-sidebar-$i.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.1
*/
if ( ! function_exists( 'ot_type_sidebar_select' ) ) {
function ot_type_sidebar_select( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* format setting outer wrapper */
echo '<div class="format-setting type-sidebar-select ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . '">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/* build page select */
echo '<select name="' . esc_attr( $field_name ) . '" id="' . esc_attr( $field_id ) . '" class="option-tree-ui-select ' . $field_class . '">';
/* get the registered sidebars */
global $wp_registered_sidebars;
$sidebars = array();
foreach( $wp_registered_sidebars as $id=>$sidebar ) {
$sidebars[ $id ] = $sidebar[ 'name' ];
}
/* filters to restrict which sidebars are allowed to be selected, for example we can restrict footer sidebars to be selectable on a blog page */
$sidebars = apply_filters( 'ot_recognized_sidebars', $sidebars );
$sidebars = apply_filters( 'ot_recognized_sidebars_' . $field_id, $sidebars );
/* has sidebars */
if ( count( $sidebars ) ) {
echo '<option value="">-- ' . __( 'Choose Sidebar', 'hueman' ) . ' --</option>';
foreach ( $sidebars as $id => $sidebar ) {
echo '<option value="' . esc_attr( $id ) . '"' . selected( $field_value, $id, false ) . '>' . esc_attr( $sidebar ) . '</option>';
}
} else {
echo '<option value="">' . __( 'No Sidebars', 'hueman' ) . '</option>';
}
echo '</select>';
echo '</div>';
echo '</div>';
}
}
/**
* Text option type.
*
* See @ot_display_by_type to see the full list of available arguments.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_type_text' ) ) {
function ot_type_text( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* format setting outer wrapper */
echo '<div class="format-setting type-text ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . '">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/* build text input */
echo '<input type="text" name="' . esc_attr( $field_name ) . '" id="' . esc_attr( $field_id ) . '" value="' . esc_attr( $field_value ) . '" class="widefat option-tree-ui-input ' . esc_attr( $field_class ) . '" />';
echo '</div>';
echo '</div>';
}
}
/**
* Textarea option type.
*
* See @ot_display_by_type to see the full list of available arguments.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_type_textarea' ) ) {
function ot_type_textarea( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* format setting outer wrapper */
echo '<div class="format-setting type-textarea ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . ' fill-area">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/* build textarea */
wp_editor(
$field_value,
esc_attr( $field_id ),
array(
'editor_class' => esc_attr( $field_class ),
'wpautop' => apply_filters( 'ot_wpautop', false, $field_id ),
'media_buttons' => apply_filters( 'ot_media_buttons', true, $field_id ),
'textarea_name' => esc_attr( $field_name ),
'textarea_rows' => esc_attr( $field_rows ),
'tinymce' => apply_filters( 'ot_tinymce', true, $field_id ),
'quicktags' => apply_filters( 'ot_quicktags', array( 'buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,spell,close' ), $field_id )
)
);
echo '</div>';
echo '</div>';
}
}
/**
* Textarea Simple option type.
*
* See @ot_display_by_type to see the full list of available arguments.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_type_textarea_simple' ) ) {
function ot_type_textarea_simple( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* format setting outer wrapper */
echo '<div class="format-setting type-textarea simple ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . '">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/* filter to allow wpautop */
$wpautop = apply_filters( 'ot_wpautop', false, $field_id );
/* wpautop $field_value */
if ( $wpautop == true )
$field_value = wpautop( $field_value );
/* build textarea simple */
echo '<textarea class="textarea ' . esc_attr( $field_class ) . '" rows="' . esc_attr( $field_rows ) . '" cols="40" name="' . esc_attr( $field_name ) .'" id="' . esc_attr( $field_id ) . '">' . esc_textarea( $field_value ) . '</textarea>';
echo '</div>';
echo '</div>';
}
}
/**
* Upload option type.
*
* See @ot_display_by_type to see the full list of available arguments.
*
* @param array An array of arguments.
* @return string
*
* @access public
* @since 2.0
*/
if ( ! function_exists( 'ot_type_upload' ) ) {
function ot_type_upload( $args = array() ) {
/* turns arguments array into variables */
extract( $args );
/* verify a description */
$has_desc = $field_desc ? true : false;
/* If an attachment ID is stored here fetch its URL and replace the value */
if ( $field_value && wp_attachment_is_image( $field_value ) ) {
$attachment_data = wp_get_attachment_image_src( $field_value, 'original' );
/* check for attachment data */
if ( $attachment_data ) {
$field_src = $attachment_data[0];
}
}
/* format setting outer wrapper */
echo '<div class="format-setting type-upload ' . ( $has_desc ? 'has-desc' : 'no-desc' ) . '">';
/* description */
echo $has_desc ? '<div class="description">' . htmlspecialchars_decode( $field_desc ) . '</div>' : '';
/* format setting inner wrapper */
echo '<div class="format-setting-inner">';
/* build upload */
echo '<div class="option-tree-ui-upload-parent">';
/* input */
echo '<input type="text" name="' . esc_attr( $field_name ) . '" id="' . esc_attr( $field_id ) . '" value="' . esc_attr( $field_value ) . '" class="widefat option-tree-ui-upload-input ' . esc_attr( $field_class ) . '" />';
/* add media button */
echo '<a href="javascript:void(0);" class="ot_upload_media option-tree-ui-button button button-primary light" rel="' . $post_id . '" title="' . __( 'Add Media', 'hueman' ) . '"><span class="icon ot-icon-plus-circle"></span>' . __( 'Add Media', 'hueman' ) . '</a>';
echo '</div>';
/* media */
if ( $field_value ) {
echo '<div class="option-tree-ui-media-wrap" id="' . esc_attr( $field_id ) . '_media">';
/* replace image src */
if ( isset( $field_src ) )
$field_value = $field_src;
if ( preg_match( '/\.(?:jpe?g|png|gif|ico)$/i', $field_value ) )
echo '<div class="option-tree-ui-image-wrap"><img src="' . esc_url( $field_value ) . '" alt="" /></div>';
echo '<a href="javascript:(void);" class="option-tree-ui-remove-media option-tree-ui-button button button-secondary light" title="' . __( 'Remove Media', 'hueman' ) . '"><span class="icon ot-icon-minus-circle"></span>' . __( 'Remove Media', 'hueman' ) . '</a>';
echo '</div>';
}
echo '</div>';
echo '</div>';
}
}
/* End of file ot-functions-option-types.php */
/* Location: ./includes/ot-functions-option-types.php */