PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 3.3.3
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v3.3.3
4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.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.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / EmbedPress / Ends / Back / Settings / EmbedpressSettings.php
embedpress / EmbedPress / Ends / Back / Settings Last commit date
assets 4 years ago templates 4 years ago EmbedpressSettings.php 4 years ago
EmbedpressSettings.php
370 lines
1 <?php
2 namespace EmbedPress\Ends\Back\Settings;
3
4 class EmbedpressSettings {
5 var $page_slug = '';
6 /**
7 * @var int|string
8 */
9 protected $file_version;
10
11 public function __construct($page_slug = 'embedpress') {
12 $this->page_slug = $page_slug;
13 $this->file_version = defined( 'WP_DEBUG') && WP_DEBUG ? time() : EMBEDPRESS_VERSION;
14 add_action('admin_enqueue_scripts', [$this, 'handle_scripts_and_styles']);
15 add_action('admin_menu', [$this, 'register_menu']);
16 add_action( 'init', [$this, 'save_settings']);
17
18 // ajax
19 add_action( 'wp_ajax_embedpress_elements_action', [$this, 'update_elements_list']);
20 add_action( 'wp_ajax_embedpress_settings_action', [$this, 'save_settings']);
21
22 // Migration
23 $option = 'embedpress_elements_updated'; // to update initially for backward compatibility
24 if ( !get_option( $option, false) ) {
25 $elements_initial_states = [
26 'gutenberg' => [
27 'google-docs-block' => 'google-docs-block',
28 'document' => 'document',
29 'embedpress' => 'embedpress',
30 'embedpress-pdf' => 'embedpress-pdf',
31 'google-sheets-block' => 'google-sheets-block',
32 'google-slides-block' => 'google-slides-block',
33 'youtube-block' => 'youtube-block',
34 'google-forms-block' => 'google-forms-block',
35 'google-drawings-block' => 'google-drawings-block',
36 'google-maps-block' => 'google-maps-block',
37 'twitch-block' => 'twitch-block',
38 'wistia-block' => 'wistia-block',
39 'vimeo-block' => 'vimeo-block',
40 ],
41 'elementor' => [
42 'embedpress-document' => 'embedpress-document',
43 'embedpress' => 'embedpress',
44 'embedpress-pdf' => 'embedpress-pdf',
45 ]
46 ];
47
48 $settings = get_option( EMBEDPRESS_PLG_NAME, [] );
49 $yt = get_option( EMBEDPRESS_PLG_NAME.':youtube' );
50 if ( empty( $settings) && empty( $yt) ) {
51 $settings['need_first_time_redirect'] = true;
52 }
53 if ( !isset( $settings['enablePluginInAdmin']) ) {
54 $settings['enablePluginInAdmin'] = 1;
55 }
56 if ( !isset( $settings['enablePluginInFront']) ) {
57 $settings['enablePluginInFront'] = 1;
58 }
59
60 update_option( EMBEDPRESS_PLG_NAME.":elements", $elements_initial_states);
61 update_option( EMBEDPRESS_PLG_NAME, $settings);
62 update_option( $option, true);
63 }
64 $migration_v_320 = 'embedpress_v_320_migration';
65 if ( !get_option( $migration_v_320, false) ) {
66 $elements = (array) get_option( EMBEDPRESS_PLG_NAME.":elements", []);
67 $elements['gutenberg']['embedpress-pdf'] = 'embedpress-pdf';
68 $elements['elementor']['embedpress-pdf'] = 'embedpress-pdf';
69 update_option( EMBEDPRESS_PLG_NAME.":elements", $elements);
70 update_option( $migration_v_320, true);
71 }
72
73 $migration_v_330 = 'embedpress_v_330_migration';
74 if ( !get_option( $migration_v_330, false) ) {
75 $elements = (array) get_option( EMBEDPRESS_PLG_NAME.":elements", []);
76 $elements['gutenberg']['embedpress-calendar'] = 'embedpress-calendar';
77 $elements['elementor']['embedpress-calendar'] = 'embedpress-calendar';
78 update_option( EMBEDPRESS_PLG_NAME.":elements", $elements);
79 update_option( $migration_v_330, true);
80 }
81
82 add_action( 'admin_init', [$this, 'embedpress_maybe_redirect_to_settings'] );
83
84
85 }
86 function embedpress_maybe_redirect_to_settings() {
87 $settings = get_option( EMBEDPRESS_PLG_NAME, [] );
88 if ( isset( $settings['need_first_time_redirect']) && $settings['need_first_time_redirect'] ) {
89 if ( get_option( 'embedpress_activation_redirect_done' ) || wp_doing_ajax() ) {
90 return;
91 }
92
93
94 update_option( 'embedpress_activation_redirect_done', true );
95 $settings['need_first_time_redirect'] = false;
96 update_option( EMBEDPRESS_PLG_NAME, $settings);
97
98 if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
99 return;
100 }
101
102 wp_safe_redirect( admin_url('admin.php?page='.$this->page_slug) );
103 exit;
104 }
105
106 }
107 public function update_elements_list() {
108 if ( !empty($_POST['_wpnonce'] && wp_verify_nonce( $_POST['_wpnonce'], 'embedpress_elements_action')) ) {
109 $option = EMBEDPRESS_PLG_NAME.":elements";
110 $elements = (array) get_option( $option, []);
111 $settings = (array) get_option( EMBEDPRESS_PLG_NAME, []);
112
113 $type = !empty( $_POST['element_type']) ? sanitize_text_field( $_POST['element_type']) : '';
114 $name = !empty( $_POST['element_name']) ? sanitize_text_field( $_POST['element_name']) : '';
115 $checked = !empty( $_POST['checked']) ? $_POST['checked'] : false;
116 if ( 'false' != $checked ) {
117 $elements[$type][$name] = $name;
118 if ( $type === 'classic' ) {
119 $settings[$name] = 1;
120 }
121 }else{
122 if( isset( $elements[$type]) && isset( $elements[$type][$name])){
123 unset( $elements[$type][$name]);
124 }
125 if ( $type === 'classic' ) {
126 $settings[$name] = 0;
127 }
128 }
129 update_option( EMBEDPRESS_PLG_NAME, $settings);
130 update_option( $option, $elements);
131 wp_send_json_success();
132 }
133 wp_send_json_error();
134 }
135
136 public function register_menu() {
137 add_menu_page( __('EmbedPress Settings', 'embedpress'), 'EmbedPress', 'manage_options', $this->page_slug,
138 [ $this, 'render_settings_page' ], EMBEDPRESS_URL_ASSETS.'images/menu-icon.svg', 64 );
139
140 }
141
142 public function handle_scripts_and_styles() {
143 if ( !empty( $_REQUEST['page']) && $this->page_slug === $_REQUEST['page'] ) {
144 $this->enqueue_styles();
145 $this->enqueue_scripts();
146 }
147 }
148
149 public function enqueue_scripts() {
150 if ( !did_action( 'wp_enqueue_media') ) {
151 wp_enqueue_media();
152 }
153 wp_register_script( 'ep-settings-script', EMBEDPRESS_SETTINGS_ASSETS_URL.'js/settings.js', ['jquery', 'wp-color-picker' ], $this->file_version, true );
154 wp_enqueue_script( 'ep-settings', EMBEDPRESS_URL_ASSETS . 'js/settings.js', ['jquery', 'wp-color-picker' ], $this->file_version, true );
155 wp_localize_script( 'ep-settings-script', 'embedpressObj', array(
156 'nonce' => wp_create_nonce('embedpress_elements_action'),
157 ) );
158
159 wp_enqueue_script( 'ep-settings-script');
160 }
161
162 public function enqueue_styles() {
163 wp_enqueue_style( 'ep-settings-style', EMBEDPRESS_SETTINGS_ASSETS_URL.'css/style.css', null, $this->file_version );
164 wp_enqueue_style( 'ep-settings-icon-style', EMBEDPRESS_SETTINGS_ASSETS_URL.'css/icon/style.css', null, $this->file_version );
165 wp_enqueue_style( 'wp-color-picker' );
166
167 }
168
169 public function render_settings_page( ) {
170 global $template, $page_slug, $nonce_field, $ep_page, $gen_menu_template_names, $brand_menu_template_names, $pro_active, $coming_soon, $success_message, $error_message, $platform_menu_template_names;
171
172 $page_slug = $this->page_slug; // make this available for included template
173 $template = !empty( $_GET['page_type'] ) ? sanitize_text_field( $_GET['page_type']) : 'general';
174 $nonce_field = wp_nonce_field('ep_settings_nonce', 'ep_settings_nonce', true, false);
175 $ep_page = admin_url('admin.php?page='.$this->page_slug);
176 $gen_menu_template_names = apply_filters('ep_general_menu_tmpl_names', ['general', 'shortcode',]);
177 $platform_menu_template_names = apply_filters('ep_platform_menu_tmpl_names', [ 'youtube', 'vimeo', 'wistia', 'twitch','dailymotion', 'soundcloud' ,'spotify','google-calendar']);
178 $brand_menu_template_names = apply_filters('ep_brand_menu_templates', ['custom-logo', 'branding',]);
179 $pro_active = is_embedpress_pro_active();
180 $coming_soon = "<span class='ep-coming-soon'>". esc_html__( '(Coming soon)', 'embedpress'). "</span>";
181 $success_message = esc_html__( "Settings Updated", "embedpress" );
182 $error_message = esc_html__( "Ops! Something went wrong.", "embedpress" );
183 include_once EMBEDPRESS_SETTINGS_PATH . 'templates/main-template.php';
184 }
185
186 public function save_settings() {
187 // needs to check for ajax and return response accordingly.
188 if ( !empty( $_POST['ep_settings_nonce']) && wp_verify_nonce( $_POST['ep_settings_nonce'], 'ep_settings_nonce') ) {
189 $submit_type = !empty( $_POST['submit'] ) ? $_POST['submit'] : '';
190 $save_handler_method = "save_{$submit_type}_settings";
191 do_action( "before_{$save_handler_method}");
192 do_action( "before_embedpress_settings_save");
193 if ( method_exists( $this, $save_handler_method ) ) {
194 $this->$save_handler_method();
195 }
196 do_action( "after_embedpress_settings_save");
197 $return_url = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : admin_url();
198 $return_url = add_query_arg( 'success', 1, $return_url );
199 if ( wp_doing_ajax() ) {
200 wp_send_json_success();
201 }
202 wp_safe_redirect( $return_url);
203 exit();
204 }
205 }
206
207 public function save_general_settings() {
208 $settings = (array) get_option( EMBEDPRESS_PLG_NAME, []);
209 $settings ['enableEmbedResizeWidth'] = isset( $_POST['enableEmbedResizeWidth']) ? intval( $_POST['enableEmbedResizeWidth']) : 600;
210 $settings ['enableEmbedResizeHeight'] = isset( $_POST['enableEmbedResizeHeight']) ? intval( $_POST['enableEmbedResizeHeight']) : 550;
211
212 // Pro will handle g_loading_animation settings and other
213 $settings = apply_filters( 'ep_general_settings_before_save', $settings, $_POST);
214
215 update_option( EMBEDPRESS_PLG_NAME, $settings);
216 do_action( 'ep_general_settings_after_save', $settings, $_POST);
217 }
218
219 public function save_youtube_settings() {
220 $option_name = EMBEDPRESS_PLG_NAME.':youtube';
221 $settings = get_option( $option_name, []);
222 $settings['start_time'] = isset( $_POST['start_time']) ? sanitize_text_field( $_POST['start_time']) : 0;
223 $settings['end_time'] = isset( $_POST['end_time']) ? sanitize_text_field( $_POST['end_time']) : 0;
224 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
225 $settings['controls'] = isset( $_POST['controls']) ? sanitize_text_field( $_POST['controls']) : '';
226 $settings['fs'] = isset( $_POST['fs']) ? sanitize_text_field( $_POST['fs']) : '';
227 $settings['iv_load_policy'] = isset( $_POST['iv_load_policy']) ? sanitize_text_field( $_POST['iv_load_policy']) : 1;
228 $settings['color'] = isset( $_POST['color']) ? sanitize_text_field( $_POST['color']) : 'red';
229 $settings['rel'] = isset( $_POST['rel']) ? sanitize_text_field( $_POST['rel']) : 1;
230 $settings['license_key'] = 1; // backward compatibility
231
232 // Pro will handle g_loading_animation settings and other
233 $settings = apply_filters( 'ep_youtube_settings_before_save', $settings);
234 update_option( $option_name, $settings);
235 do_action( 'ep_youtube_settings_after_save', $settings);
236
237 }
238
239 public function save_wistia_settings() {
240 $option_name = EMBEDPRESS_PLG_NAME.':wistia';
241 $settings = get_option( $option_name, []);
242 $settings['start_time'] = isset( $_POST['start_time']) ? sanitize_text_field( $_POST['start_time']) : 0;
243 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
244 $settings['display_fullscreen_button'] = isset( $_POST['display_fullscreen_button']) ? sanitize_text_field( $_POST['display_fullscreen_button']) : '';
245 $settings['small_play_button'] = isset( $_POST['small_play_button']) ? sanitize_text_field( $_POST['small_play_button']) : '';
246 $settings['player_color'] = isset( $_POST['player_color']) ? sanitize_text_field( $_POST['player_color']) : '';
247 $settings['plugin_resumable'] = isset( $_POST['plugin_resumable']) ? sanitize_text_field( $_POST['plugin_resumable']) : '';
248 $settings['plugin_focus'] = isset( $_POST['plugin_focus']) ? sanitize_text_field( $_POST['plugin_focus']) : '';
249 $settings['plugin_rewind'] = isset( $_POST['plugin_rewind']) ? sanitize_text_field( $_POST['plugin_rewind']) : '';
250 $settings['display_playbar'] = isset( $_POST['display_playbar']) ? sanitize_text_field( $_POST['display_playbar']) : 1;
251 $settings['plugin_rewind_time'] = isset( $_POST['plugin_rewind_time']) ? sanitize_text_field( $_POST['plugin_rewind_time']) : 10;
252 $settings['license_key'] = 1; // backward compatibility
253 // Pro will handle g_loading_animation settings and other
254 $settings = apply_filters( 'ep_wistia_settings_before_save', $settings);
255 update_option( $option_name, $settings);
256 do_action( 'ep_wistia_settings_after_save', $settings);
257 }
258
259 public function save_vimeo_settings() {
260 $option_name = EMBEDPRESS_PLG_NAME.':vimeo';
261 $settings = get_option( $option_name, []);
262 $settings['start_time'] = isset( $_POST['start_time']) ? sanitize_text_field( $_POST['start_time']) : 0;
263 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
264 $settings['color'] = isset( $_POST['color']) ? sanitize_text_field( $_POST['color']) : '#00adef';
265 $settings['display_title'] = isset( $_POST['display_title']) ? sanitize_text_field( $_POST['display_title']) : 1;
266 $settings['display_author'] = isset( $_POST['display_author']) ? sanitize_text_field( $_POST['display_author']) : 1;
267 $settings['display_avatar'] = isset( $_POST['display_avatar']) ? sanitize_text_field( $_POST['display_avatar']) : 1;
268 $settings['license_key'] = 1; // backward compatibility
269 // Pro will handle g_loading_animation settings and other
270 $settings = apply_filters( 'ep_vimeo_settings_before_save', $settings);
271 update_option( $option_name, $settings);
272 do_action( 'ep_vimeo_settings_after_save', $settings);
273 }
274
275 public function save_twitch_settings() {
276 $option_name = EMBEDPRESS_PLG_NAME.':twitch';
277 $settings = get_option( $option_name, []);
278 $settings['embedpress_pro_twitch_autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : 'no';
279 $settings['embedpress_pro_fs'] = isset( $_POST['fs']) ? sanitize_text_field( $_POST['fs']) : 'yes';
280 $settings['start_time'] = isset( $_POST['start_time']) ? sanitize_text_field( $_POST['start_time']) : 0;
281 $settings['embedpress_pro_twitch_theme'] = isset( $_POST['theme']) ? sanitize_text_field( $_POST['theme']) : 'dark';
282 $settings['embedpress_pro_twitch_mute'] = isset( $_POST['mute']) ? sanitize_text_field( $_POST['mute']) : 'yes';
283 $settings['license_key'] = 1; // backward compatibility
284 // Pro will handle g_loading_animation settings and other
285 $settings = apply_filters( 'ep_twitch_settings_before_save', $settings);
286 update_option( $option_name, $settings);
287 do_action( 'ep_twitch_settings_after_save', $settings);
288 }
289
290 public function save_spotify_settings() {
291 $option_name = EMBEDPRESS_PLG_NAME.':spotify';
292 $settings = get_option( $option_name, []);
293 $settings['theme'] = isset( $_POST['spotify_theme']) ? sanitize_text_field( $_POST['spotify_theme']) : '1';
294 $settings['license_key'] = 1; // backward compatibility
295
296 $settings = apply_filters( 'ep_spotify_settings_before_save', $settings);
297 update_option( $option_name, $settings);
298 do_action( 'ep_spotify_settings_after_save', $settings);
299 return $settings;
300 }
301
302 public function save_custom_logo_settings() {
303 do_action( 'before_embedpress_branding_save');
304 $settings = (array) get_option( EMBEDPRESS_PLG_NAME, []);
305 $settings['embedpress_document_powered_by'] = isset( $_POST['embedpress_document_powered_by']) ? sanitize_text_field( $_POST['embedpress_document_powered_by']) : 'no';
306 update_option( EMBEDPRESS_PLG_NAME, $settings);
307 do_action( 'after_embedpress_branding_save');
308
309 }
310
311 public function save_dailymotion_settings() {
312 $option_name = EMBEDPRESS_PLG_NAME.':dailymotion';
313 $settings = get_option( $option_name, []);
314 $settings['start_time'] = isset( $_POST['start_time']) ? sanitize_text_field( $_POST['start_time']) : 0;
315 $settings['visual'] = isset( $_POST['visual']) ? sanitize_text_field( $_POST['visual']) : '';
316 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
317 $settings['play_on_mobile'] = isset( $_POST['play_on_mobile']) ? sanitize_text_field( $_POST['play_on_mobile']) : '';
318 $settings['color'] = isset( $_POST['color']) ? sanitize_text_field( $_POST['color']) : '#dd3333';
319 $settings['controls'] = isset( $_POST['controls']) ? sanitize_text_field( $_POST['controls']) : '';
320 $settings['video_info'] = isset( $_POST['video_info']) ? sanitize_text_field( $_POST['video_info']) : '';
321 $settings['mute'] = isset( $_POST['mute']) ? sanitize_text_field( $_POST['mute']) : '';
322 // Pro will handle g_loading_animation settings and other
323 $settings = apply_filters( 'ep_dailymotion_settings_before_save', $settings);
324 update_option( $option_name, $settings);
325 do_action( 'ep_dailymotion_settings_after_save', $settings);
326 }
327
328 public function save_soundcloud_settings() {
329 $option_name = EMBEDPRESS_PLG_NAME.':soundcloud';
330 $settings = get_option( $option_name, []);
331 $settings['visual'] = isset( $_POST['visual']) ? sanitize_text_field( $_POST['visual']) : '';
332 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
333 $settings['play_on_mobile'] = isset( $_POST['play_on_mobile']) ? sanitize_text_field( $_POST['play_on_mobile']) : '';
334 $settings['share_button'] = isset( $_POST['share_button']) ? sanitize_text_field( $_POST['share_button']) : '';
335 $settings['comments'] = isset( $_POST['comments']) ? sanitize_text_field( $_POST['comments']) : '';
336 $settings['color'] = isset( $_POST['color']) ? sanitize_text_field( $_POST['color']) : '';
337 $settings['artwork'] = isset( $_POST['artwork']) ? sanitize_text_field( $_POST['artwork']) : '';
338 $settings['play_count'] = isset( $_POST['play_count']) ? sanitize_text_field( $_POST['play_count']) : '';
339 $settings['username'] = isset( $_POST['username']) ? sanitize_text_field( $_POST['username']) : '';
340
341 $settings['license_key'] = 1; // backward compatibility
342 // Pro will handle g_loading_animation settings and other
343 $settings = apply_filters( 'ep_soundcloud_settings_before_save', $settings);
344 update_option( $option_name, $settings);
345 do_action( 'ep_soundcloud_settings_after_save', $settings);
346 }
347
348 public function save_gcalendar_settings() {
349 $client_secret = !empty( $_POST['epgc_client_secret']) ? json_decode( wp_unslash( trim( $_POST['epgc_client_secret'])), true) : [];
350 $epgc_cache_time = !empty( $_POST['epgc_cache_time'] ) ? absint( $_POST['epgc_cache_time']) : 0;
351 $epgc_selected_calendar_ids = !empty( $_POST['epgc_selected_calendar_ids'] ) ? array_map( 'sanitize_text_field', $_POST['epgc_selected_calendar_ids']) : [];
352
353
354 $pretty_client_secret = '';
355 if ( !empty( $client_secret) ) {
356 $pretty_client_secret = $this->get_pretty_json_string( $client_secret);
357 }
358
359 update_option( 'epgc_client_secret', $pretty_client_secret);
360 update_option( 'epgc_cache_time', $epgc_cache_time);
361 update_option( 'epgc_selected_calendar_ids', $epgc_selected_calendar_ids);
362
363 }
364
365
366 function get_pretty_json_string($array) {
367 return str_replace(" ", " ", json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
368 }
369 }
370