← All changes
|
app/Assist/Controllers/DomainsSuggestionController.php
+25
-11
3.0.4
→
3.2.1
View file →
| @@ -5,8 +5,9 @@ | ||
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | 7 | namespace Extendify\Assist\Controllers; |
| 8 | 8 | |
| 9 | +use Extendify\Constants; | |
| 9 | 10 | use Extendify\Shared\Services\Sanitizer; |
| 10 | 11 | |
| 11 | 12 | defined('ABSPATH') || die('No direct access.'); |
| 12 | 13 | |
| @@ -16,15 +17,8 @@ | ||
| 16 | 17 | |
| 17 | 18 | class DomainsSuggestionController |
| 18 | 19 | { |
| 19 | 20 | /** |
| 20 | - * The url for the server. | |
| 21 | - * | |
| 22 | - * @var string | |
| 23 | - */ | |
| 24 | - public static $host = 'https://ai.extendify.com'; | |
| 25 | - | |
| 26 | - /** | |
| 27 | 21 | * The list of url strings in the site name to block from using the api. |
| 28 | 22 | * |
| 29 | 23 | * @var array |
| 30 | 24 | */ |
| @@ -65,25 +59,36 @@ | ||
| 65 | 59 | if (!self::hasValidSiteTitle($siteName)) { |
| 66 | 60 | return new \WP_REST_Response([]); |
| 67 | 61 | } |
| 68 | 62 | |
| 63 | + $cleanedSiteTitle = self::cleanSiteTitle($siteName); | |
| 64 | + if ($cleanedSiteTitle === '') { | |
| 65 | + return new \WP_REST_Response([]); | |
| 66 | + } | |
| 67 | + | |
| 69 | 68 | $siteProfile = \get_option('extendify_site_profile', []); |
| 69 | + if (empty($siteProfile)) { | |
| 70 | + return new \WP_REST_Response([]); | |
| 71 | + } | |
| 72 | + | |
| 70 | 73 | $businessDescription = ($siteProfile['description'] ?? ''); |
| 71 | 74 | $data = [ |
| 72 | - 'query' => self::cleanSiteTitle($siteName), | |
| 75 | + 'query' => $cleanedSiteTitle, | |
| 73 | 76 | 'devbuild' => defined('EXTENDIFY_DEVMODE') |
| 74 | 77 | ? constant('EXTENDIFY_DEVMODE') |
| 75 | 78 | : is_readable(EXTENDIFY_PATH . '.devbuild'), |
| 76 | 79 | 'siteId' => \get_option('extendify_site_id', ''), |
| 77 | 80 | 'tlds' => ($partnerData['domainTLDs'] ?? []), |
| 81 | + 'priorityTlds' => ($partnerData['priorityDomainTLDs'] ?? []), | |
| 78 | 82 | 'partnerId' => \esc_attr(constant('EXTENDIFY_PARTNER_ID')), |
| 79 | 83 | 'wpLanguage' => \get_locale(), |
| 80 | 84 | 'wpVersion' => \get_bloginfo('version'), |
| 81 | 85 | 'businessDescription' => \esc_attr($businessDescription), |
| 86 | + 'siteProfile' => $siteProfile, | |
| 82 | 87 | ]; |
| 83 | 88 | |
| 84 | 89 | $response = \wp_remote_post( |
| 85 | - sprintf('%s/api/domains/suggest', static::$host), | |
| 90 | + sprintf('%s/api/domains/suggest', Constants::AI_HOST), | |
| 86 | 91 | [ |
| 87 | 92 | 'body' => \wp_json_encode($data), |
| 88 | 93 | 'headers' => ['Content-Type' => 'application/json'], |
| 89 | 94 | ] |
| @@ -92,14 +97,19 @@ | ||
| 92 | 97 | if (is_wp_error($response)) { |
| 93 | 98 | return new \WP_REST_Response([]); |
| 94 | 99 | } |
| 95 | 100 | |
| 101 | + $status = \wp_remote_retrieve_response_code($response); | |
| 102 | + if ($status < 200 || $status >= 300) { | |
| 103 | + return new \WP_REST_Response([]); | |
| 104 | + } | |
| 105 | + | |
| 96 | 106 | $body = wp_remote_retrieve_body($response); |
| 97 | 107 | if (empty($body)) { |
| 98 | 108 | return new \WP_REST_Response([]); |
| 99 | 109 | } |
| 100 | 110 | |
| 101 | - return new \WP_REST_Response(json_decode($body, true), \wp_remote_retrieve_response_code($response)); | |
| 111 | + return new \WP_REST_Response(json_decode($body, true), $status); | |
| 102 | 112 | } |
| 103 | 113 | |
| 104 | 114 | /** |
| 105 | 115 | * Clean site title. |
| @@ -108,9 +118,13 @@ | ||
| 108 | 118 | * @return string |
| 109 | 119 | */ |
| 110 | 120 | public static function cleanSiteTitle($siteTitle) |
| 111 | 121 | { |
| 112 | - return preg_replace('/[^\p{L}\p{N}\s\-]+/u', '', html_entity_decode($siteTitle)); | |
| 122 | + return trim(preg_replace( | |
| 123 | + '/[^\p{L}\p{N}\s\-]+/u', | |
| 124 | + '', | |
| 125 | + html_entity_decode($siteTitle, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401) | |
| 126 | + )); | |
| 113 | 127 | } |
| 114 | 128 | |
| 115 | 129 | /** |
| 116 | 130 | * Check if the site Title is part of the blocked list. |