diff --git a/includes/registration.forms.inc b/includes/registration.forms.inc index d931aa1..e0abb58 100644 --- a/includes/registration.forms.inc +++ b/includes/registration.forms.inc @@ -487,8 +487,11 @@ function registration_registrations_broadcast_form_submit($form, &$form_state) { * @param array $form * @param array $form_state * @param array $settings + * The registration settings for the entity. * @param string $entity_type + * The entity type. * @param integer $entity_id + * The entity ID. * * @return array $form * @@ -503,7 +506,7 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ); // Retrieve the date field from the field instance's registration settings. - if($entity_type && $entity_id) { + if ($entity_type && $entity_id) { // See if there was an event date field on the field instance. $entity = entity_load_single($entity_type, $entity_id); list(, , $entity_bundle) = entity_extract_ids($entity_type, $entity); @@ -514,18 +517,13 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti foreach ($registration_instances as $instance) { if (isset($instance['settings']['default_registration_settings']['event']['event_date_field'])) { $date_field_name = $instance['settings']['default_registration_settings']['event']['event_date_field']; - $field_items = field_get_items($entity_type, $entity, $date_field_name); - $offset_date = new DateObject( - $field_items[0]['value'], - $field_items[0]['timezone_db'] - ); - $form['event_date']['#value'] = $offset_date->getTimestamp(); + $form['event_date']['#value'] = registration_get_base_entity_date($entity_type, $entity, $date_field_name); } } } // Convert the values we stored in the settings back to normal values. - foreach($settings['settings'] as $key => $value) { + foreach ($settings['settings'] as $key => $value) { $settings[$key] = $value; } @@ -542,7 +540,8 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti $date_popup_installed = TRUE; } - // If there is no date field and we are not editing the field instance, unset the relative date option. + // If there is no date field and we are not editing the field instance, unset + // the relative date option. $relative_date_disabled = FALSE; if (empty($form['event_date']['#value']) && (!empty($entity_type) && !empty($entity_id))) { $relative_date_disabled = TRUE; @@ -585,7 +584,7 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ), '#description' => t('Choose to use a date relative to the event date, or an absolute date.'), ); - if($relative_date_disabled) { + if ($relative_date_disabled) { $form['scheduling']['scheduling_type']['relative'] = array( '#disabled' => TRUE, '#title' => $form['scheduling']['scheduling_type']['#options']['relative'] . ' - ' . t('This option is disabled because there is no date field selected on this registration field.'), @@ -597,7 +596,8 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Offset for automatic opening of registrations'), '#description' => t("Uses PHP !relative_date_formats relative to the event date. Examples: !examples. You can omit this field if you don't want registrations to !action automatically", array( '!relative_date_formats' => l(t('relative date formats'), 'http://php.net/manual/en/datetime.formats.relative.php'), - '!examples' => "'-1 day', '-2 days 14:00', '-7 weekdays', 'first day of this month'", // These can't be translated. + '!examples' => "'-1 day', '-2 days 14:00', '-7 weekdays', 'first day of this month'", + // Relative date examples can't be translated. '!action' => t('open'), )), '#default_value' => !empty($settings['open_relative']) ? $settings['open_relative'] : '', @@ -640,7 +640,8 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Offset for automatic closing of registrations'), '#description' => t("Uses PHP !relative_date_formats relative to the event date. Examples: !examples. You can omit this field if you don't want registrations to !action automatically", array( '!relative_date_formats' => l(t('relative date formats'), 'http://php.net/manual/en/datetime.formats.relative.php'), - '!examples' => "'-1 day', '-2 days 14:00', '-7 weekdays', 'first day of this month'", // These can't be translated. + '!examples' => "'-1 day', '-2 days 14:00', '-7 weekdays', 'first day of this month'", + // Relative date examples can't be translated. '!action' => t('close'), )), '#default_value' => !empty($settings['close_relative']) ? $settings['close_relative'] : '', @@ -715,7 +716,7 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti ), '#description' => t('Choose to use a date relative to the event date, or an absolute date.'), ); - if($relative_date_disabled) { + if ($relative_date_disabled) { $form['reminder']['reminder_settings']['reminder_type']['relative'] = array( '#disabled' => TRUE, '#title' => $form['reminder']['reminder_settings']['reminder_type']['#options']['relative'] . ' - ' . t('This option is disabled because there is no date field selected on this registration field.'), @@ -727,7 +728,8 @@ function registration_entity_settings_form($form, &$form_state, $settings, $enti '#title' => t('Offset for automatic sending of reminders'), '#description' => t("Uses PHP !relative_date_formats relative to the event date. Examples: !examples. You can omit this field if you don't want registrations to !action automatically", array( '!relative_date_formats' => l(t('relative date formats'), 'http://php.net/manual/en/datetime.formats.relative.php'), - '!examples' => "'-1 day', '-2 days 14:00', '-7 weekdays', 'first day of this month'", // These can't be translated. + '!examples' => "'-1 day', '-2 days 14:00', '-7 weekdays', 'first day of this month'", + // Relative date examples can't be translated. '!action' => t('remind'), )), '#default_value' => !empty($settings['reminder_relative']) ? $settings['reminder_relative'] : '', @@ -944,17 +946,17 @@ function registration_entity_settings_form_validate($form, &$form_state) { } } - // Ensure none of the relative dates is set later then the event date + // Ensure none of the relative dates is set later than the event date. registration_convert_relative_date($relative_open, $form_state['values']['event_date'], $form_state['values']['scheduling']['open_relative']); - if(strtotime($relative_open) > $form_state['values']['event_date']) { + if (strtotime($relative_open) > $form_state['values']['event_date']) { form_set_error('scheduling][open_relative', t('Date is set later then the event date.')); } registration_convert_relative_date($relative_close, $form_state['values']['event_date'], $form_state['values']['scheduling']['close_relative']); - if(strtotime($relative_close) > $form_state['values']['event_date']) { + if (strtotime($relative_close) > $form_state['values']['event_date']) { form_set_error('scheduling][close_relative', t('Date is set later then the event date.')); } registration_convert_relative_date($relative_reminder, $form_state['values']['event_date'], $reminder['reminder_settings']['reminder_relative']); - if(strtotime($relative_reminder) > $form_state['values']['event_date']) { + if (strtotime($relative_reminder) > $form_state['values']['event_date']) { form_set_error('reminder][reminder_settings][reminder_relative', t('Date is set later then the event date.')); } } @@ -1007,7 +1009,7 @@ function registration_convert_form_settings($values, $entity) { if (!empty($values['reminder']['reminder_settings']['reminder_date']) && $values['reminder']['reminder_settings']['reminder_type'] == 'absolute') { $fields['reminder_date'] = date('Y-m-d H:i:s', strtotime($values['reminder']['reminder_settings']['reminder_date'])); } - elseif (!empty($values['reminder']['reminder_settings']['reminder_relative']) && $values['reminder']['reminder_settings']['reminder_type'] == 'relative') { + elseif (!empty($values['reminder']['reminder_settings']['reminder_relative']) && $values['reminder']['reminder_settings']['reminder_type'] == 'relative' && !empty($values['event_date'])) { registration_convert_relative_date($fields['reminder_date'], $values['event_date'], $values['reminder']['reminder_settings']['reminder_relative']); } @@ -1015,7 +1017,7 @@ function registration_convert_form_settings($values, $entity) { if (!empty($values['scheduling']['open']) && $values['scheduling']['scheduling_type'] == 'absolute') { $fields['open'] = date('Y-m-d H:i:s', strtotime($values['scheduling']['open'])); } - elseif (!empty($values['scheduling']['open_relative']) && $values['scheduling']['scheduling_type'] == 'relative') { + elseif (!empty($values['scheduling']['open_relative']) && $values['scheduling']['scheduling_type'] == 'relative' && !empty($values['event_date'])) { registration_convert_relative_date($fields['open'], $values['event_date'], $values['scheduling']['open_relative']); } @@ -1023,7 +1025,7 @@ function registration_convert_form_settings($values, $entity) { if (!empty($values['scheduling']['close']) && $values['scheduling']['scheduling_type'] == 'absolute') { $fields['close'] = date('Y-m-d H:i:s', strtotime($values['scheduling']['close'])); } - elseif (!empty($values['scheduling']['close_relative']) && $values['scheduling']['scheduling_type'] == 'relative') { + elseif (!empty($values['scheduling']['close_relative']) && $values['scheduling']['scheduling_type'] == 'relative' && !empty($values['event_date'])) { registration_convert_relative_date($fields['close'], $values['event_date'], $values['scheduling']['close_relative']); } @@ -1033,12 +1035,15 @@ function registration_convert_form_settings($values, $entity) { /** * Combines a relative date with the event date into a new date value. * - * @param $field Variable to receive the result. - * @param $event_date Date of the event (base date for relative calculations). - * @param $relative_date Relative date. + * @param reference $field + * Reference to the field that will be converted. + * @param string $event_date + * Date of the event (base date for relative calculations). + * @param string $relative_date + * Relative date. */ -function registration_convert_relative_date(&$field, $event_date, $relative_date) { - if(!empty($relative_date)) { +function registration_convert_relative_date(reference &$field, $event_date, $relative_date) { + if (!empty($relative_date)) { $field = date('Y-m-d H:i:s', strtotime($relative_date, $event_date)); } } diff --git a/registration.module b/registration.module index 2a24a26..29303dc 100644 --- a/registration.module +++ b/registration.module @@ -856,14 +856,16 @@ function registration_entity_set_default_settings($entity_type, $entity) { * node) is updated. The purpose of this function is to synchronize all relative * dates when the base entity date (event date) changes. * - * @param $entity_type - * @param $entity + * @param string $entity_type + * The type of entity. + * @param object $entity + * The entity object. */ function registration_entity_update_relative_dates($entity_type, $entity, $settings) { list($entity_id, , $bundle) = entity_extract_ids($entity_type, $entity); $registration_instances = registration_get_registration_instances(array( 'entity_type' => $entity_type, - 'bundle' => $bundle + 'bundle' => $bundle, )); foreach ($registration_instances as $instance) { if (isset($instance['settings']['default_registration_settings'])) { @@ -871,12 +873,7 @@ function registration_entity_update_relative_dates($entity_type, $entity, $setti if (!empty($instance['settings']['default_registration_settings']['event']['event_date_field'])) { // Obtain date field value. $date_field_name = $instance['settings']['default_registration_settings']['event']['event_date_field']; - $field_items = field_get_items($entity_type, $entity, $date_field_name); - $offset_date = new DateObject( - $field_items[0]['value'], - $field_items[0]['timezone_db'] - ); - $event_date = $offset_date->getTimestamp(); + $event_date = registration_get_base_entity_date($entity_type, $entity, $date_field_name); // Store old settings for comparison later. $old_settings = $settings; @@ -887,7 +884,7 @@ function registration_entity_update_relative_dates($entity_type, $entity, $setti registration_convert_relative_date($settings['reminder_date'], $event_date, $settings['settings']['reminder_relative']); // If the date fields were changed, update the registration entity. - if($settings !== $old_settings) { + if ($settings !== $old_settings) { $settings['settings'] = serialize($settings['settings']); registration_update_entity_settings($entity_type, $entity_id, $settings); } @@ -897,6 +894,34 @@ function registration_entity_update_relative_dates($entity_type, $entity, $setti } /** + * Gets the base entity date for registrations that have set a date field. + * + * @param string $entity_type + * The host entity type. + * @param object $entity + * The host entity object. + * @param string $date_field_name + * The name of the date field on the base entity. + * + * @return int|null + * A timestamp for the base entity date, or null if the date is not set. + */ +function registration_get_base_entity_date($entity_type, $entity, $date_field_name) { + $field_items = field_get_items($entity_type, $entity, $date_field_name); + if (!empty($field_items[0])) { + $offset_date = new DateObject( + $field_items[0]['value'], + $field_items[0]['timezone_db'] + ); + $event_timestamp = $offset_date->getTimestamp(); + } + else { + $event_timestamp = NULL; + } + return $event_timestamp; +} + +/** * Implements hook_entity_delete(). */ function registration_entity_delete($entity, $entity_type) {