PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 3.3.0
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v3.3.0
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
371 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 // Pro will handle g_loading_animation settings and other
297 $settings = apply_filters( 'ep_spotify_settings_before_save', $settings);
298 update_option( $option_name, $settings);
299 do_action( 'ep_spotify_settings_after_save', $settings);
300 return $settings;
301 }
302
303 public function save_custom_logo_settings() {
304 do_action( 'before_embedpress_branding_save');
305 $settings = (array) get_option( EMBEDPRESS_PLG_NAME, []);
306 $settings['embedpress_document_powered_by'] = isset( $_POST['embedpress_document_powered_by']) ? sanitize_text_field( $_POST['embedpress_document_powered_by']) : 'no';
307 update_option( EMBEDPRESS_PLG_NAME, $settings);
308 do_action( 'after_embedpress_branding_save');
309
310 }
311
312 public function save_dailymotion_settings() {
313 $option_name = EMBEDPRESS_PLG_NAME.':dailymotion';
314 $settings = get_option( $option_name, []);
315 $settings['start_time'] = isset( $_POST['start_time']) ? sanitize_text_field( $_POST['start_time']) : 0;
316 $settings['visual'] = isset( $_POST['visual']) ? sanitize_text_field( $_POST['visual']) : '';
317 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
318 $settings['play_on_mobile'] = isset( $_POST['play_on_mobile']) ? sanitize_text_field( $_POST['play_on_mobile']) : '';
319 $settings['color'] = isset( $_POST['color']) ? sanitize_text_field( $_POST['color']) : '#dd3333';
320 $settings['controls'] = isset( $_POST['controls']) ? sanitize_text_field( $_POST['controls']) : '';
321 $settings['video_info'] = isset( $_POST['video_info']) ? sanitize_text_field( $_POST['video_info']) : '';
322 $settings['mute'] = isset( $_POST['mute']) ? sanitize_text_field( $_POST['mute']) : '';
323 // Pro will handle g_loading_animation settings and other
324 $settings = apply_filters( 'ep_dailymotion_settings_before_save', $settings);
325 update_option( $option_name, $settings);
326 do_action( 'ep_dailymotion_settings_after_save', $settings);
327 }
328
329 public function save_soundcloud_settings() {
330 $option_name = EMBEDPRESS_PLG_NAME.':soundcloud';
331 $settings = get_option( $option_name, []);
332 $settings['visual'] = isset( $_POST['visual']) ? sanitize_text_field( $_POST['visual']) : '';
333 $settings['autoplay'] = isset( $_POST['autoplay']) ? sanitize_text_field( $_POST['autoplay']) : '';
334 $settings['play_on_mobile'] = isset( $_POST['play_on_mobile']) ? sanitize_text_field( $_POST['play_on_mobile']) : '';
335 $settings['share_button'] = isset( $_POST['share_button']) ? sanitize_text_field( $_POST['share_button']) : '';
336 $settings['comments'] = isset( $_POST['comments']) ? sanitize_text_field( $_POST['comments']) : '';
337 $settings['color'] = isset( $_POST['color']) ? sanitize_text_field( $_POST['color']) : '';
338 $settings['artwork'] = isset( $_POST['artwork']) ? sanitize_text_field( $_POST['artwork']) : '';
339 $settings['play_count'] = isset( $_POST['play_count']) ? sanitize_text_field( $_POST['play_count']) : '';
340 $settings['username'] = isset( $_POST['username']) ? sanitize_text_field( $_POST['username']) : '';
341
342 $settings['license_key'] = 1; // backward compatibility
343 // Pro will handle g_loading_animation settings and other
344 $settings = apply_filters( 'ep_soundcloud_settings_before_save', $settings);
345 update_option( $option_name, $settings);
346 do_action( 'ep_soundcloud_settings_after_save', $settings);
347 }
348
349 public function save_gcalendar_settings() {
350 $client_secret = !empty( $_POST['epgc_client_secret']) ? json_decode( wp_unslash( trim( $_POST['epgc_client_secret'])), true) : [];
351 $epgc_cache_time = !empty( $_POST['epgc_cache_time'] ) ? absint( $_POST['epgc_cache_time']) : 0;
352 $epgc_selected_calendar_ids = !empty( $_POST['epgc_selected_calendar_ids'] ) ? array_map( 'sanitize_text_field', $_POST['epgc_selected_calendar_ids']) : [];
353
354
355 $pretty_client_secret = '';
356 if ( !empty( $client_secret) ) {
357 $pretty_client_secret = $this->get_pretty_json_string( $client_secret);
358 }
359
360 update_option( 'epgc_client_secret', $pretty_client_secret);
361 update_option( 'epgc_cache_time', $epgc_cache_time);
362 update_option( 'epgc_selected_calendar_ids', $epgc_selected_calendar_ids);
363
364 }
365
366
367 function get_pretty_json_string($array) {
368 return str_replace(" ", " ", json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
369 }
370 }
371