Browse Source

Le changement de statut des rubriques suite à l'arrivée à terme d'articles post-datés est à présent déclenché dès cette échéance. La tâche rubriques de Cron est en conséquence évacuée.

2.0
Committo,Ergo:sum 16 years ago
parent
commit
39ea8dae6b
  1. 28
      ecrire/action/dater.php
  2. 2
      ecrire/action/editer_article.php
  3. 28
      ecrire/inc/cron.php
  4. 44
      ecrire/inc/rubriques.php
  5. 7
      ecrire/public.php

28
ecrire/action/dater.php

@ -28,12 +28,14 @@ function action_dater_dist() {
function action_dater_post($r)
{
include_spip('inc/date');
$type = $r[2];
$id = $r[1];
if (!isset($_REQUEST['avec_redac'])) {
$date = format_mysql_date(_request('annee'), _request('mois'), _request('jour'), _request('heure'), _request('minute'));
if ($r[2] == 'article')
if ($type == 'article')
spip_query("UPDATE spip_articles SET date=" . _q($date) . " WHERE id_article=$r[1]");
else action_dater_breve_syndic($r[1], $r[2]);
else action_dater_breve_syndic($id, $type);
} else {
if (_request('avec_redac') == 'non')
$annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0;
@ -48,13 +50,27 @@ function action_dater_post($r)
$annee_redac += 9000;
}
spip_query("UPDATE spip_articles SET date_redac='" . format_mysql_date($annee_redac, $mois_redac, $jour_redac, $heure_redac, $minute_redac) ."' WHERE id_article=$r[1]");
$date = format_mysql_date($annee_redac, $mois_redac, $jour_redac, $heure_redac, $minute_redac);
spip_query("UPDATE spip_articles SET date_redac=" . _q($date) . " WHERE id_article=$r[1]");
}
include_spip('inc/rubriques');
calculer_rubriques();
if (($type == 'article')
AND $GLOBALS['meta']["post_dates"] == "non") {
$t = spip_abstract_fetch(spip_query("SELECT statut, id_rubrique FROM spip_articles WHERE id_article=$id"));
if ($t['statut'] == 'publie') {
include_spip('inc/rubriques');
if (strtotime($date) > time())
depublier_branche_rubrique_if($t['id_rubrique']);
else
publier_branche_rubrique($t['id_rubrique']);
calculer_prochain_postdate();
}
}
}
// Breves et Syndications ne sont pas post-datables
// http://doc.spip.org/@action_dater_breve_syndic
function action_dater_breve_syndic($id, $type)
{
@ -67,8 +83,6 @@ function action_dater_breve_syndic($id, $type)
if ($type == 'breve')
spip_query("UPDATE spip_breves SET date_heure=" . _q("$annee-$mois-$jour") . " WHERE id_breve=$id");
else spip_query("UPDATE spip_syndic SET date=" . _q("$annee-$mois-$jour") . " WHERE id_syndic=$id");
include_spip('inc/rubriques');
calculer_rubriques();
}
}
?>

2
ecrire/action/editer_article.php

@ -257,7 +257,7 @@ function instituer_article($id_article, $c, $calcul_rub=true) {
$p = @$GLOBALS['meta']['date_prochain_postdate'];
if ($t > time() AND (!$p OR ($t < $p))) {
include_spip('inc/meta');
ecrire_meta('date_prochain_postdate', $t['ts']);
ecrire_meta('date_prochain_postdate', $t);
ecrire_metas();
}
}

28
ecrire/inc/cron.php

