[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / titre_parent_fonctions.php
diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/titre_parent_fonctions.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/titre_parent_fonctions.php
new file mode 100644 (file)
index 0000000..bcfb96b
--- /dev/null
@@ -0,0 +1,151 @@
+<?php\r
+// filtre 'titre_rubrique' a utiliser sur #ID_RUBRIQUE d'un objet ou #ID_PARENT d'une rubrique\r
+// Ex :  : <BOUCLE_a(ARTICLES)>[(#ID_RUBRIQUE|titre_rubrique)]</BOUCLE_a>\r
+// Ex :  : <BOUCLE_b(BREVES)>[(#ID_RUBRIQUE|titre_rubrique)]</BOUCLE_b>\r
+// Ex :  : <BOUCLE_r(RUBRIQUES)>[(#ID_PARENT|titre_rubrique)]</BOUCLE_r>\r
+//\r
+// filtre 'titre_groupe' a utiliser sur #ID_GROUPE d'un mot-clef\r
+// Ex :  : <BOUCLE_m(MOTS)>[(#ID_GROUPE|titre_groupe)]</BOUCLE_m>\r
+if(defined('_SPIP19300')) {\r
+       function filtre_titre_rubrique($id_rubrique, $table='rubriques', $id='id_rubrique') {\r
+               return cs_titre_id($id_rubrique, $table, $id);\r
+       }\r
+       function filtre_titre_groupe($id_mot, $table='groupes_mots', $id='id_groupe') {\r
+               return cs_titre_id($id_mot, $table, $id);\r
+       }\r
+} else {\r
+       function titre_rubrique($id_rubrique, $table='rubriques', $id='id_rubrique') {\r
+               return cs_titre_id($id_rubrique, $table, $id);\r
+       }\r
+       function titre_groupe($id_mot, $table='groupes_mots', $id='id_groupe') {\r
+               return cs_titre_id($id_mot, $table, $id);\r
+       }\r
+}\r
+\r
+// filtre 'titre_id', s'applique aux #ID_OBJET\r
+// Renvoie le titre trouve dans la $table_parent, la ou $champ_id = $id\r
+function cs_titre_id($id, $table_parent='rubriques', $champ_id='id_rubrique') {\r
+// spip_log("#TITRE_PARENT SELECTED FROM spip_$table_parent WHERE $champ_id=$id".(!$id?' : requete non executee':''));\r
+       // retour nul si pas de parent a priori\r
+       if(!$id) return '';\r
+       return cs_titre_sql($table_parent, "$champ_id=$id");\r
+}\r
+\r
+// choix du champ qui correspond a un titre\r
+function cs_titre_champ($table) {\r
+       return $table=='auteurs'?'nom':'titre';\r
+}\r
+\r
+// cherche le titre/nom d'un objet en base\r
+function cs_titre_sql($table, $where) {\r
+       $titre = cs_titre_champ($table);\r
+       // Utiliser la bonne requete en fonction de la version de SPIP\r
+       if(function_exists('sql_getfetsel') && function_exists('table_objet_sql')) {\r
+               // SPIP 2.0\r
+               if($r = sql_getfetsel($titre, table_objet_sql($table), $where))\r
+                       return $r;\r
+       } else {\r
+               if($r = spip_query("SELECT $titre FROM spip_$table WHERE $where"))\r
+                       // s'il existe un champ, on le retourne\r
+                       if($row = spip_fetch_array($r)) return $row[$titre];\r
+       }\r
+       // sinon, rien !\r
+       return '';\r
+}\r
+\r
+// Rubrique parente de tout objet possedant un 'id_rubrique' ou groupe de mot-clef\r
+function balise_TITRE_PARENT_dist($p) {\r
+       // examen du contexte\r
+       switch ($p->type_requete) {\r
+               case 'rubriques':\r
+                       $table_parent = 'rubriques';\r
+                       $champ_parent = 'id_rubrique';\r
+                       $id = 'id_parent';\r
+                       break;\r
+               case 'mots':\r
+                       $table_parent = 'groupes_mots';\r
+                       $id = $champ_parent = 'id_groupe';\r
+                       break;\r
+               default:\r
+                       $table_parent = 'rubriques';\r
+                       $id = $champ_parent = 'id_rubrique';\r
+                       break;\r
+       }\r
+       // id de l'objet a trouver pour retourner son titre\r
+       $id = champ_sql($id, $p);\r
+       // le code php a executer\r
+       $p->code = "cs_titre_id(intval($id), '$table_parent', '$champ_parent')";\r
+       $p->interdire_scripts = false;\r
+       return $p;\r
+}\r
+\r
+// juste le groupe d'un mot-clef\r
+function balise_TITRE_GROUPE_dist($p) {\r
+       $p->code = "''";\r
+       $p->interdire_scripts = false;\r
+       return $p->type_requete=='mots'?balise_TITRE_PARENT_dist($p):$p;\r
+}\r
+\r
+if(defined('_SPIP19300') && defined('_PARENTS_ETENDUS')) {\r
+\r
+       // recherche de la table associee a l'objet\r
+       function cs_table_objet($objet) {\r
+               switch($objet) {\r
+                       case 'trad': return 'articles';\r
+                       case 'thread': /*case 'forum':*/ return 'forum';\r
+                       case 'secteur': return 'rubriques';\r
+#                      case 'import': return ''; // a quoi ca sert ?\r
+               }\r
+               return table_objet($objet);\r
+       }\r
+       \r
+       // balise #TITRE_QQCHOSE\r
+       // voire #TITRE_QQCHOSE{id_qqchose}\r
+       function balise_TITRE__dist($p) {\r
+               $champ = $p->nom_champ;\r
+               if ($f = charger_fonction($champ, 'balise', true))\r
+                       return $f($p);\r
+               $code = champ_sql($champ, $p);\r
+               if (strpos($code, '@$Pile[0]') !== false) {\r
+                       // le champ est absent de la base, on peut calculer la balise\r
+                       preg_match(",^TITRE_([A-Z_]+)?$,i", $champ, $regs);\r
+                       $objet = strtolower($regs[1]);\r
+                       $table = cs_table_objet($objet);\r
+                       $champ_parent = id_table_objet($table);\r
+                       // id de l'objet a trouver pour retourner son titre\r
+                       $id = ($v = interprete_argument_balise(1,$p))!==NULL ? $v : champ_sql('id_'.$objet, $p);\r
+                       // le code php a executer, avant de le passer aux traitements\r
+                       $p->code = cs_titre_traitements("cs_titre_id(intval($id), '$table', '$champ_parent')", $table);\r
+               } else \r
+                       // puisque le champ est present dans la base, on le renvoie\r
+                       $p->code = champ_sql($champ, $p);\r
+               $p->interdire_scripts = false;\r
+               return $p;\r
+       }\r
+\r
+       // voir la fonction champs_traitements($p) dans : public/refereces.php\r
+       function cs_titre_traitements($code, $table) {\r
+               global $table_des_traitements;\r
+               $ps = $table_des_traitements[strtoupper(cs_titre_champ($table))];\r
+               if (is_array($ps))\r
+                       $ps = $ps[isset($ps[$table])?$table:0];\r
+               if (!$ps) return $code;\r
+               // champs sensibles\r
+               if(in_array($table, array('messages', 'forums', 'signatures', 'syndic_articles')))\r
+                       $ps = "safehtml($ps)";\r
+               // remplacement final\r
+               return str_replace('%s', $code, $ps);\r
+       }\r
+\r
+} // if(defined('_SPIP19300'))\r
+\r
+include_spip('public/interfaces');\r
+global $table_des_traitements;\r
+\r
+// TITRE_PARENT et TITRE_GROUPE sont des TITREs !\r
+if (!isset($table_des_traitements['TITRE_PARENT']))\r
+       $table_des_traitements['TITRE_PARENT'] = $table_des_traitements['TITRE'];\r
+if (!isset($table_des_traitements['TITRE_GROUPE']))\r
+       $table_des_traitements['TITRE_GROUPE'] = $table_des_traitements['TITRE'];\r
+\r
+?>
\ No newline at end of file