[(#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']; ?>