Nejsou správně validovaná povinná pole typu paragraph

Verze pro tiskVerze pro tisk
Modul: 

Je potřeba upravit kód v modulu Paragraphs podle

https://www.drupal.org/project/paragraphs/issues/2558517

=======================

diff --git a/paragraphs.field_widget.inc b/paragraphs.field_widget.inc
index 2aa1331..08fa977 100644
--- a/paragraphs.field_widget.inc
+++ b/paragraphs.field_widget.inc
@@ -144,6 +144,7 @@ function paragraphs_field_multiple_value_form($field, $instance, $langcode, $ite
'#suffix' => '</div>',
'#max_delta' => $max,
'#instance' => $instance,
+ '#element_validate' => array('_paragraphs_multiple_field_validate'),
);

// Add 'add more' button, if not working with a programmed form.
@@ -778,6 +779,60 @@ function paragraphs_add_more_submit($form, &$form_state) {
$form_state['rebuild'] = TRUE;
}

+/**
+ * Form Validation for submitting a node with required paragraph fields.
+ */
+function _paragraphs_multiple_field_validate($elements, &$form_state) {
+ // Check child fields of required paragraphs.
+ if (!empty($elements['#required'])) {
+ $field_values = array();
+ $field_state = field_form_get_state($elements['#field_parents'], $elements['#field_name'], $elements['#language'], $form_state);
+ $field_info = field_info_field($elements['#field_name']);
+
+ if (empty($elements['#parents'])) {
+ // Try top level structure if there are no parents.
+ if (!empty($form_state['values'][$elements['#field_name']][LANGUAGE_NONE])) {
+ $field_values = $form_state['values'][$elements['#field_name']][LANGUAGE_NONE];
+ }
+ }
+ else {
+ // Extract field values.
+ $key_exists = NULL;
+ $field_values_found = drupal_array_get_nested_value($form_state['values'], $elements['#parents'], $key_exists);
+ if ($key_exists) {
+ $field_values = $field_values_found;
+ }
+ }
+
+ if ($field_values) {
+ foreach (array_keys($field_values) as $item_key) {
+ if (!is_numeric($item_key)) {
+ // Remove non field item deltas.
+ unset($field_values[$item_key]);
+ }
+ elseif (isset($field_state['entity'][$item_key])) {
+ // Handle field item entity forms that build new objects in the field
+ // state. Examples: field_collection_item, paragraphs_item.
+ // If this is not set, then the field_is_empty check in
+ // _field_filter_items() fails.
+ $field_values[$item_key] = array(
+ 'entity' => $field_state['entity'][$item_key],
+ );
+ }
+ }
+
+ // Get non-empty items.
+ $field_values = _field_filter_items($field_info, $field_values);
+ }
+
+ if (count($field_values) < 1) {
+ form_error($elements, t('The "!name" field is required', array(
+ '!name' => t($elements['#title']),
+ )));
+ }
+ }
+}
+
/**
* Ajax callback in response to a new empty widget being added to the form.
*
diff --git a/paragraphs.module b/paragraphs.module
index 4c1ce96..c378b0a 100644
--- a/paragraphs.module
+++ b/paragraphs.module
@@ -885,7 +885,13 @@ function paragraphs_field_is_empty($item, $field) {
if (!empty($item['value'])) {
return FALSE;
}
+ elseif (isset($item['entity']) && ($instances = field_info_instances('paragraphs_item', $item['entity']->bundle)) && !empty($instances)) {
+ // With a valid instance we can re-use the "field is empty" hook.
+ return paragraphs_item_is_empty($item['entity']);
+ }
elseif (isset($item['entity'])) {
+ // Because of hook_entity_view_alter, the content comes from a view but not
+ // stored in a field.
return FALSE;
}
return TRUE;