You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.3 KiB

  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2020 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. /**
  12. * Déclarations de fonctions pour le compilateur
  13. *
  14. * @package SPIP\Sites\Compilateur
  15. **/
  16. if (!defined('_ECRIRE_INC_VERSION')) {
  17. return;
  18. }
  19. /**
  20. * Compile la boucle `SITES` qui retourne la liste des sites référencés
  21. *
  22. * @param string $id_boucle
  23. * Identifiant de la boucle
  24. * @param array $boucles
  25. * AST du squelette
  26. * @return string
  27. * Code PHP compilé de la boucle
  28. **/
  29. function boucle_SITES_dist($id_boucle, &$boucles) {
  30. $boucle = &$boucles[$id_boucle];
  31. $boucle->type_requete = 'syndication'; // pas sur que ce soit indispensable
  32. if (!function_exists($f = 'boucle_SYNDICATION') and !function_exists($f = $f . '_dist')) {
  33. $f = 'calculer_boucle';
  34. }
  35. return $f($id_boucle, $boucles);
  36. }
  37. /**
  38. * Decoder le champ raw_data d'un article syndique en tableau de donnees utilisable
  39. * @param string $methode_syndication
  40. * @param string $raw_data
  41. * @param string $raw_format
  42. * @return array
  43. */
  44. function syndic_article_raw_data_to_array($methode_syndication, $raw_data, $raw_format) {
  45. $data = array();
  46. if ($methode_syndication
  47. and $syndic = charger_fonction($methode_syndication, 'syndic', true)
  48. and $methode_row_data_to_array = charger_fonction($methode_syndication . "_raw_data_to_array", 'syndic', true)) {
  49. $data = $methode_row_data_to_array($raw_data, $raw_format);
  50. }
  51. return $data;
  52. }
  53. /**
  54. * Compile la balise `#RAW_DATA` retournant le champ `raw_data`
  55. *
  56. * Utile dans une boucle SYNDIC_ARTICLES pour retourner les donnees brutes de syndication.
  57. *
  58. * @balise
  59. * @see table_valeur()
  60. * @example
  61. * ```
  62. * #RAW_DATA* renvoie le champ raw_data brut, au format texte
  63. * #RAW_DATA renvoie le champ raw_data au format tableau structure si il a pu etre decode par la fonction fournie par la methode de syndication
  64. * #RAW_DATA{x} renvoie #RAW_DATA|table_valeur{x},
  65. * #RAW_DATA{a/b} renvoie #RAW_DATA|table_valeur{a/b}
  66. * ```
  67. *
  68. * @param Champ $p
  69. * Pile au niveau de la balise
  70. * @return Champ
  71. * Pile complétée par le code à générer
  72. **/
  73. function balise_RAW_DATA_dist($p) {
  74. $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle;
  75. $_raw_data = index_pile($p->id_boucle, 'raw_data', $p->boucles, $b);
  76. if ($p->etoile) {
  77. $p->code = $_raw_data;
  78. }
  79. else {
  80. $_raw_format = index_pile($p->id_boucle, 'raw_format', $p->boucles, $b);
  81. $_raw_methode = index_pile($p->id_boucle, 'raw_methode', $p->boucles, $b);
  82. $p->code = "syndic_article_raw_data_to_array($_raw_methode, $_raw_data, $_raw_format)";
  83. if (($v = interprete_argument_balise(1, $p)) !== null) {
  84. $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
  85. }
  86. }
  87. $p->interdire_scripts = true;
  88. return $p;
  89. }