<?php namespace PowerpackElements\Modules\QueryControl; use PowerpackElements\Base\Module_Base; use PowerpackElements\Controls\Control_Query as Query; // Elementor Classes use Elementor\Widget_Base; use Elementor\Controls_Manager; use Elementor\Core\Common\Modules\Ajax\Module as Ajax; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } /** * \Modules\QueryControl\Module * * @since 1.4.13.1 */ class Module extends Module_Base { /** * Module constructor. * * @since 1.4.13.1 * @param array $args */ public function __construct() { parent::__construct(); // ACF 5 and up if ( class_exists( '\acf' ) && function_exists( 'acf_get_field_groups' ) ) { $this->add_component( 'acf', new Types\Acf() ); } // Pods if ( function_exists( 'pods' ) ) { $this->add_component( 'pods', new Types\Pods() ); } // Toolset if ( function_exists( 'wpcf_admin_fields_get_groups' ) ) { $this->add_component( 'toolset', new Types\Toolset() ); } $this->add_component( 'posts', new Types\Posts() ); $this->add_component( 'terms', new Types\Terms() ); $this->add_component( 'authors', new Types\Authors() ); $this->add_component( 'users', new Types\Users() ); $this->add_component( 'templates', new Types\Templates() ); $this->add_component( 'templates-all', new Types\Templates_All() ); $this->add_component( 'templates-page', new Types\Templates_Page() ); $this->add_component( 'templates-section', new Types\Templates_Section() ); $this->add_component( 'templates-widget', new Types\Templates_Widget() ); $this->add_actions(); } /** * Get Name * * Get the name of the module * * @since 1.4.13.1 * @return string */ public function get_name() { return 'query-control'; } /** * Add Actions * * Registeres actions to Elementor hooks * * @since 1.4.13.1 * @return void */ protected function add_actions() { add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } /** * Calls function depending on ajax query data * * @since 1.4.13.1 * @return array */ public function ajax_call_filter_autocomplete( array $data ) { if ( empty( $data['query_type'] ) || empty( $data['q'] ) ) { throw new \Exception( 'Bad Request' ); } $results = $this->get_component( $data['query_type'] )->get_autocomplete_values( $data ); return [ 'results' => $results, ]; } /** * Calls function to get value titles depending on ajax query type * * @since 1.4.13.1 * @return array */ public function ajax_call_control_value_titles( array $request ) { $results = $this->get_component( $request['query_type'] )->get_value_titles( $request ); return $results; } /** * Register Elementor Ajax Actions * * @since 1.4.13.1 * @return array */ public function register_ajax_actions( $ajax_manager ) { $ajax_manager->register_ajax_action( 'pp_query_control_value_titles', [ $this, 'ajax_call_control_value_titles' ] ); $ajax_manager->register_ajax_action( 'pp_query_control_filter_autocomplete', [ $this, 'ajax_call_filter_autocomplete' ] ); } }