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
← All changes | admin/admin.php +166 -45 2.72.9 View file →
@@ -4,38 +4,45 @@
4 4 require_once BOGO_PLUGIN_DIR . '/admin/includes/post.php';
5 5 require_once BOGO_PLUGIN_DIR . '/admin/includes/nav-menu.php';
6 6 require_once BOGO_PLUGIN_DIR . '/admin/includes/widgets.php';
7 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 +
8 21 add_action( 'admin_enqueue_scripts', 'bogo_admin_enqueue_scripts' );
9 22
10 23 function bogo_admin_enqueue_scripts( $hook_suffix ) {
11 - $pages_need_style = array(
12 - 'tools_page_bogo-tools',
13 - 'widgets.php',
14 - 'user-edit.php',
15 - 'nav-menus.php' );
24 + wp_enqueue_style( 'bogo-admin',
25 + plugins_url( 'admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME ),
26 + array(), BOGO_VERSION, 'all' );
16 27
17 - if ( in_array( $hook_suffix, $pages_need_style ) ) {
18 - wp_enqueue_style( 'bogo-admin',
19 - plugins_url( 'admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME ),
28 + if ( is_rtl() ) {
29 + wp_enqueue_style( 'bogo-admin-rtl',
30 + plugins_url( 'admin/includes/css/admin-rtl.css', BOGO_PLUGIN_BASENAME ),
20 31 array(), BOGO_VERSION, 'all' );
21 -
22 - if ( is_rtl() ) {
23 - wp_enqueue_style( 'bogo-admin-rtl',
24 - plugins_url( 'admin/includes/css/admin-rtl.css', BOGO_PLUGIN_BASENAME ),
25 - array(), BOGO_VERSION, 'all' );
26 - }
27 32 }
28 33
29 - $pages_need_script = array(
30 - 'nav-menus.php',
31 - 'options-general.php' );
34 + wp_enqueue_script( 'bogo-admin',
35 + plugins_url( 'admin/includes/js/admin.js', BOGO_PLUGIN_BASENAME ),
36 + array( 'jquery' ), BOGO_VERSION, true );
32 37
33 - if ( in_array( $hook_suffix, $pages_need_script ) ) {
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' ) ) );
38 45
39 46 if ( 'nav-menus.php' == $hook_suffix ) {
40 47 $nav_menu_id = absint( get_user_option( 'nav_menu_recently_edited' ) );
41 48 $nav_menu_items = wp_get_nav_menu_items( $nav_menu_id );
@@ -44,9 +51,9 @@
44 51 foreach ( (array) $nav_menu_items as $item ) {
45 52 $locales[$item->db_id] = $item->bogo_locales;
46 53 }
47 54
48 - wp_localize_script( 'bogo-admin', '_bogo', array(
55 + $local_args = array_merge( $local_args, array(
49 56 'availableLanguages' => bogo_available_languages( array(
50 57 'exclude_enus_if_inactive' => true,
51 58 'orderby' => 'value' ) ),
52 59 'locales' => $locales,
@@ -54,21 +61,41 @@
54 61 'cbPrefix' => 'menu-item-bogo-locale' ) );
55 62 }
56 63
57 64 if ( 'options-general.php' == $hook_suffix ) {
58 - wp_localize_script( 'bogo-admin', '_bogo', array(
65 + $local_args = array_merge( $local_args, array(
59 66 'defaultLocale' => bogo_get_default_locale() ) );
60 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 );
61 76 }
62 77
63 78 add_action( 'admin_menu', 'bogo_admin_menu' );
64 79
65 80 function bogo_admin_menu() {
66 - $tools = add_management_page(
67 - __( 'Bogo Tools', 'bogo' ), __( 'Bogo', 'bogo' ),
68 - 'update_core', 'bogo-tools', 'bogo_tools_page' );
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)
69 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 +
70 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' );
71 98 }
72 99
73 100 function bogo_load_tools_page() {
74 101 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
@@ -77,10 +104,10 @@
77 104
78 105 if ( 'install_translation' == $action ) {
79 106 check_admin_referer( 'bogo-tools' );
80 107
81 - if ( ! current_user_can( 'update_core' ) ) {
82 - wp_die( __( 'You are not allowed to install translations.', 'bogo' ) );
108 + if ( ! current_user_can( 'bogo_manage_language_packs' ) ) {
109 + wp_die( __( "You are not allowed to install translations.", 'bogo' ) );
83 110 }
84 111
85 112 $locale = isset( $_GET['locale'] ) ? $_GET['locale'] : null;
86 113
@@ -86,13 +113,13 @@
86 113
87 114 if ( wp_download_language_pack( $locale ) ) {
88 115 $redirect_to = add_query_arg(
89 116 array( 'locale' => $locale, 'message' => 'install_success' ),
90 - menu_page_url( 'bogo-tools', false ) );
117 + menu_page_url( 'bogo', false ) );
91 118 } else {
92 119 $redirect_to = add_query_arg(
93 120 array( 'locale' => $locale, 'message' => 'install_failed' ),
94 - menu_page_url( 'bogo-tools', false ) );
121 + menu_page_url( 'bogo', false ) );
95 122 }
96 123
97 124 wp_safe_redirect( $redirect_to );
98 125 exit();
@@ -100,10 +127,10 @@
100 127
101 128 if ( 'delete_translation' == $action ) {
102 129 check_admin_referer( 'bogo-tools' );
103 130
104 - if ( ! current_user_can( 'update_core' ) ) {
105 - wp_die( __( 'You are not allowed to delete translations.', 'bogo' ) );
131 + if ( ! current_user_can( 'bogo_manage_language_packs' ) ) {
132 + wp_die( __( "You are not allowed to delete translations.", 'bogo' ) );
106 133 }
107 134
108 135 $locale = isset( $_GET['locale'] ) ? $_GET['locale'] : null;
109 136
@@ -109,13 +136,13 @@
109 136
110 137 if ( bogo_delete_language_pack( $locale ) ) {
111 138 $redirect_to = add_query_arg(
112 139 array( 'locale' => $locale, 'message' => 'delete_success' ),
113 - menu_page_url( 'bogo-tools', false ) );
140 + menu_page_url( 'bogo', false ) );
114 141 } else {
115 142 $redirect_to = add_query_arg(
116 143 array( 'locale' => $locale, 'message' => 'delete_failed' ),
117 - menu_page_url( 'bogo-tools', false ) );
144 + menu_page_url( 'bogo', false ) );
118 145 }
119 146
120 147 wp_safe_redirect( $redirect_to );
121 148 exit();
@@ -127,9 +154,9 @@
127 154 bogo_set_prop( 'enus_deactivated', true );
128 155
129 156 $redirect_to = add_query_arg(
130 157 array( 'message' => 'enus_deactivated' ),
131 - menu_page_url( 'bogo-tools', false ) );
158 + menu_page_url( 'bogo', false ) );
132 159
133 160 wp_safe_redirect( $redirect_to );
134 161 exit();
135 162 }
@@ -140,9 +167,9 @@
140 167 bogo_set_prop( 'enus_deactivated', false );
141 168
142 169 $redirect_to = add_query_arg(
143 170 array( 'message' => 'enus_activated' ),
144 - menu_page_url( 'bogo-tools', false ) );
171 + menu_page_url( 'bogo', false ) );
145 172
146 173 wp_safe_redirect( $redirect_to );
147 174 exit();
148 175 }
@@ -147,8 +174,50 @@
147 174 exit();
148 175 }
149 176 }
150 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 +
151 220 function bogo_tools_page() {
152 221 $enus_deactivated = bogo_get_prop( 'enus_deactivated' );
153 222 $can_install = wp_can_install_language_pack();
154 223
@@ -157,14 +226,12 @@
157 226
158 227 ?>
159 228 <div class="wrap">
160 229
161 -<h2><?php echo esc_html( __( 'Bogo Tools', 'bogo' ) ); ?></h2>
230 +<h1><?php echo esc_html( __( 'Available Languages', 'bogo' ) ); ?></h1>
162 231
163 232 <?php bogo_admin_notice(); ?>
164 233
165 -<h3 class="title"><?php echo esc_html( __( 'Available Languages', 'bogo' ) ); ?></h3>
166 -
167 234 <table id="bogo-languages-table" class="widefat">
168 235 <thead>
169 236 <tr><th></th><th><?php echo esc_html( __( 'Language', 'bogo' ) ); ?></th></tr>
170 237 </thead>
@@ -198,9 +265,9 @@
198 265 }
199 266
200 267 if ( 'en_US' == $locale ) {
201 268 if ( $enus_deactivated ) {
202 - $activate_link = menu_page_url( 'bogo-tools', false );
269 + $activate_link = menu_page_url( 'bogo', false );
203 270 $activate_link = add_query_arg(
204 271 array( 'action' => 'activate_enus' ),
205 272 $activate_link );
206 273 $activate_link = wp_nonce_url( $activate_link, 'bogo-tools' );
@@ -213,9 +280,9 @@
213 280 '<div class="status"><span class="status">%s</span> | %s</div>',
214 281 $status, $activate_link );
215 282 $class = '';
216 283 } else {
217 - $deactivate_link = menu_page_url( 'bogo-tools', false );
284 + $deactivate_link = menu_page_url( 'bogo', false );
218 285 $deactivate_link = add_query_arg(
219 286 array( 'action' => 'deactivate_enus' ),
220 287 $deactivate_link );
221 288 $deactivate_link = wp_nonce_url( $deactivate_link, 'bogo-tools' );
@@ -228,9 +295,9 @@
228 295 '<div class="status"><span class="status">%s</span> | %s</div>',
229 296 $status, $deactivate_link );
230 297 }
231 298 } elseif ( $can_install ) {
232 - $delete_link = menu_page_url( 'bogo-tools', false );
299 + $delete_link = menu_page_url( 'bogo', false );
233 300 $delete_link = add_query_arg(
234 301 array( 'action' => 'delete_translation', 'locale' => $locale ),
235 302 $delete_link );
236 303 $delete_link = wp_nonce_url( $delete_link, 'bogo-tools' );
@@ -271,9 +338,9 @@
271 338
272 339 $install_link = '';
273 340
274 341 if ( $can_install ) {
275 - $install_link = menu_page_url( 'bogo-tools', false );
342 + $install_link = menu_page_url( 'bogo', false );
276 343 $install_link = add_query_arg(
277 344 array( 'action' => 'install_translation', 'locale' => $locale ),
278 345 $install_link );
279 346 $install_link = wp_nonce_url( $install_link, 'bogo-tools' );
@@ -296,8 +363,58 @@
296 363 </div>
297 364 <?php
298 365 }
299 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 +
300 417 function bogo_admin_notice( $reason = '' ) {
301 418 if ( empty( $reason ) && isset( $_GET['message'] ) ) {
302 419 $reason = $_GET['message'];
303 420 }
@@ -313,13 +430,17 @@
313 430 } elseif ( 'enus_deactivated' == $reason ) {
314 431 $message = __( "English (United States) deactivated.", 'bogo' );
315 432 } elseif ( 'enus_activated' == $reason ) {
316 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' );
317 438 } else {
318 439 return false;
319 440 }
320 441
321 - if ( 'install_failed' == $reason || 'delete_failed' == $reason ) {
442 + if ( '_failed' == substr( $reason, -7 ) ) {
322 443 echo sprintf(
323 444 '<div class="error notice notice-error is-dismissible"><p>%s</p></div>',
324 445 esc_html( $message ) );
325 446 } else {