PluginProbe
Bogo / 2.3
Bogo v2.3
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 / post.php

post.php in Bogo 2.3, at admin/post.php

380 lines 9.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /* Posts List Table */
4
5 add_filter( 'manage_pages_columns', 'bogo_pages_columns' );
6
7 function bogo_pages_columns( $posts_columns ) {
8 return bogo_posts_columns( $posts_columns, 'page' );
9 }
10
11 add_filter( 'manage_posts_columns', 'bogo_posts_columns', 10, 2 );
12
13 function bogo_posts_columns( $posts_columns, $post_type ) {
14 if ( ! bogo_is_localizable_post_type( $post_type ) )
15 return $posts_columns;
16
17 if ( ! isset( $posts_columns['locale'] ) ) {
18 $posts_columns = array_merge(
19 array_slice( $posts_columns, 0, 3 ),
20 array( 'locale' => __( 'Locale', 'bogo' ) ),
21 array_slice( $posts_columns, 3 ) );
22 }
23
24 return $posts_columns;
25 }
26
27 add_action( 'manage_pages_custom_column', 'bogo_manage_posts_custom_column', 10, 2 );
28 add_action( 'manage_posts_custom_column', 'bogo_manage_posts_custom_column', 10, 2 );
29
30 function bogo_manage_posts_custom_column( $column_name, $post_id ) {
31 $post_type = get_post_type( $post_id );
32
33 if ( ! bogo_is_localizable_post_type( $post_type ) )
34 return;
35
36 if ( 'locale' != $column_name )
37 return;
38
39 $locale = get_post_meta( $post_id, '_locale', true );
40
41 if ( empty( $locale ) )
42 return;
43
44 $language = bogo_get_language( $locale );
45
46 if ( empty( $language ) )
47 $language = $locale;
48
49 echo sprintf( '<a href="%1$s">%2$s</a>',
50 esc_url( add_query_arg(
51 array( 'post_type' => $post_type, 'lang' => $locale ),
52 'edit.php' ) ),
53 esc_html( $language ) );
54 }
55
56 add_action( 'restrict_manage_posts', 'bogo_restrict_manage_posts' );
57
58 function bogo_restrict_manage_posts() {
59 global $post_type;
60
61 if ( ! bogo_is_localizable_post_type( $post_type ) ) {
62 return;
63 }
64
65 $available_languages = bogo_available_languages();
66 $current_locale = empty( $_GET['lang'] ) ? '' : $_GET['lang'];
67
68 echo '<select name="lang">';
69
70 $selected = ( '' == $current_locale ) ? ' selected="selected"' : '';
71
72 echo '<option value=""' . $selected . '>'
73 . esc_html( __( 'Show all locales', 'bogo' ) ) . '</option>';
74
75 foreach ( $available_languages as $locale => $lang ) {
76 $selected = ( $locale == $current_locale ) ? ' selected="selected"' : '';
77
78 echo '<option value="' . esc_attr( $locale ) . '"' . $selected . '>'
79 . esc_html( $lang ) . '</option>';
80 }
81
82 echo '</select>' . "\n";
83 }
84
85 add_filter( 'post_row_actions', 'bogo_post_row_actions', 10, 2 );
86 add_filter( 'page_row_actions', 'bogo_post_row_actions', 10, 2 );
87
88 function bogo_post_row_actions( $actions, $post ) {
89 if ( ! bogo_is_localizable_post_type( $post->post_type ) )
90 return $actions;
91
92 $post_type_object = get_post_type_object( $post->post_type );
93
94 if ( ! current_user_can( $post_type_object->cap->edit_post, $post->ID )
95 || 'trash' == $post->post_status )
96 return $actions;
97
98 $user_locale = bogo_get_user_locale();
99 $post_locale = bogo_get_post_locale( $post->ID );
100
101 if ( $user_locale == $post_locale )
102 return $actions;
103
104 $translations = bogo_get_post_translations( $post );
105
106 if ( ! empty( $translations[$user_locale] ) ) {
107 $translation = $translations[$user_locale];
108
109 if ( empty( $translation->ID ) || $translation->ID == $post->ID )
110 return $actions;
111
112 $title = __( 'Edit %s translation of this item', 'bogo' );
113 $text = __( 'Edit %s translation', 'bogo' );
114
115 $edit_link = get_edit_post_link( $translation->ID );
116
117 } else {
118 $title = __( 'Translate this item into %s', 'bogo' );
119 $text = __( 'Translate into %s', 'bogo' );
120
121 $edit_link = admin_url( 'post-new.php?post_type=' . $post->post_type
122 . '&locale=' . $user_locale
123 . '&original_post=' . $post->ID );
124 }
125
126 $language = bogo_get_language( $user_locale );
127
128 if ( empty( $language ) )
129 $language = $user_locale;
130
131 $actions['translate'] = '<a title="' . esc_attr( sprintf( $title, $language ) ) . '" href="' . $edit_link . '">' . esc_html( sprintf( $text, $language ) ) . '</a>';
132
133 return $actions;
134 }
135
136 /* Single Post */
137
138 add_action( 'add_meta_boxes', 'bogo_add_l10n_meta_boxes', 10, 2 );
139
140 function bogo_add_l10n_meta_boxes( $post_type, $post ) {
141 if ( ! bogo_is_localizable_post_type( $post_type ) )
142 return;
143
144 if ( in_array( $post_type, array( 'comment', 'link' ) ) )
145 return;
146
147 add_meta_box( 'bogol10ndiv', __( 'Language', 'bogo' ),
148 'bogo_l10n_meta_box', null, 'side', 'high' );
149 }
150
151 function bogo_l10n_meta_box( $post ) {
152 $initial = ( 'auto-draft' == $post->post_status );
153
154 if ( $initial ) {
155 $locale = isset( $_REQUEST['locale'] ) ? $_REQUEST['locale'] : '';
156
157 if ( ! bogo_is_available_locale( $locale ) )
158 $locale = bogo_get_user_locale();
159
160 $original_post = empty( $_REQUEST['original_post'] ) ? '' : $_REQUEST['original_post'];
161 } else {
162 $locale = bogo_get_post_locale( $post->ID );
163 $original_post = get_post_meta( $post->ID, '_original_post', true );
164
165 if ( empty( $original_post ) )
166 $original_post = $post->ID;
167 }
168
169 $lang = bogo_get_language( $locale );
170
171 if ( empty( $lang ) )
172 $lang = $locale;
173
174 ?>
175 <div class="hidden">
176 <input type="hidden" name="locale" value="<?php echo esc_attr( $locale ); ?>" />
177 <input type="hidden" name="original_post" value="<?php echo esc_attr( $original_post ); ?>" />
178 </div>
179
180 <div class="descriptions">
181 <p><strong><?php echo esc_html( __( 'Language', 'bogo' ) ); ?>:</strong>
182 <?php echo esc_html( $lang ); ?></p>
183 </div>
184
185 <?php
186 bogo_metabox_translations( $post );
187 bogo_metabox_add_translation( $post );
188 }
189
190 function bogo_metabox_translations( $post ) {
191 $translations = bogo_get_post_translations( $post->ID );
192
193 if ( empty( $translations ) )
194 return;
195
196 ?>
197 <p><strong><?php echo esc_html( __( 'Translations', 'bogo' ) ); ?>:</strong></p>
198
199 <ul style="list-style: disc inside; margin-left: 1em;">
200 <?php
201 foreach ( $translations as $locale => $translation ) {
202 $edit_link = get_edit_post_link( $translation->ID );
203
204 echo '<li>';
205
206 if ( $edit_link )
207 echo '<a href="' . esc_url( $edit_link ) . '" target="_blank">' . get_the_title( $translation->ID ) . '</a>';
208 else
209 echo get_the_title( $translation->ID );
210
211 $lang = bogo_get_language( $locale );
212
213 if ( empty( $lang ) )
214 $lang = $locale;
215
216 echo ' [' . $lang . ']';
217 echo '</li>';
218 }
219 ?>
220 </ul>
221 <?php
222 }
223
224 function bogo_metabox_add_translation( $post ) {
225 if ( 'auto-draft' == $post->post_status )
226 return;
227
228 $post_locale = bogo_get_post_locale( $post->ID );
229 $user_locale = bogo_get_user_locale();
230
231 if ( $post_locale == $user_locale )
232 return;
233
234 $locale = $user_locale;
235
236 $translations = bogo_get_post_translations( $post->ID );
237
238 if ( isset( $translations[$locale] ) )
239 return;
240
241 $lang = bogo_get_language( $locale );
242
243 if ( empty( $lang ) )
244 $lang = $locale;
245
246 $edit_link = admin_url( 'post-new.php?post_type=' . $post->post_type
247 . '&locale=' . $locale
248 . '&original_post=' . $post->ID );
249
250 ?>
251 <p class="textright"><a href="<?php echo $edit_link; ?>" target="_blank" class="button"><?php echo esc_html( sprintf( __( 'Add %s translation', 'bogo' ), $lang ) ) ?></a></p>
252 <?php
253 }
254
255 add_filter( 'default_title', 'bogo_translation_default', 10, 2 );
256 add_filter( 'default_content', 'bogo_translation_default', 10, 2 );
257 add_filter( 'default_excerpt', 'bogo_translation_default', 10, 2 );
258
259 function bogo_translation_default( $value, $post ) {
260 if ( ! empty( $value )
261 || empty( $_REQUEST['original_post'] )
262 || ! $original = get_post( $_REQUEST['original_post'] ) ) {
263 return $value;
264 }
265
266 if ( 'default_title' == current_filter() ) {
267 $value = $original->post_title;
268 } elseif ( 'default_content' == current_filter() ) {
269 $value = $original->post_content;
270 } elseif ( 'default_excerpt' == current_filter() ) {
271 $value = $original->post_excerpt;
272 }
273
274 return $value;
275 }
276
277 add_action( 'save_post', 'bogo_save_post', 10, 2 );
278
279 function bogo_save_post( $post_id, $post ) {
280 if ( did_action( 'import_start' ) && ! did_action( 'import_end' ) ) // Importing
281 return;
282
283 if ( ! bogo_is_localizable_post_type( $post->post_type ) )
284 return;
285
286 $old_locale = get_post_meta( $post_id, '_locale', true );
287
288 if ( empty( $old_locale ) ) {
289 if ( ! empty( $_REQUEST['locale'] ) && bogo_is_available_locale( $_REQUEST['locale'] ) )
290 $locale = $_REQUEST['locale'];
291 elseif ( 'auto-draft' == get_post_status( $post_id ) )
292 $locale = bogo_get_user_locale();
293 else
294 $locale = bogo_get_default_locale();
295 }
296
297 if ( ! empty( $locale ) && $locale != $old_locale )
298 update_post_meta( $post_id, '_locale', $locale );
299 else
300 $locale = $old_locale;
301
302 if ( $original = get_post_meta( $post_id, '_original_post', true ) )
303 return;
304
305 if ( ! empty( $_REQUEST['original_post'] ) ) {
306 $original = get_post_meta( $_REQUEST['original_post'], '_original_post', true );
307
308 if ( empty( $original ) )
309 $original = (int) $_REQUEST['original_post'];
310
311 update_post_meta( $post_id, '_original_post', $original );
312 return;
313 }
314
315 $original = $post_id;
316
317 while ( 1 ) {
318 $q = new WP_Query();
319
320 $posts = $q->query( array(
321 'bogo_suppress_locale_query' => true,
322 'posts_per_page' => 1,
323 'post_status' => 'any',
324 'post_type' => $post->post_type,
325 'meta_key' => '_original_post',
326 'meta_value' => $original ) );
327
328 if ( empty( $posts ) ) {
329 update_post_meta( $post_id, '_original_post', $original );
330 return;
331 }
332
333 $original += 1;
334 }
335 }
336
337 add_filter( 'wp_unique_post_slug', 'bogo_unique_post_slug', 10, 6 );
338
339 function bogo_unique_post_slug( $slug, $post_id, $status, $type, $parent, $original ) {
340 global $wp_rewrite;
341
342 if ( ! bogo_is_localizable_post_type( $type ) )
343 return $slug;
344
345 $feeds = is_array( $wp_rewrite->feeds ) ? $wp_rewrite->feeds : array();
346
347 if ( in_array( $original, $feeds ) )
348 return $slug;
349
350 $locale = get_post_meta( $post_id, '_locale', true );
351
352 if ( empty( $locale ) )
353 return $slug;
354
355 $args = array(
356 'posts_per_page' => 1,
357 'post__not_in' => array( $post_id ),
358 'post_type' => $type,
359 'name' => $original,
360 'lang' => $locale );
361
362 $hierarchical = in_array( $type, get_post_types( array( 'hierarchical' => true ) ) );
363
364 if ( $hierarchical ) {
365 if ( preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $original ) )
366 return $slug;
367
368 $args['post_parent'] = $parent;
369 }
370
371 $q = new WP_Query();
372 $posts = $q->query( $args );
373
374 if ( empty( $posts ) )
375 $slug = $original;
376
377 return $slug;
378 }
379
380 ?>