Files
2026-04-28 15:13:50 +02:00

147 lines
3.0 KiB
PHP

<?php
/**
* Call to Actions Controller.
*
* @package PopupMaker
* @copyright Copyright (c) 2024, Code Atlantic LLC.
*/
namespace PopupMaker\Controllers\Admin;
use PopupMaker\Plugin\Controller;
defined( 'ABSPATH' ) || exit;
/**
* Call to Actions Controller.
*
* @since 1.21.0
*/
class CallToActions extends Controller {
/**
* Register actions.
*
* @return void
*/
public function init() {
add_action( 'admin_menu', [ $this, 'register_page' ], 999 );
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
// add_action( 'init', [ $this, 'register_cta_block' ] );
// add_shortcode( 'popup_maker_cta', [ $this, 'cta_shortcode' ] );
}
/**
* Register admin options pages.
*
* @return void
*/
public function register_page() {
add_submenu_page(
'edit.php?post_type=popup',
__( 'Call to Actions', 'popup-maker' ),
__( 'Call to Actions', 'popup-maker' ),
$this->container->get_permission( 'edit_ctas' ),
'popup-maker-call-to-actions',
[ $this, 'render_page' ]
);
}
/**
* Render settings page title & container.
*
* @return void
*/
public function render_page() {
?>
<div id="popup-maker-call-to-actions-root-container"></div>
<!-- <script>jQuery(() => window.popupMaker.settingsPage.init());</script> -->
<?php
}
/**
* Enqueue assets for the settings page.
*
* @param string $hook Page hook name.
*
* @return void
*/
public function enqueue_scripts( $hook ) {
if ( 'popup_page_popup-maker-call-to-actions' !== $hook ) {
return;
}
// wp_enqueue_editor();
wp_enqueue_script( 'popup-maker-cta-admin' );
}
/**
* Register CTA block.
*
* @return void
*/
public function register_cta_block() {
register_block_type('popup-maker/cta', [
'attributes' => [
'ctaId' => [ 'type' => 'string' ],
'instanceId' => [ 'type' => 'string' ],
],
'render_callback' => [ $this, 'render_cta_block' ],
]);
}
/**
* Render CTA block.
*
* @param array{ctaId: int, instanceId: string} $attributes
* @return string
*/
public function render_cta_block( $attributes ) {
$cta_id = $attributes['ctaId'] ?? null;
$instance_id = $attributes['instanceId']
?? uniqid( 'cta_instance_' );
if ( ! $cta_id ) {
return '';
}
$cta_post = get_post( $cta_id );
$label = get_post_meta( $cta_id, 'cta_label', true );
// Basic rendering with tracking
return sprintf(
'<div class="popup-maker-cta"
data-cta-id="%s"
data-instance-id="%s">%s</div>',
esc_attr( $cta_id ),
esc_attr( $instance_id ),
esc_html( $label )
);
}
/**
* Render CTA shortcode.
*
* @param array{id: int} $atts Shortcode attributes.
* @return string
*/
public function cta_shortcode( $atts = [] ) {
$atts = shortcode_atts([
'id' => null,
], $atts);
if ( ! $atts['id'] ) {
return '';
}
$instance_id = uniqid( 'cta_shortcode_' );
// Reuse block rendering logic
return $this->render_cta_block([
'ctaId' => $atts['id'],
'instanceId' => $instance_id,
]);
}
}