home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (devel_generate.module)

This example Drupal source code file (devel_generate.module) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

10, array, default_value, description, function, generate, if, of, options, php, title, true, type

The devel_generate.module Drupal example source code

<?php
// $Id: devel_generate.module,v 1.13 2010/12/06 15:28:53 weitzman Exp $

/**
 * Implementation of hook_menu().
 */
function devel_generate_menu() {
  $items = array();

  $items['admin/config/development/generate/user'] = array(
    'title' => 'Generate users',
    'description' => 'Generate a given number of users. Optionally delete current users.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('devel_generate_users_form'),
    'access arguments' => array('administer users'),
  );
  $items['admin/config/development/generate/content'] = array(
    'title' => 'Generate content',
    'description' => 'Generate a given number of nodes and comments. Optionally delete current items.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('devel_generate_content_form'),
    'access arguments' => array('administer nodes'),
  );
  if (module_exists('taxonomy')) {
    $items['admin/config/development/generate/taxonomy'] = array(
      'title' => 'Generate terms',
      'description' => 'Generate a given number of terms. Optionally delete current terms.',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('devel_generate_term_form'),
      'access arguments' => array('administer taxonomy'),
    );
    $items['admin/config/development/generate/vocabs'] = array(
      'title' => 'Generate vocabularies',
      'description' => 'Generate a given number of vocabularies. Optionally delete current vocabularies.',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('devel_generate_vocab_form'),
      'access arguments' => array('administer taxonomy'),
    );
  }
  $items['admin/config/development/generate/menu'] = array(
    'title' => 'Generate menus',
    'description' => 'Generate a given number of menus and menu links. Optionally delete current menus.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('devel_generate_menu_form'),
    'access arguments' => array('administer menu'),
  );

  return $items;
}

