* * -------------------------------------------- * * This program is free software; you can redistribute it and/or modify it * * under the terms of the GNU General Public License as published by the * * Free Software Foundation; either version 2 of the License, or (at your * * option) any later version. * \**************************************************************************/ /* $Id$ */ /*! @class datefield_widget @abstract widget that reads date in via 3 input-fields @note This widget is independent of the UI as it only uses etemplate-widgets and has therefor no render-function */ class datefield_widget { var $public_functions = array( 'pre_process' => True, 'post_process' => True ); var $human_name = 'DateField'; // this is the name for the editor function datefield_widget($ui) { } function pre_process(&$cell,&$value,&$templ) { if ($cell['size'] != '') { $date = split('[/.-]',$value); $mdy = split('[/.-]',$cell['size']); for ($value=array(),$n = 0; $n < 3; ++$n) { switch($mdy[$n]) { case 'Y': $value['Y'] = $date[$n]; break; case 'm': $value['m'] = $date[$n]; break; case 'd': $value['d'] = $date[$n]; break; } } } else { $value = array( 'Y' => date('Y',$value), 'm' => date('m',$value), 'd' => date('d',$value) ); } $format = split('[/.-]',$GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']); $value = array( 'f1' => $value[$format[0]], 'f2' => $value[$format[1]], 'f3' => $value[$format[2]], 'sep' => $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'][1] ); $cell['size'] = $cell['name']; $cell['type'] = 'template'; $cell['name'] = 'etemplate.datefield'; return True; // extra Label is ok } function post_process(&$cell,&$value,&$templ) { if (!isset($value)) { return False; } $format = split('[/.-]',$GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']); $value = array( $format[0] => $value['f1'], $format[1] => $value['f2'], $format[2] => $value['f3'] ); if ($value['d']) { if (!$value['m']) { $value['m'] = date('m'); } if (!$value['Y']) { $value['Y'] = date('Y'); } elseif ($value['Y'] < 100) { $value['Y'] += $value['Y'] < 30 ? 2000 : 1900; } if ($cell['size'] == '') { $value = mktime(0,0,0,$value['m'],$value['d'],$value['Y']); } else { for ($n = 0,$str = ''; $n < strlen($cell['size']); ++$n) { if (strstr('Ymd',$c = $cell['size'][$n])) { $str .= sprintf($c=='Y'?'%04d':'%02d',$value[$c]); } else { $str .= $c; } } $value = $str; } } else { $value = ''; } return True; } }