TRUE,'#process'=>array('expand_datetime'=>array()),'#validate'=>array('date_validate'=>array())); return $type; } /** * Roll out a single datetime element. * * @param $element * Form element with specific keys for influencing the datetime-form * * Each child-element (year,month,day,hour,minute,second) can be configured in its child-element-settings-array( #year,#month,...) via following keys: * #default_value => Default value for child element (e.g. 2007), default: current time's value * #start => start of range value is selected from * #end => end of range value is selected from * #prefix => prefix of element * #suffix => suffix of element - e.g. t('hour') * #weight => determines order for viewing field, default: via site's chosen date format. * #hidden => TRUE if element shold not be viewed, default: FALSE * * The output of format_date can be influenced via #format_date with following keys: * #type => short, medium, large or custom | default: short * #format => custom format * For more information look at drupal function format_date() * * * @return * Form element that outputs different (formatted) datetime: * return value is an array: * array( * 'year' => Value of selected year * 'month' => Value of selected month * 'day' => Value of selected day * 'hour' => Value of selected hour * 'minute' => Value of selected minute * 'second' => Value of selected second * 'timestamp' => timestamp value of selected datetime * 'sql_datetime' => datetime value, like it is saved in sql-tables of selected datetime * 'sql_date' => date value, like it is saved in sql-tables of selected date * 'format_date' => formatted date of selected datetime, with properties of #format_date * ) */ function expand_datetime($element) { //GET (DEFAULT) VALUES if (!is_array($element['#value'])){//First call of Form-Data if (is_numeric($element['#value']) AND $element['#value']>0){ //element's 'default_value has been set as timestamp $element['#value'] = array('day' => format_date($element['#value'], 'custom', 'j'), 'month' => format_date($element['#value'], 'custom', 'n'), 'year' => format_date($element['#value'], 'custom', 'Y'), 'hour' => format_date($element['#value'], 'custom', 'G'), 'minute' => 1*format_date($element['#value'], 'custom', 'i'), 'second' => 1*format_date($element['#value'], 'custom', 's'), ); } else { //element hasn't been set before - will be set by child's default_value ot (if default_value was not set) by current time $element['#value'] = array('day' => variable_get_ifset($element['#day']['#default_value'],format_date(time(), 'custom', 'j')), 'month' => variable_get_ifset($element['#month']['#default_value'],format_date(time(), 'custom', 'n')), 'year' => variable_get_ifset($element['#year']['#default_value'],format_date(time(), 'custom', 'Y')), 'hour' => variable_get_ifset($element['#hour']['#default_value'],format_date(time(), 'custom', 'G')), 'minute' => variable_get_ifset($element['#minute']['#default_value'],1*format_date(time(), 'custom', 'i')), 'second' => variable_get_ifset($element['#second']['#default_value'],1*format_date(time(), 'custom', 's')), ); } } $time = (!is_array($element['#value']) AND is_int($element['#value']) AND $element['#value']>0)?$element['#value']:time(); //Default settings $format = variable_get('date_format_short', 'm/d/Y - H:i:s'); $element['#year']=array( '#start'=>variable_get_ifset($element['#year']['#start'],'1970'), '#end'=>variable_get_ifset($element['#year']['#end'],'2037'), '#hidden'=>variable_get_ifset($element['#year']['#hidden'],FALSE), '#prefix'=>variable_get_ifset($element['#year']['#prefix'],''), '#suffix'=>variable_get_ifset($element['#year']['#suffix'],''), '#weight'=>variable_get_ifset($element['#year']['#weight'],strpos($format, 'Y')), ); $element['#month']=array( '#start'=>variable_get_ifset($element['#month']['#start'],'1'), '#end'=>variable_get_ifset($element['#month']['#end'],'12'), '#hidden'=>variable_get_ifset($element['#month']['#hidden'],FALSE), '#prefix'=>variable_get_ifset($element['#month']['#prefix'],''), '#suffix'=>variable_get_ifset($element['#month']['#suffix'],''), '#weight'=>variable_get_ifset($element['#month']['#weight'],max(strpos($format, 'm'), strpos($format, 'M'))), ); $element['#day']=array( '#start'=>variable_get_ifset($element['#day']['#start'],'1'), '#end'=>variable_get_ifset($element['#day']['#end'],'31'), '#hidden'=>variable_get_ifset($element['#day']['#hidden'],FALSE), '#prefix'=>variable_get_ifset($element['#day']['#prefix'],''), '#suffix'=>variable_get_ifset($element['#day']['#suffix'],''), '#weight'=>variable_get_ifset($element['#day']['#weight'],max(strpos($format, 'd'), strpos($format, 'j'))), ); $element['#hour']=array( '#start'=>variable_get_ifset($element['#hour']['#start'],'0'), '#end'=>variable_get_ifset($element['#hour']['#end'],'23'), '#hidden'=>variable_get_ifset($element['#hour']['#hidden'],FALSE), '#prefix'=>variable_get_ifset($element['#hour']['#prefix'],' - '), '#suffix'=>variable_get_ifset($element['#hour']['#suffix'],t('h')), '#weight'=>variable_get_ifset($element['#hour']['#weight'],max(strpos($format, 'h'), strpos($format, 'H'),strpos($format, 'g'),strpos($format, 'G'))), ); $element['#minute']=array( '#start'=>variable_get_ifset($element['#minute']['#start'],'0'), '#end'=>variable_get_ifset($element['#minute']['#end'],'59'), '#hidden'=>variable_get_ifset($element['#minute']['#hidden'],FALSE), '#prefix'=>variable_get_ifset($element['#minute']['#prefix'],''), '#suffix'=>variable_get_ifset($element['#minute']['#suffix'],t('min.')), '#weight'=>variable_get_ifset($element['#minute']['#weight'],strpos($format, 'i')), ); $element['#second']=array( '#start'=>variable_get_ifset($element['#second']['#start'],'0'), '#end'=>variable_get_ifset($element['#second']['#end'],'59'), '#hidden'=>variable_get_ifset($element['#second']['#hidden'],FALSE), '#prefix'=>variable_get_ifset($element['#second']['#prefix'],''), '#suffix'=>variable_get_ifset($element['#second']['#suffix'],t('sec.')), '#weight'=>variable_get_ifset($element['#second']['#weight'],strpos($format, 's')), ); $element['#tree'] = TRUE; // Determine the order of day, month, year, hour, minute, second in the site's chosen date format. $sort = array(); $sort['day'] = $element['#day']['#weight']; $sort['month'] = $element['#month']['#weight']; $sort['year'] = $element['#year']['#weight']; $sort['hour'] = $element['#hour']['#weight']; $sort['minute'] = $element['#minute']['#weight']; $sort['second'] = $element['#second']['#weight']; asort($sort); $order = array_keys($sort); // Output multi-selector for date. foreach ($order as $type) { switch ($type) { case 'month': $options = drupal_map_assoc(range($element["#$type"]['#start'], $element["#$type"]['#end']), 'map_month'); break; case 'day': case 'year': case 'hour': $options = drupal_map_assoc(range($element["#$type"]['#start'], $element["#$type"]['#end'])); break; case 'minute': case 'second': $options = drupal_map_assoc(range($element["#$type"]['#start'], $element["#$type"]['#end']),'map_fillzero'); break; } $parents = $element['#parents']; $parents[] = $type; if ($element["#$type"]['#hidden']==TRUE){ $element[$type] = array( '#type' => 'textfield', '#value' => $element['#value'][$type], ); } else { $element[$type] = array( '#type' => 'select', '#value' => $element['#value'][$type], '#attributes' => $element['#attributes'], '#options' => $options, '#prefix'=>$element["#$type"]['#prefix'], '#suffix'=>$element["#$type"]['#suffix'], ); } } //ADD TIMESTAMP VALUE $timestamp = @mktime($element['#value']['hour'], $element['#value']['minute'], $element['#value']['second'], $element['#value']['month'], $element['#value']['day'], $element['#value']['year'], -1 ); $element['timestamp'] = array('#type'=>'value','#value'=>$timestamp); //ADD FORMATTED DATE $element['#format_date']=array( '#type' => variable_get_ifset($element['#format_date']['#type'],'short'), '#format' => ($element['#format_date']['#type']=='custom')?variable_get_ifset($element['#format_date']['#format'],$format):'', ); $element['format_date'] = array('#type'=>'value','#value'=>format_date($timestamp,$element['#format_date']['#type'],$element['#format_date']['#format'])); $element['sql_datetime'] = array('#type'=>'value','#value'=>format_date($timestamp,'custom','Y.m.d H:i:s')); $element['sql_date'] = array('#type'=>'value','#value'=>format_date($timestamp,'custom','Y.m.d')); return $element; } function theme_datetime($element){ return theme_date($element); } function map_fillzero($str){ return str_pad($str, 2, 0, STR_PAD_LEFT); } /** * @param $var * variable to be tested * @param $ifnotset * value to return if $var is not set * @return * if $var is set value of $var, if not set=> $ifnotset */ function variable_get_ifset(&$var,$ifnotset=FALSE){ return (isset($var))?$var:$ifnotset; } ?>