Share Pastebin
Guest
Public paste!

CM

By: a guest | Mar 18th, 2010 | Syntax: PHP | Size: 12.18 KB | Hits: 31 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. <?php
  2. // $Id: date.inc,v 1.1.2.3 2009/04/14 06:32:03 robrechtj Exp $
  3.  
  4. /**
  5.  * @file
  6.  * Support file for the CCK Date module.
  7.  */
  8.  
  9. /**
  10.  * Implementation of hook_node_import_fields().
  11.  */
  12. function date_node_import_fields($type) {
  13.   $fields = array();
  14.  
  15.   foreach (node_import_cck_fields($type, 'date') as $fieldname => $fieldinfo) {
  16.     foreach ($fieldinfo['columns'] as $colname => $colinfo) {
  17.       $cck_fieldname = node_import_cck_name($fieldname, $colname);
  18.  
  19.       $fields[$cck_fieldname] = node_import_cck_field_defaults($fieldinfo);
  20.  
  21.       switch ($colname) {
  22.         case 'value':
  23.           $fields[$cck_fieldname]['title'] = $fieldinfo['widget']['label'];
  24.           $fields[$cck_fieldname]['input_format'] = 'date';
  25.           $fields[$cck_fieldname]['date_format'] = $fieldinfo['widget']['type'] == 'date_select' ? DATE_ARRAY : DATE_ISO;
  26.           $fields[$cck_fieldname]['output_format'] = DATE_ISO;
  27.           $fields[$cck_fieldname]['map_required'] = $fieldinfo['required'];
  28.           break;
  29.  
  30.         case 'value2':
  31.           $fields[$cck_fieldname]['title'] = $fieldinfo['widget']['label'] .' - '. t('To date');
  32.           $fields[$cck_fieldname]['input_format'] = 'date';
  33.           $fields[$cck_fieldname]['date_format'] = $fieldinfo['widget']['type'] == 'date_select' ? DATE_ARRAY : DATE_ISO;
  34.           $fields[$cck_fieldname]['output_format'] = DATE_ISO;
  35.           $fields[$cck_fieldname]['map_required'] = $fieldinfo['required'] && ($fieldinfo['todate'] == 'required');
  36.           break;
  37.  
  38.         default:
  39.           $fields[$cck_fieldname]['title'] = t('Unsupported: ') . $fieldinfo['widget']['label'] .' - '. $colname;
  40.           break;
  41.       }
  42.     }
  43.   }
  44.  
  45.   return $fields;
  46. }
  47.  
  48. /**
  49.  * Implementation of hook_node_import_values_alter().
  50.  */
  51.  function date_node_import_values_alter(&$values, $type, $defaults, $options, $fields, $preview) {
  52.   foreach (node_import_cck_fields($type, 'date') as $fieldname => $fieldinfo) {
  53.     foreach ($fieldinfo['columns'] as $colname => $colinfo) {
  54.       $cck_fieldname = node_import_cck_name($fieldname, $colname);
  55.       foreach ($values[$fieldname] as $i => $value) {
  56.      
  57.           /* Get array from (converted) date from file
  58.          NB array includes the timestamp value */
  59.           $date_in = $value[$colname];
  60.           $date_array = date_convert($date_in, DATE_ISO, DATE_ARRAY);
  61.           $timestamp = $date_array[0];
  62.          
  63.           /*Determine format req'd by CCK date widget */
  64.           $format = $fieldinfo['widget']['input_format'];
  65.           if ($format == 'custom') $format = $fieldinfo['widget']['input_format_custom'];
  66.          
  67.           /* Store values in form expected by widget validate functions */
  68.           switch ($fieldinfo['widget']['type']) {
  69.              
  70.               case 'date_pop_up':
  71.               case 'date_pop_up_repeat':
  72.                   $time_format = date_limit_format($format, array('hour', 'minute', 'second'));
  73.                   $date_format = date_limit_format($format, array('year', 'month', 'day'));
  74.                   $date = date($date_format,$timestamp);
  75.                   $time = date($time_format,$timestamp);
  76.                   $values[$fieldname][$i][$colname] = array('date'=>$date,'time'=>$time);
  77.                   break;
  78.               case 'date_text':
  79.                   $date = date($format,$timestamp);
  80.                   $values[$fieldname][$i][$colname] = array('date'=>$date);
  81.                   break;
  82.               case 'date_select':
  83.             case 'date_select_repeat':
  84.                 $values[$fieldname][$i][$colname] = $date_array;
  85.                 break;
  86.           }
  87.        }
  88.     }
  89.   }
  90. }
  91.  
  92.  
  93. /**
  94.  * @file
  95.  * Support file for the CCK Date module.
  96.  */
  97.  
  98. /**
  99.  * Implementation of hook_node_import_fields().
  100.  */
  101. function date_node_import_fields($type)
  102. {
  103.   $fields = array();
  104.  
  105.   foreach (node_import_cck_fields($type, 'date') as $fieldname => $fieldinfo)
  106.   {
  107.     foreach ($fieldinfo['columns'] as $colname => $colinfo)
  108.     {
  109.       $cck_fieldname      = node_import_cck_name($fieldname, $colname);
  110.       $fields[$cck_fieldname]  = node_import_cck_field_defaults($fieldinfo);
  111.  
  112.       switch ($colname)
  113.       {
  114.         case 'value':
  115.           $fields[$cck_fieldname]['title'] = $fieldinfo['widget']['label'];
  116.           $fields[$cck_fieldname]['input_format'] = 'date';
  117.           $fields[$cck_fieldname]['date_format'] = $fieldinfo['widget']['type'] == 'date_select' ? DATE_ARRAY : DATE_ISO;
  118.           $fields[$cck_fieldname]['output_format'] = DATE_ISO;
  119.           $fields[$cck_fieldname]['map_required'] = $fieldinfo['required'];
  120.           break;
  121.  
  122.         case 'value2':
  123.           $fields[$cck_fieldname]['title'] = $fieldinfo['widget']['label'] .' - '. t('To date');
  124.           $fields[$cck_fieldname]['input_format'] = 'date';
  125.           $fields[$cck_fieldname]['date_format'] = $fieldinfo['widget']['type'] == 'date_select' ? DATE_ARRAY : DATE_ISO;
  126.           $fields[$cck_fieldname]['output_format'] = DATE_ISO;
  127.           $fields[$cck_fieldname]['map_required'] = $fieldinfo['required'] && ($fieldinfo['todate'] == 'required');
  128.           break;
  129.  
  130.         default:
  131.           $fields[$cck_fieldname]['title'] = t('Unsupported: ') . $fieldinfo['widget']['label'] .' - '. $colname;
  132.           break;
  133.       }
  134.     }
  135.   }
  136.  
  137.   return $fields;
  138. }
  139.  
  140. /**
  141.  * Implementation of hook_node_import_values_alter().
  142.  */
  143. function date_node_import_values_alter(&$values, $type, $defaults, $options, $fields, $preview)
  144. {
  145.   foreach (node_import_cck_fields($type, 'date') as $fieldname => $fieldinfo)
  146.   {  
  147.     switch ($fieldinfo['widget']['type'])
  148.     {
  149.       // Select List
  150.       default:
  151.       case 'date_select':
  152.         date_node_import_values_alter_date_select($values, $fields, $fieldname, $fieldinfo);
  153.         break;
  154.      
  155.       // Text Field with custom input format
  156.       case 'date_text':
  157.         date_node_import_values_alter_date_text($values, $fields, $fieldname, $fieldinfo);
  158.         break;
  159.        
  160.       // Text Field with Date Pop-up calendar
  161.       case 'date_popup':
  162.         date_node_import_values_alter_date_popup($values, $fields, $fieldname, $fieldinfo);
  163.         break;
  164.        
  165.     }
  166.   }
  167. }
  168.  
  169. function date_node_import_values_alter_date_text(&$values, $fields, $fieldname, $fieldinfo)
  170. {
  171.   foreach ($fieldinfo['columns'] as $colname => $colinfo)
  172.   {  
  173.     // Provide default value if the field has no values.
  174.     if (count($values[$fieldname]) == 0)
  175.     {
  176.       $values[$fieldname] = array();
  177.       $values[$fieldname][0] = array();
  178.       $values[$fieldname][0][$colname]  =
  179.         array
  180.         (
  181.           'date'    => null
  182.         );
  183.     }
  184.        
  185.     else
  186.     {
  187.       foreach ($values[$fieldname] as $i => $value)
  188.       {
  189.         // Get the format that is expected from the pop-up calendar.
  190.         // If a custom format was entered, use it instead.
  191.         if ($fieldinfo['widget']['input_format_custom']) {
  192.           $widgetFormat = $fieldinfo['widget']['input_format_custom'];
  193.         }
  194.         else {
  195.           $widgetFormat = $fieldinfo['widget']['input_format'];
  196.         }
  197.  
  198.         // Remove parts that are not valid for the selected granularity
  199.         $widgetFormat    = date_limit_format($widgetFormat, $fieldinfo['granularity']);
  200.  
  201.         // Get the original value format we need to convert
  202.         $time        = strtotime($value[$colname]);
  203.        
  204.         /* $colname is 'value' in most cases.
  205.          * We trash the original 'value' field and replace it with an array containing the various pieces entered
  206.          * from the 'pop-up calendar'.
  207.          */
  208.         $values[$fieldname][$i][$colname] = array();
  209.         if ($time == FALSE) {
  210.           $values[$fieldname][$i][$colname]['date']  = '';
  211.         }
  212.         else {
  213.           $values[$fieldname][$i][$colname]['date']  = date($widgetFormat, $time);
  214.         }
  215.       }
  216.     }
  217.   }
  218. }
  219.  
  220. function date_node_import_values_alter_date_popup(&$values, $fields, $fieldname, $fieldinfo)
  221. {
  222.   foreach ($fieldinfo['columns'] as $colname => $colinfo)
  223.   {  
  224.     // Provide default value if the field has no values.
  225.     if (count($values[$fieldname]) == 0)
  226.     {
  227.       $values[$fieldname]          = array();
  228.       $values[$fieldname][0]        = array();
  229.       $values[$fieldname][0][$colname]  =
  230.         array
  231.         (
  232.           'date'    => null,
  233.           'time'    => null
  234.         );
  235.     }
  236.    
  237.     else
  238.     {
  239.       foreach ($values[$fieldname] as $i => $value)
  240.       {
  241.         //Timezone is handled separately - just wrap in an array('timezone' => $timezone)
  242.         if ($colname == 'timezone') {
  243.           $values[$fieldname][$i]['timezone'] = array('timezone' => $values[$fieldname][$i]['timezone']);
  244.           continue;
  245.         }
  246.         // Get the format that is expected from the pop-up calendar.
  247.         // If a custom format was entered, use it instead.
  248.         if ($fieldinfo['widget']['input_format_custom']) {
  249.           $widgetFormat = $fieldinfo['widget']['input_format_custom'];
  250.         }
  251.         else {
  252.           $widgetFormat = $fieldinfo['widget']['input_format'];
  253.         }
  254.  
  255.         // Remove parts that are not valid for the selected granularity
  256.         $widgetFormat    = date_limit_format($widgetFormat, $fieldinfo['granularity']);
  257.        
  258.         // Separate the widget format into a date part and a time part
  259.         $widgetFormatPieces  = explode(' - ', $widgetFormat, 2);
  260.         $dateFormat      = $widgetFormatPieces[0];
  261.         $timeFormat      = $widgetFormatPieces[1];
  262.  
  263.         // Get the original value format we need to convert
  264.         $time        = strtotime($value[$colname]);
  265.        
  266.         /* $colname is equal to 'value' in most cases.
  267.          * We trash the original 'value' field and replace it with an array containing the various pieces
  268.          * entered from the 'pop-up calendar'.
  269.          */
  270.         $values[$fieldname][$i][$colname] = array();
  271.         if ($time == FALSE) {
  272.           $values[$fieldname][$i][$colname]['date']  = '';
  273.         }
  274.         else {
  275.           $values[$fieldname][$i][$colname]['date']  = date($dateFormat, $time);
  276.         }
  277.        
  278.         // AM/PM are case sensitive...
  279.         $values[$fieldname][$i][$colname]['time']  = strtoupper(date($timeFormat, $time));
  280.       }
  281.     }
  282.   }
  283. }
  284.  
  285. function date_node_import_values_alter_date_select(&$values, $fields, $fieldname, $fieldinfo)
  286. {
  287.   foreach ($fieldinfo['columns'] as $colname => $colinfo)
  288.   {  
  289.     // Provide default value if the field has no values.
  290.     if (count($values[$fieldname]) == 0)
  291.     {
  292.       $values[$fieldname]          = array();
  293.       $values[$fieldname][0]        = array();
  294.       $values[$fieldname][0][$colname]  =
  295.         array
  296.         (
  297.           'year'    => null,
  298.           'hour'    => 0,
  299.           'minute'  => 0,
  300.           'second'  => 0,
  301.           'month'    => null,
  302.           'day'    => null
  303.         );
  304.     }
  305.    
  306.     else
  307.     {
  308.       $cck_fieldname = node_import_cck_name($fieldname, $colname);
  309.    
  310.       foreach ($values[$fieldname] as $i => $value)
  311.       {
  312.         // TODO: Take into account granularity!
  313.         $values[$fieldname][$i][$colname]      = date_convert(
  314.                                   $value[$colname],
  315.                                   $fields[$cck_fieldname]['output_format'],
  316.                                   $fields[$cck_fieldname]['date_format']);
  317.    
  318.         // Strangely, hours don't appear to be padded the same way for 12-hour...
  319. //        $values[$fieldname][$i][$colname]['hour']  = str_pad(
  320. //                                  $values[$fieldname][$i][$colname]['hour'],
  321. //                                  2,
  322. //                                  "0",
  323. //                                  STR_PAD_LEFT);
  324.    
  325.         $values[$fieldname][$i][$colname]['minute']  = str_pad(
  326.                                   $values[$fieldname][$i][$colname]['minute'],
  327.                                   2,
  328.                                   "0",
  329.                                   STR_PAD_LEFT);
  330.                                  
  331.         $values[$fieldname][$i][$colname]['second']  = str_pad(
  332.                                   $values[$fieldname][$i][$colname]['second'],
  333.                                   2,
  334.                                   "0",
  335.                                   STR_PAD_LEFT);
  336.       }
  337.     }
  338.   }
  339. }