Skip to content
Snippets Groups Projects
Commit 8e0760a0 authored by Aadil Khan's avatar Aadil Khan Committed by Yas Naoi
Browse files

Issue #3178887 by binoli.addweb, yas, Masami: Create All Launch Templates view...

Issue #3178887 by binoli.addweb, yas, Masami: Create All Launch Templates view and All Projects and add their menu under 'All'
parent e852d481
No related branches found
No related tags found
No related merge requests found
......@@ -764,7 +764,7 @@ function cloud_update_8140() {
function cloud_update_8141() {
$view_ids = [
'view.cloud_server_template',
'cloud_server_template',
];
\Drupal::service('cloud')->deleteViews($view_ids);
......@@ -773,3 +773,13 @@ function cloud_update_8141() {
];
\Drupal::service('cloud')->updateYmlDefinitions($files, 'cloud');
}
/**
* Add cloud_launch_template and cloud_project.all view.
*/
function cloud_update_8142() {
\Drupal::service('cloud')->updateYmlDefinitions([
'views.view.cloud_launch_template.yml',
'views.view.cloud_project.yml',
]);
}
......@@ -49,6 +49,18 @@ entity.cloud_server_template.refresh_view:
appears_on:
- entity.cloud_server_template.canonical
entity.cloud_server_template.refresh_view.all:
route_name: entity.cloud_server_template.list_update.all
title: 'Refresh'
appears_on:
- view.cloud_launch_template.all
entity.cloud_project.refresh_view.all:
route_name: entity.cloud_project.list_update.all
title: 'Refresh'
appears_on:
- view.cloud_project.all
entity.cloud_project.add_form:
route_name: entity.cloud_project.add_form
title: 'Add cloud project'
......
......@@ -74,6 +74,20 @@ entity.cloud_server_template.list_update:
options:
perm: 'edit any cloud server templates+edit own cloud server templates'
entity.cloud_server_template.list_update.all:
path: '/clouds/design/{cloud_server_template_type}/server_template/update'
defaults:
_controller: '\Drupal\cloud\Plugin\cloud\server_template\CloudServerTemplatePluginManager::updateCloudServerTemplateList'
requirements:
_permission: 'edit any cloud server templates+edit own cloud server templates,view all cloud service providers'
entity.cloud_project.list_update.all:
path: '/clouds/design/{cloud_server_template_type}/project/update'
defaults:
_controller: '\Drupal\cloud\Plugin\cloud\project\CloudProjectPluginManager::updateCloudProjectList'
requirements:
_permission: 'edit any cloud projects+edit own cloud projects,view all cloud service providers'
entity.cloud_config.locations:
path: '/clouds/cloud_config_location'
defaults:
......
langcode: en
status: true
dependencies:
module:
- cloud
- options
- user
id: cloud_launch_template
label: 'Cloud Launch Template'
module: views
description: 'Listing page showing all launch templates.'
tag: ''
base_table: cloud_server_template_field_data
base_field: id
display:
default:
display_plugin: default
id: default
display_title: Master
position: 0
display_options:
access:
type: perm
options:
perm: 'list cloud server template'
cache:
type: tag
options: { }
query:
type: views_query
options:
disable_sql_rewrite: false
distinct: false
replica: false
query_comment: ''
query_tags: { }
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
pager:
type: full
options:
items_per_page: 50
offset: 0
id: 0
total_pages: null
tags:
previous: ‹‹
next: ››
first: '« First'
last: 'Last »'
expose:
items_per_page: true
items_per_page_label: 'Items per page'
items_per_page_options: '10, 15, 20, 25, 50, 100'
items_per_page_options_all: true
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
quantity: 9
style:
type: table
options:
grouping: { }
row_class: ''
default_row_class: true
override: true
sticky: false
caption: ''
summary: ''
description: ''
columns:
cloud_context: cloud_context
name: name
field_namespace: field_namespace
field_object: field_object
operations: operations
info:
cloud_context:
sortable: true
default_sort_order: asc
align: ''
separator: ''
empty_column: false
responsive: ''
name:
sortable: true
default_sort_order: asc
align: ''
separator: ''
empty_column: false
responsive: ''
field_namespace:
sortable: true
default_sort_order: asc
align: ''
separator: ''
empty_column: false
responsive: ''
field_object:
align: ''
separator: ''
empty_column: false
responsive: ''
operations:
align: ''
separator: ''
empty_column: false
responsive: ''
default: cloud_context
empty_table: false
row:
type: fields
fields:
cloud_context:
id: cloud_context
table: cloud_server_template_field_data
field: cloud_context
relationship: none
group_type: group
admin_label: ''
label: 'Cloud Service Provider ID'
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: cloud_id_formatter
settings: { }
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
entity_type: cloud_server_template
entity_field: cloud_context
plugin_id: field
name:
id: name
table: cloud_server_template_field_data
field: name
relationship: none
group_type: group
admin_label: ''
label: Name
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: true
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
entity_type: null
entity_field: name
plugin_id: field
field_namespace:
id: field_namespace
table: cloud_server_template__field_namespace
field: field_namespace
relationship: none
group_type: group
admin_label: ''
label: Namespace
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: entity_link
settings:
target_type: k8s_namespace
field_name: name
comma_separated: false
html_generator_class: ''
extra_route_parameter: ''
extra_route_parameter_entity_method: ''
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
plugin_id: field
field_object:
id: field_object
table: cloud_server_template__field_object
field: field_object
relationship: none
group_type: group
admin_label: ''
label: Object
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: list_default
settings: { }
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
plugin_id: field
operations:
id: operations
table: cloud_server_template
field: operations
relationship: none
group_type: group
admin_label: ''
label: Operations
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
destination: false
entity_type: cloud_server_template
plugin_id: entity_operations
filters:
type:
id: type
table: cloud_server_template_field_data
field: type
value:
k8s: k8s
entity_type: cloud_server_template
entity_field: type
plugin_id: bundle
expose:
operator_limit_selection: false
operator_list: { }
sorts: { }
title: 'All Launch Template List'
header: { }
footer: { }
empty:
area_text_custom:
id: area_text_custom
table: views
field: area_text_custom
relationship: none
group_type: group
admin_label: ''
empty: true
tokenize: false
content: 'There is no Launch Template yet.'
plugin_id: text_custom
relationships: { }
arguments:
type:
id: type
table: cloud_server_template_field_data
field: type
relationship: none
group_type: group
admin_label: ''
default_action: default
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: raw
default_argument_options:
index: 2
use_alias: false
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
items_per_page: 25
override: false
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
glossary: false
limit: 0
case: none
path_case: none
transform_dash: false
break_phrase: false
entity_type: cloud_server_template
entity_field: type
plugin_id: string
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- url.query_args
- user.permissions
tags:
- 'config:field.storage.cloud_server_template.field_namespace'
- 'config:field.storage.cloud_server_template.field_object'
all:
display_plugin: page
id: all
display_title: All
position: 1
display_options:
display_extenders: { }
path: clouds/design/%cloud_server_template_type/server_template
display_description: ''
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- url.query_args
- user.permissions
tags:
- 'config:field.storage.cloud_server_template.field_namespace'
- 'config:field.storage.cloud_server_template.field_object'
This diff is collapsed.
......@@ -120,6 +120,32 @@ class K8sMenuLinks extends DeriverBase implements ContainerDeriverInterface {
$links[$id]['parent'] = 'cloud.menu.cloud_links:cloud.service_providers.menu.all';
$links[$id]['weight'] = $weight++;
$id = "k8s.cloud_server_template.all";
$links[$id] = $base_plugin_definition;
$links[$id]['title'] = $this->t('@title', ['@title' => "K8s launch templates"]);
$links[$id]['route_name'] = "view.cloud_launch_template.all";
foreach ($entities as $entity) {
$server_template_type = $entity->get('type')->getString();
$links[$id]['route_parameters'] = ['cloud_server_template_type' => $server_template_type];
}
$links[$id]['menu_name'] = 'cloud.design.menu.all';
$links[$id]['parent'] = 'cloud.menu.cloud_links:cloud.design.menu.all';
$links[$id]['weight'] = $weight++;
$id = "k8s.cloud_project.all";
$links[$id] = $base_plugin_definition;
$links[$id]['title'] = $this->t('@title', ['@title' => "K8s cloud projects"]);
$links[$id]['route_name'] = "view.cloud_project.all";
foreach ($entities as $entity) {
$server_template_type = $entity->get('type')->getString();
$links[$id]['route_parameters'] = ['cloud_server_template_type' => $server_template_type];
}
$links[$id]['menu_name'] = 'cloud.design.menu.all';
$links[$id]['parent'] = 'cloud.menu.cloud_links:cloud.design.menu.all';
$links[$id]['weight'] = $weight++;
// Add dropdown menu for K8s.
$title = "K8s";
$id = "k8s.service_providers.menu";
......
......@@ -15,6 +15,7 @@ use Drupal\Core\Entity\EntityStorageException;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Render\Markup;
use Drupal\Core\Session\AccountProxyInterface;
......@@ -334,7 +335,7 @@ class K8sCloudProjectPlugin extends CloudPluginBase implements CloudProjectPlugi
'field' => 'field_username',
],
[
'data' => $this->t('k8s cluster'),
'data' => $this->t('K8s Cluster'),
'specifier' => 'field_k8s_clusters',
'field' => 'field_k8s_clusters',
],
......@@ -355,9 +356,29 @@ class K8sCloudProjectPlugin extends CloudPluginBase implements CloudProjectPlugi
* {@inheritdoc}
*/
public function buildListRow(CloudProjectInterface $entity) {
$row['field_username'] = [
'data' => $this->renderField($entity, 'field_username'),
];
$username = $entity->field_username->value ?? '';
if (!empty($username)) {
$users = $this->entityTypeManager->getStorage('user')
->loadByProperties(['name' => $username]);
$user = reset($users);
$uid = $user ? $user->id() : '';
$row['field_username'] = [
'data' => Link::createFromRoute(
$this->renderField($entity, 'field_username'),
'entity.user.canonical',
[
'user' => $uid,
]
)->toRenderable(),
];
}
else {
$row['field_username'] = [
'data' => $this->renderField($entity, 'field_username'),
];
}
$row['field_k8s_clusters'] = [
'data' => $this->renderField($entity, 'field_k8s_clusters'),
];
......
......@@ -67,7 +67,7 @@ class CloudDesignMenuLinks extends DeriverBase implements ContainerDeriverInterf
// Add dropdown menu for server template.
$id = "cloud_server.template";
$links[$id] = $base_plugin_definition;
$links[$id]['title'] = $this->t('Launch Templates');
$links[$id]['title'] = $this->t('Launch templates');
$links[$id]['parent'] = 'cloud.design.menu';
$links[$id]['expanded'] = TRUE;
$links[$id]['route_name'] = "view.cloud_config.list";
......
......@@ -84,6 +84,17 @@ class CloudMenuLinks extends DeriverBase implements ContainerDeriverInterface {
$links[$id]['weight'] = -100;
$links[$id]['expanded'] = TRUE;
// Add dropdown menu for all under design menu.
$title = "All";
$id = "cloud.design.menu.all";
$links[$id] = $base_plugin_definition;
$links[$id]['title'] = $this->t('@title', ['@title' => $title]);
$links[$id]['route_name'] = "view.cloud_config.list";
$links[$id]['menu_name'] = 'cloud.design.menu.all';
$links[$id]['parent'] = 'cloud.design.menu';
$links[$id]['weight'] = -100;
$links[$id]['expanded'] = TRUE;
// Add dropdown menu for cloud service provider.
$title = "Cloud service providers";
$id = "list.service_providers.menu";
......
......@@ -178,9 +178,21 @@ class CloudProjectPluginManager extends CloudPluginManager implements CloudProje
}
/**
* {@inheritdoc}
* Update cloud project list.
*
* @param string $cloud_context
* The cloud context.
* @param string $cloud_server_template_type
* The cloud server template type.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* An array of created object.
*/
public function updateCloudProjectList($cloud_context) {
public function updateCloudProjectList($cloud_context = '', $cloud_server_template_type = '') {
if (empty($cloud_context)) {
return $this->updateAllCloudProjectList($cloud_server_template_type);
}
$referer = $this->requestStack->getCurrentRequest()->headers->get('referer');
$plugin = $this->loadPluginVariant($cloud_context);
......@@ -204,4 +216,47 @@ class CloudProjectPluginManager extends CloudPluginManager implements CloudProje
return new RedirectResponse($referer);
}
/**
* Update all cloud project list.
*
* @param string $cloud_server_template_type
* The cloud server template type.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* An array of created object.
*/
public function updateAllCloudProjectList($cloud_server_template_type) {
$referer = $this->requestStack->getCurrentRequest()->headers->get('referer');
$cloud_configs = \Drupal::entityTypeManager()
->getStorage('cloud_config')
->loadByProperties([
'type' => $cloud_server_template_type,
]);
foreach ($cloud_configs ?: [] as $cloud_config) {
$cloud_context = $cloud_config->getCloudContext();
$plugin = $this->loadPluginVariant($cloud_context);
if ($plugin === FALSE) {
$this->messenger->addStatus($this->t('Cannot load cloud project plugin: %cloud_context', ['%cloud_context' => $cloud_context]));
}
elseif (!method_exists($plugin, 'updateCloudProjectList')) {
$this->messenger->addStatus($this->t('Unnecessary to update cloud projects.'));
}
else {
$updated = $plugin->updateCloudProjectList($cloud_context);
if ($updated !== FALSE) {
$this->messenger->addStatus($this->t('Updated cloud projects.'));
}
else {
$this->messenger->addError($this->t('Unable to update cloud projects.'));
}
}
}
return new RedirectResponse($referer);
}
}
......@@ -182,9 +182,21 @@ class CloudServerTemplatePluginManager extends CloudPluginManager implements Clo
}
/**
* {@inheritdoc}
* Update cloud server template list.
*
* @param string $cloud_context
* The cloud context.
* @param string $cloud_server_template_type
* The cloud server template type.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* An array of created object.
*/
public function updateCloudServerTemplateList($cloud_context) {
public function updateCloudServerTemplateList($cloud_context = '', $cloud_server_template_type = '') {
if (empty($cloud_context)) {
return $this->updateAllCloudServerTemplateList($cloud_server_template_type);
}
$referer = $this->requestStack->getCurrentRequest()->headers->get('referer');
$plugin = $this->loadPluginVariant($cloud_context);
......@@ -208,6 +220,49 @@ class CloudServerTemplatePluginManager extends CloudPluginManager implements Clo
return new RedirectResponse($referer);
}
/**
* Update all cloud server template list.
*
* @param string $cloud_server_template_type
* The cloud server template type.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* An array of created object.
*/
public function updateAllCloudServerTemplateList($cloud_server_template_type) {
$referer = $this->requestStack->getCurrentRequest()->headers->get('referer');
$cloud_configs = \Drupal::entityTypeManager()
->getStorage('cloud_config')
->loadByProperties([
'type' => $cloud_server_template_type,
]);
foreach ($cloud_configs ?: [] as $cloud_config) {
$cloud_context = $cloud_config->getCloudContext();
$plugin = $this->loadPluginVariant($cloud_context);
if ($plugin === FALSE) {
$this->messenger->addStatus($this->t('Cannot load launch template plugin: %cloud_context', ['%cloud_context' => $cloud_context]));
}
elseif (!method_exists($plugin, 'updateAllCloudServerTemplateList')) {
$this->messenger->addStatus($this->t('Unnecessary to update launch templates.'));
}
else {
$updated = $plugin->updateAllCloudServerTemplateList($cloud_context);
if ($updated !== FALSE) {
$this->messenger->addStatus($this->t('Updated launch templates.'));
}
else {
$this->messenger->addError($this->t('Unable to update launch templates.'));
}
}
}
return new RedirectResponse($referer);
}
/**
* {@inheritdoc}
*/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment