콘텐츠로 이동

사용자 정의 필드

MRBS 1.12.2에서는 추가 데이터베이스 열을 검색하여 예약, 회의실 및 사용자에 대한 필드로 사용할 수 있습니다. 따라서 사용자 정의 필드는 열을 자동으로 생성하는 설정이 아니라 스키마 확장입니다.

먼저 백업하세요

데이터베이스를 백업하고 비프로덕션 인스턴스에서 변경 사항을 테스트합니다. MRBS 업그레이드는 사이트별 열을 생성, 마이그레이션 또는 제거하지 않습니다.

사용자 정의 필드가 지원되는 경우

데이터베이스 테이블 목적 중요한 규칙
entry 개별 예약에 대한 추가 데이터 repeat에 동일한 열을 추가합니다.
repeat 반복 예약을 위한 템플릿 데이터 이름, 유형, 길이, null 허용 여부 및 기본값을 entry와 동일하게 유지하세요.
room 추가 공간 또는 리소스 속성 회의실 데이터로 표시 및 편집됨
users 추가 사용자 프로필 데이터 데이터베이스 인증에만 사용됩니다.

동일한 repeat 열이 없는 entry 열로 인해 반복 예약 작업이 실패합니다. 쌍을 하나의 스키마 변경으로 처리합니다.

열 이름에는 문자, 숫자, 밑줄만 사용하세요. PostgreSQL와의 호환성을 위해 문자나 밑줄로 시작하세요. participant_count 또는 catering와 같이 안정적인 소문자 이름을 선호하세요.

지원되는 데이터베이스 유형

SQL 유형 MRBS 제어
TEXT 여러 줄 텍스트
VARCHAR 최대 길이에 따라 텍스트 입력 또는 여러 줄 텍스트
DATE 날짜 입력
DECIMAL / NUMERIC 숫자입력
INT 정수 입력
SMALLINT / TINYINT 부울 값으로 해석되는 체크박스

PostgreSQL의 부울 사용자 정의 필드에는 SMALLINT를 사용하고 MySQL의 경우 TINYINT를 사용하세요. 다른 열 유형은 자동 사용자 정의 필드 처리에서 지원되지 않습니다.

스키마에 필드 추가

예제에서는 기본 mrbs_ 테이블 접두사를 가정합니다. $db_tbl_prefix에 다른 값이 있으면 교체하세요.

예약 필드

이 예에서는 선택적 케이터링 선택 사항을 추가합니다.

ALTER TABLE mrbs_entry
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

ALTER TABLE mrbs_repeat
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

두 명령문 모두 MySQL 및 PostgreSQL에서 작동합니다. 예약 양식을 열기 전에 두 테이블의 결과 정의를 확인하세요.

회의실 체크박스

ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine TINYINT NOT NULL DEFAULT 0;
ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine SMALLINT NOT NULL DEFAULT 0;

MRBS 1.12.2에서는 새 행이 생성될 때 데이터베이스 기본값이 사용됩니다. 특히 필수 필드와 확인란의 경우 의도적으로 기본값을 선택합니다.

필드에 번역된 라벨을 지정하세요.

재정의하지 않으면 MRBS는 열 이름에서 레이블을 파생합니다. config.inc.php에서 활성 언어당 하나의 라벨을 정의하세요.

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

entry/repeat 쌍의 경우 entry.catering만 정의하세요. 아니요 repeat.catering 토큰이 필요하지 않습니다. 회의실 및 사용자 필드는 room.coffee_machine 및 users.phone와 같은 토큰을 사용합니다.

어휘 재정의, 언어 파일 및 번역된 도움말 페이지는 텍스트 및 번역를 참조하세요.

입력 동작 선택

고정 선택

$select_options는 자유 입력을 선택 목록으로 대체합니다.

