or_block_count' => (int) $plugin['author_block_count'], 'author' => wp_strip_all_tags( $plugin['author'] ), 'icon' => ( isset( $plugin['icons']['1x'] ) ? $plugin['icons']['1x'] : 'block-default' ), 'last_updated' => gmdate( 'Y-m-d\TH:i:s', strtotime( $plugin['last_updated'] ) ), 'humanized_updated' => sprintf( /* translators: %s: Human-readable time difference. */ __( '%s ago' ), human_time_diff( strtotime( $plugin['last_updated'] ) ) ), ); $this->add_additional_fields_to_object( $block, $request ); $response = new WP_REST_Response( $block ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $plugin ) ); } return $response; } /** * Generates a list of links to include in the response for the plugin. * * @since 5.5.0 * * @param array $plugin The plugin data from WordPress.org. * @return array */ protected function prepare_links( $plugin ) { $links = array( 'https://api.w.org/install-plugin' => array( 'href' => add_query_arg( 'slug', urlencode( $plugin['slug'] ), rest_url( 'wp/v2/plugins' ) ), ), ); $plugin_file = $this->find_plugin_for_slug( $plugin['slug'] ); if ( $plugin_file ) { $links['https://api.w.org/plugin'] = array( 'href' => rest_url( 'wp/v2/plugins/' . substr( $plugin_file, 0, - 4 ) ), 'embeddable' => true, ); } return $links; } /** * Finds an installed plugin for the given slug. * * @since 5.5.0 * * @param string $slug The WordPress.org directory slug for a plugin. * @return string The plugin file found matching it. */ protected function find_plugin_for_slug( $slug ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $plugin_files = get_plugins( '/' . $slug ); if ( ! $plugin_files ) { return ''; } $plugin_files = array_keys( $plugin_files ); return $slug . '/' . reset( $plugin_files ); } /** * Retrieves the theme's schema, conforming to JSON Schema. * * @since 5.5.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $this->schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'block-directory-item', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The block name, in namespace/block-name format.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'title' => array( 'description' => __( 'The block title, in human readable format.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'description' => array( 'description' => __( 'A short description of the block, in human readable format.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'id' => array( 'description' => __( 'The block slug.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'rating' => array( 'description' => __( 'The star rating of the block.' ), 'type' => 'number', 'context' => array( 'view' ), ), 'rating_count' => array( 'description' => __( 'The number of ratings.' ), 'type' => 'integer', 'context' => array( 'view' ), ), 'active_installs' => array( 'description' => __( 'The number sites that have activated this block.' ), 'type' => 'integer', 'context' => array( 'view' ), ), 'author_block_rating' => array( 'description' => __( 'The average rating of blocks published by the same author.' ), 'type' => 'number', 'context' => array( 'view' ), ), 'author_block_count' => array( 'description' => __( 'The number of blocks published by the same author.' ), 'type' => 'integer', 'context' => array( 'view' ), ), 'author' => array( 'description' => __( 'The WordPress.org username of the block author.' ), 'type' => 'string', 'context' => array( 'view' ), ), 'icon' => array( 'description' => __( 'The block icon.' ), 'type' => 'string', 'format' => 'uri', 'context' => array( 'view' ), ), 'last_updated' => array( 'description' => __( 'The date when the block was last updated.' ), 'type' => 'string', 'format' => 'date-time', 'context' => array( 'view' ), ), 'humanized_updated' => array( 'description' => __( 'The date when the block was last updated, in fuzzy human readable format.' ), 'type' => 'string', 'context' => array( 'view' ), ), ), ); return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the search params for the blocks collection. * * @since 5.5.0 * * @return array Collection parameters. */ public function get_collection_params() { $query_params = parent::get_collection_params(); $query_params['context']['default'] = 'view'; $query_params['term'] = array( 'description' => __( 'Limit result set to blocks matching the search term.' ), 'type' => 'string', 'required' => true, 'minLength' => 1, ); unset( $query_params['search'] ); /** * Filters REST API collection parameters for the block directory controller. * * @since 5.5.0 * * @param array $query_params JSON Schema-formatted collection parameters. */ return apply_filters( 'rest_block_directory_collection_params', $query_params ); } } ' plugin installed and activated", 'ae-pro' ), ], 'acf-gallery' => [ 'label' => 'ACF Gallery', 'type' => 'widget', 'enabled' => true, 'not-available' => __( "Requires 'Advanced Custom Field Pro' plugin installed and activated", 'ae-pro' ), ], 'acf-repeater' => [ 'label' => 'ACF Repeater', 'type' => 'widget', 'enabled' => true, 'not-available' => __( "Requires 'Advanced Custom Field Pro' plugin installed and activated", 'ae-pro' ), ], 'acf-flexible-content' => [ 'label' => 'ACF Flexible Content', 'type' => 'widget', 'enabled' => true, 'not-available' => __( "Requires 'Advanced Custom Field Pro' plugin installed and activated", 'ae-pro' ), ], ], ]; $this->modules['pods'] = [ 'label' => __( 'Pods', 'ae-pro' ), 'modules' => [ 'Pods-fields' => [ 'label' => 'Pods Fields', 'type' => 'widget', 'enabled' => true, 'not-available' => __( "Requires 'Pods' plugin installed and activated", 'ae-pro' ), ], ], ]; $this->modules['woo'] = [ 'label' => __( 'WooCommerce Integration', 'ae-pro' ), 'modules' => [ 'woo' => [ 'label' => __( 'WooCommerce Widgets', 'ae-pro' ), 'type' => 'widget', 'enabled' => true, 'not-available' => __( "Requires 'WooCommerce' plugin installed and activated", 'ae-pro' ), ], ], ]; $saved_modules = get_option( 'aep_modules' ); if ( $saved_modules !== false ) { foreach ( $this->modules as $group => $modules ) { foreach ( $modules['modules'] as $modulekey => $moduleName ) { if ( isset( $saved_modules[ $modulekey ] ) ) { $this->modules[ $group ]['modules'][ $modulekey ]['enabled'] = $saved_modules[ $modulekey ]; } else { $this->modules[ $group ]['modules'][ $modulekey ]['enabled'] = true; } } } } $this->modules = apply_filters( 'wts_aep_active_modules', $this->modules ); } public function get_modules() { return $this->modules; } public function elementor_widget_registered() { $modules = $this->modules; $modules['core']['modules']['query-control']['enabled'] = 1; foreach ( $modules as $group ) { if ( is_array( $group['modules'] ) && count( $group['modules'] ) ) { foreach ( $group['modules'] as $key => $value ) { if ( $value['enabled'] ) { $class_name = str_replace( '-', ' ', $key ); $class_name = str_replace( ' ', '', ucwords( $class_name ) ); $class_name = 'Aepro\Modules\\' . $class_name . '\Module'; $class_name::instance(); } } } } } public function add_ae_tab() { Controls_Manager::add_tab( self::TAB_AE_PRO, __( 'AE PRO', 'ae-pro' ) ); } public function save_modules() { $module_data = $_POST['moduleData']; // get saved modules $saved_modules = get_option( 'aep_modules' ); foreach ( $module_data as $key => $action ) { if ( $action === 'deactivate' ) { $saved_modules[ $key ] = false; } else { $saved_modules[ $key ] = true; } } update_option( 'aep_modules', $saved_modules ); wp_send_json( [ 'modules' => $saved_modules, ] ); } public function register_dynamic_tags( $dynamic_tags ) { \Elementor\Plugin::$instance->dynamic_tags->register_group( 'ae-post-dynamic', [ 'title' => __( 'Post (AE)', 'ae-pro' ), ] ); //--Post Dynamic $dynamic_tags->register_tag( PostDynamic\Post_Title::class ); $dynamic_tags->register_tag( PostDynamic\Post_Featured_Image::class ); $dynamic_tags->register_tag( PostDynamic\Post_Custom_Field::class ); $dynamic_tags->register_tag( PostDynamic\Post_Term::class ); $dynamic_tags->register_tag( PostDynamic\Post_Url::class ); $dynamic_tags->register_tag( PostDynamic\Post_Date::class ); $dynamic_tags->register_tag( PostDynamic\Post_Time::class ); $dynamic_tags->register_tag( PostDynamic\Post_Excerpt::class ); $dynamic_tags->register_tag( PostDynamic\Post_Gallery::class ); if ( AE_ACF ) { \Elementor\Plugin::$instance->dynamic_tags->register_group( 'ae-dynamic', [ 'title' => __( 'ACF (AE)', 'ae-pro' ), ] ); //--Acf Dynamic $dynamic_tags->register_tag( AcfDynamic\Text::class ); $dynamic_tags->register_tag( AcfDynamic\Number::class ); $dynamic_tags->register_tag( AcfDynamic\Url::class ); $dynamic_tags->register_tag( AcfDynamic\Image::class ); $dynamic_tags->register_tag( AcfDynamic\Color::class ); } if(AE_ACF_PRO){ //--Acf Dynamic $dynamic_tags->register_tag( AcfDynamic\Gallery::class ); //--Acf Repeater Fields $dynamic_tags->register_tag( AeDynamic\Text::class ); $dynamic_tags->register_tag( AeDynamic\Option::class ); $dynamic_tags->register_tag( AeDynamic\Url::class ); $dynamic_tags->register_tag( AeDynamic\Image::class ); $dynamic_tags->register_tag( AeDynamic\Gallery::class ); $dynamic_tags->register_tag( AeDynamic\Boolean::class ); } if ( class_exists( 'woocommerce' ) ) { \Elementor\Plugin::$instance->dynamic_tags->register_group( 'ae-woo-dynamic', [ 'title' => __( 'WooCommerce (AE)', 'ae-pro' ), ] ); $dynamic_tags->register_tag( WooDynamic\Product_Title::class ); $dynamic_tags->register_tag( WooDynamic\Product_Price::class ); $dynamic_tags->register_tag( WooDynamic\Product_Sale::class ); $dynamic_tags->register_tag( WooDynamic\Product_SKU::class ); $dynamic_tags->register_tag( WooDynamic\Product_Rating::class ); $dynamic_tags->register_tag( WooDynamic\Product_Stock::class ); $dynamic_tags->register_tag( WooDynamic\Product_Short_Description::class ); $dynamic_tags->register_tag( WooDynamic\Product_Term::class ); $dynamic_tags->register_tag( WooDynamic\Product_Image::class ); $dynamic_tags->register_tag( WooDynamic\Product_Gallery::class ); $dynamic_tags->register_tag( WooDynamic\Product_Cat_Image::class ); } } public function save_config() { check_ajax_referer( 'aep_ajax_nonce', 'nonce' ); $gmap_api = sanitize_text_field( $_POST['config']['ae_pro_gmap_api'] ); update_option( 'ae_pro_gmap_api', trim( $gmap_api ) ); wp_send_json( [ 'success' => 1, ] ); } }