* @copyright Copyright (c) 2012, Derek Herman */ if ( ! class_exists( 'OT_Meta_Box' ) ) { class OT_Meta_Box { /* variable to store the meta box array */ private $meta_box; /** * PHP5 constructor method. * * This method adds other methods of the class to specific hooks within WordPress. * * @uses add_action() * * @return void * * @access public * @since 1.0 */ function __construct( $meta_box ) { if ( ! is_admin() ) return; $this->meta_box = $meta_box; add_action( 'add_meta_boxes', array( &$this, 'add_meta_boxes' ) ); add_action( 'save_post', array( &$this, 'save_meta_box' ), 1, 2 ); } /** * Adds meta box to any post type * * @uses add_meta_box() * * @return void * * @access public * @since 1.0 */ function add_meta_boxes() { foreach ( (array) $this->meta_box['pages'] as $page ) { add_meta_box( $this->meta_box['id'], $this->meta_box['title'], array( &$this, 'build_meta_box' ), $page, $this->meta_box['context'], $this->meta_box['priority'], $this->meta_box['fields'] ); } } /** * Meta box view * * @return string * * @access public * @since 1.0 */ function build_meta_box( $post, $metabox ) { echo '
'; } /** * Saves the meta box values * * @return void * * @access public * @since 1.0 */ function save_meta_box( $post_id, $post_object ) { global $pagenow; /* don't save during quick edit */ if ( $pagenow == 'admin-ajax.php' ) return $post_id; /* don't save during autosave */ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; /* don't save if viewing a revision */ if ( $post_object->post_type == 'revision' ) return $post_id; /* verify nonce */ if ( isset( $_POST[ $this->meta_box['id'] . '_nonce'] ) && ! wp_verify_nonce( $_POST[ $this->meta_box['id'] . '_nonce'], $this->meta_box['id'] ) ) return $post_id; /* check permissions */ if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( ! current_user_can( 'edit_post', $post_id ) ) return $post_id; } foreach ( $this->meta_box['fields'] as $field ) { $old = get_post_meta( $post_id, $field['id'], true ); $new = ''; /* there is data to validate */ if ( isset( $_POST[$field['id']] ) ) { /* slider and list item */ if ( in_array( $field['type'], array( 'list-item', 'slider' ) ) ) { /* required title setting */ $required_setting = array( array( 'id' => 'title', 'label' => __( 'Title', 'option-tree' ), 'desc' => '', 'std' => '', 'type' => 'text', 'rows' => '', 'class' => 'option-tree-setting-title', 'post_type' => '', 'choices' => array() ) ); /* get the settings array */ $settings = isset( $_POST[$field['id'] . '_settings_array'] ) ? unserialize( base64_decode( $_POST[$field['id'] . '_settings_array'] ) ) : array(); /* settings are empty for some odd ass reason get the defaults */ if ( empty( $settings ) ) { $settings = 'slider' == $field['type'] ? ot_slider_settings( $field['id'] ) : ot_list_item_settings( $field['id'] ); } /* merge the two settings array */ $settings = array_merge( $required_setting, $settings ); foreach( $_POST[$field['id']] as $k => $setting_array ) { foreach( $settings as $sub_setting ) { /* verify sub setting has a type & value */ if ( isset( $sub_setting['type'] ) && isset( $_POST[$field['id']][$k][$sub_setting['id']] ) ) { $_POST[$field['id']][$k][$sub_setting['id']] = ot_validate_setting( $_POST[$field['id']][$k][$sub_setting['id']], $sub_setting['type'], $sub_setting['id'] ); } } } /* set up new data with validated data */ $new = $_POST[$field['id']]; } else { /* run through validattion */ $new = ot_validate_setting( $_POST[$field['id']], $field['type'], $field['id'] ); } /* insert CSS */ if ( $field['type'] == 'css' ) { /* insert CSS into dynamic.css */ if ( '' !== $new ) { ot_insert_css_with_markers( $field['id'], $new, true ); /* remove old CSS from dynamic.css */ } else { ot_remove_old_css( $field['id'] ); } } } if ( $new && $new !== $old ) { update_post_meta( $post_id, $field['id'], $new ); } else if ( '' == $new && $old ) { delete_post_meta( $post_id, $field['id'], $old ); } } } } } /** * This method instantiates the meta box class & builds the UI. * * @uses OT_Meta_Box() * * @param array Array of arguments to create a meta box * @return void * * @access public * @since 2.0 */ if ( ! function_exists( 'ot_register_meta_box' ) ) { function ot_register_meta_box( $args ) { if ( ! $args ) return; $ot_meta_box =& new OT_Meta_Box( $args ); } } /* End of file ot-meta-box-api.php */ /* Location: ./includes/ot-meta-box-api.php */