Server IP : 15.235.198.142 / Your IP : 216.73.216.154 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/yme/wp-content/plugins/simply-static/src/integrations/ |
Upload File : |
<?php namespace Simply_Static; use function Clue\StreamFilter\fun; class Elementor_Pro_Integration extends Integration { /** * Given plugin handler ID. * * @var string Handler ID. */ protected $id = 'elementor-pro'; public function __construct() { $this->name = __( 'Elementor Pro', 'simply-static' ); $this->description = __( 'Exports assets required for Elementor Pro widgets and prepares data used by them.', 'simply-static' ); } /** * Return if the dependency is active. * * @return boolean */ public function dependency_active() { return defined( 'ELEMENTOR_PRO_VERSION' ); } /** * Run the integration. * * @return void */ public function run() { add_action( 'ss_after_setup_task', [ $this, 'register_assets' ] ); add_action( 'ss_after_setup_task', [ $this, 'register_lottie_files' ] ); } /** * Move Elementor Files to make sure all assets that might be required are there. * @return array */ public function get_lib_files() { return $this->get_files_in_url( 'lib' ); } /** * Register Elementor Assets to be added that are loaded conditionally * * @return void */ public function register_assets() { $file_urls = []; $lib_urls = $this->get_lib_files(); $css_urls = $this->get_files_in_dir( '/uploads/elementor/css/' ); $js_urls = $this->get_files_in_dir( '/uploads/elementor/js/' ); $file_urls = array_merge( $file_urls, $lib_urls, $css_urls, $js_urls ); // Add bundle files? $add_bundle = apply_filters( 'ss_elementor_add_bundle_files', false ); if ( $add_bundle ) { $bundle_urls = $this->get_bundle_files(); $file_urls = array_merge( $file_urls, $bundle_urls ); } $file_urls = array_merge( $file_urls, $this->get_files_in_url( 'js' ) ); $file_urls = array_merge( $file_urls, $this->get_files_in_url( 'css' ) ); $file_urls = array_merge( $file_urls, $this->get_files_in_url( 'images' ) ); $file_urls = array_merge( $file_urls, $this->get_files_in_url( 'mask-shapes' ) ); $file_urls = array_merge( $file_urls, $this->get_files_in_url( 'svg-paths' ) ); $file_urls = array_merge( $file_urls, $this->get_files_in_url( 'data' ) ); foreach ( $file_urls as $url ) { Util::debug_log( 'Adding elementor bundle asset to queue: ' . $url ); /** @var \Simply_Static\Page $static_page */ $static_page = Page::query()->find_or_initialize_by( 'url', $url ); $static_page->set_status_message( __( 'Elementor Pro Asset', 'simply-static' ) ); $static_page->found_on_id = 0; $static_page->save(); } } protected function get_bundle_files() { $js_bundles_folder = trailingslashit( ELEMENTOR_PRO_PATH ) . 'assets/js/'; $files = scandir( $js_bundles_folder ); $only_bundle_min = array_filter( $files, function ( $file ) { return strpos( $file, 'bundle.min.js' ); } ); $urls = []; foreach ( $only_bundle_min as $minified_file ) { // If file size is empty, skip it. if ( ! filesize( $minified_file ) ) { continue; } $urls[] = trailingslashit( ELEMENTOR_PRO_URL ) . 'assets/js/' . $minified_file; } return $urls; } /** * Move Elementor Files to make sure all assets that might be required are there. * @return array */ public function get_files_in_url( $asset_dir ) { $dir = trailingslashit( ELEMENTOR_PRO_PATH ) . 'assets/' . $asset_dir; $files = $this->get_files_in_dir( $dir ); $urls = []; foreach ( $files as $file ) { // If file size is empty, skip it. if ( ! filesize( $file ) ) { continue; } $urls[] = str_replace( trailingslashit( ELEMENTOR_PRO_PATH ), trailingslashit( ELEMENTOR_PRO_URL ), $file ); } return $urls; } /** * Get fields in directory * * @param string $source_dir Directory path. * @param array $files * * @return array */ public function get_files_in_dir( string $source_dir, array $files = [] ) { if ( is_dir( $source_dir ) ) { $directory = opendir( $source_dir ); while ( ( $file = readdir( $directory ) ) !== false ) { if ( $file === '.' || $file === '..' ) { continue; } if ( is_dir( "$source_dir/$file" ) === true ) { $files = $this->get_files_in_dir( "$source_dir/$file", $files ); } else { $files[] = "$source_dir/$file"; } } closedir( $directory ); } return $files; } /** * Register Elementor Assets to be added that are loaded conditionally * * @return void */ public function register_lottie_files() { global $wpdb; $elementor_data = $wpdb->get_results( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key='_elementor_data'", ARRAY_A ); if ( ! $elementor_data ) { return; } $files = []; foreach ( $elementor_data as $data ) { foreach ( json_decode( $data['meta_value'], true ) as $widget_data ) { $flat_widget = $this->flatten_data( $widget_data ); $lottie_files = array_filter( $flat_widget, function ( $item ) { if ( ! isset( $item['widgetType'] ) ) { return false; } if ( empty( $item['settings'] ) ) { return false; } if ( empty( $item['settings']['source_json'] ) ) { return false; } if ( 'library' !== $item['settings']['source_json']['source'] ) { return false; } return $item['widgetType'] === 'lottie'; } ); if ( ! $lottie_files ) { continue; } foreach ( $lottie_files as $lottie_widget ) { $files[] = $lottie_widget['settings']['source_json']['url']; } } } $files = array_unique( $files ); if ( ! $files ) { return; } foreach ( $files as $file_url ) { Util::debug_log( 'Adding elementor pro Lottie File to queue: ' . $file_url ); /** @var \Simply_Static\Page $static_page */ $static_page = Page::query()->find_or_initialize_by( 'url', $file_url ); $static_page->set_status_message( __( 'Elementor Pro Lottie', 'simply-static' ) ); $static_page->found_on_id = 0; $static_page->save(); } } /** * Get all widget * * @param $type * * @return array */ protected function flatten_data( $data, $flat_array = [] ) { if ( ! empty( $data['elements'] ) ) { $flat_array = $this->flatten_data( $data['elements'], $flat_array ); unset( $data['elements'] ); } $array_keys = array_keys( $data ); foreach ( $array_keys as $number ) { if ( ! is_integer( $number ) ) { continue; } $flat_array = $this->flatten_data( $data[ $number ], $flat_array ); unset( $data[ $number ] ); } if ( isset( $data['elements'] ) ) { unset( $data['elements'] ); } $flat_array[] = array_merge( $data, $flat_array ); return $flat_array; } }