PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.5
GiveWP – Donation Plugin and Fundraising Platform v4.14.5
4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / API / REST / V3 / Routes / Campaigns / CampaignCommentsController.php
give / src / API / REST / V3 / Routes / Campaigns Last commit date
Permissions 5 months ago ValueObjects 1 year ago ViewModels 7 months ago CampaignCommentsController.php 7 months ago CampaignController.php 5 months ago CampaignPageController.php 5 months ago CampaignRevenueController.php 5 months ago CampaignStatisticsController.php 5 months ago
CampaignCommentsController.php
154 lines
1 <?php
2
3 namespace Give\API\REST\V3\Routes\Campaigns;
4
5 use Exception;
6 use Give\API\REST\V3\Routes\Campaigns\ValueObjects\CampaignRoute;
7 use Give\Campaigns\CampaignDonationQuery;
8 use Give\Campaigns\Models\Campaign;
9 use Give\Donations\ValueObjects\DonationMetaKeys;
10 use WP_Error;
11 use WP_REST_Controller;
12 use WP_REST_Request;
13 use WP_REST_Response;
14 use WP_REST_Server;
15
16 class CampaignCommentsController extends WP_REST_Controller
17 {
18 /**
19 * @var string
20 */
21 protected $namespace;
22
23 public function __construct()
24 {
25 $this->namespace = CampaignRoute::NAMESPACE;
26 }
27
28 /**
29 * @since 4.13.0 add schema
30 * @since 4.0.0
31 */
32 public function register_routes()
33 {
34 register_rest_route(
35 $this->namespace,
36 '/' . CampaignRoute::CAMPAIGN . '/comments',
37 [
38 [
39 'methods' => WP_REST_Server::READABLE,
40 'callback' => [$this, 'get_items'],
41 'permission_callback' => '__return_true',
42 'args' => [
43 'id' => [
44 'type' => 'integer',
45 'required' => true,
46 'sanitize_callback' => 'absint',
47 ],
48 'perPage' => [
49 'type' => 'integer',
50 'required' => false,
51 'sanitize_callback' => 'absint',
52 ],
53 'anonymous' => [
54 'type' => 'boolean',
55 'required' => false,
56 'default' => true,
57 ],
58 ],
59 ],
60 'schema' => [$this, 'get_public_item_schema'],
61 ]
62 );
63 }
64
65 /**
66 * @since 4.0.0
67 *
68 * @throws Exception
69 */
70 public function get_items($request): WP_REST_Response
71 {
72 $campaignId = $request->get_param('id');
73 $perPage = $request->get_param('perPage');
74 $anonymous = $request->get_param('anonymous');
75
76 $campaign = Campaign::find($campaignId);
77
78 if (!$campaign) {
79 $response = new WP_Error('campaign_not_found', __('Campaign not found', 'give'), ['status' => 404]);
80
81 return rest_ensure_response($response);
82 }
83
84 $query = (new CampaignDonationQuery($campaign))
85 ->joinDonationMeta(DonationMetaKeys::DONOR_ID, 'donorIdMeta')
86 ->joinDonationMeta(DonationMetaKeys::COMMENT, 'commentMeta')
87 ->joinDonationMeta(DonationMetaKeys::ANONYMOUS, 'anonymousMeta')
88 ->leftJoin('give_donors', 'donorIdMeta.meta_value', 'donors.id', 'donors');
89
90 if (!$anonymous) {
91 $query->where('anonymousMeta.meta_value', '1', '!=');
92 }
93
94 $query->where('commentMeta.meta_value', '', '!=');
95 $query->whereIsNotNull('commentMeta.meta_value');
96
97 $query->select(
98 'donorIdMeta.meta_value as donorId',
99 'commentMeta.meta_value as comment',
100 'anonymousMeta.meta_value as anonymous',
101 'donation.post_date as date',
102 'donors.name as donorName',
103 'donors.email as email'
104 );
105
106 $donations = $query->limit($perPage)->getAll();
107
108 $formattedComments = array_map(function ($donation) {
109 $donorName = $donation->anonymous === '1' ? __('Anonymous') : $donation->donorName;
110 $avatarEmail = $donation->anonymous === '1' ? '' : ($donation->email ?? '');
111
112 return [
113 'donorName' => $donorName,
114 'comment' => $donation->comment,
115 'anonymous' => $donation->anonymous === '1',
116 'date' => human_time_diff(strtotime($donation->date)),
117 'avatar' => (string) get_avatar_url($avatarEmail),
118 ];
119 }, $donations);
120
121 $items = new WP_REST_Response($formattedComments);
122
123 return rest_ensure_response($items);
124 }
125
126 /**
127 * @since 4.13.0
128 */
129 public function get_item_schema(): array
130 {
131 return [
132 '$schema' => 'http://json-schema.org/draft-04/schema#',
133 'title' => 'givewp/campaign-comments',
134 'description' => esc_html__('Provides comments for a specific campaign.', 'give'),
135 'type' => 'object',
136 'properties' => [
137 'id' => [
138 'type' => 'integer',
139 'description' => esc_html__('The Campaign ID.', 'give'),
140 'required' => true,
141 ],
142 'perPage' => [
143 'type' => 'integer',
144 'description' => esc_html__('Comments per page', 'give'),
145 ],
146 'anonymous' => [
147 'type' => 'boolean',
148 'description' => esc_html__('Include anonymous comments', 'give'),
149 ],
150 ],
151 ];
152 }
153 }
154