$setting )
$checked[$index] = checked( 1, $setting ? 1 : 0, false );
self::_fieldRenderer( 'checkbox', compact( 'id', 'name', 'values', 'checked', 'labels' ) );
}
// Renders a radiobox. More than one value should be provided as an option group.
static function radiobuttonRenderer( $args ) {
$setting = AlsoInThisSeries::config( $args[ 'id' ] );
$id = AlsoInThisSeries::slug . '_' . $args[ 'id' ];
$name = AlsoInThisSeries::slug . "[{$args[ 'id' ]}]";
$values = (array) $args[ 'value' ];
array_walk( $values, 'esc_attr' );
$checked = array();
$labels = (array) $args[ 'label' ];
foreach( $values as $index => $value )
$checked[$index] = checked( $value, $setting, false );
self::_fieldRenderer( 'radiobutton', compact( 'id', 'name', 'values', 'checked', 'labels' ) );
}
// Validates raw input from option submission.
static function validateFields( $fields ) {
$validated = array();
foreach( $fields as $field => $value ) {
if( ! $sanction = isset( self::$registeredfields[ $field ] ) ? self::$registeredfields[ $field ] : false )
continue;
$valid = true;
if( ! empty( $sanction[ 'args' ][ 'raw' ] ) )
;//allow raw
elseif( is_scalar( $value ) )
$value = sanitize_text_field( $value );
elseif( is_array( $value ) )
$value = array_map( 'sanitize_text_field', $value );
switch( $sanction[ 'type' ] ) {
case 'textfield' :
if( $sanction[ 'value' ] && ! preg_match( "/{$sanction[ 'value' ]}/", $value ) ) {
add_settings_error( AlsoInThisSeries::slug, 'invalid-value', "'{$sanction[ 'title' ]}' Invalid input" );
$valid = false;
break;
}
break;
case 'checkbox' :
case 'radiobox' :
if( is_scalar( $sanction[ 'value' ] ) && $value != $sanction[ 'value' ] ) {
$valid = false;
add_settings_error( AlsoInThisSeries::slug, 'invalid-value', "'{$sanction[ 'title' ]}' Invalid input" );
}
elseif( is_array( $sanction[ 'value' ] ) && array_diff( (array) $value, $sanction[ 'value' ] ) ) {
$valid = false;
add_settings_error( AlsoInThisSeries::slug, 'invalid-value', "'{$sanction[ 'title' ]}' Invalid input" );
}
default :
}
if( $valid ) $validated[ $field ] = $value;
}
return apply_filters( 'alsointhisseries_validate_fields', $validated, $fields );
}
// Adds theme option to sanctioned list. Should be called when a field is added.
private static function _addFieldFilter( $type, $id, $title, $value, $args ) {
self::$registeredfields[ $id ] = compact( 'type', 'title', 'value', 'args' );
}
// Delegates UI rendering to the template fragment loader.
private static function _fieldRenderer( $type, $params ) {
extract( $params );
include( "views/admin/optionsfield-{$type}.php" );
}
}
// Register admin functionality.
add_action( 'admin_menu', array( 'AlsoInThisSeriesAdmin', 'admin_menu' ) );
add_action( 'admin_init', array( 'AlsoInThisSeriesAdmin', 'admin_init' ) );
add_action( 'add_meta_boxes', array( 'AlsoInThisSeriesAdmin', 'add_meta_boxes' ) );
add_action( 'save_post', array( 'AlsoInThisSeriesAdmin', 'save_post' ) );
add_filter( 'manage_posts_columns', array( 'AlsoInThisSeriesAdmin', 'manage_posts_columns' ) );
add_filter( 'manage_posts_custom_column', array( 'AlsoInThisSeriesAdmin', 'manage_posts_custom_column' ) );