<?php



if( defined('VP_VERSION') )

	return;



//////////////////////////

// Include Constants    //

//////////////////////////

require_once 'constant.php';



//////////////////////////

// Include Autoloader   //

//////////////////////////

require_once 'autoload.php';



//////////////////////////

// Setup FileSystem     //

//////////////////////////

$vpfs = VP_FileSystem::instance();

$vpfs->add_directories('views'   , VP_VIEWS_DIR);

$vpfs->add_directories('config'  , VP_CONFIG_DIR);

$vpfs->add_directories('data'    , VP_DATA_DIR);

$vpfs->add_directories('includes', VP_INCLUDE_DIR);



//////////////////////////

// Include Data Source  //

//////////////////////////

foreach (glob(VP_DATA_DIR . "/*.php") as $datasource)

{

	require_once($datasource);

}



//////////////////////////

// TGMPA Unsetting      //

//////////////////////////

add_action('after_setup_theme', 'vp_tgm_ac_check');



if( !function_exists('vp_tgm_ac_check') )

{

	function vp_tgm_ac_check()

	{

		add_action('tgmpa_register', 'vp_tgm_ac_vafpress_check');	

	}

}



if( !function_exists('vp_tgm_ac_vafpress_check') )

{

	function vp_tgm_ac_vafpress_check()

	{

		if( defined('VP_VERSION') and class_exists('TGM_Plugin_Activation') )

		{

			foreach (TGM_Plugin_Activation::$instance->plugins as $key => &$plugin)

			{

				if( $plugin['name'] === 'Vafpress Framework Plugin' )

				{

					unset(TGM_Plugin_Activation::$instance->plugins[$key]);

				}

			}

		}

	}

}



//////////////////////////

// Ajax Definition      //

//////////////////////////

add_action('wp_ajax_vp_ajax_wrapper', 'vp_ajax_wrapper');



if( !function_exists('vp_ajax_wrapper') )

{

	function vp_ajax_wrapper()

	{

		$function = $_POST['func'];

		$params   = $_POST['params'];



		if( VP_Security::instance()->is_function_whitelisted($function) )

		{

			if(!is_array($params))

				$params = array($params);



			try {

				$result['data']    = call_user_func_array($function, $params);

				$result['status']  = true;

				$result['message'] = __("Successful", BUNCH_NAME);

			} catch (Exception $e) {

				$result['data']    = '';

				$result['status']  = false;

				$result['message'] = $e->getMessage();		

			}

		}

		else

		{

			$result['data']    = '';

			$result['status']  = false;

			$result['message'] = __("Unauthorized function", BUNCH_NAME);		

		}



		if (ob_get_length()) ob_clean();

		header('Content-type: application/json');

		echo json_encode($result);

		die();

	}

}



/////////////////////////////////

// Pool and Dependencies Init  //

/////////////////////////////////

add_action( 'init'                 , 'vp_metabox_enqueue' );

add_action( 'init'                 , 'vp_sg_enqueue' );

add_action( 'admin_enqueue_scripts', 'vp_enqueue_scripts' );

add_action( 'current_screen'       , 'vp_sg_init_buttons' );



if( !function_exists('vp_metabox_enqueue') )

{

	function vp_metabox_enqueue()

	{

		if( VP_WP_Admin::is_post_or_page() and VP_Metabox::pool_can_output() )

		{

			$loader = VP_WP_Loader::instance();

			$loader->add_main_js( 'vp-metabox' );

			$loader->add_main_css( 'vp-metabox' );

		}

	}

}



if( !function_exists('vp_sg_enqueue') )

{

	function vp_sg_enqueue()

	{

		if( VP_ShortcodeGenerator::pool_can_output() )

		{

			// enqueue dummy js

			$localize = VP_ShortcodeGenerator::build_localize();

			wp_register_script( 'vp-sg-dummy', VP_PUBLIC_URL . '/js/dummy.js', array(), '', false );

			wp_localize_script( 'vp-sg-dummy', 'vp_sg', $localize );

			wp_enqueue_script( 'vp-sg-dummy' );



			$loader = VP_WP_Loader::instance();

			$loader->add_main_js( 'vp-shortcode' );

			$loader->add_main_css( 'vp-shortcode' );

		}

	}

}



