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