File: //home/www/terrazasgreen2/wp-content/plugins/email-subscribers/lite/admin/class-es-admin.php
<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'ES_Admin' ) ) {
/**
* The admin-specific functionality of the plugin.
*
* Admin Settings
*
* @package Email_Subscribers
* @subpackage Email_Subscribers/admin
*/
class ES_Admin {
// class instance
public static $instance;
/**
* Campaign ID
*/
private $template_data = array();
// class constructor
public function __construct() {
$this->init();
}
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
public function init() {
$this->register_hooks();
}
public function register_hooks() {
add_action( 'admin_init', array( $this, 'process_submission' ) );
add_action( 'ig_es_before_template_settings', array( $this, 'show_template_setting_fields' ) );
}
public function setup() {
$template_id = $this->get_template_id_from_url();
if ( ! empty( $template_id ) ) {
$template = get_post( $template_id, ARRAY_A );
if ( $template ) {
$template_meta = get_post_custom( $template_id );
if ( ! empty( $template_meta ) ) {
foreach ( $template_meta as $meta_key => $meta_value ) {
$template_meta[ $meta_key ] = $meta_value[0];
}
}
if ( empty( $template_meta['es_editor_type'] ) ) {
$template_meta['es_editor_type'] = IG_ES_CLASSIC_EDITOR;
}
$template['meta'] = $template_meta;
$this->template_data = $template;
}
} else {
$this->template_data['meta']['es_editor_type'] = $this->get_editor_type_from_url();
}
}
public function get_template_id_from_url() {
$template_id = ig_es_get_request_data( 'id' );
return $template_id;
}
public function get_editor_type_from_url() {
$editor_type = ig_es_get_request_data( 'editor-type' );
if ( empty( $editor_type ) ) {
$editor_type = IG_ES_DRAG_AND_DROP_EDITOR;
}
return $editor_type;
}
public static function set_screen( $status, $option, $value ) {
return $value;
}
public function render() {
$data = ig_es_get_request_data( 'data', array(), false );
$message_data = array();
$template_action = ig_es_get_request_data( 'ig_es_template_action' );
if ( ! empty( $template_action ) ) {
if ( empty( $data['subject'] ) ) {
$message = __( 'Please add a subject.', 'email-subscribers' );
$message_data = array(
'message' => $message,
'type' => 'error',
);
}
}
$action = ig_es_get_request_data( 'action' );
if ( 'added' === $action ) {
$message = __( 'Template added successfully.', 'email-subscribers' );
$message_data = array(
'message' => $message,
'type' => 'success',
);
} elseif ( 'updated' === $action ) {
$message = __( 'Template updated successfully.', 'email-subscribers' );
$message_data = array(
'message' => $message,
'type' => 'success',
);
}
$this->show_form( $message_data );
}
/**
* Add an Tag button to WP Editor
*
* @param string $editor_id Editor id
*
* @since 5.4.10
*/
public function add_tag_button( $editor_id ) {
if ( ! ES()->is_es_admin_screen() ) {
return;
}
$template_type = isset( $this->campaign_data['type'] ) ? $this->campaign_data['type'] : '';
?>
<div id="ig-es-add-tags-button" class="merge-tags-wrapper relative bg-white inline-block">
<button type="button" class="button">
<span class="dashicons dashicons-tag"></span>
<?php echo esc_html__( 'Add Tags', 'email-subscribers' ); ?>
</button>
<div x-show="open" id="ig-es-tags-dropdown" x-transition:enter="transition ease-out duration-100" x-transition:enter-start="transform opacity-0 scale-95" x-transition:enter-end="transform opacity-100 scale-100" x-transition:leave="transition ease-in duration-75" x-transition:leave-start="transform opacity-100 scale-100"
x-transition:leave-end="transform opacity-0 scale-95" class="absolute center-0 z-10 hidden w-56 origin-top-right rounded-md shadow-lg">
<div class="bg-white rounded-md shadow-xs">
<?php $this->show_merge_tags( $template_type ); ?>
</div>
</div>
</div>
<?php
}
public function get_campaign_tags() {
$post_notification_tags = $this->get_post_notification_tags();
$template_tags = array(
'post_notification' => $post_notification_tags,
);
return apply_filters( 'ig_es_campaign_tags', $template_tags );
}
public function get_post_notification_tags() {
$post_notification_tags = array(
'{{post.date}}',
'{{post.title}}',
'{{post.image}}',
'{{post.excerpt}}',
'{{post.description}}',
'{{post.author}}',
'{{post.link}}',
'{{post.link_with_title}}',
'{{post.link_only}}',
'{{post.full}}',
'{{post.cats}}',
'{{post.more_tag}}',
'{{post.image_url}}'
);
return apply_filters( 'ig_es_post_notification_tags', $post_notification_tags );
}
public function get_subscriber_tags() {
$subscriber_tags = array(
'{{subscriber.name}}',
'{{subscriber.first_name}}',
'{{subscriber.last_name}}',
'{{subscriber.email}}',
);
return apply_filters( 'ig_es_subscriber_tags', $subscriber_tags );
}
public function get_site_tags() {
$site_tags = array(
'{{site.total_contacts}}',
'{{site.url}}',
'{{site.name}}',
);
return apply_filters( 'ig_es_site_tags', $site_tags );
}
public function render_merge_tags( $merge_tags = array() ) {
if ( empty( $merge_tags ) ) {
return;
}
foreach ( $merge_tags as $tag_key => $tag ) {
?>
<span data-tag-text="<?php echo is_string( $tag_key ) ? esc_attr( $tag ) : ''; ?>" class="ig-es-merge-tag cursor-pointer block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900">
<?php echo is_string( $tag_key ) ? esc_html( $tag_key ) : esc_html( $tag ); ?>
</span>
<?php
}
}
/**
* Method to show send test email and campaign content section.
*
* @param array $template_data Broadcast data
*
* @since 5.4.4.1.
*
*/
public function show_campaign_preview_options_content( $template_data = array() ) {
$type = isset( $template_data['type'] ) ? $template_data['type'] : 'campaign';
$subject = isset( $template_data['subject'] ) ? $template_data['subject'] : '';
$test_email = ES_Common::get_admin_email();
$trim_character_count = 30;
if ( !( strlen($subject) <= $trim_character_count ) ) {
$subject = substr( $subject, 0, $trim_character_count );
$subject = substr( $subject, 0, strrpos( $subject, ' ' ) );
$subject = $subject . '...';
}
?>
<div id="campaign-email-preview-container">
<div class="campaign-email-preview-container-right">
<?php do_action( 'ig_es_template_preview_test_email_content', $template_data ); ?>
</div>
</div>
<?php
}
/**
* Method to display newsletter setting form
*
* @param array $template_data Posted campaign data
*
* @since 4.4.2 Added $template_data param
*/
public function show_form( $message_data = array() ) {
$template_data = $this->template_data;
$template_id = ! empty( $template_data['ID'] ) ? $template_data['ID'] : 0;
$template_subject = ! empty( $template_data['post_title'] ) ? $template_data['post_title'] : '';
$template_status = ! empty( $template_data['post_status'] ) ? $template_data['post_status'] : 'draft';
$template_type = ! empty( $template_data['meta']['es_template_type'] ) ? $template_data['meta']['es_template_type'] : IG_CAMPAIGN_TYPE_NEWSLETTER;
$editor_type = ! empty( $template_data['meta']['es_editor_type'] ) ? $template_data['meta']['es_editor_type'] : '';
?>
<div id="edit-campaign-form-container" data-editor-type="<?php echo esc_attr( $editor_type ); ?>" data-campaign-type="<?php echo esc_attr( $template_type ); ?>" class="<?php echo esc_attr( $editor_type ); ?> font-sans pt-1.5 wrap">
<?php
if ( ! empty( $message_data ) ) {
$message = $message_data['message'];
$type = $message_data['type'];
ES_Common::show_message( $message, $type );
}
?>
<form action="#" method="POST" id="campaign_form">
<input type="hidden" id="template_id" name="data[id]" value="<?php echo esc_attr( $template_id ); ?>"/>
<input type="hidden" id="template_status" name="data[status]" value="<?php echo esc_attr( $template_status ); ?>"/>
<input type="hidden" id="template_type" name="data[meta][es_template_type]" value="<?php echo esc_attr( $template_type ); ?>"/>
<input type="hidden" id="editor_type" name="data[meta][es_editor_type]" value="<?php echo esc_attr( $editor_type ); ?>"/>
<?php wp_nonce_field( 'ig-es-template-nonce', 'ig_es_template_nonce' ); ?>
<fieldset class="block es_fieldset">
<div class="mx-auto wp-heading-inline max-w-7xl">
<header class="mx-auto max-w-7xl">
<div class="md:flex md:items-center md:justify-between">
<div class="flex md:3/5 lg:w-7/12 xl:w-3/5">
<div class=" min-w-0 md:w-3/5 lg:w-1/2">
<nav class="text-gray-400 my-0" aria-label="Breadcrumb">
<ol class="list-none p-0 inline-flex">
<li class="flex items-center text-sm tracking-wide">
<a class="hover:underline" href="admin.php?page=es_gallery&manage-templates=yes"><?php echo esc_html__( 'Template Gallery', 'email-subscribers' ); ?>
</a>
<svg class="fill-current w-2.5 h-2.5 mx-2 mt-mx" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"></path></svg>
</li>
</ol>
</nav>
</div>
</div>
<div class="flex md:mt-0 xl:ml-4">
<div class="inline-block text-left">
<button id="view_template_preview_button" type="button"
class="ig-es-inline-loader inline-flex justify-center w-full py-1.5 text-sm font-medium leading-5 text-indigo-600 transition duration-150 ease-in-out border border-indigo-500 rounded-md cursor-pointer select-none hover:text-indigo-500 hover:shadow-md focus:outline-none focus:shadow-outline-indigo focus:shadow-lg hover:border-indigo-600 md:px-2 lg:px-3 xl:px-4">
<span>
<?php
echo esc_html__( 'Preview', 'email-subscribers' );
?>
</span>
<svg class="es-btn-loader animate-spin h-4 w-4 text-indigo"
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor"
stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
</button>
</div>
<div class="inline-block text-left md:mr-2 md:ml-2">
<button type="submit" id="ig_es_save_campaign_btn" name="ig_es_template_action" class="inline-flex justify-center w-full py-1.5 text-sm font-medium leading-5 text-white transition duration-150 ease-in-out bg-indigo-600 border border-indigo-500 rounded-md cursor-pointer select-none focus:outline-none focus:shadow-outline-indigo focus:shadow-lg hover:bg-indigo-500 hover:text-white hover:shadow-md md:px-2 lg:px-3 xl:px-4" value="save">
<span class="ig_es_campaign_send_option_text">
<?php echo esc_html__( 'Save', 'email-subscribers' ); ?>
</span>
</button>
</div>
</div>
</div>
</header>
</div>
<div class="mx-auto max-w-7xl">
<hr class="wp-header-end">
</div>
<div class="mx-auto mt-6 es_campaign_first max-w-7xl">
<div>
<div class="bg-white rounded-lg shadow-md">
<div class="md:flex">
<div class="campaign_main_content py-4 pl-2">
<div class="block px-4 py-2">
<label for="ig_es_campaign_subject" class="text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Subject', 'email-subscribers' ); ?></label>
<div class="w-full mt-1 relative text-sm leading-5 rounded-md shadow-sm form-input border-gray-400">
<div>
<input id="ig_es_campaign_subject" style="width:95%;" class="outline-none" name="data[subject]" value="<?php echo esc_attr( $template_subject ); ?>"/>
</div>
</div>
</div>
<div class="w-full px-4 pt-1 pb-2 mt-1 message-label-wrapper">
<label for="message" class="text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Message', 'email-subscribers' ); ?></label>
<?php
if ( IG_ES_CLASSIC_EDITOR === $editor_type ) {
$editor_id = 'edit-es-campaign-body';
$editor_content = ! empty( $template_data['post_content'] ) ? $template_data['post_content'] : '';
$editor_settings = array(
'textarea_name' => 'data[body]',
'textarea_rows' => 40,
'media_buttons' => true,
'tinymce' => true,
'quicktags' => true,
'editor_class' => 'wp-campaign-body-editor',
);
add_filter( 'tiny_mce_before_init', array( 'ES_Common', 'override_tinymce_formatting_options' ), 10, 2 );
add_filter( 'mce_external_plugins', array( 'ES_Common', 'add_mce_external_plugins' ) );
wp_editor( $editor_content, $editor_id, $editor_settings );
$this->show_avaialable_keywords();
} else {
?>
<div id="ig-es-dnd-merge-tags" class="hidden">
<div x-show="open" id="ig-es-dnd-tags-dropdown" x-transition:enter="transition ease-out duration-100" x-transition:enter-start="transform opacity-0 scale-95" x-transition:enter-end="transform opacity-100 scale-100" x-transition:leave="transition ease-in duration-75" x-transition:leave-start="transform opacity-100 scale-100"
x-transition:leave-end="transform opacity-0 scale-95" class="absolute center-0 z-10 hidden w-56 origin-top-right rounded-md shadow-lg">
<div class="bg-white rounded-md shadow-xs">
<?php $this->show_merge_tags( $template_type ); ?>
</div>
</div>
</div>
<style type="text/css">
.admin_page_es_template #ig-es-dnd-merge-tags-wrapper {
display: none;
}
</style>
<textarea id="campaign-dnd-editor-data" name="data[meta][es_dnd_editor_data]" style="display:none;">
<?php
$dnd_editor_data = ! empty( $template_data['meta']['es_dnd_editor_data'] ) ? wp_json_encode(maybe_unserialize( $template_data['meta']['es_dnd_editor_data'] )) : '';
echo esc_html( $dnd_editor_data );
?>
</textarea>
<script>
jQuery(document).ready(function($){
let editor_data = jQuery('#campaign-dnd-editor-data').val().trim();
if ( '' !== editor_data ) {
let is_valid_json = ig_es_is_valid_json( editor_data );
if ( is_valid_json ) {
editor_data = JSON.parse( `${editor_data}` );
}
jQuery(document).on("es_drag_and_drop_editor_loaded",function (event) {
window.esVisualEditor.importMjml(editor_data);
});
}
jQuery(document).on('es_drag_and_drop_editor_loaded',()=>{
window.esVisualEditor.on('change:changesCount', (editorModel, changesCount) => {
if (changesCount > 0) {
ig_es_sync_dnd_editor_content('#campaign-dnd-editor-data');
}
});
});
});
</script>
<?php
}
?>
</div>
<?php do_action( 'ig_es_after_template_left_pan_settings', $template_data ); ?>
</div>
<div class="campaign_side_content ml-2 bg-gray-100 rounded-r-lg">
<?php
do_action( 'ig_es_before_template_settings', $template_data );
?>
<div class="block pt-1 mx-4">
<div class="hidden" id="campaign-preview-popup">
<div class="fixed top-0 left-0 z-50 flex items-center justify-center w-full h-full" style="background-color: rgba(0,0,0,.5);">
<div id="campaign-preview-main-container" class="absolute h-auto pt-2 ml-16 mr-4 text-left bg-white rounded shadow-xl z-80 w-1/2 md:max-w-5xl lg:max-w-7xl md:pt-3 lg:pt-2">
<div class="py-2 px-4">
<div class="flex">
<button id="close-campaign-preview-popup" class="text-sm font-medium tracking-wide text-gray-700 select-none no-outline focus:outline-none focus:shadow-outline-red hover:border-red-400 active:shadow-lg">
<svg class="h-5 w-5 inline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
<div id="campaign-browser-preview-container">
<?php do_action( 'ig_es_template_preview_options_content', $template_data ); ?>
<div id="campaign-preview-iframe-container" class="pt-4 list-decimal popup-preview">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
if ( IG_ES_DRAG_AND_DROP_EDITOR === $editor_type ) {
?>
<div class="campaign-drag-and-drop-editor-container">
<?php
$editor_settings = array(
'attributes' => array(
'data-html-textarea-name' => 'data[body]',
),
);
( new ES_Drag_And_Drop_Editor() )->show_editor( $editor_settings );
?>
</div>
<?php
$this->show_avaialable_keywords();
}
?>
</div>
</div>
</fieldset>
</form>
</div>
<?php
}
/**
* Show option to save campaign as template
*
* @return void
*
* @since 5.3.3
*/
public function show_template_setting_fields( $data ) {
$template_id = ! empty( $data['ID'] ) ? $data['ID'] : 0;
$values = get_post_custom( $template_id );
$selected = isset( $values['es_template_type'] ) ? esc_attr( $values['es_template_type'][0] ) : '';
$template_type = ES_Common::get_campaign_types( array( 'sequence' ) );
?>
<div class="pt-4 pb-4 mx-4">
<div class="flex w-full border-b border-gray-200 pb-2">
<div class="w-11/12 text-sm font-normal text-gray-600 leading-9"><?php esc_html_e( 'Template type', 'email-subscribers' ); ?> </div>
<div>
<label for="es_template_type" class="inline-flex items-center cursor-pointer ">
<span class="relative">
<select style="margin: 0.20rem 0;" name="data[es_template_type]" id="es_template_type">
<?php
if ( ! empty( $template_type ) ) {
foreach ( $template_type as $key => $value ) {
echo '<option value=' . esc_attr( $key ) . ' ' . selected( $selected, $key, false ) . '>' . esc_html( $value ) . '</option>';
}
}
?>
</select>
</span>
</label>
</div>
</div>
<?php
$thumbnail_url = get_the_post_thumbnail_url( $template_id );
?>
<div class="flex w-full pt-3">
<div class="w-11/12 text-sm font-normal text-gray-600 leading-8">
<?php esc_html_e( 'Preview image', 'email-subscribers' ); ?> </div>
<div>
<label for="es_template_image" class="inline-flex items-center cursor-pointer ">
<span class="relative">
<button type="button" id="ig-es-add-template-image" class="button <?php echo $thumbnail_url ? 'hidden' : ''; ?>">
<?php echo esc_html__( 'Add image', 'email-subscribers' ); ?>
</button>
<input type="hidden" id="ig_es_template_attachment_id" name="data[template_attachment_id]" value=""/>
<div id="ig-es-template-image-attachment-container" class="my-1 text-sm relative <?php echo $thumbnail_url ? '' : 'hidden'; ?>">
<span class="flex-1 flex items-center">
<img src="<?php echo $thumbnail_url ? esc_url( $thumbnail_url ) : ''; ?>" id="ig_es_template_attachment_image" style="width: 50px; height: 50px; max-width: none;">
<a id="ig-es-delete-template-image" href="#"
class="font-medium text-red-300 hover:text-red-500 absolute" style="top: -15%;right: -15%;">
<svg class="w-6 h-6 text-red-400 hover:text-red-500 " fill="none"
stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path
stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
</a>
</span>
</div>
</span>
</label>
</div>
</div>
</div>
<?php
}
public function add_campaign_body_data( $template_data ) {
$template_id = ! empty( $template_data['id'] ) ? $template_data['id'] : 0;
if ( ! empty( $template_data['body'] ) ) {
$current_user = wp_get_current_user();
$username = $current_user->user_login;
$useremail = $current_user->user_email;
$display_name = $current_user->display_name;
$contact_id = ES()->contacts_db->get_contact_id_by_email( $useremail );
$first_name = '';
$last_name = '';
// Use details from contacts data if present else fetch it from wp profile.
if ( ! empty( $contact_id ) ) {
$contact_data = ES()->contacts_db->get_by_id( $contact_id );
$first_name = $contact_data['first_name'];
$last_name = $contact_data['last_name'];
} elseif ( ! empty( $display_name ) ) {
$contact_details = explode( ' ', $display_name );
$first_name = $contact_details[0];
// Check if last name is set.
if ( ! empty( $contact_details[1] ) ) {
$last_name = $contact_details[1];
}
}
$template_body = $template_data['body'];
$template_body = ES_Common::es_process_template_body( $template_body, $template_id );
$template_body = ES_Common::replace_keywords_with_fallback( $template_body, array(
'FIRSTNAME' => $first_name,
'NAME' => $username,
'LASTNAME' => $last_name,
'EMAIL' => $useremail
) );
$template_body = ES_Common::replace_keywords_with_fallback( $template_body, array(
'subscriber.first_name' => $first_name,
'subscriber.name' => $username,
'subscriber.last_name' => $last_name,
'subscriber.email' => $useremail
) );
$template_type = $template_data['meta']['es_template_type'];
$template_data['body'] = $template_body;
if ( IG_CAMPAIGN_TYPE_POST_NOTIFICATION === $template_type ) {
$template_data = self::replace_post_notification_merge_tags_with_sample_post( $template_data );
} elseif ( IG_CAMPAIGN_TYPE_POST_DIGEST === $template_type ) {
$template_data = self::replace_post_digest_merge_tags_with_sample_posts( $template_data );
}
$template_body = ! empty( $template_data['body'] ) ? $template_data['body'] : '';
// If there are blocks in this content, we shouldn't run wpautop() on it.
$priority = has_filter( 'the_content', 'wpautop' );
if ( false !== $priority ) {
// Remove wpautop to avoid p tags.
remove_filter( 'the_content', 'wpautop', $priority );
}
$template_body = apply_filters( 'the_content', $template_body );
$template_data['body'] = $template_body;
return $template_data;
}
}
/**
* Method to get campaign inline preview data.
*
* @param array $template_data Broadcast data.
*
* @return array $preview_data
*
* @since 4.4.7
*/
public function get_campaign_inline_preview_data( $template_data = array() ) {
$list_id = ! empty( $template_data['list_ids'] ) ? $template_data['list_ids'] : 0;
$preview_data = array();
$first_name = '';
$last_name = '';
$email = '';
if ( ! empty( $list_id ) ) {
// Check if multiple lists selection is enabled.
if ( is_array( $list_id ) && ! empty( $list_id ) ) {
// Since we need to get only one sample email for showing the preview, we can get it from the first list itself.
$list_id = $list_id[0];
}
$subscribed_contacts = ES()->lists_contacts_db->get_subscribed_contacts_from_list( $list_id );
if ( ! empty( $subscribed_contacts ) ) {
$subscribed_contact = array_shift( $subscribed_contacts );
$contact_id = ! empty( $subscribed_contact['contact_id'] ) ? $subscribed_contact['contact_id'] : 0;
if ( ! empty( $contact_id ) ) {
$subscriber_data = ES()->contacts_db->get_by_id( $contact_id );
if ( ! empty( $subscriber_data ) ) {
$first_name = ! empty( $subscriber_data['first_name'] ) ? $subscriber_data['first_name'] : '';
$last_name = ! empty( $subscriber_data['last_name'] ) ? $subscriber_data['first_name'] : '';
$email = ! empty( $subscriber_data['email'] ) ? $subscriber_data['email'] : '';
}
}
}
}
$preview_data['campaign_subject'] = ! empty( $template_data['subject'] ) ? esc_html( $template_data['subject'] ) : '';
$preview_data['contact_name'] = esc_html( $first_name . ' ' . $last_name );
$preview_data['contact_email'] = esc_html( $email );
return $preview_data;
}
public function add_post_notification_data( $template_data ) {
$categories = ! empty( $template_data['es_note_cat'] ) ? $template_data['es_note_cat'] : array();
$es_note_cat_parent = $template_data['es_note_cat_parent'];
$categories = ( ! empty( $es_note_cat_parent ) && in_array( $es_note_cat_parent, array( '{a}All{a}', '{a}None{a}' ), true ) ) ? array( $es_note_cat_parent ) : $categories;
// Check if custom post types are selected.
if ( ! empty( $template_data['es_note_cpt'] ) ) {
// Merge categories and selected custom post types.
$categories = array_merge( $categories, $template_data['es_note_cpt'] );
}
$template_data['categories'] = ES_Common::convert_categories_array_to_string( $categories );
return $template_data;
}
public static function replace_post_notification_merge_tags_with_sample_post( $template_data ) {
if ( ! empty( $template_data['id'] ) ) {
$args = array(
'numberposts' => '1',
'order' => 'DESC',
'post_status' => 'publish',
);
$recent_posts = wp_get_recent_posts( $args, OBJECT );
if ( count( $recent_posts ) > 0 ) {
$post = array_shift( $recent_posts );
$post_id = $post->ID;
$template_id = $template_data['id'];
$template_body = ! empty( $template_data['body'] ) ? $template_data['body'] : '';
$template_subject = ! empty( $template_data['subject'] ) ? $template_data['subject'] : '';
$template_subject = ES_Handle_Post_Notification::prepare_subject( $template_subject, $post );
$template_body = ES_Handle_Post_Notification::prepare_body( $template_body, $post_id, $template_id );
$template_data['subject'] = $template_subject;
$template_data['body'] = $template_body;
}
}
return $template_data;
}
public static function replace_post_digest_merge_tags_with_sample_posts( $template_data ) {
if ( ! empty( $template_data['id'] ) && class_exists( 'ES_Post_Digest' ) ) {
$ignore_stored_post_ids = true;
$ignore_last_run = true;
$template_id = $template_data['id'];
$template_body = $template_data['body'];
$post_ids = ES_Post_Digest::get_matching_post_ids( $template_id, $ignore_stored_post_ids, $ignore_last_run );
$template_body = ES_Post_Digest::process_post_digest_template( $template_body, $post_ids );
$template_data['body'] = $template_body;
}
return $template_data;
}
public function show_avaialable_keywords() {
?>
<div class="campaign-keyword-wrapper mt-1 p-4 w-full border border-gray-300">
<!-- Start-IG-Code -->
<p id="post_notification" class="pb-2 border-b border-gray-300">
<a href="https://www.icegram.com/documentation/what-keywords-can-be-used-while-designing-the-campaign/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page" target="_blank"><?php esc_html_e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php esc_html_e( 'for Post Notification: ', 'email-subsribers' ); ?>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.first_name | fallback:'there'}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.last_name}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.name | fallback:'there'}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.email}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{DATE}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.title}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.image}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.excerpt}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.description}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.author}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.author_avatar}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.author_avatar_link}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.link}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.link_with_title}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.link_only}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{post.full}}</span>
</p>
<!-- End-IG-Code -->
<p id="newsletter" class="py-2 border-b border-gray-300">
<a href="https://www.icegram.com/documentation/what-keywords-can-be-used-while-designing-the-campaign/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page" target="_blank"><?php esc_html_e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php esc_html_e( 'for Broadcast:', 'email-subscribers' ); ?>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.first_name | fallback:'there'}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.last_name}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.name | fallback:'there'}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.email}}</span>
</p>
<!-- Start-IG-Code -->
<div id="post_digest" class="pt-2 pb-0">
<span style="font-size: 0.8em; margin-left: 0.3em; padding: 2px; background: #e66060; color: #fff; border-radius: 2px; ">Pro</span>
<a href="https://www.icegram.com/send-post-digest-using-email-subscribers-plugin/?utm_source=es&utm_medium=in_app&utm_campaign=view_post_digest_post" target="_blank"><?php esc_html_e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php esc_html_e( 'for Post Digest:', 'email-subscribers' ); ?>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.first_name | fallback:'there'}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.last_name}}</span>
<span class="ig-es-workflow-variable-outer inline-block px-2 py-2 mr-2 mb-2 text-xs font-bold bg-gray-100 hover:bg-gray-300 rounded-md ">{{subscriber.name | fallback:'there'}}</span>
<div class="post_digest_block"> {{post.digest}} <br/><?php esc_html_e( 'Any keywords related Post Notification', 'email-subscribers' ); ?> <br/>{{/post.digest}} </div>
</div>
</div>
<!-- End-IG-Code -->
<?php
}
/**
* Save campaign as a template
*/
public function process_submission() {
$template_action = ig_es_get_request_data( 'ig_es_template_action' );
if ( ! empty( $template_action ) ) {
$template_nonce = ig_es_get_request_data( 'ig_es_template_nonce' );
// Verify nonce.
if ( wp_verify_nonce( $template_nonce, 'ig-es-template-nonce' ) ) {
$template_data = ig_es_get_request_data( 'data', array(), false );
$template_id = ! empty( $template_data['id'] ) ? $template_data['id'] : 0;
$template_type = ! empty( $template_data['es_template_type'] ) ? $template_data['es_template_type'] : IG_CAMPAIGN_TYPE_NEWSLETTER;
$template_body = ! empty( $template_data['body'] ) ? $template_data['body'] : '';
$template_subject = ! empty( $template_data['subject'] ) ? $template_data['subject'] : '';
$template_attachment_id = ! empty( $template_data['template_attachment_id'] ) ? $template_data['template_attachment_id'] : '';
$template_status = 'save' === $template_action ? 'publish' : 'draft';
$data = array(
'post_title' => $template_subject,
'post_content' => $template_body,
'post_type' => 'es_template',
'post_status' => $template_status,
);
$action = '';
if ( empty( $template_id ) ) {
$template_id = wp_insert_post( $data );
$action = 'added';
} else {
$data['ID'] = $template_id;
$template_id = wp_update_post( $data );
$action = 'updated';
}
$is_template_added = ! ( $template_id instanceof WP_Error );
if ( $is_template_added ) {
if ( ! empty( $template_attachment_id ) ) {
set_post_thumbnail( $template_id, $template_attachment_id );
}
$editor_type = ! empty( $template_data['meta']['es_editor_type'] ) ? $template_data['meta']['es_editor_type'] : '';
$is_dnd_editor = IG_ES_DRAG_AND_DROP_EDITOR === $editor_type;
if ( $is_dnd_editor ) {
$dnd_editor_data = array();
if ( ! empty( $template_data['meta']['es_dnd_editor_data'] ) ) {
$dnd_editor_data = $template_data['meta']['es_dnd_editor_data'];
$dnd_editor_data = json_decode( $dnd_editor_data );
update_post_meta( $template_id, 'es_dnd_editor_data', $dnd_editor_data );
}
} else {
$custom_css = ! empty( $template_data['meta']['es_custom_css'] ) ? $template_data['meta']['es_custom_css'] : '';
update_post_meta( $template_id, 'es_custom_css', $custom_css );
}
update_post_meta( $template_id, 'es_editor_type', $editor_type );
update_post_meta( $template_id, 'es_template_type', $template_type );
}
if ( ! empty( $template_id ) ) {
$template_url = admin_url( 'admin.php?page=es_template&id=' . $template_id . '&action=' . $action );
wp_safe_redirect( $template_url );
exit();
} else {
$message = __( 'An error has occured. Please try again later', 'email-subscribers' );
ES_Common::show_message( $message, 'error' );
}
}
}
}
/**
* Method to load admin views
*
* @since 5.5.4
*
* @param string $view View name.
* @param array $imported_variables Passed variables.
* @param mixed $path Path to view file.
*/
public static function get_view( $view, $imported_variables = array(), $path = false ) {
if ( $imported_variables && is_array( $imported_variables ) ) {
extract( $imported_variables ); // phpcs:ignore
}
if ( ! $path ) {
$path = ES_PLUGIN_DIR . 'lite/admin/views/';
}
include $path . $view . '.php';
}
}
}