add_action('admin_footer', 'vp_post_dummy_editor');



if( !function_exists('vp_post_dummy_editor') )

{

	function vp_post_dummy_editor()

	{

		/**

		 * If we're in post edit page, and the post type doesn't support `editor`

		 * we need to echo out a dummy editor to load all necessary js and css

		 * to be used in our own called wp editor.

		 */

		$loader = VP_WP_Loader::instance();

		$types  = $loader->get_types();

		$dummy  = false;



		if( VP_WP_Admin::is_post_or_page() )

		{

			$types = array_unique( array_merge( $types['metabox'], $types['shortcodegenerator'] ) );

			if( in_array('wpeditor', $types ) )

			{

				if( !VP_ShortcodeGenerator::pool_supports_editor() and !VP_Metabox::pool_supports_editor() )

					$dummy = true;

			}

		}

		else

		{

			$types = $types['option'];

			if( in_array('wpeditor', $types ) )

				$dummy = true;

		}



		if( $dummy )

		{

			echo '<div style="display: none">';

			add_filter( 'wp_default_editor', create_function('', 'return "tinymce";') );

			wp_editor ( '', 'vp_dummy_editor' );

			echo '</div>';		

		}

	}

}



if( !function_exists('vp_sg_init_buttons') )

{

	function vp_sg_init_buttons()

	{

		if( VP_ShortcodeGenerator::pool_can_output() )

		{

			VP_ShortcodeGenerator::init_buttons();

		}

	}

}



if( !function_exists('vp_enqueue_scripts') )

{

	function vp_enqueue_scripts()

	{

		$loader = VP_WP_Loader::instance();

		$loader->build();

	}

}



/**

 * Easy way to get metabox values using dot notation

 * example:

 * 

 * vp_metabox('meta_name.field_name')

 * vp_metabox('meta_name.group_name')

 * vp_metabox('meta_name.group_name.0.field_name')

 * 

 */



if( !function_exists('vp_metabox') )

{

	function vp_metabox($key, $default = null, $post_id = null)

	{

		global $post;



		$vp_metaboxes = VP_Metabox::get_pool();



		if(!is_null($post_id))

		{

			$the_post = get_post($post_id);

			if ( empty($the_post) ) $post_id = null;

		}

			

		if(is_null($post) and is_null($post_id))

			return $default;



		$keys = explode('.', $key);

		$temp = NULL;



		foreach ($keys as $idx => $key)

		{

			if($idx == 0)

			{

				if(array_key_exists($key, $vp_metaboxes))

				{

					$temp = $vp_metaboxes[$key];

					if(!is_null($post_id))

						$temp->the_meta($post_id);

					else

						$temp->the_meta();

				}

				else

				{

					return $default;

				}

			}

			else

			{

				if(is_object($temp) and get_class($temp) === 'VP_Metabox')

				{

					$temp = $temp->get_the_value($key);

				}

				else

				{

					if(is_array($temp) and array_key_exists($key, $temp))

					{

						$temp = $temp[$key];

					}

					else

					{

						return $default;

					}

				}

			}

		}

		return $temp;

	}

}



/**

 * Easy way to get option values using dot notation

 * example:

 * 

 * vp_option('option_key.field_name')

 * 

 */



if( !function_exists('vp_option') )

{

	function vp_option($key, $default = null)

	{

		$vp_options = VP_Option::get_pool();



		if(empty($vp_options))

			return $default;



		$keys = explode('.', $key);

		$temp = NULL;



		foreach ($keys as $idx => $key)

		{

			if($idx == 0)

			{

				if(array_key_exists($key, $vp_options))

				{

					$temp = $vp_options[$key];

					$temp = $temp->get_options();

				}

				else

				{

					return $default;

				}

			}

			else

			{

				if(is_array($temp) and array_key_exists($key, $temp))

				{

					$temp = $temp[$key];

				}

				else

				{

					return $default;

				}

			}

		}

		return $temp;

	}

}



/**

 * EOF

 */