İçerik öğelerinin kilidi belirli bir süre sonra otomatik olarak açılabilir mi?


10

Kullanıcılarımızın çoğu, içeriklerini düzenlediklerinde Kaydetmeleri veya İptal Etmeleri gerektiğini anlamıyorlar, bu nedenle sürekli olarak kilitlenmiş makale ve kategorilerimiz var. Bunun yönetici tarafından manuel olarak yapılabileceğini anlıyorum, ancak düzenleme 7/24 devam ediyor ve düzenlemenin terk edilip edilmediğini belirleyen tüm öğeleri sürekli olarak geçirmek oldukça sıkıcı.

Bir şekilde kilitlerin zaman aşımına uğramasının bir yolu var mı?

Yanıtlar:


5

Saatlik bir cron işi tanımlayabilir veya phpMyAdmin'i kullanabilir ve şu SQL'i yürütebilirsiniz:

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;

Not:jos Tablo ön ekinizle değiştirin .

Yukarıdaki SQL girişi, sırasıyla iki saatten veya bir saat önce kullanıma alınmış makaleleri ve kategorileri kontrol eder. Bir makalenin ve bir kategorinin sırasıyla iki saat ve bir saat içinde kaydedilmesi gerektiğini düşünüyorum. Bu sayıları artırabilirsiniz.


SQL için bir iş olacağını düşündüm, ancak yeni sürümlerde bir tür gizli özellik umuyordu.
GSYİH

1
AFAIK yerleşik bir özellik yoktur, ancak Autocheckin eklentisini kullanabilirsiniz .
Farahmand

5

Mümkün olduğunca cronstan kaçınmaya çalışıyorum, ancak @Farahmand'ın cevabına dayanarak, bir Kullanıcı Eklentisi onUserLogout()etkinliğine bu kodun bir varyasyonunu koydum :

Ne zaman herhangi bir kullanıcı oturum dışarı , herhangi bir eklenti de denetler- onların içeriği, hem de terk edilmiş olabilecek diğer check-out. Yalnızca belirli kullanıcı gruplarının etkilenmesini ve herhangi bir yönetici kullanıcı içeriğinin hiçbir zaman etkilenmemesini sağlamak istedim (kendi dahili nedenlerimiz için - belki de tipik yüklemeler için aşırıya kaçma, ancak bizim durumumuzda, standart kullanıcı grupları, bu örtüşmeyi hesaba katmıştır).

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 Timezones, vb için ayarlanabilir eminim, ama sonuçta ortaya çıkan SQL deyimi:

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
Kullanıcı oturumdan sonra bu harika fikir
FFrewin

2
Güzel cevap. Zaman Dilimlerini ayarlamaktan kaçınmak checked_out_time < NOW() - INTERVAL 12 HOURiçin checked_out_time < JFactory::getDate('now +12 hours')- Test edilmedi.
Farahmand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.