_registry = $registry; } /** * Callback for debug-checking filters. Changes debug to false for AJAX req. * * @wp_hook ai1ec_dbi_debug * * @param bool $do_debug Current debug value. * * @return bool Optionally modified `$do_debug`. */ public function debug_filter( $do_debug ) { if ( $this->is_ajax() ) { $do_debug = false; } return $do_debug; } /** * Check if we are processing AJAX request. * * @return bool True if it's an AJAX request. */ public function is_ajax() { if ( defined( 'DOING_AJAX' ) ) { return true; } if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && 'XMLHttpRequest' === $_SERVER['HTTP_X_REQUESTED_WITH'] ) { return true; } if ( isset( $_GET['ai1ec_doing_ajax'] ) && 'true' === $_GET['ai1ec_doing_ajax'] ) { return true; } if ( isset( $_GET['ai1ec_js_widget'] ) ) { return true; } // Legacy support. if ( isset( $_GET['ai1ec_super_widget'] ) ) { return true; } if ( isset( $_GET['ai1ec_render_js'] ) || isset( $_GET['ai1ec_render_css'] ) ) { return true; } return apply_filters( 'ai1ec_is_ajax', false ); } /** * Check if client accepts gzip and we should compress content * * Plugin settings, client preferences and server capabilities are * checked to make sure we should use gzip for output compression. * * @return bool True when gzip should be used */ public function client_use_gzip() { $settings = $this->_registry->get( 'model.settings' ); if ( $settings->get( 'disable_gzip_compression' ) || ( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) && 'identity' === $_SERVER['HTTP_ACCEPT_ENCODING'] || ! extension_loaded( 'zlib' ) ) ) { return false; } $zlib_output_handler = ini_get( 'zlib.output_handler' ); if ( in_array( 'ob_gzhandler', ob_list_handlers() ) || in_array( strtolower( ini_get( 'zlib.output_compression' ) ), array( '1', 'on' ) ) || ! empty( $zlib_output_handler ) ) { return false; } return true; } /** * Disable `streams` transport support as necessary * * Following (`streams`) transport is disabled only when request to cron * dispatcher are made to make sure that requests does have no impact on * browsing experience - site is not slowed down, when crons are spawned * from within current screen session. * * @param mixed $output HTTP output * @param string $url Original request URL * * @return mixed Original or modified $output */ public function pre_http_request( $status, $output, $url ) { $cron_url = site_url( 'wp-cron.php' ); remove_filter( 'use_streams_transport', 'ai1ec_return_false' ); if ( 0 === strncmp( $url, $cron_url, strlen( $cron_url ) ) && ! function_exists( 'curl_init' ) ) { add_filter( 'use_streams_transport', 'ai1ec_return_false' ); } return $status; } /** * Inject time.ly certificate to cURL resource handle * * @param resource $curl Instance of cURL resource * * @return void Method does not return value */ public function curl_inject_certificate( $curl ) { // verify that the passed argument // is resource of type 'curl' if ( is_resource( $curl ) && 'curl' === get_resource_type( $curl ) ) { // set CURLOPT_CAINFO to AI1EC_CA_ROOT_PEM curl_setopt( $curl, CURLOPT_CAINFO, AI1EC_CA_ROOT_PEM ); } } /** * Initialize time.ly certificate only for time.ly domain * * @param array $args Http arguments. * @param string $url Current URL address. * * @return void Method does not return value */ public function init_certificate( $args, $url ) { remove_action( 'http_api_curl', array( $this, 'curl_inject_certificate' ) ); if ( false !== stripos( $url, '//time.ly' ) ) { add_action( 'http_api_curl', array( $this, 'curl_inject_certificate' ) ); } return $args; } /** * Checks if is json required for frontend rendering. * * @param string $request_format Format. * * @return bool True or false. */ public function is_json_required( $request_format, $type ) { $fer_list = explode( ',', AI1EC_FER_ENABLED_TEMPLATES_LIST ); return 'json' === $request_format && in_array( strtolower( $type ), $fer_list ) && $this->_registry->get( 'model.settings' )->get( 'ai1ec_use_frontend_rendering' ) && $this->is_ajax(); } /** * Returns current action for bulk operations. * * @return string|null Action or null when empty. */ public function get_current_action() { if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) { return $_REQUEST['action']; } if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) { return $_REQUEST['action2']; } return null; } }