MenuExportForm.php in Menu Import and Export 8
File
src/Form/MenuExportForm.php
View source
<?php
namespace Drupal\menu_export\Form;
use Drupal\menu_link_content\Entity\MenuLinkContent;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\system\Entity\Menu;
class MenuExportForm extends ConfigFormBase {
public function getFormId() {
return 'menu_export_form';
}
protected function getEditableConfigNames() {
return [
'menu_export.settings',
'menu_export.export_data',
];
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form = parent::buildForm($form, $form_state);
$menus = $this
->config('menu_export.settings')
->get('menus');
$menuEnt = Menu::loadMultiple($menus);
$menuData = array_map(function ($menuEnt) {
return $menuEnt
->label();
}, $menuEnt);
$form['menus_to_export'] = [
'#theme' => 'item_list',
'#title' => $this
->t('Menus to Export'),
'#items' => $menuData,
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Export Selected Menu Links'),
];
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
return parent::validateForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$this
->exportMenus();
$this
->messenger()
->addStatus('Menu Items exported successfully');
parent::submitForm($form, $form_state);
}
protected function exportMenus() {
$menus = $this
->config('menu_export.settings')
->get('menus');
if (empty($menus)) {
return false;
}
$config = $this
->config('menu_export.export_data');
$config
->delete()
->save();
foreach ($menus as $menu) {
$menuLinkIds = \Drupal::entityQuery('menu_link_content')
->condition('menu_name', $menu)
->execute();
$menuLinks = MenuLinkContent::loadMultiple($menuLinkIds);
foreach ($menuLinks as $link) {
if (!empty($link)) {
$linkArray = $link
->toArray();
foreach ($linkArray as $key => $linkArrayItem) {
$linkData[$key] = reset($linkArrayItem);
}
$config
->set($link
->id(), $linkData);
unset($linkData);
}
}
}
$config
->save();
return true;
}
}