@ -39,19 +39,18 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
//----------
// Les taches sont dans un array ('nom de la tache' => periodicite)
// Les taches sont dans un tableau ('nom de la tache' => periodicite)
// Cette fonction execute la tache la plus urgente (celle dont la date
// de derniere execution + la periodicite est minimale) sous reserve que
// le serveur MySQL soit actif.
// la base de donnees soit accessible.
// La date de la derniere intervention est donnee par un fichier homonyme,
// de suffixe ".lock", modifie a chaque intervention et des le debut
// de celle-ci afin qu'un processus concurrent ne la demarre pas aussi.
// Les taches les plus longues sont tronconnees, ce qui impose d'antidater
// le fichier de verrouillage (avec la valeur absolue du code de retour).
// La fonction executant la tache est un homonyme de prefixe "cron_"
// Le fichier homonyme de prefixe "inc_"
// est automatiquement charge si besoin, et est supposee la definir si ce
// n'est fait ici.
// La fonction executant la tache est un homonyme de prefixe "cron_".
// Elle doit etre definie dans le fichier homonyme du repertoire "inc/"
// qui est automatiquement lu.
// http://doc.spip.org/@spip_cron
function spip_cron($taches = array()) {
@ -79,11 +78,11 @@ function spip_cron($taches = array()) {
$tache = $nom;
$last = $date_lock;
}
// debug : si la date du fichier est superieure a l'heure actuelle,
// c'est que le serveur a (ou a eu) des problemes de reglage horaire
// qui peuvent mettre en peril les taches cron : signaler dans le log
// (On laisse toutefois flotter sur une heure, pas la peine de s'exciter
// pour si peu)
// debug : si la date du fichier est superieure a l'heure actuelle,
// c'est que le serveur a (ou a eu) des problemes de reglage horaire
// qui peuvent mettre en peril les taches cron : signaler dans le log
// (On laisse toutefois flotter sur une heure, pas la peine de s'exciter
// pour si peu)
else if ($date_lock > $t + 3600)
spip_log("Erreur de date du fichier $lock : $date_lock > $t !");
}
@ -92,7 +91,7 @@ function spip_cron($taches = array()) {
// Interdire des taches paralleles, de maniere a eviter toute concurrence
// entre deux SPIP partageant la meme base, ainsi que toute interaction
// bizarre entre des taches differentes
// Ne rien lancer non plus si serveur naze evidemment
// Ne rien lancer non plus evidemment si la base est inaccessible.
if (!spip_get_lock('cron')) {
spip_log("tache $tache: pas de lock cron");
@ -121,7 +120,7 @@ function spip_cron($taches = array()) {
}# else spip_log("cron $tache a reprendre");
}
// relacher le lock mysql
// relacher le verrour
spip_release_lock('cron');
}
@ -136,7 +135,8 @@ function taches_generales() {
$taches_generales = array();
// MAJ des rubriques publiques (cas de la publication post-datee)
$taches_generales['rubriques'] = 3600;
// est fait au coup par coup a present
// $taches_generales['rubriques'] = 3600;
// Optimisation de la base
$taches_generales['optimiser'] = 3600*48;

44
ecrire/inc/rubriques.php

@ -14,13 +14,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
// Fonction a appeler lorsque le statut d'un objet change dans une rubrique
// Si l'objet etait publie' et est deplace' ou depublie'
// on recalcule toutes les rubriques (a ameliorer).
// Si publication standard, ne recalculer que la branche
// avec consequence sur ses parentes et les langues
// Si l'objet passe a "publie"
// consequence sur ses parentes et les langues
// Idem s'il est depublie'
// s'il est deplace' alors qu'il etait publieé, double consequence.
// (a refaire a terme par une Cascade SQL)
// http://doc.spip.org/@calculer_rubriques_if
@ -35,6 +34,7 @@ function calculer_rubriques_if ($id_rubrique, $modifs, $statut_ancien='')
$neuf |= publier_branche_rubrique($modifs['id_rubrique']);
} elseif ($modifs['statut']=='publie')
$neuf |= publier_branche_rubrique($id_rubrique);
if ($neuf)
// Sauver la date de la derniere mise a jour (pour menu_rubriques)
ecrire_meta("date_calcul_rubriques", date("U"));
@ -58,18 +58,19 @@ function publier_branche_rubrique($id_rubrique)
spip_query("UPDATE spip_rubriques SET statut='publie', date=NOW() WHERE id_rubrique=$id_pred");
if (!($id_pred = $r['id_parent'])) break;
}
# spip_log(" publier_branche_rubrique($id_rubrique $id_pred");
return $id_pred != $id_rubrique;
}
// Fonction a appeler lorsqu'on depublie ou supprime qqch dans une rubrique
// retourne Vrai si le statut change effectivement
// http://doc.spip.org/@publier_branche_rubrique
function depublier_branche_rubrique_if($id_rubrique)
{
$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
" AND date <= NOW()" : '';
# spip_log("depublier_branche_rubrique($id_rubrique ?");
$id_pred = $id_rubrique;
while ($id_pred) {
@ -89,11 +90,13 @@ function depublier_branche_rubrique_if($id_rubrique)
return $id_pred != $id_rubrique;;
spip_query("UPDATE spip_rubriques SET statut='0' WHERE id_rubrique=$id_pred");
# spip_log("depublier_rubrique $id_pred");
$r = spip_abstract_fetch(spip_query("SELECT id_parent FROM spip_rubriques WHERE id_rubrique=$id_pred"));
$id_pred = $r['id_parent'];
}
return $id_pred != $id_rubrique;;
}
@ -366,14 +369,31 @@ function calcul_branche ($generation) {
}
}
// Appelee lorsqu'un (ou plusieurs) article post-date arrive a terme
// ou est redate'
// Si $check, affecte le statut des rubriques concernees.
// http://doc.spip.org/@calculer_prochain_postdate
function calculer_prochain_postdate() {
function calculer_prochain_postdate($check= false) {
if ($check) {
$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
"AND A.date <= NOW()" : '';
$r = spip_query("SELECT DISTINCT A.id_rubrique AS id FROM spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique WHERE R.statut != 'publie' AND A.statut='publie'$postdates");
while ($row = spip_abstract_fetch($r))
publier_branche_rubrique($row['id']);
}
include_spip('inc/meta');
$s = spip_query("SELECT UNIX_TIMESTAMP(date) AS ts FROM spip_articles WHERE statut='publie' AND date>"._q(date('Y-m-d H:i:s'))." ORDER BY date LIMIT 1");
if ($t = spip_abstract_fetch($s))
ecrire_meta('date_prochain_postdate', $t['ts']);
else
$t = spip_abstract_fetch(spip_query("SELECT date FROM spip_articles WHERE statut='publie' AND date > NOW() ORDER BY date LIMIT 1"));
if ($t) {
$t = $t['date'];
ecrire_meta('date_prochain_postdate', strtotime($t));
} else
effacer_meta('date_prochain_postdate');
spip_log("prochain postdate: $t");
ecrire_metas(); // attention, sert aussi aux appelants
}

7
ecrire/public.php

@ -244,11 +244,16 @@ if (defined('_INC_PUBLIC')) {
// Gestion des statistiques du site public
if (($GLOBALS['meta']["activer_statistiques"] != "non")
AND $spip_compter_visites!='non') {
AND $spip_compter_visites!='non') {
$stats = charger_fonction('stats', 'public');
$stats();
}
if (@$GLOBALS['meta']['date_prochain_postdate'] <= time()) {
include_spip('inc/rubriques');
calculer_prochain_postdate(true);
}
// Effectuer une tache de fond ?
// si #SPIP_CRON est present, on ne le tente que pour les navigateurs
// en mode texte (par exemple), et seulement sur les pages web

Loading…
Cancel
Save