public function MenuLinksController::importMenuLinks in Structure Sync 8
Same name and namespace in other branches
- 2.x src/Controller/MenuLinksController.php \Drupal\structure_sync\Controller\MenuLinksController::importMenuLinks()
 
Function to import menu links.
When this function is used without the designated form, you should assign an array with a key value pair for form with key 'style' and value 'full', 'safe' or 'force' to apply that import style.
File
- src/
Controller/ MenuLinksController.php, line 96  
Class
- MenuLinksController
 - Controller for syncing menu links.
 
Namespace
Drupal\structure_sync\ControllerCode
public function importMenuLinks(array $form, FormStateInterface $form_state = NULL) {
  StructureSyncHelper::logMessage('Menu links import started');
  // Check if the there is a selection made in a form for what menus need to
  // be imported.
  if (is_object($form_state) && $form_state
    ->hasValue('import_menu_list')) {
    $menusSelected = $form_state
      ->getValue('import_menu_list');
    $menusSelected = array_filter($menusSelected, 'is_string');
  }
  if (array_key_exists('style', $form)) {
    $style = $form['style'];
  }
  else {
    StructureSyncHelper::logMessage('No style defined on menu links import', 'error');
    return;
  }
  StructureSyncHelper::logMessage('Using "' . $style . '" style for menu links import');
  // Get menu links from config.
  $menusConfig = $this->config
    ->get('menus');
  $menus = [];
  if (isset($menusSelected)) {
    foreach ($menusConfig as $menu) {
      if (in_array($menu['menu_name'], array_keys($menusSelected))) {
        $menus[] = $menu;
      }
    }
  }
  else {
    $menus = $menusConfig;
  }
  if (array_key_exists('drush', $form) && $form['drush'] === TRUE) {
    $context = [];
    $context['drush'] = TRUE;
    switch ($style) {
      case 'full':
        self::deleteDeletedMenuLinks($menus, $context);
        self::importMenuLinksFull($menus, $context);
        self::menuLinksImportFinishedCallback(NULL, NULL, NULL);
        break;
      case 'safe':
        self::importMenuLinksSafe($menus, $context);
        self::menuLinksImportFinishedCallback(NULL, NULL, NULL);
        break;
      case 'force':
        self::deleteMenuLinks($context);
        self::importMenuLinksForce($menus, $context);
        self::menuLinksImportFinishedCallback(NULL, NULL, NULL);
        break;
    }
    return;
  }
  // Import the menu links with the chosen style of importing.
  switch ($style) {
    case 'full':
      $batch = [
        'title' => $this
          ->t('Importing menu links...'),
        'operations' => [
          [
            '\\Drupal\\structure_sync\\Controller\\MenuLinksController::deleteDeletedMenuLinks',
            [
              $menus,
            ],
          ],
          [
            '\\Drupal\\structure_sync\\Controller\\MenuLinksController::importMenuLinksFull',
            [
              $menus,
            ],
          ],
        ],
        'finished' => '\\Drupal\\structure_sync\\Controller\\MenuLinksController::menuLinksImportFinishedCallback',
      ];
      batch_set($batch);
      break;
    case 'safe':
      $batch = [
        'title' => $this
          ->t('Importing menu links...'),
        'operations' => [
          [
            '\\Drupal\\structure_sync\\Controller\\MenuLinksController::importMenuLinksSafe',
            [
              $menus,
            ],
          ],
        ],
        'finished' => '\\Drupal\\structure_sync\\Controller\\MenuLinksController::menuLinksImportFinishedCallback',
      ];
      batch_set($batch);
      break;
    case 'force':
      $batch = [
        'title' => $this
          ->t('Importing menu links...'),
        'operations' => [
          [
            '\\Drupal\\structure_sync\\Controller\\MenuLinksController::deleteMenuLinks',
            [],
          ],
          [
            '\\Drupal\\structure_sync\\Controller\\MenuLinksController::importMenuLinksForce',
            [
              $menus,
            ],
          ],
        ],
        'finished' => '\\Drupal\\structure_sync\\Controller\\MenuLinksController::menuLinksImportFinishedCallback',
      ];
      batch_set($batch);
      break;
    default:
      StructureSyncHelper::logMessage('Style not recognized', 'error');
      break;
  }
}