<?php

/**
 * Is This UserFeedback Pro?
 *
 * We use this function userfeedback_ to determine if the install is a pro version or a lite version install of UserFeedback.
 * If the install is a lite version we disable the install from admin functionality[1] for addons as WordPress.org requires us to,
 * we change the links for where to get support (wp.org forum for free; our site for pro), we use this determine what class to load as
 * the base class in addons (to avoid fatal errors) and we use this on the system info page to know what constants to display values for
 * as the lite and pro versions of our plugin have different constants (and names for those constants) you can declare and use.
 *
 * [1] Note: This is not "feature-locking" under GPL guidelines but rather something WordPress.org requires us to do to stay
 * in compliance with their rules. We wish we didn't have to do this, as in our oppinion this diminishes the user experience
 * of users installing our free and premium addons, and we'd love to turn this on for non-Pro installs, but we're not allowed to.
 * If WordPress.org ever changes their mind on this subject, we'd totally turn on that feature for Lite installs in a heartbeat.
 *
 * @todo  Are we allowed to turn on admin installing if the user has to manually declare a PHP constant (and thus would not be on
 * either by default or via any sort of user interface)? If so, we could add a constant for forcing Pro version so that users can see
 * for themselves that we're not feature locking anything inside the plugin + it would make it easier for our team to test stuff (both via
 * Travis-CI but also when installing addons to test with the Lite version). Also this would allow for a better user experience for users
 * who want that feature.
 *
 * @since 1.0.0
 * @access public
 *
 * @return bool True if pro version.
 */
function userfeedback_is_pro_version()
{
	return class_exists('UserFeedback');
}

function userfeedback_is_licensed()
{
	return UserFeedback()->license->is_site_licensed() || UserFeedback()->license->is_network_licensed();
}

function userfeedback_get_license_type()
{
	$license_type = UserFeedback()->license->get_site_license_type();

	if (empty($license_type)) {
		return UserFeedback()->license->get_network_license_type();
	}

	return $license_type;
}

/**
 * Get the user roles of this WordPress blog
 *
 * @return array
 */
function userfeedback_get_roles()
{
	global $wp_roles;

	$all_roles = $wp_roles->roles;
	$roles     = array();

	/**
	 * Filter: 'editable_roles' - Allows filtering of the roles shown within the plugin (and elsewhere in WP as it's a WP filter)
	 *
	 * @api array $all_roles
	 */
	$editable_roles = apply_filters('editable_roles', $all_roles);

	foreach ($editable_roles as $id => $name) {
		$roles[$id] = translate_user_role($name['name']);
	}

	return $roles;
}

/**
 * Get the user roles which can manage options. Used to prevent these roles from getting unselected in the settings.
 *
 * @return array
 */
function userfeedback_get_manage_options_roles()
{
	global $wp_roles;

	$all_roles = $wp_roles->roles;
	$roles     = array();

	/**
	 * Filter: 'editable_roles' - Allows filtering of the roles shown within the plugin (and elsewhere in WP as it's a WP filter)
	 *
	 * @api array $all_roles
	 */
	$editable_roles = apply_filters('editable_roles', $all_roles);

	foreach ($editable_roles as $id => $role) {
		if (isset($role['capabilities']['manage_options']) && $role['capabilities']['manage_options']) {
			$roles[$id] = translate_user_role($role['name']);
		}
	}

	return $roles;
}

function userfeedback_is_dev_url($url = '')
{
	$is_local_url = false;
	// Trim it up
	$url = strtolower(trim($url));
	// Need to get the host...so let's add the scheme so we can use parse_url
	if (false === strpos($url, 'http://') && false === strpos($url, 'https://')) {
		$url = 'http://' . $url;
	}
	$url_parts = parse_url($url);
	$host      = !empty($url_parts['host']) ? $url_parts['host'] : false;
	if (!empty($url) && !empty($host)) {
		if (false !== ip2long($host)) {
			if (!filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
				$is_local_url = true;
			}
		} elseif ('localhost' === $host) {
			$is_local_url = true;
		}

		$tlds_to_check = array('.local', ':8888', ':8080', ':8081', '.invalid', '.example', '.test');
		foreach ($tlds_to_check as $tld) {
			if (false !== strpos($host, $tld)) {
				$is_local_url = true;
				break;
			}
		}
		if (substr_count($host, '.') > 1) {
			$subdomains_to_check = array('dev.', '*.staging.', 'beta.', 'test.');
			foreach ($subdomains_to_check as $subdomain) {
				$subdomain = str_replace('.', '(.)', $subdomain);
				$subdomain = str_replace(array('*', '(.)'), '(.*)', $subdomain);
				if (preg_match('/^(' . $subdomain . ')/', $host)) {
					$is_local_url = true;
					break;
				}
			}
		}
	}
	return $is_local_url;
}

