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

class Incsub_Support_Network_Settings_Menu extends Incsub_Support_Admin_Menu {

	public function add_menu() {
		parent::add_submenu_page(
			'ticket-manager',
			__( 'Settings', INCSUB_SUPPORT_LANG_DOMAIN ),
			__( 'Support System Settings', INCSUB_SUPPORT_LANG_DOMAIN ),
			is_multisite() ? 'manage_network' : 'manage_options'
		);

	}



	public function render_inner_page() {

		$this->render_tabs();

		$current_tab = $this->get_current_tab();

		/**
		 * Filters the function name that renders the tabs in the Settings screen
		 *
		 * @param Array/String Function to execute
		 */
		$method = apply_filters( 'support_system_render_tab_function', array( $this, 'render_' . $current_tab . '_settings' ) );
		call_user_func( $method );

	}

	public function render_general_settings() {
		$settings = incsub_support_get_settings();

		$args = array(
			'name' => 'super_admin',
			'id' => 'super_admin',
			'show_empty' => false,
			'selected' => $settings['incsub_support_main_super_admin'],
			'echo' => false,
			'value' => 'integer'
		);
		$staff_dropdown = incsub_support_super_admins_dropdown( $args );

		$menu_name = $settings['incsub_support_menu_name'];
		$from_name = $settings['incsub_support_from_name'];
		$from_email = $settings['incsub_support_from_mail'];
		$tickets_role = $settings['incsub_support_tickets_role'];
		$faqs_role = $settings['incsub_support_faqs_role'];
		$ticket_privacy = $settings['incsub_ticket_privacy'];
		$roles = MU_Support_System::get_roles();

		$errors = get_settings_errors( 'incsub-support-settings' );
		include_once( 'views/network-settings-general.php' );
	}

