যখনই সম্ভব crons এড়ানোর চেষ্টা করছি, তবে @ ফারাহমান্ডের উত্তরের ভিত্তিতে, আমি একটি ইউজার প্লাগইন 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))
)