verygoodplugins

Untitled

Jan 25th, 2021
589
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. class WPF_User_Meta extends WPF_Integrations_Base {
  8.  
  9.  
  10.     /**
  11.      * Gets things started
  12.      *
  13.      * @access public
  14.      * @since  1.0
  15.      * @return void
  16.      */
  17.  
  18.     public function init() {
  19.  
  20.         $this->slug = 'user-meta';
  21.  
  22.         add_filter( 'wpf_meta_field_groups', array( $this, 'add_meta_field_group' ), 15 );
  23.         add_filter( 'wpf_meta_fields', array( $this, 'prepare_meta_fields' ) );
  24.  
  25.         add_filter( 'wpf_pulled_user_meta', array( $this, 'pulled_user_meta' ), 10, 2 );
  26.  
  27.         // Settings
  28.         add_filter( 'wpf_configure_sections', array( $this, 'configure_sections' ), 10, 2 );
  29.         add_filter( 'wpf_configure_settings', array( $this, 'register_settings' ), 15, 2 );
  30.  
  31.         // Defer until activation
  32.         add_filter( 'user_meta_pre_user_register', array( $this, 'before_user_registration' ) );
  33.         add_action( 'user_meta_user_activate', array( $this, 'after_user_activation' ) );
  34.         add_action( 'user_meta_email_verified', array( $this, 'after_user_activation' ) );
  35.         add_action( 'user_meta_user_approved', array( $this, 'after_user_activation' ) );
  36.  
  37.         // User Meta hooks
  38.         add_action( 'user_meta_after_user_update', array( $this, 'user_update' ), 10, 2 );
  39.         add_action( 'user_meta_after_user_register', array( $this, 'user_update' ), 10 );
  40.  
  41.     }
  42.  
  43.     /**
  44.      * Adds User Meta field group to meta fields list
  45.      *
  46.      * @access public
  47.      * @return array Field groups
  48.      */
  49.  
  50.     public function add_meta_field_group( $field_groups ) {
  51.  
  52.         if ( ! isset( $field_groups['usermeta'] ) ) {
  53.  
  54.             $field_groups['usermeta'] = array(
  55.                 'title'  => 'User Meta',
  56.                 'fields' => array(),
  57.             );
  58.  
  59.         }
  60.  
  61.         return $field_groups;
  62.  
  63.     }
  64.  
  65.     /**
  66.      * Adds User Meta meta fields to WPF contact fields list
  67.      *
  68.      * @access public
  69.      * @return array Meta Fields
  70.      */
  71.  
  72.     public function prepare_meta_fields( $meta_fields ) {
  73.  
  74.         global $userMeta;
  75.  
  76.         // Get shared fields
  77.         $fields = $userMeta->getData( 'fields' );
  78.  
  79.         if ( ! empty( $fields ) ) {
  80.  
  81.             foreach ( (array) $fields as $field ) {
  82.  
  83.                 if ( ! isset( $field['meta_key'] ) ) {
  84.                     continue;
  85.                 }
  86.  
  87.                 if ( 'datetime' == $field['field_type'] ) {
  88.                     $field['field_type'] = 'date';
  89.                 }
  90.  
  91.                 $meta_fields[ $field['meta_key'] ] = array(
  92.                     'label' => $field['field_title'],
  93.                     'type'  => $field['field_type'],
  94.                     'group' => 'usermeta',
  95.                 );
  96.  
  97.             }
  98.         }
  99.  
  100.         // Get form specific fields
  101.         $forms = $userMeta->getData( 'forms' );
  102.  
  103.         if ( ! empty( $forms ) ) {
  104.  
  105.             foreach ( $forms as $form ) {
  106.  
  107.                 foreach ( $form['fields'] as $field ) {
  108.  
  109.                     if ( ! isset( $field['meta_key'] ) ) {
  110.                         continue;
  111.                     }
  112.  
  113.                     if ( 'datetime' == $field['field_type'] ) {
  114.                         $field['field_type'] = 'date';
  115.                     }
  116.  
  117.                     $meta_fields[ $field['meta_key'] ] = array(
  118.                         'label' => $field['field_title'],
  119.                         'type'  => $field['field_type'],
  120.                         'group' => 'usermeta',
  121.                     );
  122.  
  123.                 }
  124.             }
  125.         }
  126.  
  127.         return $meta_fields;
  128.  
  129.     }
  130.  
  131.     /**
  132.      * Adds Integrations tab if not already present
  133.      *
  134.      * @access public
  135.      * @return array Page
  136.      */
  137.  
  138.     public function configure_sections( $page, $options ) {
  139.  
  140.         if ( ! isset( $page['sections']['integrations'] ) ) {
  141.             $page['sections'] = wp_fusion()->settings->insert_setting_after( 'contact-fields', $page['sections'], array( 'integrations' => __( 'Integrations', 'wp-fusion' ) ) );
  142.         }
  143.  
  144.         return $page;
  145.  
  146.     }
  147.  
  148.     /**
  149.      * Add fields to settings page
  150.      *
  151.      * @access public
  152.      * @return array Settings
  153.      */
  154.  
  155.     public function register_settings( $settings, $options ) {
  156.  
  157.         $settings['ump_header'] = array(
  158.             'title'   => __( 'User Meta Pro Integration', 'wp-fusion' ),
  159.             'std'     => 0,
  160.             'type'    => 'heading',
  161.             'section' => 'integrations',
  162.         );
  163.  
  164.         $settings['ump_defer'] = array(
  165.             'title'   => __( 'Defer Until Activation', 'wp-fusion' ),
  166.             'desc'    => sprintf( __( 'Don\'t send any data to %s until the account has been activated, either by an administrator or via email activation.', 'wp-fusion' ), wp_fusion()->crm->name ),
  167.             'std'     => 0,
  168.             'type'    => 'checkbox',
  169.             'section' => 'integrations',
  170.         );
  171.  
  172.         return $settings;
  173.  
  174.     }
  175.  
  176.     /**
  177.      * Triggered before registration, allows removing WPF create_user hook
  178.      *
  179.      * @access public
  180.      * @return void
  181.      */
  182.  
  183.     public function before_user_registration( $registration_data ) {
  184.  
  185.         if ( wp_fusion()->settings->get( 'ump_defer' ) == true ) {
  186.             remove_action( 'user_register', array( wp_fusion()->user, 'user_register' ), 20 );
  187.         }
  188.  
  189.         return $registration_data;
  190.  
  191.     }
  192.  
  193.     /**
  194.      * Triggered after activation, syncs the new user to the CRM
  195.      *
  196.      * @access public
  197.      * @return void
  198.      */
  199.  
  200.     public function after_user_activation( $user_id ) {
  201.  
  202.         if ( wp_fusion()->settings->get( 'ump_defer' ) == true ) {
  203.             wp_fusion()->user->user_register( $user_id );
  204.         }
  205.  
  206.     }
  207.  
  208.     /**
  209.      * Format date fields when data is loaded
  210.      *
  211.      * @access public
  212.      * @return array Meta data
  213.      */
  214.  
  215.     public function pulled_user_meta( $user_meta, $user_id ) {
  216.  
  217.         global $userMeta;
  218.  
  219.         // Get shared fields
  220.         $fields = $userMeta->getData( 'fields' );
  221.  
  222.         if ( ! empty( $fields ) ) {
  223.  
  224.             foreach ( (array) $fields as $field ) {
  225.  
  226.                 if ( ! isset( $field['meta_key'] ) ) {
  227.                     continue;
  228.                 }
  229.  
  230.                 if ( ! empty( $user_meta[ $field['meta_key'] ] ) && 'datetime' == $field['field_type'] ) {
  231.  
  232.                     if ( ! isset( $field['date_format'] ) ) {
  233.                         $format = 'Y-m-d';
  234.                     } else {
  235.                         $format = $field['date_format'];
  236.                     }
  237.  
  238.                     $user_meta[ $field['meta_key'] ] = date( $format, strtotime( $user_meta[ $field['meta_key'] ] ) );
  239.  
  240.                 }
  241.             }
  242.         }
  243.  
  244.         // Get form specific fields
  245.         $forms = $userMeta->getData( 'forms' );
  246.  
  247.         if ( ! empty( $forms ) ) {
  248.  
  249.             foreach ( $forms as $form ) {
  250.  
  251.                 foreach ( $form['fields'] as $field ) {
  252.  
  253.                     if ( ! isset( $field['meta_key'] ) ) {
  254.                         continue;
  255.                     }
  256.  
  257.                     if ( ! empty( $user_meta[ $field['meta_key'] ] ) && 'datetime' == $field['field_type'] ) {
  258.  
  259.                         if ( ! isset( $field['date_format'] ) ) {
  260.                             $format = 'Y-m-d';
  261.                         } else {
  262.                             $format = $field['date_format'];
  263.                         }
  264.  
  265.                         $user_meta[ $field['meta_key'] ] = date( $format, strtotime( $user_meta[ $field['meta_key'] ] ) );
  266.  
  267.                     }
  268.                 }
  269.             }
  270.         }
  271.  
  272.         return $user_meta;
  273.  
  274.     }
  275.  
  276.  
  277.     /**
  278.      * Push changes to user meta on profile update and registration
  279.      *
  280.      * @access public
  281.      * @return array Meta Fields
  282.      */
  283.  
  284.     public function user_update( $response, $formname = false ) {
  285.  
  286.         $user_meta = array();
  287.  
  288.         foreach ( $response as $key => $value ) {
  289.             $user_meta[ $key ] = $value;
  290.         }
  291.  
  292.         wp_fusion()->user->push_user_meta( $user_meta['ID'], $user_meta );
  293.  
  294.     }
  295.  
  296. }
  297.  
  298. new WPF_User_Meta();
  299.  
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.

×