Forum Replies Created
-
AuthorPosts
-
Mehdi SalemMemberMakes sense, I agree it is quite distracting after all
Mehdi SalemMemberHey Steve, I did not fix the broken site on my network, just created a new site to continue my work bug free…
So the broken site is all yours waiting 🙂
Let me know when you are ready to examine it and I’ll provide you with credentials
October 11, 2015 at 2:26 am in reply to: Pl 0.9.9.2 change in way group add_more fields are saved is breaking custom code #4529
Mehdi SalemMemberSorry, I omitted a
codetag so reposting last part:I admit this is an improvement, it is more intuitive now because data is saved as an add_more serialized array now rather than based on fields first
You might be aware of this already but just in case: this might be a big problem for custom production sites because even if you have a script that’ll update all fields, the tricky part will be each developer custom code…
Perso, as long as this is not going to change again, I’m fine, since I do not have huge stuff in production yet
I support you anyways in this adventure that’ll move us out of beta soon
Cheers!
MY GROUP ADD_MORE FIELDS:
<?php /* Title: Content Post Type: post Order: 20 */ piklist('field', array( 'type' => 'group' ,'field' => 'folder_content_group' ,'label' => __('Gallery Photo','stopping-the-world-admin') ,'description' => __('Add photos to this folder.', 'stopping-the-world-admin') ,'help' => __('Adds a new photo to this gallery folder and sets its availability on the store.','stopping-the-world-admin') ,'add_more' => true ,'fields' => array( array( 'type' => 'file' ,'field' => 'single_photo' ,'label' => __('Photo','stopping-the-world-admin') ,'options' => array( 'modal_title' => __('Add a Photo','stopping-the-world-admin') ,'button' => __('Add','stopping-the-world-admin') ) ,'required' => true /*,'validate' => array( array( 'type' => 'limit', 'options' => array( 'min' => 1, 'max' => 1 ) ) ,array( 'type' => 'image' ) )*/ ) ,array( 'type' => 'text' ,'field' => 'photo_title' ,'label' => __('Title','stopping-the-world-admin') ,'help' => __('Sets the photo title. This will appear bellow the photo and above the description on the Gallery Foolder post.','stopping-the-world-admin') ,'columns' => 7 ,'attributes' => array( 'placeholder' => __('Enter photo title here...', 'stopping-the-world-admin') ) ) ,array( 'type' => 'checkbox' ,'field' => 'store_availability' ,'label' => __('Store Availability','stopping-the-world-admin') ,'help' => __('(Leave unchecked if you do not want to sell this photo.)','stopping-the-world-admin') ,'columns' => 5 ,'choices' => array( 'option1' => 'Sell Stock' ,'option2' => 'Sell Print' ) ) ,array( 'type' => 'textarea' ,'field' => 'photo_description' ,'label' => __('Description','stopping-the-world-admin') ,'help' => __('Sets the photo description. This will appear bellow the photo and its title on the Gallery Folder post.','stopping-the-world-admin') ,'attributes' => array( 'rows' => 5 ,'cols' => 50 ,'placeholder' => __('Describe this photo...', 'stopping-the-world-admin') ,'maxlength' => '320' ) ) ) ));
Mehdi SalemMemberI confirm the presence of the same problem here on a WordPress multisite install…
To fix the issue, I just created another site on the network, exported and imported all content to the new instance, activated my Piklist powered Genesis child theme and the problem seem to have disappeared, I am able now to publish new posts, no more getting stuck on draft status.
Note that I was never prompted by Piklist 0.9.9.2 nor by 0.9.9.1 to run an upgrade script when updating from Piklist 0.9.5v
This is not a production site but I would love to see the upgrade process smooth for when I’ll update my production sites, so if I can be of any help let me know Steve
October 10, 2015 at 3:01 pm in reply to: Image validation broken in some cases: cause + temp fix #4517
Mehdi SalemMemberIt seems my fix works only if no extra field was added using the add_more function… 🙁
I imagined I’d better loop as long as $value will be an array and tested it successfully by implementing another function that would call itself until $value is not an array anymore. See new code bellow.
However it good to notice that if the validate_image function returns true on image validation success (I mean both, your original function and my modified one) I get this: PHP Notice: Undefined index: ID in ../wp-includes/post.php on line 3628
Here is new function, even sketchier than the first one but working 😉
So my fix is replacing the original validate_image function by thiscombination of two functions now and thanks for checking on all this:
public static function validate_image($index, $value, $options, $field, $fields) { $field_value = is_array($value) ? $value : array($value); self::hdev_loop_again_if_array($field_value, $field); return true; } public static function hdev_loop_again_if_array($value, $field) { if(is_array($value)) { $this_class_instance = new self; foreach($value as $val) { $this_class_instance->hdev_loop_again_if_array($val, $field); } } else { $field_value = is_array($value) ? $value : array($value); foreach($field_value as $val) { if ( $field['type'] == 'file' && is_numeric( $val ) ) { $val = wp_get_attachment_url( $val ); } // replaced function exif_imagetype() with getimagesize() -- exif is not active on all servers... getimagesize is less efficient but does the job it seems if ( /*! @exif_imagetype( $value )*/ ! @getimagesize( $val ) ) { return __( 'contains a file that is not an image.', 'piklist' ); } } } }October 10, 2015 at 7:19 am in reply to: Image validation broken in some cases: cause + temp fix #4516
Mehdi SalemMemberSorry, my group add_more fields is not the complete version, emailing all files to [email protected] 🙂
Mehdi SalemMemberHi Steve,
I started testing and I found some issues with image and limit validation.
Since in my view it seems to be related to add_more or group fields rather this topic’s issue, I will open a new thread and post some solutions.
Thaks
Mehdi SalemMemberThanks Steve,
I did re-build my tabs using the new Workflow process.
All seems to be displaying okay now on 0.9.9.2, did not have time to test if fields are saving okay and other functionalities of my custom theme but I will do soon and keep you posted if any pray jumps out of the bushes.Looking forward to testing the backward compatibility when ready
ps: one visual thing I miss though in this new version: the “+” button to add fields for add_more used to be blue… but it has no background anymore in Piklist version 0.9.9.2 — of course I can style it but it feels to me that it should be standard 🙂
Keep up the impeccable work guys.
Cheers!
Mehdi SalemMemberOk Steve, I just emailed you my code as a zipped plugin.
Please confirm that you received it this time
Thanks!
Mehdi SalemMemberOuch…! Will do 🙂
Mehdi SalemMemberSure I understand, I did not realize the code was SO LONG 🙂
Here is it…
I use this code in my Genesis custom child theme, not sure if I’m doing anything wrong but for sure it is working with the Piklist version 0.9.5.v you sent me last time and that I’m using for all my work since then…
Thank you Steve!
Mehdi SalemMemberSorry… here is the code in a proper format:
Hello Guys, so happy that Piklist is getting out beta soon!!! Here is the glitch while testing version 0.9.9.1: My Settings page tabs disappeared and my fields got all mixed pulled on the main... My code is working fine with Piklist 0.9.5.v Her is my code: <?php /** * * Register custom settings pages * */ if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly /** * Allow Editors to customize some of the theme's frontend appearance */ function hdev_piklist_theme_setting_pages($pages) { $pages[] = array( 'page_title' => __('Custom Theme Settings', 'piklist') ,'menu_title' => __('Settings', 'piklist') ,'sub_menu' => 'themes.php' //Under Appearance menu ,'capability' => 'moderate_comments' ,'menu_slug' => 'custom_theme_settings' ,'setting' => 'stopping_the_world_settings' ,'menu_icon' => 'dashicons-admin-settings' ,'page_icon' => plugins_url('piklist/parts/img/piklist-page-icon-32.png') ,'single_line' => true ,'default_tab' => 'General' ,'save_text' => 'Save Theme Settings' ); return $pages; } add_filter('piklist_admin_pages', 'hdev_piklist_theme_setting_pages'); function hdev_custom_capability() { return 'moderate_comments'; // allow users with the capability of "moderate_comments" to SAVE this page. } add_filter('option_page_capability_custom_theme_settings', 'hdev_custom_capability'); ?> <?php /* Title: <br /><span class="hdev-setting-tab-inner-title">Theme Customization</span> Setting: stopping_the_world_settings */ // Set default Values $content_bg = <<<'EOD' background: #dbdbdb; background: -moz-radial-gradient(center, ellipse cover, #dbdbdb 0%, #dbdbdb 25%, #808080 100%); background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #dbdbdb), color-stop(25%, #dbdbdb), color-stop(100%, #808080)); background: -webkit-radial-gradient(center, ellipse cover, #dbdbdb 0%, #dbdbdb 25%, #808080 100%); background: -o-radial-gradient(center, ellipse cover, #dbdbdb 0%, #dbdbdb 25%, #808080 100%); background: -ms-radial-gradient(center, ellipse cover, #dbdbdb 0%, #dbdbdb 25%, #808080 100%); background: radial-gradient(ellipse at center, #dbdbdb 0%, #dbdbdb 25%, #808080 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dbdbdb', endColorstr='#808080', GradientType=1 ); EOD; // Register HTML background color picker field piklist('field', array( 'type' => 'colorpicker' ,'field' => 'html_bg' ,'label' => 'html background' ,'value' => '#262626' ,'description' => '<span class="hdev-desc-top">Click in the box to select a color.</span>' ,'help' => 'Sets the HTML css background color.' ,'attributes' => array( 'class' => 'html-bg' ,'placeholder' => '#262626' ) )); // Register site-container-inner class background gradient color piklist('field', array( 'type' => 'textarea' ,'field' => 'content_bg' ,'label' => 'Content background' ,'description' => '<br /> Enter any valid background css color or gradient code here, or generate one using this great online tool: <a title="Background Generator Tool" alt="Online Background Generator Tool" href="http://www.cssmatic.com/gradient-generator">http://www.cssmatic.com/gradient-generator</a>' ,'help' => 'Sets the content css gradient background.' ,'value' => $content_bg ,'attributes' => array( 'rows' => 10 ,'cols' => 120 ,'class' => 'content-bg' ,'placeholder' => $content_bg ) )); ?> <?php /* Title: <br /><span class="hdev-setting-tab-inner-title">Customize the Galleries Menu pages</span> Setting: stopping_the_world_settings Tab: Galleries Tab Order: 10 */ // Set default Values $folder_info_box_bg = <<<'EOD' background: #ededed; background: -moz-radial-gradient(center, ellipse cover, #ededed 0%, #ededed 1%, #e6e6e6 41%, #cccccc 100%); background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #ededed), color-stop(1%, #ededed), color-stop(41%, #e6e6e6), color-stop(100%, #cccccc)); background: -webkit-radial-gradient(center, ellipse cover, #ededed 0%, #ededed 1%, #e6e6e6 41%, #cccccc 100%); background: -o-radial-gradient(center, ellipse cover, #ededed 0%, #ededed 1%, #e6e6e6 41%, #cccccc 100%); background: -ms-radial-gradient(center, ellipse cover, #ededed 0%, #ededed 1%, #e6e6e6 41%, #cccccc 100%); background: radial-gradient(ellipse at center, #ededed 0%, #ededed 1%, #e6e6e6 41%, #cccccc 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ededed', endColorstr='#cccccc', GradientType=1 ); EOD; // Register the folder info box field group piklist('field', array( 'type' => 'group' ,'field' => 'folder_info_box' ,'label' => __('Folder Info Box','stopping-the-world-admin') ,'fields' => array( array( // Register the info spacing field 'type' => 'text' ,'field' => 'folder_info_spacing' ,'label' => __('Spacing between the Title and the Description', 'stopping-the-world-admin') ,'help' => __('Sets the space between the Folder Title and its Description which appear next to the folder\'s Cover Photo on the Galleries Menu pages. The margin CSS unit used here will be a percentage of the width of the containing box to ensure mobile responsiveness.', 'stopping-the-world-admin') ,'value' => '1' ,'attributes' => array( 'class' => 'number' ,'placeholder' => '1.000' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 25 ) ) ) ) ,array( // Register the info background field 'type' => 'textarea' ,'field' => 'folder_info_box_bg' ,'label' => __('Background', 'stopping-the-world-admin') ,'help' => __('Sets the listed gallery folders\' css gradient background.', 'stopping-the-world-admin') ,'value' => $folder_info_box_bg ,'attributes' => array( 'rows' => 10 ,'cols' => 120 ,'class' => 'gallery-folder-bg' ,'placeholder' => $folder_info_box_bg ) ) ) )); // Register the folder title field group piklist('field', array( 'type' => 'group' ,'field' => 'folder_title' ,'label' => __('Folder Title','stopping-the-world-admin') ,'fields' => array( array( // Register the title font size field 'type' => 'text' ,'field' => 'font_size' ,'label' => __('Font Size <span class="hdev-label-comment">(3 decimals max.)</span>', 'stopping-the-world-admin') ,'help' => 'Sets the font size of the Folder Title which appear next to the folder\'s Cover Photo on the Galleries Menu pages. The CSS unit used here will be in \'em\' and thus will depend on the parent element font size.' ,'value' => '1.89' ,'columns' => 4 ,'attributes' => array( 'class' => 'number' ,'placeholder' => '1.890' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 25 ) ) ) ) ,array( // Register the title line height field 'type' => 'text' ,'field' => 'line_height' ,'label' => __('Line Height <span class="hdev-label-comment">(3 decimals max.)</span>', 'stopping-the-world-admin') ,'help' => 'Sets the line height of the Folder Title which appear next to the folder\'s Cover Photo on the Galleries Menu pages. No CSS unit is used here.' ,'value' => '1.5' ,'columns' => 4 ,'attributes' => array( 'class' => 'number' ,'placeholder' => '1.500' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 25 ) ) ) ) ,array( // Register the title letter spacing field 'type' => 'text' ,'field' => 'letter_spacing' ,'label' => __('Letter spacing <span class="hdev-label-comment">(3 decimals max.)</span>', 'stopping-the-world-admin') ,'help' => 'Sets the letter spacing of the Folder Title which appear next to the folder\'s Cover Photo on the Galleries Menu pages. The CSS unit used here will be in \'em\' and thus will depend on the parent element font size.' ,'value' => '.24' ,'columns' => 4 ,'attributes' => array( 'class' => 'number' ,'placeholder' => '.240' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 10 ) ) ) ) ) )); // Register the folder description field group piklist('field', array( 'type' => 'group' ,'field' => 'folder_desc' ,'label' => __('Folder Description','stopping-the-world-admin') ,'fields' => array( array( // Register the description font size field 'type' => 'text' ,'field' => 'font_size' ,'label' => __('Font Size <span class="hdev-label-comment">(3 decimals max.)</span>', 'stopping-the-world-admin') ,'help' => 'Sets the font size of the Folder description which appear next to the folder\'s Cover Photo on the Galleries Menu pages. The CSS unit used here will be in \'em\' and thus will depend on the parent element font size.' ,'value' => '1.09' ,'columns' => 4 ,'attributes' => array( 'class' => 'number' ,'placeholder' => '1.090' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 25 ) ) ) ) ,array( // Register the description line height field 'type' => 'text' ,'field' => 'line_height' ,'label' => __('Line Height <span class="hdev-label-comment">(3 decimals max.)</span>', 'stopping-the-world-admin') ,'help' => 'Sets the line height of the Folder description which appear next to the folder\'s Cover Photo on the Galleries Menu pages. No CSS unit is used here.' ,'value' => '1.5' ,'columns' => 4 ,'attributes' => array( 'class' => 'number' ,'placeholder' => '1.500' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 25 ) ) ) ) ,array( // Register the description letter spacing field 'type' => 'text' ,'field' => 'letter_spacing' ,'label' => __('Letter spacing <span class="hdev-label-comment">(3 decimals max.)</span>', 'stopping-the-world-admin') ,'help' => 'Sets the letter spacing of the Folder description which appear next to the folder\'s Cover Photo on the Galleries Menu pages. The CSS unit used here will be in \'em\' and thus will depend on the parent element font size.' ,'value' => '.1' ,'columns' => 4 ,'attributes' => array( 'class' => 'number' ,'placeholder' => '.100' ) ,'validate' => array( array( 'type' => 'integer' ,'options' => array( 'decimals' => 3 ) ) ,array( 'type' => 'range' ,'options' => array( 'min' => 0 ,'max' => 10 ) ) ) ) ) )); ?> <?php /* Title: <br /><span class="hdev-setting-tab-inner-title">Customize the Gallery Viewer pages</span> Setting: stopping_the_world_settings Tab: Gallery Tab Order: 20 */ // Register the Gallery Viewer Slider Photo field group piklist('field', array( 'type' => 'group' ,'field' => 'slider_photo' ,'label' => __('Slider Photo','stopping-the-world-admin') ,'fields' => array( array( 'type' => 'group' ,'field' => 'box_shadow' ,'label' => __('Outer Glow','stopping-the-world-admin') ,'add_more' => TRUE ,'fields' => array( array( // Register the outer glow field 'type' => 'text' ,'field' => 'h_shadow' ,'label' => __('h-shadow', 'stopping-the-world-admin') ,'help' => 'Required. The position of the horizontal shadow. Negative values are allowed. The default value is 0px if left empty.' ,'value' => '0px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-h-shadow' ,'placeholder' => '0px' ) ) ,array( // Register the outer glow field 'type' => 'text' ,'field' => 'v_shadow' ,'label' => __('v-shadow', 'stopping-the-world-admin') ,'help' => 'Required. The position of the vertical shadow. Negative values are allowed. The default value is 0px if left empty.' ,'value' => '0px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-v-shadow' ,'placeholder' => '0px' ) ) ,array( // Register the outer glow field 'type' => 'text' ,'field' => 'blur' ,'label' => __('blur', 'stopping-the-world-admin') ,'help' => 'Optional. The blur distance. The default value is 25px if left empty.' ,'value' => '50px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-blur' ,'placeholder' => '50px' ) ) ,array( // Register the outer glow field 'type' => 'text' ,'field' => 'spread' ,'label' => __('spread', 'stopping-the-world-admin') ,'help' => 'Optional. The size of shadow. Negative values are allowed. The default value is 5px if left empty.' ,'value' => '5px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-spread' ,'placeholder' => '5px' ) ) ,array( // Register the outer glow field 'type' => 'colorpicker' ,'field' => 'color' ,'label' => __('color', 'stopping-the-world-admin') ,'help' => 'Optional. The color of the shadow. The default value is white if left empty. Look at CSS Color Values for a complete list of possible color values.' ,'value' => '#ffffff' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-color' ,'placeholder' => '#ffffff' ) ) ) ) ) )); // Register the Gallery Viewer Thumbnail Photo field group piklist('field', array( 'type' => 'group' ,'field' => 'thumb_photo' ,'label' => __('Thumbnail Photo','stopping-the-world-admin') ,'fields' => array( array( 'type' => 'group' ,'field' => 'box_shadow' ,'label' => __('Outer Glow','stopping-the-world-admin') ,'add_more' => TRUE ,'fields' => array( array( // Register the outer glow field 'type' => 'text' ,'field' => 'h_shadow' ,'label' => __('h-shadow', 'stopping-the-world-admin') ,'help' => 'Required. The position of the horizontal shadow. Negative values are allowed. The default value is 0px if left empty.' ,'value' => '0px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-h-shadow' ,'placeholder' => '0px' ) ) ,array( // Register the outer glow field 'type' => 'text' ,'field' => 'v_shadow' ,'label' => __('v-shadow', 'stopping-the-world-admin') ,'help' => 'Required. The position of the vertical shadow. Negative values are allowed. The default value is 0px if left empty.' ,'value' => '0px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-v-shadow' ,'placeholder' => '0px' ) ) ,array( // Register the outer glow field 'type' => 'text' ,'field' => 'blur' ,'label' => __('blur', 'stopping-the-world-admin') ,'help' => 'Optional. The blur distance. The default value is 50px if left empty.' ,'value' => '25px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-blur' ,'placeholder' => '25px' ) ) ,array( // Register the outer glow field 'type' => 'text' ,'field' => 'spread' ,'label' => __('spread', 'stopping-the-world-admin') ,'help' => 'Optional. The size of shadow. Negative values are allowed. The default value is 5px if left empty.' ,'value' => '5px' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-spread' ,'placeholder' => '5px' ) ) ,array( // Register the outer glow field 'type' => 'colorpicker' ,'field' => 'color' ,'label' => __('color', 'stopping-the-world-admin') ,'help' => 'Optional. The color of the shadow. The default value is white if left empty. Look at CSS Color Values for a complete list of possible color values.' ,'value' => '#ffffff' ,'columns' => 2 ,'attributes' => array( 'class' => 'box-shadow-color' ,'placeholder' => '#ffffff' ) ) ) ) ) )); ?>
Mehdi SalemMemberFIX:
Dear Steve,
Same issue here guys and I can tell you: it has been a tricky one to track down…
I think the problem is a very hidden glitch in the Piklist’s scripts running on the posts edit page and that handles dynamically the changes made while adding/removing files and add_mores.
The <input value=”undefined”… problem showed up for me with file uploads AND textarea fields as well in the add_more groups.
Steve, if you have note yet being able to reproduce the hidden input “undefined” values problem, let me know and I will reply with exact steps to witness this on the latest version of Piklist as of today: 0.9.4.27
Awesome framework by the way, Keep up the great work guys!
In the mean time, her is a QUICK FIX to address this issue with jQuery in case somebody can benefit:
Here is how I fixed the issue with a little jQuery script, just add this code after your Piklist header and before your Piklist groups/fields code, using setTimeout in a loop is not elegant but this is the only simple quick way to fix what I consider an annoying issue: (make sure to replace “YOUR_FIELD_GROUP_NAME” to match your actual field names)
_______________________________________________________// YOUR PIKLIST HEADER HERE… for example:
/*
Title: Cover Page Listing
Post Type: sepia,black_and_white,color,conservation
*/// ADD THE FIX HERE (note the closing php tag before the script and the opening tag at the end of the fix)
?><script language="javascript" type="text/javascript"> jQuery( document ).ready(function() { /**** PIKLIST GROUP ADD_MORE HIDDEN INPUT UNDEFINED VALUES BUG FIX: TO OVOID UNDEFINED VALUES TO MESS UP THE SERIALIZED ARRAY STORED IN THE DATABASE ****/ function fixPiklistUndefinedInputVals() { jQuery('.piklist-field-list-item > input[value=undefined]').val(''); jQuery('#_YOUR_FIELD_GROUP_NAME div.piklist-upload-file-preview input[value=undefined]').val(''); setTimeout(fixPiklistUndefinedInputVals, 500); } fixPiklistUndefinedInputVals(); }); </script><?php// ADD YOUR PIKLIST ADD_MORE FIELDS HERE……
…..
_____________________________________________________Also I see that you guys noticed another issue: that we cannot use the limit validation process on add_more groups… So let me know if you need a fix, I wrote a script to solve this too, it will allow you to limit the number of files uploaded per group, not as solid as server side validation but it will make your clients happy and confident 😉
Cheers!
-
AuthorPosts