Gli elementi di contenuto possono essere sbloccati automaticamente dopo un certo periodo di tempo?


10

La maggior parte dei nostri utenti non capisce che dovrebbero salvare o annullare quando modificano il loro contenuto, quindi abbiamo costantemente decine di articoli e categorie bloccate. Mi rendo conto che questo può essere fatto manualmente dall'amministratore, ma la modifica va avanti 24 ore su 24, 7 giorni su 7, ed è piuttosto noioso esaminare costantemente tutti gli elementi per determinare se la modifica è stata abbandonata o meno.

C'è un modo per avere il timeout dei blocchi in qualche modo?

Risposte:


5

Puoi definire un cron job orario o usare phpMyAdmin ed eseguire questo 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;

Nota: sostituire joscon il prefisso della tabella.

Il precedente SQL controlla gli articoli e le categorie che sono stati estratti più di due ore o un'ora fa rispettivamente. Presumo che un articolo e una categoria debbano essere salvati rispettivamente entro due ore e un'ora. Puoi aumentare quei numeri.


Ho pensato che sarebbe stato un lavoro per SQL, ma speravo in una sorta di funzionalità nascosta nelle versioni più recenti.
PIL

1
AFAIK non ha funzionalità integrate ma è possibile utilizzare il plug-in Autocheckin .
Farahmand,

5

Cercando di evitare i cron quando possibile, ma in base alla risposta di @Farahmand, ho inserito una variante di questo codice in un onUserLogout()evento Plugin utente :

Quando un utente si disconnette , il plug-in esegue il check-in di tutti i loro contenuti, nonché qualsiasi altro check-out che potrebbe essere stato abbandonato. Volevo che solo alcuni gruppi di utenti fossero interessati e per garantire che il contenuto di qualsiasi utente amministratore non fosse mai interessato (per motivi interni - forse eccessivo per installazioni tipiche, ma nel nostro caso abbiamo gruppi di utenti personalizzati che possono trovarsi in molti dei gruppi di utenti standard, quindi hanno tenuto conto di tale sovrapposizione).

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;
}

Sono sicuro che SQL può essere regolato per fusi orari, ecc., Ma ecco l'istruzione SQL risultante:

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
bella idea questa dopo il logout dell'utente
FFrewin

2
Bella risposta. Per evitare di regolare i fusi orari, è possibile sostituire checked_out_time < NOW() - INTERVAL 12 HOURcon checked_out_time < JFactory::getDate('now +12 hours')- Non testato.
Farahmand,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.