	public function render_front_settings() {

		$settings = incsub_support_get_settings();

		$front_active = $settings['incsub_support_activate_front'];

		$blog_id = $settings['incsub_support_blog_id'];

		$support_pages_dropdown_args = array(
			'selected' => incsub_support_get_support_page_id(),
			'show_option_none' => __( '-- Select a page --', INCSUB_SUPPORT_LANG_DOMAIN ),
			'name' => 'support_page_id',
			'echo' => false
		);



		$submit_ticket_pages_dropdown_args = array(
			'selected' => incsub_support_get_new_ticket_page_id(),
			'show_option_none' => __( '-- Select a page --', INCSUB_SUPPORT_LANG_DOMAIN ),
			'name' => 'create_new_ticket_page_id',
			'echo' => false
		);



		$faqs_pages_dropdown_args = array(
			'selected' => incsub_support_get_faqs_page_id(),
			'show_option_none' => __( '-- Select a page --', INCSUB_SUPPORT_LANG_DOMAIN ),
			'name' => 'faqs_page_id',
			'echo' => false
		);


		$pages_dropdowns = false;
		if ( ! is_multisite() ) {
			$support_pages_dropdown = wp_dropdown_pages( $support_pages_dropdown_args );
			$submit_ticket_pages_dropdown = wp_dropdown_pages( $submit_ticket_pages_dropdown_args );
			$faqs_pages_dropdown = wp_dropdown_pages( $faqs_pages_dropdown_args );

			$create_list_page_url = admin_url( 'post-new.php?post_type=page' );
			$view_list_page_url = get_permalink( $support_pages_dropdown_args['selected'] );

			$create_ticket_form_page_url = admin_url( 'post-new.php?post_type=page' );
			$view_ticket_form_page_url = get_permalink( $submit_ticket_pages_dropdown_args['selected'] );

			$create_faqs_page_url = admin_url( 'post-new.php?post_type=page' );
			$view_faqs_page_url = get_permalink( $faqs_pages_dropdown_args['selected'] );

			$pages_dropdowns = true;
		}
		elseif ( is_multisite() ) {
			$blog_details = get_blog_details( $blog_id );

			if ( $blog_details && $blog_details->blog_id == $blog_id ) {
				switch_to_blog( $blog_id );
				$support_pages_dropdown = wp_dropdown_pages( $support_pages_dropdown_args );
				$submit_ticket_pages_dropdown = wp_dropdown_pages( $submit_ticket_pages_dropdown_args );
				$faqs_pages_dropdown = wp_dropdown_pages( $faqs_pages_dropdown_args );

				$create_list_page_url = admin_url( 'post-new.php?post_type=page' );
				$view_list_page_url = get_permalink( $support_pages_dropdown_args['selected'] );

				$create_ticket_form_page_url = admin_url( 'post-new.php?post_type=page' );
				$view_ticket_form_page_url = get_permalink( $submit_ticket_pages_dropdown_args['selected'] );

				$create_faqs_page_url = admin_url( 'post-new.php?post_type=page' );
				$view_faqs_page_url = get_permalink( $faqs_pages_dropdown_args['selected'] );
				restore_current_blog();

				$pages_dropdowns = true;
			}
			else {
				$blog_id = '';
			}

		}

		if ( $pages_dropdowns ) {
			$support_pages_dropdown .= '<a href="' . esc_url( $create_list_page_url ) . '" target="_blank" class="button-primary support-create-page">' . esc_html__( 'Create new page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a>';
			$support_pages_dropdown .= '<a href="' . esc_url( $view_list_page_url ) . '" target="_blank" class="button-secondary support-view-page">' . esc_html__( 'View page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a>';
			$support_pages_dropdown .= '<br/><span class="description">' . __( 'Remember to insert <code>[support-system-tickets-index]</code> shortcode in this page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</span>';

			$submit_ticket_pages_dropdown .= '<a href="' . esc_url( $create_ticket_form_page_url ) . '" target="_blank" class="button-primary support-create-page">' . esc_html__( 'Create new page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a>';
			$submit_ticket_pages_dropdown .= '<a href="' . esc_url( $view_ticket_form_page_url ) . '" target="_blank" class="button-secondary support-view-page">' . esc_html__( 'View page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a>';
			$submit_ticket_pages_dropdown .= '<br/><span class="description">' . __( 'Remember to insert <code>[support-system-submit-ticket-form]</code> shortcode in this page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</span>';

			$faqs_pages_dropdown .= '<a href="' . esc_url( $create_faqs_page_url ) . '" target="_blank" class="button-primary support-create-page">' . esc_html__( 'Create new page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a>';
			$faqs_pages_dropdown .= '<a href="' . esc_url( $view_faqs_page_url ) . '" target="_blank" class="button-secondary support-view-page">' . esc_html__( 'View page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a>';
			$faqs_pages_dropdown .= '<br/><span class="description">' . __( 'Remember to insert <code>[support-system-faqs]</code> shortcode in this page', INCSUB_SUPPORT_LANG_DOMAIN ) . '</span>';

			$support_pages_dropdown = '<div class="support-page-selector-wrap">' . $support_pages_dropdown . '</div>';
			$submit_ticket_pages_dropdown = '<div class="support-page-selector-wrap">' . $submit_ticket_pages_dropdown . '</div>';
			$faqs_pages_dropdown = '<div class="support-page-selector-wrap">' . $faqs_pages_dropdown . '</div>';
		}

		$use_default_styles = $settings['incsub_support_use_default_settings'];

		$errors = get_settings_errors( 'incsub-support-settings' );
		include_once( 'views/network-settings-front.php' );
	}

	public function render_submit_block() {
		$tab = $this->get_current_tab();
		?>
			<p class="submit">
				<?php wp_nonce_field( 'do-support-settings-' . $tab ); ?>
				<?php submit_button( __( 'Save changes', INCSUB_SUPPORT_LANG_DOMAIN ), 'primary', 'submit-' . $tab, false ); ?>
			</p>
		<?php
	}

	public function on_load() {

		$current_tab = $this->get_current_tab();
		$tabs = $this->get_tabs();

		$validate_method = false;
		foreach ( $tabs as $tab => $name ) {
			if ( isset( $_POST[ 'submit-' . $tab ] ) ) {
				check_admin_referer( 'do-support-settings-' . $current_tab );

				/**
				 * Filters the function name that validates a settings group (tab)
				 *
				 * @param Array/String $function_name Function name that validates the settings tab
				 */
				$validate_method = apply_filters( 'support_system_settings_validate_function', array( $this, 'validate_' . $tab . '_settings' ) );
				$settings = call_user_func( $validate_method );

				/**
				 * Filters the settings after they have been validated for a tab
				 *
				 * @param Array $settings Settings after being validated
				 */
				$settings = apply_filters( 'support_system_validate_' . $current_tab . '_settings', $settings );

				if ( $settings && is_array( $settings ) ) {
					incsub_support_update_settings( $settings );
					if ( ! get_settings_errors( 'incsub-support-settings' ) ) {
						$redirect_to = add_query_arg( 'updated', 'true' );
						wp_redirect( $redirect_to );
						exit;
					}
				}
			}

		}
	}

	function validate_general_settings() {
		$input = $_POST;
		$settings = incsub_support_get_settings();

		// MENU NAME
		if ( isset( $input['menu_name'] ) ) {
			$input['menu_name'] = sanitize_text_field( $input['menu_name'] );
			if ( empty( $input['menu_name'] ) )
				add_settings_error( 'incsub-support-settings', 'menu-name', __( 'Menu name must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
			else
				$settings['incsub_support_menu_name'] = $input['menu_name'];
		}

		// FROM NAME
		if ( isset( $input['from_name'] ) ) {
			$input['from_name'] = sanitize_text_field( $input['from_name'] );
			if ( empty( $input['from_name'] ) )
				add_settings_error( 'incsub-support-settings', 'site-name', __( 'Site name must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
			else
				$settings['incsub_support_from_name'] = $input['from_name'];
		}

		// FROM MAIL
		if ( isset( $input['from_mail'] ) ) {
			$input['from_mail'] = sanitize_email( $input['from_mail'] );
			if ( ! is_email( $input['from_mail'] ) ) {
				add_settings_error( 'incsub-support-settings', 'site-mail', __( 'Email must be a valid email', INCSUB_SUPPORT_LANG_DOMAIN ) );
			}
			else
				$settings['incsub_support_from_mail'] = $input['from_mail'];
		}

		// MAIN SUPER ADMIN
		if ( isset( $input['super_admin'] ) ) {
			$plugin = incsub_support();
			$possible_values = call_user_func( array( $plugin, 'get_super_admins' ) );

			$selected = absint( $input['super_admin'] );
			if ( array_key_exists( $selected, $possible_values ) )
				$settings['incsub_support_main_super_admin'] = absint( $selected );
		}

		// PRIVACY
		if ( isset( $input['privacy'] ) && array_key_exists( $input['privacy'], MU_Support_System::$privacy ) ) {
			$settings['incsub_ticket_privacy'] = $input['privacy'];
		}


		// FETCH IMAP
		if ( isset( $input['fetch_imap'] ) && array_key_exists( $input['fetch_imap'], MU_Support_System::$fetch_imap ) ) {
			$settings['incsub_support_fetch_imap'] = $input['fetch_imap'];
		}


		// ROLES
		$settings['incsub_support_tickets_role'] = array();
		if ( isset( $input['tickets_role'] ) && is_array( $input['tickets_role'] ) ) {
			foreach ( $input['tickets_role'] as $ticket_role ) {
				if ( array_key_exists( $ticket_role, MU_Support_System::get_roles() ) )
					$settings['incsub_support_tickets_role'][] = $ticket_role;
			}
		}

		$settings['incsub_support_faqs_role'] = array();
		if ( isset( $input['faqs_role'] ) && is_array( $input['faqs_role'] ) ) {
			foreach ( $input['faqs_role'] as $faq_role ) {
				if ( array_key_exists( $faq_role, MU_Support_System::get_roles() ) )
					$settings['incsub_support_faqs_role'][] = $faq_role;
			}
		}

		return stripslashes_deep( $settings );
	}

	function validate_front_settings() {
		$input = $_POST;
		$settings = incsub_support_get_settings();

		// FRONT ACTIVE
		$is_active = $settings['incsub_support_activate_front'];
		if ( isset( $input['activate_front'] ) ) {
			$settings['incsub_support_activate_front'] = true;
		}
		else {
			$settings['incsub_support_activate_front'] = false;
			$settings['incsub_support_blog_id'] = false;
			$settings['incsub_support_support_page'] = 0;
			$settings['incsub_support_create_new_ticket_page'] = 0;
			$settings['incsub_support_faqs_ticket_page'] = 0;
			$settings['incsub_support_use_default_settings'] = true;
		}

		// FRONT STYLES
		$is_active = $settings['incsub_support_activate_front'];

		if ( $is_active ) {
			if ( isset( $input['use_default_styles'] ) )
				$settings['incsub_support_use_default_settings'] = true;
			else
				$settings['incsub_support_use_default_settings'] = false;
		}


		// BLOG ID
		$current_blog_id = $settings['incsub_support_blog_id'];
		if ( is_multisite() && isset( $input['support_blog_id'] ) && $settings['incsub_support_activate_front'] ) {
			if ( absint( $input['support_blog_id'] ) && get_blog_details( absint( $input['support_blog_id'] ) ) ) {
				$settings['incsub_support_blog_id'] = absint( $input['support_blog_id'] );
				if ( $current_blog_id != $settings['incsub_support_blog_id'] ) {
					// The blog ID has changed, let's reset the pages
					$settings['incsub_support_support_page'] = 0;
					$settings['incsub_support_create_new_ticket_page'] = 0;
					$settings['incsub_support_faqs_ticket_page'] = 0;
				}
			}
			else {
				add_settings_error( 'incsub-support-settings', 'wrong_blog_id', __( 'The blog ID does not exist', INCSUB_SUPPORT_LANG_DOMAIN ) );
			}
		}

		// SUPPORT PAGES
		if ( ! empty( $input['support_page_id'] ) )
			$settings['incsub_support_support_page'] = absint( $input['support_page_id'] );
		else
			$settings['incsub_support_support_page'] = false;

		if ( ! empty( $input['create_new_ticket_page_id'] ) )
			$settings['incsub_support_create_new_ticket_page'] = absint( $input['create_new_ticket_page_id'] );
		else
			$settings['incsub_support_create_new_ticket_page'] = false;

		if ( ! empty( $input['faqs_page_id'] ) )
			$settings['incsub_support_faqs_page'] = absint( $input['faqs_page_id'] );
		else
			$settings['incsub_support_faqs_page'] = false;


		return $settings;
	}


	protected function render_tabs() {
		$updated = isset( $_GET['updated'] );
		$tabs = $this->get_tabs();
		$menu_slug = $this->slug;

		$menu_url = $this->get_menu_url();
		$current_tab = $this->get_current_tab();
		include( 'views/network-settings-tabs.php' );
	}

	protected function get_tabs() {
		/**
		 * Filters the settings tabs
		 *
		 * @param Array $tabs The tabs array
		 	array(
				[tab_slug] => 'Tab label',
				...
		 	)
		 */
		return apply_filters( 'support_system_settings_tabs', array(
			'general' => __( 'General', INCSUB_SUPPORT_LANG_DOMAIN ),
			'front' => __( 'Front End', INCSUB_SUPPORT_LANG_DOMAIN )
		) );
	}

	protected function get_current_tab() {
		$tabs = $this->get_tabs();
		if ( empty( $_GET['tab'] ) )
			return key( $tabs );

		if ( ! in_array( $_GET['tab'], array_keys( $tabs ) ) )
			return key( $tabs );

		return $_GET['tab'];
	}

}