44
55use Exception ;
66use Give \API \REST \V3 \Routes \Campaigns \ValueObjects \CampaignRoute ;
7- use Give \API \RestRoute ;
87use Give \Campaigns \CampaignDonationQuery ;
98use Give \Campaigns \Models \Campaign ;
109use Give \Donations \ValueObjects \DonationMetaKeys ;
10+ use WP_REST_Controller ;
11+ use WP_REST_Request ;
1112use WP_REST_Response ;
1213use 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