/home/arranoyd/magicraft/wp-content/plugins/incsub-support/inc/classes/class-settings.php
<?php

class Incsub_Support_Settings {

	public $options_name = 'incsub_support_settings';

	public function __construct() {
		add_filter( 'incsub_support_menus', array( $this, 'filter_menus' ) );
		add_filter( 'support_system_tickets_table_query_args', array( $this, 'filter_admin_tickets_table' ) );
		add_filter( 'support_system_query_get_tickets_args', array( $this, 'filter_query' ) );
		add_filter( 'support_system_add_editor_shortcodes', array( $this, 'toggle_editor_shortcode_button' ) );
		add_filter( 'support_system_front_stylesheet', array( $this, 'set_front_stylesheet' ), 1 );
	}

	public function get( $name ) {
		$settings = $this->get_all();
		if ( isset( $settings[ $name ] ) )
			return $settings[ $name ];

		return false;
	}

	public function get_all() {
		$settings = get_site_option( $this->options_name, array() );
		return wp_parse_args( $settings, $this->get_default_settings() );
	}

	public function update( $new_settings ) {
		$settings = update_site_option( $this->options_name, $new_settings );
	}

	public function set( $name, $value ) {
		$settings = $this->get_all();
		$settings[ $name ] = $value;
		$this->update( $settings );
	}

	public function get_default_settings() {
		$plugin = incsub_support();
		$super_admins = call_user_func( array( $plugin, 'get_super_admins' ) );
		$main_super_admin = ! empty( $super_admins ) ? key( $super_admins ) : false;
		return apply_filters( 'support_system_default_settings', array(
			'incsub_support_menu_name' => __( 'Support', INCSUB_SUPPORT_LANG_DOMAIN ),
			'incsub_support_from_name' => get_bloginfo( 'blogname' ),
			'incsub_support_from_mail' => get_bloginfo( 'admin_email' ),
			'incsub_support_fetch_imap' => 'disabled',
			'incsub_support_imap_frequency' => '',
			'incsub_ticket_privacy' => 'all',
			'incsub_support_tickets_role' => array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' ),
			'incsub_support_faqs_role' => array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' ),
			'incsub_support_main_super_admin' => $main_super_admin, //First of the Super Admins
			'incsub_support_support_page' => 0,
			'incsub_support_create_new_ticket_page' => 0,
			'incsub_support_faqs_page' => 0,
			'incsub_support_blog_id' => false,
			'incsub_support_activate_front' => false,
			'incsub_support_use_default_settings' => true
		) );
	}

	public function filter_menus( $menus ) {
		if ( ( is_multisite() && ! is_network_admin() ) ) {
			$settings = $this->get_all();

			if ( isset( $menus['admin_faq_menu'] ) && ! incsub_support_current_user_can( 'read_faq' ) ) {
				unset( $menus['admin_faq_menu'] );
			}

			if ( isset( $menus['admin_support_menu'] ) && ! incsub_support_current_user_can( 'read_ticket' ) ) {
				unset( $menus['admin_support_menu'] );
			}

			if ( isset( $menus['admin_faq_menu'] ) && ! isset( $menus['admin_support_menu'] ) ) {
				// The parent menu is not present but the child one, we need to change the child menu to be the main one
				add_filter( 'support_system_add_faq_menu_as_submenu', '__return_false' );
			}

		}
		elseif ( ! is_multisite() ) {
			if ( isset( $menus['network_ticket_categories_menu'] ) && ! incsub_support_current_user_can( 'manage_options' ) )
				unset( $menus['network_ticket_categories_menu'] );

			if ( isset( $menus['admin_support_menu'] ) && ! incsub_support_current_user_can( 'read_ticket' ) )
				unset( $menus['admin_support_menu'] );

			if ( isset( $menus['network_faq_categories_menu'] ) && ! incsub_support_current_user_can( 'manage_options' ) )
				unset( $menus['network_faq_categories_menu'] );

			if ( isset( $menus['network_settings_menu'] ) && ! incsub_support_current_user_can( 'manage_options' ) )
				unset( $menus['network_settings_menu'] );

			if ( isset( $menus['network_faqs_menu'] ) && ! incsub_support_current_user_can( 'manage_options' ) )
				unset( $menus['network_faqs_menu'] );

			if ( isset( $menus['network_welcome'] ) && ! incsub_support_current_user_can( 'manage_options' ) )
				unset( $menus['network_welcome'] );

			if ( isset( $menus['admin_faq_menu'] ) && incsub_support_current_user_can( 'manage_options' ) )
				unset( $menus['admin_faq_menu'] );

			if ( isset( $menus['admin_faq_menu'] ) && ! incsub_support_current_user_can( 'read_faq' ) )
				unset( $menus['admin_faq_menu'] );

		}

		return $menus;
	}

	public function filter_admin_tickets_table( $args ) {
		$privacy = incsub_support_get_setting( 'incsub_ticket_privacy' );
		if ( 'requestor' === $privacy && ! incsub_support_current_user_can( 'manage_options' ) )
			$args['user_in'] = array( get_current_user_id() );

		return $args;
	}

	public function filter_query( $args ) {
		$privacy = incsub_support_get_setting( 'incsub_ticket_privacy' );
		if ( 'requestor' === $privacy && ! incsub_support_current_user_can( 'manage_options' ) )
			$args['user_in'] = array( get_current_user_id() );

		return $args;
	}

	public function toggle_editor_shortcode_button( $current ) {

		if ( ! $this->get( 'incsub_support_activate_front' ) )
			return false;

		if ( ! is_admin() )
			return false;

		if ( ! incsub_support_current_user_can( 'manage_options' ) )
			return false;

		if ( is_multisite() ) {
			$blog_id = $this->get( 'incsub_support_blog_id' );
			if ( $blog_id != get_current_blog_id() )
				return false;

			if ( is_network_admin() )
				return false;
		}


		return $current;
	}

	function set_front_stylesheet( $stylesheet ) {
		if ( ! is_support_system() )
			return false;

		if ( $this->get( 'incsub_support_use_default_settings' ) )
			return INCSUB_SUPPORT_ASSETS_URL . 'css/incsub-support.css';
		else
			return false;
	}

}