diff --git a/field_conditional_state.admin.inc b/field_conditional_state.admin.inc index 317fdd8..5ceedc2 100644 --- a/field_conditional_state.admin.inc +++ b/field_conditional_state.admin.inc @@ -116,13 +116,17 @@ function field_conditional_state_settings_form($form, &$form_state, $instance) { '#type' => 'hidden', '#value' => $bundle, ); + $form['type'] = array( + '#type' => 'hidden', + '#value' => $entity_type, + ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Add condition'), '#name' => 'add_condition', ); - $field_conditional_states = field_conditional_state_get_field_conditions($instance['field_name'], $bundle); + $field_conditional_states = field_conditional_state_get_field_conditions($instance['field_name'], $bundle, $entity_type); if (isset($field_conditional_states)) { foreach ($field_conditional_states as $condition_id => $condition_settings) { $trigger_values = array(); @@ -177,13 +181,15 @@ function field_conditional_state_settings_form_validate($form, &$form_state) { $control_field = $form_state['values']['add_field_state']['control_field']; $state_type = $form_state['values']['add_field_state']['state_type']; $bundle = $form_state['values']['bundle']; + $type = $form_state['values']['type']; $query_args = array( - ':field_name' => $target_field, - ':control_field' => $control_field, - ':state' => $state_type, - ':bundle' => $bundle, + ':field_name' => $target_field, + ':control_field' => $control_field, + ':state' => $state_type, + ':bundle' => $bundle, + ':type' => $type ); - $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE field_name = :field_name AND control_field = :control_field AND state = :state AND bundle = :bundle", $query_args)->fetchObject(); + $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE field_name = :field_name AND control_field = :control_field AND state = :state AND bundle = :bundle AND type = :type", $query_args)->fetchObject(); if ($result->count > 0) { form_set_error("add_field_state][state_type", t("You already have this state type between these two fields.")); } @@ -207,6 +213,7 @@ function field_conditional_state_settings_form_submit($form, &$form_state) { else { $target_field = $form_state['values']['trigger_field']; $bundle = $form_state['values']['bundle']; + $type = $form_state['values']['type']; $values = $form_state['values']['add_field_state']; $state_type = $values['state_type']; $control_field = $values['control_field']; @@ -221,6 +228,7 @@ function field_conditional_state_settings_form_submit($form, &$form_state) { 'control_field' => $control_field, 'state' => $state_type, 'bundle' => $bundle, + 'type' => $type, 'trigger_values' => $control_values, 'condition_type' => $condition_type, )) diff --git a/field_conditional_state.install b/field_conditional_state.install index a135176..2912419 100644 --- a/field_conditional_state.install +++ b/field_conditional_state.install @@ -48,6 +48,12 @@ function field_conditional_state_schema() { 'not null' => TRUE, 'description' => 'The bundle type.', ), + 'type' => array( + 'type' => 'varchar', + 'length' => '32', + 'not null' => FALSE, + 'description' => 'The entity type.', + ), 'trigger_values' => array( 'type' => 'text', 'not null' => TRUE, @@ -77,3 +83,11 @@ function field_conditional_state_update_7100() { ); db_change_field('field_conditional_state', 'trigger_values', 'trigger_values', $spec); } +/** +* Updated schema to add entity type field to table +*/ +function field_conditional_state_update_7101(&$sandbox) { + $field_exists = db_field_exists('field_conditional_state', 'type'); + if (!$field_exists) + db_add_field('field_conditional_state', 'type', array('type' => 'varchar', 'length' => '32', 'not null' => FALSE, 'description' => 'The entity type.',)); +} diff --git a/field_conditional_state.module b/field_conditional_state.module index 2b52090..c862a5b 100644 --- a/field_conditional_state.module +++ b/field_conditional_state.module @@ -1,9 +1,19 @@ array( + 'name' => t('Field conditional state'), + 'default_hook' => 'field_conditional_state_default_fields', + 'default_file' => FEATURES_DEFAULTS_INCLUDED, + 'feature_source' => TRUE, + 'file' => drupal_get_path('module', 'field_conditional_state') . '/includes/field_conditional_state.features.inc', + ), + ); +} /** * Implements hook_menu(). @@ -78,21 +88,25 @@ function field_conditional_state_theme($existing, $type, $theme, $path) { */ function field_conditional_state_field_delete_instance($instance) { $bundle = $instance['bundle']; + $type = $instance['entity_type']; $instance_name = $instance['field_name']; $query_args = array( ':bundle' => $bundle, ':field_name' => $instance_name, ':control_field' => $instance_name, + ':type' => $type, ); - $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE bundle = :bundle AND (field_name = :field_name OR control_field = :control_field)", $query_args)->fetchObject(); + $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE type = :type AND bundle = :bundle AND (field_name = :field_name OR control_field = :control_field)", $query_args)->fetchObject(); // Delete conditions for deleted instance. if ($result->count > 0) { $delete_trigger_instance = db_delete('field_conditional_state') ->condition('field_name', $instance_name) + ->condition('type', $type) ->condition('bundle', $bundle) ->execute(); $delete_control_instance = db_delete('field_conditional_state') ->condition('control_field', $instance_name) + ->condition('type', $type) ->condition('bundle', $bundle) ->execute(); } @@ -102,12 +116,13 @@ function field_conditional_state_field_delete_instance($instance) { * Implements hook_field_attach_delete_bundle(). */ function field_conditional_state_field_attach_delete_bundle($entity_type, $bundle, $instances) { - $query_args = array(':bundle' => $bundle); - $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE bundle = :bundle", $query_args)->fetchObject(); + $query_args = array(':bundle' => $bundle, ':type' => $entity_type); + $result = db_query("SELECT count(*) AS count FROM {field_conditional_state} WHERE bundle = :bundle AND type = :type", $query_args)->fetchObject(); // Delete conditions for deleted bundle. if ($result->count > 0) { $delete_trigger_field = db_delete('field_conditional_state') ->condition('bundle', $bundle, '=') + ->condition('type', $entity_type, '=') ->execute(); } } @@ -149,7 +164,7 @@ function field_conditional_state_entity_view($entity, $type, $view_mode, $langco if(!empty($entity->content)) { foreach ($entity->content as $field_name => $field_content) { if (is_array($field_content) && isset($field_content['#bundle'])) { - $field_conditions = field_conditional_state_get_field_conditions($field_name, $field_content['#bundle']); + $field_conditions = field_conditional_state_get_field_conditions($field_name, $field_content['#bundle'], $field_content['#entity_type']); $data = array($type, $view_mode, $langcode); drupal_alter('field_conditional_state_entity_view', $field_conditions, $entity, $data); if ($field_conditions) { @@ -176,7 +191,7 @@ function field_conditional_state_entity_view($entity, $type, $view_mode, $langco * Field Group module. */ function field_conditional_state_module_implements_alter(&$implementations, $hook) { - if ($hook == 'form_alter' && array_key_exists('field_conditional_state', $implementations)) { + if (($hook == 'form_alter' || $hook == 'element_info_alter' || $hook = 'features_api') && array_key_exists('field_conditional_state', $implementations)) { $group = $implementations['field_conditional_state']; unset($implementations['field_conditional_state']); $implementations['field_conditional_state'] = $group; @@ -248,7 +263,7 @@ function field_conditional_state_element_process($element, &$form_state, $form) * so if there are multiple instances of one field (field collections) they can be handled separately */ static $processed_fields = array(); - if (isset($element['#field_name']) && isset($element['#bundle']) && $form['#form_id'] != 'field_ui_field_edit_form') { + if (isset($element['#field_name']) && isset($element['#bundle']) && isset($element['#entity_type']) && $form['#form_id'] != 'field_ui_field_edit_form') { $indexed_field_name = $element['#field_name']; if(!isset($processed_fields[$indexed_field_name]) || count($processed_fields[$indexed_field_name]) == 0) @@ -263,14 +278,14 @@ function field_conditional_state_element_process($element, &$form_state, $form) $path = drupal_get_path('module', 'field_conditional_state'); $element['#attached']['js'][] = "$path/js/conditional_state.js"; $element['#attached']['js'][] = "$path/js/required_conditional_state.js"; - $control_field = field_conditional_state_is_control_field($element['#field_name'], $element['#bundle']); + $control_field = field_conditional_state_is_control_field($element['#field_name'], $element['#bundle'], $element['#entity_type']); // Check if element is control element. if ($control_field) { $element['#prefix'] = '