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.

105 lines
4.0 KiB

  1. <?php
  2. if (!defined('_ECRIRE_INC_VERSION')) {
  3. return;
  4. }
  5. function autoriser_testotor_dist($action, $type, $id) {
  6. echo "<span style='color:mediumblue; background-color:lightblue'>autoriser($action, $type, $id)</span><br>";
  7. return true;
  8. }
  9. function compile_appel_macro_autoriser ($p) {
  10. if (!existe_argument_balise(1, $p)) {
  11. erreur_squelette ("Il faut au moins un argument à la balise #_AUTORISER", $p);
  12. return "''";
  13. };
  14. $autorisation = interprete_argument_balise(1, $p);
  15. if (erreur_argument_macro ('#_AUTORISER_SI', 'autorisation', $autorisation, $p))
  16. return "''";
  17. // l'autorisation peut être appelé avec 0, un ou 2 arguments
  18. if (!existe_argument_balise(2, $p))
  19. return "autoriser('.\"$autorisation\".')";
  20. $type = trim_quote(interprete_argument_balise (2, $p));
  21. if (erreur_argument_macro ("#_AUTORISER_SI{ $autorisation,...}", 'type', $type, $p))
  22. return "''";
  23. if (!existe_argument_balise(3, $p))
  24. return "autoriser('.\"$autorisation\".', '.\"$type\".')";
  25. // Le 3eme argument peut être une constante ou un argument calculé
  26. // Il y a 4 possibilités de passer des id calculées à #_AUTORISER_SI :
  27. // - Appels directs de #BALISE ou #GET{variable}
  28. // - Passer 'env', 'boucle' et 'url' pour chercher l'id_ associé au type dans l'env reçu, dans la boucle immédiatement englobante ou dans l'url
  29. // Ex : #_AUTORISER{modifier,article,env} ou #_AUTORISER{modifier,article,boucle} ou #_AUTORISER{modifier,article,url}
  30. //
  31. $id = trim_quote(interprete_argument_balise (3, $p));
  32. if (!existe_argument_balise(4, $p)) {
  33. $id_type_q = "'".id_table_objet(trim($type, "'"))."'";
  34. // Gérer la présence de motclés env, boucle, url : désormais obsolète ?
  35. switch($id) {
  36. case "'env'" :
  37. $ret = "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"macrosession_pipe({\$Pile[0][$id_type_q]})\".')";
  38. if (debug_get_mode('macrosession'))
  39. echo "Avec 'env' : compile appel autoriser donne <pre>$ret</pre><br>";
  40. return $ret;
  41. case "'boucle'" :
  42. $ret = "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"macrosession_pipe({\$Pile[\$SP][$id_type_q]})\".')";
  43. if (debug_get_mode('macrosession'))
  44. echo "Avec 'boucle' : compile appel autoriser donne <pre>$ret</pre><br>";
  45. return $ret;
  46. case "'url'" :
  47. if (debug_get_mode('macrosession')) {
  48. echo "Avec 'url' : compile appel autoriser($autorisation, $type, _request($id_type_q)<br>";
  49. };
  50. $ret = "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"macrosession_pipe(_request($id_type_q))\".')";
  51. return $ret;
  52. default :
  53. // préparer l'expression compilée à être réinjectée (code introspectivement modifié)
  54. $id = reinjecte_expression_compilee($id);
  55. // TODO : Récupérer les erreurs de syntaxe
  56. // Avant on avait une reconnaissance plus ciblée (décompilation de #UNE_BALISE et #GET{unevariable}) suivis de :
  57. // if (erreur_argument_macro ("#_AUTORISER_SI{ $autorisation, $type, ...}", 'id', $id, $p, 'contexte_ok') return "''";
  58. return "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"$id\".')";
  59. }
  60. };
  61. // ATTENTION : Les appels à #_AUTORISER_SI avec arguments $qui et $opt n'ont jamais été testés
  62. $qui = trim_quote(interprete_argument_balise (4, $p));
  63. if (erreur_argument_macro ("#_AUTORISER_SI{ $autorisation, $type, $id, ...}", 'qui', $qui, $p))
  64. return "''";
  65. if (!existe_argument_balise(5, $p))
  66. return "autoriser('.\"$autorisation\".', ' .\"$type\" .', ' .\"$id\" .', ' .\"$qui\" .')";
  67. $opt = trim_quote(interprete_argument_balise (5, $p));
  68. if (erreur_argument_macro ('#_AUTORISER_SI', 'opt', $opt, $p))
  69. return "''";
  70. return "autoriser('.\"$autorisation\".', '.\"$type\" .', ' .\"$id\" .', ' .\"$qui\" .', ' .\"$opt\" .')";
  71. }
  72. function balise__AUTORISER_SI_dist($p) {
  73. $p->interdire_scripts = false;
  74. // Appelé uniquement au recalcul
  75. $p->code = V_OUVRE_PHP . 'if ('.compile_appel_macro_autoriser ($p).') { ' . V_FERME_PHP;
  76. return $p;
  77. }
  78. function balise__AUTORISER_SINON_dist($p) {
  79. return balise__SESSION_SINON_dist($p);
  80. }
  81. function balise__AUTORISER_FIN_dist($p) {
  82. return balise__SESSION_FIN_dist($p);
  83. }