From c5a08ae4b7b0a7f32d08a71e047c66c906f7896c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Fr=C3=B6ding?= Date: Sun, 27 Mar 2016 15:19:27 +0200 Subject: [PATCH] adds weekly repeat to times --- timefield.feeds.inc | 106 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 84 insertions(+), 22 deletions(-) diff --git a/timefield.feeds.inc b/timefield.feeds.inc index be6965f..c42fec2 100644 --- a/timefield.feeds.inc +++ b/timefield.feeds.inc @@ -14,18 +14,39 @@ function timefield_feeds_processor_targets_alter(&$targets, $entity_type, $bundl foreach (field_info_instances($entity_type, $bundle_name) as $name => $instance) { $info = field_info_field($name); if ($info['type'] == 'timefield') { - $targets[$name . ':start'] = array( - 'name' => t('@name: Start', array('@name' => $instance['label'])), - 'callback' => 'timefield_feeds_set_target', - 'description' => t('The start time for the @name field. Also use if mapping both start and end.', array('@name' => $instance['label'])), - 'real_target' => $name, - ); - $targets[$name . ':end'] = array( - 'name' => t('@name: End', array('@name' => $instance['label'])), - 'callback' => 'timefield_feeds_set_target', - 'description' => t('The end time for the @name field.', array('@name' => $instance['label'])), - 'real_target' => $name, - ); + // check if it is weekly repeat + if ( $info['settings']['weekly_summary'] == 1 ) { + $week_days = array( + 'mon', + 'tue', + 'wed', + 'thu', + 'fri', + 'sat', + 'sun', + ); + foreach ( $week_days as $day ) { + $targets[$name . ':' . $day] = array( + 'name' => t('@name: ' . $day, array('@name' => $instance['label'])), + 'callback' => 'timefield_feeds_set_target', + 'description' => t('Days on weekly summary', array('@name' => $instance['label'])), + 'real_target' => $name, + ); + } + } else { + $targets[$name . ':start'] = array( + 'name' => t('@name: Start', array('@name' => $instance['label'])), + 'callback' => 'timefield_feeds_set_target', + 'description' => t('The start time for the @name field. Also use if mapping both start and end.', array('@name' => $instance['label'])), + 'real_target' => $name, + ); + $targets[$name . ':end'] = array( + 'name' => t('@name: End', array('@name' => $instance['label'])), + 'callback' => 'timefield_feeds_set_target', + 'description' => t('The end time for the @name field.', array('@name' => $instance['label'])), + 'real_target' => $name, + ); + } } } } @@ -60,19 +81,60 @@ function timefield_feeds_set_target($source, $entity, $target, $element_value, $ // If the field is already set on the given entity, update the existing value // array, otherwise, start with a fresh field value array. $field = isset($entity->$field_name) ? $entity->$field_name : array(); - - // Loop over the field values array - foreach ($element_value as $delta => $value) { - // Make sure we have a valid time before trying to set the value on the field - $date_value = date_parse($value); - if (empty($date_value['error_count'])) { - $parsed_value = timefield_time_to_integer($value); - if ($parsed_value) { - $sub_field = ($sub_field == 'start') ? 'value' : 'value2'; + switch ( $sub_field ) { + case 'start': + case 'end': + // Loop over the field values array + foreach ($element_value as $delta => $value) { + // Make sure we have a valid time before trying to set the value on the field + $date_value = date_parse($value); + if (empty($date_value['error_count'])) { + $parsed_value = timefield_time_to_integer($value); + if ($parsed_value) { + $sub_field = ($sub_field == 'start') ? 'value' : 'value2'; + $language = isset($mapping['language']) ? $mapping['language'] : LANGUAGE_NONE; + $field[$language][$delta][$sub_field] = $parsed_value; + } + } + } + break; + Default: + $delta = 0; + // weekly repeat ... + if ( $element_value != '' ) { + //get start and end date + $times = explode('-',$element_value[0]); + // skip date_parse sine timefield_time_to_integer does it anyway + $start_time = timefield_time_to_integer($times[0]); + $end_time = timefield_time_to_integer($times[1]); + if ( $start_time != 0 AND $end_time != 0 ) { $language = isset($mapping['language']) ? $mapping['language'] : LANGUAGE_NONE; - $field[$language][$delta][$sub_field] = $parsed_value; + $week_days = array( + 'mon' => 0, + 'tue' => 1, + 'wed' => 2, + 'thu' => 3, + 'fri' => 4, + 'sat' => 5, + 'sun' => 6, + ); + // loop through all weekdays so we save it on the right delta + foreach ($week_days as $week_day => $delta) { + // only save when we are on the right day + if ($week_day == $sub_field) { + // create zero values for all days of the week and then replace the one we are saving. + foreach ($week_days as $day => $index) { + $field[$language][$delta][$day] = '0'; + } + $field[$language][$delta][$sub_field] = '1'; + $field[$language][$delta]['value'] = $start_time; + $field[$language][$delta]['value2'] = $end_time; + break; + } + } } } + break; } // Add the field to the entity definition. -- 2.1.4