View source
<?php
namespace Drupal\views_ui\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Url;
use Drupal\views\ViewExecutable;
use Drupal\views\ViewEntityInterface;
use Drupal\views\Views;
use Drupal\views_ui\ViewUI;
use Drupal\views\ViewsData;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\ReplaceCommand;
class ViewsUIController extends ControllerBase {
protected $viewsData;
public function __construct(ViewsData $views_data) {
$this->viewsData = $views_data;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('views.views_data'));
}
public function reportFields() {
$views = $this
->entityManager()
->getStorage('view')
->loadMultiple();
$fields = array();
$handler_types = ViewExecutable::getHandlerTypes();
foreach ($views as $view) {
$executable = $view
->getExecutable();
$executable
->initDisplay();
foreach ($executable->displayHandlers as $display_id => $display) {
if ($executable
->setDisplay($display_id)) {
foreach ($handler_types as $type => $info) {
foreach ($executable
->getHandlers($type, $display_id) as $item) {
$table_data = $this->viewsData
->get($item['table']);
if (isset($table_data[$item['field']]) && isset($table_data[$item['field']][$type]) && ($field_data = $table_data[$item['field']][$type])) {
if (isset($field_data['field_name'])) {
$fields[$field_data['field_name']][$view
->id()] = $view
->id();
}
}
}
}
}
}
}
$header = array(
t('Field name'),
t('Used in'),
);
$rows = array();
foreach ($fields as $field_name => $views) {
$rows[$field_name]['data'][0]['data']['#plain_text'] = $field_name;
foreach ($views as $view) {
$rows[$field_name]['data'][1][] = $this
->l($view, new Url('entity.view.edit_form', array(
'view' => $view,
)));
}
$item_list = [
'#theme' => 'item_list',
'#items' => $rows[$field_name]['data'][1],
'#context' => [
'list_style' => 'comma-list',
],
];
$rows[$field_name]['data'][1] = [
'data' => $item_list,
];
}
ksort($rows);
$output = array(
'#type' => 'table',
'#header' => $header,
'#rows' => $rows,
'#empty' => t('No fields have been used in views yet.'),
);
return $output;
}
public function reportPlugins() {
$rows = Views::pluginList();
foreach ($rows as &$row) {
$views = [];
foreach ($row['views'] as $row_name => $view) {
$views[] = $this
->l($view, new Url('entity.view.edit_form', array(
'view' => $view,
)));
}
unset($row['views']);
$row['views']['data'] = [
'#theme' => 'item_list',
'#items' => $views,
'#context' => [
'list_style' => 'comma-list',
],
];
}
ksort($rows);
return array(
'#type' => 'table',
'#header' => array(
t('Type'),
t('Name'),
t('Provided by'),
t('Used in'),
),
'#rows' => $rows,
'#empty' => t('There are no enabled views.'),
);
}
public function ajaxOperation(ViewEntityInterface $view, $op, Request $request) {
$view
->{$op}()
->save();
if ($request->request
->get('js')) {
$list = $this
->entityManager()
->getListBuilder('view')
->render();
$response = new AjaxResponse();
$response
->addCommand(new ReplaceCommand('#views-entity-list', $list));
return $response;
}
return $this
->redirect('entity.view.collection');
}
public function autocompleteTag(Request $request) {
$matches = array();
$string = $request->query
->get('q');
$views = $this
->entityManager()
->getStorage('view')
->loadMultiple();
foreach ($views as $view) {
$tag = $view
->get('tag');
if ($tag && strpos($tag, $string) === 0) {
$matches[$tag] = $tag;
if (count($matches) >= 10) {
break;
}
}
}
return new JsonResponse($matches);
}
public function edit(ViewUI $view, $display_id = NULL) {
$name = $view
->label();
$data = $this->viewsData
->get($view
->get('base_table'));
if (isset($data['table']['base']['title'])) {
$name .= ' (' . $data['table']['base']['title'] . ')';
}
$build['#title'] = $name;
$build['edit'] = $this
->entityFormBuilder()
->getForm($view, 'edit', array(
'display_id' => $display_id,
));
$build['preview'] = $this
->entityFormBuilder()
->getForm($view, 'preview', array(
'display_id' => $display_id,
));
return $build;
}
}