/home/arranoyd/magicraft/wp-content/plugins/incsub-support/admin/class-incsub-support-admin.php
<?php

/**
 * Handles the Admin side of the plugin
 */
class Incsub_Support_Admin {

	public $menus = array();

	public function __construct() {
		$this->includes();
		$this->add_menus();
	}

	/**
	 * Include needed files
	 */
	private function includes() {
		require_once( 'class-abstract-menu.php' );

		// Network
		require_once( 'class-parent-support-menu.php' );
		require_once( 'class-network-support-menu.php' );
		require_once( 'class-network-ticket-categories-menu.php' );
		require_once( 'class-network-faqs-menu.php' );
		require_once( 'class-network-faq-categories-menu.php' );
		require_once( 'class-network-settings-menu.php' );
		require_once( 'class-network-welcome-menu.php' );

		// Admin
		require_once( 'class-admin-support-menu.php' );
		require_once( 'class-admin-faqs-menu.php' );

		if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
			require_once( 'inc/ajax.php' );
		}
	}


	/**
	 * Create the menu objects
	 */
	private function add_menus() {
		$menus = array();
		$network = false;

		if ( is_multisite() ) {
			if ( is_network_admin() && incsub_support_current_user_can( 'manage_options' ) ) {

				/**
				 * Filters the Support System Menus
				 *
				 * @param Array $menus Support Sytem Menus array
				 	array(
				 		[menu_key] => array(
							[class] => 'PHP Class name',
							[slug] => 'WordPress Admin Menu Slug'
				 		),
				 		...
				 	)
				 */
				$menus = apply_filters( 'incsub_support_menus', array(
					'network_support_menu' => array(
						'class' => 'Incsub_Support_Network_Support_Menu',
						'slug' => 'ticket-manager'
					),
					'network_ticket_categories_menu' => array(
						'class' => 'Incsub_Support_Network_Ticket_Categories',
						'slug' => 'ticket-categories'
					),
					'network_faqs_menu' => array(
						'class' => 'Incsub_Support_Network_FAQ_Menu',
						'slug' => 'support-faq-manager'
					),
					'network_faq_categories_menu' => array(
						'class' => 'Incsub_Support_Network_FAQ_Categories',
						'slug' => 'faq-categories'
					),
					'network_settings_menu' => array(
						'class' => 'Incsub_Support_Network_Settings_Menu',
						'slug' => 'mu-support-settings'
					),
					'network_welcome' => array(
						'class' => 'Incsub_Support_Welcome_Menu',
						'slug' => 'mu-support-welcome'
					)
				) );

				$network = true;
			}
			elseif ( ! is_network_admin() && is_admin() ) {
				/**
				 * Filters the Support System Menus
				 *
				 * @param Array $menus Support Sytem Menus array
				 	array(
				 		[menu_key] => array(
							[class] => 'PHP Class name',
							[slug] => 'WordPress Admin Menu Slug'
				 		),
				 		...
				 	)
				 */
				$menus = apply_filters( 'incsub_support_menus', array(
					'admin_support_menu' => array(
						'class' => 'Incsub_Support_Admin_Support_Menu',
						'slug' => 'ticket-manager'
					),
					'admin_faq_menu' => array(
						'class' => 'Incsub_Support_Admin_FAQ_Menu',
						'slug' => 'support-faq'
					)
				) );

			}
		}
		elseif ( ! is_multisite() && is_admin() ) {
			/**
			 * Filters the Support System Menus
			 *
			 * @param Array $menus Support Sytem Menus array
			 	array(
			 		[menu_key] => array(
						[class] => 'PHP Class name',
						[slug] => 'WordPress Admin Menu Slug'
			 		),
			 		...
			 	)
			 */
			$menus = apply_filters( 'incsub_support_menus', array(
				'admin_support_menu' => array(
					'class' => 'Incsub_Support_Admin_Support_Menu',
					'slug' => 'ticket-manager'
				),
				'network_ticket_categories_menu' => array(
					'class' => 'Incsub_Support_Network_Ticket_Categories',
					'slug' => 'ticket-categories'
				),
				'network_faqs_menu' => array(
					'class' => 'Incsub_Support_Network_FAQ_Menu',
					'slug' => 'support-faq-manager'
				),
				'network_faq_categories_menu' => array(
					'class' => 'Incsub_Support_Network_FAQ_Categories',
					'slug' => 'faq-categories'
				),
				'network_settings_menu' => array(
					'class' => 'Incsub_Support_Network_Settings_Menu',
					'slug' => 'mu-support-settings'
				),
				'network_welcome' => array(
					'class' => 'Incsub_Support_Welcome_Menu',
					'slug' => 'mu-support-welcome'
				),
				'admin_faq_menu' => array(
					'class' => 'Incsub_Support_Admin_FAQ_Menu',
					'slug' => 'support-faq'
				)
			) );
		}

		foreach ( $menus as $key => $menu ) {
			if ( class_exists( $menu['class'] ) ) {
				$args = array( 'slug' => $menu['slug'], 'is_network' => $network );
	            $r = new ReflectionClass( $menu['class'] );
	            $this->menus[ $key ] = $r->newInstanceArgs( $args );
			}
		}
	}
}