$select_options['entry.catering'] = array(
    ''  => 'Please select',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

연관 배열의 경우 MRBS는 키(c)를 저장하고 값(Coffee)을 표시, 검색 및 보고합니다. 이를 통해 저장된 데이터를 다시 쓰지 않고도 문구를 변경할 수 있습니다.

숫자로만 설정된 키를 피하세요. PHP는 정수형 문자열 키를 정수로 변환하므로 MRBS는 배열을 인덱스로 해석할 수 있습니다. 필수 선택 사항이 선택되지 않은 상태로 시작되어야 하는 경우 빈 선택 사항을 포함합니다.

$select_options는 entry.name, entry.description, 사용자 정의 entry 필드 및 사용자 정의 users 필드에 지원됩니다. 설정된 옵션 캡션은 사이트 전체 문자열입니다. 필드 레이블 자체는 $vocab_override로 번역될 수 있습니다.

무료 입력을 통한 제안

다른 값을 허용하면서 제안을 위해 $datalist_options를 사용하세요.

$datalist_options['entry.catering'] = array(
    'Coffee',
    'Sandwiches',
    'Hot lunch',
);

$select_options와 동일한 필드를 지원합니다. 연관 데이터 목록을 사용하면 저장된 키가 사용자에게 놀랄 수 있으므로 사용하기 전에 동작을 테스트하십시오.

필수, 비공개 및 검증된 필드

모든 곳에서 필드를 필수로 설정하세요.

$is_mandatory_field['entry.catering'] = true;

또는 데이터베이스 ID 1과 3이 있는 영역에서만:

$is_mandatory_field['entry.catering'] = array(1, 3);

영역별 필수 규칙은 entry 필드에만 적용됩니다. 제출 전 필수 체크박스를 체크해야 합니다.

entry 및 users에 대해 비공개 사용자 정의 필드가 지원됩니다.

$is_private_field['entry.internal_notes'] = true;
$is_private_field['users.phone'] = true;

이는 개인 예약이 활성화되고 설정된 경우에만 값을 보호합니다. 모든 관련 역할을 테스트합니다. 민감한 데이터를 최소화하는 대신 UI 개인 정보 보호를 사용하지 마십시오.

패턴 확인은 현재 사용자 정의 users 텍스트 필드로 제한됩니다.

$pattern['users.zip_code'] = '^[0-9]{5}(?:-[0-9]{4})?$';
$vocab_override['en']['users.zip_code.oninvalid'] =
    'Enter a ZIP code such as 12345 or 12345-6789';

항목 텍스트 필드에는 번역된 자리 표시자가 있을 수 있습니다.

$vocab_override['en']['entry.catering.placeholder'] =
    'State allergies or special requirements';

클라이언트 측 패턴은 피드백을 개선하지만 필드를 비밀이나 신뢰할 수 없는 마크업을 위한 안전한 장소로 바꾸지는 않습니다.

제어 필드 순서

만들기 및 보기 페이지에 예약 필드를 명시적으로 배치합니다.

$edit_entry_field_order = array(
    'name',
    'catering',
    'description',
);

나열되지 않은 필드는 일반적인 순서대로 추가됩니다. 사용자 정의 필드는 보고서 검색 양식에도 배치할 수 있습니다.

$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
    'roommatch',
);

완전한 예

두 예약 테이블에 catering를 추가한 후:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

$select_options['entry.catering'] = array(
    ''  => '—',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

$is_mandatory_field['entry.catering'] = array(1, 3);
$edit_entry_field_order = array('name', 'catering', 'description');
$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
);

이 예의 옵션 캡션은 모든 UI 언어에서 동일하게 유지됩니다. 번역된 옵션 캡션이 요구사항인 경우 $select_options가 자동으로 번역된다고 가정하기보다는 사이트별 확장 프로그램을 설계하고 테스트하세요.

변경, 제거 및 업그레이드

기둥을 줄이거나 유형을 변경하기 전에 기존 값을 검사하고 변환을 테스트하십시오. 필드를 제거하기 전에 해당 설정 참조를 제거하고 해당 변경 사항을 배포하고 애플리케이션이 작동하는지 확인한 다음 일반 데이터베이스 변경 프로세스를 통해서만 열을 삭제하세요. 예약 필드의 경우 entry 및 repeat를 모두 변경하세요.

사이트 운영 문서의 모든 사용자 정의 열을 기록하고 각 MRBS 업그레이드 후에 다시 확인하세요. 표준 MRBS 스키마 스크립트는 이러한 열을 소유하지 않습니다.

검증 체크리스트

  • entry 및 repeat 정의는 모든 예약 필드에서 동일합니다.
  • 예약 생성, 편집, 보기, 복사 및 삭제가 가능합니다.
  • 반복되는 시리즈와 하나의 항목을 올바르게 편집할 수 있습니다.
  • 데이터베이스 기본값은 새 레코드에 적용됩니다.
  • 필수, 비공개, 선택, 데이터 목록 및 유효성 검사 동작은 역할 및 영역별로 작동합니다.
  • 레이블은 설정된 모든 언어로 표시됩니다.
  • 검색, 보고서, 이메일, 캘린더 내보내기 및 가져오기/내보내기가 안전한 값을 표시합니다.
  • 회의실 및 사용자 관리에는 의도한 필드만 표시됩니다.
  • 백업 및 복원 절차에는 확장된 스키마가 포함됩니다.