PluginProbe
Event Post / 5.12.0
Event Post v5.12.0
6.1.1 6.1.0 6.0.1 6.0.0 5.12.0 trunk 3.9 4.0 4.2 4.3 4.4 4.5 5.0 5.1 5.10.0 5.10.1 5.10.2 5.10.3 5.10.4 5.11.0 5.11.1 5.2 5.5 5.6 5.6.1 All 46 releases
event-post / inc / class-settings.php

class-settings.php in Event Post 5.12.0, at inc/class-settings.php

594 lines 21.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Settings
4 *
5 * @package event-post
6 * @version 5.12.0
7 * @since 5.4.0
8 */
9
10 namespace EventPost;
11
12 class Settings{
13 private $dashicons;
14 public function __construct($dashicons) {
15 $this->dashicons = $dashicons;
16 add_action('admin_menu', array(&$this, 'manage_options'));
17 add_action('admin_init', array(&$this, 'register_settings'));
18 add_filter('plugin_action_links_event-post/eventpost.php', array( &$this, 'settings_link' ) );
19 add_filter('plugin_row_meta', array( &$this, 'row_meta' ), 1, 4);
20 }
21 public function get_settings(){
22 $ep_settings = get_option('ep_settings');
23 $reg_settings=false;
24 if(!is_array($ep_settings)){
25 $ep_settings = array();
26 }
27 if (!isset($ep_settings['dateformat']) || empty($ep_settings['dateformat'])) {
28 $ep_settings['dateformat'] = get_option('date_format');
29 $reg_settings=true;
30 }
31 if (!isset($ep_settings['timeformat']) || empty($ep_settings['timeformat'])) {
32 $ep_settings['timeformat'] = get_option('time_format');
33 $reg_settings=true;
34 }
35 if (!isset($ep_settings['tile']) || empty($ep_settings['tile']) || !isset(EventPost()->maps[$ep_settings['tile']])) {
36 $maps = array_keys(EventPost()->maps);
37 $ep_settings['tile'] = EventPost()->maps[$maps[0]]['id'];
38 $reg_settings=true;
39 }
40 if (!isset($ep_settings['tile_api_key']) || empty($ep_settings['tile_api_key']) ) {
41 $ep_settings['tile_api_key'] = '';
42 $reg_settings=true;
43 }
44 if(!isset($ep_settings['zoom']) || !is_numeric($ep_settings['zoom'])){
45 $ep_settings['zoom']=12;
46 $reg_settings=true;
47 }
48 if (!isset($ep_settings['cache']) || !is_numeric($ep_settings['cache'])) {
49 $ep_settings['cache'] = 0;
50 $reg_settings=true;
51 }
52 if (!isset($ep_settings['export']) || empty($ep_settings['export'])) {
53 $ep_settings['export'] = 'both';
54 $reg_settings=true;
55 }
56 if (!isset($ep_settings['export_when']) || empty($ep_settings['export_when'])) {
57 $ep_settings['export_when'] = 'future';
58 $reg_settings=true;
59 }
60 if (!isset($ep_settings['dateforhumans'])) {
61 $ep_settings['dateforhumans'] = 1;
62 $reg_settings=true;
63 }
64 if (!isset($ep_settings['emptylink'])) {
65 $ep_settings['emptylink'] = 1;
66 $reg_settings=true;
67 }
68 if (!isset($ep_settings['markpath'])) {
69 $ep_settings['markpath'] = '';
70 $reg_settings=true;
71 }
72 if (!isset($ep_settings['markurl'])) {
73 $ep_settings['markurl'] = '';
74 $reg_settings=true;
75 }
76 if (!isset($ep_settings['customcss'])) {
77 $ep_settings['customcss'] = '';
78 $reg_settings=true;
79 }
80 if (!isset($ep_settings['singlepos']) || empty($ep_settings['singlepos'])) {
81 $ep_settings['singlepos'] = 'after';
82 $reg_settings=true;
83 }
84 if (!isset($ep_settings['loopicons'])) {
85 $ep_settings['loopicons'] = 1;
86 $reg_settings=true;
87 }
88 if (!isset($ep_settings['displaystatus']) || empty($ep_settings['displaystatus'])) {
89 $ep_settings['displaystatus'] = 'both';
90 $reg_settings=true;
91 }
92 if (!isset($ep_settings['adminpos']) || empty($ep_settings['adminpos'])) {
93 $ep_settings['adminpos'] = 'side';
94 $reg_settings=true;
95 }
96 if (!isset($ep_settings['container_shema']) ) {
97 $ep_settings['container_shema'] = '';
98 $reg_settings=true;
99 }
100 if (!isset($ep_settings['item_shema']) ) {
101 $ep_settings['item_shema'] = '';
102 $reg_settings=true;
103 }
104 if(!isset($ep_settings['datepicker']) || !in_array($ep_settings['datepicker'], array('simple', 'native'))){
105 $ep_settings['datepicker']='simple';
106 $reg_settings=true;
107 }
108 if(!isset($ep_settings['posttypes']) || !is_array($ep_settings['posttypes'])){
109 $ep_settings['posttypes']=array('post');
110 $reg_settings=true;
111 }
112 if(!isset($ep_settings['default_color'])){
113 $ep_settings['default_color']= "#000000";
114 $reg_settings=true;
115 }
116 if(!isset($ep_settings['default_icon'])){
117 $ep_settings['default_icon']= "location";
118 $reg_settings=true;
119 }
120
121 do_action_ref_array('eventpost_getsettings_action', array(&$ep_settings, &$reg_settings));
122
123 //Save settings not changed
124 if($reg_settings===true){
125 update_option('ep_settings', $ep_settings);
126 }
127 return $ep_settings;
128 }
129
130
131 /**
132 * Settings link on the plugins page
133 */
134 public function settings_link( $links ) {
135 $settings_link = '<a href="options-general.php?page=event-settings">' . __( 'Settings', 'event-post' ) . '</a>';
136 // place it before other links
137 array_unshift( $links, $settings_link );
138 return $links;
139 }
140
141 /**
142 * Add links to the plugin meta row
143 *
144 * @param type $plugin_meta
145 * @param type $plugin_file
146 * @param type $plugin_data
147 * @param type $status
148 *
149 * @return type
150 */
151 public function row_meta($plugin_meta, $plugin_file, $plugin_data, $status){
152 if($plugin_file=='event-post/eventpost.php'){
153 $plugin_link = '<a href="http://event-post.com" target="_blank">' . __( 'Plugin site', 'event-post' ) . '</a>';
154 $review_link = '<a href="https://wordpress.org/support/plugin/event-post/reviews/#new-post" target="_blank">' . __( 'Give a note', 'event-post' ) . '</a>';
155 array_push($plugin_meta, $plugin_link, $review_link);
156 }
157 return $plugin_meta;
158 }
159
160 /**
161 * Adds menu items
162 */
163 public function manage_options() {
164 add_options_page(__('Events settings', 'event-post'), __('Events', 'event-post'), 'manage_options', 'event-settings', array(&$this, 'manage_settings'));
165 }
166
167 /**
168 * Register settings
169 *
170 * @action eventpost_register_settings
171 */
172 public function register_settings(){
173 register_setting( 'eventpost-settings', 'ep_settings' );
174
175 // Global
176 add_settings_section(
177 'eventpost-settings-general',
178 '<span class="dashicons dashicons-admin-appearance"></span>&nbsp;'.__('Global settings', 'event-post'),
179 array(&$this, 'settings_section_callback'),
180 'eventpost-settings'
181 );
182 //--
183 add_settings_field(
184 'emptylink',
185 __('Print link for empty posts', 'event-post'),
186 array(&$this, 'settings_field_select_callback'),
187 'eventpost-settings',
188 'eventpost-settings-general',
189 array( 'name' => 'emptylink', 'options'=>array(
190 1=>__('Link all posts', 'event-post'),
191 0=>__('Do not link posts with empty content', 'event-post')
192 )
193 )
194 );
195 add_settings_field(
196 'singlepos',
197 __('Event bar position for single posts', 'event-post'),
198 array(&$this, 'settings_field_select_callback'),
199 'eventpost-settings',
200 'eventpost-settings-general',
201 array( 'name' => 'singlepos', 'options'=>array(
202 'before'=>__('Before the content', 'event-post'),
203 'after'=>__('After the content', 'event-post'),
204 'none'=>__('Not displayed', 'event-post')
205 ) )
206 );
207 add_settings_field(
208 'loopicons',
209 __('Add icons for events in the loop', 'event-post'),
210 array(&$this, 'settings_field_select_callback'),
211 'eventpost-settings',
212 'eventpost-settings-general',
213 array( 'name' => 'loopicons', 'options'=>array(
214 1=>__('Emojis', 'event-post'),
215 0=>__('Hide', 'event-post'),
216 2=>__('Icons', 'event-post')
217 ) )
218 );
219 add_settings_field(
220 'displaystatus',
221 __('Display Event Status on:', 'event-post'),
222 array(&$this, 'settings_field_select_callback'),
223 'eventpost-settings',
224 'eventpost-settings-general',
225 array( 'name' => 'displaystatus', 'options'=>array(
226 'list'=>__('List only', 'event-post'),
227 'single'=>__('Single only', 'event-post'),
228 'both'=>__('Both', 'event-post'),
229 'none'=>__('None', 'event-post'),
230 ) )
231 );
232 add_settings_field(
233 'customcss',
234 __('Use this custom CSS file', 'event-post'),
235 array(&$this, 'settings_field_default_callback'),
236 'eventpost-settings',
237 'eventpost-settings-general',
238 // translators: %s: URL to the default CSS file
239 array( 'name' => 'customcss', 'description'=>sprintf(__('Leave empty to use the <a href="%s" target="_blank">default CSS file</a>.', 'event-post'), plugins_url('/css/event-post.css', __FILE__)).'<br>'
240 . (is_file(get_stylesheet_directory().'/event-post.css') || is_file(get_template_directory().'/event-post.css')
241 ? __('Your theme contains an <code>event-post.css</code> file. It will be used as default stylesheet.', 'event-post')
242 : __('You can also add a <code>event-post.css</code> in your theme directory. It will be used as default stylesheet.', 'event-post')))
243 );
244
245 // Date
246 add_settings_section(
247 'eventpost-settings-date',
248 '<span class="dashicons dashicons-clock"></span>&nbsp;'.__('Date settings', 'event-post'),
249 array(&$this, 'settings_section_callback'),
250 'eventpost-settings'
251 );
252 //--
253 add_settings_field(
254 'dateformat',
255 __('Date format', 'event-post'),
256 array(&$this, 'settings_field_default_callback'),
257 'eventpost-settings',
258 'eventpost-settings-date',
259 array( 'name' => 'dateformat')
260 );
261 add_settings_field(
262 'timeformat',
263 __('Time format', 'event-post'),
264 array(&$this, 'settings_field_default_callback'),
265 'eventpost-settings',
266 'eventpost-settings-date',
267 array( 'name' => 'timeformat')
268 );
269 add_settings_field(
270 'export',
271 __('Show export buttons on:', 'event-post'),
272 array(&$this, 'settings_field_select_callback'),
273 'eventpost-settings',
274 'eventpost-settings-date',
275 array( 'name' => 'export', 'options'=>array(
276 'list'=>__('List only', 'event-post'),
277 'single'=>__('Single only', 'event-post'),
278 'both'=>__('Both', 'event-post'),
279 'none'=>__('None', 'event-post'),
280 ) )
281 );
282 add_settings_field(
283 'export_when',
284 __('Show export buttons on:', 'event-post'),
285 array(&$this, 'settings_field_select_callback'),
286 'eventpost-settings',
287 'eventpost-settings-date',
288 array( 'name' => 'export_when', 'options'=>array(
289 'future'=>__('Future only', 'event-post'),
290 'past'=>__('Past only', 'event-post'),
291 'both'=>__('Both', 'event-post'),
292 'none'=>__('None', 'event-post'),
293 ) )
294 );
295 add_settings_field(
296 'dateforhumans',
297 __('Relative human dates:', 'event-post'),
298 array(&$this, 'settings_field_select_callback'),
299 'eventpost-settings',
300 'eventpost-settings-date',
301 array( 'name' => 'dateforhumans',
302 'description'=>__('Replace absolute dates by "today", "yesterday", and "tomorrow".', 'event-post'),
303 'options'=>array(
304 1=>__('Yes', 'event-post'),
305 0=>__('No', 'event-post'),
306 ) )
307 );
308
309 // List
310 add_settings_section(
311 'eventpost-settings-list',
312 '<span class="dashicons dashicons-editor-ul"></span>&nbsp;'.__('List settings', 'event-post'),
313 array(&$this, 'settings_section_callback'),
314 'eventpost-settings'
315 );
316 //--
317 add_settings_field(
318 'container_shema',
319 __('Container schema', 'event-post'),
320 array(&$this, 'settings_field_textarea_callback'),
321 'eventpost-settings',
322 'eventpost-settings-list',
323 array( 'name' => 'container_shema', 'description'=>__('default:','event-post').' <code>'.htmlentities(EventPost()->default_list_shema['container']).'</code>')
324 );
325 add_settings_field(
326 'item_shema',
327 __('Item schema', 'event-post'),
328 array(&$this, 'settings_field_textarea_callback'),
329 'eventpost-settings',
330 'eventpost-settings-list',
331 array( 'name' => 'item_shema', 'description'=>__('default:','event-post').' <code>'.htmlentities(EventPost()->default_list_shema['item']).'</code>')
332 );
333 // Timeline
334 add_settings_section(
335 'eventpost-settings-timeline',
336 '<span class="dashicons dashicons-arrow-right-alt"></span>&nbsp;'.__('Timeline settings', 'event-post'),
337 array(&$this, 'settings_section_callback'),
338 'eventpost-settings'
339 );
340 //--
341 add_settings_field(
342 'timeline_container_shema',
343 __('Timeline Container schema', 'event-post'),
344 array(&$this, 'settings_field_textarea_callback'),
345 'eventpost-settings',
346 'eventpost-settings-timeline',
347 array( 'name' => 'timeline_container_shema', 'description'=>__('default:','event-post').' <code>'.htmlentities(EventPost()->default_timeline_shema['container']).'</code>')
348 );
349 add_settings_field(
350 'timeline_item_shema',
351 __('Timeline Item schema', 'event-post'),
352 array(&$this, 'settings_field_textarea_callback'),
353 'eventpost-settings',
354 'eventpost-settings-timeline',
355 array( 'name' => 'timeline_item_shema', 'description'=>__('default:','event-post').' <code>'.htmlentities(EventPost()->default_timeline_shema['item']).'</code>')
356 );
357 // Appearance
358 add_settings_section(
359 'eventpost-settings-appearence',
360 '<span class="dashicons dashicons-admin-appearance"></span>&nbsp;'.__('Appearence settings', 'event-post'),
361 array(&$this, 'settings_section_callback'),
362 'eventpost-settings'
363 );
364 //--
365 add_settings_field(
366 'appearence_default_color',
367 __('Default Marker Color', 'event-post'),
368 array(&$this, 'settings_field_default_callback'),
369 'eventpost-settings',
370 'eventpost-settings-appearence',
371 array( 'name' => 'default_color', 'input-class'=> 'color-field','description'=>__('Default color used for Map Marker','event-post'))
372 );
373 add_settings_field(
374 'appearence_default_icon',
375 __('Default Marker Icon', 'event-post'),
376 array(&$this, 'settings_field_select_callback'),
377 'eventpost-settings',
378 'eventpost-settings-appearence',
379 array( 'name' => 'default_icon','class'=>'','input-style'=>'font-family : dashicons;', 'description'=>__('Default icon used for Map Marker','event-post'),'options' => $this->dashicons->icons_html_entities)
380 );
381 add_settings_field(
382 'markpath',
383 __('Makers custom directory after <code>ABSPATH/</code>', 'event-post'),
384 array(&$this, 'settings_field_default_callback'),
385 'eventpost-settings',
386 'eventpost-settings-appearence',
387 array( 'name' => 'markpath', 'description'=>__('(leave empty for default settings)','event-post'))
388 );
389 add_settings_field(
390 'markurl',
391 __('Makers custom directory URL', 'event-post'),
392 array(&$this, 'settings_field_default_callback'),
393 'eventpost-settings',
394 'eventpost-settings-appearence',
395 array( 'name' => 'markurl', 'description'=>__('(leave empty for default settings)','event-post'))
396 );
397 // Map
398 add_settings_section(
399 'eventpost-settings-map',
400 '<span class="dashicons dashicons-location-alt"></span>&nbsp;'.__('Map settings', 'event-post'),
401 array(&$this, 'settings_section_callback'),
402 'eventpost-settings'
403 );
404 //--
405 $maps = array();
406 foreach (EventPost()->maps as $map){
407 $maps[$map['id']]=$map['name'].(isset($map['urls_retina']) ? ' '.__('(Retina support)', 'event-post') : '');
408 }
409 add_settings_field(
410 'tile',
411 __('Map background', 'event-post'),
412 array(&$this, 'settings_field_select_callback'),
413 'eventpost-settings',
414 'eventpost-settings-map',
415 array( 'name' => 'tile', 'options'=>$maps)
416 );
417 add_settings_field(
418 'tile_api_key',
419 __('Optional API key', 'event-post'),
420 array(&$this, 'settings_field_default_callback'),
421 'eventpost-settings',
422 'eventpost-settings-map',
423 array( 'name' => 'tile_api_key', 'description'=>__('Some tiles need an API key to be displayed.','event-post'))
424 );
425 add_settings_field(
426 'zoom',
427 __('Default zoom', 'event-post'),
428 array(&$this, 'settings_field_default_callback'),
429 'eventpost-settings',
430 'eventpost-settings-map',
431 array( 'name' => 'zoom')
432 );
433
434
435 // Admin
436 add_settings_section(
437 'eventpost-settings-admin',
438 '<span class="dashicons dashicons-admin-generic"></span>&nbsp;'.__('Admin settings', 'event-post'),
439 array(&$this, 'settings_section_callback'),
440 'eventpost-settings'
441 );
442 //--
443 add_settings_field(
444 'adminpos',
445 __('Position of event details boxes', 'event-post'),
446 array(&$this, 'settings_field_select_callback'),
447 'eventpost-settings',
448 'eventpost-settings-admin',
449 array( 'name' => 'adminpos', 'options'=>array(
450 'side'=>__('Side', 'event-post'),
451 'normal'=>__('Under the text', 'event-post'),
452 ) )
453 );
454 $post_types = array();
455 $posttypes = apply_filters('eventpost_get_post_types', get_post_types(array(), 'objects'));
456 foreach($posttypes as $type=>$posttype){
457 $post_types[$posttype->name]=$posttype->labels->name;
458 }
459 add_settings_field(
460 'posttypes',
461 __('Which post types can be events?', 'event-post'),
462 array(&$this, 'settings_field_checkbox_callback'),
463 'eventpost-settings',
464 'eventpost-settings-admin',
465 array( 'name' => 'posttypes', 'options'=>$post_types)
466 );
467 add_settings_field(
468 'datepicker',
469 __('Datepicker style', 'event-post'),
470 array(&$this, 'settings_field_datepicker_callback'),
471 'eventpost-settings',
472 'eventpost-settings-admin',
473 array( 'name' => 'datepicker')
474 );
475 add_settings_field(
476 'cache',
477 __('Use cache', 'event-post'),
478 array(&$this, 'settings_field_default_callback'),
479 'eventpost-settings',
480 'eventpost-settings-admin',
481 array( 'name' => 'cache', 'description'=>__('Use cache for results','event-post'))
482 );
483
484 do_action('eventpost_register_settings');
485 }
486 function settings_section_callback( $arg ) {
487 echo '<hr>';
488 }
489
490 function settings_field_default_callback($args){
491 ?>
492 <input name="ep_settings[<?php echo esc_attr($args['name']); ?>]"
493 style="<?php echo esc_attr(isset($args['input-style']) ? $args['input-style'] : ''); ?>"
494 id="<?php echo esc_attr($args['name']); ?>"
495 value="<?php echo esc_attr(EventPost()->settings[$args['name']]); ?>"
496 class="regular-text <?php echo esc_attr(isset($args['input-class']) ? $args['input-class'] : ''); ?>"/>
497 <?php if(isset($args['description']) && $args['description']): ?>
498 <p class="description"><?php echo esc_html($args['description']); ?></p>
499 <?php endif; ?>
500 <?php
501 }
502 function settings_field_textarea_callback($args){
503 ?>
504 <textarea name="ep_settings[<?php echo esc_attr($args['name']); ?>]"
505 style="<?php echo esc_attr(isset($args['input-style']) ? $args['input-style'] : ''); ?>"
506 id="<?php echo esc_attr($args['name']); ?>"
507 class="regular-text <?php echo esc_attr(isset($args['input-class']) ? $args['input-class'] : ''); ?>"
508 ><?php echo esc_textarea(EventPost()->settings[$args['name']]); ?></textarea>
509 <?php if(isset($args['description']) && $args['description']): ?>
510 <p class="description"><?php echo esc_html($args['description']); ?></p>
511 <?php endif; ?>
512 <?php
513 }
514 function settings_field_select_callback($args){
515 ?>
516 <select name="ep_settings[<?php echo esc_attr($args['name']); ?>]"
517 style="<?php echo esc_attr(isset($args['input-style']) ? $args['input-style'] : ''); ?>"
518 id="<?php echo esc_attr($args['name']); ?>"
519 class="<?php echo esc_attr(isset($args['input-class']) ? $args['input-class'] : ''); ?>">
520 <?php foreach($args['options'] as $value=>$label) : ?>
521 <option value="<?php echo esc_attr($value); ?>" <?php selected($value, EventPost()->settings[$args['name']], true);?>><?php echo esc_html($label); ?></option>
522 <?php endforeach; ?>
523 </select>
524 <?php if(isset($args['description']) && $args['description']): ?>
525 <p class="description"><?php echo esc_html($args['description']); ?></p>
526 <?php endif; ?>
527 <?php
528 }
529 function settings_field_checkbox_callback($args){
530 ?>
531 <?php foreach($args['options'] as $value=>$label) : ?>
532 <p>
533 <label>
534 <input type="checkbox" name="ep_settings[<?php echo esc_attr($args['name']); ?>][<?php echo esc_attr($value); ?>]" value="<?php echo esc_attr($value); ?>" <?php checked(in_array($value, EventPost()->settings[$args['name']]),true, true) ?>>
535 <?php echo esc_html($label); ?>
536 </label>
537 </p>
538 <?php endforeach; ?>
539 <?php if(isset($args['description']) && $args['description']): ?>
540 <p class="description"><?php echo esc_html($args['description']); ?></p>
541 <?php endif; ?>
542 <?php
543 }
544 function settings_field_datepicker_callback($args){
545 $now = current_time('mysql');
546 $human_date = EventPost()->human_date(current_time('timestamp')) .' '. date(EventPost()->settings['timeformat'], current_time('timestamp'));
547 ?>
548 <div>
549 <label>
550 <input type="radio" name="ep_settings[datepicker]" id="ep_datepicker_simple" value="simple" <?php checked(EventPost()->settings['datepicker'],'simple', true) ?>>
551 <?php esc_html_e('Simple', 'event-post'); ?>
552 </label>
553 <p>
554 <span id="eventpost_simple_date_human" class="human_date">
555 <?php echo esc_html($human_date); ?>
556 </span>
557 <input type="text" class="eventpost-datepicker-simple" id="eventpost_simple_date" value="<?php echo esc_attr($now); ?>">
558 </p>
559 </div>
560 <div>
561 <label>
562 <input type="radio" name="ep_settings[datepicker]" id="ep_datepicker_native" value="native" <?php checked(EventPost()->settings['datepicker'],'native', true) ?>>
563 <?php esc_html_e('Native WordPress style', 'event-post'); ?>
564 </label>
565 <p>
566 <span id="eventpost_native_date_human" class="human_date">
567 <?php echo esc_html($human_date); ?>
568 </span>
569 <input type="text" class="eventpost-datepicker-native" id="eventpost_native_date" value="<?php echo esc_attr($now); ?>">
570 </p>
571 </div>
572 <?php
573 }
574
575 /**
576 * Output content of the setting page
577 */
578 public function manage_settings() {
579 $ep_settings = EventPost()->settings;
580 ?>
581 <div class="wrap">
582 <h2><?php esc_html_e('Events settings', 'event-post'); ?></h2>
583 <form action="options.php" method="post">
584 <?php settings_fields( 'eventpost-settings' ); ?>
585 <?php do_settings_sections('eventpost-settings'); ?>
586 <?php do_action('eventpost_settings_form', $ep_settings); ?>
587 <?php submit_button(); ?>
588 </form>
589 </div>
590 <?php
591 do_action('eventpost_after_settings_form');
592 }
593 }
594