| Current Path : /home/krobertfnz/www/wp-content/plugins/vamtam-elements-b/metaboxes/classes/ |
| Current File : /home/krobertfnz/www/wp-content/plugins/vamtam-elements-b/metaboxes/classes/metaboxes-generator.php |
<?php
/**
* A wrapper for config_generator that is used to generate general-purpose metaboxes
*/
/**
* class VamtamMetaboxesGenerator
*/
class Vamtam_Additional_Content_B_Metaboxes_Generator {
/**
* Metabox display config
* @var array
*/
private $config;
/**
* Metaboxes options list
* @var array
*/
protected $options;
/**
* Hook into the releavant actions
*
* @param array $config metabox display config
* @param array $options metabox options list
*/
public function __construct( $config, $options ) {
$this->config = apply_filters( 'vamtam_metabox_config', $config );
$this->options = apply_filters( 'vamtam_metabox_options', $options, $this->config );
if ( ! isset( $this->options['ondemand'] ) || $this->options['ondemand'] == false ) {
switch ( current_filter() ) {
case 'add_meta_boxes':
$this->create();
break;
case 'save_post':
$this->save( $this->config['post_id'] );
break;
}
}
}
/**
* Registers the metabox
*/
protected function create() {
if ( function_exists( 'add_meta_box' ) ) {
if ( ! empty( $this->config['callback'] ) && function_exists( $this->config['callback'] ) ) {
$callback = $this->config['callback'];
} else {
$callback = array( $this, 'render' );
}
foreach ( $this->config['pages'] as $page ) {
add_meta_box( $this->config['id'], $this->config['title'], $callback, $page, $this->config['context'], $this->config['priority'] );
}
}
}
/**
* Saves the post metadata
* @param int $post_id current post id
* @return int current post id
*/
protected function save( $post_id ) {
if ( ! isset( $_POST[ $this->config['id'] . '_noncename' ] ) )
return $post_id;
if ( ! wp_verify_nonce( $_POST[ $this->config['id'] . '_noncename' ], plugin_basename( __FILE__ ) ) )
return $post_id;
if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] && ! current_user_can( 'edit_page', $post_id ) )
return $post_id;
elseif ( ! current_user_can( 'edit_post', $post_id ) )
return $post_id;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
foreach ( $this->options as $option ) {
if ( isset( $option['id'] ) && ! empty( $option['id'] ) ) {
if ( ! isset( $option['only'] ) ||
$option['only'] == $_POST['post_type'] ||
in_array( $_POST['post_type'], explode( ',', $option['only'] ) ) ) {
if ( $option['type'] == 'background' || $option['type'] == 'font' ) {
$suboptions = array(
'font' => array(
'size',
'lheight',
'face',
'weight',
'color',
),
'background' => array(
'image',
'color',
'position',
'attachment',
'repeat',
'size',
),
);
foreach ( $suboptions[ $option['type'] ] as $opt ) {
$name = $option['id'] . '-' . $opt;
if ( isset( $_POST[ $name ] ) ) {
update_post_meta( $post_id, $name, $_POST[ $name ] );
} else {
delete_post_meta( $post_id, $name, get_post_meta( $post_id, $name, true ) );
}
}
} else {
if ( isset( $_POST[ $option['id'] ] ) ) {
if ( $option['type'] == 'multiselect' )
$value = serialize( array_unique( $_POST[ $option['id'] ] ) );
else $value = $_POST[ $option['id'] ];
} elseif ( $option['type'] == 'toggle' ) {
$value = 'false';
} else {
$value = false;
}
if ( $value != '' ) {
update_post_meta( $post_id, $option['id'], $value );
} else {
delete_post_meta( $post_id, $option['id'], get_post_meta( $post_id, $option['id'], true ) );
}
}
}
}
}
}
/**
* Renders the metabox
*/
public function render() {
global $post, $vamtam_in_metabox;
$vamtam_in_metabox = true;
echo '<div class="vamtam-config-group metabox">';
wp_nonce_field( plugin_basename( __FILE__ ), $this->config['id'] . '_noncename' );
foreach ( $this->options as $option ) {
if ( ! isset( $option['only'] ) ||
$option['only'] == $post->post_type ||
in_array( $post->post_type, explode( ',', $option['only'] ) ) ) {
if ( isset( $option['id'] ) ) {
$default = get_post_meta( $post->ID, $option['id'], true );
if ( $default != '' ) {
$option['default'] = $default;
}
}
if ( method_exists( $this, $option['type'] ) ) {
$this->{$option['type']}( $option );
} else {
$this->tpl( $option['type'], $option );
}
}
}
$vamtam_in_metabox = false;
echo '</div>';
}
/**
* Single options row template
* @param string $template template name
* @param array $value options row config
*/
protected function tpl( $template, $value ) {
extract( $value );
if ( ! isset( $desc ) )
$desc = '';
if ( ! isset( $default ) )
$default = null;
if ( ! isset( $class ) )
$class = '';
include VAMTAMAC_B_DIR . "templates/$template.php";
}
}