Fixed
 - Fixed warning when deleting fields which don't exist
 - Fixed issues with older browsers and the blocks JavaScript
 - Fixed file size & file type validation for front end forms using the basic uploader
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE28mOhcNTKWG2VpmMopKj2zED8Z0FAmD5awIACgkQopKj2zED
 8Z3Pzw/+JF45PF3ePcw2tIDmYzdv/zu9+RHLR3KyWAF2aqWDKnqLDfPxnvIYO2cH
 /UAWOKTNoKhVvYGz8YPK+9RcGGepdcYXtacF6JfNdiM/LV2ixVLny/iAI67vrvVp
 7woWzvxOaVSYYwgFT6RHRj63uUX9syKR4L4IpG+qDWIDasotPKEbx3048y2JG1B7
 RDaA3Zp0Z3AhrqVTJaBjaPbFRbj5dVkU2nG/zylPfSg/Jyauiy2iYXDCZ1ogSo1T
 UtaS3Hfmyn3+WDM0u0owN6Fa1XbbCIdw7v//sk6VMuHodZr/f1jFfRZVGW4fQr+f
 LiOjfn1HmuqwKNHn4VFrAHvUnoNVJrEYigqKHmkhDJZ9ZQ80vNXc927VjTMheFi+
 UVHh/4mKJsLfosah3G1GhW4MZkVvITd5J97jmCl8HSJK1/m2ok+Bh9mDa1Fbvo71
 IIpoY432Pk4523UdMPb+UAlA+HCY3JELnzOfGMqn9K8HaGHGc+S56JJmhram/cCI
 UgwwbTd0vSU41gHb9ZZpByidhFD5otC2yoQNjoSchdoKHVHIvUm00JUPfe0R6ptk
 SmiKLotkd6bMa8y7QI+1klpY+iff8B2jLAwMRfsB9wq78a5/22wljjZCCQBvrrPm
 TCH8is0YCNwby+B3SH9zvhyzC3worzcloYUzbpJvIA46qFPquQI=
 =nfqb
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE28mOhcNTKWG2VpmMopKj2zED8Z0FAmD5awQACgkQopKj2zED
 8Z3XEhAA2WPYEOuPFm4z2Chz7h5YOWyuJQadFUvIKlkmA2Nw1LySdm6X+Ic7R/tl
 CVnh0KwpdCtloixYkgJaQtcwgGTr3OoepXrGH0mMnbjILKNbz/LfEX6dMuC6hbpR
 D75lL3q8j9rNlQw8yI/lB1PjPPD4c1skQqznhFDrYvpYMht41bDCIZVSbyEdBuh5
 g1FYDOHb5ycQS0SogxqSpDchuKoukQhpMbW7uel3wKQTR3ORolM2ZZtyK+QhfKZ3
 A+fotFBZ4cNtVAVGM7evPsHB2DoFo47TGAlx6DW7+bFzkTSXLFWA0W3EaZlYM4mi
 P84F996AqPA2OT5Cbt3fVACLMguz/EwX4KaO+tXw1cNA85tAOOPAAcz3up4r9QAs
 knuDAsFgVy/o3U56JkIcncpuy4ndHGjpArLenoekdERxh3D9c3eE+wF594VZrMYJ
 pLxs0TaVUMbKWwGiwRCejAq3h0/jjsTuX6dYRK/4KUDsy6k+dW5KGNvGNltp/hB1
 +P8U86XJm8oZq8oxFVOmhWEye7U3J2zeYcZil81geALUtD5vM52oUykbMH7aM64S
 vHhlsaNdGuDQSpjqFFxLBTOEQy8iAfehqouPMfV3QM1uj255IvvlZRhpR5M47ISq
 RlCftw/LiZsLwvunmsHgT9/WVdUoj4iMtX7bhpWsTsNgJvd9IS0=
 =LP4E
 -----END PGP SIGNATURE-----

Merge tag '5.9.9' into develop

