File Editor
Directories:
.. (Back)
EasyDigitalDownloads
Elementor
Integrations
MemberPress
Plugins
Promos
Rules
Shortcodes
WPForms
WooCommerce
Files:
Actions.php
Ajax.php
Api.php
ApiAuth.php
ApiKey.php
AssetLoader.php
BaseRestApi.php
Blocks.php
ClassicEditor.php
ConstantContact.php
Debug.php
EasyDigitalDownloads.php
Elementor.php
Inserter.php
InstallSkin.php
InstallSkinCompat.php
MailPoet.php
MemberPress.php
Menu.php
Notifications.php
OmuApi.php
Output.php
Pages.php
Partners.php
Plugins.php
Promos.php
Refresh.php
RestApi.php
RevenueAttribution.php
Review.php
Rules.php
Save.php
Shortcode.php
Sites.php
Support.php
Type.php
Urls.php
Utils.php
Validate.php
WPForms.php
Welcome.php
Widget.php
WooCommerce.php
WpErrorException.php
Create New File
Create
Edit File: Blocks.php
<?php /** * Gutenberg Blocks registration class. * * @since 1.9.10 * * @package OMAPI * @author Thomas Griffin */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Gutenberg Blocks registration class. * * @since 1.9.10 */ class OMAPI_Blocks { /** * Holds the class object. * * @since 1.9.10 * * @var object */ public static $instance; /** * Path to the file. * * @since 1.9.10 * * @var string */ public $file = __FILE__; /** * Holds the base class object. * * @since 1.9.10 * * @var object */ public $base; /** * The data to be localized for JS. * * @since 2.2.0 * * @var array */ protected $data_for_js = array(); /** * The campaign options list array. * * @var null|array */ protected static $campaigns_list = null; /** * Primary class constructor. * * @since 1.9.10 */ public function __construct() { // Set our object. $this->set(); if ( function_exists( 'register_block_type' ) ) { // Register our blocks. $this->register_blocks(); add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) ); // Register the global post campaign switch meta. register_meta( 'post', 'om_disable_all_campaigns', array( 'show_in_rest' => true, 'single' => true, 'type' => 'boolean', ) ); } } /** * Sets our object instance and base class instance. * * @since 1.9.10 */ public function set() { self::$instance = $this; $this->base = OMAPI::get_instance(); } /** * Register OptinMonster Gutenberg blocks on the backend. * * @since 1.9.10 */ public function register_blocks() { $use_blocks_json = version_compare( $GLOBALS['wp_version'], '5.8', '>=' ); $block_type = plugin_dir_path( OMAPI_FILE ) . 'assets/js/'; $args = array( 'render_callback' => array( $this, 'get_output' ), ); if ( ! $use_blocks_json ) { $block_type = 'optinmonster/campaign-selector'; $args['attributes'] = array( 'slug' => array( 'type' => 'string', ), 'followrules' => array( 'type' => 'boolean', ), ); } register_block_type( $block_type, $args ); } /** * Load OptinMonster Gutenberg block scripts. * * @since 1.9.10 */ public function enqueue_block_editor_assets() { global $pagenow; $version = $this->base->asset_version(); $css_handle = $this->base->plugin_slug . '-blocks-admin'; wp_enqueue_style( $css_handle, $this->base->url . 'assets/dist/css/blocks-admin.min.css', array(), $version ); if ( function_exists( 'wp_add_inline_style' ) ) { $data = get_post_type() ? get_post_type_object( get_post_type() ) : array(); $css = $this->base->get_min_css_view_contents( 'disable-warning-css.php', (object) $data ); wp_add_inline_style( $css_handle, $css ); } $campaign_selector_handle = $this->base->plugin_slug . '-gutenberg-campaign-selector'; wp_enqueue_script( $campaign_selector_handle, $this->base->url . 'assets/dist/js/campaign-selector.min.js', array( 'wp-blocks', 'wp-i18n', 'wp-element' ), $version, true ); OMAPI_Utils::add_inline_script( $campaign_selector_handle, 'OMAPI', $this->get_data_for_js() ); $is_widgets_page = 'widgets.php' === $pagenow; // Prevent enqueueing sidebar settings on widgets screen... if ( ! $is_widgets_page ) { wp_enqueue_script( $this->base->plugin_slug . '-gutenberg-sidebar-settings', $this->base->url . 'assets/dist/js/om-settings.min.js', array( $campaign_selector_handle, 'wp-plugins', 'wp-edit-post', 'wp-element' ), $version ); } if ( version_compare( $GLOBALS['wp_version'], '5.3', '>=' ) ) { wp_enqueue_script( $this->base->plugin_slug . '-gutenberg-format-button', $this->base->url . 'assets/dist/js/om-format.min.js', array( $campaign_selector_handle, 'wp-rich-text', 'wp-element', $is_widgets_page && version_compare( $GLOBALS['wp_version'], '5.8.0', '>=' ) ? 'wp-edit-widgets' : 'wp-editor', ), $version ); } } /** * Get OptinMonster data for Gutenberg JS. * * @since 2.2.0 * * @param string $key The js data to get, by key. * * @return array Array of data for JS. */ public function get_data_for_js( $key = null ) { if ( empty( $this->data_for_js ) ) { // For translation of strings. $i18n = array( 'title' => esc_html__( 'OptinMonster', 'optin-monster-api' ), 'description' => esc_html__( 'Select and display one of your OptinMonster inline campaigns.', 'optin-monster-api' ), 'campaign_select' => esc_html__( 'Select Campaign...', 'optin-monster-api' ), 'campaign_select_display' => esc_html__( 'Select and display your email marketing call-to-action campaigns from OptinMonster', 'optin-monster-api' ), 'create_new_popup' => esc_html__( 'Create New Popup Campaign', 'optin-monster-api' ), 'create_new_inline' => esc_html__( 'Create New Inline Campaign', 'optin-monster-api' ), 'block_settings' => esc_html__( 'OptinMonster Block Settings', 'optin-monster-api' ), 'settings' => esc_html__( 'OptinMonster Settings', 'optin-monster-api' ), 'campaign_selected' => esc_html__( 'Campaign', 'optin-monster-api' ), 'followrules_label' => esc_html__( 'Use Output Settings', 'optin-monster-api' ), /* translators: %s - Output Settings (linked).*/ 'followrules_help' => esc_html__( 'Ensure this campaign follows any conditions you\'ve selected in its %s', 'optin-monster-api' ), 'output_settings' => esc_html__( 'Output Settings', 'optin-monster-api' ), 'no_sites' => esc_html__( 'Please create a free account or connect an existing account to use an OptinMonster block.', 'optin-monster-api' ), 'no_sites_button_create_account' => esc_html__( 'Create a Free Account', 'optin-monster-api' ), 'no_sites_button_connect_account' => esc_html__( 'Connect an Existing Account', 'optin-monster-api' ), 'no_inline_campaigns' => esc_html__( 'You don’t have any inline campaigns yet!', 'optin-monster-api' ), 'no_campaigns_help' => esc_html__( 'Create an inline campaign to display in your posts and pages.', 'optin-monster-api' ), 'create_inline_campaign' => esc_html__( 'Create Your First Inline Campaign', 'optin-monster-api' ), 'create_popup_campaign' => esc_html__( 'Create Your First Popup', 'optin-monster-api' ), 'no_campaigns_button_help' => esc_html__( 'Learn how to create your first campaign', 'optin-monster-api' ), 'found_error' => esc_html__( 'An error was encountered', 'optin-monster-api' ), 'disable_all' => esc_html__( 'Disable all OptinMonster campaigns.', 'optin-monster-api' ), 'view_all' => esc_html__( 'View All Campaigns', 'optin-monster-api' ), 'not_connected' => esc_html__( 'You Have Not Connected with OptinMonster', 'optin-monster-api' ), 'no_campaigns_yet' => esc_html__( 'You don’t have any campaigns created yet.', 'optin-monster-api' ), 'update_selected_popup' => esc_html__( 'Update Selected OptinMonster Campaign', 'optin-monster-api' ), 'open_popup' => esc_html__( 'Open an OptinMonster Popup', 'optin-monster-api' ), 'remove_popup' => esc_html__( 'Remove Campaign Link', 'optin-monster-api' ), 'upgrade_monsterlink' => esc_html__( 'Unlock access to the OptinMonster click-to-load feature called MonsterLinks by upgrading your subscription.', 'optin-monster-api' ), 'upgrade' => esc_html__( 'Upgrade Now', 'optin-monster-api' ), ); $i18n['description'] = html_entity_decode( $i18n['description'], ENT_COMPAT, 'UTF-8' ); $campaigns = $this->get_campaign_options(); $site_ids = $this->base->get_site_ids(); $post = get_post(); $this->data_for_js = array( 'logoUrl' => $this->base->url . 'assets/css/images/icons/archie-icon.svg', 'i18n' => $i18n, 'campaigns' => array( 'inline' => ! empty( $campaigns['inline'] ) ? $campaigns['inline'] : array(), 'other' => ! empty( $campaigns['other'] ) ? $campaigns['other'] : array(), ), 'site_ids' => ! empty( $site_ids ) ? $site_ids : array(), 'post' => $post, 'omEnv' => defined( 'OPTINMONSTER_ENV' ) ? OPTINMONSTER_ENV : '', 'canMonsterlink' => $this->base->has_rule_type( 'monster-link' ), 'templatesUri' => OMAPI_Urls::templates(), 'playbooksUri' => OMAPI_Urls::playbooks(), 'campaignsUri' => OMAPI_Urls::campaigns(), 'settingsUri' => OMAPI_Urls::settings(), 'wizardUri' => OMAPI_Urls::wizard(), 'upgradeUri' => OMAPI_Urls::upgrade( 'gutenberg', '--FEATURE--' ), 'apiUrl' => esc_url_raw( OPTINMONSTER_APIJS_URL ), 'omUserId' => $this->base->get_option( 'accountUserId' ), 'outputSettingsUrl' => OMAPI_Urls::campaign_output_settings( '%s' ), 'editUrl' => OMAPI_Urls::om_app( 'campaigns/--CAMPAIGN_SLUG--/edit/', rawurlencode( OMAPI_Urls::campaign_output_settings( '--CAMPAIGN_SLUG--' ) ) ), 'monsterlink' => esc_url_raw( OPTINMONSTER_SHAREABLE_LINK ) . '/c/', 'wpVersion' => $GLOBALS['wp_version'], 'customFieldsSupported' => post_type_supports( get_post_type( $post ), 'custom-fields' ), ); } if ( $key ) { return isset( $this->data_for_js[ $key ] ) ? $this->data_for_js[ $key ] : null; } return $this->data_for_js; } /** * Does the user have any associated OM sites registered? * * @since 2.2.0 * * @return boolean */ public function has_sites() { $site_ids = $this->base->get_site_ids(); return ! empty( $site_ids ); } /** * Get campaign options. * * @since 2.2.0 * * @param boolean $titles_only Whether to include titles only, or separate data as array. * * @return array Array of campaign options. */ public function get_campaign_options( $titles_only = false ) { if ( null === self::$campaigns_list ) { $campaigns_list = array( 'inline' => array(), 'other' => array(), ); if ( $this->has_sites() ) { $campaigns = $this->base->get_campaigns(); if ( ! empty( $campaigns ) ) { foreach ( $campaigns as $campaign ) { $title = mb_strlen( $campaign->post_title, 'UTF-8' ) > 100 ? mb_substr( $campaign->post_title, 0, 97, 'UTF-8' ) . '...' : $campaign->post_title; $title .= ' (' . $campaign->post_name . ')'; $type = 'inline' === $campaign->campaign_type ? 'inline' : 'other'; $campaigns_list[ $type ][ $campaign->post_name ] = array( 'title' => $title, 'pending' => empty( $campaign->enabled ), ); } } } self::$campaigns_list = $campaigns_list; } if ( $titles_only && ! empty( self::$campaigns_list ) ) { $list = array(); foreach ( self::$campaigns_list as $type => $type_list ) { foreach ( $type_list as $campaign_name => $args ) { $list[ $type ][ $campaign_name ] = $args['title'] . ( $args['pending'] ? ' [Pending]' : '' ); } } return $list; } return self::$campaigns_list; } /** * Get form HTML to display in a OptinMonster Gutenberg block. * * @param array $atts Attributes passed by OptinMonster Gutenberg block. * * @since 1.9.10 * * @return string */ public function get_output( $atts ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $context = ! empty( $_REQUEST['context'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['context'] ) ) : ''; $is_rest = defined( 'REST_REQUEST' ) && REST_REQUEST; $is_gutes = $is_rest && 'edit' === $context; // Our Guten-block handles the embed output manually. if ( $is_gutes ) { return; } // Unslash and sanitize the shortcode attributes. $atts = array_map( 'sanitize_text_field', wp_unslash( $atts ) ); // Gutenberg block shortcodes default to following the rules. // See assets/js/campaign-selector.js, attributes.followrules. if ( ! isset( $atts['followrules'] ) ) { $atts['followrules'] = true; } $atts['followrules'] = wp_validate_boolean( $atts['followrules'] ); $output = $this->base->shortcode->shortcode( $atts ); if ( ! empty( $output ) && ! wp_script_is( $this->base->plugin_slug . '-api-script', 'enqueued' ) ) { // Need to enqueue the base api script. $this->base->output->api_script(); } // Just return the shortcode output to the frontend. return $output; } }
Save Changes
Rename File
Rename