क्या एक निश्चित समय के बाद सामग्री आइटम अपने आप अनलॉक हो सकते हैं?


10

हमारे अधिकांश उपयोगकर्ता यह नहीं समझते हैं कि जब वे अपनी सामग्री को संपादित करते हैं तो उन्हें सहेजना या रद्द करना चाहिए, इस प्रकार हमारे पास लगातार लेखों और श्रेणियों के स्कोर होते हैं जो लॉक होते हैं। मुझे एहसास है कि यह मैन्युअल रूप से प्रशासक द्वारा किया जा सकता है, लेकिन संपादन 24/7 पर होता है, और यह संपादित करने के लिए छोड़ दिया गया है या नहीं, यह निर्धारित करने के लिए लगातार सभी वस्तुओं के माध्यम से जाना थकाऊ है।

वहाँ किसी तरह से ताले समयबाह्य है?

जवाबों:


5

आप प्रति घंटा क्रॉन जॉब को परिभाषित कर सकते हैं या 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 अपनी तालिका उपसर्ग के साथ बदलें ।

उपरोक्त एसक्यूएल उन लेखों और श्रेणियों में जांचता है जो क्रमशः दो घंटे या एक घंटे से अधिक समय तक चेक किए गए थे। मेरा मानना ​​है कि एक लेख और एक श्रेणी को क्रमशः दो घंटे और एक घंटे के भीतर बचाया जाना चाहिए। आप उन संख्याओं को बढ़ा सकते हैं।


यह एसक्यूएल के लिए एक नौकरी होगी, लेकिन नए संस्करणों में किसी तरह की छिपी हुई सुविधा के लिए उम्मीद की जाती है।
जीडीपी

1
AFAIK में कोई अंतर्निहित सुविधा नहीं है लेकिन आप ऑटोचेकिन प्लगइन का उपयोग कर सकते हैं ।
फरमानंद

5

जब भी संभव हो, क्रोन से बचने की कोशिश करना, लेकिन @ फराहमंद के जवाब के आधार पर, मैंने इस कोड का एक उपयोगकर्ता प्लगिन 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;
}

मुझे यकीन है कि एसक्यूएल को टाइमज़ोन आदि के लिए समायोजित किया जा सकता है, लेकिन यहां परिणामस्वरूप एसक्यूएल बयान है:

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 HOURसाथ checked_out_time < JFactory::getDate('now +12 hours')- जांची नहीं।
फरहामंद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.