Advertisement
verygoodplugins

Untitled

Jan 25th, 2021
789
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.59 KB | None | 0 0
  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.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement