コンテンツアイテムは、一定時間後に自動的にロック解除できますか?


10

ほとんどのユーザーは、コンテンツを編集するときに保存またはキャンセルする必要があることを理解していません。そのため、ロックされている記事やカテゴリが常にあります。これは管理者が手動で行うことができることを理解していますが、編集は24時間年中無休で行われ、編集が破棄されたかどうかを判断するためにすべての項目を常に確認するのはかなり面倒です。

どういうわけかロックをタイムアウトさせる方法はありますか?

回答:


5

1時間ごとの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には組み込みの機能はありませんが、Autocheckinプラグインを使用できます。
Farahmand 2014

5

可能な限りcronを避けようとしますが、@ Farahmandからの回答に基づいて、このコードのバリエーションをユーザープラグイン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 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.