D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
aramrprl
/
www
/
wp-content
/
plugins
/
userfeedback-lite0
/
includes
/
Filename :
helpers.php
back
Copy
<?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_addons() { $screen = get_current_screen(); return strpos($screen->id, 'userfeedback_addons') !== false; } function userfeedback_screen_is_onboarding() { $screen = get_current_screen(); return strpos($screen->id, 'userfeedback_onboarding') !== 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; } }