CatalyzCache.class.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. class CatalyzCache {
  3. /**
  4. * CatalyzCache::create()
  5. *
  6. * @param int $node_id
  7. * @param string $culture
  8. */
  9. public static function create($node_id = null, $culture = null)
  10. {
  11. if (!is_null($node_id) && !is_null($culture)) {
  12. $content_tree = ContentTree::instance($culture);
  13. $content_tree->build();
  14. $content_tree->initializeCurrentNodeById($node_id);
  15. self::createChildren(array($content_tree->getCurrentNode()), $culture, false);
  16. } elseif (is_null($node_id) && is_null($culture)) {
  17. foreach (Catalyz::getAllTranslations() as $code => $translation_name) {
  18. $content_tree = ContentTree::instance($code);
  19. $content_tree->build();
  20. self::createChildren(array($content_tree->getRoot()), $code);
  21. }
  22. }
  23. }
  24. /**
  25. * CatalyzCache::clear()
  26. *
  27. * @param int $node_id
  28. * @param string $culture
  29. * @param boolean $regenerate
  30. */
  31. public static function clear($node_id = null, $culture = null, $regenerate = false)
  32. {
  33. if (!is_null($node_id) && !is_null($culture)) {
  34. $content_tree = ContentTree::instance($culture);
  35. $content_tree->initializeCurrentNodeById($node_id);
  36. $content_tree_node = $content_tree->getCurrentNode();
  37. if (!is_null($content_tree_node)) {
  38. $path_to_cache_file = $content_tree_node->getPathToCacheFile($culture);
  39. if (is_file($path_to_cache_file)) {
  40. unlink($path_to_cache_file);
  41. if ($regenerate) {
  42. self::create($node_id, $culture);
  43. }
  44. }
  45. }
  46. } elseif (is_null($node_id) && is_null($culture)) {
  47. sfToolkit::clearDirectory(sfConfig::get('sf_web_dir') . '/cache');
  48. }
  49. }
  50. public static function refresh()
  51. {
  52. $languages = Catalyz::getAllTranslations();
  53. foreach($languages as $culture => $langName) {
  54. $ContentTree = ContentTree::instance($culture);
  55. $ContentTree->build();
  56. $iterator = new ContentTreeNodeIterator($ContentTree);
  57. while ($ContentTreeNode =/*(ContentTreeNode)*/ $iterator->next()) {
  58. $path_to_cache_file = $ContentTreeNode->getPathToCacheFile($culture);
  59. if (file_exists($path_to_cache_file)) {
  60. unlink($path_to_cache_file);
  61. self::create($ContentTreeNode->getId(), $culture);
  62. }
  63. }
  64. }
  65. }
  66. /**
  67. * CatalyzCache::clearAll()
  68. */
  69. public static function clearAll()
  70. {
  71. self::clear();
  72. }
  73. /**
  74. * CatalyzCache::regenerate()
  75. *
  76. * @param int $node_id
  77. * @param string $culture
  78. */
  79. public static function regenerate($node_id = null, $culture = null)
  80. {
  81. self::clear($node_id, $culture, true);
  82. }
  83. /**
  84. * CatalyzCache::regenerateAll()
  85. */
  86. public static function regenerateAll()
  87. {
  88. $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', true);
  89. sfContext::createInstance($configuration);
  90. foreach (Catalyz::getAllTranslations() as $code => $translation_name) {
  91. $content_tree = ContentTree::instance($code);
  92. $content_tree->build();
  93. self::regenerateChildren(array($content_tree->getRoot()), $code);
  94. }
  95. }
  96. /**
  97. * CatalyzCache::createChildren()
  98. *
  99. * @param array $content_tree_nodes
  100. * @param string $culture
  101. * @param boolean $recursive
  102. */
  103. protected static function createChildren($content_tree_nodes, $culture, $recursive = true)
  104. {
  105. if (0 < count($content_tree_nodes)) {
  106. foreach ($content_tree_nodes as $content_tree_node) {
  107. if ($content_tree_node->isTranslationAvailable($culture)) {
  108. $path_to_cache_file = $content_tree_node->getPathToCacheFile($culture);
  109. if (!is_file($path_to_cache_file)) {
  110. if (!is_dir(str_replace(basename($path_to_cache_file), '', $path_to_cache_file))) {
  111. mkdir(str_replace(basename($path_to_cache_file), '', $path_to_cache_file), 0777, true);
  112. }
  113. } else {
  114. unlink($path_to_cache_file);
  115. }
  116. file_put_contents($path_to_cache_file, file_get_contents(sfConfig::get('app_static_url') . $content_tree_node->getUrl($culture, false)));
  117. }
  118. if ($recursive) {
  119. self::createChildren($content_tree_node->children, $culture);
  120. }
  121. }
  122. }
  123. }
  124. /**
  125. * CatalyzCache::regenerateChildren()
  126. *
  127. * @param array $content_tree_nodes
  128. * @param string $culture
  129. */
  130. protected static function regenerateChildren($content_tree_nodes, $culture)
  131. {
  132. if (0 < count($content_tree_nodes)) {
  133. foreach ($content_tree_nodes as $content_tree_node) {
  134. $path_to_cache_file = $content_tree_node->getPathToCacheFile($culture);
  135. if (is_file($path_to_cache_file)) {
  136. unlink($path_to_cache_file);
  137. file_put_contents($path_to_cache_file, file_get_contents(sfConfig::get('app_static_url') . $content_tree_node->getUrl($culture, false)));
  138. }
  139. self::regenerateChildren($content_tree_node->children, $culture);
  140. }
  141. }
  142. }
  143. }