get_slug() . '_1.0.0'; } /** * Returns categories transient key for current source * * @return string */ public function categories_key() { return 'premium_categories_' . $this->get_slug() . '_1.0.0'; } /** * Returns keywords transient key for current source * * @return string */ public function keywords_key() { return 'premium_keywords_' . $this->get_slug() . '_1.0.0'; } /** * Set templates cache. * * @param array $value */ public function set_templates_cache( $value ) { $localhost = array( '127.0.0.1', '::1', ); if ( ! isset( $_SERVER['REMOTE_ADDR'] ) ) { return; } // Load templates remotely if localhost. if ( ! in_array( $_SERVER['REMOTE_ADDR'], $localhost ) ) { set_transient( $this->templates_key(), $value, $this->transient_lifetime() ); } } /** * Set templates cache. */ public function get_templates_cache() { // if ( $this->is_debug_active() ) { // return false; // } return get_transient( $this->templates_key() ); } /** * Delete templates cache */ public function delete_templates_cache() { delete_transient( $this->templates_key() ); } /** * Set categories cache. */ public function set_categories_cache( $value ) { set_transient( $this->categories_key(), $value, $this->transient_lifetime() ); } /** * Set categories cache. * * @param array $value */ public function get_categories_cache() { // if ( $this->is_debug_active() ) { // return false; // } return get_transient( $this->categories_key() ); } /** * Delete categories cache * * @return [type] [description] */ public function delete_categories_cache() { delete_transient( $this->categories_key() ); } /** * Set categories cache. * * @param array $value cached value. */ public function set_keywords_cache( $value ) { set_transient( $this->keywords_key(), $value, $this->transient_lifetime() ); } /** * Set categories cache. * * @param array $value cached value. */ public function get_keywords_cache() { // if ( $this->is_debug_active() ) { // return false; // } return get_transient( $this->keywords_key() ); } /** * Delete categories cache * * @return [type] [description] */ public function delete_keywords_cache() { delete_transient( $this->keywords_key() ); } /** * Check if debug is active * * @return boolean */ public function is_debug_active() { if ( defined( 'PREMIUM_API_DEBUG' ) && true === PREMIUM_API_DEBUG ) { return true; } else { return false; } } /** * Returns template ID prefix for premium templates * * @return string */ public function id_prefix() { return 'premium_'; } /** * @since 3.6.0 * @access protected */ protected function replace_elements_ids( $content ) { return \Elementor\Plugin::$instance->db->iterate_data( $content, function ( $element ) { $element['id'] = \Elementor\Utils::generate_random_string(); return $element; } ); } /** * Process content for export/import. * * Process the content and all the inner elements, and prepare all the * elements data for export/import. * * @since 3.6.0 * @access protected * * @param array $content A set of elements. * @param string $method Accepts either `on_export` to export data or * `on_import` to import data. * @param string $with_media include templates media. * * @return mixed Processed content data. */ protected function process_export_import_content( $content, $method, $with_media ) { return \Elementor\Plugin::$instance->db->iterate_data( $content, function ( $element_data ) use ( $method, $with_media ) { $element = \Elementor\Plugin::$instance->elements_manager->create_element_instance( $element_data ); // If the widget/element isn't exist, like a plugin that creates a widget but deactivated. if ( ! $element ) { return null; } return $this->process_element_export_import_content( $element, $method, $with_media ); } ); } /** * Process single element content for export/import. * * Process any given element and prepare the element data for export/import. * * @since 3.6.0 * @access protected * * @param Controls_Stack $element * @param string $method * @param string $with_media include templates media. * * @return array Processed element data. */ protected function process_element_export_import_content( $element, $method, $with_media ) { $element_data = $element->get_data(); if ( method_exists( $element, $method ) ) { // TODO: Use the internal element data without parameters. $element_data = $element->{$method}( $element_data ); } foreach ( $element->get_controls() as $control ) { $control_class = \Elementor\Plugin::$instance->controls_manager->get_control( $control['type'] ); // If the control isn't exist, like a plugin that creates the control but deactivated. if ( ! $control_class ) { return $element_data; } // resetting query filters on improt. $query_filter_ctrls = array( 'premium_blog_users', 'tax_category_post_filter', 'tax_post_tag_post_filter', 'premium_blog_posts_exclude', 'tax_product_cat_product_filter', 'tax_product_tag_product_filter', 'custom_posts_filter', 'featured_post_default', 'featured_post' ); if ( in_array( $control['name'], $query_filter_ctrls, true ) ) { $element_data['settings'][ $control['name'] ] = ''; } if ( method_exists( $control_class, $method ) ) { if ( 'media' !== $control['type'] && 'hedia' !== $control['type'] && 'repeater' !== $control['type'] ) { $element_data['settings'][ $control['name'] ] = $control_class->{$method}( $element->get_settings( $control['name'] ), $control ); } elseif ( 'repeater' === $control['type'] ) { $element_data['settings'][ $control['name'] ] = $this->on_import_repeater( $element->get_settings( $control['name'] ), $with_media, $control ); } elseif ( ! empty( $element_data['settings'][ $control['name'] ]['url'] ) ) { $element_data['settings'][ $control['name'] ] = $this->on_import_media( $element->get_settings( $control['name'] ), $with_media ); } } } return $element_data; } public function on_import_media( $settings, $media ) { if ( empty( $settings['url'] ) || false != strpos( $settings['url'], 'placeholder' ) ) { return $settings; } if ( ! $media ) { $file_ext = pathinfo( $settings['url'] )['extension']; switch ( true ) { case 'mp4' === $file_ext: $settings['url'] = 'https://premiumtemplates.io/wp-content/uploads/2018/10/video-placeholder.mp4'; break; case 'jpg' === $file_ext || 'png' === $file_ext: $settings['url'] = ELEMENTOR_ASSETS_URL . 'images/placeholder.png'; break; case 'json' === $file_ext: $settings['url'] = 'https://assets1.lottiefiles.com/packages/lf20_FPxkbx.json'; break; } } else { $settings = \Elementor\Plugin::$instance->templates_manager->get_import_images_instance()->import( $settings ); } return $settings; } public function on_import_repeater( $settings, $media, $control_data = array() ) { if ( empty( $settings ) || empty( $control_data['fields'] ) ) { return $settings; } $method = 'on_import'; foreach ( $settings as &$item ) { foreach ( $control_data['fields'] as $field ) { if ( empty( $field['name'] ) || empty( $item[ $field['name'] ] ) ) { continue; } $control_obj = \Elementor\Plugin::$instance->controls_manager->get_control( $field['type'] ); if ( ! $control_obj ) { continue; } if ( method_exists( $control_obj, $method ) ) { if ( 'media' !== $field['type'] && 'hedia' !== $field['type'] ) { $item[ $field['name'] ] = $control_obj->{$method}( $item[ $field['name'] ], $field ); } elseif ( ! empty( $item[ $field['name'] ]['url'] ) ) { $item[ $field['name'] ] = $this->on_import_media( $item[ $field['name'] ], $media ); } } } } return $settings; } }