You are here

function devel_generate_links in Devel 7

Generates menu links in a tree structure.

2 calls to devel_generate_links()
devel_generate_menu_form_submit in devel_generate/devel_generate.module
FormAPI submission to generate menus.
drush_devel_generate_menus in devel_generate/devel_generate.drush.inc
Command callback. Generate a number of menus and menu links.

File

devel_generate/devel_generate.inc, line 381

Code

function devel_generate_links($num_links, $menus, $title_length, $link_types, $max_depth, $max_width) {
  $links = array();
  $menus = array_keys(array_filter($menus));
  $link_types = array_keys(array_filter($link_types));
  $nids = array();
  for ($i = 1; $i <= $num_links; $i++) {

    // Pick a random menu.
    $menu_name = $menus[array_rand($menus)];

    // Build up our link.
    $link = array(
      'menu_name' => $menu_name,
      'options' => array(
        'devel' => TRUE,
      ),
      'weight' => mt_rand(-50, 50),
      'mlid' => 0,
      'link_title' => devel_generate_word(mt_rand(2, max(2, $title_length))),
    );
    $link['options']['attributes']['title'] = t('Description of @title.', array(
      '@title' => $link['link_title'],
    ));

    // For the first $max_width items, make first level links.
    if ($i <= $max_width) {
      $depth = 0;
    }
    else {

      // Otherwise, get a random parent menu depth.
      $depth = mt_rand(1, max(1, $max_depth - 1));
    }

    // Get a random parent link from the proper depth.
    do {
      $link['plid'] = db_select('menu_links', 'm')
        ->fields('m', array(
        'mlid',
      ))
        ->condition('m.menu_name', $menus, 'IN')
        ->condition('m.depth', $depth)
        ->range(0, 1)
        ->orderRandom()
        ->execute()
        ->fetchField();
      $depth--;
    } while (!$link['plid'] && $depth > 0);
    if (!$link['plid']) {
      $link['plid'] = 0;
    }
    $link_type = array_rand($link_types);
    switch ($link_types[$link_type]) {
      case 'node':

        // Grab a random node ID.
        $select = db_select('node', 'n')
          ->fields('n', array(
          'nid',
          'title',
        ))
          ->condition('n.status', 1)
          ->range(0, 1)
          ->orderRandom();

        // Don't put a node into the menu twice.
        if (!empty($nids[$menu_name])) {
          $select
            ->condition('n.nid', $nids[$menu_name], 'NOT IN');
        }
        $node = $select
          ->execute()
          ->fetchAssoc();
        if (isset($node['nid'])) {
          $nids[$menu_name][] = $node['nid'];
          $link['link_path'] = $link['router_path'] = 'node/' . $node['nid'];
          $link['link_title'] = $node['title'];
          break;
        }
      case 'external':
        $link['link_path'] = 'http://www.example.com/';
        break;
      case 'front':
        $link['link_path'] = $link['router_path'] = '<front>';
        break;
      default:
        $link['devel_link_type'] = $link_type;
        break;
    }
    menu_link_save($link);
    $links[$link['mlid']] = $link['link_title'];
  }
  return $links;
}