멘티스(mantis) 커스텀 필드(CUSTOM FIELD) date 포맷 기본값 설정.
맨티스에서 커스텀 필드를 사용하다 보니 date 포맷을 자주 사용한다.
(시작일, 종료일, 적용일 등..)
그런데 일반 텍스트 박스는 기본값 설정이 가능하나, date 형식은 select 박스 형태아 기본값을 설정하는 것이 난감했다..
입력은 모두 공백으로 되어있어서 셀렉트 박스를 하나하나 선택해줘야 하는 번거로움이 있다..
년/월/일 따로되어있고, 또 날짜 커스텀 항목이 3~4개면 여간 번거로운일이 아닐수 없다..ㅋ
그래서..
소스를 뜯어 고쳤다..ㅡㅡ;;
이슈보고하기 페이지는 bug_report_page.php 이다.
여기서 커스텀 필드를 가져오는 부분은 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!-- Custom Fields --> <?php $t_custom_fields_found = false; $t_related_custom_field_ids = custom_field_get_linked_ids( $t_project_id ); foreach( $t_related_custom_field_ids as $t_id ) { $t_def = custom_field_get_definition( $t_id ); $t_def[default_value] = time(); if( ( ( $t_def['display_report'] && !$t_def['advanced'] ) || $t_def['require_report']) && custom_field_has_write_access_to_project( $t_id, $t_project_id ) ) { $t_custom_fields_found = true; ?> <tr <?php echo helper_alternate_class() ?>> <td class="category"> <?php if( $t_def['require_report'] ) { ?> <span class="required">*</span> <?php } ?> <?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?> </td> <td> <?php print_custom_field_input( $t_def, ( $f_master_bug_id === 0 ) ? null : $f_master_bug_id ) ?> </td> </tr> <?php } # if (!$t_def['advanced']) && has write access } # foreach( $t_related_custom_field_ids as $t_id ) ?> |
custom_field_get_linked_ids 메소드가 현재 프로젝트에 할당된 커스텀 필드 배열을 가지고 온다.
그리고 loop을 돌면서 custom_field_get_definition 메소드 에서 각 커스텀 필드의 값을 가져온다(기본값 포함)
이렇게 커스텀 필드를 가져오고 여러가지 권한을 체크한 후에 커스텀 필드 입력을 위한 인풋 박스 를 생성하는 메소드는 print_custom_field_input 이다.
거기서 특별히 내가 기본값을 주고자 하는 날짜 커스텀 필드의 항목은
1 |
case CUSTOM_FIELD_TYPE_DATE: |
부분이다.
이부분에 보면 아래와 같은 select set 을 호출하는 부분이 있다.
1 |
print_date_selection_set("custom_field_" . $t_id, config_get('short_date_format'), $t_custom_field_value, false, true) ; |
여기서 $t_custom_field_value 변수가 기본 선택되는 값이다.
$t_custom_field_value값의 포맷을 알기 위해 다시 위의 메소드가 있는 부분을 확인해보니, core/date_api.php 으로 날짜 관련 API 이다.
print_date_selection_set를 뒤져보니
1 |
$t_date = preg_split('/-/', date( 'Y-m-d', $p_date), -1, PREG_SPLIT_NO_EMPTY) ; |
넘기는 $t_custom_field_value은 $p_date으로 date( ‘Y-m-d’, $p_date) 부분에서 값을 가져와 정규식으로 파싱해서 표현한다.
즉, $p_date(=$t_custom_field_value)는 timestamp 값이다..
그러면 다시 bug_report_page.php 으로 가서, custom_field_get_definition 메소드 에서 각 커스텀 필드의 값을 가져오는 부분에서
1 2 3 4 |
$t_def = custom_field_get_definition( $t_id ); if( $t_def[type] == 8) { $t_def[default_value] = time(); } |
부분을 추가한다.
즉, $t_def[type]이 8인것은 날짜 커스텀 필드일 경우에는
기본값을 현재 timestamp으로 하는 것이다.
이제 앞으로는 날짜 커스텀 필드에서 일일이 날짜를 선택하는 번거로움이여 안뇽~ㅋ