일정 시간이 지나면 컨텐츠 항목을 자동으로 잠금 해제 할 수 있습니까?


10

대부분의 사용자는 자신의 컨텐츠를 편집 할 때 저장 또는 취소해야한다는 것을 이해하지 못하므로 수많은 기사와 카테고리가 지속적으로 잠겨 있습니다. 관리자가 수동으로 수행 할 수 있지만 편집은 연중 무휴로 진행되며 편집이 취소되었는지 여부를 결정하는 모든 항목을 지속적으로 수행하는 것이 다소 지루합니다.

어떻게 든 잠금 시간 초과를 갖는 방법이 있습니까?

답변:


5

매시간 cron 작업을 정의하거나 phpMyAdmin을 사용하여이 SQL을 실행할 수 있습니다.

UPDATE `jos_content` c    SET c.checked_out = 0, c.checked_out_time = 0 WHERE HOUR(TIMEDIFF(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00'), c.checked_out_time)) >= 2;
UPDATE `jos_categories` c SET c.checked_out = 0, c.checked_out_time = 0 WHERE HOUR(TIMEDIFF(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00'), c.checked_out_time)) >= 1;

참고 : 교체 jos테이블 접두사.

위의 SQL 체크인은 각각 2 시간 또는 1 시간 전에 체크 아웃 한 기사 및 범주입니다. 기사와 카테고리는 각각 2 시간과 1 시간 내에 저장되어야한다고 가정합니다. 당신은 그 숫자를 증가시킬 수 있습니다.


그것이 SQL의 일이 될 것이라고 생각했지만 최신 버전의 숨겨진 기능이 필요했습니다.
GDP

1
AFAIK에는 기본 제공 기능이 없지만 자동 체크인 플러그인을 사용할 수 있습니다 .
Farahmand

5

가능할 때마다 크론을 피하려고 노력하지만 @Farahmand의 답변에 따라이 코드의 변형을 User Plugin onUserLogout()이벤트 에 넣었습니다 .

모든 사용자가 로그 아웃 , 모든 플러그인에 체크 - 자신 의 콘텐츠뿐만 아니라, 포기되었을 수있는 다른 체크 아웃. 나는 특정 사용자 그룹에 영향을 줄 수하고, 모든 관리자 사용자의 콘텐츠는 것을 보장하고 싶었 결코 우리 자신의 내부 이유 (영향을받지 않습니다 - 아마도 과잉 일반적인 설치를위한, 그러나 우리의 경우에 우리는 여러 가지 일 수 있습니다 사용자 정의 사용자 그룹이 표준 사용자 그룹도 마찬가지입니다.

function onUserLogout() {
    $groups_include = '2,4,10';    // Affect Registered, Publishers, and Custom Group
    $groups_exclude = '7,8';       // Don't affect Administrators or Super Users

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->update($db->quoteName('#__content'))
    ->set('checked_out = 0, checked_out_time = 0')
    ->where('( checked_out = '.JFactory::getUser()->id.' ) OR (
        checked_out_time < NOW() - INTERVAL 12 HOUR
        AND checked_out IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN ('.$groups_include.'))
        AND checked_out NOT IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN ('.$groups_exclude.'))
        )'
    );
    $db->setQuery($query);
    $db->execute();
    return true;
}

시간대 등에 맞게 SQL을 조정할 수 있다고 확신하지만 결과 SQL 문은 다음과 같습니다.

UPDATE `gdp_content`
SET checked_out = 0, checked_out_time = 0
WHERE ( checked_out = 30 ) OR (
        checked_out_time < NOW() - INTERVAL 12 HOUR
        AND checked_out IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN (2,10,11))
        AND checked_out NOT IN (SELECT GROUP_CONCAT(user_id) FROM scm_user_usergroup_map WHERE group_id IN (7,8))
        )

2
멋진 아이디어 사용자 로그 아웃 후
FFrewin

2
좋은 대답입니다. 시간대를 조정 방지하기 위해, 당신은 대체 할 수 checked_out_time < NOW() - INTERVAL 12 HOURchecked_out_time < JFactory::getDate('now +12 hours')- 테스트를하지 않습니다.
Farahmand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.