*/
class ThirdPartyCompatibility
{
public $menu_settings;
public function __construct()
{
$this->menu_settings = (new MenuEditorOptions())->get();
add_action('init', [$this, 'register_actions_on_init'], 0);
add_action('admin_init', [$this, 'register_actions_on_admin_init'], 0); // 24-3-24
add_action('admin_enqueue_scripts', [$this, 'reset_theme_conflicts'], 999999); // 28-6-24
add_action('admin_head', [$this, 'plugin_conflicts'], 999999);
if (Utils::is_plugin_active('gravityforms/gravityforms.php')) {
add_filter('update_footer', [$this, 'change_admin_footer'], 9999, 3);
}
// All Fluent Plugin Assets Supports
$this->whitelist_assets_in_fluent_plugins();
}
/**
* Whitelist Adminify assets in Fluent ecosystem no-conflict mode.
*
* Fluent Boards, Fluent Booking, Fluent CRM, Fluent Community, Fluent Forms,
* and Fluent Snippets (easy-code-manager) iterate $wp_scripts->queue on their
* admin pages and dequeue every plugin script whose src isn't in their approved
* slug list. Without this whitelist, Adminify's frame-adminify--admin script is
* stripped, leaving an empty React mount (white screen).
*/
public function whitelist_assets_in_fluent_plugins()
{
$add_regex = function ($slugs) {
$slugs[] = '\/adminify\/';
return $slugs;
};
if (Utils::is_plugin_active('fluent-boards/fluent-boards.php')) {
add_filter('fluent_boards/asset_listed_slugs', $add_regex);
}
if (Utils::is_plugin_active('fluent-booking/fluent-booking.php')) {
add_filter('fluent_booking/asset_listed_slugs', $add_regex);
}
if (Utils::is_plugin_active('fluent-crm/fluent-crm.php')) {
add_filter('fluent_crm_asset_listed_slugs', $add_regex);
}
if (Utils::is_plugin_active('fluent-community/fluent-community.php')) {
add_filter('fluent_community/asset_listed_slugs', $add_regex);
add_filter('fluent_com_editor/asset_listed_slugs', $add_regex);
}
if (Utils::is_plugin_active('easy-code-manager/easy-code-manager.php')) {
add_filter('fluent_snippets_asset_listed_slugs', $add_regex);
}
if (Utils::is_plugin_active('fluentform/fluentform.php')) {
add_filter('fluentform/exclude_js_slugs_from_dequeue', function ($slugs) {
$slugs[] = 'adminify';
return $slugs;
});
}
}
/**
* Gravity Form Custom Footer missing div closing support
*/
public function change_admin_footer( $footer_text ) {
$current_screen = get_current_screen();
if ( !empty( $current_screen ) && ( $current_screen->id === 'toplevel_page_gf_edit_forms' || $current_screen->id === 'forms_page_gf_new_form' ) ) {
return $footer_text . '';
}
return $footer_text;
}
public function plugin_conflicts(){
$adminify_ui = AdminSettings::get_instance()->get('admin_ui');
if (!empty($adminify_ui)) {
// Motopress Hotel Booking Lite
if (Utils::is_plugin_active('motopress-hotel-booking-lite/motopress-hotel-booking.php')) {
echo '';
}
// Fluent Support
if (Utils::is_plugin_active('fluent-support/fluent-support.php')) {
echo '';
}
// Fluent Affiliate
if (Utils::is_plugin_active('fluent-affiliate/fluent-affiliate.php')) {
echo '';
}
// Fluent Cart
if (Utils::is_plugin_active('fluent-cart/fluent-cart.php')) {
echo '';
}
}
if (Utils::is_plugin_active('squirrly-seo/squirrly.php')) {
echo '';
}
if (Utils::is_plugin_active('surecart/surecart.php') || Utils::is_plugin_active('suremember/suremember.php')) {
if( !empty($adminify_ui) ) {
echo '';
}
}
if (Utils::is_plugin_active('advanced-database-cleaner-pro/advanced-db-cleaner.php')) {
echo '';
}
if (Utils::is_plugin_active('insert-headers-and-footers/ihaf.php')) {
echo '';
}
if (Utils::is_plugin_active('advanced-access-manager/aam.php')) {
add_filter('pxlbsadminify_menu_option_compatibility_filter', array($this, 'apply_menu_restrictions_via_filter'), 10, 2);
}
if (Utils::is_plugin_active('meta-box/meta-box.php')) {
echo '';
}
if (Utils::is_plugin_active('wp-security-audit-log/wp-security-audit-log.php')) {
echo '';
}
if ( Utils::is_plugin_active( 'shopengine/shopengine.php' ) ) {
global $pagenow; // e.g. "edit.php"
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only check, no state change.
$post_type = isset($_GET['post_type']) ? sanitize_key(wp_unslash($_GET['post_type'])) : '';
// Build the slug
$slug = $post_type ? "{$pagenow}?post_type={$post_type}" : $pagenow;
// Example usage:
if ( $slug === 'edit.php?post_type=shopengine-template' ) {
echo '';
}
}
if (Utils::is_plugin_active('breeze/breeze.php')) {
echo '';
}
// Redis Object Cache plugin compatibility
if (Utils::is_plugin_active('redis-cache/redis-cache.php')) {
$nonce = wp_create_nonce();
$ajaxurl = esc_url(admin_url('admin-ajax.php'));
$flushingText = __('Flushing cache...', 'adminify');
echo '';
}
}
public function apply_menu_restrictions_via_filter($menu_options, $menu){
$aam_options = get_option( 'aam_access_settings', [] );
if( is_array($aam_options) ) {
$simplified_aam_option = $this->simplify_aam_menu_restriction($aam_options);
$menu_options = $this->update_aam_menu_option($menu_options, $simplified_aam_option);
}
return $menu_options;
}
public function simplify_aam_menu_restriction($aam_option){
$simplified_aam_option = [];
foreach ($aam_option['role'] as $role => $aam_role) {
if (!empty($aam_role['menu'])) {
foreach ($aam_role['menu'] as $menu_item => $value) {
if(!$value) { continue; }
$menu_item = str_replace('menu-', '', $menu_item);
if (!isset($simplified_aam_option[$menu_item])) {
$simplified_aam_option[$menu_item] = [];
}
$simplified_aam_option[$menu_item][] = $role;
}
}
}
return $simplified_aam_option;
}
public function update_aam_menu_option($menu_options, $simplified_aam_option) {
foreach ($menu_options as $key => $item) {
// If this menu item is in restricted list, update hidden_for
if (isset($simplified_aam_option[$key])) {
if (!isset($item['hidden_for'])) {
$item['hidden_for'] = [];
}
$item['hidden_for'] = array_merge($item['hidden_for'], $simplified_aam_option[$key]);
$item['hidden_for'] = array_unique($item['hidden_for']);
}
// If submenu exists, apply the function recursively
// if (isset($item['submenu']) && is_array($item['submenu'])) {
// $item['submenu'] = update_aam_menu_option($item['submenu'], $simplified_aam_option);
// }
$menu_options[$key] = $item;
}
return $menu_options;
}
public function reset_theme_conflicts()
{
global $pagenow;
if ($pagenow == 'wp-login.php' || $pagenow == 'wp-register.php' || $pagenow == 'customize.php') {
return;
}
$screen = get_current_screen( );
$theme = wp_get_theme();
// Neve WordPress Theme
if ('Neve' == $theme->name || 'Neve' == $theme->parent_theme) {
wp_enqueue_style('wp-adminify_neve-theme', PXLBSADMINIFY_ASSETS . 'css/themes/neve.min.css', false, PXLBSADMINIFY_VER);
}
// Phlox WordPress Theme
if ('Phlox' == $theme->name || 'Phlox' == $theme->parent_theme) {
echo '';
}
// Enfold WordPress Theme
if ('Enfold' == $theme->name || 'Enfold' == $theme->parent_theme) {
echo '';
}
// BrightHub theme compatibility fix
if ('BrightHub' == $theme->name || 'BrightHub' == $theme->parent_theme) {
echo '';
echo '';
}
// Third Party Plugin CSS Conflict
// $pxlbsadminify_plugin_conflict_css = '';
// if (Utils::is_plugin_active('quillforms/quillforms.php')) {
// $pxlbsadminify_plugin_conflict_css = '//css code here';
// $pxlbsadminify_plugin_conflict_css = preg_replace('#/\*.*?\*/#s', '', $pxlbsadminify_plugin_conflict_css);
// $pxlbsadminify_plugin_conflict_css = preg_replace('/\s*([{}|:;,])\s+/', '$1', $pxlbsadminify_plugin_conflict_css);
// $pxlbsadminify_plugin_conflict_css = preg_replace('/\s\s+(.*)/', '$1', $pxlbsadminify_plugin_conflict_css);
// }
// $adminify_ui = AdminSettings::get_instance()->get('admin_ui');
// if (!empty($adminify_ui)) {
// wp_add_inline_style('wp-adminify-admin', wp_strip_all_tags($pxlbsadminify_plugin_conflict_css));
// } else {
// wp_add_inline_style('wp-adminify-default-ui', wp_strip_all_tags($pxlbsadminify_plugin_conflict_css));
// }
if (Utils::is_plugin_active('stackable-ultimate-gutenberg-blocks-premium/plugin.php')) {
echo '';
}
if (Utils::is_plugin_active('woocommerce/woocommerce.php')) {
echo '';
}
if (Utils::is_plugin_active('tinymce-templates/tinymce-templates.php')) {
echo '';
}
if (Utils::is_plugin_active('elementor/elementor.php')) {
echo '';
}
if (Utils::is_plugin_active('one-click-demo-import/one-click-demo-import.php')) {
echo '';
}
if (Utils::is_plugin_active('wpforms-lite/wpforms.php')) {
if (Utils::currentpage_id('dashboard')) {
wp_enqueue_style(
'wpforms-full',
WPFORMS_PLUGIN_URL . 'assets/css/frontend/classic/wpforms-full.css',
[],
WPFORMS_VERSION
);
}
}
if (Utils::is_plugin_active('classic-editor/classic-editor.php')) {
echo '';
}
if (Utils::is_plugin_active('updraftplus/updraftplus.php')) {
echo '';
}
if (Utils::is_plugin_active('tinymce-advanced/tinymce-advanced.php')) {
echo '';
}
if (Utils::is_plugin_active('email-template-customizer-for-woo/email-template-customizer-for-woo.php')) {
if( $screen->id === 'edit-viwec_template' ){
echo '';
}
}
if (Utils::is_plugin_active('woocommerce-orders-tracking/woocommerce-orders-tracking.php')) {
if( $screen->id === 'woocommerce_page_wc-orders' ){
echo '';
}
}
// Divi Theme - "Edit With Divi" link should reload parent page instead of iframe
if ( 'Divi' == $theme->name || 'Divi' == $theme->parent_theme ) {
echo '';
echo '';
}
if (Utils::is_plugin_active('js_composer/js_composer.php')) {
echo '';
}
// Third Party localize script
wp_localize_script('adminify-admin', 'PXLBSADMINIFY_THIRDPARTY', $this->thirdparty_create_js_object());
}
public function thirdparty_create_js_object()
{
// betterlinks menu settings
$betterlinks = [
'active' => false,
];
if (Utils::is_plugin_active('betterlinks/betterlinks.php')) {
if (is_array($this->menu_settings) && array_key_exists('betterlinks', $this->menu_settings)) {
$menu_name = !empty($this->menu_settings['betterlinks']['name']) ? esc_html($this->menu_settings['betterlinks']['name']) : '';
$submenu_manage = !empty($this->menu_settings['betterlinks']['submenu']['betterlinks']['name']) ? esc_html($this->menu_settings['betterlinks']['submenu']['betterlinks']['name']) : '';
$submenu_name = !empty($this->menu_settings['betterlinks']['submenu']['betterlinks-analytics']['name']) ? esc_html($this->menu_settings['betterlinks']['submenu']['betterlinks-analytics']['name']) : '';
$submenu_settings = !empty($this->menu_settings['betterlinks']['submenu']['betterlinks-settings']['name']) ? esc_html($this->menu_settings['betterlinks']['submenu']['betterlinks-settings']['name']) : '';
$betterlinks = [
'active' => true,
'menu_name' => esc_html($menu_name),
'submenu_manage' => esc_html($submenu_manage),
'submenu_name' => esc_html($submenu_name),
'submenu_settings' => esc_html($submenu_settings),
];
}
}
return [
'ajax_url' => admin_url('admin-ajax.php'),
'better_links' => wp_kses_post_deep($betterlinks),
];
}
public function register_actions_on_init()
{
// Brizy Builder
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only check, no state change.
if (isset($_REQUEST['brizy-edit-iframe'])) {
add_filter('pxlbsadminify_defer_skip', '__return_true');
add_filter('pxlbsadminify_skip_removing_dashicons', '__return_true');
}
}
public function register_actions_on_admin_init()
{
$adminify_ui = AdminSettings::get_instance()->get('admin_ui');
if (!empty($adminify_ui)) {
// Commented On: 24-3-24
add_action('admin_enqueue_scripts', [$this, 'enqueue_scripts'], 999);
}
// Commented On: 10-6-24
// add_filter('pxlbsadminify_third_party_styles', [$this, 'register_compatability_styles']);
// Fluent CRM
add_action('fluentcrm_skip_no_conflict', '__return_true');
// Fluent FORM
add_action('fluentform_skip_no_conflict', '__return_true');
}
/**
* Register Third Party Styles
*
* @since 1.0.0
*/
public function register_compatability_styles($plugin_supports)
{
if (!is_array($plugin_supports)) {
$plugin_supports = [];
}
$plugin_dir = PXLBSADMINIFY_ASSETS . 'css/plugins/';
$plugin_files = list_files(PXLBSADMINIFY_PATH . 'assets/css/plugins/', 1);
if (!empty($plugin_files)) {
foreach ($plugin_files as $file) {
$plugin_supports[wp_basename($file, '.min.css')] = $plugin_dir . wp_basename($file);
}
}
// E-Commerce
if (jltwp_adminify()->can_use_premium_code__premium_only()) {
$plugin_dir = PXLBSADMINIFY_URL . 'Pro/assets/css/plugins/';
$plugin_files = list_files(PXLBSADMINIFY_PATH . 'Pro/assets/css/plugins/', 1);
if (!empty($plugin_files)) {
foreach ($plugin_files as $file) {
$plugin_supports[wp_basename($file, '.min.css')] = $plugin_dir . wp_basename($file);
}
}
}
return $plugin_supports;
}
/**
* Admin Enqueue Third Party Scripts/Styles
*
* @return void
*/
public function enqueue_scripts()
{
$plugin_supports = [];
$plugin_supports = apply_filters('pxlbsadminify_third_party_styles', $plugin_supports);
// Check Plugin Activated for Site Wide
if (is_multisite()) {
$active_plugins = get_site_option('active_sitewide_plugins');
foreach ($active_plugins as $active_path => $active_plugin) {
if (is_plugin_active_for_network($active_path)) {
$string = explode('/', $active_path);
$pluginname = $string[0];
if (isset($plugin_supports[$pluginname])) {
if ($plugin_supports[$pluginname] != '') {
wp_register_style('adminify_site-wide_' . $pluginname . '_css', $plugin_supports[$pluginname], [], PXLBSADMINIFY_VER);
wp_enqueue_style('adminify_site-wide_' . $pluginname . '_css');
}
}
}
}
}
// Check Plugin Activated for Individual Sites
$activeplugins = get_option('active_plugins');
foreach ($activeplugins as $plugin) {
if (Utils::is_plugin_active($plugin)) {
$string = explode('/', $plugin);
$pluginname = $string[0];
if (isset($plugin_supports[$pluginname])) {
if ($plugin_supports[$pluginname] != '') {
wp_register_style('adminify_' . $pluginname . '_css', $plugin_supports[$pluginname], [], PXLBSADMINIFY_VER);
wp_enqueue_style('adminify_' . $pluginname . '_css');
}
}
}
}
}
}