asset_generate.module in Asset 7
Asset generate hooks and general functions.
File
modules/asset_generate/asset_generate.moduleView 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
Name![]() |
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(). |