commit 22abe9ee3d590ab4e0e51507e31f7ff306fcb310
Author: Jonathan Araña Cruz <jonhattan@faita.net>
Date:   Sat Feb 9 14:36:33 2013 +0100

    Rename office_hours form element to office_hours_slot and get rid of _office_hours_get_field_settings()

diff --git a/office_hours.elements.inc b/office_hours.elements.inc
index 0df2b04..aadee32 100644
--- a/office_hours.elements.inc
+++ b/office_hours.elements.inc
@@ -13,54 +13,45 @@
  * Build the form element. When creating a form using FAPI #process,
  * note that $element['#value'] is already set.
  */
-function _office_hours_field_process($element, &$form_state, $form) {
-  $field_settings = _office_hours_get_field_settings($element, $form_state);
-
+function _office_hours_slot_process($element, &$form_state, $form) {
   $day = $element['#weight'];
   $day = (int)($day / 2); // Keys are 0+1 for sunday, 2+3 for monday, etc. Each day may have normal hours + extra hours.
 
-  $field_day = $element['#columns'][0];
-  $field_strhrs = $element['#columns'][1];
-  $field_endhrs = $element['#columns'][2];
   $days = date_week_days_untranslated();
 
   if (!($element['#weight'] & 1)) { //first cell
     $element['#prefix'] = '<div class="office-hours-block"><div class="dayname">' . t($days[$day]) . '</div>';
   }
-  elseif ($field_settings['addhrs']) {  // second cell, we're supposed to show the 'add hours link'
+  elseif ($element['#addhrs']) {  // second cell, we're supposed to show the 'add hours link'
     $link = l(t('Add more hours'), '', array('attributes' => array('class' => 'oh-add-more-link'))) . '<div class="office-hours-block" style = "display:none;">' . '<div class="dayname">' . t('and') . '</div>';
-    $element['#prefix'] = isset($element['#value'][$field_strhrs]) ? '<div class="office-hours-block">' . '<div class="dayname">' . t('and') . '</div>' : $link;
+    $element['#prefix'] = isset($element['#value']['starthours']) ? '<div class="office-hours-block">' . '<div class="dayname">' . t('and') . '</div>' : $link;
   }
   else { //this is the second cell and were not showing it- better clear it (in case a value was entered before).
     $element['#prefix'] = "<div class='oh-hide'>";
-    $element['#value'][$field_strhrs] = '';
+    $element['#value']['starthours'] = '';
   }
   $element['#suffix'] = '</div>';
-  $element[$field_day] = array(
+  $element['day'] = array(
     '#type' => 'value',
     '#value' => $element['#weight'],
   );
-  $element[$field_strhrs] = array(
+  $settings = array(
+    '#granularity' => $element['#granularity'],
+    '#valhrs' => $element['#valhrs'],
+    '#hoursformat' => $element['#hoursformat'],
+    '#limitstart' => $element['#limitstart'],
+    '#limitend' => $element['#limitend'],
+  );
+  $element['starthours'] = array(
     '#type' => 'office_hours_select',
     '#prefix' => ' ' . t('from'),
-    '#default_hours' => isset($element['#value'][$field_strhrs]) ? $element['#value'][$field_strhrs] : '' ,
-    '#granularity' => $field_settings['granularity'],
-    '#valhrs' => $field_settings['valhrs'],
-    '#hoursformat' => $field_settings['hoursformat'],
-    '#limitstart' => $field_settings['limitstart'],
-    '#limitend' => $field_settings['limitend'],
-  );
-  $element[$field_endhrs] = array(
+    '#default_hours' => isset($element['#value']['starthours']) ? $element['#value']['starthours'] : '' ,
+  ) + $settings;
+  $element['endhours'] = array(
     '#type' => 'office_hours_select',
     '#prefix' => t('until'),
-    '#default_hours' => isset($element['#value'][$field_endhrs]) ? $element['#value'][$field_endhrs] : '',
-    '#granularity' => $field_settings['granularity'],
-    '#valhrs' => $field_settings['valhrs'],
-    '#hoursformat' => $field_settings['hoursformat'],
-    '#limitstart' => $field_settings['limitstart'],
-    '#limitend' => $field_settings['limitend'],
-
-  );
+    '#default_hours' => isset($element['#value']['endhours']) ? $element['#value']['endhours'] : '',
+  ) + $settings;
 
   return $element;
 }
@@ -124,26 +115,13 @@ function _office_hours_select_validate($element, &$form_state) {
 }
 
 /**
- * Implements hook_field_is_empty() for hours selection element.
- */
-function office_hours_select_is_empty($item, $field) {
-  if ( ( $item['hours']   == '' || $item['hours']   == '00' )
-    && ( $item['minutes'] == '' || $item['minutes'] == '00' ) ) {
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
  * Implements a callback for _office_hours_elements()
  * which defines the 'office_hours' (day) and 'office_hours_select' (hour) elements.
  *
  * You can find the value in $element['#value'], but better in $form_state['values'],
  * which is set in _office_hours_select_validate().
  */
-function _office_hours_field_validate($element, &$form_state) {
-  $field_settings = _office_hours_get_field_settings($element, $form_state);
-
+function _office_hours_slot_validate($element, &$form_state) {
   $delta = $element['#delta'];
   $item = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
 
@@ -151,14 +129,14 @@ function _office_hours_field_validate($element, &$form_state) {
   if (!empty($item['starthours']) xor !empty($item['endhours']) ) {
     $error_text = 'Both Opening hours and Closing hours must be set.';
   }
-  elseif ( ($field_settings['valhrs']) && ($item['starthours'] > $item['endhours']) ) {
+  elseif ( ($element['#valhrs']) && ($item['starthours'] > $item['endhours']) ) {
     $error_text = 'Closing hours are earlier than opening hours.';
   }
-  elseif (!empty($field_settings['limitstart']) || !empty($field_settings['limitend'])) {
+  elseif (!empty($element['#limitstart']) || !empty($element['#limitend'])) {
     $starthours = (int) substr($item['starthours'], 0, 2);
     $endhours = (int) substr($item['endhours'], 0, 2);
-    if ( ($starthours && $field_settings['limitstart'] > $starthours) || ($endhours && $field_settings['limitend'] < $endhours) ) {
-      $error_text = 'Opening hours are outside limits' . ' (' . $field_settings['limitstart'] . ' - ' . $field_settings['limitend'] . ').';
+    if ( ($starthours && $element['#limitstart'] > $starthours) || ($endhours && $element['#limitend'] < $endhours) ) {
+      $error_text = 'Opening hours are outside limits' . ' (' . $element['#limitstart'] . ' - ' . $element['#limitend'] . ').';
     }
   }
 
@@ -169,24 +147,3 @@ function _office_hours_field_validate($element, &$form_state) {
     form_error($element, check_plain($error_text));
   }
 }
-
-/**
- * Gets the data from an array, to cater for the Profile2 array
- */
-function _office_hours_get_field_settings($element, &$form_state) {
-  if (isset( $form_state['field'][$element['#field_name']]) ) {
-    $field_settings = &$form_state['field'][$element['#field_name']][$element['#language']]['field']['settings'];
-  }
-  else {
-    // This is to cater for the Profile2 edit page.
-    $parents = array_slice($element['#array_parents'], 2, -1);
-    $parents = array('#parents', $element['#array_parents'][0], '#fields');
-    $parents[] = $element['#field_name'];
-    $parents[] = $element['#language'];
-    $parents[] = 'field';
-    $parents[] = 'settings';
-
-    $field_settings = drupal_array_get_nested_value($form_state['field'], $parents);
-  }
-  return $field_settings;
-}
diff --git a/office_hours.module b/office_hours.module
index ce5ad48..fda1075 100644
--- a/office_hours.module
+++ b/office_hours.module
@@ -18,7 +18,7 @@ function office_hours_theme($existing, $type, $theme, $path) {
   $themes = array(
     'office_hours_formatter_default' => $base + array('render element' => 'element'),
     'office_hours_time_range' => $base + array('render element' => 'element'),
-    'office_hours' => $base + array('render element' => 'element'),
+    'office_hours_slot' => $base + array('render element' => 'element'),
     'field_multiple_value_form' => $base + array('render element' => 'element'),
     'office_hours_select' => $base + array('render element' => 'element'),
   );
@@ -587,10 +587,15 @@ function office_hours_field_widget_form(&$form, &$form_state, $field, $instance,
 
   $items = _office_hours_arrange_items($items);
   $element += array(
-    '#type' => 'office_hours',
+    '#type' => 'office_hours_slot',
     '#default_value' => isset($items[$delta]['starthours']) ? $items[$delta] : NULL,
   );
 
+  $field_settings = array('hoursformat', 'granularity', 'addhrs', 'valhrs', 'limitstart', 'limitend');
+  foreach ($field_settings as $key) {
+    $element['#' . $key] = $field['settings'][$key];
+  }
+
   return $element;
 }
 
@@ -608,12 +613,12 @@ function office_hours_field_widget_error($element, $error, $form, &$form_state)
  */
 function office_hours_element_info() {
   return array(
-    'office_hours' => array(
+    'office_hours_slot' => array(
       '#input' => TRUE,
       '#tree' => TRUE,
       '#columns' => array('day', 'starthours', 'endhours'),
-      '#process' => array('_office_hours_field_process'),
-      '#element_validate' => array('_office_hours_field_validate'),
+      '#process' => array('_office_hours_slot_process'),
+      '#element_validate' => array('_office_hours_slot_validate'),
       '#theme' => 'office_hours',
     ),
     'office_hours_select' => array(
diff --git a/office_hours.theme.inc b/office_hours.theme.inc
index 3ccf36f..f773ff9 100644
--- a/office_hours.theme.inc
+++ b/office_hours.theme.inc
@@ -111,7 +111,7 @@ function theme_office_hours_formatter_default($vars) {
   return $HTML;
 }
 
-function theme_office_hours($vars) {
+function theme_office_hours_slot($vars) {
   return $vars['element']['#children'];
 }
 
