verygoodplugins

Untitled

Mar 16th, 2021
679
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. if ( ! defined( 'ABSPATH' ) ) {
  4.     exit; // Exit if accessed directly
  5. }
  6.  
  7.  
  8. class WPF_Members_Plugin extends WPF_Integrations_Base {
  9.  
  10.     /**
  11.      * Gets things started.
  12.      *
  13.      * @since 3.37.3
  14.      */
  15.  
  16.     public function init() {
  17.         $this->slug = 'members-plugin';
  18.  
  19.         // Show Metabox
  20.         add_action( 'members_load_role_edit', array( $this, 'load' ) );
  21.         add_action( 'members_load_role_new', array( $this, 'load' ) );
  22.  
  23.         // Save role position.
  24.         add_action( 'members_role_updated', array( $this, 'save_meta_box_data' ) );
  25.         add_action( 'members_role_added', array( $this, 'save_meta_box_data' ) );
  26.  
  27.         // Remove role meta
  28.         add_action( 'admin_init', array( $this, 'remove_meta_role' ) );
  29.  
  30.         // Callbacks and filters
  31.         add_action( 'wpf_tags_modified', array( $this, 'tags_modified' ), 10, 2 );
  32.     }
  33.  
  34.  
  35.  
  36.     /**
  37.      * Updates user's role if tag is linked to a Members role is changed.
  38.      *
  39.      * @since 3.37.3
  40.      *
  41.      * @param int   $user_id
  42.      * @param array $user_tags
  43.      */
  44.     public function tags_modified( $user_id, $user_tags ) {
  45.  
  46.         global $wp_roles;
  47.  
  48.         $user = get_userdata( $user_id );
  49.  
  50.         foreach ( $wp_roles->role_names as $slug => $label ) {
  51.  
  52.             $settings = get_option( 'members_role_' . $slug . '_meta' );
  53.  
  54.             if ( empty( $settings ) || empty( $settings['wpf_tag_link'] ) ) {
  55.                 continue;
  56.             }
  57.  
  58.             $tag_id = $settings['wpf_tag_link'][0];
  59.  
  60.             if ( in_array( $tag_id, $user_tags ) && ! in_array( $slug, $user->roles ) && ! user_can( $user_id, 'manage_options' ) ) {
  61.  
  62.                 if ( strpos( $slug, 'members_' ) !== false ) {
  63.  
  64.                     // Logger
  65.                     wpf_log( 'info', $user_id, 'Setting Members plugin role <strong>' . $label . '</strong> from linked tag <strong>' . wp_fusion()->user->get_tag_label( $tag_id ) . '</strong>', array( 'source' => 'members-plugin' ) );
  66.  
  67.                     // Set Role
  68.                     wp_update_user(
  69.                         array(
  70.                             'ID'   => $user_id,
  71.                             'role' => $slug,
  72.                         )
  73.                     );
  74.  
  75.                 } else {
  76.  
  77.                     // Logger
  78.                     wpf_log( 'info', $user_id, 'Setting user role <strong>' . $label . '</strong> from linked tag <strong>' . wp_fusion()->user->get_tag_label( $tag_id ) . '</strong>', array( 'source' => 'members-plugin' ) );
  79.  
  80.                     // WordPress roles
  81.                     $user->set_role( $slug );
  82.  
  83.                 }
  84.             } elseif ( ! in_array( $tag_id, $user_tags ) && in_array( $slug, $user->roles ) && ! user_can( $user_id, 'manage_options' ) ) {
  85.  
  86.                 // Logger
  87.                 wpf_log( 'info', $user_id, 'Removing Members plugin member role <strong>' . $label . '</strong> from linked tag <strong>' . wp_fusion()->user->get_tag_label( $tag_id ) . '</strong>', array( 'source' => 'members-plugin' ) );
  88.  
  89.                 $user->remove_role( $slug );
  90.  
  91.                 if ( empty( $user->roles ) ) {
  92.  
  93.                     // We don't want to leave someone with no role so we'll assign the default role
  94.                     $default_role = get_option( 'default_role' );
  95.  
  96.                     wpf_log( 'info', $user_id, 'User was left with no role so assigning default role <strong>' . $default_role . '</strong>.', array( 'source' => 'members-plugin' ) );
  97.  
  98.                     wp_update_user(
  99.                         array(
  100.                             'ID'   => $user_id,
  101.                             'role' => $default_role,
  102.                         )
  103.                     );
  104.                 }
  105.             }
  106.         }
  107.     }
  108.  
  109.  
  110.     /**
  111.      * Remove role meta when the role is removed.
  112.      *
  113.      * @since 3.37.3
  114.      */
  115.     public function remove_meta_role() {
  116.         // Get the current action if sent as request.
  117.         $action = isset( $_REQUEST['action'] ) ? sanitize_key( $_REQUEST['action'] ) : false;
  118.  
  119.         // Get the current action if posted.
  120.         if ( ( isset( $_POST['action'] ) && 'delete' == $_POST['action'] ) || ( isset( $_POST['action2'] ) && 'delete' == $_POST['action2'] ) ) {
  121.             $action = 'bulk-delete';
  122.         }
  123.  
  124.         // Bulk delete role handler.
  125.         if ( 'bulk-delete' === $action ) {
  126.  
  127.             // If roles were selected, let's delete some roles.
  128.             if ( current_user_can( 'delete_roles' ) && isset( $_POST['roles'] ) && is_array( $_POST['roles'] ) ) {
  129.  
  130.                 // Verify the nonce. Nonce created via `WP_List_Table::display_tablenav()`.
  131.                 check_admin_referer( 'bulk-roles' );
  132.  
  133.                 // Loop through each of the selected roles.
  134.                 foreach ( $_POST['roles'] as $role ) {
  135.  
  136.                     $role = members_sanitize_role( $role );
  137.  
  138.                     if ( members_role_exists( $role ) ) {
  139.                         delete_option( "members_role_{$role}_meta" );
  140.                     }
  141.                 }
  142.             }
  143.  
  144.             // Delete single role handler.
  145.         } elseif ( 'delete' === $action ) {
  146.  
  147.             // Make sure the current user can delete roles.
  148.             if ( current_user_can( 'delete_roles' ) ) {
  149.  
  150.                 // Verify the referer.
  151.                 check_admin_referer( 'delete_role', 'members_delete_role_nonce' );
  152.  
  153.                 // Get the role we want to delete.
  154.                 $role = members_sanitize_role( $_GET['role'] );
  155.  
  156.                 // Check that we have a role before attempting to delete it.
  157.                 if ( members_role_exists( $role ) ) {
  158.                     // Delete the role meta.
  159.                     delete_option( "members_role_{$role}_meta" );
  160.                 }
  161.             }
  162.         }
  163.     }
  164.  
  165.  
  166.     /**
  167.      * Runs on the page load hook to hook in the meta boxes.
  168.      *
  169.      * @since 3.37.3
  170.      */
  171.  
  172.     public function load() {
  173.         add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
  174.     }
  175.  
  176.  
  177.     /**
  178.      * Adds meta box, only for Members role page.
  179.      *
  180.      * @since 3.37.3
  181.      *
  182.      * @param object $screen_id
  183.      * @param string $role
  184.      */
  185.     public function add_meta_box( $screen_id, $role = '' ) {
  186.         // If role isn't editable, bail.
  187.         if ( $role && ! members_is_role_editable( $role ) ) {
  188.             return;
  189.         }
  190.  
  191.         add_meta_box( 'wpf-members-meta', 'WP Fusion', array( $this, 'meta_box_callback' ), $screen_id, 'side', 'core' );
  192.     }
  193.  
  194.     /**
  195.      * Displays meta box content.
  196.      *
  197.      * @since 3.37.3
  198.      *
  199.      * @param string $role
  200.      */
  201.     public function meta_box_callback( $role ) {
  202.         // Add an nonce field so we can check for it later.
  203.         wp_nonce_field( 'wpf_meta_box_members', 'wpf_meta_box_members_nonce' );
  204.  
  205.         $settings = array(
  206.             'wpf_tag_link' => array(),
  207.         );
  208.         if ( isset( $_GET['role'] ) ) {
  209.             $settings = get_option( "members_role_{$_GET['role']}_meta" );
  210.         }
  211.  
  212.         /*
  213.         // Apply tags
  214.         */
  215.  
  216.         echo '<p><label><strong>' . sprintf( __( 'Link with %s tag', 'wp-fusion' ), wp_fusion()->crm->name ) . ':</strong></label></p>';
  217.  
  218.         $args = array(
  219.             'setting'     => $settings['wpf_tag_link'],
  220.             'meta_name'   => 'members_tag',
  221.             'field_id'    => 'wpf_tag_link',
  222.             'placeholder' => 'Select Tag',
  223.             'limit'       => 1,
  224.         );
  225.  
  226.         wpf_render_tag_multiselect( $args );
  227.  
  228.         echo '<span class="description">When the selected tag is applied, users will automatically be given the ' . ( isset( $_GET['role'] ) ? $_GET['role'] : '' ) . ' role. <br /><br />When the tag is removed the role will be removed.</span>';
  229.  
  230.     }
  231.  
  232.  
  233.     /**
  234.      * Saves Members meta box data
  235.      *
  236.      * @since 3.37.3
  237.      * @access public
  238.      * @return null
  239.      */
  240.  
  241.     public function save_meta_box_data() {
  242.         // Check if our nonce is set.
  243.         if ( ! isset( $_POST['wpf_meta_box_members_nonce'] ) ) {
  244.             return;
  245.         }
  246.  
  247.         // Verify that the nonce is valid.
  248.         if ( ! wp_verify_nonce( $_POST['wpf_meta_box_members_nonce'], 'wpf_meta_box_members' ) ) {
  249.             return;
  250.         }
  251.  
  252.         // If this is an autosave, our form has not been submitted, so we don't want to do anything.
  253.         if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
  254.             return;
  255.         }
  256.  
  257.         if ( isset( $_GET['role'] ) ) {
  258.             $role_name = $_GET['role'];
  259.         } else {
  260.             $role_name = $_POST['role_name'];
  261.         }
  262.  
  263.         if ( isset( $_POST['members_tag'] ) && isset( $_POST['members_tag']['wpf_tag_link'] ) ) {
  264.             update_option( "members_role_{$role_name}_meta", $_POST['members_tag'], false );
  265.         } else {
  266.             delete_option( "members_role_{$role_name}_meta" );
  267.         }
  268.     }
  269.  
  270.  
  271.  
  272. }
  273.  
  274. new WPF_Members_Plugin();
  275.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×