query_vars['adscaleChanges'] = sanitize_key( wp_unslash( $_GET['adscaleChanges'] ) ); } // make sure endpoint request if ( ! isset( $wp->query_vars['adscaleChanges'] ) ) { return; } try { ob_start(); // Error handler self::setErrorHandler(); Helper::nocache_headers(); // Check Request (Guards) self::checkRequest(); ob_end_clean(); // Handle Request self::handleRequest(); // Default error Helper::send_response_formatted_error( self::makeErrorBody() ); } catch ( PluginApiException $ex ) { Helper::send_response_formatted_error( self::makeErrorBody( $ex->getApiErrorCode(), $ex->getMessage(), $ex->getApiErrorDetails() ) ); } catch ( \Exception $ex ) { Helper::send_response_formatted_error( self::makeErrorBody( $ex->getCode(), $ex->getMessage() ) ); } } public static function checkRequest() { parent::checkRequest(); self::initParams(); // last id from the previous page if ( ! self::checkParamAfter() ) { Helper::send_response_formatted_error( self::makeErrorBody('I001','Invalid argument value', 'after' ) ); } // Number of items per page, min if ( ! self::checkParamLimitForMin() ) { Helper::send_response_formatted_error( self::makeErrorBody('I001','Invalid argument value', 'limit' ) ); } // Number of items per page, max if ( ! self::checkParamLimitForMax() ) { Helper::send_response_formatted_error( self::makeErrorBody('I001','Invalid argument value', 'limit' ) ); } } public static function initParams() { self::$requestParams['after'] = Helper::get_post_body_data_value( 'after','absint' ); self::$requestParams['limit'] = Helper::get_post_body_data_value( 'limit','absint' ); // Set default params if not exists if ( null === self::$requestParams['after'] ) { self::$requestParams['after'] = 0; } if ( null === self::$requestParams['limit'] ) { self::$requestParams['limit'] = self::$defaultLimit; } // Params Type Hinting self::$requestParams['after'] = (int) self::$requestParams['after']; self::$requestParams['limit'] = (int) self::$requestParams['limit']; } /** * Last id from the previous page, check if is valid * * @return bool is valid */ public static function checkParamAfter() { return self::$requestParams['after'] >= 0; } /** * Check min Number of items per page * * @return bool is valid */ public static function checkParamLimitForMin() { return self::$requestParams['limit'] > 0; } /** * Check max Number of items per page * * @return bool is valid */ public static function checkParamLimitForMax() { return self::$requestParams['limit'] <= self::$maxLimit; } /** * Handle API request * */ public static function handleRequest() { $changes_data = []; $changes_rows = AdscaleEntityChanges::get( self::$requestParams['after'], self::$requestParams['limit'] ); if ( ! is_array( $changes_rows ) ) { Helper::send_response_formatted_error( self::makeErrorBody('S000','Unknown error', 'Changes could not be found' ) ); } foreach ( $changes_rows as $change_row ) { $changes_data[] = self::getChangeData( $change_row ); } Helper::send_response_formatted_success( [ 'changes' => $changes_data, ] ); } /** * Get Change data * * @param $change * * @return array */ public static function getChangeData( $change ) { return [ 'id' => isset( $change->id ) ? (int) $change->id : null, 'object_type' => isset( $change->object_type ) ? $change->object_type : null, 'object_id' => isset( $change->object_id ) ? (int) $change->object_id : null, ]; } }