You are here

commerce_devel_generate.module in Commerce Devel 7

Same filename and directory in other branches
  1. 8.2 commerce_devel_generate/commerce_devel_generate.module

Contains Commerce Devel Generate module.

File

commerce_devel_generate/commerce_devel_generate.module
View source
<?php

/**
 * @file
 * Contains Commerce Devel Generate module.
 */

/**
 * Implements hook_menu().
 */
function commerce_devel_generate_menu() {
  $items = array();
  $items['admin/config/development/generate/product'] = array(
    'title' => 'Generate products',
    'description' => 'Generate a given number of products. Optionally delete current products.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'commerce_devel_generate_products_form',
    ),
    'access arguments' => array(
      'administer commerce_product entities',
    ),
  );
  $items['admin/config/development/generate/order'] = array(
    'title' => 'Generate orders',
    'description' => 'Generate a given number of orders.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'commerce_devel_generate_orders_form',
    ),
    'access arguments' => array(
      'administer orders',
    ),
  );
  return $items;
}

/**
 * Creates product generation form.
 *
 * @return array
 *   Form API array
 */
function commerce_devel_generate_products_form() {
  $options = array();
  $types = commerce_product_types();
  foreach ($types as $type => $type_array) {
    $options[$type] = $type_array['name'];
  }
  if (empty($options)) {
    drupal_set_message(t('You do not have any product 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 array();
  }

  // Loop over fields to get commerce_product_reference fields.
  foreach (field_info_fields() as $field_name => $field) {
    if ($field['type'] == 'commerce_product_reference' && $field['module'] == 'commerce_product_reference') {
      if (isset($field['bundles']['node'])) {
        foreach ($field['bundles']['node'] as $node_bundle) {
          $bundle = node_type_load($node_bundle);
          $node_bundles[$node_bundle] = $bundle->name;
        }
      }
    }
  }
  $form['product_types'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Product types'),
    '#options' => $options,
    '#default_value' => array_keys($options),
  );
  $form['kill_products'] = array(
    '#type' => 'checkbox',
    '#title' => t('<strong>Delete all products</strong> in these product types before generating new products.'),
    '#default_value' => FALSE,
  );
  if (isset($node_bundle)) {
    $form['generate_product_displays'] = array(
      '#type' => 'checkbox',
      '#title' => t('Generate product displays associated.'),
      '#default_value' => FALSE,
    );
    $form['node_types'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Content types'),
      '#options' => $node_bundles,
      '#states' => array(
        'invisible' => array(
          'input[name="generate_product_displays"]' => array(
            'checked' => FALSE,
          ),
        ),
      ),
      '#default_value' => array_keys($node_bundles),
    );
  }
  $form['num_products'] = array(
    '#type' => 'textfield',
    '#title' => t('How many products would you like to generate?'),
    '#default_value' => 50,
    '#size' => 10,
  );

  // Build an options array of allowed currency values.
  $options = array();
  foreach (commerce_currencies(TRUE) as $currency_code => $currency) {
    $options[$currency_code] = t('@code - @name', array(
      '@code' => $currency['code'],
      '@name' => $currency['name'],
    ));
  }
  $form['currency_code'] = array(
    '#title' => t('Currency code'),
    '#type' => 'select',
    '#default_value' => commerce_default_currency(),
    '#options' => $options,
  );
  $form['min_price'] = array(
    '#title' => t('Minimum price'),
    '#type' => 'textfield',
    '#default_value' => 1,
    '#element_validate' => array(
      '_commerce_devel_generate_price_validate',
    ),
    '#size' => 10,
  );
  $form['max_price'] = array(
    '#title' => t('Maximum price'),
    '#type' => 'textfield',
    '#default_value' => 500,
    '#element_validate' => array(
      '_commerce_devel_generate_price_validate',
    ),
    '#size' => 10,
  );
  $form['title_length'] = array(
    '#type' => 'textfield',
    '#title' => t('Max word length of titles'),
    '#default_value' => 4,
    '#size' => 10,
  );
  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 products'),
    '#multiple' => TRUE,
    '#disabled' => !module_exists('locale'),
    '#description' => t('Requires locale.module'),
    '#options' => $options,
    '#default_value' => array(
      LANGUAGE_NONE => LANGUAGE_NONE,
    ),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  $form['#redirect'] = FALSE;
  return $form;
}

/**
 * Validate function for the integer fields.
 */
function _commerce_devel_generate_price_validate($element, &$form_state) {
  if (!ctype_digit($element['#value'])) {
    form_error($element, t('The "!name" field has to be numeric.', array(
      '!name' => $element['#title'],
    )));
  }
}

/**
 * Generate products submit callback.
 *
 * @param array $form
 *   The form.
 * @param array $form_state
 *   The form state.
 */
function commerce_devel_generate_products_form_submit($form, &$form_state) {
  module_load_include('inc', 'commerce_devel_generate', 'devel_generate');
  $form_state['values']['product_types'] = array_filter($form_state['values']['product_types']);
  if ($form_state['values']['num_products'] <= 50) {
    commerce_devel_generate_products($form_state);
  }
  else {
    module_load_include('inc', 'commerce_devel_generate', 'devel_generate_batch');
    commerce_devel_generate_batch_products($form_state);
  }

  // Create product displays.
  if (isset($form_state['values']['node_types']) && !empty($form_state['values']['generate_product_displays'])) {
    module_load_include('inc', 'commerce_devel_generate', 'commerce_product_reference.devel_generate');
    module_load_include('inc', 'devel_generate', 'devel_generate');
    $form_state['values']['node_types'] = array_filter($form_state['values']['node_types']);
    $form_state['values']['num_nodes'] = $form_state['values']['num_products'];
    $form_state['values']['kill_content'] = 0;
    if ($form_state['values']['num_nodes'] <= 50) {
      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);
    }
  }
}

/**
 * Pre-process the devel_generate_content_form request.
 *
 * @param array $results
 *   An array of options obtained from devel_generate_products_form.
 */
function commerce_devel_generate_products_pre_product(&$results) {
  module_load_include('inc', 'devel_generate');

  // Get user id.
  $users = devel_get_users();
  $users = array_merge($users, array(
    '0',
  ));
  $results['users'] = $users;
}

/**
 * Order generation form.
 *
 * @return mixed
 *   Form API array
 */
function commerce_devel_generate_orders_form() {
  $statuses = array();
  foreach (commerce_order_statuses() as $order_status) {
    $statuses[$order_status['name']] = $order_status['title'];
  }
  $methods = array();
  foreach (commerce_payment_methods() as $method_id => $payment_method) {
    $methods[$method_id] = $payment_method['title'];
  }
  $form['amount'] = array(
    '#title' => t('How many orders would you like to generate?'),
    '#type' => 'textfield',
    '#default_value' => 10,
    '#size' => 10,
  );
  $form['kill_orders'] = array(
    '#title' => t('Delete all orders before batch creating new ones'),
    '#type' => 'checkbox',
  );
  $form['kill_transactions'] = array(
    '#title' => t('Delete all transactions associated with the deleted orders'),
    '#type' => 'checkbox',
    '#states' => array(
      'invisible' => array(
        ':input[name="kill_orders"]' => array(
          'checked' => FALSE,
        ),
      ),
    ),
  );
  $form['kill_customer_profiles'] = array(
    '#title' => t('Delete all customer profiles associated with the deleted orders'),
    '#type' => 'checkbox',
    '#states' => array(
      'invisible' => array(
        ':input[name="kill_orders"]' => array(
          'checked' => FALSE,
        ),
      ),
    ),
  );
  $form['order_statuses'] = array(
    '#type' => 'select',
    '#title' => t('Which possible order statuses should the orders have?'),
    '#default_value' => array(
      'completed',
    ),
    '#options' => $statuses,
    '#multiple' => TRUE,
  );
  $form['min_products'] = array(
    '#title' => t("What's the minimum amount of products contained in one order?"),
    '#type' => 'textfield',
    '#default_value' => 1,
    '#size' => 10,
  );
  $form['max_products'] = array(
    '#title' => t("What's the maximum amount of products contained in one order?"),
    '#type' => 'textfield',
    '#default_value' => 10,
    '#size' => 10,
  );
  $form['period'] = array(
    '#type' => 'fieldset',
    '#title' => t('Time period'),
    '#description' => t('The time period the generated orders should fall in.'),
  );
  $form['period']['start'] = array(
    '#type' => 'date',
    '#title' => 'Start',
    '#default_value' => array(
      'day' => format_date(REQUEST_TIME, 'custom', 'j'),
      'month' => format_date(REQUEST_TIME, 'custom', 'n'),
      'year' => format_date(REQUEST_TIME, 'custom', 'Y') - 1,
    ),
  );
  $form['period']['end'] = array(
    '#type' => 'date',
    '#title' => 'End',
  );
  $form['transactions'] = array(
    '#type' => 'fieldset',
    '#title' => t('Transactions'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );
  $form['transactions']['create_transactions'] = array(
    '#title' => t('Create transactions for the individual orders'),
    '#type' => 'checkbox',
  );
  $form['transactions']['payment_method'] = array(
    '#type' => 'select',
    '#title' => t('Which possible payment methods should transactions have?'),
    '#default_value' => array_keys($methods),
    '#options' => $methods,
    '#multiple' => TRUE,
  );
  $form['create_customer_profiles'] = array(
    '#title' => t('Create customer profiles for the individual orders'),
    '#type' => 'checkbox',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  $form['#redirect'] = FALSE;
  return $form;
}

/**
 * Generate orders validate callback.
 *
 * @param array $form
 *   The form.
 * @param array $form_state
 *   The form state.
 */
function commerce_devel_generate_orders_form_validate($form, &$form_state) {
  $amount = intval($form_state['values']['amount']);
  $upper = intval($form_state['values']['max_products']);
  $lower = intval($form_state['values']['min_products']);
  if ($amount < 1) {
    form_set_error('amount', t('You have to generate at least one order.'));
  }
  if ($upper < 0) {
    form_set_error('max_products', t('You must set a valid upperbound on the amount of products per order.'));
  }
  if ($lower < 0) {
    form_set_error('min_products', t('You must set a valid lowerbound on the amount of products per order.'));
  }
  if ($lower > $upper && $upper != 0) {
    form_set_error('min_products', t('The minimum amount should be less than the maximum amount.'));
  }
  if (!count($form_state['values']['order_statuses'])) {
    form_set_error('order_statuses', t('At least one possible order status should be selected.'));
  }
  if ($form_state['values']['create_transactions'] && !count($form_state['values']['payment_method'])) {
    form_set_error('payment_method', t('At least one possible payment method should be selected if you wish to create transaction for each order.'));
  }
}

/**
 * Generate orders submit callback.
 *
 * @param array $form
 *   The form.
 * @param array $form_state
 *   The form state.
 */
function commerce_devel_generate_orders_form_submit($form, &$form_state) {
  module_load_include('inc', 'commerce_devel_generate', 'devel_generate');
  module_load_include('inc', 'commerce_devel_generate', 'devel_generate_batch');
  commerce_devel_generate_batch_orders($form_state);
}

Functions

Namesort descending Description
commerce_devel_generate_menu Implements hook_menu().
commerce_devel_generate_orders_form Order generation form.
commerce_devel_generate_orders_form_submit Generate orders submit callback.
commerce_devel_generate_orders_form_validate Generate orders validate callback.
commerce_devel_generate_products_form Creates product generation form.
commerce_devel_generate_products_form_submit Generate products submit callback.
commerce_devel_generate_products_pre_product Pre-process the devel_generate_content_form request.
_commerce_devel_generate_price_validate Validate function for the integer fields.