Pool.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\AdminBundle\Admin;
  11. use Symfony\Component\DependencyInjection\ContainerInterface;
  12. class Pool
  13. {
  14. protected $container = null;
  15. protected $adminServiceIds = array();
  16. protected $adminGroups = array();
  17. protected $adminClasses = array();
  18. protected $templates = array();
  19. /**
  20. * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
  21. */
  22. public function __construct(ContainerInterface $container)
  23. {
  24. $this->container = $container;
  25. }
  26. /**
  27. * @return array
  28. */
  29. public function getGroups()
  30. {
  31. $groups = $this->adminGroups;
  32. foreach ($this->adminGroups as $name => $adminGroup) {
  33. foreach ($adminGroup as $id => $options) {
  34. $groups[$name][$id] = $this->getInstance($id);
  35. }
  36. }
  37. return $groups;
  38. }
  39. /**
  40. * @return array
  41. */
  42. public function getDashboardGroups()
  43. {
  44. $groups = $this->adminGroups;
  45. foreach ($this->adminGroups as $name => $adminGroup) {
  46. if (isset($adminGroup['items'])) {
  47. foreach ($adminGroup['items'] as $key => $id) {
  48. $groups[$name]['items'][$key] = $this->getInstance($id);
  49. }
  50. }
  51. if (empty($groups[$name])) {
  52. unset($groups[$name]);
  53. }
  54. }
  55. return $groups;
  56. }
  57. /**
  58. * return the admin related to the given $class
  59. *
  60. * @param string $class
  61. * @return \Sonata\AdminBundle\Admin\AdminInterface|null
  62. */
  63. public function getAdminByClass($class)
  64. {
  65. if (!isset($this->adminClasses[$class])) {
  66. return null;
  67. }
  68. return $this->getInstance($this->adminClasses[$class]);
  69. }
  70. /**
  71. * Returns an admin class by its Admin code
  72. * ie : sonata.news.admin.post|sonata.news.admin.comment => return the child class of post
  73. *
  74. * @param string $adminCode
  75. * @return \Sonata\AdminBundle\Admin\AdminInterface|null
  76. */
  77. public function getAdminByAdminCode($adminCode)
  78. {
  79. $codes = explode('|', $adminCode);
  80. $admin = false;
  81. foreach ($codes as $code) {
  82. if ($admin == false) {
  83. $admin = $this->getInstance($code);
  84. } else if ($admin->hasChild($code)) {
  85. $admin = $admin->getChild($code);
  86. }
  87. }
  88. return $admin;
  89. }
  90. /**
  91. * Returns a new admin instance depends on the given code
  92. *
  93. * @param $id
  94. * @return \Sonata\AdminBundle\Admin\AdminInterface
  95. */
  96. public function getInstance($id)
  97. {
  98. return $this->container->get($id);
  99. }
  100. /**
  101. * @return null|\Symfony\Component\DependencyInjection\ContainerInterface
  102. */
  103. public function getContainer()
  104. {
  105. return $this->container;
  106. }
  107. /**
  108. * @param array $adminGroups
  109. * @return void
  110. */
  111. public function setAdminGroups(array $adminGroups)
  112. {
  113. $this->adminGroups = $adminGroups;
  114. }
  115. /**
  116. * @return array
  117. */
  118. public function getAdminGroups()
  119. {
  120. return $this->adminGroups;
  121. }
  122. /**
  123. * @param array $adminServiceIds
  124. * @return void
  125. */
  126. public function setAdminServiceIds(array $adminServiceIds)
  127. {
  128. $this->adminServiceIds = $adminServiceIds;
  129. }
  130. /**
  131. * @return array
  132. */
  133. public function getAdminServiceIds()
  134. {
  135. return $this->adminServiceIds;
  136. }
  137. /**
  138. * @param array $adminClasses
  139. * @return void
  140. */
  141. public function setAdminClasses(array $adminClasses)
  142. {
  143. $this->adminClasses = $adminClasses;
  144. }
  145. /**
  146. * @return array
  147. */
  148. public function getAdminClasses()
  149. {
  150. return $this->adminClasses;
  151. }
  152. /**
  153. * @param array $templates
  154. * @return void
  155. */
  156. public function setTemplates(array $templates)
  157. {
  158. $this->templates = $templates;
  159. }
  160. /**
  161. * @return array
  162. */
  163. public function getTemplates()
  164. {
  165. return $this->templates;
  166. }
  167. /**
  168. * @param $name
  169. * @return null|string
  170. */
  171. public function getTemplate($name)
  172. {
  173. if (isset($this->templates[$name])) {
  174. return $this->templates[$name];
  175. }
  176. return null;
  177. }
  178. }