ToolbarController.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. namespace Drupal\admin_toolbar_tools\Controller;
  3. use Drupal\Component\Datetime\TimeInterface;
  4. use Drupal\Core\Cache\CacheBackendInterface;
  5. use Drupal\Core\Controller\ControllerBase;
  6. use Drupal\Core\CronInterface;
  7. use Drupal\Core\Menu\ContextualLinkManagerInterface;
  8. use Drupal\Core\Menu\LocalActionManagerInterface;
  9. use Drupal\Core\Menu\LocalTaskManagerInterface;
  10. use Drupal\Core\Menu\MenuLinkManagerInterface;
  11. use Drupal\Core\Plugin\CachedDiscoveryClearerInterface;
  12. use Symfony\Component\DependencyInjection\ContainerInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. use Drupal\Core\PhpStorage\PhpStorageFactory;
  16. /**
  17. * Class ToolbarController.
  18. *
  19. * @package Drupal\admin_toolbar_tools\Controller
  20. */
  21. class ToolbarController extends ControllerBase {
  22. /**
  23. * A cron instance.
  24. *
  25. * @var \Drupal\Core\CronInterface
  26. */
  27. protected $cron;
  28. /**
  29. * A menu link manager instance.
  30. *
  31. * @var \Drupal\Core\Menu\MenuLinkManagerInterface
  32. */
  33. protected $menuLinkManager;
  34. /**
  35. * A context link manager instance.
  36. *
  37. * @var \Drupal\Core\Menu\ContextualLinkManagerInterface
  38. */
  39. protected $contextualLinkManager;
  40. /**
  41. * A local task manager instance.
  42. *
  43. * @var \Drupal\Core\Menu\LocalTaskManagerInterface
  44. */
  45. protected $localTaskLinkManager;
  46. /**
  47. * A local action manager instance.
  48. *
  49. * @var \Drupal\Core\Menu\LocalActionManagerInterface
  50. */
  51. protected $localActionLinkManager;
  52. /**
  53. * A cache backend interface instance.
  54. *
  55. * @var \Drupal\Core\Cache\CacheBackendInterface
  56. */
  57. protected $cacheRender;
  58. /**
  59. * A date time instance.
  60. *
  61. * @var \Drupal\Component\Datetime\TimeInterface
  62. */
  63. protected $time;
  64. /**
  65. * A request stack symfony instance.
  66. *
  67. * @var \Symfony\Component\HttpFoundation\RequestStack
  68. */
  69. protected $requestStack;
  70. /**
  71. * A plugin cache clear instance.
  72. *
  73. * @var \Drupal\Core\Plugin\CachedDiscoveryClearerInterface
  74. */
  75. protected $pluginCacheClearer;
  76. /**
  77. * Constructs a ToolbarController object.
  78. *
  79. * @param \Drupal\Core\CronInterface $cron
  80. * A cron instance.
  81. * @param \Drupal\Core\Menu\MenuLinkManagerInterface $menuLinkManager
  82. * A menu link manager instance.
  83. * @param \Drupal\Core\Menu\ContextualLinkManagerInterface $contextualLinkManager
  84. * A context link manager instance.
  85. * @param \Drupal\Core\Menu\LocalTaskManagerInterface $localTaskLinkManager
  86. * A local task manager instance.
  87. * @param \Drupal\Core\Menu\LocalActionManagerInterface $localActionLinkManager
  88. * A local action manager instance.
  89. * @param \Drupal\Core\Cache\CacheBackendInterface $cacheRender
  90. * A cache backend interface instance.
  91. * @param \Drupal\Component\Datetime\TimeInterface $time
  92. * A date time instance.
  93. * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
  94. * A request stack symfony instance.
  95. * @param \Drupal\Core\Plugin\CachedDiscoveryClearerInterface $plugin_cache_clearer
  96. * A plugin cache clear instance.
  97. */
  98. public function __construct(CronInterface $cron,
  99. MenuLinkManagerInterface $menuLinkManager,
  100. ContextualLinkManagerInterface $contextualLinkManager,
  101. LocalTaskManagerInterface $localTaskLinkManager,
  102. LocalActionManagerInterface $localActionLinkManager,
  103. CacheBackendInterface $cacheRender,
  104. TimeInterface $time,
  105. RequestStack $request_stack,
  106. CachedDiscoveryClearerInterface $plugin_cache_clearer) {
  107. $this->cron = $cron;
  108. $this->menuLinkManager = $menuLinkManager;
  109. $this->contextualLinkManager = $contextualLinkManager;
  110. $this->localTaskLinkManager = $localTaskLinkManager;
  111. $this->localActionLinkManager = $localActionLinkManager;
  112. $this->cacheRender = $cacheRender;
  113. $this->time = $time;
  114. $this->requestStack = $request_stack;
  115. $this->pluginCacheClearer = $plugin_cache_clearer;
  116. }
  117. /**
  118. * {@inheritdoc}
  119. */
  120. public static function create(ContainerInterface $container) {
  121. return new static(
  122. $container->get('cron'),
  123. $container->get('plugin.manager.menu.link'),
  124. $container->get('plugin.manager.menu.contextual_link'),
  125. $container->get('plugin.manager.menu.local_task'),
  126. $container->get('plugin.manager.menu.local_action'),
  127. $container->get('cache.render'),
  128. $container->get('datetime.time'),
  129. $container->get('request_stack'),
  130. $container->get('plugin.cache_clearer')
  131. );
  132. }
  133. /**
  134. * Reload the previous page.
  135. */
  136. public function reloadPage() {
  137. $request = $this->requestStack->getCurrentRequest();
  138. if ($request->server->get('HTTP_REFERER')) {
  139. return $request->server->get('HTTP_REFERER');
  140. }
  141. else {
  142. return '/';
  143. }
  144. }
  145. /**
  146. * Flushes all caches.
  147. */
  148. public function flushAll() {
  149. $this->messenger()->addMessage($this->t('All caches cleared.'));
  150. drupal_flush_all_caches();
  151. return new RedirectResponse($this->reloadPage());
  152. }
  153. /**
  154. * Flushes css and javascript caches.
  155. */
  156. public function flushJsCss() {
  157. $this->state()
  158. ->set('system.css_js_query_string', base_convert($this->time->getCurrentTime(), 10, 36));
  159. $this->messenger()->addMessage($this->t('CSS and JavaScript cache cleared.'));
  160. return new RedirectResponse($this->reloadPage());
  161. }
  162. /**
  163. * Flushes plugins caches.
  164. */
  165. public function flushPlugins() {
  166. $this->pluginCacheClearer->clearCachedDefinitions();
  167. $this->messenger()->addMessage($this->t('Plugins cache cleared.'));
  168. return new RedirectResponse($this->reloadPage());
  169. }
  170. /**
  171. * Resets all static caches.
  172. */
  173. public function flushStatic() {
  174. drupal_static_reset();
  175. $this->messenger()->addMessage($this->t('Static cache cleared.'));
  176. return new RedirectResponse($this->reloadPage());
  177. }
  178. /**
  179. * Clears all cached menu data.
  180. */
  181. public function flushMenu() {
  182. menu_cache_clear_all();
  183. $this->menuLinkManager->rebuild();
  184. $this->contextualLinkManager->clearCachedDefinitions();
  185. $this->localTaskLinkManager->clearCachedDefinitions();
  186. $this->localActionLinkManager->clearCachedDefinitions();
  187. $this->messenger()->addMessage($this->t('Routing and links cache cleared.'));
  188. return new RedirectResponse($this->reloadPage());
  189. }
  190. /**
  191. * Clears all cached views data.
  192. */
  193. public function flushViews() {
  194. views_invalidate_cache();
  195. $this->messenger()->addMessage($this->t('Views cache cleared.'));
  196. return new RedirectResponse($this->reloadPage());
  197. }
  198. /**
  199. * Clears the twig cache.
  200. */
  201. public function flushTwig() {
  202. // @todo Update once Drupal 8.6 will be released.
  203. // @see https://www.drupal.org/node/2908461
  204. PhpStorageFactory::get('twig')->deleteAll();
  205. $this->messenger()->addMessage($this->t('Twig cache cleared.'));
  206. return new RedirectResponse($this->reloadPage());
  207. }
  208. /**
  209. * Run the cron.
  210. */
  211. public function runCron() {
  212. $this->cron->run();
  213. $this->messenger()->addMessage($this->t('Cron ran successfully.'));
  214. return new RedirectResponse($this->reloadPage());
  215. }
  216. /**
  217. * Clear the rendered cache.
  218. */
  219. public function cacheRender() {
  220. $this->cacheRender->invalidateAll();
  221. $this->messenger()->addMessage($this->t('Render cache cleared.'));
  222. return new RedirectResponse($this->reloadPage());
  223. }
  224. }