function userfeedback_get_licensing_url()
{
	return apply_filters('userfeedback_get_licensing_url', 'https://www.userfeedback.com');
}

function userfeedback_get_asset_version()
{
	if (userfeedback_is_debug_mode() || (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG)) {
		return time();
	} else {
		return USERFEEDBACK_VERSION;
	}
}

function userfeedback_is_debug_mode()
{
	$debug_mode = false;
	if (defined('USERFEEDBACK_DEBUG_MODE') && USERFEEDBACK_DEBUG_MODE) {
		$debug_mode = true;
	}

	return apply_filters('userfeedback_is_debug_mode', $debug_mode);
}

function userfeedback_get_inline_menu_icon()
{
	$scheme          = get_user_option('admin_color', get_current_user_id());
	$use_dark_scheme = $scheme === 'light';
	if ($use_dark_scheme) {
		return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFQUlEQVRYha2Yb2hXZRTHP+c3nc6pm07NF0KWWUtSo0wqzBdiZRItTKMaEZXSi0zRNAsqTBKKSFOa0B8Jigqz2lSwLMtqRURgRuCCLLNmselyZups2+/04pzbnt3de3eTDlzufc5znvN8n+ec55zzXFFV8pKITANOqmpTP3JTgIKq7sutPCJVzfUABeAb4DSwMENuKdABNObV3Wv8fwB0C6DAUX8/67sQ9Q8ANsVk5v5vgIDKWHsvcAgYCWzzCbc6kFJgh/PqgVHAb8DnWTpzA3LzHARmeXuqT/Zo0L/eeZuAV/x7fbRrwJPOu9Dbc4EDgJwNoMmurAt4Bljt7cmBjACvOl+BzTEdVzj/EWAj0O3tC84G0AIf3BRMeDz0GZcbBvzqKy+L9Q30A6AxXTdmARqQcPAAyv29CBjjO1RU1SKAiIwGFgLX+MrbgBnAh5ECVe0UkUMO6nHgFLA70J1McacD5gHbfTXzg77qwBeOBysPn830PnnVwXety7wL1AAV/ZoM+MIHdQCfAdfF+s8H/koBEz0rU9xgLtAInHG5j/KYrNWf8ap6OmFD7w+2/Cugwd/NmOkqgbIUS+wEdorIEOAwFqv6UBKgihQwANNc0b2quh1ARIZi/nUqZUycOrDDcCSps5AAaJBPkkStwNVAs4i8JiLHgBPASRFpFZEGEZktIpIBqBIoIWWH4nZegtl3fIofjAKeoyemfAe8hZnu64D/NjAsRcdEl1mcx6lvc+HLU6L3O97/JXBlgszF9KSVvXhswkxUC6wLdKzIA2iWC1+fMNlK72sASlMjrQHf4LIvAw8B7fScwmNAZ7DDs7MARSmjNsYf7oqak0wBjAXuBlb5Lo9wE0Yg6rHAOdjlR2KB9Qc384o0QOe4giUx/u3OX5oA5gEsCoexqBnYAxTTfMXHlvuOF4F5SYBKHPGaGH+jTzQxxefSnnVpYAIdg9x0PwEDkwSOAHUx3hafoDzGP5AB5gQ56h/XU+NjauJxCCxRjo7xOvw9ImKISBUwIWF8RLtVtT2jP6SdWBKe1QuQiCwDLsKcNKSoqJ8e8BJTREAHc4JBVTuBn4Gx/wISkflYndyNOXdI2/29OOAd7mfSIXkBOZUDxTACt2A78SLQnmDnBszOiwLeraT70Ld5/Mf1jPMxqyLGWqxcnYoFMqVvBTgOK9y7gOVAifMfdF4SqJk5Aa3FLFMNduxagQbvvJOUfIb51/f0lKSrsROyHCtlIyDtrrMJqOoHzAysRvrA28wmSBfAtd7uk6u8vwwr/JOqxm4sl01wvZ3AfhJyo+taAPyJhYi/gekCPIXdNitV9YyIXIIFqptVdVsf13MSkVJgJlZF4rvSqKq/BzJzgNexcPEp8LFPXAHcAFzqoKcAddjR5z2Cay/m4Arcl9cp+zFJFfA0dslMOwB1wD1AewGrTw4Ei2/zVcSP/lmRqrap6irs8gAwid7xDOAuzNwlgmXxF1T14ahXRPZjtU1k3+g5Tk8pkUUFzCwVWC003N/DgGVYIXheIF/EfmQcFczDW4DnsVtBCxbUtmIOPAAzY6MPLgMG+/dlDrIADHWlYL4QpZuZWLjYgp3SOb7QMbFFFLF6LDNB7sGcri7FP7qwWmcX9t8oSWaDA6zCqomXUuZ6U1UpYDXxH5jfgKWET/y7zXfolIgkJeJMEpES/xwMXKWq3aq6CLu9PAH8Eog/Fn2UYnlkDWa2c719E3Y/f8NX0AL8GHuianAXtuXx/lZ6brR9/npgcWgHcEfEkyg6ZqyyBrt1ptE+X9SkDJl6VX0/cyKnfwBb6gwNaZ8ExgAAAABJRU5ErkJggg';
	} else {
		return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AoEBjcfBsDvpwAABQBJREFUWMO1mGmollUQgJ9z79Vc01LLH0GLWRqlUhYV5o+LbRIVbVQSUSn9qJTKsqDCoqCINKUbtBEUFbbeDGyz1SIiaCHIINu18KZ1bbkuV+/Tj+arw8v7fvdVcuDjvGdmzsycM3Nm5nywE6BOVSfW4JukTmF3gtqifqJuVmc34ZunblFX7W6DzvYf2BDjPWpLRm9T7y/wzPw/DRhZmH+sfq/urb4YCp8JQwaqLwXuBXW0+pP6XjOZO+ueb9X2mE8OZTdl9MWBu199NL4XN05NvT1wh8R8prpGTbti0BEhbLt6t7ow5kdkPEl9zP/gkYKMowN/o7pU3RHzg3fFoHNj8epM4aY8ZoJvuPpj7HxwgTYgLoAFWac1091WgR8a4xxgH2Ah0JdS6gtlY4DZwAnADmAjMA14vSEgpdSrfg9sBm4BeoCVmex6gayepS6P3ZyT0SZksbDJcnikcPMmZN+zgud59Qx1RB2D3o9FW9R31ZMK9IPUP20O11XInqmuUrcG3xt1XNYVvwNSSptL+K/IjvxDoDPGteG6kcDgMkUppRXACnUIsA7YUNegERXGAEwNQZellJbHzodFfPXUjIwtwHDglzJiS4lBe4SSMugCjgfWqo+rvwF/AH+pXWqnOqOfXDMSaK06oaKf54Z/D6igj1bvzXLK5+rTYchHGf5ZdXiFjPHBc2Udg84P5qMqsvdzQf9APbaEZ2JWVj5u5KbIV7PURZmM+XUMag/mk0to1wWtUx3YT9lZErwPq9er3dkt/E3tzU54Rp2SMauA3zMErS1zhTpWvURdEKe8V7jQrOBOUwcF/97qbPWrcPP8KoP2DQFzC/gLAj+vZM1Vak8hF61V31L7msWKOjROvE89q4yhNSy+rYBfGorGV8RcFSyqESZ7hOu+UQeUMfyidhRwy0LB0AJ+TRNj/qjb/0QpUT2jpYS+ERhTkswA9sqEjALGNdGzMqXUXTNZrogi3F5sJ64GDgXGFhasjvGYDDe4HyXf1i3qKaVe4DtgbF6ZzwHuiZq0b2HN8hjzAF3Xj9IhO9mGDQX68gy8PpqoB9XuEj93hp/nZLjzmsTQZzvR9uwXaxY0EHdEuzo5EpklHeB+0bhvV69RWwN/beDKYHpNg+6I2z2hce261M4gXlRVz9RD1S+zlnRh3JBropVtQHfIXB3B38yYadEjvdZAzMjLhXpizI+tEDA4Gv+yrnFH1LJxIbdX/aKsNma9+++RIrapxyT1TmAeMDKltFU9HPgcODOl9GKTnQ0EpgMHBaobWJVS+jnjOQV4ItLFO8CbwDZgBHAqMAXoBSYBHcBm1JfzZ28EuOrl/9ODc5R6Vzwyq6BDvVTtbgHGA2sKiXFbydXfJUgpbUwpLQAateqwQj4DuDjSTWuKru+BlNIN2a6+ACYCv0dH2PhtCtfYjx0t4ZYR0a7uGeNw4GpgLnBgxt8HfAJsSOpWYD1wH7AqvocAz0Q2bgNGB62RoQfF95FhZAswLIQSZaBRbqYDPwHLogqcEhvdp7CJPqC9vwL5VtyUjor42B69zqvqXxU8S+IFOyq6iYcqdD3VONqngV8jbhol4e0sntqAnuIzumZAt8bnIOC4lNKOlNKceL3cCvyQsd/87/WNRuk29T51/5ifHu/zJ2MH69WvCz+zE+oroXdlL9pUkYdeUi/89xLU6VWAZn88fQoMjNtTBS+klF6pc6p/A2ye4OCYzm1lAAAAAElFTkSuQmCC';
	}
}

