Skip to content

Commit c7b7fab

Browse files
author
Jon Waldstein
committed
refactor: update campaign REST API structure by extending the WP REST controller and keeping a consistent naming convention
1 parent e9fceb1 commit c7b7fab

13 files changed

+560
-432
lines changed

src/API/REST/V3/Routes/Campaigns/GetCampaignComments.php renamed to src/API/REST/V3/Routes/Campaigns/CampaignCommentsController.php

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,59 @@
44

55
use Exception;
66
use Give\API\REST\V3\Routes\Campaigns\ValueObjects\CampaignRoute;
7-
use Give\API\RestRoute;
87
use Give\Campaigns\CampaignDonationQuery;
98
use Give\Campaigns\Models\Campaign;
109
use Give\Donations\ValueObjects\DonationMetaKeys;
10+
use WP_REST_Controller;
11+
use WP_REST_Request;
1112
use WP_REST_Response;
1213
use WP_REST_Server;
1314

14-
class GetCampaignComments implements RestRoute
15+
class CampaignCommentsController extends WP_REST_Controller
1516
{
17+
/**
18+
* @var string
19+
*/
20+
protected $namespace;
21+
22+
public function __construct()
23+
{
24+
$this->namespace = CampaignRoute::NAMESPACE;
25+
}
26+
1627
/**
1728
* @since 4.13.0 add schema
1829
* @since 4.0.0
1930
*/
20-
public function registerRoute()
31+
public function register_routes()
2132
{
2233
register_rest_route(
23-
CampaignRoute::NAMESPACE,
24-
CampaignRoute::CAMPAIGN . '/comments',
34+
$this->namespace,
35+
'/' . CampaignRoute::CAMPAIGN . '/comments',
2536
[
2637
[
2738
'methods' => WP_REST_Server::READABLE,
28-
'callback' => [$this, 'handleRequest'],
39+
'callback' => [$this, 'get_items'],
2940
'permission_callback' => '__return_true',
30-
],
31-
'args' => [
32-
'id' => [
33-
'type' => 'integer',
34-
'required' => true,
35-
'sanitize_callback' => 'absint',
36-
],
37-
'perPage' => [
38-
'type' => 'integer',
39-
'required' => false,
40-
'sanitize_callback' => 'absint',
41-
],
42-
'anonymous' => [
43-
'type' => 'boolean',
44-
'required' => false,
45-
'default' => true,
41+
'args' => [
42+
'id' => [
43+
'type' => 'integer',
44+
'required' => true,
45+
'sanitize_callback' => 'absint',
46+
],
47+
'perPage' => [
48+
'type' => 'integer',
49+
'required' => false,
50+
'sanitize_callback' => 'absint',
51+
],
52+
'anonymous' => [
53+
'type' => 'boolean',
54+
'required' => false,
55+
'default' => true,
56+
],
4657
],
4758
],
48-
'schema' => [$this, 'getSchema'],
59+
'schema' => [$this, 'get_public_item_schema'],
4960
]
5061
);
5162
}
@@ -55,15 +66,15 @@ public function registerRoute()
5566
*
5667
* @throws Exception
5768
*/
58-
public function handleRequest($request): WP_REST_Response
69+
public function get_items($request): WP_REST_Response
5970
{
6071
$campaignId = $request->get_param('id');
6172
$perPage = $request->get_param('perPage');
6273
$anonymous = $request->get_param('anonymous');
6374

6475
$campaign = Campaign::find($campaignId);
6576

66-
if ( ! $campaign) {
77+
if (!$campaign) {
6778
return new WP_REST_Response('Campaign not found', 404);
6879
}
6980

@@ -73,8 +84,7 @@ public function handleRequest($request): WP_REST_Response
7384
->joinDonationMeta(DonationMetaKeys::ANONYMOUS, 'anonymousMeta')
7485
->leftJoin('give_donors', 'donorIdMeta.meta_value', 'donors.id', 'donors');
7586

76-
77-
if ( ! $anonymous) {
87+
if (!$anonymous) {
7888
$query->where('anonymousMeta.meta_value', '1', '!=');
7989
}
8090

@@ -86,20 +96,22 @@ public function handleRequest($request): WP_REST_Response
8696
'commentMeta.meta_value as comment',
8797
'anonymousMeta.meta_value as anonymous',
8898
'donation.post_date as date',
89-
'donors.name as donorName'
99+
'donors.name as donorName',
100+
'donors.email as email'
90101
);
91102

92103
$donations = $query->limit($perPage)->getAll();
93104

94105
$formattedComments = array_map(function ($donation) {
95106
$donorName = $donation->anonymous === '1' ? __('Anonymous') : $donation->donorName;
107+
$avatarEmail = $donation->anonymous === '1' ? '' : ($donation->email ?? '');
96108

97109
return [
98110
'donorName' => $donorName,
99111
'comment' => $donation->comment,
100112
'anonymous' => $donation->anonymous === '1',
101113
'date' => human_time_diff(strtotime($donation->date)),
102-
'avatar' => (string)get_avatar_url($donation->email),
114+
'avatar' => (string) get_avatar_url($avatarEmail),
103115
];
104116
}, $donations);
105117

@@ -109,9 +121,10 @@ public function handleRequest($request): WP_REST_Response
109121
/**
110122
* @since 4.13.0
111123
*/
112-
public function getSchema(): array
124+
public function get_item_schema(): array
113125
{
114126
return [
127+
'$schema' => 'http://json-schema.org/draft-04/schema#',
115128
'title' => 'givewp/campaign-comments',
116129
'description' => esc_html__('Provides comments for a specific campaign.', 'give'),
117130
'type' => 'object',
@@ -128,8 +141,8 @@ public function getSchema(): array
128141
'anonymous' => [
129142
'type' => 'boolean',
130143
'description' => esc_html__('Include anonymous comments', 'give'),
131-
]
132-
]
144+
],
145+
],
133146
];
134147
}
135148
}

0 commit comments

Comments
 (0)