FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
surerank
/
inc
/
modules
/
content-generation
Edit File: utils.php
<?php /** * Content Generation Utils * * Utils module class for handling content generation functionality. * * @package SureRank\Inc\Modules\Content_Generation * @since 1.4.2 */ namespace SureRank\Inc\Modules\Content_Generation; use SureRank\Inc\Traits\Get_Instance; use SureRank\Inc\Functions\Requests; use SureRank\Inc\Modules\Ai_Auth\Controller as Ai_Auth_Controller; use WP_Error; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Utils class * * Main module class for content generation functionality. */ class Utils { use Get_Instance; /** * Get API types. * * @return array<int,string> Array of API types. * @since 1.4.2 */ public function get_api_types() { return apply_filters( 'surerank_content_generation_types', [ 'page_title', 'home_page_title', 'page_description', 'home_page_description', 'home_page_social_title', 'home_page_social_description', 'social_title', 'social_description', 'site_tag_line', 'page_url_slug', ] ); } /** * Prepare inputs for content generation. * * @param int|null $id Post or term ID (optional). * @param bool $is_taxonomy Whether the ID is for a taxonomy term. * @return array<string,string> Array of inputs for content generation. * @since 1.4.2 */ public function prepare_content_inputs( $id = null, $is_taxonomy = false ) { $title = ''; $content = ''; $type = ''; if ( ! empty( $id ) ) { if ( $is_taxonomy ) { $term = get_term( $id ); if ( $term && ! is_wp_error( $term ) ) { $title = $term->name; $content = $term->description; $taxonomy_obj = get_taxonomy( $term->taxonomy ); if ( $taxonomy_obj ) { $readable_name = $taxonomy_obj->labels->singular_name ?? $taxonomy_obj->label; $type = sprintf( 'Taxonomy - %s - %s', $readable_name, $term->taxonomy ); } } } else { $post = get_post( $id ); if ( $post ) { $title = get_the_title( $id ); $content = $post->post_content; $post_type_obj = get_post_type_object( $post->post_type ); if ( $post_type_obj ) { $readable_name = $post_type_obj->labels->singular_name ?? $post_type_obj->label; $type = sprintf( 'Post Type - %s - %s', $readable_name, $post->post_type ); } } } } // Limit to 500 words (wp_trim_words handles tag stripping and whitespace). if ( ! empty( $content ) ) { $content = wp_trim_words( $content, 500, '' ); } return apply_filters( 'surerank_content_generation_inputs', [ 'site_name' => get_bloginfo( 'name' ), 'site_tagline' => get_bloginfo( 'description' ), 'page_title' => $title, 'page_content' => $content, 'focus_keyword' => $this->get_focus_keyword( $id, $is_taxonomy ), 'type' => $type, ] ); } /** * Get focus keyword for the post or term. * * @param int|null $post_id Post ID or Term ID. * @param bool $is_taxonomy Whether it's a taxonomy term. * @return string Focus keyword. * @since 1.4.2 */ private function get_focus_keyword( $post_id = null, $is_taxonomy = false ) { if ( empty( $post_id ) ) { return ''; } if ( $is_taxonomy ) { $term_meta = get_term_meta( $post_id, 'surerank_settings_general', true ); return $term_meta['focus_keyword'] ?? ''; } $post_meta = get_post_meta( $post_id, 'surerank_settings_general', true ); return $post_meta['focus_keyword'] ?? ''; } /** * Get Credit System API URL. * * @return string API URL. * @since 1.5.0 */ public static function get_credit_system_api_url() { if ( ! defined( 'SURERANK_CREDIT_SERVER_API' ) ) { define( 'SURERANK_CREDIT_SERVER_API', 'https://credits.startertemplates.com/' ); } return SURERANK_CREDIT_SERVER_API; } /** * Get Auth Token. * * @since 1.5.0 * @return string|WP_Error */ public function get_auth_token() { $token = apply_filters( 'surerank_content_generation_auth_token', $this->get_auth_data( 'user_email' ) ); if ( empty( $token ) ) { $token = $this->get_auth_data( 'user_email' ); } return $token; } /** * Get Auth Data. * * @since 1.4.2 * @param string $key Optional. Key to retrieve specific data. Default is empty which returns all data. * @return array<string, mixed>|WP_Error */ private function get_auth_data( $key = '' ) { $auth_data = get_option( Ai_Auth_Controller::SETTINGS_KEY, false ); if ( empty( $auth_data ) ) { return new WP_Error( 'no_auth_data', __( 'No authentication data found.', 'surerank' ) ); } if ( ! empty( $key ) && is_string( $key ) ) { return $auth_data[ $key ] ?? new WP_Error( 'no_key_found', __( 'No data found for the provided key.', 'surerank' ) ); } return $auth_data; } /** * Get custom error messages for API responses. * * @since 1.5.0 * @return array<string, string> Array of error codes and their custom messages. */ public static function get_custom_error_messages() { return [ 'internal_server_error' => __( 'Something went wrong on our end. Please try again in a moment, or contact support if you need help.', 'surerank' ), 'require_pro' => __( 'You\'ve reached your free usage limit. Upgrade to Pro for additional credits to continue generating content. require_pro', 'surerank' ), 'limit_exceeded' => __( 'You\'ve used all your AI credits for today. Your credits will refresh automatically tomorrow, so you can continue creating content.', 'surerank' ), ]; } /** * Send API request to service. * * @since 1.5.0 * @param array<string, mixed> $request_data Request data to send. * @param string $route API route (e.g., 'surerank/generate/content'). * @param int $timeout Request timeout in seconds (default: 30). * @return array<string, mixed>|\WP_Error API response or WP_Error. */ public function send_api_request( $request_data, $route = 'surerank/generate/content', $timeout = 30 ) { $auth_token = self::get_auth_token(); if ( empty( $auth_token ) || is_wp_error( $auth_token ) ) { return new WP_Error( 'no_auth_token', __( 'No authentication token found. Please connect your account.', 'surerank' ) ); } $url = $this->get_credit_system_api_url() . $route; $body = wp_json_encode( $request_data ); if ( false === $body ) { return new WP_Error( 'json_encode_error', __( 'Failed to encode request data to JSON.', 'surerank' ) ); } /** * The API request response. * * @var array<string, mixed>|\WP_Error $response */ $response = Requests::post( $url, [ 'headers' => array( 'X-Token' => base64_encode( $auth_token ), 'Content-Type' => 'application/json; charset=utf-8', ), 'body' => $body, 'timeout' => $timeout, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout ] ); return $response; } }
Save
Back