PluginProbe
Polylang / 2.9
Polylang v2.9
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
polylang / admin / admin-strings.php

admin-strings.php in Polylang 2.9, at admin/admin-strings.php

124 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Polylang
4 */
5
6 /**
7 * A fully static class to manage strings translations on admin side
8 *
9 * @since 1.6
10 */
11 class PLL_Admin_Strings {
12 protected static $strings = array(); // strings to translate
13 protected static $default_strings; // default strings to register
14
15 /**
16 * Add filters
17 *
18 * @since 1.6
19 */
20 public static function init() {
21 // default strings translations sanitization
22 add_filter( 'pll_sanitize_string_translation', array( __CLASS__, 'sanitize_string_translation' ), 10, 2 );
23 }
24
25 /**
26 * Register strings for translation making sure it is not duplicate or empty
27 *
28 * @since 0.6
29 *
30 * @param string $name A unique name for the string
31 * @param string $string The string to register
32 * @param string $context Optional, the group in which the string is registered, defaults to 'polylang'
33 * @param bool $multiline Optional, whether the string table should display a multiline textarea or a single line input, defaults to single line
34 */
35 public static function register_string( $name, $string, $context = 'Polylang', $multiline = false ) {
36 // Backward compatibility with Polylang older than 1.1
37 if ( is_bool( $context ) ) {
38 $multiline = $context;
39 $context = 'Polylang';
40 }
41
42 if ( $string && is_scalar( $string ) ) {
43 self::$strings[ md5( $string ) ] = compact( 'name', 'string', 'context', 'multiline' );
44 }
45 }
46
47 /**
48 * Get registered strings
49 *
50 * @since 0.6.1
51 *
52 * @return array list of all registered strings
53 */
54 public static function &get_strings() {
55 self::$default_strings = array(
56 'widget_title' => __( 'Widget title', 'polylang' ),
57 'widget_text' => __( 'Widget text', 'polylang' ),
58 );
59
60 // Widgets titles
61 global $wp_registered_widgets;
62 $sidebars = wp_get_sidebars_widgets();
63 foreach ( $sidebars as $sidebar => $widgets ) {
64 if ( 'wp_inactive_widgets' == $sidebar || empty( $widgets ) ) {
65 continue;
66 }
67
68 foreach ( $widgets as $widget ) {
69 // Nothing can be done if the widget is created using pre WP2.8 API :(
70 // There is no object, so we can't access it to get the widget options
71 if ( ! isset( $wp_registered_widgets[ $widget ]['callback'][0] ) || ! is_object( $wp_registered_widgets[ $widget ]['callback'][0] ) || ! method_exists( $wp_registered_widgets[ $widget ]['callback'][0], 'get_settings' ) ) {
72 continue;
73 }
74
75 $widget_settings = $wp_registered_widgets[ $widget ]['callback'][0]->get_settings();
76 $number = $wp_registered_widgets[ $widget ]['params'][0]['number'];
77
78 // Don't enable widget translation if the widget is visible in only one language or if there is no title
79 if ( empty( $widget_settings[ $number ]['pll_lang'] ) ) {
80 if ( isset( $widget_settings[ $number ]['title'] ) && $title = $widget_settings[ $number ]['title'] ) {
81 self::register_string( self::$default_strings['widget_title'], $title, 'Widget' );
82 }
83
84 if ( isset( $widget_settings[ $number ]['text'] ) && $text = $widget_settings[ $number ]['text'] ) {
85 self::register_string( self::$default_strings['widget_text'], $text, 'Widget', true );
86 }
87 }
88 }
89 }
90
91 /**
92 * Filter the list of strings registered for translation
93 * Mainly for use by our PLL_WPML_Compat class
94 *
95 * @since 1.0.2
96 *
97 * @param array $strings list of strings
98 */
99 self::$strings = apply_filters( 'pll_get_strings', self::$strings );
100 return self::$strings;
101 }
102
103 /**
104 * Performs the sanitization ( before saving in DB ) of default strings translations
105 *
106 * @since 1.6
107 *
108 * @param string $translation translation to sanitize
109 * @param string $name unique name for the string
110 * @return string
111 */
112 public static function sanitize_string_translation( $translation, $name ) {
113 if ( $name == self::$default_strings['widget_title'] ) {
114 $translation = sanitize_text_field( $translation );
115 }
116
117 if ( $name == self::$default_strings['widget_text'] && ! current_user_can( 'unfiltered_html' ) ) {
118 $translation = wp_kses_post( $translation );
119 }
120
121 return $translation;
122 }
123 }
124