PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0.1 4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.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 All 258 releases
← All changes | blocks/donor-wall/class-give-donor-wall.php +210 -42 2.3.0 → 4.18.0 View file →
@@ -3,9 +3,9 @@
3 3 * Give Donor Wall Block Class
4 4 *
5 5 * @package Give
6 6 * @subpackage Classes/Blocks
7 - * @copyright Copyright (c) 2016, WordImpress
7 + * @copyright Copyright (c) 2016, GiveWP
8 8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 9 * @since 2.3.0
10 10 */
11 11
@@ -28,9 +28,9 @@
28 28 * @since
29 29 * @access private
30 30 * @var Give_Donor_Wall_Block
31 31 */
32 - static private $instance;
32 + private static $instance;
33 33
34 34 /**
35 35 * Singleton pattern.
36 36 *
@@ -66,9 +66,9 @@
66 66 * @since 2.3.0
67 67 * @access private
68 68 */
69 69 private function init() {
70 - add_action( 'init', array( $this, 'register_block' ), 999 );
70 + add_action( 'init', [ $this, 'register_block' ], 999 );
71 71 }
72 72
73 73 /**
74 74 * Register block
@@ -76,46 +76,131 @@
76 76 * @access public
77 77 */
78 78 public function register_block() {
79 79 // Bailout.
80 - if ( ! function_exists('register_block_type' ) ) {
80 + if ( ! function_exists( 'register_block_type' ) ) {
81 81 return;
82 82 }
83 83
84 84 // Register block.
85 - register_block_type( 'give/donor-wall', array(
86 - 'render_callback' => array( $this, 'render_block' ),
87 - 'attributes' => array(
88 - 'columns' => array(
89 - 'type' => 'string',
90 - 'default' => '2',
91 - ),
92 - 'showAvatar' => array(
93 - 'type' => 'boolean',
94 - 'default' => true,
95 - ),
96 - 'showName' => array(
97 - 'type' => 'boolean',
98 - 'default' => true,
99 - ),
100 - 'showTotal' => array(
101 - 'type' => 'boolean',
102 - 'default' => true,
103 - ),
104 - 'showDate' => array(
105 - 'type' => 'boolean',
106 - 'default' => true,
107 - ),
108 - 'showComments' => array(
109 - 'type' => 'boolean',
110 - 'default' => true,
111 - ),
112 - ),
113 - ) );
85 + register_block_type(
86 + 'give/donor-wall',
87 + [
88 + 'render_callback' => [ $this, 'render_block' ],
89 + 'attributes' => [
90 + 'donorsPerPage' => [
91 + 'type' => 'string',
92 + 'default' => '12',
93 + ],
94 + 'formID' => [
95 + 'type' => 'array',
96 + 'default' => [],
97 + ],
98 + 'ids' => [
99 + 'type' => 'array',
100 + 'default' => [],
101 + ],
102 + 'categories' => [
103 + 'type' => 'array',
104 + 'default' => [],
105 + ],
106 + 'tags' => [
107 + 'type' => 'array',
108 + 'default' => [],
109 + ],
110 + 'orderBy' => [
111 + 'type' => 'string',
112 + 'default' => 'post_date',
113 + ],
114 + 'order' => [
115 + 'type' => 'string',
116 + 'default' => 'DESC',
117 + ],
118 + 'paged' => [
119 + 'type' => 'string',
120 + 'default' => '1',
121 + ],
122 + 'columns' => [
123 + 'type' => 'string',
124 + 'default' => '3',
125 + ],
126 + 'showAvatar' => [
127 + 'type' => 'boolean',
128 + 'default' => true,
129 + ],
130 + 'showName' => [
131 + 'type' => 'boolean',
132 + 'default' => true,
133 + ],
134 + 'showCompanyName' => [
135 + 'type' => 'boolean',
136 + 'default' => false,
137 + ],
138 + 'showForm' => [
139 + 'type' => 'boolean',
140 + 'default' => true,
141 + ],
142 + 'showTotal' => [
143 + 'type' => 'boolean',
144 + 'default' => true,
145 + ],
146 + 'showComments' => [
147 + 'type' => 'boolean',
148 + 'default' => true,
149 + ],
150 + 'showAnonymous' => [
151 + 'type' => 'boolean',
152 + 'default' => true,
153 + ],
154 + 'onlyComments' => [
155 + 'type' => 'boolean',
156 + 'default' => false,
157 + ],
158 + 'commentLength' => [
159 + 'type' => 'string',
160 + 'default' => '80',
161 + ],
162 + 'readMoreText' => [
163 + 'type' => 'string',
164 + 'default' => __( 'Read more', 'give' ),
165 + ],
166 + 'loadMoreText' => [
167 + 'type' => 'string',
168 + 'default' => __( 'Load more', 'give' ),
169 + ],
170 + 'avatarSize' => [
171 + 'type' => 'string',
172 + 'default' => '75',
173 + ],
174 + 'toggleOptions' => [
175 + 'type' => 'string',
176 + 'default' => 'Donor info',
177 + ],
178 + 'filterOptions' => [
179 + 'type' => 'string',
180 + 'default' => 'ids',
181 + ],
182 + 'color' => [
183 + 'type' => 'string',
184 + 'default' => '#219653',
185 + ],
186 + 'showTributes' => [
187 + 'type' => 'boolean',
188 + 'default' => false,
189 + ],
190 + 'showTimestamp' => [
191 + 'type' => 'boolean',
192 + 'default' => true,
193 + ],
194 + ],
195 + ]
196 + );
114 197 }
115 198
116 199 /**
117 200 * Block render callback
201 + *
202 + * @since 3.1.0 Use static function on array_map callback to pass the id as reference for _give_redirect_form_id to prevent warnings on PHP 8.0.1 or plus
118 203 *
119 204 * @param array $attributes Block parameters.
120 205 *
121 206 * @access public
@@ -121,18 +206,101 @@
121 206 * @access public
122 207 * @return string;
123 208 */
124 209 public function render_block( $attributes ) {
125 - $parameters = array(
126 - 'columns' => absint( $attributes['columns'] ),
127 - 'show_avatar' => $attributes['showAvatar'],
128 - 'show_name' => $attributes['showName'],
129 - 'show_total' => $attributes['showTotal'],
130 - 'show_time' => $attributes['showDate'],
131 - 'show_comments' => $attributes['showComments'],
132 - );
210 + $avatarSize = absint( $attributes['avatarSize'] );
133 211
134 - return Give_Donor_Wall::get_instance()->render_shortcode( $parameters );
212 + $parameters = [
213 + 'donors_per_page' => absint( $attributes['donorsPerPage'] ),
214 + 'form_id' => implode(',',
215 + array_map(
216 + static function ($id) {
217 + _give_redirect_form_id($id);
218 +
219 + return $id;
220 + },
221 + $this->getAsArray($attributes['formID'])
222 + )
223 + ),
224 + 'ids' => implode(',', $this->getAsArray($attributes['ids'] ) ),
225 + 'cats' => implode(',', $this->getAsArray($attributes['categories'] ) ),
226 + 'tags' => implode(',', $this->getAsArray($attributes['tags'] ) ),
227 + 'orderby' => $attributes['orderBy'],
228 + 'order' => $attributes['order'],
229 + 'pages' => absint( $attributes['paged'] ),
230 + 'columns' => $attributes['columns'],
231 + 'show_avatar' => $attributes['showAvatar'],
232 + 'show_name' => $attributes['showName'],
233 + 'show_company_name' => $attributes['showCompanyName'],
234 + 'show_form' => $attributes['showForm'],
235 + 'show_total' => $attributes['showTotal'],
236 + 'show_comments' => $attributes['showComments'],
237 + 'show_tributes' => $attributes['showTributes'],
238 + 'anonymous' => $attributes['showAnonymous'],
239 + 'comment_length' => absint( $attributes['commentLength'] ),
240 + 'only_comments' => $attributes['onlyComments'],
241 + 'readmore_text' => $attributes['readMoreText'],
242 + 'loadmore_text' => $attributes['loadMoreText'],
243 + 'avatar_size' => $avatarSize ?: 75,
244 + 'color' => $attributes['color'],
245 + 'show_time' => $attributes['showTimestamp'],
246 + ];
247 +
248 + $html = Give_Donor_Wall::get_instance()->render_shortcode( $parameters );
249 + $html = ! empty( $html ) ? $html : $this->blank_slate();
250 +
251 + return $html;
252 + }
253 +
254 +
255 + /**
256 + * @since 2.25.0
257 + *
258 + * @param string|array $value
259 + * @return array
260 + */
261 + private function getAsArray($value) {
262 + if ( is_array($value) ) {
263 + return $value;
264 + }
265 +
266 + // Backward compatibility
267 + if (strpos($value, ',')) {
268 + return explode(',', $value);
269 + }
270 +
271 + return [$value];
272 + }
273 +
274 + /**
275 + * Return formatted notice when shortcode returns an empty string
276 + *
277 + * @since 2.4.0
278 + *
279 + * @return string
280 + */
281 + private function blank_slate() {
282 + if ( ! defined( 'REST_REQUEST' ) ) {
283 + return '';
284 + }
285 +
286 + ob_start();
287 +
288 + $content = [
289 + 'image_url' => GIVE_PLUGIN_URL . 'build/assets/dist/images/give-icon-full-circle.svg',
290 + 'image_alt' => __( 'GiveWP Icon', 'give' ),
291 + 'heading' => __( 'No donors found.', 'give' ),
292 + 'help' => sprintf(
293 + /* translators: 1: Opening anchor tag. 2: Closing anchor tag. */
294 + __( 'Need help? Learn more about %1$sDonors%2$s.', 'give' ),
295 + '<a href="http://docs.givewp.com/core-donors/">',
296 + '</a>'
297 + ),
298 + ];
299 +
300 + include_once GIVE_PLUGIN_DIR . 'includes/admin/views/blank-slate.php';
301 +
302 + return ob_get_clean();
135 303 }
136 304 }
137 305
138 306 Give_Donor_Wall_Block::get_instance();