뉴스

Rhymix 2.1.3 Release Notes

릴리즈 기진곰 | 2023.08.15 14:56 | 조회 537

라이믹스 2.1 버전대의 버그 수정 및 기능 개선 릴리즈입니다.

 

새 기능과 변경 사항

  • 인증 메일 사용시 가입 후 지정된 URL로 이동하지 않는 문제 수정 (#726, #949, #1735)
  • 기본 레이아웃과 스킨에서 로그인 또는 회원가입 도중 오류가 발생할 경우, 화면 전환 없이 오류를 표시하도록 개선 (#2055)
  • 최대 100px로 고정된 회원 서명 영역의 높이를 관리자가 설정하거나, 제한을 해제할 수 있도록 개선 (#2146)
  • 관리자가 일반 회원의 알림 설정 화면에 접근하여 임의로 변경하는 기능 삭제 (#1925, #2148)
  • .vscode 등 흔히 사용하는 경로를 .gitignore에 추가 (#2149)
  • 쪽지 보내기, 친구 추가 등 회원 메뉴에서 연결되는 대부분의 화면을 현재 창에 열도록 변경 (#1732, #2154)
    • 단, 관리자 화면으로 연결되는 메뉴는 계속 새 창에 열립니다.
    • 사용하시는 스킨이나 레이아웃에서 지원하지 않는다면 기존 방식대로 팝업창에 열릴 수 있습니다.
  • 부자연스러운 일본어 표현 수정 @mariko-f (#2156)
  • 세션 키를 사용하는 보안 설정 삭제  (#2157)
  • 세션 쿠키에 항상 httpOnly 속성을 추가하도록 변경
  • 자동 로그인 쿠키가 정상적으로 전달되지 않은 경우 다시 전달하도록 하여, 로그인 풀림 문제 개선
  • 메뉴 추가시 자동 생성되는 MID에 board_tGd6r 등의 랜덤값이 아닌 board2, board3 등의 간결한 이름을 사용하도록 개선
  • SimpleEditor에 유튜브 iframe 코드를 그대로 붙여넣어도 정상 인식하도록 개선 (#2159)
  • Object 클래스 참조, 따옴표 누락 등 오래된 서드파티 자료에서 자주 발생하는 오류를 감지하여 친절한 오류 메시지를 추가하도록 개선
  • 게시판과 페이지에 검색엔진 색인 허용 여부를 선택하는 옵션 추가
    • 허용하지 않더라도 검색엔진을 차단하지는 않으며, X-Robots-Tag: noindex 헤더를 전송합니다.
    • 따라서 검색에 노출되지 않을 뿐, 애드센스 크롤러 등이 접근하는 데는 영향을 주지 않습니다.

 

개발자를 위한 새 기능과 변경 사항

  • 알림센터에서 FCM을 사용하여 푸시 알림을 발송할 때, 알림 데이터를 "notification" 필드에 넣을지 선택하는 옵션을 제공합니다. (#1933)
    • "notification" 필드 없이 "data" 필드에만 넣으면 어플리케이션이나 프론트엔드에서 표시되는 알림을 좀더 유연하게 컨트롤할 수 있습니다.
  • MemberController->insertGroup() 메소드와 procMemberAdminInsertGroup() 액션의 결과값에 group_srl 값이 추가되었습니다.
  • 문서 분류(category) 편집 화면에서 카테고리 tree 구조를 불러올 때 ./files/cache/document_category/ 경로의 캐시파일을 직접 호출하지 않고 문서 모듈의 POST 액션을 사용하도록 변경되었습니다.
    • 라이믹스 2.1.3부터 ./files/cache/ 폴더 아래에 있는 .php 파일을 직접 호출하는 것은 금지됩니다. 아파치 사용시 .htaccess에 의해 자동으로 차단되며, nginx 사용시 rewrite 규칙을 업데이트하여야 차단됩니다.
    • files/ 폴더 아래에 .php 파일을 생성하고 호출하는 기능을 전반적으로 축소할 예정이며, 미래에는 files 폴더 아래에 있는 모든 .php 파일을 직접 호출하는 것이 금지될 수도 있으니 참고하시기 바랍니다. 쓰기 가능한 경로에 실행 가능한 파일을 두는 것은 안전하지 않습니다(W^X).
  • 쪽지 보내기, 친구 추가 등 팝업창에서 열던 화면을 현재 창에서 열도록 스킨을 수정할 경우, 폼을 표시하는 disp 액션과 폼을 제출하는 proc 액션 양쪽 모두 window_type=self 파라미터를 추가해 주어야 합니다. 이 파라미터를 추가하지 않을 경우 팝업창에서 열던 기존 방식의 스킨이라고 간주하고, 팝업창에 맞는 레이아웃을 표시하게 됩니다.
  • 트랜잭션 안에서 실행되던 document.insertDocument (before) 트리거가 트랜잭션 바깥으로 이동했습니다. 예전에는 이 트리거에서 오류를 반환하면 트랜잭션을 중단시키고 다른 자료가 실행한 쿼리까지 롤백할 수 있었으나, 이제는 다른 쿼리에 영향을 주지 않습니다.
  • module.xml에서 사용하는 check_csrf, meta_noindex, admin_index 등의 속성에서 하이픈(-), 언더바(_), camelCase 표현을 구분하지 않고 모두 허용하도록 변경되었습니다.
    • check-csrf="true", check_csrf="Y", checkCsrf="on" 모두 동일한 의미입니다.
  • module.xml에서 이벤트 핸들러(트리거)를 선언할 수 있도록 지원합니다.
    • 더이상 트리거 등록 여부를 PHP에서 확인하고 일일이 등록해 줄 필요가 없습니다.
    • 이벤트를 받을 클래스는 controller, model 등 XE 방식의 명칭을 입력해도 되고, 해당 모듈의 네임스페이스(Rhymix\Modules\모듈명) 아래에 있는 클래스명을 입력해도 됩니다. 신규 개발하는 모듈이라면 네임스페이스를 사용하는 것을 권장합니다.
    • 이벤트 핸들러 삭제시에도 module.xml을 수정하면 "모듈 설정 완료" 클릭시 자동으로 삭제됩니다.
    • 단, module.xml에 이벤트 핸들러가 하나라도 선언되어 있는 경우, 다른 방법으로 등록한 트리거는 삭제 대상으로 인식합니다.
    • 예를 들어 아래의 예제에서 beforeInsertDocument() 메소드는 Rhymix\Modules\모듈명\Controllers\EventHandlers 클래스에 있고, 이 클래스는 ./modules/모듈명/controllers/EventHandlers.php 파일에 선언되어 있다고 가정합니다.
<eventHandlers>
    <eventHandler before="document.insertDocument" class="Controllers\EventHandlers" method="beforeInsertDocument" />
    <eventHandler after="document.updateDocument" class="Controllers\EventHandlers" method="afterUpdateDocument" />
</eventHandlers>        
  • 특정 액션 직전이나 직후에만 호출되는 이벤트 핸들러(트리거)를 선언할 수 있도록 지원합니다.
    • 기존의 moduleObject.proc (before, after) 이벤트와 거의 동일한 시점에 호출되지만, 해당 액션일 때만 호출됩니다.
    • 모듈을 로딩한 후 $act 값을 확인하는 불필요한 과정과 자원 낭비를 피할 수 있습니다.
    • module.xml에서 선언할 수도 있고, PHP에서 등록할 수도 있습니다. PHP에서는 트리거명을 "act:모듈명.액션명"으로 지정하면 됩니다.
<eventHandlers>
    <eventHandler beforeAction="module.dispHelloWorld" class="Controllers\EventHandlers" method="beforeHelloWorld" />
    <eventHandler afterAction="module.dispHelloWorld" class="Controllers\EventHandlers" method="afterHelloWorld" />
</eventHandlers>        
ModuleController::getInstance()->insertTrigger(
    'act:member.dispMemberInfo', $this->module, 'controller', 'triggerAfterMemberInfo', 'after'
);        
  • 모듈에서 "Rhymix\Modules\모듈명"이 아닌 커스텀 네임스페이스를 선언할 수 있도록 지원합니다.
  • 모듈에서 "모듈명.class.php" 대신 사용할 기본 클래스와 설치/업데이트 담당 클래스를 별도로 선언할 수 있도록 지원합니다.

 

버그 수정

  • 특정한 설정 상태에서 회원가입 폼의 이메일 주소 입력란이 읽기 전용으로 표시되는 문제 수정 (#2143)
  • "내 알림 목록" 화면에서 알림을 클릭하더라도 읽음 처리되지 않는 문제 수정
  • 알림센터와 관련된 3가지 회원 메뉴의 표시 조건에 일관성이 없는 문제 수정 (#1925, #2048)
  • "자동 로그인 관리" 화면에 표시되는 운영체제 및 브라우저 정보가 최초 로그인 시점의 버전으로 고정되는 문제 수정
  • PHP 8.x에서 발생하는 각종 경고 메시지 수정 (#2150, #2151, #2153)
  • 모듈이 한 번에 삭제되지 않는 문제 수정 (#2158)
  • _XE_LOCATION_ 상수를 사용하는 서드파티 자료와의 호환성 개선 (#2160)
  • 초 단위가 없는 타임스탬프를 zdate()이나 ztime()에 넘길 경우 현재 시각을 반환하는 문제 수정 (#2161)
  • 일부 표준 시간대에서 ISO 8601 타임스탬프를 zdate()이나 ztime()에 넘길 경우 잘못된 표준 시간대로 해석하는 문제 수정
  • 유튜브 iframe 코드의 allow 속성이 삭제되는 문제 수정
  • 특정 서드파티 자료에서 통합검색을 POST로 요청하면 CSRF 토큰 누락으로 인한 보안 오류가 발생하는 문제 수정
    • 통합검색을 POST로 요청하는 것은 권장하지 않으며, POST로 요청하더라도 GET으로 강제 리다이렉트됩니다.
  • 치명적인 오류 발생시 실제 오류 발생 위치가 아닌 Debug 클래스의 파일명과 줄 번호가 표시되는 문제 수정
  • 스팸 키워드 때문에 글 작성이 차단되더라도 스팸필터 모듈에서 해당 키워드의 히트수가 증가하지 않는 문제 수정 (#2163)
  • 대시보드에서 "모듈 설정 완료"를 클릭하더라도 모듈의 전역 짧은주소 설정이 적용되지 않을 수 있는 문제 수정
  • update_all_modules.php 스크립트 사용시 모듈의 전역 짧은주소 설정이 적용되지 않는 문제 수정
  • crontab 스크립트가 Context::init()을 호출하지 않은 채 넘어가는 문제 수정
  • 분류를 선택하지 않고 글을 작성하려고 할 때, 상황에 따라 한글 메시지가 아닌 "categoryneeded"라는 영문 코드가 노출되는 문제 수정
  • 보안 설정에서 nofollow가 켜져 있는 경우 유닛 테스트가 실패하는 문제 수정

 

정리

  • 직관적이지 않은 알림센터의 "수신 거부 리스트" 메뉴명을 "알림 수신 거부"로 변경
  • 기본 레이아웃 및 통합검색 모듈의 예제 코드에서 불필요한 vid 파라미터 삭제
  • root 권한으로 crontab 스크립트 실행시, 에러 메시지의 "NOT"을 강조하여 잘못 해석하는 것을 방지
  • 분류 기능 사용을 임시 중단하는 옵션에 대한 설명 보완 (#2164)

 

릴리즈 기진곰 | 2024.03.29 | 조회 485
릴리즈 기진곰 | 2024.01.31 | 조회 898
릴리즈 기진곰 | 2024.01.05 | 조회 626
릴리즈 기진곰 | 2024.01.04 | 조회 458
릴리즈 기진곰 | 2023.11.30 | 조회 819
릴리즈 기진곰 | 2023.11.06 | 조회 807
릴리즈 기진곰 | 2023.10.27 | 조회 618
릴리즈 기진곰 | 2023.10.10 | 조회 628
릴리즈 기진곰 | 2023.09.27 | 조회 538
릴리즈 기진곰 | 2023.09.13 | 조회 508
1 2 3 4 5