PluginProbe
Polylang / 3.6.4
Polylang v3.6.4
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 3.6.4, at admin/admin-strings.php

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