/home/techb158/public_html/wp-content/plugins/wpforms-lite/src/Admin/Education/Promo
Edit: /home/techb158/public_html/wp-content/plugins/wpforms-lite/src/Admin/Education/Promo/Banner.php (4853B)
` in user meta).
*
* @since 2.0.1
*
* @return string
*/
abstract protected function get_dismiss_section(): string;
/**
* Arguments for the promo-banner template.
*
* @since 2.0.1
*
* @return array
*/
abstract protected function get_render_args(): array;
/**
* Whether the promoted plugin is installed (Lite or Pro, active or not).
*
* @since 2.0.1
*
* @return bool
*/
abstract protected function is_plugin_installed(): bool;
/**
* Register hooks shared by all banners.
*
* Descendants override this, call `parent::hooks()`, and add their
* placement-specific hooks.
*
* @since 2.0.1
*/
protected function hooks(): void {
add_action( $this->get_enqueue_hook(), [ $this, 'enqueue_assets' ] );
}
/**
* Whether the current admin page hosts this banner.
*
* @since 2.0.1
*
* @return bool
*/
protected function is_allowed_page(): bool {
return wpforms_is_admin_page( 'builder' );
}
/**
* Hook the shared assets are enqueued on.
*
* `hooks()` runs only after `is_allowed_page()` passed, so any other page here is
* one the placement declared itself, and outside the builder there is no builder
* enqueue hook to use.
*
* @since 2.0.1
*
* @return string
*/
protected function get_enqueue_hook(): string {
return wpforms_is_admin_page( 'builder' ) ? 'wpforms_builder_enqueues' : 'admin_enqueue_scripts';
}
/**
* Indicate whether the banner is allowed to load.
*
* @since 2.0.1
*
* @return bool
*/
public function allow_load(): bool {
// Activation is required too: the install AJAX succeeds without it, and the user would be
// left with an installed but inactive plugin and nothing to set up.
// Ordered cheapest first: the installed check scans the plugins directory.
return $this->is_allowed_page()
&& ! $this->is_dismissed()
&& wpforms_can_install( 'plugin' )
&& wpforms_can_activate( 'plugin' )
&& ! $this->is_plugin_installed();
}
/**
* Init.
*
* @since 2.0.1
*/
public function init(): void {
if ( ! $this->allow_load() ) {
return;
}
$this->hooks();
}
/**
* Whether the current user has dismissed this banner.
*
* @since 2.0.1
*
* @return bool
*/
protected function is_dismissed(): bool {
return Helpers::is_dismissed( $this->get_dismiss_section() );
}
/**
* Render the banner markup.
*
* @since 2.0.1
*
* @return string
*/
protected function render_banner(): string {
$args = $this->get_render_args();
$args['banner_id'] = $this->get_banner_id();
$args['dismiss_section'] = $this->get_dismiss_section();
return wpforms_render( 'education/promo-banner', $args, true );
}
/**
* Enqueue the shared promo banner script.
*
* Every banner calls this, so both the enqueue and the localized payload are
* guarded: `ajax_url` comes from the `wpforms_education` object of the
* `wpforms-admin-education-core` dependency, and the only value left here is
* the install label, which is the same for all placements.
*
* @since 2.0.1
*/
public function enqueue_assets(): void {
if ( wp_script_is( self::SCRIPT_HANDLE, 'enqueued' ) ) {
return;
}
$min = wpforms_get_min_suffix();
wp_enqueue_script(
self::SCRIPT_HANDLE,
WPFORMS_PLUGIN_URL . "assets/js/admin/education/promo-banner{$min}.js",
[ 'jquery', 'wp-util', 'wpforms-admin-education-core' ],
WPFORMS_VERSION,
true
);
wp_localize_script(
self::SCRIPT_HANDLE,
'wpforms_education_promo',
[
'installing' => esc_html__( 'Installing...', 'wpforms-lite' ),
// Fallback for a failed install: the `addon_error` string of the education core
// is Pro only and speaks about addons, and the request may carry no message.
'error' => esc_html__( 'Could not install the plugin. Please try again or install it manually.', 'wpforms-lite' ),
]
);
}
}