v5.9.9

Fixed
- Fixed warning when deleting fields which don't exist
- Fixed issues with older browsers and the blocks JavaScript
- Fixed file size & file type validation for front end forms using the basic uploader
This commit is contained in:
Titouan Mathis 2021-07-22 14:56:35 +02:00
commit 1ccd03d0c0
47 changed files with 20781 additions and 17723 deletions

View File

@ -3,7 +3,7 @@
Plugin Name: Advanced Custom Fields PRO Plugin Name: Advanced Custom Fields PRO
Plugin URI: https://www.advancedcustomfields.com Plugin URI: https://www.advancedcustomfields.com
Description: Customize WordPress with powerful, professional and intuitive fields. Description: Customize WordPress with powerful, professional and intuitive fields.
Version: 5.9.8 Version: 5.9.9
Author: Delicious Brains Author: Delicious Brains
Author URI: https://www.advancedcustomfields.com Author URI: https://www.advancedcustomfields.com
Text Domain: acf Text Domain: acf
@ -17,7 +17,7 @@ if( ! class_exists('ACF') ) :
class ACF { class ACF {
/** @var string The plugin version number. */ /** @var string The plugin version number. */
var $version = '5.9.8'; var $version = '5.9.9';
/** @var array The plugin settings array. */ /** @var array The plugin settings array. */
var $settings = array(); var $settings = array();

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,399 +1,480 @@
(function ($) { (function($){
/*
* Repeater /*
* * Repeater
* This field type requires some extra logic for its settings *
* * This field type requires some extra logic for its settings
* @type function *
* @date 24/10/13 * @type function
* @since 5.0.0 * @date 24/10/13
* * @since 5.0.0
* @param n/a *
* @return n/a * @param n/a
*/ * @return n/a
var RepeaterCollapsedFieldSetting = acf.FieldSetting.extend({ */
type: 'repeater',
name: 'collapsed', var RepeaterCollapsedFieldSetting = acf.FieldSetting.extend({
events: { type: 'repeater',
'focus select': 'onFocus' name: 'collapsed',
}, events: {
onFocus: function (e, $el) { 'focus select': 'onFocus',
// vars },
var $select = $el; // collapsed onFocus: function( e, $el ){
var choices = []; // keep 'null' choice // vars
var $select = $el;
choices.push({
label: $select.find('option[value=""]').text(), // collapsed
value: '' var choices = [];
}); // find sub fields
// keep 'null' choice
var $list = this.fieldObject.$('.acf-field-list:first'); choices.push({
var fields = acf.getFieldObjects({ label: $select.find('option[value=""]').text(),
list: $list value: ''
}); // loop });
fields.map(function (field) { // find sub fields
choices.push({ var $list = this.fieldObject.$('.acf-field-list:first');
label: field.prop('label'), var fields = acf.getFieldObjects({
value: field.prop('key') list: $list
}); });
}); // render
// loop
acf.renderSelect($select, choices); fields.map(function( field ){
} choices.push({
}); label: field.prop('label'),
acf.registerFieldSetting(RepeaterCollapsedFieldSetting); value: field.prop('key')
});
});
// render
acf.renderSelect( $select, choices );
}
});
acf.registerFieldSetting( RepeaterCollapsedFieldSetting );
})(jQuery); })(jQuery);
(function($){
(function ($) {
/** /**
* CloneDisplayFieldSetting * CloneDisplayFieldSetting
* *
* Extra logic for this field setting * Extra logic for this field setting
* *
* @date 18/4/18 * @date 18/4/18
* @since 5.6.9 * @since 5.6.9
* *
* @param void * @param void
* @return void * @return void
*/ */
var FlexibleContentLayoutFieldSetting = acf.FieldSetting.extend({
type: 'flexible_content', var FlexibleContentLayoutFieldSetting = acf.FieldSetting.extend({
name: 'fc_layout', type: 'flexible_content',
events: { name: 'fc_layout',
'blur .layout-label': 'onChangeLabel',
'click .add-layout': 'onClickAdd', events: {
'click .duplicate-layout': 'onClickDuplicate', 'blur .layout-label': 'onChangeLabel',
'click .delete-layout': 'onClickDelete' 'click .add-layout': 'onClickAdd',
}, 'click .duplicate-layout': 'onClickDuplicate',
$input: function (name) { 'click .delete-layout': 'onClickDelete'
return $('#' + this.getInputId() + '-' + name); },
},
$list: function () { $input: function( name ){
return this.$('.acf-field-list:first'); return $('#' + this.getInputId() + '-' + name);
}, },
getInputId: function () {
return this.fieldObject.getInputId() + '-layouts-' + this.field.get('id'); $list: function(){
}, return this.$('.acf-field-list:first');
// get all sub fields },
getFields: function () {
return acf.getFieldObjects({ getInputId: function(){
parent: this.$el return this.fieldObject.getInputId() + '-layouts-' + this.field.get('id');
}); },
},
// get imediate children // get all sub fields
getChildren: function () { getFields: function(){
return acf.getFieldObjects({ return acf.getFieldObjects({ parent: this.$el });
list: this.$list() },
});
}, // get imediate children
initialize: function () { getChildren: function(){
// add sortable return acf.getFieldObjects({ list: this.$list() });
var $tbody = this.$el.parent(); },
if (!$tbody.hasClass('ui-sortable')) { initialize: function(){
$tbody.sortable({
items: '> .acf-field-setting-fc_layout', // add sortable
handle: '.reorder-layout', var $tbody = this.$el.parent();
forceHelperSize: true, if( !$tbody.hasClass('ui-sortable') ) {
forcePlaceholderSize: true,
scroll: true, $tbody.sortable({
stop: this.proxy(function (event, ui) { items: '> .acf-field-setting-fc_layout',
this.fieldObject.save(); handle: '.reorder-layout',
}) forceHelperSize: true,
}); forcePlaceholderSize: true,
} // add meta to sub fields scroll: true,
stop: this.proxy(function(event, ui) {
this.fieldObject.save();
this.updateFieldLayouts(); })
}, });
updateFieldLayouts: function () { }
this.getChildren().map(this.updateFieldLayout, this);
}, // add meta to sub fields
updateFieldLayout: function (field) { this.updateFieldLayouts();
field.prop('parent_layout', this.get('id')); },
},
onChangeLabel: function (e, $el) { updateFieldLayouts: function(){
// vars this.getChildren().map(this.updateFieldLayout, this);
var label = $el.val(); },
var $name = this.$input('name'); // render name
updateFieldLayout: function( field ){
if ($name.val() == '') { field.prop('parent_layout', this.get('id'));
acf.val($name, acf.strSanitize(label)); },
}
}, onChangeLabel: function( e, $el ){
onClickAdd: function (e, $el) {
// vars // vars
var prevKey = this.get('id'); var label = $el.val();
var newKey = acf.uniqid('layout_'); // duplicate var $name = this.$input('name');
$layout = acf.duplicate({ // render name
$el: this.$el, if( $name.val() == '' ) {
search: prevKey, acf.val($name, acf.strSanitize(label));
replace: newKey, }
after: function ($el, $el2) { },
// vars
var $list = $el2.find('.acf-field-list:first'); // remove sub fields onClickAdd: function( e, $el ){
$list.children('.acf-field-object').remove(); // show empty // vars
var prevKey = this.get('id');
$list.addClass('-empty'); // reset layout meta values var newKey = acf.uniqid('layout_');
$el2.find('.acf-fc-meta input').val(''); // duplicate
} $layout = acf.duplicate({
}); // get layout $el: this.$el,
search: prevKey,
var layout = acf.getFieldSetting($layout); // update hidden input replace: newKey,
after: function( $el, $el2 ){
layout.$input('key').val(newKey); // save
// vars
this.fieldObject.save(); var $list = $el2.find('.acf-field-list:first');
},
onClickDuplicate: function (e, $el) { // remove sub fields
// vars $list.children('.acf-field-object').remove();
var prevKey = this.get('id');
var newKey = acf.uniqid('layout_'); // duplicate // show empty
$list.addClass('-empty');
$layout = acf.duplicate({
$el: this.$el, // reset layout meta values
search: prevKey, $el2.find('.acf-fc-meta input').val('');
replace: newKey }
}); // get all fields in new layout similar to fieldManager.onDuplicateField(). });
// important to run field.wipe() before making any changes to the "parent_layout" prop
// to ensure the correct input is modified. // get layout
var layout = acf.getFieldSetting( $layout );
var children = acf.getFieldObjects({
parent: $layout // update hidden input
}); layout.$input('key').val( newKey );
if (children.length) { // save
// loop this.fieldObject.save();
children.map(function (child) { },
// wipe field
child.wipe(); // update parent onClickDuplicate: function( e, $el ){
child.updateParent(); // vars
}); // action var prevKey = this.get('id');
var newKey = acf.uniqid('layout_');
acf.doAction('duplicate_field_objects', children, this.fieldObject, this.fieldObject);
} // get layout // duplicate
$layout = acf.duplicate({
$el: this.$el,
var layout = acf.getFieldSetting($layout); // update hidden input search: prevKey,
replace: newKey
layout.$input('key').val(newKey); // save });
this.fieldObject.save(); // get all fields in new layout similar to fieldManager.onDuplicateField().
}, // important to run field.wipe() before making any changes to the "parent_layout" prop
onClickDelete: function (e, $el) { // to ensure the correct input is modified.
// Bypass confirmation when holding down "shift" key. var children = acf.getFieldObjects({ parent: $layout });
if (e.shiftKey) { if( children.length ) {
return this.delete();
} // add class // loop
children.map(function( child ){
this.$el.addClass('-hover'); // add tooltip // wipe field
child.wipe();
var tooltip = acf.newTooltip({
confirmRemove: true, // update parent
target: $el, child.updateParent();
context: this, });
confirm: function () {
this.delete(); // action
}, acf.doAction('duplicate_field_objects', children, this.fieldObject, this.fieldObject);
cancel: function () { }
this.$el.removeClass('-hover');
} // get layout
}); var layout = acf.getFieldSetting( $layout );
},
delete: function () { // update hidden input
// vars layout.$input('key').val( newKey );
var $siblings = this.$el.siblings('.acf-field-setting-fc_layout'); // validate
// save
if (!$siblings.length) { this.fieldObject.save();
alert(acf.__('Flexible Content requires at least 1 layout')); },
return false;
} // delete sub fields onClickDelete: function( e, $el ){
// Bypass confirmation when holding down "shift" key.
this.getFields().map(function (child) { if( e.shiftKey ) {
child.delete({ return this.delete();
animate: false }
});
}); // remove tr // add class
this.$el.addClass('-hover');
acf.remove(this.$el); // save
// add tooltip
this.fieldObject.save(); var tooltip = acf.newTooltip({
} confirmRemove: true,
}); target: $el,
acf.registerFieldSetting(FlexibleContentLayoutFieldSetting); context: this,
/** confirm: function(){
* flexibleContentHelper this.delete();
* },
* description cancel: function(){
* this.$el.removeClass('-hover');
* @date 19/4/18 }
* @since 5.6.9 });
* },
* @param type $var Description. Default.
* @return type Description. delete: function(){
*/
// vars
var flexibleContentHelper = new acf.Model({ var $siblings = this.$el.siblings('.acf-field-setting-fc_layout');
actions: {
'sortstop_field_object': 'updateParentLayout', // validate
'change_field_object_parent': 'updateParentLayout' if( !$siblings.length ) {
}, alert( acf.__('Flexible Content requires at least 1 layout') );
updateParentLayout: function (fieldObject) { return false;
// vars }
var parent = fieldObject.getParent(); // delete meta
// delete sub fields
if (!parent || parent.prop('type') !== 'flexible_content') { this.getFields().map(function( child ){
fieldObject.prop('parent_layout', null); child.delete({
return; animate: false
} // get layout });
});
var $layout = fieldObject.$el.closest('.acf-field-setting-fc_layout'); // remove tr
var layout = acf.getFieldSetting($layout); // check if previous prop exists acf.remove( this.$el );
// - if not, set prop to allow following code to trigger 'change' and save the field
// save
if (!fieldObject.has('parent_layout')) { this.fieldObject.save();
fieldObject.prop('parent_layout', 0); }
} // update meta
});
fieldObject.prop('parent_layout', layout.get('id')); acf.registerFieldSetting( FlexibleContentLayoutFieldSetting );
}
});
/**
* flexibleContentHelper
*
* description
*
* @date 19/4/18
* @since 5.6.9
*
* @param type $var Description. Default.
* @return type Description.
*/
var flexibleContentHelper = new acf.Model({
actions: {
'sortstop_field_object': 'updateParentLayout',
'change_field_object_parent': 'updateParentLayout'
},
updateParentLayout: function( fieldObject ){
// vars
var parent = fieldObject.getParent();
// delete meta
if( !parent || parent.prop('type') !== 'flexible_content' ) {
fieldObject.prop('parent_layout', null);
return;
}
// get layout
var $layout = fieldObject.$el.closest('.acf-field-setting-fc_layout');
var layout = acf.getFieldSetting($layout);
// check if previous prop exists
// - if not, set prop to allow following code to trigger 'change' and save the field
if( !fieldObject.has('parent_layout') ) {
fieldObject.prop('parent_layout', 0);
}
// update meta
fieldObject.prop('parent_layout', layout.get('id'));
}
});
})(jQuery); })(jQuery);
(function($){
(function ($) {
/** /**
* CloneDisplayFieldSetting * CloneDisplayFieldSetting
* *
* Extra logic for this field setting * Extra logic for this field setting
* *
* @date 18/4/18 * @date 18/4/18
* @since 5.6.9 * @since 5.6.9
* *
* @param void * @param void
* @return void * @return void
*/ */
var CloneDisplayFieldSetting = acf.FieldSetting.extend({
type: 'clone', var CloneDisplayFieldSetting = acf.FieldSetting.extend({
name: 'display', type: 'clone',
render: function () { name: 'display',
// vars render: function(){
var display = this.field.val(); // set data attribute used by CSS to hide/show
// vars
this.$fieldObject.attr('data-display', display); var display = this.field.val();
}
}); // set data attribute used by CSS to hide/show
acf.registerFieldSetting(CloneDisplayFieldSetting); this.$fieldObject.attr('data-display', display);
/** }
* ClonePrefixLabelFieldSetting });
*
* Extra logic for this field setting acf.registerFieldSetting( CloneDisplayFieldSetting );
*
* @date 18/4/18
* @since 5.6.9 /**
* * ClonePrefixLabelFieldSetting
* @param void *
* @return void * Extra logic for this field setting
*/ *
* @date 18/4/18
var ClonePrefixLabelFieldSetting = acf.FieldSetting.extend({ * @since 5.6.9
type: 'clone', *
name: 'prefix_label', * @param void
render: function () { * @return void
// vars */
var prefix = ''; // if checked
var ClonePrefixLabelFieldSetting = acf.FieldSetting.extend({
if (this.field.val()) { type: 'clone',
prefix = this.fieldObject.prop('label') + ' '; name: 'prefix_label',
} // update HTML render: function(){
// vars
this.$('code').html(prefix + '%field_label%'); var prefix = '';
}
}); // if checked
acf.registerFieldSetting(ClonePrefixLabelFieldSetting); if( this.field.val() ) {
/** prefix = this.fieldObject.prop('label') + ' ';
* ClonePrefixNameFieldSetting }
*
* Extra logic for this field setting // update HTML
* this.$('code').html( prefix + '%field_label%' );
* @date 18/4/18 }
* @since 5.6.9 });
*
* @param void acf.registerFieldSetting( ClonePrefixLabelFieldSetting );
* @return void
*/
/**
var ClonePrefixNameFieldSetting = acf.FieldSetting.extend({ * ClonePrefixNameFieldSetting
type: 'clone', *
name: 'prefix_name', * Extra logic for this field setting
render: function () { *
// vars * @date 18/4/18
var prefix = ''; // if checked * @since 5.6.9
*
if (this.field.val()) { * @param void
prefix = this.fieldObject.prop('name') + '_'; * @return void
} // update HTML */
var ClonePrefixNameFieldSetting = acf.FieldSetting.extend({
this.$('code').html(prefix + '%field_name%'); type: 'clone',
} name: 'prefix_name',
}); render: function(){
acf.registerFieldSetting(ClonePrefixNameFieldSetting);
/** // vars
* cloneFieldSelectHelper var prefix = '';
*
* Customizes the clone field setting Select2 isntance // if checked
* if( this.field.val() ) {
* @date 18/4/18 prefix = this.fieldObject.prop('name') + '_';
* @since 5.6.9 }
*
* @param void // update HTML
* @return void this.$('code').html( prefix + '%field_name%' );
*/ }
});
var cloneFieldSelectHelper = new acf.Model({
filters: { acf.registerFieldSetting( ClonePrefixNameFieldSetting );
'select2_args': 'select2Args'
},
select2Args: function (options, $select, data, $el, instance) { /**
// check * cloneFieldSelectHelper
if (data.ajaxAction == 'acf/fields/clone/query') { *
// remain open on select * Customizes the clone field setting Select2 isntance
options.closeOnSelect = false; // customize ajaxData function *
* @date 18/4/18
instance.data.ajaxData = this.ajaxData; * @since 5.6.9
} // return *
* @param void
* @return void
return options; */
},
ajaxData: function (data) { var cloneFieldSelectHelper = new acf.Model({
// find current fields filters: {
data.fields = {}; // loop 'select2_args': 'select2Args'
},
acf.getFieldObjects().map(function (fieldObject) {
// append select2Args: function( options, $select, data, $el, instance ){
data.fields[fieldObject.prop('key')] = {
key: fieldObject.prop('key'), // check
type: fieldObject.prop('type'), if( data.ajaxAction == 'acf/fields/clone/query' ) {
label: fieldObject.prop('label'),
ancestors: fieldObject.getParents().length // remain open on select
}; options.closeOnSelect = false;
}); // append title
// customize ajaxData function
data.title = $('#title').val(); // return instance.data.ajaxData = this.ajaxData;
}
return data;
} // return
}); return options;
},
ajaxData: function( data ){
// find current fields
data.fields = {};
// loop
acf.getFieldObjects().map(function(fieldObject){
// append
data.fields[ fieldObject.prop('key') ] = {
key: fieldObject.prop('key'),
type: fieldObject.prop('type'),
label: fieldObject.prop('label'),
ancestors: fieldObject.getParents().length
};
});
// append title
data.title = $('#title').val();
// return
return data;
}
});
})(jQuery); })(jQuery);

File diff suppressed because it is too large Load Diff

0
assets/inc/select2/3/select2-spinner.gif Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

0
assets/inc/select2/3/select2.css vendored Executable file → Normal file
View File

0
assets/inc/select2/3/select2.js vendored Executable file → Normal file
View File

0
assets/inc/select2/3/select2.min.js vendored Executable file → Normal file
View File

0
assets/inc/select2/3/select2.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 525 B

After

Width:  |  Height:  |  Size: 525 B

0
assets/inc/select2/3/select2x2.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

0
assets/inc/select2/4/select2.css vendored Executable file → Normal file
View File

0
assets/inc/select2/4/select2.full.js vendored Executable file → Normal file
View File

0
assets/inc/select2/4/select2.full.min.js vendored Executable file → Normal file
View File

0
assets/inc/select2/4/select2.js vendored Executable file → Normal file
View File

0
assets/inc/select2/4/select2.min.css vendored Executable file → Normal file
View File

0
assets/inc/select2/4/select2.min.js vendored Executable file → Normal file
View File

0
assets/inc/timepicker/jquery-ui-timepicker-addon.css Executable file → Normal file
View File

0
assets/inc/timepicker/jquery-ui-timepicker-addon.js vendored Executable file → Normal file
View File

0
assets/inc/timepicker/jquery-ui-timepicker-addon.min.css vendored Executable file → Normal file
View File

0
assets/inc/timepicker/jquery-ui-timepicker-addon.min.js vendored Executable file → Normal file
View File

View File

@ -80,7 +80,7 @@ if( $tabs === false ) {
} ?> } ?>
<?php if ( ! defined( 'ACF_PRO' ) || ! ACF_PRO ) : ?> <?php if ( ! defined( 'ACF_PRO' ) || ! ACF_PRO ) : ?>
<a href="https://www.advancedcustomfields.com/pro/?utm_source=ACF%2BFree&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade" class="btn-upgrade"> <a target="_blank" href="https://www.advancedcustomfields.com/pro/?utm_source=ACF%2BFree&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade" class="btn-upgrade">
<img src="<?php echo acf_get_url('assets/images/icon-upgrade-pro.svg' ); ?>" /> <img src="<?php echo acf_get_url('assets/images/icon-upgrade-pro.svg' ); ?>" />
<p><?php _e('Upgrade to Pro', 'acf'); ?></p> <p><?php _e('Upgrade to Pro', 'acf'); ?></p>
</a> </a>

View File

@ -3478,7 +3478,8 @@ function acf_validate_attachment( $attachment, $field, $context = 'prepare' ) {
// prepare // prepare
} elseif( $context == 'prepare' ) { } elseif( $context == 'prepare' ) {
$file['type'] = pathinfo($attachment['filename'], PATHINFO_EXTENSION); $use_path = isset($attachment['filename']) ? $attachment['filename'] : $attachment['url'];
$file['type'] = pathinfo($use_path, PATHINFO_EXTENSION);
$file['size'] = acf_maybe_get($attachment, 'filesizeInBytes', 0); $file['size'] = acf_maybe_get($attachment, 'filesizeInBytes', 0);
$file['width'] = acf_maybe_get($attachment, 'width', 0); $file['width'] = acf_maybe_get($attachment, 'width', 0);
$file['height'] = acf_maybe_get($attachment, 'height', 0); $file['height'] = acf_maybe_get($attachment, 'height', 0);
@ -3487,7 +3488,8 @@ function acf_validate_attachment( $attachment, $field, $context = 'prepare' ) {
} else { } else {
$file = array_merge($file, $attachment); $file = array_merge($file, $attachment);
$file['type'] = pathinfo($attachment['filename'], PATHINFO_EXTENSION); $use_path = isset($attachment['filename']) ? $attachment['filename'] : $attachment['url'];
$file['type'] = pathinfo($use_path, PATHINFO_EXTENSION);
} }

View File

@ -1041,7 +1041,7 @@ function delete_field( $selector, $post_id = false ) {
// delete // delete
return acf_delete_value( $post_id, $field ); return $field ? acf_delete_value( $post_id, $field ) : false;
} }

0
includes/fields.php Executable file → Normal file
View File

0
includes/fields/class-acf-field.php Executable file → Normal file
View File

0
includes/local-meta.php Executable file → Normal file
View File

0
lang/acf-ar.mo Executable file → Normal file
View File

0
lang/acf-cs_CZ.mo Executable file → Normal file
View File

0
lang/acf-de_CH.mo Executable file → Normal file
View File

0
lang/acf-de_DE.mo Executable file → Normal file
View File

0
lang/acf-de_DE_formal.mo Executable file → Normal file
View File

0
lang/acf-fr_FR.mo Executable file → Normal file
View File

0
lang/acf-id_ID.mo Executable file → Normal file
View File

0
lang/acf-it_IT.mo Executable file → Normal file
View File

0
lang/acf-ja.mo Executable file → Normal file
View File

0
lang/acf-pt_BR.mo Executable file → Normal file
View File

0
lang/acf-sk_SK.mo Executable file → Normal file
View File

View File

@ -16,7 +16,7 @@ $readonly = $active ? 1 : 0;
<h3><?php _e('License Information', 'acf'); ?></h3> <h3><?php _e('License Information', 'acf'); ?></h3>
</div> </div>
<div class="inner"> <div class="inner">
<p><?php printf(__('To unlock updates, please enter your license key below. If you don\'t have a licence key, please see <a href="%s" target="_blank">details & pricing</a>.','acf'), esc_url('https://www.advancedcustomfields.com/pro')); ?></p> <p><?php printf(__('To unlock updates, please enter your license key below. If you don\'t have a licence key, please see <a href="%s" target="_blank">details & pricing</a>.','acf'), esc_url('https://www.advancedcustomfields.com/pro/?utm_source=ACF%2Bpro%2Bplugin&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade&utm_content=license%2Bactivations')); ?></p>
<form action="" method="post"> <form action="" method="post">
<?php acf_nonce_input( $nonce ); ?> <?php acf_nonce_input( $nonce ); ?>
<table class="form-table"> <table class="form-table">

0
pro/blocks.php Executable file → Normal file
View File

0
pro/locations/class-acf-location-block.php Executable file → Normal file
View File

View File

@ -94,7 +94,7 @@ class acf_pro_updates {
// display message // display message
echo '<br />' . sprintf( __('To enable updates, please enter your license key on the <a href="%s">Updates</a> page. If you don\'t have a licence key, please see <a href="%s">details & pricing</a>.', 'acf'), admin_url('edit.php?post_type=acf-field-group&page=acf-settings-updates'), 'https://www.advancedcustomfields.com/pro' ); echo '<br />' . sprintf( __('To enable updates, please enter your license key on the <a href="%s">Updates</a> page. If you don\'t have a licence key, please see <a href="%s" target="_blank">details & pricing</a>.', 'acf'), admin_url('edit.php?post_type=acf-field-group&page=acf-settings-updates'), 'https://www.advancedcustomfields.com/pro/?utm_source=ACF%2Bpro%2Bplugin&utm_medium=insideplugin&utm_campaign=ACF%2Bupgrade&utm_content=updates' );
} }

View File

@ -2,8 +2,9 @@
Contributors: elliotcondon Contributors: elliotcondon
Tags: acf, fields, custom fields, meta, repeater Tags: acf, fields, custom fields, meta, repeater
Requires at least: 4.7 Requires at least: 4.7
Tested up to: 5.7 Tested up to: 5.8
Requires PHP: 5.6 Requires PHP: 5.6
Stable tag: 5.9.9
License: GPLv2 or later License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html License URI: https://www.gnu.org/licenses/gpl-2.0.html
@ -65,6 +66,13 @@ From your WordPress dashboard
== Changelog == == Changelog ==
= 5.9.9 =
*Release Date - 20 July 2021*
* Fix - Fixed warning when deleting fields which don't exist
* Fix - Fixed issues with older browsers and the blocks JavaScript
* Fix - Fixed file size & file type validation for front end forms using the basic uploader
= 5.9.8 = = 5.9.8 =
*Release Date - 08 July 2021* *Release Date - 08 July 2021*