Skip to content

Commit c5627a1

Browse files
Fix: Register Akismet Anti-Spam as a connector.
Akismet comes with core but the connectors screen was not showing akismet even if akismet was on the file system. This commit fixes the issue. Props jorgefilipecosta, bluefuton, gziolo. Fixes #65012. git-svn-id: https://develop.svn.wordpress.org/trunk@62193 602fd350-edb4-49c9-b593-d223f7449a82
1 parent d368a44 commit c5627a1

4 files changed

Lines changed: 40 additions & 7 deletions

File tree

src/wp-includes/connectors.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,25 @@ function _wp_connectors_init(): void {
210210
_wp_connectors_register_default_ai_providers( $registry );
211211
}
212212

213+
// Non-AI default connectors.
214+
$registry->register(
215+
'akismet',
216+
array(
217+
'name' => __( 'Akismet Anti-spam' ),
218+
'description' => __( 'Protect your site from spam.' ),
219+
'type' => 'spam_filtering',
220+
'plugin' => array(
221+
'file' => 'akismet/akismet.php',
222+
),
223+
'authentication' => array(
224+
'method' => 'api_key',
225+
'credentials_url' => 'https://akismet.com/get/',
226+
'setting_name' => 'wordpress_api_key',
227+
'constant_name' => 'WPCOM_API_KEY',
228+
),
229+
)
230+
);
231+
213232
/**
214233
* Fires when the connector registry is ready for plugins to register connectors.
215234
*

tests/phpunit/tests/connectors/wpConnectorsGetConnectorSettings.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ public function test_returns_expected_connector_keys(): void {
3737
$this->assertArrayHasKey( 'google', $connectors );
3838
$this->assertArrayHasKey( 'openai', $connectors );
3939
$this->assertArrayHasKey( 'anthropic', $connectors );
40+
$this->assertArrayHasKey( 'akismet', $connectors );
4041
$this->assertArrayHasKey( 'mock-connectors-test', $connectors );
41-
$this->assertCount( 4, $connectors );
42+
$this->assertCount( 5, $connectors );
4243
}
4344

4445
/**
@@ -56,7 +57,7 @@ public function test_each_connector_has_required_fields(): void {
5657
$this->assertArrayHasKey( 'description', $connector_data, "Connector '{$connector_id}' is missing 'description'." );
5758
$this->assertIsString( $connector_data['description'], "Connector '{$connector_id}' description should be a string." );
5859
$this->assertArrayHasKey( 'type', $connector_data, "Connector '{$connector_id}' is missing 'type'." );
59-
$this->assertContains( $connector_data['type'], array( 'ai_provider' ), "Connector '{$connector_id}' has unexpected type '{$connector_data['type']}'." );
60+
$this->assertContains( $connector_data['type'], array( 'ai_provider', 'spam_filtering' ), "Connector '{$connector_id}' has unexpected type '{$connector_data['type']}'." );
6061
$this->assertArrayHasKey( 'authentication', $connector_data, "Connector '{$connector_id}' is missing 'authentication'." );
6162
$this->assertIsArray( $connector_data['authentication'], "Connector '{$connector_id}' authentication should be an array." );
6263
$this->assertArrayHasKey( 'method', $connector_data['authentication'], "Connector '{$connector_id}' authentication is missing 'method'." );
@@ -79,11 +80,16 @@ public function test_api_key_connectors_have_setting_name_and_credentials_url():
7980
++$api_key_count;
8081

8182
$this->assertArrayHasKey( 'setting_name', $connector_data['authentication'], "Connector '{$connector_id}' authentication is missing 'setting_name'." );
82-
$this->assertSame(
83-
'connectors_ai_' . str_replace( '-', '_', $connector_id ) . '_api_key',
84-
$connector_data['authentication']['setting_name'] ?? null,
85-
"Connector '{$connector_id}' setting_name does not match expected format."
86-
);
83+
84+
// AI providers use the connectors_ai_{id}_api_key convention.
85+
// Non-AI connectors may use custom setting names.
86+
if ( 'ai_provider' === $connector_data['type'] ) {
87+
$this->assertSame(
88+
'connectors_ai_' . str_replace( '-', '_', $connector_id ) . '_api_key',
89+
$connector_data['authentication']['setting_name'] ?? null,
90+
"Connector '{$connector_id}' setting_name does not match expected format."
91+
);
92+
}
8793
}
8894

8995
$this->assertGreaterThan( 0, $api_key_count, 'At least one connector should use api_key authentication.' );

tests/phpunit/tests/rest-api/rest-settings-controller.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public function test_get_items() {
119119
'default_ping_status',
120120
'default_comment_status',
121121
'site_icon', // Registered in wp-includes/blocks/site-logo.php
122+
'wordpress_api_key', // Registered by Akismet connector.
122123
'wp_collaboration_enabled',
123124
);
124125

tests/qunit/fixtures/wp-api-generated.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11011,6 +11011,12 @@ mockedApiResponse.Schema = {
1101111011
"PATCH"
1101211012
],
1101311013
"args": {
11014+
"wordpress_api_key": {
11015+
"title": "Akismet Anti-spam API Key",
11016+
"description": "API key for the Akismet Anti-spam connector.",
11017+
"type": "string",
11018+
"required": false
11019+
},
1101411020
"title": {
1101511021
"title": "Title",
1101611022
"description": "Site title.",
@@ -14544,6 +14550,7 @@ mockedApiResponse.CommentModel = {
1454414550
};
1454514551

1454614552
mockedApiResponse.settings = {
14553+
"wordpress_api_key": "",
1454714554
"title": "Test Blog",
1454814555
"description": "",
1454914556
"url": "http://example.org",

0 commit comments

Comments
 (0)