PluginProbe
MaxButtons – Create buttons / 6.8
MaxButtons – Create buttons v6.8
6.23 6.24 6.25 6.26 6.26.1 6.27 6.28 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 7.1 7.1.1 7.1.2 7.1.3 7.10 7.11 7.13 7.13.1 7.13.2 7.13.3 All 100 releases
maxbuttons / blocks / basic.php

basic.php in MaxButtons – Create buttons 6.8, at blocks/basic.php

468 lines 16.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 defined('ABSPATH') or die('No direct access permitted');
3
4 $blockClass["basic"] = "basicBlock";
5 $blockOrder[0][] = "basic";
6
7 use MaxButtons\maxBlocks as maxBlocks;
8 use MaxButtons\maxField as maxField;
9
10 class basicBlock extends maxBlock
11 {
12 protected $blockname = "basic";
13 protected $fields = array("name" => array("default" => ''),
14 "status" => array("default" => "publish"),
15 "description" => array("default" => ''),
16 "url" => array("default" => ''),
17 // "text" => array("default" => ''),
18 "new_window" => array("default" => 0),
19 "nofollow" => array("default" => 0)
20 );
21 protected $protocols = array("http","https",'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'sms', 'callto', 'fax', 'xmpp', "javascript"); // allowed url protocols for esc_url functions
22
23
24 function __construct()
25 {
26 parent::__construct();
27 }
28
29
30 public function parse_css($css, $mode = 'normal')
31 {
32 $data = $this->data[$this->blockname];
33
34 $css["maxbutton"]["normal"]["position"] = "relative";
35 $css["maxbutton"]["normal"]["text-decoration"] = "none";
36 // $css["maxbutton"]["normal"]["white-space"] = "nowrap"; // hinders correct rendering of oneline-multilines
37 $css["maxbutton"]["normal"]["display"] = "inline-block";
38
39 /*if (isset($data["url"]) && $data["url"] == '') // don't show clickable anchor if there is no URL.
40 {
41 $css["maxbutton"]["normal"]["cursor"] = 'default';
42 // $css[":hover"]["cursor"] = 'default';
43 } */
44
45 return $css;
46
47 }
48
49
50
51 public function save_fields($data, $post)
52 {
53 // Possible solution:
54 // $post["url"] = isset($post["url"]) ? urldecode(urldecode($post["url"])) : '';
55
56 $description = false;
57
58 if (isset($post["description"]) && $post["description"] != '')
59 {
60 $description = str_replace("\n", '-nwline-', $post["description"]);
61 $description = sanitize_text_field($description);
62 $description = str_replace('-nwline-', "\n", $description);
63
64 }
65
66 $data = parent::save_fields($data, $post);
67
68 // bypass sanitize for description - causing the end of line-breaks
69 if ($description)
70 $data["basic"]["description"] = $description;
71
72 // bypassing sanitize text field - causes problems with URLs and spaces
73 $url = isset($post["url"]) ? trim($post["url"]) : '';
74
75 $parsed_url = parse_url($url);
76 $rawEncode = array("query","fragment");
77 foreach($rawEncode as $item)
78 {
79 if (isset($parsed_url[$item]))
80 {
81 $parsed_url[$item] = rawurlencode($parsed_url[$item]);
82 }
83 }
84
85 $url = $this->unParseURL($parsed_url);
86
87 $url = str_replace(" ", "%20", trim($url) );
88
89 if (! $this->checkRelative($parsed_url))
90 $url = esc_url_raw($url, $this->protocols); // str replace - known WP issue with spaces
91
92 $data[$this->blockname]["url"] = $url;
93
94 if (isset($post["name"]))
95 $data["name"] = sanitize_text_field($post["name"]);
96 if (isset($post["status"]))
97 $data["status"] = sanitize_text_field($post["status"]); // for conversion old - new.
98 return $data;
99 }
100
101 protected function unparseURL($parsed_url)
102 {
103 // Don't add // to these schemes
104 $noslash_schemes = array('javascript', 'mailto', 'tel', 'sms');
105 if (isset($parsed_url['scheme']) && in_array($parsed_url['scheme'], $noslash_schemes) )
106 $scheme = $parsed_url["scheme"] . ":";
107 else
108 $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
109
110
111 $host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
112 $port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
113 $user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
114 $pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
115 $pass = ($user || $pass) ? "$pass@" : '';
116 $path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
117 $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
118 $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
119 return "$scheme$user$pass$host$port$path$query$fragment";
120 }
121
122 /* Check for a relative URL that gets killed by esc_url ( if there is no / first ) */
123 protected function checkRelative($parsed_url)
124 {
125 if (! isset($parsed_url['host']) && ! isset($parsed_url['scheme']) )
126 {
127 if (isset($parsed_url['path']) && $parsed_url['path'] !== '' && substr($parsed_url['path'], 0,1) !== '/')
128 {
129 return true;
130 }
131 }
132
133 return false;
134
135 }
136
137 public function parse_button($domObj, $mode = 'normal')
138 {
139
140 $data = $this->data[$this->blockname];
141
142 $button_id = $this->data["id"];
143
144 $anchor = $domObj->find("a",0);
145
146
147 if (isset($data["nofollow"]) && $data["nofollow"] == 1)
148 $anchor->rel = "nofollow";
149 // $buttonAttrs[] = "rel=nofollow";
150 if (isset($data["new_window"]) && $data["new_window"] == 1)
151 $anchor->target = "_blank";
152
153 if (isset($data["url"]) && $data["url"] != '')
154 {
155 $url = $data["url"];
156 $parsed_url = parse_url($url);
157
158 if (! $this->checkRelative($parsed_url))
159 $url = esc_url($url, $this->protocols);
160
161 $url = rawurldecode($url); // removes the + from a URL part.
162 $url = apply_filters('mb-url', $url, $data['url']); // passes processed url / raw url.
163 $url = apply_filters('mb-url-' . $button_id, $url, $data['url']);
164
165
166 $anchor->href = $url;
167 //do_shortcode( esc_url($url, $this->protocols) );
168
169 }
170 else // fixing an iOS problem which renders anchors without URL wrongly.
171 {
172 $anchor->href = 'javascript:void(0);';
173 }
174
175
176 return $domObj;
177
178 }
179
180 public function map_fields($map)
181 {
182
183 $map["url"]["attr"] = "href";
184 // $map["text"]["func"] = "updateAnchorText";
185
186 return $map;
187 }
188
189 public function admin_fields()
190 {
191 //parent::admin_fields();
192
193 //$data = $this->data[$this->blockname];
194 // On it's way out this
195 /*foreach($this->fields as $field => $options)
196 {
197 $default = (isset($options["default"])) ? $options["default"] : '';
198 ${$field} = (isset($data[$field])) ? $data[$field] : $default;
199
200 } */
201 $icon_url = MB()->get_plugin_url() . 'images/icons/' ;
202 ?>
203
204 <div class="mb_tab option-container mb_tab">
205 <div class="title"><?php _e('Basics', 'maxbuttons') ?></div>
206 <div class="inside basic">
207 <?php
208
209 // Name
210 $field_name = new maxField() ;
211 $field_name->label = __('Button Name', 'maxbuttons');
212 // $field_name->note = __('Something that you can quickly identify the button with.', 'maxbuttons');
213 $field_name->value = maxBlocks::getValue('name');
214 $field_name->id = 'name';
215 $field_name->name = $field_name->id;
216 $field_name->placeholder = __("Button Name","maxbuttons");
217 $field_name->output('start','end');
218
219
220 // URL
221 $field_url = new maxField();
222 $field_url->label = __('URL', 'maxbuttons');
223 // $field_url->note = __('The link when the button is clicked.', 'maxbuttons');
224 $field_url->value = rawurldecode(maxBlocks::getValue('url') );
225 $field_url->id = 'url';
226 $field_url->placeholder = __("http://","maxbuttons");
227 $field_url->name = $field_url->id;
228
229 $field_url->output('start','end');
230
231 // Spacer
232 $fspacer = new maxField('spacer');
233 $fspacer->name = 'url_options';
234 $fspacer->label = '&nbsp;';
235 $fspacer->output('start');
236
237
238 // New Window
239 $fwindow = new maxField('checkbox');
240 $fwindow->label = __('Open in New Window', 'maxbuttons');
241 $fwindow->name = 'new_window';
242 $fwindow->id = $fwindow->name;
243 $fwindow->value = 1;
244 //$fwindow->inputclass = 'check_button';
245 $fwindow->checked = checked( maxBlocks::getValue('new_window'), 1, false);
246
247 $fwindow->output('','');
248
249 //$fspacer->name ='rel_options';
250 //$fspacer->output('start');
251
252 // NoRel
253 $ffollow = new maxField('checkbox');
254 $ffollow->label = __('Use rel="nofollow"', 'maxbuttons');
255 $ffollow->value = 1;
256 $ffollow->name = 'nofollow';
257 $ffollow->id = $ffollow->name;
258 $ffollow->checked = checked( maxBlocks::getValue('nofollow'), 1, false);
259
260 $ffollow->output('','end');
261
262 // TEXT
263 $field_text = new maxField();
264 $field_text->label = __('Text','maxbuttons');
265 $field_text->name = 'text';
266 $field_text->id = 'text';
267 $field_text->value = maxBlocks::getValue('text') ;
268
269 $field_text->output('start','end');
270
271 // FONTS
272 $fonts = MB()->getClass('admin')->loadFonts();
273
274 $field_font = new maxField('generic');
275 $field_font->label = __('Font','maxbuttons');
276 $field_font->name = 'font';
277 $field_font->id = $field_font->name;
278 $field_font->value= maxBlocks::getValue('font');
279 $field_font->content = maxUtils::selectify($field_font->name, $fonts, $field_font->value);
280
281 $field_font->output('start');
282 ?>
283
284 <?php
285 // FONT SIZE
286 //global $maxbuttons_font_sizes;
287 $sizes = apply_filters('mb/editor/fontsizes', maxUtils::generate_font_sizes(10,50) );
288
289
290 $field_size = new maxField('number');
291 // $field_size->label = '';
292 $field_size->name = 'font_size';
293 $field_size->id= $field_size->name;
294 $field_size->inputclass = 'tiny';
295 $field_size->min = 8;
296 $field_size->value = maxUtils::strip_px(maxBlocks::getValue('font_size'));
297 //$field_size->content = maxUtils::selectify($field_size->name, $sizes, $field_size->value, '', 'small');
298
299 $field_size->output();
300
301 // Font style checkboxes
302 $fweight = new maxField('checkbox');
303 $fweight->icon = 'dashicons-editor-bold';
304 $fweight->title = __("Bold",'maxbuttons');
305 $fweight->id = 'check_fweight';
306 $fweight->name = 'font_weight';
307 $fweight->value = 'bold';
308 $fweight->inputclass = 'check_button icon';
309 $fweight->checked = checked( maxBlocks::getValue('font_weight'), 'bold', false);
310
311 $fweight->output('group_start');
312
313 $fstyle = new maxField('checkbox');
314 $fstyle->icon = 'dashicons-editor-italic';
315 $fstyle->title = __("Italic",'maxbuttons');
316 $fstyle->id = 'check_fstyle';
317 $fstyle->name = 'font_style';
318 $fstyle->value = 'italic';
319 $fstyle->inputclass = 'check_button icon';
320 $fstyle->checked = checked( maxBlocks::getValue('font_style'), 'italic', false);
321
322 $fstyle->output('','group_end');
323
324
325 $falign_left = new maxField('radio');
326 $falign_left->icon = 'dashicons-editor-alignleft';
327 $falign_left->title = __('Align left','maxbuttons');
328 $falign_left->id = 'radio_talign_left';
329 $falign_left->name = 'text_align';
330 $falign_left->value = 'left';
331 $falign_left->inputclass = 'check_button icon';
332 $falign_left->checked = checked ( maxblocks::getValue('text_align'), 'left', false);
333
334 $falign_left->output('group_start');
335
336 $falign_center = new maxField('radio');
337 $falign_center->icon = 'dashicons-editor-aligncenter';
338 $falign_center->title = __('Align center','maxbuttons');
339 $falign_center->id = 'radio_talign_center';
340 $falign_center->name = 'text_align';
341 $falign_center->value = 'center';
342 $falign_center->inputclass = 'check_button icon';
343 $falign_center->checked = checked( maxblocks::getValue('text_align'), 'center', false);
344
345 $falign_center->output();
346
347 $falign_right = new maxField('radio');
348 $falign_right->icon = 'dashicons-editor-alignright';
349 $falign_right->title = __('Align right','maxbuttons');
350 $falign_right->id = 'radio_talign_right';
351 $falign_right->name = 'text_align';
352 $falign_right->value = 'right';
353 $falign_right->inputclass = 'check_button icon';
354 $falign_right->checked = checked( maxblocks::getValue('text_align'), 'right', false);
355
356 $falign_right->output('', array('group_end','end') );
357
358 // Padding - trouble
359 $ptop = new maxField('number');
360 $ptop->label = __('Padding', 'maxbuttons');
361 $ptop->id = 'padding_top';
362 $ptop->name = $ptop->id;
363 $ptop->min = 0;
364 $ptop->inputclass = 'tiny';
365 $ptop->before_input = '<img src="' . $icon_url . 'p_top.png" title="' . __("Padding Top","maxbuttons") . '" >';
366 $ptop->value = maxUtils::strip_px(maxBlocks::getValue('padding_top'));
367
368 $ptop->output('start');
369
370 $pright = new maxField('number');
371 $pright->id = 'padding_right';
372 $pright->name = $pright->id;
373 $pright->min = 0;
374 $pright->inputclass = 'tiny';
375 $pright->before_input = '<img src="' . $icon_url . 'p_right.png" class="icon padding" title="' . __("Padding Right","maxbuttons") . '" >';
376 $pright->value = maxUtils::strip_px(maxBlocks::getValue('padding_right'));
377
378 $pright->output();
379
380 $pbottom = new maxField('number');
381 $pbottom->id = 'padding_bottom';
382 $pbottom->name = $pbottom->id;
383 $pbottom->min = 0;
384 $pbottom->inputclass = 'tiny';
385 $pbottom->before_input = '<img src="' . $icon_url . 'p_bottom.png" class="icon padding" title="' . __("Padding Bottom","maxbuttons") . '" >';
386 $pbottom->value = maxUtils::strip_px(maxBlocks::getValue('padding_bottom'));
387
388 $pbottom->output();
389
390 $pleft = new maxField('number');
391 $pleft->id = 'padding_left';
392 $pleft->name = $pleft->id;
393 $pleft->min = 0;
394 $pleft->inputclass = 'tiny';
395 $pleft->before_input = '<img src="' . $icon_url . 'p_left.png" class="icon padding" title="' . __("Padding Left","maxbuttons") . '" >';
396 $pleft->value = maxUtils::strip_px(maxBlocks::getValue('padding_left'));
397
398 $pleft->output('','end');
399
400
401 // Text Color
402 $fcolor = new maxField('color');
403 $fcolor->id = 'text_color';
404 $fcolor->name = $fcolor->id;
405 $fcolor->value = maxBlocks::getColorValue('text_color');
406 $fcolor->label = __('Text Color','maxbuttons');
407 $fcolor->copycolor = true;
408 $fcolor->bindto = 'text_color_hover';
409 $fcolor->copypos = 'right';
410 $fcolor->output('start');
411
412 // Text Color Hover
413 $fcolor_hover = new maxField('color');
414 $fcolor_hover->id = 'text_color_hover';
415 $fcolor_hover->name = $fcolor_hover->id;
416 $fcolor_hover->value = maxBlocks::getColorValue('text_color_hover');
417 $fcolor_hover->label = __('Text Color Hover','maxbuttons');
418 $fcolor_hover->copycolor = true;
419 $fcolor_hover->bindto = $fcolor->id;
420 $fcolor_hover->copypos = 'left';
421 $fcolor_hover->output('','end');
422
423 // Dimension : width
424 $field_width = new maxField('number');
425 $field_width->label = __('Button Width','maxbuttons');
426 $field_width->name = 'button_width';
427 $field_width->id = $field_width->name;
428 $field_width->inputclass = 'small';
429 $field_width->min = 0;
430 $field_width->value= maxUtils::strip_px(maxBlocks::getValue('button_width')); // strippx?
431 $field_width->output('start');
432
433 // Dimension : height
434 $field_height = new maxField('number');
435 $field_height->label = __('Button Height','maxbuttons');
436 $field_height->name = 'button_height';
437 $field_height->id = $field_height->name;
438 $field_height->inputclass = 'small';
439 $field_height->min = 0;
440 $field_height->value= maxUtils::strip_px(maxBlocks::getValue('button_height')); // strippx?
441 $field_height->output('','end');
442
443 // Description
444 $description_hide = get_option('maxbuttons_hidedescription');
445 if ($description_hide == 1)
446 $field_desc = new maxField('hidden');
447 else
448 $field_desc = new maxField('textarea');
449
450 $field_desc->label = __('Description', 'maxbuttons');
451 $field_desc->name = 'description';
452 $field_desc->id = $field_desc->name;
453 $field_desc->esc_function = 'esc_textarea';
454 $field_desc->value = maxBlocks::getValue('description') ;
455 $field_desc->placeholder = __('Brief explanation about how and where the button is used.','maxbuttons');
456 $field_desc->output('start','end');
457
458 ?>
459
460
461 </div>
462 </div>
463 <?php } // admin_display
464
465 } // class
466
467 ?>
468