/**
 * Returns a HEX color to highlight menu items based on the admin color scheme.
 */
function userfeedback_menu_highlight_color()
{

	$color_scheme = get_user_option('admin_color');
	$color        = '#1da867';
	if ('light' === $color_scheme || 'blue' === $color_scheme) {
		$color = '#5f3ea7';
	}

	return $color;
}

/**
 * Helper function to check if the current user can install a plugin.
 *
 * @return bool
 */
function userfeedback_can_install_plugins()
{

	if (!current_user_can('install_plugins')) {
		return false;
	}

	// Determine whether file modifications are allowed.
	if (function_exists('wp_is_file_mod_allowed') && !wp_is_file_mod_allowed('userfeedback_can_install')) {
		return false;
	}

	return true;
}

/**
 * Check if current date is between given dates. Date format: Y-m-d.
 *
 * @since 7.13.2
 *
 * @param string $start_date Start Date. Eg: 2021-01-01.
 * @param string $end_date   End Date. Eg: 2021-01-14.
 *
 * @return bool
 */
function userfeedback_date_is_between($start_date, $end_date)
{

	$current_date = current_time('Y-m-d');

	$start_date = date('Y-m-d', strtotime($start_date));
	$end_date   = date('Y-m-d', strtotime($end_date));

	if (($current_date >= $start_date) && ($current_date <= $end_date)) {
		return true;
	}

	return false;
}

