You are here

asset_generate.module in Asset 7

Asset generate hooks and general functions.

File

modules/asset_generate/asset_generate.module
View source
<?php

/**
 * @file
 * Asset generate hooks and general functions.
 */

/**
 * Implements hook_menu().
 */
function asset_generate_menu() {
  $items['admin/config/development/generate/assets'] = array(
    'title' => 'Generate assets',
    'description' => 'Generate a given number of assets. Optionally delete current assets.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'asset_generate_assets_form',
    ),
    'access arguments' => array(
      'administer assets',
    ),
  );
  return $items;
}

/**
 * Form callback for asset generation
 *
 * @return null|array
 */
function asset_generate_assets_form() {
  $options = array();
  $types = asset_type_get_names();
  foreach ($types as $type => $name) {
    $options[$type] = array(
      'type' => $name,
    );
  }
  if (empty($options)) {
    drupal_set_message(t('You do not have any asset type that can be generated. Enable a module that provides an asset type'), 'error');
    return NULL;
  }
  $header = array(
    'type' => t('Asset type'),
  );
  $form['asset_types'] = array(
    '#type' => 'tableselect',
    '#header' => $header,
    '#options' => $options,
    '#required' => TRUE,
  );
  if (module_exists('checkall')) {
    $form['asset_types']['#checkall'] = TRUE;
  }
  $form['kill_assets'] = array(
    '#type' => 'checkbox',
    '#title' => t('<strong>Delete all assets</strong> in these asset types before generating new assets.'),
    '#default_value' => FALSE,
  );
  $form['num_assets'] = array(
    '#type' => 'textfield',
    '#title' => t('How many assets 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 assets be dated?'),
    '#description' => t('Asset creation dates will be distributed randomly from the current time, back to the selected time.'),
    '#options' => $options,
    '#default_value' => 604800,
  );
  $form['title_length'] = array(
    '#type' => 'textfield',
    '#title' => t('Maximum number of words in 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 assets'),
    '#multiple' => TRUE,
    '#disabled' => !module_exists('locale'),
    '#description' => t('Requires locale.module'),
    '#options' => $options,
    '#default_value' => array(
      LANGUAGE_NONE,
    ),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Generate'),
  );
  $form['#redirect'] = FALSE;
  return $form;
}

/**
 * FormAPI validation before generate assets.
 */
function asset_generate_assets_form_validate($form, &$form_state) {
  form_set_value($form['asset_types'], array_filter($form_state['values']['asset_types']), $form_state);
  if (!empty($form_state['values']['kill_assets']) && empty($form_state['values']['asset_types'])) {
    form_set_error('', t('Please select at least one asset type to delete the assets.'));
  }
}

/**
 * FormAPI submission to generate assets.
 */
function asset_generate_assets_form_submit($form, &$form_state) {
  module_load_include('inc', 'devel_generate', 'devel_generate');
  asset_generate_assets($form_state);
}

/**
 * The main API function for creating assets.
 *
 * See asset_generate_assets_form() for the supported keys in
 * $form_state['values'].
 * Other modules may participate by form_alter() on that form and then handling
 * their data during hook_asset_insert() or in their own submit handler for the
 * form.
 *
 * @param string $form_state
 * @return void
 */
function asset_generate_assets($form_state) {
  if (!empty($form_state['values']['kill_assets'])) {
    asset_generate_assets_kill($form_state['values']);
  }
  if (count($form_state['values']['asset_types'])) {

    // Generate assets.

    //asset_generate_assets_pre_asset($form_state['values']);
    $start = time();
    for ($i = 1; $i <= $form_state['values']['num_assets']; $i++) {
      asset_generate_assets_add_asset($form_state['values']);
      if (function_exists('drush_log') && $i % drush_get_option('feedback', 1000) == 0) {
        $now = time();
        drush_log(dt('Completed !feedback assets (!rate assets/min)', array(
          '!feedback' => drush_get_option('feedback', 1000),
          '!rate' => drush_get_option('feedback', 1000) * 60 / ($now - $start),
        )), 'ok');
        $start = $now;
      }
    }
  }
  devel_generate_set_message(format_plural($form_state['values']['num_assets'], '@count asset created.', 'Finished creating @count assets'));
}

/**
 * Handle the asset_generate_assets_form request to kill all of the assets.
 * This is used by both the batch and non-batch branches of the code.
 *
 * @param $values
 *   array of options obtained from asset_generate_assets_form.
 */
function asset_generate_assets_kill($values) {
  $results = db_select('asset', 'a')
    ->fields('a', array(
    'aid',
  ))
    ->condition('type', $values['asset_types'], 'IN')
    ->execute();
  foreach ($results as $result) {
    $aids[] = $result->aid;
  }
  if (!empty($aids)) {
    entity_delete_multiple('asset', $aids);
    drupal_set_message(t('Deleted %count assets.', array(
      '%count' => count($aids),
    )));
  }
}

/**
 * Create one asset. Used by both batch and non-batch code branches.
 *
 * @param $results
 *   array of options obtained from asset_generate_assets_form.
 */
function asset_generate_assets_add_asset(&$results) {
  $values = array();
  $values['type'] = array_rand($results['asset_types']);
  $values['uid'] = array_rand(devel_get_users());
  $values['created'] = REQUEST_TIME - mt_rand(0, $results['time_range']);

  // We should not use the random function if the value is not random
  if ($results['title_length'] < 2) {
    $values['title'] = devel_create_greeking(1, TRUE);
  }
  else {
    $values['title'] = devel_create_greeking(mt_rand(1, $results['title_length']), TRUE);
  }
  $asset = new Asset($values);

  // A flag to let hook_asset_insert() implementations know that this is a
  // generated asset.
  $asset->asset_generate = $results;

  // Populate all fields on behalf of field.module
  module_load_include('inc', 'devel_generate', 'devel_generate.fields');
  devel_generate_fields($asset, 'asset', $asset->type);
  $asset
    ->save();
}

Functions

Namesort descending Description
asset_generate_assets The main API function for creating assets.
asset_generate_assets_add_asset Create one asset. Used by both batch and non-batch code branches.
asset_generate_assets_form Form callback for asset generation
asset_generate_assets_form_submit FormAPI submission to generate assets.
asset_generate_assets_form_validate FormAPI validation before generate assets.
asset_generate_assets_kill Handle the asset_generate_assets_form request to kill all of the assets. This is used by both the batch and non-batch branches of the code.
asset_generate_menu Implements hook_menu().