নির্দিষ্ট সময়ের পরে কি সামগ্রী আইটেমগুলি স্বয়ংক্রিয়ভাবে আনলক করা যায়?


10

আমাদের বেশিরভাগ ব্যবহারকারী বুঝতে পারে না যে তারা যখন তাদের সামগ্রী সম্পাদনা করে তখন তাদের সংরক্ষণ বা বাতিল করা উচিত, এইভাবে আমাদের কাছে নিয়মিতভাবে স্কোর করা অনেকগুলি নিবন্ধ এবং বিভাগ রয়েছে যা লক থাকে। আমি বুঝতে পারি যে এটি অ্যাডমিনিস্ট্রেটর দ্বারা ম্যানুয়ালি করা যেতে পারে, তবে সম্পাদনাটি 24/7 এ চলে এবং সম্পাদনাটি পরিত্যাগ করা হয়েছে কি না তা নির্ধারণ করে সমস্ত আইটেমটি অবিচ্ছিন্নভাবে চালিয়ে যাওয়া বরং ক্লান্তিকর।

কোনওভাবে কীভাবে লকগুলি শেষ করার উপায় আছে?

উত্তর:


5

আপনি একটি ঘন্টা ক্রোন জব সংজ্ঞায়িত করতে পারেন বা phpMyAdmin ব্যবহার করতে পারেন এবং এই এসকিউএল সম্পাদন করতে পারেন:

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
এএএআইএইফিকে কোনও অন্তর্নির্মিত বৈশিষ্ট্য নেই তবে আপনি অটোচেকিন প্লাগইন ব্যবহার করতে পারেন ।
ফারহমান্ড

5

যখনই সম্ভব 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))
        )

2
ব্যবহারকারীর লগআউট করার পরে এটি সম্পর্কে দুর্দান্ত ধারণা
এফফ্রেইন

2
চমৎকার উত্তর. টাইমজোনগুলি সামঞ্জস্য করতে এড়াতে, আপনি - পরীক্ষিত নয় এর checked_out_time < NOW() - INTERVAL 12 HOURসাথে প্রতিস্থাপন করতে পারেন checked_out_time < JFactory::getDate('now +12 hours')
ফারহমান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.