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