[Back]
<?php
/**
 * Extend TinyMCE toolbar
 *
 * @package visual-portfolio/tinymce
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class Visual_Portfolio_3rd_TinyMCE
 */
class Visual_Portfolio_3rd_TinyMCE {
	/**
	 * Visual_Portfolio_3rd_TinyMCE constructor.
	 */
	public function __construct() {
		$this->init_hooks();
	}

	/**
	 * Hooks.
	 */
	public function init_hooks() {
		add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
		add_action( 'admin_head', array( $this, 'admin_head' ) );
	}

	/**
	 * Admin Head Action.
	 */
	public function admin_head() {
		if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) ) {
			add_filter( 'mce_external_plugins', array( $this, 'mce_external_plugins' ) );
			add_filter( 'mce_buttons', array( $this, 'mce_buttons' ) );
		}
	}

	/**
	 * Enqueue admin scripts
	 *
	 * @param string $page - page name.
	 */
	public function admin_enqueue_scripts( $page ) {
		if ( 'post.php' === $page || 'post-new.php' === $page ) {
			// add tiny mce data.
			$data_tiny_mce = array(
				'plugin_name' => visual_portfolio()->plugin_name,
				'layouts'     => array(),
			);

			// get all visual-portfolio post types.
			// Don't use WP_Query on the admin side https://core.trac.wordpress.org/ticket/18408 .
			$vp_query = get_posts(
				array(
					'post_type'              => 'vp_lists',
					'posts_per_page'         => -1,
					'paged'                  => -1,
					'update_post_meta_cache' => false,
					'update_post_term_cache' => false,
				)
			);
			foreach ( $vp_query as $post ) {
				$data_tiny_mce['layouts'][] = array(
					'id'    => $post->ID,
					'title' => '#' . $post->ID . ' - ' . $post->post_title,
				);
			}

			// return if no data.
			if ( empty( $data_tiny_mce['layouts'] ) ) {
				return;
			}

			Visual_Portfolio_Assets::enqueue_script( 'visual-portfolio-tinymce-localize', 'build/assets/admin/js/mce-localize' );
			wp_localize_script( 'visual-portfolio-tinymce-localize', 'VPTinyMCEData', $data_tiny_mce );
		}
	}

	/**
	 * Add script for button
	 *
	 * @param array $plugins - available plugins.
	 *
	 * @return mixed
	 */
	public function mce_external_plugins( $plugins ) {
		$plugins['visual_portfolio'] = visual_portfolio()->plugin_url . 'build/assets/admin/js/mce-dropdown.js';
		return $plugins;
	}

	/**
	 * Add dropdown button to tinymce
	 *
	 * @param array $buttons - available buttons.
	 *
	 * @return mixed
	 */
	public function mce_buttons( $buttons ) {
		array_push( $buttons, 'visual_portfolio' );
		return $buttons;
	}
}

new Visual_Portfolio_3rd_TinyMCE();