PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/Haanga/Extension/Tag/Exec.php

http://github.com/crodas/Haanga
PHP | 49 lines | 37 code | 9 blank | 3 comment | 11 complexity | 4afed26ca75f00e289514609ff5b60cf MD5 | raw file
  1. <?php
  2. class Haanga_Extension_Tag_Exec
  3. {
  4. public $is_block = FALSE;
  5. static function generator($cmp, $args, $assign=NULL)
  6. {
  7. if (!$cmp->getOption('allow_exec')) {
  8. $cmp->Error("Tag exec is disabled for security reasons");
  9. }
  10. $code = hcode();
  11. if (Haanga_AST::is_var($args[0])) {
  12. $args[0] = $args[0]['var'];
  13. } else if (Haanga_AST::is_str($args[0])) {
  14. $args[0] = $args[0]['string'];
  15. } else {
  16. $cmp->Error("invalid param");
  17. }
  18. // fix for static calls {{{
  19. if (is_array($args[0])) {
  20. $end = end($args[0]);
  21. if (isset($end['class'])) {
  22. $args[0][ key($args[0]) ]['class'] = substr($end['class'], 1);
  23. }
  24. }
  25. // }}}
  26. $exec = hexec($args[0]);
  27. for ($i=1; $i < count($args); $i++) {
  28. $exec->param($args[$i]);
  29. }
  30. $exec->end();
  31. if ($assign) {
  32. $code->decl($assign, $exec);
  33. // make it global
  34. $code->decl($cmp->getScopeVariable($assign), hvar($assign));
  35. } else {
  36. $cmp->do_print($code, $exec);
  37. }
  38. return $code;
  39. }
  40. }