1. sfMessageSource_Aggregate.class.php
  2. /** * sfMessageSource_Aggregate aggregates several message source objects. * * @package symfony * @subpackage i18n * @author Fabien Potencier * @version SVN: $Id: sfMessageSource_Aggregate.class.php 13401 2008-11-27 11:18:39Z fabien $ */
  3. class sfMessageSource_Aggregate extends sfMessageSource
  4. {
  5. protected
  6. $messageSources = array();
  7. /**
  8. * Constructor.
  9. *
  10. * The order of the messages sources in the array is important.
  11. * This class will take the first translation found in the message sources.
  12. *
  13. * @param array $messageSources An array of message sources.
  14. *
  15. * @see MessageSource::factory();
  16. */
  17. function __construct($messageSources)
  18. {
  19. $this->messageSources = $messageSources;
  20. }
  21. public function setCulture($culture)
  22. {
  23. parent::setCulture($culture);
  24. foreach ($this->messageSources as $messageSource)
  25. {
  26. $messageSource->setCulture($culture);
  27. }
  28. }
  29. protected function getLastModified($sources)
  30. {
  31. $lastModified = time();
  32. foreach ($sources as $source)
  33. {
  34. $lastModified = min($lastModified, $source[0]->getLastModified($source[1]));
  35. }
  36. return $lastModified;
  37. }
  38. public function isValidSource($sources)
  39. {
  40. foreach ($sources as $source)
  41. {
  42. if (false === $source[0]->isValidSource($source[1]))
  43. {
  44. continue;
  45. }
  46. return true;
  47. }
  48. return false;
  49. }
  50. public function getSource($variant)
  51. {
  52. $sources = array();
  53. foreach ($this->messageSources as $messageSource)
  54. {
  55. $sources[] = array($messageSource, $messageSource->getSource(str_replace($messageSource->getId(), '', $variant)));
  56. }
  57. return $sources;
  58. }
  59. public function &loadData($sources)
  60. {
  61. $messages = array();
  62. foreach ($sources as $source)
  63. {
  64. if (false === $source[0]->isValidSource($source[1]))
  65. {
  66. continue;
  67. }
  68. $data = $source[0]->loadData($source[1]);
  69. if (is_array($data))
  70. {
  71. $messages = array_merge($data, $messages);
  72. }
  73. }
  74. return $messages;
  75. }
  76. public function getCatalogueList($catalogue)
  77. {
  78. $variants = array();
  79. foreach ($this->messageSources as $messageSource)
  80. {
  81. foreach ($messageSource->getCatalogueList($catalogue) as $variant)
  82. {
  83. $variants[] = $messageSource->getId().$variant;
  84. }
  85. }
  86. return $variants;
  87. }
  88. public function append($message)
  89. {
  90. // Append to the first message source only
  91. if (count($this->messageSources))
  92. {
  93. $this->messageSources[0]->append($message);
  94. }
  95. }
  96. public function update($text, $target, $comments, $catalogue = 'messages')
  97. {
  98. // Only update one message source
  99. foreach ($this->messageSources as $messageSource)
  100. {
  101. if ($messageSource->update($text, $target, $comments, $catalogue))
  102. {
  103. return true;
  104. }
  105. }
  106. return false;
  107. }
  108. public function delete($message, $catalogue = 'messages')
  109. {
  110. $retval = false;
  111. foreach ($this->messageSources as $messageSource)
  112. {
  113. if ($messageSource->delete($message, $catalogue))
  114. {
  115. $retval = true;
  116. }
  117. }
  118. return $retval;
  119. }
  120. public function save($catalogue = 'messages')
  121. {
  122. $retval = false;
  123. foreach ($this->messageSources as $messageSource)
  124. {
  125. if ($messageSource->save($catalogue))
  126. {
  127. $retval = true;
  128. }
  129. }
  130. return $retval;
  131. }
  132. public function getId()
  133. {
  134. $id = '';
  135. foreach ($this->messageSources as $messageSource)
  136. {
  137. $id .= $messageSource->getId();
  138. }
  139. return md5($id);
  140. }
  141. public function catalogues()
  142. {
  143. throw new sfException('The "catalogues()" method is not implemented for this message source.');
  144. }
  145. }

Debug toolbar