function userfeedback_screen_is_userfeedback()
{
	// Get current screen.
	$screen = get_current_screen();
	return !empty($screen->id) && strpos($screen->id, 'userfeedback') !== false;
}

function userfeedback_screen_is_surveys()
{
	$screen = get_current_screen();
	return strpos($screen->id, 'userfeedback_surveys') !== false;
}

function userfeedback_screen_is_results()
{
	$screen = get_current_screen();
	return strpos($screen->id, 'userfeedback_results') !== false;
}

function userfeedback_screen_is_settings()
{
	$screen = get_current_screen();
	return strpos($screen->id, 'userfeedback_settings') !== false;
}

function userfeedback_screen_is_smtp()
{
	$screen = get_current_screen();
	return strpos($screen->id, 'userfeedback_smtp') !== false;
}

function userfeedback_screen_is_wp_dashboard()
{
	$screen = get_current_screen();
	return $screen->id === 'dashboard';
}

function userfeedback_screen_is_exports()
{
	$screen = get_current_screen();
	return $screen->id === 'admin_page_userfeedback_exports';
}

function userfeedback_screen_is_install()
{
	$screen = get_current_screen();
	return $screen->id === 'admin_page_userfeedback_plugin_install';
}

function userfeedback_is_plugin_installed($slug)
{
	if (!function_exists('get_plugins')) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';
	}
	$all_plugins = get_plugins();

	if (!empty($all_plugins[$slug])) {
		return true;
	} else {
		return false;
	}
}

function userfeedback_get_notice_hide_opt_prefix()
{
	return 'userfeedback_vue_notice_hidden_';
}

