PluginProbe
Polylang / 2.6
Polylang v2.6
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-links.php

admin-links.php in Polylang 2.6, at admin/admin-links.php

224 lines 6.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Manages links related functions
5 *
6 * @since 1.8
7 */
8 class PLL_Admin_Links extends PLL_Links {
9
10 /**
11 * Returns html markup for a new translation link
12 *
13 * @since 2.6
14 *
15 * @param string $link The new translation link.
16 * @param object $language The language of the new translation.
17 * @return string
18 */
19 protected function new_translation_link( $link, $language ) {
20 $str = '';
21
22 if ( $link ) {
23 /* translators: accessibility text, %s is a native language name */
24 $hint = sprintf( __( 'Add a translation in %s', 'polylang' ), $language->name );
25
26 $str = sprintf(
27 '<a href="%1$s" title="%2$s" class="pll_icon_add"><span class="screen-reader-text">%3$s</span></a>',
28 esc_url( $link ),
29 esc_attr( $hint ),
30 esc_html( $hint )
31 );
32 }
33
34 return $str;
35 }
36
37 /**
38 * Returns html markup for a translation link
39 *
40 * @since 2.6
41 *
42 * @param string $link The translation link.
43 * @param object $language The language of the translation.
44 * @return string
45 */
46 public function edit_translation_link( $link, $language ) {
47 return $link ? sprintf(
48 '<a href="%1$s" class="pll_icon_edit"><span class="screen-reader-text">%2$s</span></a>',
49 esc_url( $link ),
50 /* translators: accessibility text, %s is a native language name */
51 esc_html( sprintf( __( 'Edit the translation in %s', 'polylang' ), $language->name ) )
52 ) : '';
53 }
54
55 /**
56 * Get the link to create a new post translation
57 *
58 * @since 1.5
59 *
60 * @param int $post_id The source post id.
61 * @param object $language The language of the new translation.
62 * @param string $context Optional. Defaults to 'display' which encodes '&' to '&amp;'.
63 * Otherwise, preserves '&'.
64 * @return string
65 */
66 public function get_new_post_translation_link( $post_id, $language, $context = 'display' ) {
67 $post_type = get_post_type( $post_id );
68 $post_type_object = get_post_type_object( get_post_type( $post_id ) );
69 if ( ! current_user_can( $post_type_object->cap->create_posts ) ) {
70 return '';
71 }
72
73 // Special case for the privacy policy page which is associated to a specific capability
74 if ( 'page' === $post_type_object->name && ! current_user_can( 'manage_privacy_options' ) ) {
75 $privacy_page = get_option( 'wp_page_for_privacy_policy' );
76 if ( $privacy_page && in_array( $post_id, $this->model->post->get_translations( $privacy_page ) ) ) {
77 return '';
78 }
79 }
80
81 if ( 'attachment' === $post_type ) {
82 $args = array(
83 'action' => 'translate_media',
84 'from_media' => $post_id,
85 'new_lang' => $language->slug,
86 );
87
88 $link = add_query_arg( $args, admin_url( 'admin.php' ) );
89
90 // Add nonce for media as we will directly publish a new attachment from a click on this link
91 if ( 'display' === $context ) {
92 $link = wp_nonce_url( $link, 'translate_media' );
93 } else {
94 $link = add_query_arg( '_wpnonce', wp_create_nonce( 'translate_media' ), $link );
95 }
96 } else {
97 $args = array(
98 'post_type' => $post_type,
99 'from_post' => $post_id,
100 'new_lang' => $language->slug,
101 );
102
103 $link = add_query_arg( $args, admin_url( 'post-new.php' ) );
104
105 if ( 'display' === $context ) {
106 $link = wp_nonce_url( $link, 'new-post-translation' );
107 } else {
108 $link = add_query_arg( '_wpnonce', wp_create_nonce( 'new-post-translation' ), $link );
109 }
110 }
111
112 /**
113 * Filter the new post translation link
114 *
115 * @since 1.8
116 *
117 * @param string $link the new post translation link
118 * @param object $language the language of the new translation
119 * @param int $post_id the source post id
120 */
121 return apply_filters( 'pll_get_new_post_translation_link', $link, $language, $post_id );
122 }
123
124 /**
125 * Returns html markup for a new post translation link
126 *
127 * @since 1.8
128 *
129 * @param int $post_id
130 * @param object $language
131 * @return string
132 */
133 public function new_post_translation_link( $post_id, $language ) {
134 $link = $this->get_new_post_translation_link( $post_id, $language );
135 return $this->new_translation_link( $link, $language );
136 }
137
138 /**
139 * Returns html markup for a translation link
140 *
141 * @since 1.4
142 *
143 * @param int $post_id translation post id
144 * @return string
145 */
146 public function edit_post_translation_link( $post_id ) {
147 $link = get_edit_post_link( $post_id );
148 $language = $this->model->post->get_language( $post_id );
149 return $this->edit_translation_link( $link, $language );
150 }
151
152 /**
153 * Get the link to create a new term translation
154 *
155 * @since 1.5
156 *
157 * @param int $term_id
158 * @param string $taxonomy
159 * @param string $post_type
160 * @param object $language
161 * @return string
162 */
163 public function get_new_term_translation_link( $term_id, $taxonomy, $post_type, $language ) {
164 $tax = get_taxonomy( $taxonomy );
165 if ( ! $tax || ! current_user_can( $tax->cap->edit_terms ) ) {
166 return '';
167 }
168
169 $args = array(
170 'taxonomy' => $taxonomy,
171 'post_type' => $post_type,
172 'from_tag' => $term_id,
173 'new_lang' => $language->slug,
174 );
175
176 $link = add_query_arg( $args, admin_url( 'edit-tags.php' ) );
177
178 /**
179 * Filter the new term translation link
180 *
181 * @since 1.8
182 *
183 * @param string $link the new term translation link
184 * @param object $language the language of the new translation
185 * @param int $term_id the source term id
186 * @param string $taxonomy
187 * @param string $post_type
188 */
189 return apply_filters( 'pll_get_new_term_translation_link', $link, $language, $term_id, $taxonomy, $post_type );
190 }
191
192 /**
193 * Returns html markup for a new term translation
194 *
195 * @since 1.8
196 *
197 * @param int $term_id
198 * @param string $taxonomy
199 * @param string $post_type
200 * @param object $language
201 * @return string
202 */
203 public function new_term_translation_link( $term_id, $taxonomy, $post_type, $language ) {
204 $link = $this->get_new_term_translation_link( $term_id, $taxonomy, $post_type, $language );
205 return $this->new_translation_link( $link, $language );
206 }
207
208 /**
209 * Returns html markup for a term translation link
210 *
211 * @since 1.4
212 *
213 * @param object $term_id translation term id
214 * @param string $taxonomy
215 * @param string $post_type
216 * @return string
217 */
218 public function edit_term_translation_link( $term_id, $taxonomy, $post_type ) {
219 $link = get_edit_term_link( $term_id, $taxonomy, $post_type );
220 $language = $this->model->term->get_language( $term_id );
221 return $this->edit_translation_link( $link, $language );
222 }
223 }
224