PluginProbe
Event Post / 5.5
Event Post v5.5
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 / settings.php

settings.php in Event Post 5.5, at inc/settings.php

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