smarty_internal_resource_stream.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * Smarty Internal Plugin Resource Stream
  4. * Implements the streams as resource for Smarty template
  5. *
  6. * @package Smarty
  7. * @subpackage TemplateResources
  8. * @author Uwe Tews
  9. * @author Rodney Rehm
  10. */
  11. /**
  12. * Smarty Internal Plugin Resource Stream
  13. * Implements the streams as resource for Smarty template
  14. *
  15. * @link http://php.net/streams
  16. * @package Smarty
  17. * @subpackage TemplateResources
  18. */
  19. class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled
  20. {
  21. /**
  22. * populate Source Object with meta data from Resource
  23. *
  24. * @param Smarty_Template_Source $source source object
  25. * @param Smarty_Internal_Template $_template template object
  26. *
  27. * @return void
  28. */
  29. public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
  30. {
  31. if (strpos($source->resource, '://') !== false) {
  32. $source->filepath = $source->resource;
  33. } else {
  34. $source->filepath = str_replace(':', '://', $source->resource);
  35. }
  36. $source->uid = false;
  37. $source->content = $this->getContent($source);
  38. $source->timestamp = $source->exists = !!$source->content;
  39. }
  40. /**
  41. * Load template's source from stream into current template object
  42. *
  43. * @param Smarty_Template_Source $source source object
  44. *
  45. * @return string template source
  46. * @throws SmartyException if source cannot be loaded
  47. */
  48. public function getContent(Smarty_Template_Source $source)
  49. {
  50. $t = '';
  51. // the availability of the stream has already been checked in Smarty_Resource::fetch()
  52. $fp = fopen($source->filepath, 'r+');
  53. if ($fp) {
  54. while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
  55. $t .= $current_line;
  56. }
  57. fclose($fp);
  58. return $t;
  59. } else {
  60. return false;
  61. }
  62. }
  63. /**
  64. * modify resource_name according to resource handlers specifications
  65. *
  66. * @param Smarty $smarty Smarty instance
  67. * @param string $resource_name resource_name to make unique
  68. * @param boolean $isConfig flag for config resource
  69. *
  70. * @return string unique resource name
  71. */
  72. public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
  73. {
  74. return get_class($this) . '#' . $resource_name;
  75. }
  76. }