Bisakah item konten dibuka secara otomatis setelah jangka waktu tertentu?

10

Sebagian besar pengguna kami tidak mengerti bahwa mereka harus menyimpan atau membatalkan ketika mereka mengedit konten mereka, sehingga kami selalu memiliki sejumlah artikel dan kategori yang dikunci. Saya menyadari bahwa ini dapat dilakukan secara manual oleh administrator, tetapi pengeditan berlangsung 24/7, dan agak membosankan untuk terus-menerus memeriksa semua item yang menentukan apakah pengeditan telah ditinggalkan atau tidak.

Apakah ada cara agar waktu kunci terkunci?

PDB
sumber

Jawaban:

5

Anda bisa mendefinisikan pekerjaan cron per jam atau menggunakan phpMyAdmin dan menjalankan SQL ini:

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;

Catatan: Ganti josdengan awalan tabel Anda.

SQL memeriksa artikel dan kategori yang memeriksa masing-masing lebih dari dua jam atau satu jam yang lalu. Saya berasumsi bahwa artikel dan kategori harus disimpan masing-masing dalam dua jam dan satu jam. Anda dapat menambah angka-angka itu.

Farahmand
sumber
Mengira itu akan menjadi pekerjaan untuk SQL, tetapi berharap untuk semacam fitur tersembunyi di versi yang lebih baru.
GDP
1
AFAIK tidak ada fitur bawaan tetapi Anda dapat menggunakan plugin Autocheckin .
Farahmand
5

Mencoba menghindari crons kapan pun memungkinkan, tetapi berdasarkan jawaban dari @Farahmand, saya memasukkan variasi kode ini dalam onUserLogout()acara Plugin Pengguna :

Ketika ada pengguna yang log out , plugin akan memeriksa konten mereka , dan juga check-out lainnya yang mungkin telah ditinggalkan. Saya ingin hanya grup pengguna tertentu yang terpengaruh, dan untuk memastikan bahwa setiap konten pengguna admin tidak pernah terpengaruh (karena alasan internal kami sendiri - mungkin terlalu banyak untuk instalasi tipikal, tetapi dalam kasus kami, kami memiliki grup pengguna khusus yang dapat di beberapa kelompok pengguna standar, jadi pertanggungjawabkan tumpang tindih itu).

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

Saya yakin SQL dapat disesuaikan untuk Zona Waktu, dll., Tapi inilah pernyataan SQL yang dihasilkan:

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))
        )
PDB
sumber
2
ide keren yang satu ini setelah pengguna keluar
FFrewin
2
Jawaban bagus. Untuk menghindari penyesuaian Zona Waktu, Anda dapat mengganti checked_out_time < NOW() - INTERVAL 12 HOURdengan checked_out_time < JFactory::getDate('now +12 hours')- Tidak diuji.
Farahmand