function devel_generate_users_form() {
  $form['num'] = array(
    '#type' => 'textfield',
    '#title' => t('How many users would you like to generate?'),
    '#default_value' => 50,
    '#size' => 10,
  );
  $form['kill_users'] = array(
    '#type' => 'checkbox',
    '#title' => t('Delete all users (except user id 1) before generating new users.'),
    '#default_value' => FALSE,
  );
  $options = user_roles(TRUE);
  unset($options[DRUPAL_AUTHENTICATED_RID]);
  $form['roles'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Which roles should the users receive?'),
    '#description' => t('Users always receive the <em>authenticated user</em> role.'),
    '#options' => $options,
  );

  $options = array(1 => t('Now'));
  foreach (array(3600, 86400, 604800, 2592000, 31536000) as $interval) {
    $options[$interval] = format_interval($interval, 1) . ' ' . t('ago');
  }
  $form['time_range'] = array(
    '#type' => 'select',
    '#title' => t('How old should user accounts be?'),
    '#description' => t('User ages will be distributed randomly from the current time, back to the selected time.'),
    '#options' => $options,
    '#default_value' => 604800,
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  return $form;
}

function devel_generate_users_form_submit($form_id, &$form_state) {
  module_load_include('inc', 'devel_generate');
  $values = $form_state['values'];
  devel_create_users($values['num'], $values['kill_users'], $values['time_range'], $values['roles']);
}

function devel_generate_content_form() {
  $options = array();

  if (module_exists('content')) {
    $types = content_types();
    foreach ($types as $type) {
      $warn = '';
      if (count($type['fields'])) {
        $warn = t('. This type contains CCK fields which will only be populated by fields that implement the content_generate hook.');
      }
      $options[$type['type']] = t($type['name']). $warn;
    }
  }
  else {
    $types = node_type_get_types();
    $suffix = '';
    foreach ($types as $type) {
      if (module_exists('comment')) {
        $default = variable_get('comment_' . $type->type, COMMENT_NODE_OPEN);
        $map = array(t('Hidden'), t('Closed'), t('Open'));
        $suffix = '<small>. ' . t('Comments: ') . $map[$default]. '</small>';
      }
      $options[$type->type] = t($type->name) . $suffix;
    }
  }
  // we cannot currently generate valid polls.
  unset($options['poll']);

  if (empty($options)) {
    drupal_set_message(t('You do not have any content types that can be generated. <a href="@create-type">Go create a new content type</a> already!</a>', array('@create-type' => url('admin/structure/types/add'))), 'error', FALSE);
    return;
  }

  $form['node_types'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Content types'),
    '#options' => $options,
    '#default_value' => array_keys($options),
  );
  if (module_exists('checkall')) $form['node_types']['#checkall'] = TRUE;
  $form['kill_content'] = array(
    '#type' => 'checkbox',
    '#title' => t('<strong>Delete all content</strong> in these content types before generating new content.'),
    '#default_value' => FALSE,
  );
  $form['num_nodes'] = array(
    '#type' => 'textfield',
    '#title' => t('How many nodes would you like to generate?'),
    '#default_value' => 50,
    '#size' => 10,
  );

  $options = array(1 => t('Now'));
  foreach (array(3600, 86400, 604800, 2592000, 31536000) as $interval) {
    $options[$interval] = format_interval($interval, 1) . ' ' . t('ago');
  }
  $form['time_range'] = array(
    '#type' => 'select',
    '#title' => t('How far back in time should the nodes be dated?'),
    '#description' => t('Node creation dates will be distributed randomly from the current time, back to the selected time.'),
    '#options' => $options,
    '#default_value' => 604800,
  );

  $form['max_comments'] = array(
    '#type' => module_exists('comment') ? 'textfield' : 'value',
    '#title' => t('Maximum number of comments per node.'),
    '#description' => t('You must also enable comments for the content types you are generating. Note that some nodes will randomly receive zero comments. Some will receive the max.'),
    '#default_value' => 0,
    '#size' => 3,
    '#access' => module_exists('comment'),
  );
  $form['title_length'] = array(
    '#type' => 'textfield',
    '#title' => t('Max word length of titles'),
    '#default_value' => 4,
    '#size' => 10,
  );
  $form['add_alias'] = array(
    '#type' => 'checkbox',
    '#disabled' => !module_exists('path'),
    '#description' => t('Requires path.module'),
    '#title' => t('Add an url alias for each node.'),
    '#default_value' => FALSE,
  );
  $form['add_statistics'] = array(
    '#type' => 'checkbox',
    '#title' => t('Add statistics for each node (node_counter table).'),
    '#default_value' => TRUE,
    '#access' => module_exists('statistics'),
  );

  unset($options);
  $options[LANGUAGE_NONE] = t('Language neutral');
  if (module_exists('locale')) {
    $options += locale_language_list();
  }
  $form['add_language'] = array(
    '#type' => 'select',
    '#title' => t('Set language on nodes'),
    '#multiple' => TRUE,
    '#disabled' => !module_exists('locale'),
    '#description' => t('Requires locale.module'),
    '#options' => $options,
    '#default_value' => LANGUAGE_NONE,
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  $form['#redirect'] = FALSE;

  return $form;
}

function devel_generate_content_form_submit($form_id, &$form_state) {
  module_load_include('inc', 'devel_generate', 'devel_generate');
  $form_state['values']['node_types'] = array_filter($form_state['values']['node_types']);
  if ($form_state['values']['num_nodes'] <= 50 && $form_state['values']['max_comments'] <= 10) {
    module_load_include('inc', 'devel_generate');
    devel_generate_content($form_state);
  }
  else {
    module_load_include('inc', 'devel_generate', 'devel_generate_batch');
    devel_generate_batch_content($form_state);
  }
}

function devel_generate_term_form() {
  $options = array();
  foreach (taxonomy_get_vocabularies() as $vid => $vocab) {
    $options[$vid] = $vocab->machine_name;
  }
  $form['vids'] = array(
    '#type' => 'select',
    '#multiple' => TRUE,
    '#title' => t('Vocabularies'),
    '#required' => TRUE,
    '#options' => $options,
    '#description' => t('Restrict terms to these vocabularies.'),
  );
  $form['num_terms'] = array(
    '#type' => 'textfield',
    '#title' => t('Number of terms?'),
    '#default_value' => 10,
    '#size' => 10,
  );
  $form['title_length'] = array(
    '#type' => 'textfield',
    '#title' => t('Max word length of term names'),
    '#default_value' => 12,
    '#size' => 10,
  );
  $form['kill_taxonomy'] = array(
    '#type' => 'checkbox',
    '#title' => t('Delete existing terms in specified vocabularies before generating new terms.'),
    '#default_value' => FALSE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  return $form;
}

function devel_generate_vocab_form() {
  $form['num_vocabs'] = array(
    '#type' => 'textfield',
    '#title' => t('Number of vocabularies?'),
    '#default_value' => 1,
    '#size' => 10,
  );
  $form['title_length'] = array(
    '#type' => 'textfield',
    '#title' => t('Max word length of vocabulary names'),
    '#default_value' => 12,
    '#size' => 10,
  );
  $form['kill_taxonomy'] = array(
    '#type' => 'checkbox',
    '#title' => t('Delete existing vocabularies before generating new ones.'),
    '#default_value' => FALSE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  return $form;
}

function devel_generate_term_form_submit($form_id, &$form_state) {
  module_load_include('inc', 'devel_generate');
  $vocabs = taxonomy_vocabulary_load_multiple($form_state['values']['vids']);
  devel_generate_term_data($vocabs, $form_state['values']['num_terms'], $form_state['values']['title_length'], $form_state['values']['kill_taxonomy']);
}

function devel_generate_vocab_form_submit($form_id, &$form_state) {
  module_load_include('inc', 'devel_generate');
  devel_generate_vocab_data($form_state['values']['num_vocabs'], $form_state['values']['title_length'], $form_state['values']['kill_taxonomy']);
}

function devel_generate_node_insert($node) {
  if (isset($node->devel_generate)) {
    $results = $node->devel_generate;

    if (!empty($results['max_comments']) && $node->comment >= COMMENT_NODE_OPEN) {
      devel_generate_add_comments($node, $results['users'], $results['max_comments'], $results['title_length']);
    }


    // Add an url alias. Cannot happen before save because we don't know the nid.
    if (!empty($results['add_alias'])) {
      $path = array(
        'source' => 'node/' . $node->nid,
        'alias' => 'node-' . $node->nid . '-' . $node->type,
      );
      path_save($path);
    }

    // Add node statistics.
    if (!empty($results['add_statistics']) && module_exists('statistics')) {
      devel_generate_add_statistics($node);
    }
  }
}

function devel_generate_set_message($msg, $type = 'status') {
  $function  = function_exists('drush_log') ? 'drush_log' : 'drupal_set_message';
  $function($msg, $type);
}

function devel_generate_menu_form() {
  $menu_enabled = module_exists('menu');
  if ($menu_enabled) {
    $menus = array('__new-menu__' => t('Create new menu(s)')) + menu_get_menus();
  }
  else {
    $menus = menu_list_system_menus();
  }
  $form['existing_menus'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Generate links for these menus'),
    '#options' => $menus,
    '#default_value' => array('__new-menu__'),
    '#required' => TRUE,
  );
  if ($menu_enabled) {
    $form['num_menus'] = array(
      '#type' => 'textfield',
      '#title' => t('Number of new menus to create'),
      '#default_value' => 2,
      '#size' => 10,
      '#states' => array(
        'visible' => array(
          ':input[name=existing_menus[__new-menu__]]' => array('checked' => TRUE),
        ),
      ),
    );
  }
  $form['num_links'] = array(
    '#type' => 'textfield',
    '#title' => t('Number of links to generate'),
    '#default_value' => 50,
    '#size' => 10,
    '#required' => TRUE,
  );
  $form['title_length'] = array(
    '#type' => 'textfield',
    '#title' => t('Max word length of menu and menu link names'),
    '#default_value' => 12,
    '#size' => 10,
    '#required' => TRUE,
  );
  $form['link_types'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Types of links to generate'),
    '#options' => array(
      'node' => t('Nodes'),
      'front' => t('Front page'),
      'external' => t('External'),
    ),
    '#default_value' => array('node', 'front', 'external'),
    '#required' => TRUE,
  );
  $form['max_depth'] = array(
    '#type' => 'select',
    '#title' => t('Maximum link depth'),
    '#options' => range(0, MENU_MAX_DEPTH),
    '#default_value' => floor(MENU_MAX_DEPTH / 2),
    '#required' => TRUE,
  );
  unset($form['max_depth']['#options'][0]);
  $form['max_width'] = array(
    '#type' => 'textfield',
    '#title' => t('Maximum menu width'),
    '#default_value' => 6,
    '#size' => 10,
    '#description' => t("Limit the width of the generated menu's first level of links to a certain number of items."),
    '#required' => TRUE,
  );
  $form['kill'] = array(
    '#type' => 'checkbox',
    '#title' => t('Delete existing custom generated menus and menu links before generating new ones.'),
    '#default_value' => FALSE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  return $form;
}

function devel_generate_menu_form_submit($form_id, &$form_state) {
  // If the create new menus checkbox is off, set the number of new menus to 0.
  if (!isset($form_state['values']['existing_menus']['__new-menu__']) || !$form_state['values']['existing_menus']['__new-menu__']) {
    $form_state['values']['num_menus'] = 0;
  }
  module_load_include('inc', 'devel_generate');
  devel_generate_menu_data($form_state['values']['num_menus'], $form_state['values']['existing_menus'], $form_state['values']['num_links'], $form_state['values']['title_length'], $form_state['values']['link_types'], $form_state['values']['max_depth'], $form_state['values']['max_width'], $form_state['values']['kill']);
}

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal devel_generate.module source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.