Pool.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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. protected $title;
  20. protected $titleLogo;
  21. /**
  22. * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
  23. */
  24. public function __construct(ContainerInterface $container, $title, $logoTitle)
  25. {
  26. $this->container = $container;
  27. $this->title = $title;
  28. $this->titleLogo = $logoTitle;
  29. }
  30. /**
  31. * @return array
  32. */
  33. public function getGroups()
  34. {
  35. $groups = $this->adminGroups;
  36. foreach ($this->adminGroups as $name => $adminGroup) {
  37. foreach ($adminGroup as $id => $options) {
  38. $groups[$name][$id] = $this->getInstance($id);
  39. }
  40. }
  41. return $groups;
  42. }
  43. /**
  44. * @return array
  45. */
  46. public function getDashboardGroups()
  47. {
  48. $groups = $this->adminGroups;
  49. foreach ($this->adminGroups as $name => $adminGroup) {
  50. if (isset($adminGroup['items'])) {
  51. foreach ($adminGroup['items'] as $key => $id) {
  52. $admin = $this->getInstance($id);
  53. if ($admin->showIn(Admin::CONTEXT_DASHBOARD)) {
  54. $groups[$name]['items'][$key] = $admin;
  55. } else {
  56. unset($groups[$name]['items'][$key]);
  57. }
  58. }
  59. }
  60. if (empty($groups[$name]['items'])) {
  61. unset($groups[$name]);
  62. }
  63. }
  64. return $groups;
  65. }
  66. /**
  67. * return the admin related to the given $class
  68. *
  69. * @param string $class
  70. * @return \Sonata\AdminBundle\Admin\AdminInterface|null
  71. */
  72. public function getAdminByClass($class)
  73. {
  74. if (!$this->hasAdminByClass($class)) {
  75. return null;
  76. }
  77. return $this->getInstance($this->adminClasses[$class]);
  78. }
  79. /**
  80. * @param $class
  81. * @return bool
  82. */
  83. public function hasAdminByClass($class)
  84. {
  85. return isset($this->adminClasses[$class]);
  86. }
  87. /**
  88. * Returns an admin class by its Admin code
  89. * ie : sonata.news.admin.post|sonata.news.admin.comment => return the child class of post
  90. *
  91. * @param string $adminCode
  92. * @return \Sonata\AdminBundle\Admin\AdminInterface|null
  93. */
  94. public function getAdminByAdminCode($adminCode)
  95. {
  96. $codes = explode('|', $adminCode);
  97. $admin = false;
  98. foreach ($codes as $code) {
  99. if ($admin == false) {
  100. $admin = $this->getInstance($code);
  101. } else if ($admin->hasChild($code)) {
  102. $admin = $admin->getChild($code);
  103. }
  104. }
  105. return $admin;
  106. }
  107. /**
  108. * Returns a new admin instance depends on the given code
  109. *
  110. * @param $id
  111. * @return \Sonata\AdminBundle\Admin\AdminInterface
  112. */
  113. public function getInstance($id)
  114. {
  115. return $this->container->get($id);
  116. }
  117. /**
  118. * @return null|\Symfony\Component\DependencyInjection\ContainerInterface
  119. */
  120. public function getContainer()
  121. {
  122. return $this->container;
  123. }
  124. /**
  125. * @param array $adminGroups
  126. * @return void
  127. */
  128. public function setAdminGroups(array $adminGroups)
  129. {
  130. $this->adminGroups = $adminGroups;
  131. }
  132. /**
  133. * @return array
  134. */
  135. public function getAdminGroups()
  136. {
  137. return $this->adminGroups;
  138. }
  139. /**
  140. * @param array $adminServiceIds
  141. * @return void
  142. */
  143. public function setAdminServiceIds(array $adminServiceIds)
  144. {
  145. $this->adminServiceIds = $adminServiceIds;
  146. }
  147. /**
  148. * @return array
  149. */
  150. public function getAdminServiceIds()
  151. {
  152. return $this->adminServiceIds;
  153. }
  154. /**
  155. * @param array $adminClasses
  156. * @return void
  157. */
  158. public function setAdminClasses(array $adminClasses)
  159. {
  160. $this->adminClasses = $adminClasses;
  161. }
  162. /**
  163. * @return array
  164. */
  165. public function getAdminClasses()
  166. {
  167. return $this->adminClasses;
  168. }
  169. /**
  170. * @param array $templates
  171. * @return void
  172. */
  173. public function setTemplates(array $templates)
  174. {
  175. $this->templates = $templates;
  176. }
  177. /**
  178. * @return array
  179. */
  180. public function getTemplates()
  181. {
  182. return $this->templates;
  183. }
  184. /**
  185. * @param $name
  186. * @return null|string
  187. */
  188. public function getTemplate($name)
  189. {
  190. if (isset($this->templates[$name])) {
  191. return $this->templates[$name];
  192. }
  193. return null;
  194. }
  195. /**
  196. * @return string
  197. */
  198. public function getTitleLogo()
  199. {
  200. return $this->titleLogo;
  201. }
  202. /**
  203. * @return string
  204. */
  205. public function getTitle()
  206. {
  207. return $this->title;
  208. }
  209. }