function userfeedback_get_wp_notice_hide_opt_prefix()
{
	return 'userfeedback_vue_wp_notice_hidden_';
}

/**
 * Check WP version and include the compatible upgrader skin.
 *
 * @param bool $custom_upgrader If true it will include our custom upgrader, otherwise it will use the default WP one.
 */
function userfeedback_require_upgrader($custom_upgrader = true)
{
	global $wp_version;

	$base = UserFeedback();

	if (!$custom_upgrader) {
		require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
	} else {
		require_once plugin_dir_path($base->file) . 'includes/admin/licensing/plugin-upgrader.php';
	}

	// WP 5.3 changes the upgrader skin.
	if (version_compare($wp_version, '5.3', '<')) {
		require_once plugin_dir_path($base->file) . '/includes/admin/licensing/skin-legacy.php';
	} else {
		require_once plugin_dir_path($base->file) . '/includes/admin/licensing/skin.php';
	}
}

function userfeedback_get_screen_url($page, $path = null, $scroll_to = null)
{

	$url = add_query_arg(
		array(
			'page'                   => $page,
			'userfeedback-scroll'    => $scroll_to,
			'userfeedback-highlight' => $scroll_to,
		),
		admin_url('admin.php')
	);

	if (!empty($path)) {
		$url .= '#/' . $path;
	}

	return $url;
}

/** Decode special characters, both alpha- (<) and numeric-based (').
 *
 * @since 1.0.0
 *
 * @param string $string Raw string to decode.
 *
 * @return string
 */
function userfeedback_decode_string($string)
{

	if (!is_string($string)) {
		return $string;
	}

	return wp_kses_decode_entities(html_entity_decode($string, ENT_QUOTES));
}

add_filter('userfeedback_email_message', 'userfeedback_decode_string');

/**
 * Sanitize a string, that can be a multiline.
 * If WP core `sanitize_textarea_field()` exists (after 4.7.0) - use it.
 * Otherwise - split onto separate lines, sanitize each one, merge again.
 *
 * @since 1.0.0
 *
 * @param string $string
 *
 * @return string If empty var is passed, or not a string - return unmodified. Otherwise - sanitize.
 */
function userfeedback_sanitize_textarea_field($string)
{

	if (empty($string) || !is_string($string)) {
		return $string;
	}

	if (function_exists('sanitize_textarea_field')) {
		$string = sanitize_textarea_field($string);
	} else {
		$string = implode("\n", array_map('sanitize_text_field', explode("\n", $string)));
	}

	return $string;
}

function userfeedback_get_frontend_widget_settings()
{
	$userfeedback_settings = userfeedback_get_options();

	$use_custom_logo = userfeedback_is_pro_version() && userfeedback_is_licensed();
	$custom_logo     = !empty($userfeedback_settings['widget_custom_logo']) ? $userfeedback_settings['widget_custom_logo'] : '';
	
	return array(
		'start_minimized'      => ! empty( $userfeedback_settings['widget_start_minimized'] ) ? boolval( $userfeedback_settings['widget_start_minimized'] ) : false,
		'show_logo'            => boolval( userfeedback_show_logo($userfeedback_settings ) ),
		'custom_logo'          => ( $use_custom_logo && ! empty( $custom_logo ) ) ? $custom_logo : '',
		'position'             => ! empty( $userfeedback_settings['widget_position'] ) ? esc_attr( $userfeedback_settings['widget_position'] ) : 'bottom_right',
		'widget_toggle_icon'   => ! empty( $userfeedback_settings['widget_toggle_icon'] ) ? $userfeedback_settings['widget_toggle_icon'] : 'field-chevron-down',
		'widget_toggle_color'  => ! empty( $userfeedback_settings['widget_toggle_color'] ) ? $userfeedback_settings['widget_toggle_color'] : '#23282d',
		'widget_toggle_text'   => ! empty( $userfeedback_settings['widget_toggle_text'] ) ? $userfeedback_settings['widget_toggle_text'] : '',
		'widget_font'          => ! empty( $userfeedback_settings['widget_font'] ) ? $userfeedback_settings['widget_font'] : false,
		'widget_color'         => ! empty( $userfeedback_settings['widget_color'] ) ? $userfeedback_settings['widget_color'] : '#ffffff',
		'text_color'           => ! empty( $userfeedback_settings['widget_text_color'] ) ? $userfeedback_settings['widget_text_color'] : '#23282d',
		'button_color'         => ! empty( $userfeedback_settings['widget_button_color'] ) ? $userfeedback_settings['widget_button_color'] : '#2d87f1',
		'default_widget_color' => '#ffffff',
		'default_text_color'   => '#23282d',
		'default_button_color' => '#2d87f1',
		'skip_text'            => ! empty( $userfeedback_settings['skip_text'] ) ? $userfeedback_settings['skip_text'] : __( 'Skip', 'userfeedback' ),
		'next_text'            => ! empty( $userfeedback_settings['next_text'] ) ? $userfeedback_settings['next_text'] : __( 'Next', 'userfeedback' ),
	);
}

