''); while($i <= 12) { $options[ sprintf('%02d',$i) ] = sprintf('%02d',$i); $i++; } $add_fields[ $field_options['month_field'] ] = Array('formatter'=>'kOptionsFormatter', 'options' => $options, 'not_null' => true, 'default' => '00'); $add_fields[ $field_options['year_field'] ] = Array('type' => 'string', 'default' => ''); $virtual_fields = $object->getVirtualFields(); $add_fields = kUtil::array_merge_recursive($add_fields, $virtual_fields); $object->setVirtualFields($add_fields); } /** * Used for split fields like timestamp -> date, time * Called from DBItem to update sub fields values after loading item * * @param string $field * @param string $value * @param Array $options * @param kDBItem $object * @return void * @access public */ public function UpdateSubFields($field, $value, &$options, &$object) { if ( !$value ) { return ; } $date = explode('/', $value); $object->SetDBField($options['month_field'], $date[0]); $object->SetDBField($options['year_field'], $date[1]); } /** * Will work in future if we could attach 2 formatters to one field * * @param mixed $value * @param string $field_name * @param kDBItem $object * @return mixed * @access public */ public function Parse($value, $field_name, &$object) { $options = $object->GetFieldOptions($field_name); $month = $object->GetDirtyField($options['month_field']); $year = $object->GetDirtyField($options['year_field']); if ( !(int)$month && !(int)$year ) { return NULL; } $is_valid = ($month >= 1 && $month <= 12) && ($year >= 0 && $year <= 99); if ( !$is_valid ) { $object->SetError($field_name, 'bad_type'); } return $month . '/' . $year; } }