inc-calcul-squel.php3 inc-calcul_mysql3.php inc-messforum.php3 1.227 1.6 1.2 1.228 1.7 1.3

Update of /home/spip-cvs/spip
In directory alan:/tmp/cvs-serv26308

Modified Files:
  inc-calcul-squel.php3 inc-calcul_mysql3.php inc-messforum.php3
Log Message:
Invalidation de TOUS les caches référençant un forum mis à jour

Index: inc-calcul-squel.php3

RCS file: /home/spip-cvs/spip/inc-calcul-squel.php3,v
retrieving revision 1.227
retrieving revision 1.228
diff -u -d -r1.227 -r1.228
--- inc-calcul-squel.php3 21 Jul 2004 20:36:16 -0000 1.227
+++ inc-calcul-squel.php3 22 Jul 2004 18:04:57 -0000 1.228
@@ -60,18 +60,24 @@
         strpos($return,'compteur_boucle');
   $primary_key = $table_primary[$type_boucle];

- if ($primary_key) // sinon c'est une boucle hors Spip
+# invalidation des caches si c'est une boucle SPIP, non constante de surcroit
+ if ((!$primary_key) || $constant)
+ $invalide = '';
+ else
     {
- // invalidation des caches si la boucle n'est pas constante
- if ($constant)
- $invalide = '';
- else
- {$id_table = $table_des_tables[$type_boucle];
- $boucle->select[] = "$id_table.$primary_key";
- $invalide = '
- $Cache["' . $primary_key . '"][$Pile[$SP]["' .
- $primary_key . '"]]=1;';
- }
+ $id_table = $table_des_tables[$type_boucle];
+ $boucle->select[] = "$id_table.$primary_key";
+ $invalide = '
+ $Cache["' . $primary_key . '"][' .
+ (($primary_key != 'id_forum') ?
+ ('$Pile[$SP]["' . $primary_key . '"]') :
+ ('calcul_index_forum(' .
+# Retournera 4 [$SP] mais force la demande du champ au serveur SQL
+ index_pile($id_boucle, 'id_article', $boucles) . ',' .
+ index_pile($id_boucle, 'id_breve', $boucles) . ',' .
+ index_pile($id_boucle, 'id_syndic', $boucles) . ',' .
+ index_pile($id_boucle, 'id_rubrique', $boucles) . ')')) .
+ '] = 1;';
     }
   $debut =
     ((!$flag_cpt) ? "" : "\n\t\t\$compteur_boucle++;") .
@@ -163,7 +169,6 @@
   return $h0;')));
}

-
// une grosse fonction pour un petit cas

function calculer_parties($partie, $mode_partie, $total_parties, $id_boucle)
@@ -300,7 +305,7 @@
       $exp = "";
         } else { $texte .= $m;}
         $texte .= "\n\t\tif ($t = $c) {\n" . $bm;
- $texte .= "\n\t\t$t = $bc . $t";
+ if ($bc != "''") $texte .= "\n\t\t$t = $bc . $t";
         if (!$am) {
     $texte .= " . $ac";
         } else $texte .= "; $am $t .= $ac";

Index: inc-calcul_mysql3.php

RCS file: /home/spip-cvs/spip/inc-calcul_mysql3.php,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- inc-calcul_mysql3.php 22 Jul 2004 13:33:04 -0000 1.6
+++ inc-calcul_mysql3.php 22 Jul 2004 18:04:57 -0000 1.7
@@ -105,6 +105,16 @@
   return array($titre, $table, $forum);
}

+# Index arbitraire mais ressemblant aux md5 utilisés ailleurs
+function calcul_index_forum($id_article, $id_breve, $id_rubrique, $id_syndic)
+{
+ return
+ 'a' . ($id_article ? $id_article : '0') .
+ 'b' . ($id_breve ? $id_breve : '0') .
+ 'c' . ($id_rubrique ? $id_rubrique : '0') .
+ 'd' . ($id_syndic ? $id_syndic : '0');
+}
+
# Critere {branche} : recuperer les descendants d'une rubrique

function calcul_mysql_in($val, $valeurs, $tobeornotobe)
@@ -241,4 +251,6 @@
   return '';
}

+
+
?>

Index: inc-messforum.php3

RCS file: /home/spip-cvs/spip/inc-messforum.php3,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- inc-messforum.php3 19 Jul 2004 22:33:07 -0000 1.2
+++ inc-messforum.php3 22 Jul 2004 18:04:57 -0000 1.3
@@ -152,16 +152,27 @@

   if (file_exists('inc-invalideur.php3'))
     {
- include('inc-invalideur.php3');
- applique_invalideur(($statut == 'publie') ?
- array($var_cache, $cache) :
- array($var_cache));
- }
- else // minimum vital
- {
- @unlink($var_cache);
- if ($statut == 'publie') @unlink($cache);
+ include_local('inc-invalideur.php3');
+ if ($statut != 'publie')
+ applique_invalideur(array($var_cache));
+ else {
+ include_local('inc-calcul_mysql3.php3');
+ suivre_invalideur("id_forum='" .
+ calcul_index_forum($forum_id_article,
+ $forum_id_breve,
+ $forum_id_rubrique,
+ $forum_id_syndic) .
+ "'",
+ 'spip_id_forum_caches');
+ }
     }
+ // trou de sécurité si on ne vérifie pas
+ // (code transitoire ne cas d'absence d'invalideur)
+ // else
+ // {
+ // @unlink($var_cache);
+ // if ($statut == 'publie') @unlink($cache);
+ // }
     }
     $redirect = $retour_forum;
  }