whoami7 - Manager
:
/
home
/
topsuzmw
/
public_html
/
wp-content
/
plugins
/
if-menu
/
Upload File:
files >> /home/topsuzmw/public_html/wp-content/plugins/if-menu/if-menu.php
<?php /* Plugin Name: If Menu - Visibility control for menus Plugin URI: https://layered.store/plugins/if-menu Description: Display tailored menu items to each visitor with visibility rules Version: 0.19.2 Text Domain: if-menu Author: Layered Author URI: https://layered.store License: GPL-3.0-or-later License URI: https://www.gnu.org/licenses/gpl-3.0.html */ use Layered\SafeEval\SafeEval; require plugin_dir_path(__FILE__) . 'vendor/autoload.php'; class If_Menu { public static function init() { global $pagenow, $wp_version; add_action('rest_api_init', 'If_Menu::restApi'); if (is_admin()) { add_action('admin_enqueue_scripts', 'If_Menu::admin_init'); add_action('wp_update_nav_menu_item', 'If_Menu::wp_update_nav_menu_item', 10, 2); // Add missing `wp_nav_menu_item_custom_fields` filter in Walker_Nav_Menu_Edit if (version_compare($wp_version, '5.4', '<')) { add_filter('wp_edit_nav_menu_walker', 'If_Menu::customWalker', 500, 2); } add_action('wp_nav_menu_item_custom_fields', 'If_Menu::menu_item_fields'); add_action('wp_nav_menu_item_custom_title', 'If_Menu::menu_item_title'); add_action('admin_footer', 'If_Menu::adminFooter'); if (get_option('if-menu-admin', 1) && $pagenow !== 'nav-menus.php') { add_filter('wp_get_nav_menu_items', 'If_Menu::wp_get_nav_menu_items'); } } else { add_filter('wp_get_nav_menu_items', 'If_Menu::wp_get_nav_menu_items'); add_action('wp_enqueue_scripts', 'If_Menu::addAssets'); } } public static function get_conditions( $for_testing = false ) { $conditions = apply_filters( 'if_menu_conditions', array() ); if ($for_testing) { $c2 = array(); foreach ($conditions as $condition) { if (isset($condition['id'])) { $c2[$condition['id']] = $condition; } if (isset($condition['name'])) { $c2[$condition['name']] = $condition; } if (isset($condition['alias'])) { $c2[$condition['alias']] = $condition; } } $conditions = $c2; } return $conditions; } public static function wp_get_nav_menu_items($items) { $conditions = If_Menu::get_conditions($for_testing = true); $hidden_items = array(); $canPeek = is_user_logged_in() && get_option('if-menu-peak') && current_user_can('edit_theme_options'); foreach ($items as $key => $item) { if (in_array($item->menu_item_parent, $hidden_items)) { if ($canPeek) { $item->classes[] = 'if-menu-peek'; } else { unset($items[$key]); } $hidden_items[] = $item->ID; } else { $enabled = get_post_meta($item->ID, 'if_menu_enable'); if ($enabled && $enabled[0] !== '0') { $if_condition_types = get_post_meta($item->ID, 'if_menu_condition_type'); $if_conditions = get_post_meta($item->ID, 'if_menu_condition'); $ifMenuOptions = get_post_meta($item->ID, 'if_menu_options'); $eval = array(); foreach ($enabled as $index => $operator) { $singleCondition = ''; $condition = $conditions[$if_conditions[$index]]; if ($index) { $singleCondition .= $operator . ' '; } $bit1 = $if_condition_types[$index] === 'show' ? 1 : 0; $bit2 = $if_condition_types[$index] === 'show' ? 0 : 1; $params = array($item); if ($ifMenuOptions && isset($ifMenuOptions[$index])) { $params[] = $ifMenuOptions[$index]; } if (is_callable($condition['condition'])) { $conditionResult = call_user_func_array($condition['condition'], $params); } else { $conditionResult = false; error_log('If Menu: callback for condition "' . $condition['name'] . ' (' . $condition['id'] . ')" is not set up correctly'); } $singleCondition .= $conditionResult ? $bit1 : $bit2; $eval[] = $singleCondition; } $safeEval = new SafeEval; if ((count($eval) === 1 && $eval[0] == 0) || (count($eval) > 1 && !$safeEval->evaluate(implode(' ', $eval)))) { if ($canPeek) { $item->classes[] = 'if-menu-peek'; } else { unset($items[$key]); } $hidden_items[] = $item->ID; } } } } return $items; } public static function admin_init() { global $pagenow; if ($pagenow == 'nav-menus.php') { wp_enqueue_script('select2', plugins_url('assets/select2.min.js', __FILE__), array('jquery'), '4.0.5'); wp_enqueue_script('if-menu', plugins_url('assets/if-menu.js', __FILE__), array('select2', 'jquery-ui-dialog'), '0.16'); wp_enqueue_style('select2', plugins_url('assets/select2.min.css', __FILE__), array(), '4.0.5'); wp_enqueue_style('if-menu', plugins_url('assets/if-menu.css', __FILE__), array('wp-jquery-ui-dialog'), '0.15'); wp_localize_script('if-menu', 'IfMenu', array( 'plan' => self::getPlan(), 'conflictErrorMessage' => sprintf( wp_kses( __('<strong>If Menu</strong> detected a conflict with another plugin or theme (%s) and may not work as expected. <a href="%s" target="_blank">Read more about the issue here</a>', 'if-menu'), array('a' => array('href' => [], 'target' => []), 'strong' => []) ), apply_filters('wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', 0), esc_url('https://wordpress.org/plugins/if-menu/#if%20menu%20is%20broken%2C%20no%20visibility%20rules%20are%20available') ), 'duplicateErrorMessage' => sprintf( wp_kses( __('<strong>If Menu</strong> detected that another plugin or theme (%s) extends menu items incorrectly. This may cause duplicate visibility rules to show up, but functionality should be fine.', 'if-menu'), ['strong' => []] ), apply_filters('wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', 0) ) )); } } public static function adminFooter() { ?> <div class="if-menu-dialog-premium hidden" title="<?php _e('That\'s a Premium feature', 'if-menu') ?>"> <p><?php _e('Get <strong>If Menu Premium</strong> plan to enable integrations with third-party plugins, user location detection and priority support', 'if-menu') ?></p><br> <p> <a href="<?php echo admin_url('themes.php?page=if-menu') ?>" class="button button-primary pull-right if-menu-dialog-btn" data-action="get-premium"><?php _e('Get If Menu Premium', 'if-menu') ?></a> <button class="button close if-menu-dialog-btn" data-action="close"><?php _e('Use Basic plan', 'if-menu') ?></button> </p> </div> <?php } public static function addAssets() { wp_enqueue_style('if-menu-site-css', plugins_url('assets/if-menu-site.css', __FILE__)); } public static function menu_item_fields($item_id) { $conditions = If_Menu::get_conditions(); $if_menu_enable = get_post_meta( $item_id, 'if_menu_enable' ); $if_menu_condition_type = get_post_meta( $item_id, 'if_menu_condition_type' ); $if_menu_condition = get_post_meta( $item_id, 'if_menu_condition' ); $ifMenuOptions = get_post_meta($item_id, 'if_menu_options'); if (!count($if_menu_enable)) { $if_menu_enable[] = 0; $if_menu_condition_type[] = ''; $if_menu_condition[] = ''; } $groupedConditions = array(); foreach ($conditions as $condition) { $groupedConditions[isset($condition['group']) ? $condition['group'] : 'Custom'][] = $condition; } ?> <p class="if-menu-enable description description-wide"> <a href="<?php echo admin_url('themes.php?page=if-menu') ?>" class="if-menu-help" data-tooltip="<?php esc_attr_e('Visibility rule examples', 'if-menu') ?>" title="<?php esc_attr_e('Visibility rule examples', 'if-menu') ?>"><span class="dashicons dashicons-editor-help"></span></a> <label> <input <?php if (isset($if_menu_enable[0])) checked( $if_menu_enable[0], 1 ) ?> type="checkbox" value="1" class="menu-item-if-menu-enable" name="menu-item-if-menu-enable[<?php echo esc_attr( $item_id ); ?>][]" /> <?php esc_html_e('Enable visibility rules', 'if-menu') ?> </label> </p> <div class="if-menu-conditions" style="display: <?php echo $if_menu_enable[0] ? 'block' : 'none' ?>"> <?php for ($index = 0; $index < count($if_menu_enable); $index++) : ?> <p class="if-menu-condition description description-wide" data-menu-item-id="<?php echo $item_id ?>"> <?php $selectedCondition = null; ?> <span class="if-menu-condition-rule"> <select class="menu-item-if-menu-condition-type" id="edit-menu-item-if-menu-condition-type-<?php echo esc_attr( $item_id ); ?>" name="menu-item-if-menu-condition-type[<?php echo esc_html( $item_id ); ?>][]" data-val="<?php echo esc_html($if_menu_condition_type[$index]) ?>"> <option <?php selected( 'show', $if_menu_condition_type[$index] ) ?> value="show"><?php esc_html_e( 'Show', 'if-menu' ) ?></option> <option <?php selected( 'hide', $if_menu_condition_type[$index] ) ?> value="hide"><?php esc_html_e( 'Hide', 'if-menu' ) ?></option> </select> <?php esc_html_e( 'if', 'if-menu' ); ?> <select class="menu-item-if-menu-condition" id="edit-menu-item-if-menu-condition-<?php echo esc_attr( $item_id ); ?>" name="menu-item-if-menu-condition[<?php echo esc_attr( $item_id ); ?>][]"> <?php foreach ($groupedConditions as $group => $conditions) : ?> <optgroup label="<?php echo esc_attr($group) ?>"> <?php foreach($conditions as $condition) : ?> <?php if ($condition['id'] === $if_menu_condition[$index]) { $selectedCondition = $condition; } ?> <option value="<?php echo $condition['id'] ?>" <?php selected($condition['id'], $if_menu_condition[$index]) ?> <?php selected($condition['name'], $if_menu_condition[$index]) ?> data-options='<?php if (isset($condition['options'])) echo json_encode($condition['options']) ?>'><?php echo esc_html($condition['name']) . (isset($condition['options']) ? ' »' : '') ?></option> <?php endforeach ?> </optgroup> <?php endforeach ?> </select> </span> <select class="menu-item-if-menu-enable-next" name="menu-item-if-menu-enable[<?php echo esc_attr( $item_id ); ?>][]"> <option value="false">+</option> <option value="and" <?php if (isset($if_menu_enable[$index + 1])) selected( 'and', $if_menu_enable[$index + 1] ) ?>><?php esc_html_e( 'AND', 'if-menu' ) ?></option> <option value="or" <?php if (isset($if_menu_enable[$index + 1])) selected( 'or', $if_menu_enable[$index + 1] ) ?>><?php esc_html_e( 'OR', 'if-menu' ) ?></option>--> </select> <?php if (isset($selectedCondition['options'])) : ?> <select class="menu-item-if-menu-options" name="menu-item-if-menu-options[<?php echo esc_attr($item_id) ?>][<?php echo esc_attr($index) ?>][]" style="width: 305px" multiple> <?php foreach ($selectedCondition['options'] as $value => $label) : ?> <option value="<?php echo esc_attr($value) ?>" <?php if (is_array($ifMenuOptions[$index]) && in_array($value, $ifMenuOptions[$index])) echo 'selected' ?>><?php echo $label ?></option> <?php endforeach ?> </select> <?php endif ?> </p> <?php endfor ?> </div> <?php } public static function menu_item_title( $item_id ) { $if_menu_enabled = get_post_meta( $item_id, 'if_menu_enable' ); if ( count( $if_menu_enabled ) && $if_menu_enabled[0] !== '0' ) { $conditionTypes = get_post_meta( $item_id, 'if_menu_condition_type' ); $conditions = get_post_meta( $item_id, 'if_menu_condition' ); $rules = If_Menu::get_conditions($for_testing = true); if ( $conditionTypes[0] === 'show' ) { $conditionTypes[0] = ''; } echo '<span class="is-submenu">'; printf( __( '%s if %s', 'if-menu' ), $conditionTypes[0], $rules[$conditions[0]]['name'] ); if ( count( $if_menu_enabled ) > 1 ) { printf( ' ' . _n( 'and %d more rule', 'and %d more rules', count( $if_menu_enabled ) - 1, 'if-menu' ), count( $if_menu_enabled ) - 1 ); } echo '</span>'; } } public static function customWalker($walker, $menuId = null) { global $wp_version; if (version_compare( $wp_version, '4.7.0', '>=')) { require_once(plugin_dir_path(__FILE__) . 'src/if-menu-nav-menu-4.7.php'); } elseif ( version_compare( $wp_version, '4.5.0', '>=' ) ){ require_once(plugin_dir_path(__FILE__) . 'src/if-menu-nav-menu-4.5.php'); } else { require_once(plugin_dir_path(__FILE__) . 'src/if-menu-nav-menu.php'); } return 'If_Menu_Walker_Nav_Menu_Edit'; } public static function wp_update_nav_menu_item( $menu_id, $menu_item_db_id ) { if (isset($_POST['menu-item-if-menu-enable'])) { delete_post_meta($menu_item_db_id, 'if_menu_enable'); delete_post_meta($menu_item_db_id, 'if_menu_condition_type'); delete_post_meta($menu_item_db_id, 'if_menu_condition'); delete_post_meta($menu_item_db_id, 'if_menu_options'); foreach ($_POST['menu-item-if-menu-enable'][$menu_item_db_id] as $index => $value) { if (in_array( $value, array('1', 'and', 'or'))) { add_post_meta($menu_item_db_id, 'if_menu_enable', $value); add_post_meta($menu_item_db_id, 'if_menu_condition_type', $_POST['menu-item-if-menu-condition-type'][$menu_item_db_id][$index]); add_post_meta($menu_item_db_id, 'if_menu_condition', $_POST['menu-item-if-menu-condition'][$menu_item_db_id][$index]); if (isset($_POST['menu-item-if-menu-options']) && isset($_POST['menu-item-if-menu-options'][$menu_item_db_id]) && isset($_POST['menu-item-if-menu-options'][$menu_item_db_id][$index])) { add_post_meta($menu_item_db_id, 'if_menu_options', array_unique($_POST['menu-item-if-menu-options'][$menu_item_db_id][$index])); } else { add_post_meta($menu_item_db_id, 'if_menu_options', 0); } } else { break; } } } } public static function apiNonce($action) { $nonce = uniqid(); set_transient('if-menu-nonce-' . $action, $nonce, 600); return $nonce; } public static function getPlan() { global $layeredMarketMoreVisibilityRules; if (class_exists('Layered\LayeredMarketForWp\Api') && isset($layeredMarketMoreVisibilityRules) && $layeredMarketMoreVisibilityRules instanceof Layered\LayeredMarketForWp\Api && $layeredMarketMoreVisibilityRules->isLicenseActive()) { $license = $layeredMarketMoreVisibilityRules->getLicense(); $license['until'] = $license['end']; $license['plan'] = 'premium'; return $license; } if (isset($_REQUEST['if-menu-recheck-plan']) || false === ($plan = get_transient('if-menu-plan'))) { $plan = false; $request = wp_remote_get('https://layered.market/get-plan?site=' . urlencode(site_url()) . '&for=if-menu&_nonce=' . self::apiNonce('plan-check') . '&licenseKey=' . get_option('if-menu-license-key'), array('timeout' => 60)); if (!is_wp_error($request)) { $data = json_decode(wp_remote_retrieve_body($request), true); if (isset($data['plans'])) { $plan = $data['plans']['if-menu']; set_transient('if-menu-plan', $plan, 500); } } } return $plan; } public static function restApi() { register_rest_route('if-menu/v1', '/did-you-made-this-request', array( 'methods' => 'GET', 'callback' => function() { $action = isset($_REQUEST['action']) ? sanitize_key($_REQUEST['action']) : false; $nonce = isset($_REQUEST['nonce']) ? sanitize_key($_REQUEST['nonce']) : false; return array('valid' => $action && $nonce && $nonce === get_transient('if-menu-nonce-' . $action)); }, 'permission_callback' => '__return_true', )); } } /* ------------------------------------------------ Include default visibility rules for menu items ------------------------------------------------ */ include 'src/user-info.php'; include 'src/conditions-basic.php'; include 'src/conditions-multiple-options.php'; /* ------------------------------------------------ Run the plugin ------------------------------------------------ */ if (version_compare(PHP_VERSION, '5.4', '<')) { add_action('admin_notices', function() { ?> <div class="notice notice-warning is-dismissible"> <p><?php printf(__('<strong>If Menu</strong> plugin requires PHP version to be at least 5.4, current one is %s', 'if-menu'), PHP_VERSION) ?></p> </div> <?php }); } add_action('plugins_loaded', 'If_Menu::init'); add_action('plugins_loaded', 'Layered\IfMenu\Admin::start');
Copyright ©2021 || Defacer Indonesia