@@ -428,6 +428,20 @@ function getHTML($record, $tab, $action = 'NEW') {
428428 }
429429 $ new_record [$ key ] = $ out ;
430430 break ;
431+
432+ case 'DATETIME ' :
433+ if (strtotime ($ val ) !== false ) {
434+ $ dt_value = $ val ;
435+ } elseif ( isset ($ field ['default ' ]) && (strtotime ($ field ['default ' ]) !== false ) ) {
436+ $ dt_value = $ field ['default ' ];
437+ } else {
438+ $ dt_value = 0 ;
439+ }
440+
441+ $ display_seconds = (isset ($ field ['display_seconds ' ]) && $ field ['display_seconds ' ] == true ) ? true : false ;
442+
443+ $ new_record [$ key ] = $ this ->_getDateTimeHTML ($ key , $ dt_value , $ display_seconds );
444+ break ;
431445
432446 default :
433447 $ new_record [$ key ] = htmlspecialchars ($ record [$ key ]);
@@ -520,6 +534,13 @@ function getHTML($record, $tab, $action = 'NEW') {
520534 }
521535 $ new_record [$ key ] = $ out ;
522536 break ;
537+
538+ case 'DATETIME ' :
539+ $ dt_value = (isset ($ field ['default ' ])) ? $ field ['default ' ] : 0 ;
540+ $ display_seconds = (isset ($ field ['display_seconds ' ]) && $ field ['display_seconds ' ] == true ) ? true : false ;
541+
542+ $ new_record [$ key ] = $ this ->_getDateTimeHTML ($ key , $ dt_value , $ display_seconds );
543+ break ;
523544
524545 default :
525546 $ new_record [$ key ] = htmlspecialchars ($ field ['default ' ]);
@@ -585,6 +606,18 @@ function encode($record,$tab) {
585606 case 'CURRENCY ' :
586607 $ new_record [$ key ] = str_replace (", " ,". " ,$ record [$ key ]);
587608 break ;
609+
610+ case 'DATETIME ' :
611+ if (is_array ($ record [$ key ]))
612+ {
613+ $ filtered_values = array_map (create_function ('$item ' ,'return (int)$item; ' ), $ record [$ key ]);
614+ extract ($ filtered_values , EXTR_PREFIX_ALL , '_dt ' );
615+
616+ if ($ _dt_day != 0 && $ _dt_month != 0 && $ _dt_year != 0 ) {
617+ $ new_record [$ key ] = date ( 'Y-m-d H:i:s ' , mktime ($ _dt_hour , $ _dt_minute , $ _dt_second , $ _dt_month , $ _dt_day , $ _dt_year ) );
618+ }
619+ }
620+ break ;
588621 }
589622
590623 // The use of the field value is deprecated, use validators instead
@@ -1256,7 +1289,109 @@ function getDiffRecord($record_old,$record_new) {
12561289 return $ diffrec ;
12571290
12581291 }
1259-
1292+
1293+ /**
1294+ * Generate HTML for DATETIME fields.
1295+ *
1296+ * @access private
1297+ * @param string $form_element Name of the form element.
1298+ * @param string $default_value Selected value for fields.
1299+ * @param bool $display_secons Include seconds selection.
1300+ * @return string HTML
1301+ */
1302+ function _getDateTimeHTML ($ form_element , $ default_value , $ display_seconds =false )
1303+ {
1304+ $ _datetime = strtotime ($ default_value );
1305+ $ _showdate = ($ _datetime === false ) ? false : true ;
1306+
1307+ $ dselect = array ('day ' ,'month ' ,'year ' ,'hour ' ,'minute ' );
1308+ if ($ display_seconds === true ) {
1309+ $ dselect [] = 'second ' ;
1310+ }
1311+
1312+ $ out = '' ;
1313+
1314+ foreach ($ dselect as $ dt_element )
1315+ {
1316+ $ dt_options = array ();
1317+ $ dt_space = 1 ;
1318+
1319+ switch ($ dt_element ) {
1320+ case 'day ' :
1321+ for ($ i = 1 ; $ i <= 31 ; $ i ++) {
1322+ $ dt_options [] = array ('name ' => sprintf ('%02d ' , $ i ),
1323+ 'value ' => sprintf ('%d ' , $ i ));
1324+ }
1325+ $ selected_value = date ('d ' , $ _datetime );
1326+ break ;
1327+
1328+ case 'month ' :
1329+ for ($ i = 1 ; $ i <= 12 ; $ i ++) {
1330+ $ dt_options [] = array ('name ' => strftime ('%b ' , mktime (0 , 0 , 0 , $ i , 1 , 2000 )),
1331+ 'value ' => strftime ('%m ' , mktime (0 , 0 , 0 , $ i , 1 , 2000 )));
1332+ }
1333+ $ selected_value = date ('n ' , $ _datetime );
1334+ break ;
1335+
1336+ case 'year ' :
1337+ $ start_year = strftime ("%Y " );
1338+ $ years = range ((int )$ start_year , (int )($ start_year +3 ));
1339+
1340+ foreach ($ years as $ year ) {
1341+ $ dt_options [] = array ('name ' => $ year ,
1342+ 'value ' => $ year );
1343+ }
1344+ $ selected_value = date ('Y ' , $ _datetime );
1345+ $ dt_space = 2 ;
1346+ break ;
1347+
1348+ case 'hour ' :
1349+ foreach (range (0 , 23 ) as $ hour ) {
1350+ $ dt_options [] = array ('name ' => sprintf ('%02d ' , $ hour ),
1351+ 'value ' => sprintf ('%d ' , $ hour ));
1352+ }
1353+ $ selected_value = date ('G ' , $ _datetime );
1354+ break ;
1355+
1356+ case 'minute ' :
1357+ foreach (range (0 , 59 ) as $ minute ) {
1358+ if (($ minute % 5 ) == 0 ) {
1359+ $ dt_options [] = array ('name ' => sprintf ('%02d ' , $ minute ),
1360+ 'value ' => sprintf ('%d ' , $ minute ));
1361+ }
1362+ }
1363+ $ selected_value = (int )floor (date ('i ' , $ _datetime ));
1364+ break ;
1365+
1366+ case 'second ' :
1367+ foreach (range (0 , 59 ) as $ second ) {
1368+ $ dt_options [] = array ('name ' => sprintf ('%02d ' , $ second ),
1369+ 'value ' => sprintf ('%d ' , $ second ));
1370+ }
1371+ $ selected_value = (int )floor (date ('s ' , $ _datetime ));
1372+ break ;
1373+ }
1374+
1375+ $ out .= "<select name= \"" .$ form_element ."[ $ dt_element] \" id= \"" .$ form_element ."_ $ dt_element \" class= \"selectInput \" style= \"width: auto; float: none; \"> " ;
1376+ if (!$ _showdate ) {
1377+ $ out .= "<option value= \"- \" selected= \"selected \">--</option> " . PHP_EOL ;
1378+ } else {
1379+ $ out .= "<option value= \"- \">--</option> " . PHP_EOL ;
1380+ }
1381+
1382+ foreach ($ dt_options as $ dt_opt ) {
1383+ if ( $ _showdate && ($ selected_value == $ dt_opt ['value ' ]) ) {
1384+ $ out .= "<option value= \"{$ dt_opt ['value ' ]}\" selected= \"selected \"> {$ dt_opt ['name ' ]}</option> " . PHP_EOL ;
1385+ } else {
1386+ $ out .= "<option value= \"{$ dt_opt ['value ' ]}\"> {$ dt_opt ['name ' ]}</option> " . PHP_EOL ;
1387+ }
1388+ }
1389+
1390+ $ out .= '</select> ' . str_repeat (' ' , $ dt_space );
1391+ }
1392+
1393+ return $ out ;
1394+ }
12601395}
12611396
12621397?>
0 commit comments