function userfeedback_show_logo($userfeedback_settings)
{
	
	if (isset($userfeedback_settings['logo_type'])) {
		if ($userfeedback_settings['logo_type'] == 'none') {
			return false;
		}
		if ($userfeedback_settings['logo_type'] == 'userfeedback') {
			return true;
		}
		if ($userfeedback_settings['logo_type'] == 'custom') {
			return true;
		}
	}

	if(isset($userfeedback_settings['widget_show_logo'])){
		if($userfeedback_settings['widget_show_logo']){
			return true;
		}
	}

	return false;
}

/**
 * Check if AIOSEO Pro version is installed or not.
 *
 * @since 1.0.0
 *
 * @return bool
 */
function userfeedback_is_installed_aioseo_pro()
{
	$installed_plugins = get_plugins();

	if (array_key_exists('all-in-one-seo-pack-pro/all_in_one_seo_pack.php', $installed_plugins)) {
		return true;
	}

	return false;
}

function userfeedback_get_shareasale_id()
{
	// Check if there's a constant.
	$shareasale_id = '';
	if (defined('USERFEEDBACK_SHAREASALE_ID')) {
		$shareasale_id = USERFEEDBACK_SHAREASALE_ID;
	}

	// If there's no constant, check if there's an option.
	if (empty($shareasale_id)) {
		$shareasale_id = get_option('userfeedback_shareasale_id', '');
	}

	// Whether we have an ID or not, filter the ID.
	$shareasale_id = apply_filters('userfeedback_shareasale_id', $shareasale_id);

	// Ensure it's a number
	$shareasale_id = absint($shareasale_id);

	return $shareasale_id;
}

function userfeedback_is_tracking_allowed()
{
	return (bool) userfeedback_get_option('allow_usage_tracking', false);
}

if (!function_exists('wp_get_jed_locale_data')) {
	/**
	 * Returns Jed-formatted localization data. Added for backwards-compatibility.
	 *
	 * @param  string $domain Translation domain.
	 *
	 * @return array
	 */
	function wp_get_jed_locale_data($domain)
	{
		$translations = get_translations_for_domain($domain);

		$locale = array(
			'' => array(
				'domain' => $domain,
				'lang'   => is_admin() && function_exists('get_user_locale') ? get_user_locale() : get_locale(),
			),
		);

		if (!empty($translations->headers['Plural-Forms'])) {
			$locale['']['plural_forms'] = $translations->headers['Plural-Forms'];
		}

		foreach ($translations->entries as $msgid => $entry) {
			$locale[$msgid] = $entry->translations;
		}

		return $locale;
	}
}



if (!function_exists('userfeedback_get_type_of_page')) {
	function userfeedback_get_type_of_page()
	{
		global $wp_query;

		if (!isset($wp_query)) {
			return '';
		}
		if (is_front_page() || is_home()) {
			return 'is_front_page';
		}
		if (is_singular()) {
			return 'is_single';
		}
		if (is_archive()) {
			return 'is_archive';
		}
		if (is_search()) {
			return 'is_search';
		}
		if (is_404()) {
			return 'is_404';
		}
		if (is_author()) {
			return 'is_author';
		}

		return '';
	}
}

if (!function_exists('userfeedback_get_taxonomy')) {
	function userfeedback_get_taxonomy()
	{
		global $wp_query;
		if (is_null($wp_query)) {
			return '';
		}
		$queried_object = get_queried_object();

		return isset($queried_object->taxonomy) ? $queried_object->taxonomy : false;
	}
}

if (!function_exists('userfeedback_get_term')) {
	function userfeedback_get_term()
	{
		$object = get_queried_object();
		return ( ! empty( $object->term_id ) ) ? $object->term_id : false;
	}
}

