File "DemoContentCreator.php"
Full Path: /home/pumpbmko/public_html/wp-content/plugins/one-click-demo-import/inc/CreateDemoContent/DemoContentCreator.php
File size: 13.78 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Create Demo Content - responsible for importing pre-created demo content.
*
* @package ocdi
*/
namespace OCDI\CreateDemoContent;
use OCDI\Helpers;
use OCDI\Importer;
use OCDI\Logger;
use OCDI\OneClickDemoImport;
use OCDI\PluginInstaller;
class DemoContentCreator {
/**
* Holds all pre-created content.
*
* @var array
*/
private $content;
/**
* Initialize everything needed for the demo content creator class to function properly.
*/
public function init() {
$this->set_content();
add_action( 'ocdi/demo_content_creator_after_import', array( $this, 'after_import_wpforms_setup' ) );
add_action( 'wp_ajax_ocdi_import_created_content', array( $this, 'import_created_content' ) );
}
/**
* Get all default pre-created demo content data.
*
* @return array[]
*/
public function get_default_content() {
return array(
array(
'slug' => 'about-page',
'file' => OCDI_PATH . 'assets/demo-content/about-page.xml',
'name' => esc_html__( 'About Us', 'one-click-demo-import' ),
'description' => esc_html__( 'Introduce yourself and your business with a clean layout to reassure your leads and customers.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'slug' => 'book-now-page',
'file' => OCDI_PATH . 'assets/demo-content/book-now-page.xml',
'name' => esc_html__( 'Book Now', 'one-click-demo-import' ),
'description' => esc_html__( 'Expand your reach by accepting appointments online plus detailing your services and staff.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'slug' => 'contact-page',
'file' => OCDI_PATH . 'assets/demo-content/contact-page.xml',
'name' => esc_html__( 'Contact Us', 'one-click-demo-import' ),
'description' => esc_html__( 'Make it easy to get in touch with you through a completely customizable built-in contact form.', 'one-click-demo-import' ),
'required_plugins' => array( 'wpforms-lite' ),
),
array(
'slug' => 'faq-page',
'file' => OCDI_PATH . 'assets/demo-content/faq-page.xml',
'name' => esc_html__( 'FAQ', 'one-click-demo-import' ),
'description' => esc_html__( 'Lighten the load on your support team or your inbox by addressing frequently asked questions.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'slug' => 'meet-the-team-page',
'file' => OCDI_PATH . 'assets/demo-content/meet-the-team-page.xml',
'name' => esc_html__( 'Meet the Team', 'one-click-demo-import' ),
'description' => esc_html__( 'Help potential clients feel more at ease by showing off your hard-working and trustworthy team.', 'one-click-demo-import' ),
'required_plugins' => array( 'wpforms-lite' ),
),
array(
'slug' => 'menu-page',
'file' => OCDI_PATH . 'assets/demo-content/menu-page.xml',
'name' => esc_html__( 'Menu', 'one-click-demo-import' ),
'description' => esc_html__( 'Display your delicious dishes online to entice website visitors to become restaurant customers.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'slug' => 'portfolio-page',
'file' => OCDI_PATH . 'assets/demo-content/portfolio-page.xml',
'name' => esc_html__( 'Portfolio', 'one-click-demo-import' ),
'description' => esc_html__( 'Impress leads by visually showcasing your achievements, case studies, and past work.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'slug' => 'services-page',
'file' => OCDI_PATH . 'assets/demo-content/services-page.xml',
'name' => esc_html__( 'Services', 'one-click-demo-import' ),
'description' => esc_html__( 'Let the world know your services or products\' cost and features in an organized pricing table.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'slug' => 'shop-page',
'file' => OCDI_PATH . 'assets/demo-content/shop-page.xml',
'name' => esc_html__( 'Shop', 'one-click-demo-import' ),
'description' => esc_html__( 'Categorize and sell your products online while displaying reviews from happy customers.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
array(
'file' => OCDI_PATH . 'assets/demo-content/testimonials-page.xml',
'slug' => 'testimonials-page',
'name' => esc_html__( 'Testimonials', 'one-click-demo-import' ),
'description' => esc_html__( 'Tap into the power of social proof by displaying real-life testimonials on your website.', 'one-click-demo-import' ),
'required_plugins' => array(),
),
);
}
/**
* Set all pre-created demo pages.
* With our pre-created pages being set as defaults.
*/
public function set_content() {
$all_content = array_merge( $this->get_default_content(), Helpers::apply_filters( 'ocdi/register_created_demo_content', array() ) );
$this->content = array_filter(
$all_content,
function ( $item ) {
if ( empty( $item['slug'] ) || empty( $item['name'] ) || empty( $item['file'] ) ) {
return false;
}
return true;
}
);
}
public function after_import_wpforms_setup( $slug ) {
// Perform WPForms setup only if this is a contact or the meet the team page import.
if ( ! in_array( $slug, array( 'contact-page', 'meet-the-team-page' ), true ) ) {
return;
}
// Is WPForms plugin active?
$plugin_installer = new PluginInstaller();
if (
! (
$plugin_installer->is_plugin_active( 'wpforms-lite' ) ||
$plugin_installer->is_plugin_active( 'wpforms' )
)
) {
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Required WPForms plugin is not activated.', 'one-click-demo-import' ) );
}
if ( ! function_exists( 'wpforms' ) ) {
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Required WPForms plugin doesn\'t exist.', 'one-click-demo-import' ) );
}
$form_title = ( $slug === 'meet-the-team-page' ) ? esc_html__( 'Meet the Team Form', 'one-click-demo-import' ) : esc_html__( 'Contact Form', 'one-click-demo-import' );
$form_id = $this->create_wpforms_form( $form_title );
if ( empty( $form_id ) ) {
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Something went wrong while creating a WPForms contact form.', 'one-click-demo-import' ) );
}
$update_page = $this->update_contact_page_form_id( $form_id );
if ( empty( $update_page ) ) {
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Could not update the imported page with correct WPForms form ID.', 'one-click-demo-import' ) );
}
}
/**
* AJAX callback for importing the pre-created demo content.
* Has to contain the `slug` POST parameter.
*/
public function import_created_content() {
check_ajax_referer( 'ocdi-ajax-verification', 'security' );
// Check if user has the WP capability to import content.
if ( ! current_user_can( 'import' ) ) {
wp_send_json_error( esc_html__( 'Could not import this page. You don\'t have permission to import content.', 'one-click-demo-import' ) );
}
$slug = ! empty( $_POST['slug'] ) ? sanitize_key( wp_unslash( $_POST['slug'] ) ) : '';
if ( empty( $slug ) ) {
wp_send_json_error( esc_html__( 'Could not import this page. Page slug is missing.', 'one-click-demo-import' ) );
}
// Install required plugins.
$content_item = $this->get_content_data( $slug );
$ocdi = OneClickDemoImport::get_instance();
$refresh = false;
if ( ! empty( $content_item['required_plugins'] ) ) {
foreach ( $content_item['required_plugins'] as $plugin_slug ) {
if ( ! $ocdi->plugin_installer->is_plugin_active( $plugin_slug ) ) {
$ocdi->plugin_installer->install_plugin( $plugin_slug );
$refresh = true;
}
}
}
if ( $refresh ) {
wp_send_json_success( [ 'refresh' => true ] );
}
// Import the pre-created page.
$error = $this->import_content( $slug );
if ( ! empty( $error ) ) {
wp_send_json_error(
sprintf( /* translators: %s - The actual error message. */
esc_html__( 'An error occured while importing this page: %s', 'one-click-demo-import' ),
esc_html( $error )
)
);
}
wp_send_json_success();
}
/**
* Get the data of a registered pre-created content via the slug.
*
* @param string $slug The pre-created content slug.
*
* @return array
*/
public function get_content_data( $slug ) {
$data = [];
foreach ( $this->content as $item ) {
if ( $item['slug'] === $slug ) {
$data = $item;
break;
}
}
return $data;
}
/**
* Import the content for the selected pre-created content slug.
*
* @param string $slug The pre-created content slug.
*
* @return string
*/
private function import_content( $slug ) {
$import_file = $this->get_import_file( $slug );
if ( empty( $import_file ) ) {
return esc_html__( 'The demo content import file is missing.', 'one-click-demo-import' );
}
// Change the date to allow same page import multiple times.
add_filter( 'wxr_importer.pre_process.post', function ( $data ) {
if ( $data['post_type'] === 'page' ) {
$data['post_date'] = date( 'Y-m-d H:i:s' );
}
return $data;
} );
// Increase PHP max execution time.
if ( strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) === false ) {
set_time_limit( Helpers::apply_filters( 'ocdi/set_time_limit_for_demo_data_import', 300 ) );
}
// Disable import of authors.
add_filter( 'wxr_importer.pre_process.user', '__return_false' );
// Configure logger instance and set it to the importer.
$logger = new Logger();
$logger->min_level = 'warning';
// Create importer instance with proper parameters.
$importer = new Importer(
array(
'fetch_attachments' => true,
'aggressive_url_search' => true,
'prefill_existing_posts' => false,
),
$logger
);
Helpers::do_action( 'ocdi/demo_content_creater_before_import', $slug );
ob_start();
$importer->import( $import_file );
$message = ob_get_clean(); // Catch any output and clear the buffers.
Helpers::do_action( 'ocdi/demo_content_creator_after_import', $slug );
return $importer->logger->error_output;
}
/**
* Get the demo import file for the provided slug.
*
* @param string $slug The pre-created content slug.
*
* @return string
*/
private function get_import_file( $slug ) {
$content_data = $this->get_content_data( $slug );
return ! empty( $content_data['file'] ) ? $content_data['file'] : '';
}
/**
* Create a WPForms contact form, for the pre-created pages.
*
* @param string $title The title of the contact form.
*
* @return false|int
*/
private function create_wpforms_form( $title ) {
$form_id = wpforms()->form->add( $title );
if ( empty( $form_id ) || is_wp_error( $form_id ) ) {
return false;
}
$form_id = wpforms()->form->update(
$form_id,
array(
'id' => $form_id,
'field_id' => '3',
'fields' => array(
'0' => array(
'id' => '0',
'type' => 'name',
'format' => 'first-last',
'label' => esc_html__( 'Name', 'one-click-demo-import' ),
'required' => '1',
'size' => 'medium',
),
'1' => array(
'id' => '1',
'type' => 'email',
'label' => esc_html__( 'Email', 'one-click-demo-import' ),
'required' => '1',
'size' => 'medium',
),
'2' => array(
'id' => '2',
'type' => 'textarea',
'label' => esc_html__( 'Comment or Message', 'one-click-demo-import' ),
'description' => '',
'required' => '1',
'size' => 'medium',
'placeholder' => '',
'css' => '',
),
),
'settings' => array(
'form_title' => $title,
'notification_enable' => '1',
'notifications' => array(
'1' => array(
'email' => '{admin_email}',
'sender_address' => '{admin_email}',
'replyto' => '{field_id="1"}',
'message' => '{all_fields}',
),
),
'confirmations' => array(
'1' => array(
'type' => 'message',
'message' => esc_html__( 'Thanks for contacting us! We will be in touch with you shortly.', 'one-click-demo-import' ),
'message_scroll' => '1',
),
),
'antispam' => '1',
'submit_text' => esc_html__( 'Submit', 'one-click-demo-import' ),
'submit_text_processing' => esc_html__( 'Sending...', 'one-click-demo-import' ),
),
)
);
if ( empty( $form_id ) || is_wp_error( $form_id ) ) {
return false;
}
return $form_id;
}
/**
* Find the imported contact page and update the form ID.
*
* @param int $form_id The WPForms form ID.
*
* @return bool
*/
private function update_contact_page_form_id( $form_id ) {
$pages = get_posts( array(
'post_type' => 'page',
'meta_query' => array(
array(
'key' => 'ocdi_precreated_demo',
'value' => 'contact-page',
),
array(
'key' => 'ocdi_precreated_demo_updated',
'value' => 'no',
)
),
) );
if ( empty( $pages ) ) {
return false;
}
$contact_page = $pages[0];
// Replace the placeholder form ID with the newly created contact form.
$contact_page->post_content = str_replace(
'9999',
(string) $form_id,
$contact_page->post_content
);
$update_page = wp_update_post( $contact_page, true );
if ( is_wp_error( $update_page ) ) {
return false;
}
update_post_meta( $contact_page->ID, 'ocdi_precreated_demo_updated', 'yes' );
return true;
}
}