includes/registration.field.inc | 44 ++++++++++---------- includes/registration.forms.inc | 92 ++++++++++++++++++++++------------------- 2 files changed, 72 insertions(+), 64 deletions(-) diff --git a/includes/registration.field.inc b/includes/registration.field.inc index 979233c..8efd70b 100644 --- a/includes/registration.field.inc +++ b/includes/registration.field.inc @@ -43,13 +43,6 @@ function registration_field_info() { 'maximum_spaces' => 1, 'multiple_registrations' => -1, 'from_address' => variable_get('site_mail', ini_get('sendmail_from')), - 'event_date_type' => NULL, - 'event_date_field' => NULL, - 'scheduling_type' => NULL, - 'open_relative' => NULL, - 'close_relative' => NULL, - 'reminder_type' => NULL, - 'reminder_date_relative' => NULL, ), ), ), @@ -102,7 +95,6 @@ function registration_field_instance_settings_form($field, $instance) { // List all parent entity fields suitable for being a relative date. $parent_field_options = array(NULL => t("- None -")); - if (module_exists('date')) { $fields = field_info_fields(); foreach ($fields as $field_name => $f) { @@ -115,21 +107,29 @@ function registration_field_instance_settings_form($field, $instance) { $parent_field_options[$f['field_name']] = $date_field_instance['label']; } } - } - - $form['default_registration_settings']['event']['event_date_field'] = array( - '#type' => "select", - '#title' => "Date field to use for relative dates", - '#options' => $parent_field_options, - '#default_value' => isset($instance['settings']['event_date']['event_date_field']) ? $instance['settings']['event_date']['event_date_field'] : 0, - '#description' => t('Choose a date field that will be used for the calculation of relative dates.'), - '#weight' => 0, - '#states' => array( - 'visible' => array( - ':input[name="event_date_type"]' => array('value' => 'relative'), + + // Override form options so we do not show the field name. + $form['default_registration_settings']['event']['event_date_type']['#options'] = array( + 'inherit' => t('Inherit date from an entity field.'), + 'fixed' => t('Use a fixed date'), + ); + + // Add a date field selection option for field instance forms. + $form['default_registration_settings']['event']['event_date_field'] = array( + '#type' => "select", + '#title' => "Date field to use for relative dates", + '#options' => $parent_field_options, + '#default_value' => isset($default_settings['event_date_field']) ? $default_settings['event_date_field'] : 0, + '#description' => t('Choose a date field that will be used for the calculation of relative dates.'), + '#weight' => 0, + '#states' => array( + 'visible' => array('xor', + array(':input[name="event[event_date_type]"]' => array('value' => 'inherit')), + array(':input[name="instance[settings][default_registration_settings][event][event_date_type]"]' => array('value' => 'inherit')), + ), ), - ), - ); + ); + } $form['hide_register_tab'] = array( '#type' => 'checkbox', diff --git a/includes/registration.forms.inc b/includes/registration.forms.inc index e5194a8..33cc2aa 100644 --- a/includes/registration.forms.inc +++ b/includes/registration.forms.inc @@ -526,6 +526,11 @@ function registration_registrations_broadcast_form_submit($form, &$form_state) { * @see hook_registration_entity_settings() */ function registration_entity_settings_form($form, &$form_state, $settings, $entity_type = NULL, $entity_id = NULL) { + // Convert the values we stored in the settings back to normal values. + foreach($settings['settings'] as $key => $value) { + $settings[$key] = $value; + } + if ($entity_id) { // We'll need this info when we submit the form: $form_state['entity'] = array( @@ -538,11 +543,6 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti if (module_exists('date_popup')) { $date_popup_installed = TRUE; } - // Define the event date options. - $date_relative_options = array( - 'inherit' => t('Inherit date from entity field'), - 'fixed' => t('Use a fixed date'), - ); // Define the date selection options. $date_selection_options = array( 'relative' => t('Relative'), @@ -578,21 +578,19 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti $form['event']['event_date_type'] = array( '#type' => 'radios', '#title' => t('Date format'), - '#default_value' => isset($settings['settings']['event_date_type']) ? $settings['settings']['event_date_type'] : 'inherit', - '#options' => $date_relative_options, - '#description' => t('Choose to use a date relative to the event date, or an absolute date.'), + '#default_value' => isset($settings['event_date_type']) ? $settings['event_date_type'] : 'inherit', + '#options' => array( + 'inherit' => t("Inherit date from entity field '@field'.", array('@field' => isset($settings['event_date_field']) ? $settings['event_date_field'] : NULL)), + 'fixed' => t('Use a fixed date'), + ), + '#description' => t('Choose to load the date from an other entity field, or provide an absolute date.'), ); $form['event']['event_date_field'] = array( - '#type' => 'item', - '#markup' => t('This value is automatically loaded from the parent field'), - '#states' => array( - 'visible' => array( - ':input[name="event_date_type"]' => array('value' => 'absolute'), - ), - ), + '#type' => 'value', + '#value' => isset($settings['event_date_field']) ? $settings['event_date_field'] : 'field_date', ); - + $form['event']['event_date'] = array( '#type' => 'textfield', '#title' => t('Event Date'), @@ -604,15 +602,16 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ), '#default_value' => !empty($settings['event_date']) ? $settings['event_date'] : '', '#states' => array( - 'visible' => array( - ':input[name="event_date_type"]' => array('value' => 'absolute'), + 'visible' => array('xor', + array(':input[name="event[event_date_type]"]' => array('value' => 'fixed')), + array(':input[name="instance[settings][default_registration_settings][event][event_date_type]"]' => array('value' => 'fixed')), ), ), ); if ($date_popup_installed) { $form['event']['event_date']['#type'] = 'date_popup'; $form['event']['event_date']['#date_format'] = 'Y-m-d H:i:s O'; - $form['event']['event_date']['#description'] = t('When to automatically close registrations.. (This uses the !timezone.)', array( + $form['event']['event_date']['#description'] = t('Date of this registrations event. (This uses the !timezone.)', array( '!timezone' => l(t('site default time zone'), 'admin/config/regional/settings'), )); unset($form['event']['event_date']['#maxlength']); @@ -629,7 +628,7 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti $form['scheduling']['scheduling_type'] = array( '#type' => 'radios', '#title' => t('Date format'), - '#default_value' => isset($settings['settings']['scheduling_type']) ? $settings['settings']['scheduling_type'] : 'relative', + '#default_value' => isset($settings['scheduling_type']) ? $settings['scheduling_type'] : 'relative', '#options' => $date_selection_options, '#description' => t('Choose to use a date relative to the event date, or an absolute date.'), ); @@ -639,10 +638,11 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Open Offset'), '#maxlength' => 25, '#description' => t('Open offset.'), - '#default_value' => !empty($settings['settings']['open_relative']) ? $settings['settings']['open_relative'] : '', + '#default_value' => !empty($settings['open_relative']) ? $settings['open_relative'] : '', '#states' => array( - 'visible' => array( - ':input[name="scheduling_type"]' => array('value' => 'relative'), + 'visible' => array('xor', + array(':input[name="scheduling[scheduling_type]"]' => array('value' => 'relative')), + array(':input[name="instance[settings][default_registration_settings][scheduling][scheduling_type]"]' => array('value' => 'relative')), ), ), ); @@ -658,8 +658,9 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ), '#default_value' => !empty($settings['open']) ? $settings['open'] : '', '#states' => array( - 'visible' => array( - ':input[name="scheduling_type"]' => array('value' => 'absolute'), + 'visible' => array('xor', + array(':input[name="scheduling[scheduling_type]"]' => array('value' => 'absolute')), + array(':input[name="instance[settings][default_registration_settings][scheduling][scheduling_type]"]' => array('value' => 'absolute')), ), ), ); @@ -677,10 +678,11 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Close Offset'), '#maxlength' => 25, '#description' => t('Close offset.'), - '#default_value' => !empty($settings['settings']['close_relative']) ? $settings['settings']['close_relative'] : '', + '#default_value' => !empty($settings['close_relative']) ? $settings['close_relative'] : '', '#states' => array( - 'visible' => array( - ':input[name="scheduling_type"]' => array('value' => 'relative'), + 'visible' => array('xor', + array(':input[name="scheduling[scheduling_type]"]' => array('value' => 'relative')), + array(':input[name="instance[settings][default_registration_settings][scheduling][scheduling_type]"]' => array('value' => 'relative')), ), ), ); @@ -696,15 +698,16 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ), '#default_value' => !empty($settings['close']) ? $settings['close'] : '', '#states' => array( - 'visible' => array( - ':input[name="scheduling_type"]' => array('value' => 'absolute'), + 'visible' => array('xor', + array(':input[name="scheduling[scheduling_type]"]' => array('value' => 'absolute')), + array(':input[name="instance[settings][default_registration_settings][scheduling][scheduling_type]"]' => array('value' => 'absolute')), ), ), ); if ($date_popup_installed) { $form['scheduling']['close']['#type'] = 'date_popup'; $form['scheduling']['close']['#date_format'] = 'Y-m-d H:i:s O'; - $form['scheduling']['close']['#description'] = t('When to automatically close registrations.. (This uses the !timezone.)', array( + $form['scheduling']['close']['#description'] = t('When to automatically close registrations. (This uses the !timezone.)', array( '!timezone' => l(t('site default time zone'), 'admin/config/regional/settings'), )); unset($form['scheduling']['close']['#maxlength']); @@ -730,8 +733,9 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Settings'), '#collapsible' => FALSE, '#states' => array( - 'visible' => array( - ':input[name="send_reminder"]' => array('checked' => TRUE), + 'visible' => array('xor', + array(':input[name="reminder[send_reminder]"]' => array('checked' => TRUE)), + array(':input[name="instance[settings][default_registration_settings][reminder][send_reminder]"]' => array('checked' => TRUE)), ), ), ); @@ -739,7 +743,7 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti $form['reminder']['reminder_settings']['reminder_type'] = array( '#type' => 'radios', '#title' => t('Date format'), - '#default_value' => isset($settings['settings']['reminder_type']) ? $settings['settings']['reminder_type'] : 'relative', + '#default_value' => isset($settings['reminder_type']) ? $settings['reminder_type'] : 'relative', '#options' => $date_selection_options, '#description' => t('Choose to use a date relative to the event date, or an absolute date.'), ); @@ -749,10 +753,11 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Reminder Offset'), '#maxlength' => 25, '#description' => t('Reminder offset.'), - '#default_value' => !empty($settings['settings']['reminder_date_relative']) ? $settings['settings']['reminder_date_relative'] : '', + '#default_value' => !empty($settings['reminder_date_relative']) ? $settings['reminder_date_relative'] : '', '#states' => array( - 'visible' => array( - ':input[name="reminder_type"]' => array('value' => 'relative'), + 'visible' => array('xor', + array(':input[name="reminder[reminder_settings][reminder_type]"]' => array('value' => 'relative')), + array(':input[name="instance[settings][default_registration_settings][reminder][reminder_settings][reminder_type]"]' => array('value' => 'relative')), ), ), ); @@ -768,8 +773,9 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ), '#default_value' => !empty($settings['reminder_date']) ? $settings['reminder_date'] : '', '#states' => array( - 'visible' => array( - ':input[name="reminder_type"]' => array('value' => 'absolute'), + 'visible' => array('xor', + array(':input[name="reminder[reminder_settings][reminder_type]"]' => array('value' => 'absolute')), + array(':input[name="instance[settings][default_registration_settings][reminder][reminder_settings][reminder_type]"]' => array('value' => 'absolute')), ), ), ); @@ -983,7 +989,9 @@ function registration_entity_settings_form_submit($form, &$form_state) { * * @return array */ -function registration_convert_form_settings($values, $entity) { +function registration_convert_form_settings($values, $entity_data) { + $entity = entity_load_single($entity_data['entity_type'], $entity_data['entity_id']); + // Add additional settings for relative date processing to settings. $values['settings']['event_date_type'] = isset($values['event']['event_date_type']) ? $values['event']['event_date_type'] : NULL; $values['settings']['event_date_field'] = isset($values['event']['event_date_field']) ? $values['event']['event_date_field'] : NULL; @@ -1011,8 +1019,8 @@ function registration_convert_form_settings($values, $entity) { $fields['event_date'] = date('Y-m-d H:i:s', $event_date); } elseif(!empty($values['event']['event_date_field']) && $values['event']['event_date_type'] == 'inherit') { - $field_name = $values['reminder']['reminder_settings']['reminder_date_field']; - $field_items = field_get_items('node', $entity, $field_name); + $field_name = $values['event']['event_date_field']; + $field_items = field_get_items($entity_data['entity_type'], $entity, $field_name); $offset_date = new DateObject( $field_items[0]['value'], $field_items[0]['timezone_db']