if (!function_exists('userfeedback_get_current_url')) {
	function userfeedback_get_current_url()
	{
		global $wp;
		return add_query_arg($wp->query_vars, home_url($wp->request));
	}
}

/**
 * Admin menu tooltip.
 */
function userfeedback_get_admin_menu_tooltip() {

	// Bail if user is on surveys screen.
	if (userfeedback_screen_is_surveys()) {
		return;
	}

	// Bail if the user is not allowed to save settings.
	if (!current_user_can('userfeedback_save_settings')) {
		return;
	}

	// Bail if the user has dismissed the tooltip within 7 days.
	$show_tooltip = get_option('userfeedback_admin_menu_tooltip', 0);
	if ($show_tooltip && $show_tooltip + 7 * DAY_IN_SECONDS > time()) {
		// Dismissed less than 7 days ago.
		return;
	}

	// Bail if there is an active survey.
	$published_survey = (new UserFeedback_Survey())->get_by('status', 'publish');
	if (!is_null($published_survey)) {
		return;
	}

	$url = admin_url('admin.php?page=userfeedback_surveys#/new/setup');
	?>
	<div id="userfeedback-admin-menu-tooltip" class="userfeedback-admin-menu-tooltip-hide">
		<div class="userfeedback-admin-menu-tooltip-header">
			<span class="userfeedback-admin-menu-tooltip-icon"><span
					class="dashicons dashicons-megaphone"></span></span>
			<?php esc_html_e( 'Get Feedback Now!', 'userfeedback' ); ?>
			<span class="userfeedback-admin-menu-tooltip-close"><span
					class="dashicons dashicons-dismiss"></span></span>
		</div>
		<div class="userfeedback-admin-menu-tooltip-content">
			<?php esc_html_e( "👋 Hey you're not collecting any website feedback! Launch a UserFeedback survey now.", 'userfeedback' ); ?>
			<p>
				<button id="userfeedback-admin-menu-launch-survery-tooltip-button" data-url="<?php echo esc_url($url); ?>" class="button button-primary"><?php esc_html_e('Launch Survey', 'userfeedback'); ?></button>
			</p>
		</div>
	</div>
	<style type="text/css">
		#toplevel_page_userfeedback_surveys{
			position: relative;
		}
		#toplevel_page_userfeedback_surveys.wp-not-current-submenu .wp-submenu-wrap {
			display: none;
		}
		#userfeedback-admin-menu-tooltip {
			position: absolute;
			left: 100%;
			top: 0;
			background: #fff;
			margin-top: 6px;
			margin-left: 16px;
			width: 350px;
			box-shadow: 0px 4px 7px 0px #ccc;
		}

		#userfeedback-admin-menu-tooltip:before {
			content: '';
			width: 0;
			height: 0;
			border-style: solid;
			border-width: 12px 12px 12px 0;
			border-color: transparent #fff transparent transparent;
			position: absolute;
			right: 100%;
			top: 75px;
			z-index: 10;
		}

		#userfeedback-admin-menu-tooltip:after {
			content: '';
			width: 0;
			height: 0;
			border-style: solid;
			border-width: 13px 13px 13px 0;
			border-color: transparent #ccc transparent transparent;
			position: absolute;
			right: 100%;
			margin-left: -1px;
			top: 74px;
			z-index: 5;
		}

		.userfeedback-admin-menu-tooltip-header {
			background: #03a0d2;
			padding: 5px 12px;
			font-size: 14px;
			font-weight: 700;
			font-family: Arial, Helvetica, "Trebuchet MS", sans-serif;
			color: #fff;
			line-height: 1.6;
		}

		.userfeedback-admin-menu-tooltip-icon {
			background: #fff;
			border-radius: 50%;
			width: 28px;
			height: 25px;
			display: inline-block;
			color: #03a0d2;
			text-align: center;
			padding: 3px 0 0;
			margin-right: 6px;
		}

		.userfeedback-admin-menu-tooltip-hide {
			display: none;
		}

		.userfeedback-admin-menu-tooltip-content {
			color: #3c434a;
			padding: 15px 15px 7px;
		}

		.userfeedback-admin-menu-tooltip-content:hover {
			color: #3c434a;
		}

		.userfeedback-admin-menu-tooltip-close {
			color: #fff;
			text-decoration: none;
			position: absolute;
			right: 10px;
			top: 12px;
			display: block;
			cursor: pointer;
		}

		.userfeedback-admin-menu-tooltip-close:hover {
			color: #fff;
			text-decoration: none;
		}
		.userfeedback-admin-menu-tooltip-close:hover span::before {
			border-left: none !important;
		}

		.userfeedback-admin-menu-tooltip-close .dashicons {
			font-size: 14px;
		}

		@media ( max-width: 782px ) {
			#userfeedback-admin-menu-tooltip {
				display: none;
			}
		}
	</style>
	<script type="text/javascript">
		if ('undefined' !== typeof jQuery) {
			jQuery(function ($) {
				var $tooltip = $(document.getElementById('userfeedback-admin-menu-tooltip'));
				var $menuwrapper = $(document.getElementById('adminmenuwrap'));
				var $menuitem = $(document.getElementById('toplevel_page_userfeedback_surveys'));
				if (0 === $menuitem.length) {
					$menuitem = $(document.getElementById('toplevel_page_userfeedback_network'));
				}
				if (0 === $menuitem.length) {
					$menuitem = $(document.getElementById('toplevel_page_userfeedback_surveys'));
				}
				if (0 === $menuitem.length) {
					return;
				}

				if ($menuitem.length) {
					$menuitem.append($tooltip);
					$tooltip.removeClass('userfeedback-admin-menu-tooltip-hide');
				}
				$tooltip.css({
					top: -1 * $tooltip.innerHeight() / 2 + 'px'
				});

				function hideTooltip() {
					$tooltip.addClass('userfeedback-admin-menu-tooltip-hide');
					$.post(ajaxurl, {
					action: 'userfeedback_hide_admin_menu_tooltip',
					nonce: '<?php echo esc_js( wp_create_nonce( 'mi-admin-nonce' ) ); ?>',
					});
				}

				$('#userfeedback-admin-menu-launch-survery-tooltip-button').click(function() {
					let url = $(this).data('url');
					window.location = url;
					return false;
				});
				
				$('.userfeedback-admin-menu-tooltip-close').on('click', function(e) {
					e.preventDefault();
					hideTooltip();
				});
			});
		}
	</script>
	<?php
}


