PluginProbe
Bogo / 2.9
Bogo v2.9
3.9.3 trunk 1.0 1.1 2.0 2.0.1 2.1 2.1.1 2.1.2 2.1.3 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6 2.6.1 2.7 2.8 2.8.1 2.9 3.0 3.0.1 All 52 releases
bogo / admin / admin.php

admin.php in Bogo 2.9, at admin/admin.php

490 lines 14.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 require_once BOGO_PLUGIN_DIR . '/admin/includes/user.php';
4 require_once BOGO_PLUGIN_DIR . '/admin/includes/post.php';
5 require_once BOGO_PLUGIN_DIR . '/admin/includes/nav-menu.php';
6 require_once BOGO_PLUGIN_DIR . '/admin/includes/widgets.php';
7
8 add_action( 'admin_init', 'bogo_upgrade' );
9
10 function bogo_upgrade() {
11 $old_ver = bogo_get_prop( 'version' );
12 $new_ver = BOGO_VERSION;
13
14 if ( $old_ver != $new_ver ) {
15 require_once BOGO_PLUGIN_DIR . '/admin/includes/upgrade.php';
16 do_action( 'bogo_upgrade', $new_ver, $old_ver );
17 bogo_set_prop( 'version', $new_ver );
18 }
19 }
20
21 add_action( 'admin_enqueue_scripts', 'bogo_admin_enqueue_scripts' );
22
23 function bogo_admin_enqueue_scripts( $hook_suffix ) {
24 wp_enqueue_style( 'bogo-admin',
25 plugins_url( 'admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME ),
26 array(), BOGO_VERSION, 'all' );
27
28 if ( is_rtl() ) {
29 wp_enqueue_style( 'bogo-admin-rtl',
30 plugins_url( 'admin/includes/css/admin-rtl.css', BOGO_PLUGIN_BASENAME ),
31 array(), BOGO_VERSION, 'all' );
32 }
33
34 wp_enqueue_script( 'bogo-admin',
35 plugins_url( 'admin/includes/js/admin.js', BOGO_PLUGIN_BASENAME ),
36 array( 'jquery' ), BOGO_VERSION, true );
37
38 $local_args = array(
39 'saveAlert' => __(
40 "The changes you made will be lost if you navigate away from this page.",
41 'bogo' ),
42 'rest_api' => array(
43 'url' => trailingslashit( rest_url( 'bogo/v1' ) ),
44 'nonce' => wp_create_nonce( 'wp_rest' ) ) );
45
46 if ( 'nav-menus.php' == $hook_suffix ) {
47 $nav_menu_id = absint( get_user_option( 'nav_menu_recently_edited' ) );
48 $nav_menu_items = wp_get_nav_menu_items( $nav_menu_id );
49 $locales = array();
50
51 foreach ( (array) $nav_menu_items as $item ) {
52 $locales[$item->db_id] = $item->bogo_locales;
53 }
54
55 $local_args = array_merge( $local_args, array(
56 'availableLanguages' => bogo_available_languages( array(
57 'exclude_enus_if_inactive' => true,
58 'orderby' => 'value' ) ),
59 'locales' => $locales,
60 'selectorLegend' => __( 'Displayed on pages in', 'bogo' ),
61 'cbPrefix' => 'menu-item-bogo-locale' ) );
62 }
63
64 if ( 'options-general.php' == $hook_suffix ) {
65 $local_args = array_merge( $local_args, array(
66 'defaultLocale' => bogo_get_default_locale() ) );
67 }
68
69 if ( 'post.php' == $hook_suffix && ! empty( $GLOBALS['post'] ) ) {
70 $post = $GLOBALS['post'];
71 $local_args = array_merge( $local_args, array(
72 'post_id' => $post->ID ) );
73 }
74
75 wp_localize_script( 'bogo-admin', '_bogo', $local_args );
76 }
77
78 add_action( 'admin_menu', 'bogo_admin_menu' );
79
80 function bogo_admin_menu() {
81 add_menu_page( __( 'Languages', 'bogo' ), __( 'Languages', 'bogo' ),
82 'bogo_manage_language_packs', 'bogo', 'bogo_tools_page',
83 'dashicons-translation', 73 ); // between Users (70) and Tools (75)
84
85 $tools = add_submenu_page( 'bogo',
86 __( 'Installed Languages', 'bogo' ),
87 __( 'Installed Languages', 'bogo' ),
88 'bogo_manage_language_packs', 'bogo', 'bogo_tools_page' );
89
90 add_action( 'load-' . $tools, 'bogo_load_tools_page' );
91
92 $texts = add_submenu_page( 'bogo',
93 __( 'Translatable Text Strings', 'bogo' ),
94 __( 'Text Translation', 'bogo' ),
95 'bogo_edit_text_translation', 'bogo-texts', 'bogo_texts_page' );
96
97 add_action( 'load-' . $texts, 'bogo_load_texts_page' );
98 }
99
100 function bogo_load_tools_page() {
101 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
102
103 $action = isset( $_GET['action'] ) ? $_GET['action'] : '';
104
105 if ( 'install_translation' == $action ) {
106 check_admin_referer( 'bogo-tools' );
107
108 if ( ! current_user_can( 'bogo_manage_language_packs' ) ) {
109 wp_die( __( "You are not allowed to install translations.", 'bogo' ) );
110 }
111
112 $locale = isset( $_GET['locale'] ) ? $_GET['locale'] : null;
113
114 if ( wp_download_language_pack( $locale ) ) {
115 $redirect_to = add_query_arg(
116 array( 'locale' => $locale, 'message' => 'install_success' ),
117 menu_page_url( 'bogo', false ) );
118 } else {
119 $redirect_to = add_query_arg(
120 array( 'locale' => $locale, 'message' => 'install_failed' ),
121 menu_page_url( 'bogo', false ) );
122 }
123
124 wp_safe_redirect( $redirect_to );
125 exit();
126 }
127
128 if ( 'delete_translation' == $action ) {
129 check_admin_referer( 'bogo-tools' );
130
131 if ( ! current_user_can( 'bogo_manage_language_packs' ) ) {
132 wp_die( __( "You are not allowed to delete translations.", 'bogo' ) );
133 }
134
135 $locale = isset( $_GET['locale'] ) ? $_GET['locale'] : null;
136
137 if ( bogo_delete_language_pack( $locale ) ) {
138 $redirect_to = add_query_arg(
139 array( 'locale' => $locale, 'message' => 'delete_success' ),
140 menu_page_url( 'bogo', false ) );
141 } else {
142 $redirect_to = add_query_arg(
143 array( 'locale' => $locale, 'message' => 'delete_failed' ),
144 menu_page_url( 'bogo', false ) );
145 }
146
147 wp_safe_redirect( $redirect_to );
148 exit();
149 }
150
151 if ( 'deactivate_enus' == $action ) {
152 check_admin_referer( 'bogo-tools' );
153
154 bogo_set_prop( 'enus_deactivated', true );
155
156 $redirect_to = add_query_arg(
157 array( 'message' => 'enus_deactivated' ),
158 menu_page_url( 'bogo', false ) );
159
160 wp_safe_redirect( $redirect_to );
161 exit();
162 }
163
164 if ( 'activate_enus' == $action ) {
165 check_admin_referer( 'bogo-tools' );
166
167 bogo_set_prop( 'enus_deactivated', false );
168
169 $redirect_to = add_query_arg(
170 array( 'message' => 'enus_activated' ),
171 menu_page_url( 'bogo', false ) );
172
173 wp_safe_redirect( $redirect_to );
174 exit();
175 }
176 }
177
178 function bogo_load_texts_page() {
179 $action = isset( $_POST['action'] ) ? $_POST['action'] : '';
180
181 if ( 'save' == $action ) {
182 check_admin_referer( 'bogo-edit-text-translation' );
183
184 if ( ! current_user_can( 'bogo_edit_text_translation' ) ) {
185 wp_die( __( "You are not allowed to edit translations.", 'bogo' ) );
186 }
187
188 $locale = isset( $_POST['locale'] ) ? $_POST['locale'] : null;
189
190 $blogname =
191 isset( $_POST['blogname'] ) ? $_POST['blogname'] : '';
192 $blogdescription =
193 isset( $_POST['blogdescription'] ) ? $_POST['blogdescription'] : '';
194
195 $entries = array(
196 array(
197 'singular' => 'blogname',
198 'translations' => array( $blogname ),
199 'context' => 'blogname' ),
200 array(
201 'singular' => 'blogdescription',
202 'translations' => array( $blogdescription ),
203 'context' => 'blogdescription' ) );
204
205 if ( Bogo_POMO::export( $locale, $entries ) ) {
206 $message = 'translation_saved';
207 } else {
208 $message = 'translation_failed';
209 }
210
211 $redirect_to = add_query_arg(
212 array( 'locale' => $locale, 'message' => $message ),
213 menu_page_url( 'bogo-texts', false ) );
214
215 wp_safe_redirect( $redirect_to );
216 exit();
217 }
218 }
219
220 function bogo_tools_page() {
221 $enus_deactivated = bogo_get_prop( 'enus_deactivated' );
222 $can_install = wp_can_install_language_pack();
223
224 $default_locale = bogo_get_default_locale();
225 $available_locales = bogo_available_locales();
226
227 ?>
228 <div class="wrap">
229
230 <h1><?php echo esc_html( __( 'Available Languages', 'bogo' ) ); ?></h1>
231
232 <?php bogo_admin_notice(); ?>
233
234 <table id="bogo-languages-table" class="widefat">
235 <thead>
236 <tr><th></th><th><?php echo esc_html( __( 'Language', 'bogo' ) ); ?></th></tr>
237 </thead>
238 <tfoot>
239 <tr><th></th><th><?php echo esc_html( __( 'Language', 'bogo' ) ); ?></th></tr>
240 </tfoot>
241 <tbody id="translations">
242 <tr class="active"><th>1</th><td>
243 <strong><?php echo esc_html( bogo_get_language( $default_locale ) ); ?></strong>
244 [<?php echo esc_html( $default_locale ); ?>]
245 <div class="status"><span class="status"><?php echo esc_html( __( 'Site Default Language', 'bogo' ) ); ?></span></div>
246 </td></tr>
247
248 <?php
249 $count = 1;
250
251 foreach ( $available_locales as $locale ) {
252 if ( $locale == $default_locale ) {
253 continue;
254 }
255
256 $count += 1;
257 $class = 'active';
258
259 if ( 'en_US' == $locale ) {
260 $status = $enus_deactivated
261 ? esc_html( __( 'Inactive', 'bogo' ) )
262 : esc_html( __( 'Active', 'bogo' ) );
263 } else {
264 $status = esc_html( __( 'Installed', 'bogo' ) );
265 }
266
267 if ( 'en_US' == $locale ) {
268 if ( $enus_deactivated ) {
269 $activate_link = menu_page_url( 'bogo', false );
270 $activate_link = add_query_arg(
271 array( 'action' => 'activate_enus' ),
272 $activate_link );
273 $activate_link = wp_nonce_url( $activate_link, 'bogo-tools' );
274 $activate_link = sprintf(
275 '<a href="%1$s" class="activate">%2$s</a>',
276 $activate_link,
277 esc_html( __( 'Activate', 'bogo' ) ) );
278
279 $status = sprintf(
280 '<div class="status"><span class="status">%s</span> | %s</div>',
281 $status, $activate_link );
282 $class = '';
283 } else {
284 $deactivate_link = menu_page_url( 'bogo', false );
285 $deactivate_link = add_query_arg(
286 array( 'action' => 'deactivate_enus' ),
287 $deactivate_link );
288 $deactivate_link = wp_nonce_url( $deactivate_link, 'bogo-tools' );
289 $deactivate_link = sprintf(
290 '<a href="%1$s" class="deactivate">%2$s</a>',
291 $deactivate_link,
292 esc_html( __( 'Deactivate', 'bogo' ) ) );
293
294 $status = sprintf(
295 '<div class="status"><span class="status">%s</span> | %s</div>',
296 $status, $deactivate_link );
297 }
298 } elseif ( $can_install ) {
299 $delete_link = menu_page_url( 'bogo', false );
300 $delete_link = add_query_arg(
301 array( 'action' => 'delete_translation', 'locale' => $locale ),
302 $delete_link );
303 $delete_link = wp_nonce_url( $delete_link, 'bogo-tools' );
304
305 if ( ! $delete_language = bogo_get_language( $locale ) ) {
306 $delete_language = $locale;
307 }
308
309 $delete_confirm = sprintf( __( "You are about to delete %s language pack.\n 'Cancel' to stop, 'OK' to delete.", 'bogo' ), $delete_language );
310
311 $delete_link = sprintf( '<a href="%1$s" class="delete" onclick="if (confirm(\'%3$s\')){return true;} return false;">%2$s</a>',
312 $delete_link,
313 esc_html( __( 'Delete', 'bogo' ) ),
314 esc_js( $delete_confirm ) );
315
316 $status = sprintf(
317 '<div class="status"><span class="status">%s</span> | %s</div>',
318 $status, $delete_link );
319 }
320 ?>
321 <tr class="<?php echo esc_attr( $class ); ?>">
322 <th><?php echo $count; ?></th>
323 <td>
324 <strong><?php echo esc_html( bogo_get_language( $locale ) ); ?></strong>
325 [<?php echo esc_html( $locale ); ?>]
326 <?php echo $status; ?>
327 </td>
328 </tr>
329 <?php
330 }
331
332 foreach ( wp_get_available_translations() as $locale => $translation ) {
333 if ( in_array( $locale, $available_locales ) ) {
334 continue;
335 }
336
337 $count += 1;
338
339 $install_link = '';
340
341 if ( $can_install ) {
342 $install_link = menu_page_url( 'bogo', false );
343 $install_link = add_query_arg(
344 array( 'action' => 'install_translation', 'locale' => $locale ),
345 $install_link );
346 $install_link = wp_nonce_url( $install_link, 'bogo-tools' );
347 $install_link = sprintf( '<a href="%1$s" class="install">%2$s</a>',
348 $install_link, esc_html( __( 'Install', 'bogo' ) ) );
349 }
350 ?>
351 <tr><th><?php echo $count; ?></th><td>
352 <strong><?php echo esc_html( bogo_get_language( $locale ) ); ?></strong>
353 [<?php echo esc_html( $locale ); ?>]
354 <?php echo $install_link; ?>
355 </td></tr>
356 <?php
357 }
358 ?>
359
360 </tbody>
361 </table>
362
363 </div>
364 <?php
365 }
366
367 function bogo_texts_page() {
368 $locale_to_edit = isset( $_GET['locale'] ) ? $_GET['locale'] : '';
369 Bogo_POMO::import( $locale_to_edit );
370
371 ?>
372 <div class="wrap">
373
374 <h1><?php echo esc_html( __( 'Translatable Text Strings', 'bogo' ) ); ?></h1>
375
376 <?php bogo_admin_notice(); ?>
377
378 <form action="" method="post" id="bogo-translatable-text-strings">
379 <input type="hidden" name="action" value="save" />
380 <?php wp_nonce_field( 'bogo-edit-text-translation' ); ?>
381
382 <p>
383 <select name="locale" id="select-locale">
384 <option value=""><?php echo esc_html( __( '-- Select Language to Edit --', 'bogo' ) ); ?></option>
385 <?php
386 foreach ( bogo_available_locales() as $locale ) {
387 echo sprintf( '<option value="%1$s"%3$s>%2$s</option>',
388 esc_attr( $locale ),
389 esc_html( bogo_get_language( $locale ) ),
390 $locale == $locale_to_edit ? ' selected="selected"' : '' );
391 }
392 ?>
393 </select>
394 </p>
395
396 <?php if ( bogo_is_available_locale( $locale_to_edit ) ) : ?>
397 <table class="form-table">
398 <tbody>
399 <tr>
400 <th scope="row"><label for="blogname"><?php echo esc_html( __( 'Site Title' ) ); ?></label></th>
401 <td><input name="blogname" type="text" id="blogname" value="<?php echo esc_attr( bogo_translate( 'blogname', 'blogname', get_option( 'blogname' ) ) ); ?>" class="regular-text" /></td>
402 </tr>
403 <tr>
404 <th scope="row"><label for="blogdescription"><?php echo esc_html( __( 'Tagline' ) ); ?></label></th>
405 <td><input name="blogdescription" type="text" id="blogdescription" value="<?php echo esc_attr( bogo_translate( 'blogdescription', 'blogdescription', get_option( 'blogdescription' ) ) ); ?>" class="regular-text" /></td>
406 </tr>
407 </tbody>
408 </table>
409
410 <?php submit_button(); ?>
411 <?php endif; ?>
412 </form>
413 </div>
414 <?php
415 }
416
417 function bogo_admin_notice( $reason = '' ) {
418 if ( empty( $reason ) && isset( $_GET['message'] ) ) {
419 $reason = $_GET['message'];
420 }
421
422 if ( 'install_success' == $reason ) {
423 $message = __( "Translation installed successfully.", 'bogo' );
424 } elseif ( 'install_failed' == $reason ) {
425 $message = __( "Translation install failed.", 'bogo' );
426 } elseif ( 'delete_success' == $reason ) {
427 $message = __( "Translation uninstalled successfully.", 'bogo' );
428 } elseif ( 'delete_failed' == $reason ) {
429 $message = __( "Translation uninstall failed.", 'bogo' );
430 } elseif ( 'enus_deactivated' == $reason ) {
431 $message = __( "English (United States) deactivated.", 'bogo' );
432 } elseif ( 'enus_activated' == $reason ) {
433 $message = __( "English (United States) activated.", 'bogo' );
434 } elseif ( 'translation_saved' == $reason ) {
435 $message = __( "Translation saved.", 'bogo' );
436 } elseif ( 'translation_failed' == $reason ) {
437 $message = __( "Saving translation failed.", 'bogo' );
438 } else {
439 return false;
440 }
441
442 if ( '_failed' == substr( $reason, -7 ) ) {
443 echo sprintf(
444 '<div class="error notice notice-error is-dismissible"><p>%s</p></div>',
445 esc_html( $message ) );
446 } else {
447 echo sprintf(
448 '<div class="updated notice notice-success is-dismissible"><p>%s</p></div>',
449 esc_html( $message ) );
450 }
451 }
452
453 function bogo_delete_language_pack( $locale ) {
454 if ( 'en_US' == $locale
455 || ! bogo_is_available_locale( $locale )
456 || bogo_is_default_locale( $locale ) ) {
457 return false;
458 }
459
460 if ( ! is_dir( WP_LANG_DIR ) || ! $files = scandir( WP_LANG_DIR ) ) {
461 return false;
462 }
463
464 $target_files = array(
465 sprintf( '%s.mo', $locale ),
466 sprintf( '%s.po', $locale ),
467 sprintf( 'admin-%s.mo', $locale ),
468 sprintf( 'admin-%s.po', $locale ),
469 sprintf( 'admin-network-%s.mo', $locale ),
470 sprintf( 'admin-network-%s.po', $locale ),
471 sprintf( 'continents-cities-%s.mo', $locale ),
472 sprintf( 'continents-cities-%s.po', $locale ) );
473
474 foreach ( $files as $file ) {
475 if ( '.' === $file[0] || is_dir( $file ) ) {
476 continue;
477 }
478
479 if ( in_array( $file, $target_files ) ) {
480 $result = @unlink( path_join( WP_LANG_DIR, $file ) );
481
482 if ( ! $result ) {
483 return false;
484 }
485 }
486 }
487
488 return true;
489 }
490