Version Description
(2021-06-08) =
- Pro: fix original post not assigned to a new translation when the languages sidebar is closed
- Pro: Attempt to fix zip file corrupted on some installations when exporting string translations
- Support session cookie with the pll_cookie_expiration filter #835
- Fix javascript error when a plugin defines its own editor for translated post types #837
- Fix languages displayed in screen options when editing a term #850
- Cache: fix post type archive cache not cleared when saving a post #828
Download this release
Release Info
Developer | Chouby |
Plugin | Polylang |
Version | 3.0.5 |
Comparing to | |
See all releases |
Code changes from version 3.0.4 to 3.0.5
- admin/admin-filters-columns.php +7 -0
- include/cookie.php +7 -5
- integrations/cache/cache-compat.php +35 -8
- js/build/block-editor.js +2 -2
- js/build/block-editor.min.js +1 -1
- js/build/classic-editor.js +2 -2
- js/build/classic-editor.min.js +1 -1
- js/build/languages-step.js +1 -1
- js/build/languages-step.min.js +1 -1
- js/lib/confirmation-modal.js +2 -2
- modules/wizard/js/languages-step.js +1 -1
- polylang.php +2 -2
- readme.txt +10 -1
admin/admin-filters-columns.php
CHANGED
@@ -247,6 +247,13 @@ class PLL_Admin_Filters_Columns {
|
|
247 |
* @return string[] modified List of columns.
|
248 |
*/
|
249 |
public function add_term_column( $columns ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
250 |
return $this->add_column( $columns, 'posts' );
|
251 |
}
|
252 |
|
247 |
* @return string[] modified List of columns.
|
248 |
*/
|
249 |
public function add_term_column( $columns ) {
|
250 |
+
$screen = get_current_screen();
|
251 |
+
|
252 |
+
// Avoid displaying languages in screen options when editing a term.
|
253 |
+
if ( $screen instanceof WP_Screen && 'term' === $screen->base ) {
|
254 |
+
return $columns;
|
255 |
+
}
|
256 |
+
|
257 |
return $this->add_column( $columns, 'posts' );
|
258 |
}
|
259 |
|
include/cookie.php
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
*/
|
11 |
class PLL_Cookie {
|
12 |
/**
|
13 |
-
* Parses the cookie parameters
|
14 |
*
|
15 |
* @since 2.9
|
16 |
*
|
@@ -19,17 +19,19 @@ class PLL_Cookie {
|
|
19 |
*/
|
20 |
protected static function parse_args( $args ) {
|
21 |
/**
|
22 |
-
*
|
23 |
-
*
|
|
|
|
|
24 |
*
|
25 |
* @since 1.8
|
26 |
*
|
27 |
-
* @param int $duration
|
28 |
*/
|
29 |
$expiration = apply_filters( 'pll_cookie_expiration', YEAR_IN_SECONDS );
|
30 |
|
31 |
$defaults = array(
|
32 |
-
'expires' => time() + $expiration,
|
33 |
'path' => COOKIEPATH,
|
34 |
'domain' => COOKIE_DOMAIN, // Cookie domain must be set to false for localhost ( default value for COOKIE_DOMAIN ) thanks to Stephen Harris.
|
35 |
'secure' => is_ssl(),
|
10 |
*/
|
11 |
class PLL_Cookie {
|
12 |
/**
|
13 |
+
* Parses the cookie parameters.
|
14 |
*
|
15 |
* @since 2.9
|
16 |
*
|
19 |
*/
|
20 |
protected static function parse_args( $args ) {
|
21 |
/**
|
22 |
+
* Filters the Polylang cookie duration.
|
23 |
+
*
|
24 |
+
* If a cookie duration of 0 is specified, a session cookie will be set.
|
25 |
+
* /!\ This filter may be fired *before* the theme is loaded.
|
26 |
*
|
27 |
* @since 1.8
|
28 |
*
|
29 |
+
* @param int $duration Cookie duration in seconds.
|
30 |
*/
|
31 |
$expiration = apply_filters( 'pll_cookie_expiration', YEAR_IN_SECONDS );
|
32 |
|
33 |
$defaults = array(
|
34 |
+
'expires' => $expiration > 0 ? time() + $expiration : 0,
|
35 |
'path' => COOKIEPATH,
|
36 |
'domain' => COOKIE_DOMAIN, // Cookie domain must be set to false for localhost ( default value for COOKIE_DOMAIN ) thanks to Stephen Harris.
|
37 |
'secure' => is_ssl(),
|
integrations/cache/cache-compat.php
CHANGED
@@ -24,6 +24,8 @@ class PLL_Cache_Compat {
|
|
24 |
if ( ! defined( 'WP_ROCKET_VERSION' ) || version_compare( WP_ROCKET_VERSION, '3.0.5', '<' ) ) {
|
25 |
add_action( 'wp', array( $this, 'do_not_cache_site_home' ) );
|
26 |
}
|
|
|
|
|
27 |
}
|
28 |
|
29 |
/**
|
@@ -42,21 +44,30 @@ class PLL_Cache_Compat {
|
|
42 |
$domain = ( 2 === PLL()->options['force_lang'] ) ? wp_parse_url( PLL()->links_model->home, PHP_URL_HOST ) : COOKIE_DOMAIN;
|
43 |
$samesite = ( 3 === PLL()->options['force_lang'] ) ? 'None' : 'Lax';
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
$js = sprintf(
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
document.cookie = "%s=%s; expires=" + expirationDate.toUTCString() + "; path=%s%s%s%s";
|
50 |
-
}());',
|
51 |
-
esc_js( apply_filters( 'pll_cookie_expiration', YEAR_IN_SECONDS ) ),
|
52 |
esc_js( PLL_COOKIE ),
|
53 |
esc_js( pll_current_language() ),
|
54 |
esc_js( COOKIEPATH ),
|
55 |
$domain ? '; domain=' . esc_js( $domain ) : '',
|
56 |
is_ssl() ? '; secure' : '',
|
57 |
-
'; SameSite=' . $samesite
|
|
|
58 |
);
|
59 |
-
echo
|
60 |
}
|
61 |
|
62 |
/**
|
@@ -70,4 +81,20 @@ class PLL_Cache_Compat {
|
|
70 |
define( 'DONOTCACHEPAGE', true );
|
71 |
}
|
72 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
24 |
if ( ! defined( 'WP_ROCKET_VERSION' ) || version_compare( WP_ROCKET_VERSION, '3.0.5', '<' ) ) {
|
25 |
add_action( 'wp', array( $this, 'do_not_cache_site_home' ) );
|
26 |
}
|
27 |
+
|
28 |
+
add_action( 'clean_post_cache', array( $this, 'clean_post_cache' ), 1 );
|
29 |
}
|
30 |
|
31 |
/**
|
44 |
$domain = ( 2 === PLL()->options['force_lang'] ) ? wp_parse_url( PLL()->links_model->home, PHP_URL_HOST ) : COOKIE_DOMAIN;
|
45 |
$samesite = ( 3 === PLL()->options['force_lang'] ) ? 'None' : 'Lax';
|
46 |
|
47 |
+
/** This filter is documented in include/cookie.php */
|
48 |
+
$expiration = apply_filters( 'pll_cookie_expiration', YEAR_IN_SECONDS );
|
49 |
+
|
50 |
+
if ( $expiration > 0 ) {
|
51 |
+
$format = 'var expirationDate = new Date();
|
52 |
+
expirationDate.setTime( expirationDate.getTime() + %7$d * 1000 );
|
53 |
+
document.cookie = "%1$s=%2$s; expires=" + expirationDate.toUTCString() + "; path=%3$s%4$s%5$s%6$s";';
|
54 |
+
} else {
|
55 |
+
$format = 'document.cookie = "%1$s=%2$s; path=%3$s%4$s%5$s%6$s";';
|
56 |
+
}
|
57 |
+
|
58 |
$js = sprintf(
|
59 |
+
"(function() {
|
60 |
+
{$format}
|
61 |
+
}());\n",
|
|
|
|
|
|
|
62 |
esc_js( PLL_COOKIE ),
|
63 |
esc_js( pll_current_language() ),
|
64 |
esc_js( COOKIEPATH ),
|
65 |
$domain ? '; domain=' . esc_js( $domain ) : '',
|
66 |
is_ssl() ? '; secure' : '',
|
67 |
+
'; SameSite=' . $samesite,
|
68 |
+
esc_js( $expiration )
|
69 |
);
|
70 |
+
echo "<script type='text/javascript'>\n" . $js . "</script>\n"; // phpcs:ignore WordPress.Security.EscapeOutput
|
71 |
}
|
72 |
|
73 |
/**
|
81 |
define( 'DONOTCACHEPAGE', true );
|
82 |
}
|
83 |
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Defines the current language as the current post language when cleaning the post cache.
|
87 |
+
*
|
88 |
+
* This allows cache plugins to clean the right post type archive cache.
|
89 |
+
*
|
90 |
+
* @since 3.0.5
|
91 |
+
*
|
92 |
+
* @param int $post_id Post id.
|
93 |
+
*/
|
94 |
+
public function clean_post_cache( $post_id ) {
|
95 |
+
$lang = PLL()->model->post->get_language( $post_id );
|
96 |
+
if ( $lang ) {
|
97 |
+
PLL()->curlang = $lang;
|
98 |
+
}
|
99 |
+
}
|
100 |
}
|
js/build/block-editor.js
CHANGED
@@ -32,7 +32,7 @@ const initializeConfimationModal = () => {
|
|
32 |
switch ( what ) { // phpcs:ignore PEAR.Functions.FunctionCallSignature.Indent
|
33 |
case 'yes':
|
34 |
// Confirm the new language.
|
35 |
-
languagesList.data( 'old-value', languagesList.children( ':selected' )
|
36 |
confirm();
|
37 |
break;
|
38 |
case 'no':
|
@@ -98,7 +98,7 @@ const initializeConfimationModal = () => {
|
|
98 |
|
99 |
const initializeLanguageOldValue = () => {
|
100 |
// Keep the old language value to be able to compare to the new one and revert to it if necessary.
|
101 |
-
languagesList.attr( 'data-old-value', languagesList.children( ':selected' )
|
102 |
};
|
103 |
|
104 |
;// CONCATENATED MODULE: ./js/block-editor.js
|
32 |
switch ( what ) { // phpcs:ignore PEAR.Functions.FunctionCallSignature.Indent
|
33 |
case 'yes':
|
34 |
// Confirm the new language.
|
35 |
+
languagesList.data( 'old-value', languagesList.children( ':selected' ).first().val() );
|
36 |
confirm();
|
37 |
break;
|
38 |
case 'no':
|
98 |
|
99 |
const initializeLanguageOldValue = () => {
|
100 |
// Keep the old language value to be able to compare to the new one and revert to it if necessary.
|
101 |
+
languagesList.attr( 'data-old-value', languagesList.children( ':selected' ).first().val() );
|
102 |
};
|
103 |
|
104 |
;// CONCATENATED MODULE: ./js/block-editor.js
|
js/build/block-editor.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
"use strict";const languagesList=jQuery(".post_lang_choice"),initializeConfimationModal=()=>{const{__:t}=wp.i18n,a=jQuery("<div/>",{id:"pll-dialog",style:"display:none;"}).text(t("Are you sure you want to change the language of the current content?","polylang"));languagesList.after(a);const e=new Promise(((e,n)=>{const l=t=>{switch(t){case"yes":languagesList.data("old-value",languagesList.children(":selected")
|
1 |
+
"use strict";const languagesList=jQuery(".post_lang_choice"),initializeConfimationModal=()=>{const{__:t}=wp.i18n,a=jQuery("<div/>",{id:"pll-dialog",style:"display:none;"}).text(t("Are you sure you want to change the language of the current content?","polylang"));languagesList.after(a);const e=new Promise(((e,n)=>{const l=t=>{switch(t){case"yes":languagesList.data("old-value",languagesList.children(":selected").first().val()),e();break;case"no":languagesList.val(languagesList.data("old-value")),n("Cancel")}a.dialog("close")},i={autoOpen:!1,modal:!0,draggable:!1,resizable:!1,title:t("Change language","polylang"),minWidth:600,maxWidth:"100%",open:function(t,a){jQuery("body").hasClass("rtl")&&jQuery(this).parent().css({right:jQuery(this).parent().css("left"),left:"auto"})},close:function(t,a){l("no")},buttons:[{text:t("OK","polylang"),click:function(t){l("yes")}},{text:t("Cancel","polylang"),click:function(t){l("no")}}]};jQuery.ui.version>="1.12.0"?Object.assign(i,{classes:{"ui-dialog":"pll-confirmation-modal"}}):Object.assign(i,{dialogClass:"pll-confirmation-modal"}),a.dialog(i)}));return{dialogContainer:a,dialogResult:e}},initializeLanguageOldValue=()=>{languagesList.attr("data-old-value",languagesList.children(":selected").first().val())};function getCurrentLanguage(){return document.querySelector("[name=post_lang_choice]").value}wp.apiFetch.use((function(t,a){return void 0===t.url&&(void 0===t.data||null===t.data?t.path+=(t.path.indexOf("?")>=0?"&lang=":"?lang=")+getCurrentLanguage():t.data.lang=getCurrentLanguage()),a(t)})),jQuery((function(t){function a(){t(".tr_lang").each((function(){var a=t(this).attr("id").substring(8),e=t(this).parent().parent().siblings(".pll-edit-column");t(this).autocomplete({minLength:0,source:ajaxurl+"?action=pll_posts_not_translated&post_language="+t(".post_lang_choice").val()+"&translation_language="+a+"&post_type="+t("#post_type").val()+"&_pll_nonce="+t("#_pll_nonce").val(),select:function(n,l){t("#htr_lang_"+a).val(l.item.id),e.html(l.item.link)}}),t(this).on("blur",(function(){t(this).val()||(t("#htr_lang_"+a).val(0),e.html(e.siblings(".hidden").children().clone()))}))}))}initializeLanguageOldValue(),t(".post_lang_choice").on("change",(function(e){const n=wp.data.select,l=wp.data.dispatch,i=wp.data.subscribe,o=function(){const t=wp.data.select("core/editor"),a=t.getEditedPostAttribute("title").trim(),e=t.getEditedPostAttribute("content").trim(),n=t.getEditedPostAttribute("excerpt").trim();return!a&&!e&&!n}(),s=initializeConfimationModal(),{dialogContainer:c}=s;let{dialogResult:r}=s;const u=e.target;var g;location.pathname.match(/post-new.php/gi)&&o&&(g=u.value,-1!=location.search.indexOf("new_lang")?window.location.search=window.location.search.replace(/(?:new_lang=[^&]*)(&)?(.*)/,"new_lang="+g+"$1$2"):window.location.search=window.location.search+(-1!=window.location.search.indexOf("?")?"&":"?")+"new_lang="+g),t(this).data("old-value")===u.value||o?(initializeLanguageOldValue(),r=Promise.resolve()):c.dialog("open"),r.then((()=>{var e={action:"post_lang_choice",lang:u.value,post_type:t("#post_type").val(),post_id:t("#post_ID").val(),_pll_nonce:t("#_pll_nonce").val()};t.post(ajaxurl,e,(function(e){var o=wpAjax.parseAjaxResponse(e,"ajax-response");t.each(o.responses,(function(){switch(this.what){case"translations":t(".translations").html(this.data),a();break;case"flag":t(".pll-select-flag").html(this.data)}})),function(){let t=null;const a=new Promise((function(a,e){t=i((function(){const t=n("core/editor").didPostSaveRequestSucceed(),l=n("core/editor").didPostSaveRequestFail();(t||l)&&(l?e():a())}))}));l("core/editor").savePost(),a.then((function(){window.location.reload()}),(function(){t()})).catch((function(){t()}))}()}))}),(()=>{}))})),a()}));
|
js/build/classic-editor.js
CHANGED
@@ -32,7 +32,7 @@ const initializeConfimationModal = () => {
|
|
32 |
switch ( what ) { // phpcs:ignore PEAR.Functions.FunctionCallSignature.Indent
|
33 |
case 'yes':
|
34 |
// Confirm the new language.
|
35 |
-
languagesList.data( 'old-value', languagesList.children( ':selected' )
|
36 |
confirm();
|
37 |
break;
|
38 |
case 'no':
|
@@ -98,7 +98,7 @@ const initializeConfimationModal = () => {
|
|
98 |
|
99 |
const initializeLanguageOldValue = () => {
|
100 |
// Keep the old language value to be able to compare to the new one and revert to it if necessary.
|
101 |
-
languagesList.attr( 'data-old-value', languagesList.children( ':selected' )
|
102 |
};
|
103 |
|
104 |
;// CONCATENATED MODULE: ./js/classic-editor.js
|
32 |
switch ( what ) { // phpcs:ignore PEAR.Functions.FunctionCallSignature.Indent
|
33 |
case 'yes':
|
34 |
// Confirm the new language.
|
35 |
+
languagesList.data( 'old-value', languagesList.children( ':selected' ).first().val() );
|
36 |
confirm();
|
37 |
break;
|
38 |
case 'no':
|
98 |
|
99 |
const initializeLanguageOldValue = () => {
|
100 |
// Keep the old language value to be able to compare to the new one and revert to it if necessary.
|
101 |
+
languagesList.attr( 'data-old-value', languagesList.children( ':selected' ).first().val() );
|
102 |
};
|
103 |
|
104 |
;// CONCATENATED MODULE: ./js/classic-editor.js
|
js/build/classic-editor.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
"use strict";const languagesList=jQuery(".post_lang_choice"),initializeConfimationModal=()=>{const{__:t}=wp.i18n,a=jQuery("<div/>",{id:"pll-dialog",style:"display:none;"}).text(t("Are you sure you want to change the language of the current content?","polylang"));languagesList.after(a);const e=new Promise(((e,l)=>{const n=t=>{switch(t){case"yes":languagesList.data("old-value",languagesList.children(":selected")
|
1 |
+
"use strict";const languagesList=jQuery(".post_lang_choice"),initializeConfimationModal=()=>{const{__:t}=wp.i18n,a=jQuery("<div/>",{id:"pll-dialog",style:"display:none;"}).text(t("Are you sure you want to change the language of the current content?","polylang"));languagesList.after(a);const e=new Promise(((e,l)=>{const n=t=>{switch(t){case"yes":languagesList.data("old-value",languagesList.children(":selected").first().val()),e();break;case"no":languagesList.val(languagesList.data("old-value")),l("Cancel")}a.dialog("close")},i={autoOpen:!1,modal:!0,draggable:!1,resizable:!1,title:t("Change language","polylang"),minWidth:600,maxWidth:"100%",open:function(t,a){jQuery("body").hasClass("rtl")&&jQuery(this).parent().css({right:jQuery(this).parent().css("left"),left:"auto"})},close:function(t,a){n("no")},buttons:[{text:t("OK","polylang"),click:function(t){n("yes")}},{text:t("Cancel","polylang"),click:function(t){n("no")}}]};jQuery.ui.version>="1.12.0"?Object.assign(i,{classes:{"ui-dialog":"pll-confirmation-modal"}}):Object.assign(i,{dialogClass:"pll-confirmation-modal"}),a.dialog(i)}));return{dialogContainer:a,dialogResult:e}},initializeLanguageOldValue=()=>{languagesList.attr("data-old-value",languagesList.children(":selected").first().val())};jQuery((function(t){t.ajaxPrefilter((function(a,e,l){var n=t(".post_lang_choice").val();"string"==typeof a.data&&-1!==a.url.indexOf("action=ajax-tag-search")&&n&&(a.data="lang="+n+"&"+a.data)}))})),jQuery((function(t){tagBox.get=function(a){var e=a.substr(a.indexOf("-")+1),l={action:"get-tagcloud",lang:t(".post_lang_choice").val(),tax:e};t.post(ajaxurl,l,(function(l,n){0!=l&&"success"==n||(l=wpAjax.broken),l=t("<div />").addClass("the-tagcloud").attr("id","tagcloud-"+e).html(l),t("a",l).on("click",(function(){return tagBox.flushTags(t(this).closest(".inside").children(".tagsdiv"),this),!1}));var i=t("#tagcloud-"+e).css("display");i?(t("#tagcloud-"+e).replaceWith(l),t("#tagcloud-"+e).css("display",i)):t("#"+a).after(l)}))}})),jQuery((function(t){var a=new Array;function e(){t(".tr_lang").each((function(){var a=t(this).attr("id").substring(8),e=t(this).parent().parent().siblings(".pll-edit-column");t(this).autocomplete({minLength:0,source:ajaxurl+"?action=pll_posts_not_translated&post_language="+t(".post_lang_choice").val()+"&translation_language="+a+"&post_type="+t("#post_type").val()+"&_pll_nonce="+t("#_pll_nonce").val(),select:function(l,n){t("#htr_lang_"+a).val(n.item.id),e.html(n.item.link)}}),t(this).on("blur",(function(){t(this).val()||(t("#htr_lang_"+a).val(0),e.html(e.siblings(".hidden").children().clone()))}))}))}t(".categorydiv").each((function(){var e,l;(e=t(this).attr("id").split("-")).shift(),l=e.join("-"),a.push(l),t("#"+l+"-add-submit").before(t("<input />").attr("type","hidden").attr("id",l+"-lang").attr("name","term_lang_choice").attr("value",t(".post_lang_choice").val()))})),initializeLanguageOldValue(),t(".post_lang_choice").on("change",(function(l){const n=initializeConfimationModal(),{dialogContainer:i}=n;let{dialogResult:s}=n;const o=l.target;t(this).data("old-value")===o.value||function(){const a=t("input#title").val(),e=t("textarea#content").val(),l=t("textarea#excerpt").val();return!a&&!e&&!l}()?s=Promise.resolve():i.dialog("open"),s.then((()=>{var l=o.options[o.options.selectedIndex].lang,n=t('.pll-translation-column > span[lang="'+l+'"]').attr("dir"),i={action:"post_lang_choice",lang:o.value,post_type:t("#post_type").val(),taxonomies:a,post_id:t("#post_ID").val(),_pll_nonce:t("#_pll_nonce").val()};t.post(ajaxurl,i,(function(a){var i=wpAjax.parseAjaxResponse(a,"ajax-response");t.each(i.responses,(function(){switch(this.what){case"translations":t(".translations").html(this.data),e();break;case"taxonomy":var a=this.data;t("#"+a+"checklist").html(this.supplemental.all),t("#"+a+"checklist-pop").html(this.supplemental.populars),t("#new"+a+"_parent").replaceWith(this.supplemental.dropdown),t("#"+a+"-lang").val(t(".post_lang_choice").val());break;case"pages":t("#parent_id").html(this.data);break;case"flag":t(".pll-select-flag").html(this.data);break;case"permalink":var l=t("#edit-slug-box");"-1"!=this.data&&l.children().length&&l.html(this.data)}})),initializeLanguageOldValue(),t(".tagcloud-link").each((function(){var a=t(this).attr("id");tagBox.get(a)})),t("body").removeClass("pll-dir-rtl").removeClass("pll-dir-ltr").addClass("pll-dir-"+n),t("#content_ifr").contents().find("html").attr("lang",l).attr("dir",n),t("#content_ifr").contents().find("body").attr("dir",n),pll.media.resetAllAttachmentsCollections()}))}),(()=>{}))})),e()}));var pll=window.pll||{};_.extend(pll,{media:{}});var media=_.extend(pll.media,{attachmentsCollections:[],query:function(t){var a=pll.media.query.delegate(t);return pll.media.attachmentsCollections.push(a),a},resetAllAttachmentsCollections:function(){this.attachmentsCollections.forEach((function(t){t.reset(),t.mirroring&&(t.mirroring._hasMore=!0,t.mirroring.reset())}))}});"undefined"!=typeof wp&&void 0!==wp.media&&(media.query=_.extend(media.query,{delegate:wp.media.query}),wp.media.query=media.query);
|
js/build/languages-step.js
CHANGED
@@ -271,7 +271,7 @@ jQuery(
|
|
271 |
);
|
272 |
}
|
273 |
// Display language name and flag information in dialog box.
|
274 |
-
$( this ).find( '#dialog-language' ).text( $( '#lang_list' ).children( ':selected' )
|
275 |
// language properties come from the select dropdown #lang_list which is built server side and well escaped.
|
276 |
// see template view-wizard-step-languages.php.
|
277 |
$( this ).find( '#dialog-language-flag' ).empty().prepend( $( '#lang_list' ).children( ':selected' ).data( 'flag-html' ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.prepend
|
271 |
);
|
272 |
}
|
273 |
// Display language name and flag information in dialog box.
|
274 |
+
$( this ).find( '#dialog-language' ).text( $( '#lang_list' ).children( ':selected' ).first().text() );
|
275 |
// language properties come from the select dropdown #lang_list which is built server side and well escaped.
|
276 |
// see template view-wizard-step-languages.php.
|
277 |
$( this ).find( '#dialog-language-flag' ).empty().prepend( $( '#lang_list' ).children( ':selected' ).data( 'flag-html' ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.prepend
|
js/build/languages-step.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery((function(a){var e=a(".languages-step"),n=a("#language-fields"),t=a("#languages"),l=a("#languages tbody"),i=a("#defined-languages tbody"),r=a("#lang_list"),d=a('[name="save_step"]'),s=a("#messages"),o=new Map,g=a("#dialog");function u(e){var i=a("<td />").text(e.text).prepend(e.flagUrl),d=a("<td />").append(a("<span />").addClass("dashicons dashicons-trash").attr("data-language",e.locale).append(a("<span />").addClass("screen-reader-text").text(pll_wizard_params.i18n_remove_language_icon))),s=a("<tr />").prepend(d).prepend(i),g=a("<input />").attr({type:"hidden",name:"languages[]"}).val(e.locale);r.val(""),r.selectmenu("refresh"),o.set(e.locale,e),l.append(s),l.on("click","span[data-language="+e.locale+"]",(function(e){e.preventDefault(),a(this).parents("tr").remove();n.children("input[value="+a(this).data("language")+"]").remove();l.children().length<=0&&t.hide(),o.delete(a(this).data("language")),c()})),n.append(g)}function p(e){s.empty(),s.prepend(a("<p/>").addClass("error").text(e))}function c(){s.empty(),e.find(".error").removeClass("error field-in-error")}function _(a){a.addClass("error field-in-error")}function m(a){a.trigger("focus")}r.on("selectmenuchange",(function(){c()})),a("#add-language").on("click",(function(e){c();var n=e.currentTarget.form.lang_list.options[e.currentTarget.form.lang_list.selectedIndex];if(""===n.value||o.has(n.value)){var l=pll_wizard_params.i18n_no_language_selected;o.has(n.value)&&(l=pll_wizard_params.i18n_language_already_added),p(l),_(r.next("span.ui-selectmenu-button")),m(a("#lang_list-button"))}else u({locale:n.value,text:n.innerText,name:a(n).data("language-name"),flagUrl:a(n).data("flag-html")}),t.show(),m(a("#lang_list-button"))})),e.on("submit",(function(n){var t,l=i.children().length>0,s=a("#lang_list").val();return o.size<=0&&!l?(""===s?(p(pll_wizard_params.i18n_no_language_added),_(r.next("span.ui-selectmenu-button")),m(a("#lang_list-button"))):(p(pll_wizard_params.i18n_add_language_needed),_(r.next("span.ui-selectmenu-button")),m(a("#add-language"))),!1):""!==s?(o.has(s)?(p(pll_wizard_params.i18n_language_already_added),_(r.next("span.ui-selectmenu-button")),m(a("#lang_list-button"))):g.dialog("open"),!1):((t=d).prop("disabled",!0),void e.append(a("<input />").prop({type:"hidden",name:t.prop("name"),value:t.prop("value")})))}));var
|
1 |
+
jQuery((function(a){var e=a(".languages-step"),n=a("#language-fields"),t=a("#languages"),l=a("#languages tbody"),i=a("#defined-languages tbody"),r=a("#lang_list"),d=a('[name="save_step"]'),s=a("#messages"),o=new Map,g=a("#dialog");function u(e){var i=a("<td />").text(e.text).prepend(e.flagUrl),d=a("<td />").append(a("<span />").addClass("dashicons dashicons-trash").attr("data-language",e.locale).append(a("<span />").addClass("screen-reader-text").text(pll_wizard_params.i18n_remove_language_icon))),s=a("<tr />").prepend(d).prepend(i),g=a("<input />").attr({type:"hidden",name:"languages[]"}).val(e.locale);r.val(""),r.selectmenu("refresh"),o.set(e.locale,e),l.append(s),l.on("click","span[data-language="+e.locale+"]",(function(e){e.preventDefault(),a(this).parents("tr").remove();n.children("input[value="+a(this).data("language")+"]").remove();l.children().length<=0&&t.hide(),o.delete(a(this).data("language")),c()})),n.append(g)}function p(e){s.empty(),s.prepend(a("<p/>").addClass("error").text(e))}function c(){s.empty(),e.find(".error").removeClass("error field-in-error")}function _(a){a.addClass("error field-in-error")}function m(a){a.trigger("focus")}r.on("selectmenuchange",(function(){c()})),a("#add-language").on("click",(function(e){c();var n=e.currentTarget.form.lang_list.options[e.currentTarget.form.lang_list.selectedIndex];if(""===n.value||o.has(n.value)){var l=pll_wizard_params.i18n_no_language_selected;o.has(n.value)&&(l=pll_wizard_params.i18n_language_already_added),p(l),_(r.next("span.ui-selectmenu-button")),m(a("#lang_list-button"))}else u({locale:n.value,text:n.innerText,name:a(n).data("language-name"),flagUrl:a(n).data("flag-html")}),t.show(),m(a("#lang_list-button"))})),e.on("submit",(function(n){var t,l=i.children().length>0,s=a("#lang_list").val();return o.size<=0&&!l?(""===s?(p(pll_wizard_params.i18n_no_language_added),_(r.next("span.ui-selectmenu-button")),m(a("#lang_list-button"))):(p(pll_wizard_params.i18n_add_language_needed),_(r.next("span.ui-selectmenu-button")),m(a("#add-language"))),!1):""!==s?(o.has(s)?(p(pll_wizard_params.i18n_language_already_added),_(r.next("span.ui-selectmenu-button")),m(a("#lang_list-button"))):g.dialog("open"),!1):((t=d).prop("disabled",!0),void e.append(a("<input />").prop({type:"hidden",name:t.prop("name"),value:t.prop("value")})))}));var f=new URLSearchParams(document.location.search);function h(n){switch(n){case"yes":var t=a("#lang_list").children(":selected");u({locale:t[0].value,text:t[0].innerText,name:a(t).data("language-name"),flagUrl:a(t).data("flag-html")});break;case"no":r.val("")}g.dialog("close"),"ignore"===n?m(a("#lang_list-button")):e.submit()}f.has("activate_error")&&void 0!==pll_wizard_params[f.get("activate_error")]&&p(pll_wizard_params[f.get("activate_error")]),g.dialog({autoOpen:!1,modal:!0,draggable:!1,resizable:!1,title:pll_wizard_params.i18n_dialog_title,minWidth:600,maxWidth:"100%",open:function(e,n){a("body").hasClass("rtl")&&a(this).parent().css({right:a(this).parent().css("left"),left:"auto"}),a(this).find("#dialog-language").text(a("#lang_list").children(":selected").first().text()),a(this).find("#dialog-language-flag").empty().prepend(a("#lang_list").children(":selected").data("flag-html"))},buttons:[{text:pll_wizard_params.i18n_dialog_yes_button,click:function(a){h("yes")}},{text:pll_wizard_params.i18n_dialog_no_button,click:function(a){h("no")}},{text:pll_wizard_params.i18n_dialog_ignore_button,click:function(a){h("ignore")}}]})}));
|
js/lib/confirmation-modal.js
CHANGED
@@ -29,7 +29,7 @@ export const initializeConfimationModal = () => {
|
|
29 |
switch ( what ) { // phpcs:ignore PEAR.Functions.FunctionCallSignature.Indent
|
30 |
case 'yes':
|
31 |
// Confirm the new language.
|
32 |
-
languagesList.data( 'old-value', languagesList.children( ':selected' )
|
33 |
confirm();
|
34 |
break;
|
35 |
case 'no':
|
@@ -95,5 +95,5 @@ export const initializeConfimationModal = () => {
|
|
95 |
|
96 |
export const initializeLanguageOldValue = () => {
|
97 |
// Keep the old language value to be able to compare to the new one and revert to it if necessary.
|
98 |
-
languagesList.attr( 'data-old-value', languagesList.children( ':selected' )
|
99 |
};
|
29 |
switch ( what ) { // phpcs:ignore PEAR.Functions.FunctionCallSignature.Indent
|
30 |
case 'yes':
|
31 |
// Confirm the new language.
|
32 |
+
languagesList.data( 'old-value', languagesList.children( ':selected' ).first().val() );
|
33 |
confirm();
|
34 |
break;
|
35 |
case 'no':
|
95 |
|
96 |
export const initializeLanguageOldValue = () => {
|
97 |
// Keep the old language value to be able to compare to the new one and revert to it if necessary.
|
98 |
+
languagesList.attr( 'data-old-value', languagesList.children( ':selected' ).first().val() );
|
99 |
};
|
modules/wizard/js/languages-step.js
CHANGED
@@ -271,7 +271,7 @@ jQuery(
|
|
271 |
);
|
272 |
}
|
273 |
// Display language name and flag information in dialog box.
|
274 |
-
$( this ).find( '#dialog-language' ).text( $( '#lang_list' ).children( ':selected' )
|
275 |
// language properties come from the select dropdown #lang_list which is built server side and well escaped.
|
276 |
// see template view-wizard-step-languages.php.
|
277 |
$( this ).find( '#dialog-language-flag' ).empty().prepend( $( '#lang_list' ).children( ':selected' ).data( 'flag-html' ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.prepend
|
271 |
);
|
272 |
}
|
273 |
// Display language name and flag information in dialog box.
|
274 |
+
$( this ).find( '#dialog-language' ).text( $( '#lang_list' ).children( ':selected' ).first().text() );
|
275 |
// language properties come from the select dropdown #lang_list which is built server side and well escaped.
|
276 |
// see template view-wizard-step-languages.php.
|
277 |
$( this ).find( '#dialog-language-flag' ).empty().prepend( $( '#lang_list' ).children( ':selected' ).data( 'flag-html' ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.prepend
|
polylang.php
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
* Plugin Name: Polylang
|
11 |
* Plugin URI: https://polylang.pro
|
12 |
* Description: Adds multilingual capability to WordPress
|
13 |
-
* Version: 3.0.
|
14 |
* Requires at least: 5.1
|
15 |
* Requires PHP: 5.6
|
16 |
* Author: WP SYNTEX
|
@@ -53,7 +53,7 @@ if ( defined( 'POLYLANG_VERSION' ) ) {
|
|
53 |
}
|
54 |
} else {
|
55 |
// Go on loading the plugin
|
56 |
-
define( 'POLYLANG_VERSION', '3.0.
|
57 |
define( 'PLL_MIN_WP_VERSION', '5.1' );
|
58 |
define( 'PLL_MIN_PHP_VERSION', '5.6' );
|
59 |
|
10 |
* Plugin Name: Polylang
|
11 |
* Plugin URI: https://polylang.pro
|
12 |
* Description: Adds multilingual capability to WordPress
|
13 |
+
* Version: 3.0.5
|
14 |
* Requires at least: 5.1
|
15 |
* Requires PHP: 5.6
|
16 |
* Author: WP SYNTEX
|
53 |
}
|
54 |
} else {
|
55 |
// Go on loading the plugin
|
56 |
+
define( 'POLYLANG_VERSION', '3.0.5' );
|
57 |
define( 'PLL_MIN_WP_VERSION', '5.1' );
|
58 |
define( 'PLL_MIN_PHP_VERSION', '5.6' );
|
59 |
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: multilingual, bilingual, translate, translation, language, multilanguage,
|
|
5 |
Requires at least: 5.1
|
6 |
Tested up to: 5.7
|
7 |
Requires PHP: 5.6
|
8 |
-
Stable tag: 3.0.
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
@@ -78,6 +78,15 @@ Don't hesitate to [give your feedback](http://wordpress.org/support/view/plugin-
|
|
78 |
|
79 |
== Changelog ==
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
= 3.0.4 (2021-04-27) =
|
82 |
|
83 |
* Improve performance in the pages (or hierarchical post types) list table
|
5 |
Requires at least: 5.1
|
6 |
Tested up to: 5.7
|
7 |
Requires PHP: 5.6
|
8 |
+
Stable tag: 3.0.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
11 |
|
78 |
|
79 |
== Changelog ==
|
80 |
|
81 |
+
= 3.0.5 (2021-06-08) =
|
82 |
+
|
83 |
+
* Pro: fix original post not assigned to a new translation when the languages sidebar is closed
|
84 |
+
* Pro: Attempt to fix zip file corrupted on some installations when exporting string translations
|
85 |
+
* Support session cookie with the pll_cookie_expiration filter #835
|
86 |
+
* Fix javascript error when a plugin defines its own editor for translated post types #837
|
87 |
+
* Fix languages displayed in screen options when editing a term #850
|
88 |
+
* Cache: fix post type archive cache not cleared when saving a post #828
|
89 |
+
|
90 |
= 3.0.4 (2021-04-27) =
|
91 |
|
92 |
* Improve performance in the pages (or hierarchical post types) list table
|