3 namespace Drupal\admin_toolbar_tools\Controller;
5 use Drupal\Component\Datetime\TimeInterface;
6 use Drupal\Core\Cache\CacheBackendInterface;
7 use Drupal\Core\Controller\ControllerBase;
8 use Drupal\Core\CronInterface;
9 use Drupal\Core\Menu\ContextualLinkManagerInterface;
10 use Drupal\Core\Menu\LocalActionManagerInterface;
11 use Drupal\Core\Menu\LocalTaskManagerInterface;
12 use Drupal\Core\Menu\MenuLinkManagerInterface;
13 use Drupal\Core\Plugin\CachedDiscoveryClearerInterface;
14 use Symfony\Component\DependencyInjection\ContainerInterface;
15 use Symfony\Component\HttpFoundation\RedirectResponse;
16 use Symfony\Component\HttpFoundation\RequestStack;
17 use Drupal\Core\PhpStorage\PhpStorageFactory;
20 * Class ToolbarController.
22 * @package Drupal\admin_toolbar_tools\Controller
24 class ToolbarController extends ControllerBase {
29 * @var \Drupal\Core\CronInterface
34 * A menu link manager instance.
36 * @var \Drupal\Core\Menu\MenuLinkManagerInterface
38 protected $menuLinkManager;
41 * A context link manager instance.
43 * @var \Drupal\Core\Menu\ContextualLinkManagerInterface
45 protected $contextualLinkManager;
48 * A local task manager instance.
50 * @var \Drupal\Core\Menu\LocalTaskManagerInterface
52 protected $localTaskLinkManager;
55 * A local action manager instance.
57 * @var \Drupal\Core\Menu\LocalActionManagerInterface
59 protected $localActionLinkManager;
62 * A cache backend interface instance.
64 * @var \Drupal\Core\Cache\CacheBackendInterface
66 protected $cacheRender;
69 * A date time instance.
71 * @var \Drupal\Component\Datetime\TimeInterface
76 * A request stack symfony instance.
78 * @var \Symfony\Component\HttpFoundation\RequestStack
80 protected $requestStack;
83 * A plugin cache clear instance.
85 * @var \Drupal\Core\Plugin\CachedDiscoveryClearerInterface
87 protected $pluginCacheClearer;
90 * Constructs a ToolbarController object.
92 * @param \Drupal\Core\CronInterface $cron
94 * @param \Drupal\Core\Menu\MenuLinkManagerInterface $menuLinkManager
95 * A menu link manager instance.
96 * @param \Drupal\Core\Menu\ContextualLinkManagerInterface $contextualLinkManager
97 * A context link manager instance.
98 * @param \Drupal\Core\Menu\LocalTaskManagerInterface $localTaskLinkManager
99 * A local task manager instance.
100 * @param \Drupal\Core\Menu\LocalActionManagerInterface $localActionLinkManager
101 * A local action manager instance.
102 * @param \Drupal\Core\Cache\CacheBackendInterface $cacheRender
103 * A cache backend interface instance.
104 * @param \Drupal\Component\Datetime\TimeInterface $time
105 * A date time instance.
106 * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
107 * A request stack symfony instance.
108 * @param \Drupal\Core\Plugin\CachedDiscoveryClearerInterface $plugin_cache_clearer
109 * A plugin cache clear instance.
111 public function __construct(CronInterface $cron,
112 MenuLinkManagerInterface $menuLinkManager,
113 ContextualLinkManagerInterface $contextualLinkManager,
114 LocalTaskManagerInterface $localTaskLinkManager,
115 LocalActionManagerInterface $localActionLinkManager,
116 CacheBackendInterface $cacheRender,
118 RequestStack $request_stack,
119 CachedDiscoveryClearerInterface $plugin_cache_clearer) {
121 $this->menuLinkManager = $menuLinkManager;
122 $this->contextualLinkManager = $contextualLinkManager;
123 $this->localTaskLinkManager = $localTaskLinkManager;
124 $this->localActionLinkManager = $localActionLinkManager;
125 $this->cacheRender = $cacheRender;
127 $this->requestStack = $request_stack;
128 $this->pluginCacheClearer = $plugin_cache_clearer;
134 public static function create(ContainerInterface $container) {
136 $container->get('cron'),
137 $container->get('plugin.manager.menu.link'),
138 $container->get('plugin.manager.menu.contextual_link'),
139 $container->get('plugin.manager.menu.local_task'),
140 $container->get('plugin.manager.menu.local_action'),
141 $container->get('cache.render'),
142 $container->get('datetime.time'),
143 $container->get('request_stack'),
144 $container->get('plugin.cache_clearer')
149 * Reload the previous page.
151 public function reloadPage() {
152 $request = $this->requestStack->getCurrentRequest();
153 if ($request->server->get('HTTP_REFERER')) {
154 return $request->server->get('HTTP_REFERER');
162 * Flushes all caches.
164 public function flushAll() {
165 drupal_flush_all_caches();
166 drupal_set_message($this->t('All caches cleared.'));
167 return new RedirectResponse($this->reloadPage());
171 * Flushes css and javascript caches.
173 public function flushJsCss() {
175 ->set('system.css_js_query_string', base_convert($this->time->getCurrentTime(), 10, 36));
176 drupal_set_message($this->t('CSS and JavaScript cache cleared.'));
177 return new RedirectResponse($this->reloadPage());
181 * Flushes plugins caches.
183 public function flushPlugins() {
184 $this->pluginCacheClearer->clearCachedDefinitions();
185 drupal_set_message($this->t('Plugins cache cleared.'));
186 return new RedirectResponse($this->reloadPage());
190 * Resets all static caches.
192 public function flushStatic() {
193 drupal_static_reset();
194 drupal_set_message($this->t('Static cache cleared.'));
195 return new RedirectResponse($this->reloadPage());
199 * Clears all cached menu data.
201 public function flushMenu() {
202 menu_cache_clear_all();
203 $this->menuLinkManager->rebuild();
204 $this->contextualLinkManager->clearCachedDefinitions();
205 $this->localTaskLinkManager->clearCachedDefinitions();
206 $this->localActionLinkManager->clearCachedDefinitions();
207 drupal_set_message($this->t('Routing and links cache cleared.'));
208 return new RedirectResponse($this->reloadPage());
212 * Clears all cached views data.
214 public function flushViews() {
215 views_invalidate_cache();
216 drupal_set_message($this->t('Views cache cleared.'));
217 return new RedirectResponse($this->reloadPage());
221 * Clears the twig cache.
223 public function flushTwig() {
224 // @todo Update once Drupal 8.6 will be released.
225 // @see https://www.drupal.org/node/2908461
226 PhpStorageFactory::get('twig')->deleteAll();
227 drupal_set_message($this->t('Twig cache cleared.'));
228 return new RedirectResponse($this->reloadPage());
234 public function runCron() {
236 drupal_set_message($this->t('Cron ran successfully.'));
237 return new RedirectResponse($this->reloadPage());
241 * Clear the rendered cache.
243 public function cacheRender() {
244 $this->cacheRender->invalidateAll();
245 drupal_set_message($this->t('Render cache cleared.'));
246 return new RedirectResponse($this->reloadPage());