Your IP : 216.73.216.44


Current Path : /home/krobertfnz/www/wp-content/plugins/vamtam-elements-b/metaboxes/classes/
Upload File :
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";
	}
}