| Server IP : 108.167.142.43 / Your IP : 216.73.216.223 Web Server : Apache System : Linux gator4174.hostgator.com 5.14.0-687.39.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Aug 18 06:09:16 EDT 2026 x86_64 User : delarice ( 2406) PHP Version : 8.3.36 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home2/delarice/www/wp-content/plugins/templately/modules/single-import/REST/ |
Upload File : |
<?php
namespace Templately\Modules\SingleImport\REST;
use Elementor\Plugin;
use Elementor\Core\Experiments\Manager as Experiments_Manager;
use Templately\API\API;
use Templately\Modules\FullSiteImport\Utils\Utils;
use Templately\Utils\Helper;
use Templately\Utils\Response\FatalGuard;
/**
* @method \Templately\Modules\ElementorIntegration\Platform\Elementor|\Templately\Modules\GutenbergIntegration\Platform\Gutenberg platform( $id );
*/
class Import extends API {
private $endpoint = 'import';
public function register_routes() {
$this->post( 'insert', [ $this, 'insert_template' ] );
$this->post( $this->endpoint, [ $this, 'import_in_library' ] );
$this->post( $this->endpoint . '/page', [ $this, 'import_as_page' ] );
}
public function insert_template() {
// A fatal mid-insert (broken template data, dependency plugin code) would
// otherwise reach the client as an unparseable blank 500 — capture it.
FatalGuard::arm( 'single-import/insert' );
$platform = $this->get_param( 'platform', 'elementor' );
$origin = $this->get_param( 'origin', 'remote' );
$id = $this->get_param( 'id', 0, 'intval' );
$postId = $this->get_param( 'postId', 0, 'intval' );
$settings = $this->get_param( 'settings', [], null );
if( $id <= 0 || $id == null ) {
return $this->error('invalid_item_id', __( 'Invalid ID is provided.', 'templately' ), 'get_content', 404 );
}
if($platform === 'elementor') {
if(Helper::enable_elementor_container()) {
return $this->error(
'retry_again',
__( 'Please try again we enabled container.', 'templately' ),
'insert', 404
);
}
}
@set_time_limit( 0 ); // Unlimited execution time for this request.
Utils::add_gd_editor_filter();
switch ( $origin ) {
case 'cloud':
$template_data = $this->get_cloud_content( $id, $platform );
break;
case 'remote':
$template_data = $this->get_remote_content( $id );
break;
case 'local':
default:
$template_data = $this->get_local_content( $id, $platform );
$template_data = isset( $template_data['data'] ) ? $template_data['data'] : [];
break;
}
/**
* A fallback for old cloud items.
*/
$template_data = is_string( $template_data ) ? json_decode( wp_unslash($template_data), true ) : $template_data;
if( is_wp_error( $template_data ) ) {
return $template_data;
}
if( empty( $template_data ) || ! is_array( $template_data ) || empty( $template_data['content'] ) ) {
return $this->error(
'invalid_template_data',
__( 'Template data is invalid. Please kindly contact Templately Support.', 'templately' ),
'insert', 404
);
}
return $this->platform( $platform )->insert( $template_data, $postId, $settings );
}
private function get_cloud_content( $id = null, $platform = 'elementor' ){
$response = $this->http()->query(
'myCloudInsert', '',
[
'api_key' => $this->api_key,
'file_id' => $id,
'file_type' => $platform
]
)->post();
if( is_wp_error( $response ) ) {
// FIXME: need to return an error with handler in react app
return $this->error( 'invalid_data', $response->get_error_message(), 'get_cloud_content', 404 );
}
return is_string( $response ) ? json_decode( $response, true ) : $response;
}
private function get_remote_content( $id = null ){
$response = $this->http()->query(
'itemContent',
'status, message, data',
[
'api_key' => $this->api_key,
'id' => $id
]
)->post();
if( is_wp_error( $response ) ) {
// FIXME: need to return an error with handler in react app
return $this->error( 'invalid_data', $response->get_error_message(), 'get_remote_content', 404 );
}
if( isset( $response['status'] ) && $response['status'] === 'error' ) {
return $this->error( 'invalid_data', $response['message'], 'get_content', 404 );
}
if( isset( $response['status'] ) && $response['status'] === 'required-pro-acc' ) {
return $this->error( 'required_pro_templately', $response['message'], 'get_remote_content', 404 );
}
// The app can now report that a template's file could not be loaded
// (docs/ai-editor/plugin-instructions.md §0). There is NO `data` on this status —
// check status before reading data, surface the app's message, and
// abandon the insert (no auto-retry: a missing file stays missing).
if( isset( $response['status'] ) && $response['status'] === 'content-unavailable' ) {
$message = ! empty( $response['message'] )
? $response['message']
: __( 'This template’s file could not be loaded. Please try again, and contact support if it keeps happening.', 'templately' );
return $this->error( 'content_unavailable', $message, 'get_remote_content', 404 );
}
if( ! empty( $response[ 'data' ] ) && is_string( $response[ 'data' ] ) ) {
$data = json_decode( $response[ 'data' ], true );
} else {
$data = isset( $response[ 'data' ] ) ? (array) $response[ 'data' ] : [];
}
return $data;
}
private function get_local_content( $id = null, $platform = 'elementor' ){
/**
* @var \Templately\Modules\ElementorIntegration\Platform\Elementor $platformInstance
*/
$platformInstance = $this->platform( $platform );
$response = $platformInstance->get_content( $id );
if( isset( $response['status'] ) && $response['status'] === 'error' ) {
return $this->error( 'invalid_data', $response['message'], 'get_local_content', 404 );
}
return $response;
}
public function get_content ( $id = null, $platform = 'elementor', $origin = 'remote' ) {
switch ( $origin ) {
case 'cloud':
$template_data = $this->get_cloud_content( $id, $platform );
break;
case 'remote':
$template_data = $this->get_remote_content( $id );
break;
case 'local':
default:
$template_data = $this->get_local_content( $id, $platform );
break;
}
return $template_data;
}
public function import_in_library(){
FatalGuard::arm( 'single-import/library' );
$platform = $this->get_param( 'platform', 'elementor' );
$id = $this->get_param( 'id', 0, 'intval' );
$settings = $this->get_param( 'settings', [], null );
$template_type = $this->get_param( 'template_type', '', 'sanitize_text_field' );
$type = $this->get_param( 'type', '', 'sanitize_text_field' );
if( $id == 0 ) {
return $this->error('invalid_item_id', __( 'Invalid ID is provided.', 'templately' ), 'import/page', 404 );
}
if($platform === 'elementor') {
if(Helper::enable_elementor_container()) {
return $this->error(
'retry_again',
__( 'Please try again we enabled container.', 'templately' ),
'insert', 404
);
}
}
@set_time_limit( 0 ); // Unlimited execution time for this request.
Utils::add_gd_editor_filter();
return $this->platform( $platform )->import_in_library( $id, $this, $settings, $template_type, $type );
}
public function import_as_page(){
FatalGuard::arm( 'single-import/page' );
$platform = $this->get_param( 'platform', 'elementor' );
$id = $this->get_param( 'id', 0, 'intval' );
$title = $this->get_param( 'title' );
$settings = $this->get_param( 'settings', [], null );
if( $id == 0 ) {
return $this->error('invalid_item_id', __( 'Invalid ID is provided.', 'templately' ), 'import/page', 404 );
}
if($platform === 'elementor') {
if(Helper::enable_elementor_container()) {
return $this->error(
'retry_again',
__( 'Please try again we enabled container.', 'templately' ),
'insert', 404
);
}
}
@set_time_limit( 0 ); // Unlimited execution time for this request.
Utils::add_gd_editor_filter();
return $this->platform( $platform )->create_page( $id, $title, $this, $settings );
}
}