Các mục nội dung có thể được tự động mở khóa sau một khoảng thời gian nhất định không?


10

Hầu hết người dùng của chúng tôi không hiểu rằng họ nên Lưu hoặc Hủy khi họ chỉnh sửa nội dung của mình, do đó chúng tôi liên tục có nhiều bài viết và danh mục bị khóa. Tôi nhận ra rằng việc này có thể được quản trị viên thực hiện thủ công, nhưng việc chỉnh sửa diễn ra 24/7 và thật tẻ nhạt khi liên tục đi qua tất cả các mục xác định xem liệu chỉnh sửa có bị bỏ hay không.

Có cách nào để có thời gian chờ khóa không?

Câu trả lời:


5

Bạn có thể định nghĩa một công việc định kỳ hàng giờ hoặc sử dụng phpMyAdmin và thực thi SQL này:

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;

Lưu ý: Thay thế josbằng tiền tố bảng của bạn.

Kiểm tra SQL ở trên trong các bài viết và danh mục đã kiểm tra tương ứng hơn hai giờ hoặc một giờ trước. Tôi giả định rằng một bài viết và một chuyên mục nên được lưu trong vòng hai giờ và một giờ tương ứng. Bạn có thể tăng những con số đó.


Hình nó sẽ là một công việc cho SQL, nhưng hy vọng cho một số loại tính năng ẩn trong các phiên bản mới hơn.
GDP

1
AFAIK không có tính năng tích hợp nhưng bạn có thể sử dụng plugin Autocheckin .
Farahmand

5

Cố gắng tránh các crons bất cứ khi nào có thể, nhưng dựa trên câu trả lời từ @Farahmand, tôi đã đặt một biến thể của mã này trong một onUserLogout()sự kiện Plugin người dùng :

Khi bất kỳ người dùng nào đăng xuất , plugin sẽ đăng ký bất kỳ nội dung nào của họ , cũng như bất kỳ kiểm tra nào khác có thể đã bị bỏ qua. Tôi chỉ muốn một số nhóm người dùng nhất định bị ảnh hưởng và để đảm bảo rằng bất kỳ nội dung người dùng quản trị viên nào cũng không bao giờ bị ảnh hưởng (vì lý do nội bộ của chúng tôi - có thể quá mức cho các cài đặt thông thường, nhưng trong trường hợp của chúng tôi, chúng tôi có các nhóm người dùng tùy chỉnh có thể ở một số nhóm người dùng chuẩn, do đó đã chiếm sự chồng chéo đó).

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;
}

Tôi chắc chắn rằng SQL có thể được điều chỉnh cho Timezones, v.v., nhưng đây là câu lệnh SQL kết quả:

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
ý tưởng tuyệt vời này sau khi đăng xuất của người dùng
FFrewin

2
Câu trả lời tốt đẹp. Để tránh điều chỉnh múi giờ, bạn có thể thay thế checked_out_time < NOW() - INTERVAL 12 HOURbằng checked_out_time < JFactory::getDate('now +12 hours')- Không được kiểm tra.
Farahmand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.