add_action( 'adminmenu', 'userfeedback_get_admin_menu_tooltip' );

/**
 * Store the time when the float bar was hidden so it won't show again for 14 days.
 */
function userfeedback_mark_admin_menu_tooltip_hidden() {
	check_ajax_referer( 'mi-admin-nonce', 'nonce' );
	update_option( 'userfeedback_admin_menu_tooltip', time() );
	wp_send_json_success();
}

add_action( 'wp_ajax_userfeedback_hide_admin_menu_tooltip', 'userfeedback_mark_admin_menu_tooltip_hidden' );

if (!function_exists('userfeedback_load_gutenberg_app')) {
	function userfeedback_load_gutenberg_app() {
		global $wp_version;

		if ( version_compare( $wp_version, '5.4', '<' ) ) {
			return false;
		}

		return true;
	}
}

/**
 * Get post type in admin side
 */
if (!function_exists('userfeedback_get_current_post_type')) {
	function userfeedback_get_current_post_type() {
		global $post, $typenow, $current_screen;

		if ( $post && $post->post_type ) {
			return $post->post_type;
		} elseif ( $typenow ) {
			return $typenow;
		} elseif ( $current_screen && $current_screen->post_type ) {
			return $current_screen->post_type;
		} elseif ( isset( $_REQUEST['post_type'] ) ) {
			return sanitize_key( $_REQUEST['post_type'] );
		}

		return null;
	}
}

/**
 * Metabox: Disable all surveys based on post meta
 */
if (!function_exists('userfeedback_disable_all_surveys')) {
	function userfeedback_disable_all_surveys() {
		global $post;
		$disable_all_surveys = get_post_meta($post->ID, '_uf_disable_surveys', true);
		return (is_singular() && $disable_all_surveys) ? true : false;
	}
}

/**
 * Metabox: Show specific survey
 */
if (!function_exists('userfeedback_show_specific_survey')) {
	function userfeedback_show_specific_survey() {
		global $post;
		$show_specific_survey = get_post_meta($post->ID, '_uf_show_specific_survey', true);
		return $show_specific_survey;
	}
}



