• File: MemberPress.php
  • Full Path: /home/matthif/www/wp-content/plugins/optinmonster/OMAPI/MemberPress.php
  • Date Modified: 01/24/2025 1:58 PM
  • File size: 4.12 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/**
 * MemberPress class.
 *
 * @since 2.13.0
 *
 * @package OMAPI
 * @author  Eduardo Nakatsuka
 */

// Exit if accessed directly.
if ( ! defined'ABSPATH' ) ) {
    exit;
}

/**
 * The MemberPress class.
 *
 * @since 2.13.0
 */
class OMAPI_MemberPress extends OMAPI_Integrations_Base {

    
/**
     * Holds the OMAPI_MemberPress_Courses class instance.
     *
     * @since 2.13.0
     *
     * @var OMAPI_MemberPress_Courses
     */
    
public $courses;

    
/**
     * Holds the OMAPI_MemberPress_ProductEducation class instance.
     *
     * @since 2.13.5
     *
     * @var OMAPI_MemberPress_ProductEducation
     */
    
public $education;

    
/**
     * The minimum MemberPress version required.
     *
     * @since 2.13.0
     *
     * @var string
     */
    
const MINIMUM_VERSION '1.9.39';

    
/**
     * Primary class constructor.
     *
     * @since 2.13.0
     */
    
public function __construct() {
        
parent::__construct();

        
// Set our object.
        
$this->courses   = new OMAPI_MemberPress_Courses$this );
        
$this->education = new OMAPI_MemberPress_ProductEducation();

        if ( 
self::is_active() && self::is_minimum_version() ) {
            
add_filter'optin_monster_campaigns_js_api_args', array( $this'add_args' ) );
            
add_filter'optin_monster_api_setting_ui_data', array( $this'add_args' ) );

            
wp_enqueue_style(
                
$this->base->plugin_slug '-memberpress',
                
$this->base->url 'assets/dist/css/memberpress.min.css',
                array(),
                
$this->base->asset_version()
            );

            
$this->education->add_meta_box();
        }
    }

    
/**
     * Check if the MemberPress plugin is active.
     *
     * @since 2.13.0
     *
     * @return boolean
     */
    
public static function is_active() {
        return 
defined'MEPR_PLUGIN_SLUG' ) && class_exists'MeprCptModel'true );
    }

    
/**
     * Return the MemberPress Plugin version string.
     *
     * @since 2.13.0
     *
     * @return string
     */
    
public static function version() {
        return 
defined'MEPR_VERSION' ) ? MEPR_VERSION '0.0.0';
    }

    
/**
     * Adds the `memberpress` object to payload, which is passed to the JS frontend.
     *
     * @since 2.13.0
     *
     * @param  array $args This is the array of parameters that will be passed to the JS file.
     * @return array $args The array with the `memberpress` payload.
     */
    
public function add_args$args ) {
        
$args['memberpress'] = array(
            
'groups'                  => self::format_data$this->retrieve_mp_data'MeprGroup' ) ),
            
'memberships'             => self::format_data$this->retrieve_mp_data'MeprProduct' ) ),
            
'isActive'                => self::is_active(),
            
'isCoursesActive'         => OMAPI_MemberPress_Courses::is_active(),
            
'checkoutTemplateEnabled' => self::isProTemplateEnabled'checkout' ),
        );

        
$args['memberpress'] = array_merge$args['memberpress'], $this->courses->get_args() );

        return 
$args;
    }

    
/**
     * Format data to be consumed by the front-end admin output settings.
     *
     * @since 2.13.0
     *
     * @param  array $payload The data to be formatted.
     * @return array          The formatted data
     */
    
public static function format_data$payload ) {
        
$data = array();

        if ( empty( 
$payload ) || ! is_array$payload ) ) {
            return 
$data;
        }

        foreach ( 
$payload as $entity ) {
            
$data[] = array(
                
'value' => $entity->ID,
                
'label' => $entity->post_title,
                
'name'  => $entity->post_title,
            );
        }

        return 
$data;
    }

    
/**
     * Retrieve MemberPress model data.
     *
     * @since 2.13.0
     *
     * @param  string $model The entity model name.
     * @return array         The array model data.
     */
    
private function retrieve_mp_data$model ) {
        
// Bail if MemberPress isn't currently active.
        
if ( ! self::is_active() || ! self::is_minimum_version() ) {
            return array();
        }

        
$data MeprCptModel::all$model );

        if ( empty( 
$data ) ) {
            return array();
        }

        return 
$data;
    }

    
/**
     * Determine if a "pro" template is enabled.
     *
     * @param string $name The template name.
     * @return boolean     True if enabled.
     */
    
public static function isProTemplateEnabled$name ) {
        if ( ! 
class_exists'MeprOptions'true ) ) {
            return 
false;
        }

        
$options   MeprOptions::fetch();
        
$attribute 'design_enable_' $name '_template';

        return ! empty( 
$options->$attribute ) && filter_var$options->$attributeFILTER_VALIDATE_BOOLEAN );
    }
}